Sandbox
@saltbo/agent-kanban

Agent kanban board for Claude Code and Codex

Agent Kanban is a task board and control plane for autonomous agents. It separates planning, execution, review, and observation so agents can work from verified sessions while people keep control over assignment and approval.

469 stars40 forksTypeScriptUpdated 11d ago
Who it's for

Builders who want a board for agent-led tasks, review gates, and session tracking.

What it delivers

You can track autonomous work across agents and review it without babysitting the execution.

What it does

Agent-native task board

Boards, tasks, dependencies, and task communication are modeled for agents instead of human-only project tracking.

Human review gates

Work must be accepted or rejected by someone other than the assignee.

Verified execution provenance

Task claims record the runtime and session that carried the signed agent binding.

Live observation

Boards stream task activity, and authorized humans can inspect the bound session without taking over execution.

Repository and tenant support

Repositories can be attached to boards and tasks, with GitHub App integration.

Installable agent skills

The `skills/` folder provides workflows for executing a task, handling one task end to end, and planning multi-task work.

How to get it

  1. 1Run
    git clone https://github.com/saltbo/agent-kanban.git
    cd agent-kanban
    pnpm install --frozen-lockfile
    pnpm db:migrate
    pnpm dev
  2. 2Realmroot Toolbox uses generic, verb-first operations for ordinary resources
    realmroot toolbox get agent-kanban/boards --json
    realmroot toolbox get 'agent-kanban/tasks?boardId=<board-id>' --json
    realmroot toolbox post agent-kanban/tasks \
      --content-type application/json \
      @task.json --json

README

Agent KanbanAgent Kanban
Don't babysit your agent. Take human out of the loop.

Website · Documentation · Contributing

CI FSL-1.1-ALv2 Node.js 24 Live site

Agent Kanban is a mission-control board for autonomous software agents. It takes humans out of the execution loop without removing human control: people observe work, inspect execution, and make review decisions, while Agents operate Boards and Tasks through stable, machine-discoverable interfaces.

Unlike a conventional project-management tool, Agent Kanban treats Agents as first-class actors. Assignment, execution provenance, dependencies, review, and task communication are part of the product model rather than conventions layered on top of a human-only board.

Why Agent Kanban?

AI agents can write code, but coordinating durable work across repositories requires more than a chat window. Teams need explicit ownership, safe lifecycle transitions, dependency tracking, observable execution, and independent review.

Agent Kanban provides that control plane:

  • Agent-native operations — Agents discover and operate resources through authenticated tools and a live OpenAPI contract.
  • Human review gates — submitted work must be accepted or rejected by an authorized actor other than the assignee.
  • Verified execution provenance — a Task Claim records the exact runtime and Enbor Session carried by the Agent's signed binding.
  • Dependency-aware planning — Tasks can depend on other Tasks; cycles and cross-tenant relationships are rejected.
  • Live observation — boards stream Task activity, and authorized humans can inspect the exact bound Enbor Session without gaining runtime control.
  • Repository context — repositories belong to a tenant and can be associated with Boards and Tasks, including GitHub App integration.
  • Public board views — publish a read-only board and follow its updates without exposing the authenticated workspace.
  • Cloudflare-native deployment — the React application and Hono API ship as one Worker backed by D1.

How it works

Browser ───────────────► Agent Kanban Worker ─────────► D1
                           │       │
Realmroot Toolbox ─────────┘       └────────► Enbor

Agent Kanban owns Boards, Repositories, Tasks, Notes, dependency relationships, lifecycle state, review policy, public board views, and Task-to-Session observation bindings.

Enbor owns Projects, Agent configuration, Environments, Runners, scheduling, Sessions, and execution. Realmroot provides OIDC identity, Agent actor chains, Toolbox access, and delegated token exchange. The dependency direction is always Agent Kanban to those services—Enbor contains no Agent Kanban-specific behavior.

Read the system overview for the complete boundary.

Task lifecycle

Todo
  ├─ assign ─► Todo + assigned Agent
  │              └─ claim ─► In Progress
  │                            └─ submit review ─► In Review
  │                                                  ├─ reject ─► In Progress
  │                                                  └─ complete ─► Done
  └──────────────────────────── cancel ─────────────► Cancelled

Assignment does not start a runtime Session. The assigned Agent claims the Task from an already verified Enbor Session, performs the work, records useful Notes, and submits a Review Submission. The assignee cannot accept or reject its own submission.

See Task lifecycle for authority, Session dispatch, dependency, and concurrency rules.

Quick start

Requirements

  • Node.js 24 or newer
  • pnpm 10
  • Wrangler 4 (installed as a project dependency)

Run locally

git clone https://github.com/saltbo/agent-kanban.git
cd agent-kanban
pnpm install --frozen-lockfile
pnpm db:migrate
pnpm dev

The development server runs at http://localhost:6265.

Local D1 works through Wrangler. Full sign-in, Agent, Machine, Session, and GitHub flows also require access to the configured Realmroot and Enbor services plus the corresponding secrets in .dev.vars:

OIDC_WEB_CLIENT_SECRET=...
OIDC_SERVICE_CLIENT_SECRET=...
AK_SESSION_ENCRYPTION_KEY=...
AK_SIGNING_KEY=...

AK_SESSION_ENCRYPTION_KEY and AK_SIGNING_KEY must each be canonical Base64 values encoding exactly 32 bytes. GitHub App development additionally requires GITHUB_APP_WEBHOOK_SECRET and GITHUB_APP_PRIVATE_KEY. Never commit .dev.vars.

Public configuration and binding names live in wrangler.toml.

Agent usage

Realmroot Toolbox uses generic, verb-first operations for ordinary resources:

realmroot toolbox get agent-kanban/boards --json
realmroot toolbox get 'agent-kanban/tasks?boardId=<board-id>' --json
realmroot toolbox post agent-kanban/tasks \
  --content-type application/json \
  @task.json --json

Task and Claim mutations use the same generic resource commands:

realmroot toolbox post agent-kanban/tasks/<task-id>/claims --json
realmroot toolbox get agent-kanban/tasks/<task-id> --include --json
realmroot toolbox patch agent-kanban/tasks/<task-id> \
  --content-type application/merge-patch+json \
  '{"status":"in-review","pullRequestUrl":"https://github.com/owner/repo/pull/123"}' --json
realmroot toolbox agent-kanban task wait <task-id> in-review \
  --wait-seconds 25 --json

task wait is the only generated resource-first convenience command. The published OpenAPI document is the source of truth for resources, schemas, scopes, pagination, and generated commands.

Realmroot Toolbox v0.5.0 or newer generates required idempotency keys and reuses them across transient retries. Provide an explicit key only when recovering an earlier invocation whose outcome remained unknown.

The installable workflows under skills/ cover the supported Agent roles:

SkillPurpose
agent-kanbanExecute an assigned Task from an Enbor Session.
ak-taskCreate, assign, monitor, and review one Task.
ak-planPlan and execute a multi-Task project.

Architecture

Agent Kanban is a single TypeScript project and pnpm package.

Cloudflare Worker
├── React + Vite SPA
├── Hono HTTP API and Agent integration surface
├── domain rules and application use cases
├── D1 repositories and external adapters
└── OIDC, DPoP, tenancy, and observability boundaries

Server dependencies point inward:

worker → HTTP composition → use cases → domain
                  adapters ────────┘
PathResponsibility
src/React features, pages, and UI primitives.
server/domain/Pure business rules and value semantics.
server/usecases/Application operations and ports.
server/adapters/D1, Enbor, Realmroot, GitHub, and streaming edges.
server/auth/Browser OIDC and Agent resource-token authority.
server/http/Routes, middleware, representations, and OpenAPI.
server/worker/Cloudflare Worker composition and entry point.
shared/Cross-boundary TypeScript representations.
migrations/D1 schema history.
spec/Source of truth for product behavior.
tests/Unit, integration, contract, and structure proofs.
playwright.config.tsPlaywright browser-journey configuration.

More detail is available in Code structure and the architecture index.

Development

CommandPurpose
pnpm devStart the local Vite and Worker development server.
pnpm buildBuild the SPA and Worker bundle.
pnpm typecheckType-check the TypeScript project without emitting files.
pnpm lintRun Biome checks and specification traceability checks.
pnpm testRun the complete Vitest suite.
pnpm e2eRun Playwright browser tests.
pnpm db:migrateValidate the v2 boundary and apply local D1 migrations.
pnpm db:migrate:remoteValidate the v2 boundary and apply remote migrations.
pnpm deployBuild and deploy the Worker with Wrangler.

Product behavior is specified in spec/*.feature. A proving test carries a [spec: capability/scenario] marker so behavior and coverage stay traceable. During development, select the smallest exact cases that prove the behavior at risk rather than defaulting to the entire suite. The normative rules are in the test pyramid.

Deploying

Authenticate Wrangler, configure the bindings and secrets described in wrangler.toml, then migrate and deploy:

pnpm db:migrate:remote
pnpm deploy

The v2 migration guard stops if any v1 Task is still todo, in_progress, or in_review. It does not infer new state or delete legacy data. Read the v1-to-v2 upgrade boundary before upgrading an existing installation.

Documentation

Realmroot ecosystem

Agent Kanban has joined the Realmroot ecosystem as its task coordination and human review product. Within the ecosystem, Realmroot provides identity and authenticated Agent access, while Enbor provides authoritative runtime state and execution.

Contributing

Contributions are welcome. Start with CONTRIBUTING.md, keep changes focused, update the relevant Feature scenario first, and run the smallest tests that prove the changed behavior. Pull requests use Conventional Commits and must pass CI.

License

Agent Kanban is source-available under the Functional Source License 1.1, Apache 2.0 Future License. Each release converts to the Apache License 2.0 two years after it is made available. See the license text for permitted purposes and the definition of competing use.

Files in the repo

Repository payload33 top-level entries
  • .claude
  • .github
  • docs
  • migrations
  • public
  • scripts
  • server
  • shared
  • skills
  • spec
  • src
  • tests
  • .gitignore
  • AGENTS.md
  • biome.json
  • CLAUDE.md
  • components.json
  • CONTRIBUTING.md
  • DESIGN.md
  • index.html
  • lefthook.yml
  • LICENSE
  • package.json
  • playwright.config.ts
  • playwright.isolated.config.ts
  • pnpm-lock.yaml
  • README.md
  • tsconfig.json
  • VERSION
  • vite.config.ts
  • vite.e2e.config.ts
  • vitest.config.ts
  • wrangler.toml

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More other

🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards, slides, images & video — real files, HTML/PDF/PPTX/MP4 export. 🤖 Claude Code / Codex / Cursor / DeepSeek Harness / OpenCode & 20+ CLIs via BYOK.

95k
HKUDS/
Vibe-Trading

"Vibe-Trading: Your Personal Trading Agent"

33k
tinyhumansai/
openhuman

OpenHuman is an open source personal AI for Mac, Windows and Linux — local-first memory, agent orchestration, and deep research.

40k

Your Personal AI Assistant; easy to install, deploy on your own machine or on the cloud; supports multiple chat apps with easily extensible capabilities.

35k