This release is a pre-release and may not be stable for production use.
Agent Kanban PM
Local-first Kanban project management for humans and headless CLI agents.
Status: release candidate (0.4.0rc5) for local, single-user development.
The local runtime, board UI, per-task agent sessions, and MCP surface work and
are covered by tests, including a database upgrade path. It is a single-operator
tool by design: one shared token guards the local server, so do not expose it to
an untrusted network or share an instance with people you would not give shell
access.
The server stores state, starts assigned local agents, streams terminal output, and advances cards through the standard execution/review handoff. The selected orchestrator agent still owns planning, task splitting, assignment strategy, and escalation decisions. See ARCHITECTURE.md for the system diagram.
Requirements
- Python ≥ 3.11
- Linux or macOS. On Windows, use WSL; the local process runtime relies on Unix PTY/process semantics.
git- Recommended:
tmuxfor detachable terminal sessions. Iftmuxis not available, the runtime uses its native PTY subprocess fallback. - At least one CLI agent (Claude Code, Antigravity CLI, Codex, OpenCode, Aider, etc.)
- Optional:
ghfor GitHub PR/issue/review sync
| Platform | Status |
|---|---|
| Linux | CI-tested on Python 3.11, 3.12, and 3.13 |
| macOS | CI-tested on Python 3.12 |
| Windows | Use WSL; native Windows is not supported |
Install
Release candidates need pre-release resolution:
pip install --pre agent-kanban-pm
kanban init
For an isolated CLI installation:
pipx install --pip-args="--pre" agent-kanban-pm
# Or run without installing:
uvx --prerelease allow --from agent-kanban-pm kanban --help
From source:
git clone https://github.com/Raman369AI/agent-kanban-pm.git
cd agent-kanban-pm
pip install -e ".[dev]"
kanban init
Run
kanban run # server + UI + role supervisor
kanban run --no-supervisor # server + UI only
- UI:
http://localhost:8000/ui/projects - API docs:
http://localhost:8000/docs
Board controls
Cards can be moved with drag-and-drop or entirely from the keyboard. Press
Tab until a card is focused, then use Left Arrow or Right Arrow to
move it to the adjacent stage. Task and approval dialogs keep focus inside the
dialog, close with Escape, and return focus to the control that opened them.
Server validation and authorization details are shown in the UI toast instead of being replaced by a generic “Failed” message. A rejected move is rolled back to its original column.
CLI
kanban roles list # show role assignments
kanban roles assign worker opencode --mode headless # assign a role
kanban agents discover # find local CLIs
kanban sheet # compact status
kanban audit # what agents ran, and how
kanban audit --auto --commands # only unsupervised runs
kanban handoff status --workspace . # inspect worktree state
Per-task execution
Each Kanban task that's assigned to an agent runs in its own background process
session. tmux is used when available; otherwise the runtime falls back to a
native PTY subprocess manager. Terminal output is captured into AgentActivity
so the board workbench can show live progress without attaching to the shell.
For git projects, each task runs in an isolated worktree under
~/.kanban/worktrees/project-{id}/task-{id}-{agent} on a branch named
kanban/task-{id}-{agent}. The branch is started from the project's detected
base ref (origin/HEAD, then origin/main/origin/master, then a local
main/master).
Before each session starts the launcher:
- Fetches the base ref when an
originremote exists. - Rebases the task branch onto the base so parallel tasks don't drift from mainline.
- Records the result (
rebased onto ...,skipped (uncommitted changes),aborted (conflicts), etc.) as anAgentActivityyou can audit from the board.
If the project directory is not a git worktree, the agent runs in the project folder directly with no git isolation.
Stage handoff
The default board stages are Backlog, To Do, In Progress, Review, and Done. The server does not choose which agent should do new work, but it does keep the standard role handoff moving once an assigned session finishes:
- A worker assignment starts from To Do or In Progress.
- When the agent marks
STATUS.mdwithhandoff_ready: trueandstate: done,completed, orreview, the session streamer marks the session done and moves the card to Review. - Review-stage policy roles, normally
testanddiff_review, are assigned and launched from Review when configured in~/.kanban/preferences.yaml. - When review/test sessions complete, the card moves to Done.
- Done-stage policy roles, normally
git_pr, may launch from Done to prepare PR or git contribution work.
The handoff source of truth is each worktree's STATUS.md. If an agent exits
without updating it, the card may stay where it is because the runtime cannot
reliably tell whether the work is ready for review.
Bundled agent adapters
Each adapter is a YAML file describing how to launch one CLI. kanban init
copies the bundled set into ~/.kanban/agents/, and you can drop your own
file there without touching Python.
| Adapter | Command | Status |
|---|---|---|
claude |
claude |
Supported |
antigravity |
agy |
Supported — Google's current CLI |
codex |
codex |
Supported |
opencode |
opencode |
Supported |
aider |
aider |
Supported |
goose, crush, continue |
— | Stubs; invocation not yet verified |
Gemini CLI is retired
Google shut Gemini CLI down for consumer accounts on 2026-06-18 and replaced
it with Antigravity CLI (agy). The gemini adapter has been removed;
if a role still names it, reassign that role:
kanban roles assign worker antigravity --mode headless
One behaviour worth knowing: agy --print writes nothing when its stdout is a
pipe, so the orchestrator chat runs it on a pseudo-terminal
(chat_designer.requires_tty: true in the adapter). Task sessions were
already unaffected, since they run under tmux or a PTY.
Autonomy & approval
Agents run supervised by default: the CLI keeps its approval prompts, and risky actions (file writes, shell commands, git, network) surface in the Kanban approval queue for a human or the orchestrator.
Auto mode is an explicit per-role opt-in. Set autonomy: auto on a role in
~/.kanban/preferences.yaml (or answer y at the autonomy prompt in
kanban init, or pass --autonomy auto to kanban roles assign). The
launcher then appends the adapter's bypass flags — claude --permission-mode bypassPermissions, agy --dangerously-skip-permissions,
codex --full-auto, opencode --auto, aider --yes-always, declared as
task_command.auto_args in the adapter YAML — so the agent never pauses to
ask. Combined with the per-task worktree, the blast radius is scoped to that
worktree, and risky actions are expected to be recorded in STATUS.md.
Critical review and approval records can still be created through the
REST/MCP surfaces when an agent or human needs an explicit audit gate.
Auditing what agents did
Every agent start is written to an append-only activity log with the resolved command line, the workspace and branch, and the autonomy the session ran under. When an agent does something surprising, that record is what tells you what actually executed.
kanban audit # recent activity, oldest first
kanban audit --task 42 # one task's trail
kanban audit --auto # only sessions that ran with approvals off
kanban audit --commands # only entries that recorded a command
kanban audit --since 24 --json # last 24h, machine readable
kanban audit reads the database directly, so it still works when the server
is not running. The same data is available over HTTP at GET /agents/activity
(filters: agent_id, project_id, task_id, session_id, activity_type,
has_command, limit), which requires the Kanban token like every other API
route.
UI & token security
The server binds to loopback and authenticates every non-page request with a
per-instance token (~/.kanban/token, owner-only 0600). Browser pages
receive the token as an HttpOnly, SameSite=strict cookie; mutations
authenticated by that cookie must also send the X-CSRF-Token header
embedded in each page (wired automatically via a fetch wrapper in
base.html). CLI and supervisor processes use the X-Kanban-Token header,
which does not need the CSRF token. Requests with a non-loopback Host
header are rejected before routing (DNS-rebinding defense); extend with
KANBAN_ALLOWED_HOSTS if you deliberately serve a LAN hostname.
MCP Identity
CLI agents connect through agent_kanban_pm.mcp.server using local process identity:
KANBAN_AGENT_NAME=codex KANBAN_AGENT_ROLE=worker kanban-mcp
KANBAN_AGENT_NAME must match an adapter entity loaded from
~/.kanban/agents/.
Identity
- Humans:
X-Entity-IDheader - Agents:
KANBAN_AGENT_NAMEenv var - Local-first, single-user. No auth server.
Roles and adapters
Adapters are YAML files in ~/.kanban/agents/. Adding a tool requires no
Python changes. Role assignments live in ~/.kanban/preferences.yaml; the
standard roles are orchestrator, ui, architecture, worker, test,
diff_review, and git_pr.
Development
Install the regular development tools and run the fast checks:
pip install -e ".[dev]"
flake8 src tests
pytest
python -m build
twine check dist/*
Browser regressions are an optional extra. They start an isolated local server and cover drag-and-drop, keyboard movement, task editing, detailed error toasts, dialog focus, and approval resolution in Chromium:
pip install -e ".[dev,e2e]"
python -m playwright install chromium
pytest tests/e2e
Task creation and lifecycle updates shared by REST, browser UI, and MCP belong
in agent_kanban_pm/services/tasks.py. Routers should retain only transport
concerns such as authentication, response formatting, commits, and event
publication. This keeps stage/parent validation and transition rules consistent
across every interface.
Package data is served from agent_kanban_pm/data/; the historical root-level
agents/, mcp_configs/, static/, and templates/ folders are not part of
the packaged runtime.
Roadmap
See PLAN.md for the full roadmap to a standalone, fully available release. Each phase is releasable on its own.
- Phase 0 — Stabilize (done): failing UI test fixed, CI installs the
package and smoke-tests the built wheel, single-sourced dependencies,
.env.exampledocuments real env vars, dev-artifact name heuristics replaced with aProject.is_demoflag. - Phase 1 — Packaging correctness:
src/layout, declaredmcpdependency, install-safe data home. - Phase 2 — Security hardening:
/uimutations require the token, HttpOnly cookie + CSRF header, Host-header validation, token file is0600, supervised-by-default autonomy with explicitautoopt-in, WebSocket token verification. - Phase 3 — Runtime correctness: async subprocess handling, atomic launch admission, MCP identity freshness, endpoint discovery, shutdown cleanup, and a shared task-mutation service have landed. Project, session, and approval services, MCP tool modularization, launcher decomposition, and Alembic migrations are still outstanding.
- Phase 4 — Product surface & docs: the support matrix, community scaffolding, and browser workflow coverage have landed. Landing-page visuals, the mkdocs site, coverage reporting, and frontend extraction are still outstanding.
- Phase 5 — Release & distribution:
0.4.0rc5is on PyPI and GitHub, published from a git tag by a workflow that authenticates through PyPI trusted publishing, with a weekly job that installs the released package to catch breakage. A stable0.4.0is what remains.
Security
See SECURITY.md for the supported threat model and private vulnerability reporting.
Contributing
See CONTRIBUTING.md. Release maintainers should also follow RELEASING.md.
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_kanban_pm-0.4.0rc5.tar.gz.
File metadata
- Download URL: agent_kanban_pm-0.4.0rc5.tar.gz
- Upload date:
- Size: 215.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4122056311aeaf332e87c317f8d4427dabce0171b14c8daf190e5baeeaf747ad
|
|
| MD5 |
5d9a8edc3a1a06ff77e9957a4376a65e
|
|
| BLAKE2b-256 |
c9ae5f453ad5f61976f2589626a0f6db7a72e043aed1d356747a957ee1bf04a6
|
Provenance
The following attestation bundles were made for agent_kanban_pm-0.4.0rc5.tar.gz:
Publisher:
release.yml on Raman369AI/agent-kanban-pm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_kanban_pm-0.4.0rc5.tar.gz -
Subject digest:
4122056311aeaf332e87c317f8d4427dabce0171b14c8daf190e5baeeaf747ad - Sigstore transparency entry: 2764799904
- Sigstore integration time:
-
Permalink:
Raman369AI/agent-kanban-pm@e662f609bb7a9e2f0a2c3aaecc5db2d2dae52627 -
Branch / Tag:
refs/tags/v0.4.0rc5 - Owner: https://github.com/Raman369AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e662f609bb7a9e2f0a2c3aaecc5db2d2dae52627 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agent_kanban_pm-0.4.0rc5-py3-none-any.whl.
File metadata
- Download URL: agent_kanban_pm-0.4.0rc5-py3-none-any.whl
- Upload date:
- Size: 228.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad38c622acc95c126fa0ec6d084e322e4d450c6872b6666457bf73b2b15d094a
|
|
| MD5 |
423a7c7a6b0cf0e553b3caeab8bf204d
|
|
| BLAKE2b-256 |
463f601082d5a111201cfe94382a619a6a603a4da66db17d67576a7c8cf80c5e
|
Provenance
The following attestation bundles were made for agent_kanban_pm-0.4.0rc5-py3-none-any.whl:
Publisher:
release.yml on Raman369AI/agent-kanban-pm
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_kanban_pm-0.4.0rc5-py3-none-any.whl -
Subject digest:
ad38c622acc95c126fa0ec6d084e322e4d450c6872b6666457bf73b2b15d094a - Sigstore transparency entry: 2764799912
- Sigstore integration time:
-
Permalink:
Raman369AI/agent-kanban-pm@e662f609bb7a9e2f0a2c3aaecc5db2d2dae52627 -
Branch / Tag:
refs/tags/v0.4.0rc5 - Owner: https://github.com/Raman369AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@e662f609bb7a9e2f0a2c3aaecc5db2d2dae52627 -
Trigger Event:
push
-
Statement type: