An AI-native issue tracker built around a structured pipeline and an MCP server, so agents can read, update, and advance issues directly without leaving their tools.
Issues move through a defined pipeline — triage, research, spec, plan, dev — with explicit gates that enforce process. Gates block transitions until required artifacts exist (e.g. a triage result before leaving triage, a spec before leaving spec review). Phases can be skipped when they aren't needed.
Artifacts attach structured documents to issues: triage results, specs, plans, research notes, handoff summaries, comments. File-backed artifacts track on-disk paths so move_artifact can keep references in sync when files move.
The primary interface is an MCP server that exposes the full issue lifecycle to AI agents.
Issues
list_issues— list issues with optional filters:status,priority,size,limit,exclude_blocked,submitted_by,assigned_tocreate_issue— create a new issue; priority defaults to Mediumupdate_issue— update title, description, priority, or sizetransition_issue— advance through the pipeline with an optionalreason
Artifacts
add_artifact— attach an artifact to an issue; kinds:TriageResult,Spec,Plan,Research,ResearchTopic,Comment,Handoffupdate_artifact— update an artifact's body (StatusTransition artifacts and file path fields are immutable)remove_artifact— remove an artifact by sluglist_artifacts— list artifacts, with optionalkindsfilter anduncovered_onlyflag for uncovered ResearchTopicsmove_artifact— update path references across all issues when a file moves on disk (admin only)
Relationships
add_relationship— link two issues withDependsOn(with cycle detection) orRelatedTo(symmetric)remove_relationship— remove a relationship by kindlist_relationships— listdepends_on,blocks, andrelated_tofor an issue
issueboss://projects— list all accessible projectsissueboss://issues/{slug}— read a single issue with its relationships (e.g.issueboss://issues/IB-5)
TriageNeeded → TriageInProgress → TriageReview → ResearchNeeded → ResearchInProgress → ResearchReview
→ SpecNeeded → SpecInProgress → SpecReview
→ PlanNeeded → PlanInProgress → PlanReview
→ DevNeeded → DevInProgress → DevReview → Done
Phases are a DAG — after any Review state you can jump directly to any later phase or Done. Backlog and Canceled are reachable from most states.
Gated transitions require artifacts to exist before they pass:
| Transition | Required artifact |
|---|---|
| TriageInProgress → TriageReview | TriageResult |
| SpecInProgress → SpecReview | Spec |
| PlanInProgress → PlanReview | Plan |
| ResearchInProgress → ResearchReview | all ResearchTopics covered |
IssueBoss is configured via environment variables. Server variables use the ISSUEBOSS__ prefix (double underscore separator); CLI variables use a single underscore.
Server
| Variable | Default | Description |
|---|---|---|
ISSUEBOSS__DATABASE_URL |
(required) | Database connection URL (e.g. postgres://user:pass@localhost/issueboss) |
ISSUEBOSS__HTTP_PORT |
8080 |
HTTP/web port |
ISSUEBOSS__MCP_PORT |
8090 |
MCP server port |
ISSUEBOSS__GRPC_PORT |
9090 |
gRPC admin interface port |
CLI
| Variable | Default | Description |
|---|---|---|
ISSUEBOSS_GRPC_HOST |
http://localhost |
gRPC server host (include scheme) |
ISSUEBOSS_GRPC_PORT |
9090 |
gRPC server port |
ISSUEBOSS_API_KEY |
(none) | API key sent as x-api-key on all admin gRPC requests |
After starting the server, create the initial super-admin account via the gRPC admin interface:
issueboss super-admin \
--username admin \
--full-name "Your Name" \
--email admin@example.com \
--password changemeUse --host and --port (or ISSUEBOSS_GRPC_HOST / ISSUEBOSS_GRPC_PORT) if the server is not running on http://localhost:9090.
The command prints the generated API key — store it securely, it will not be shown again. Set it as ISSUEBOSS_API_KEY to authenticate subsequent CLI commands.
- Rust — hexagonal (ports & adapters) architecture, dependencies point inward toward
ib-core - Database — SeaORM with Postgres, MySQL, MariaDB, and SQLite support
- API — MCP server (
rmcp) + gRPC admin interface (tonic) - Frontend — Dioxus
just build # build all crates
just run # run the server
just bundle # bundle web + server components
just run-bundle # run the bundled binary
just fmt # format code and documentation
just lint # run all lint checks
just clippy # run Clippy directlyTesting
just component-tests # unit + component tests (no Docker)
just quick-test # component + postgres tests
just test # all tests
just integration-tests # all integration tests (requires colima)
just postgres-integration-tests # Postgres only
just sqlite-integration-tests # SQLite only
just mysql-integration-tests # MySQL only
just mariadb-integration-tests # MariaDB only
just insta # run snapshot tests
just insta-review # review snapshot deltas
colima start # start Docker for integration tests
colima stop # stop DockerDatabase
just create-database # create the Postgres database
just database # database admin
just config # edit encrypted configurationDocumentation & releases
just docs-build # build documentation as a static site
just docs-serve # serve docs locally with live reload
just changelog # update CHANGELOG.md
just release VERSION # create a releaseTooling
just install-tools # install contributing toolchain
just deps # update Rust crate dependencies
just buf # run proto lint
just tailwindcss # update Tailwind CSS
just clean # clean the workspaceIssueBoss integrates with a shared Insights git repository — a central knowledge store for triage documents, specs, plans, and research notes. The insights CLI manages the connection between a project and the repo.
insights init --repo <path> --user <username> --project <name>Sets up .insights/ in the project root with symlinks into the shared repo:
.insights/issues/→ per-project triage docs and handoffs.insights/shared/→ specs, plans, and research shared across projects.insights/<username>/→ personal notes.insights/searchable/→ hard-link mirror, safe forrg/grep(read-only by convention)
.insights/ is not version-controlled — it is added to .gitignore automatically on init.
insights sync # pull latest from the Insights repo and rebuild local state
insights status # sync and show pending changes
insights commit # sync and commit all pending changes to the Insights repoAll commands accept -v / --verbose for detailed output.