Mitasu is a Go tool that connects to a Gitea or Forgejo instance and exposes all of a user's repositories, issues, and pull requests as a 9p filesystem, enabling local read/write access with automatic synchronization back to the forge.
  • Go 92.9%
  • Makefile 4.3%
  • Shell 2%
  • Dockerfile 0.8%
Find a file
Mike 'Fuzzy' Partin cb7af1c673 fix: update golangci-lint configuration for vendor modules and linter rules
# Previous message:
config: update linter configuration

- Disable subjective style rules that block commits
- Add exclusions for acceptable patterns (ForgeClient naming, import aliases, unused params)
- Keep important checks for errors, security, and performance
- Fix deprecated configuration options
2026-04-07 18:16:38 -07:00
cmd/mitasu feat: add go9p dependency and improve argument handling 2026-04-07 18:16:00 -07:00
examples feat: add conflict detection and write-back synchronization for 9P filesystem 2026-04-02 10:23:02 -07:00
internal refactor: optimize slice initialization and error handling in forge and fs packages 2026-04-07 18:16:17 -07:00
pkg/models feat(forge): define data models and client interface 2026-04-02 08:48:33 -07:00
scripts feat: add development tool installation script and update makefile 2026-04-07 04:43:21 -07:00
vendor feat: add dynamic population support and debug functionality to henka abstraction 2026-04-06 07:06:04 -07:00
.editorconfig feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
.gitignore feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
.golangci.yml fix: update golangci-lint configuration for vendor modules and linter rules 2026-04-07 18:16:38 -07:00
.hadolint.yaml feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
.markdownlint.yml feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
.pre-commit-config.yaml feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
.yamllint.yml feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
CONTRIBUTING.md feat: add editorconfig, golangci-lint, and pre-commit configuration files 2026-04-07 04:34:01 -07:00
Dockerfile feat: add conflict detection and write-back synchronization for 9P filesystem 2026-04-02 10:23:02 -07:00
example.org.yaml chore(config): add configuration examples 2026-04-02 08:24:28 -07:00
example.single.yaml chore(config): add configuration examples 2026-04-02 08:24:28 -07:00
go.mod feat: add github.com/knusbaum/go9p dependency and remove indirect tag 2026-04-06 07:09:32 -07:00
go.sum feat: upgrade henka dependency to v0.1.0 and add client API implementation 2026-04-02 09:06:35 -07:00
Makefile feat: add development tool installation script and update makefile 2026-04-07 04:43:21 -07:00
README.md feat: add development tool installation script and update makefile 2026-04-07 04:43:21 -07:00
ROADMAP.md feat: add conflict detection and write-back synchronization for 9P filesystem 2026-04-02 10:23:02 -07:00

mitasu forge issues and pull requests as a filesystem

mitasu exposes your forge (Gitea/Forgejo) issues and pull requests as a 9P filesystem. Edit issue titles, descriptions, labels, assignees, and due dates by writing to plain text files. Browse aggregated dashboards as JSON.

Features

  • Readonly dashboards: JSON summaries of repositories, issues, and PRs.
  • Writeback synchronization: Modify issue fields by writing to files.
  • Conflict detection: Optimistic locking prevents overwriting concurrent changes.
  • Flexible authentication: Token or basic auth.
  • Multiple transports: TCP (:564) or Unix socket.
  • CLI tools: mitasu serve, mitasu check, mitasu mount.

Quick start

  1. Install

    git clone https://git.lan.thwap.org/thwap/mitasu
    cd mitasu
    go install ./cmd/mitasu
    
  2. Create a configuration file (~/.mitasu.yaml):

    forge:
      url: https://git.lan.thwap.org
      token: your-personal-access-token
    # 9p:
    #   addr: ":564"                 # listen on TCP port 564
    #   socket_path: /tmp/mitasu.sock # listen on Unix socket (default)
    
  3. Test the connection

    mitasu check
    
  4. Start the server

    mitasu serve
    
  5. Mount the filesystem

    sudo mkdir -p /mnt/mitasu
    sudo mount -t 9p -o trans=unix,uname=$(whoami),version=9p2000.u /tmp/mitasu.sock /mnt/mitasu
    

    Or use the helper:

    mitasu mount | sh
    
  6. Browse

    ls /mnt/mitasu/$USER
    cat /mnt/mitasu/$USER/dashboard | jq .
    

Configuration

See the example files:

Environment variables

All configuration fields can be overridden by environment variables:

Variable Overrides
MITASU_FORGE_URL forge.url
MITASU_TOKEN forge.token
MITASU_SOCKET 9p.socket_path
MITASU_ADDR 9p.addr

Authentication

  • Token (default): create a token in your forge settings with repo scope.
  • Basic auth: set auth_method: basic and provide username/password.

Filesystem layout

/<username>/
├── dashboard               # JSON summary of all repositories
└── <repo-name>/
    ├── dashboard           # JSON list of issues/PRs (first 50 each)
    ├── labels              # JSON array of repository labels
    ├── issues/
    │   └── 000001/
    │       ├── title       # writable
    │       ├── description # writable
    │       ├── labels      # writable (CSV)
    │       ├── assigned_to # writable (username or empty)
    │       ├── due_date    # writable (ISO 8601, issues only)
    │       └── status      # readonly (open/closed)
    └── prs/
        └── 000001/         # same fields as issues, except due_date ignored

Writable fields

  • title plain text, single line.
  • description plain text, multiline.
  • labels commaseparated list of label names.
  • assigned_to a single username; empty to unassign.
  • due_date ISO 8601 date (2025-12-31T23:59:59Z) or empty.

Changes are synchronized when the file is closed (writeback). If the issue/PR has been updated on the forge since the file was opened, the write will be rejected with a conflict error.

Usage examples

Edit an issue title

echo "Fix critical bug" > /mnt/mitasu/$USER/myproject/issues/42/title

Update labels

echo "bug,urgent" > /mnt/mitasu/$USER/myproject/issues/42/labels

View open issues across all repositories

cat /mnt/mitasu/$USER/dashboard | jq '.repositories[] | select(.issues.open > 0)'

System integration

systemd

Example unit files are provided in examples/.
Copy examples/mitasu.service to ~/.config/systemd/user/ and enable it:

systemctl --user enable --now mitasu.service

Docker

A multistage Dockerfile is included. Build and run with:

docker build -t mitasu .
docker run -p 564:564 mitasu

See examples/docker-compose.yml for a complete example.

Troubleshooting

  • Connection errors: run mitasu check to verify configuration and authentication.
  • Permission denied: ensure the Unix socket is writable by the user running mitasu serve.
  • Mount fails: ensure the 9p kernel module is loaded (modprobe 9p). On macOS, use mac9p.

Development

Code Quality

The project uses pre-commit hooks to ensure code quality. To set up:

# Install pre-commit
pip install pre-commit
# or on macOS with Homebrew
brew install pre-commit

# Install the hooks
make pre-commit

# Run hooks manually on all files
make pre-commit-all

The hooks include:

  • Go: gofmt, goimports, golangci-lint, go vet
  • YAML: Syntax validation and linting
  • Markdown: Style and formatting
  • Dockerfile: Best practices and security
  • General: Trailing whitespace, end-of-file newlines

Development Workflow

# Clone and setup
git clone https://git.lan.thwap.org/thwap/mitasu
cd mitasu
make install

# Build and test
make build
make test

# Run linters
make lint

# Format code
make format

See CONTRIBUTING.md for detailed contribution guidelines.

Project Planning

See ROADMAP.md for the project plan and completed features.

License

MIT (see LICENSE file).