< back to cookbook
RECIPE 06

Agent Kanban for Claude Code

A folder-based kanban board that runs inside Claude Code. Tasks as markdown files, gates at every transition, and parallel multi-agent execution.

May 26, 2026

What you're building

A task management system that lives inside your repo as markdown files. Three folders (inbox, in-progress, done) hold individual task files. Gates at each transition enforce dependency order, acceptance criteria, and WIP limits. Multiple Claude Code agents can work the board at the same time, each claiming and finishing tasks without stepping on each other.

The board lives at .kanban/ in your project root. An index.md file tracks the full inventory, changelog, and configuration. Each task is its own file with YAML frontmatter: priority, complexity, dependencies, acceptance criteria, ownership.

No external tools or SaaS. Just files that travel with the repo.

Prerequisites

  • Claude Code (CLI, desktop, or IDE extension)
  • A git repo (the board lives alongside your code)

Install the skill

Clone the skill repo into your Claude Code skills directory:

bashgit clone https://github.com/solutionscay/agent-kanban.git \
  ~/.claude/skills/agent-kanban

Claude Code picks up skills from ~/.claude/skills/ automatically. Once cloned, the skill activates when you mention task management, ask "what should I work on next," or reference a PRD.

Initialize a board

Tell Claude Code to set up a board. It can work from a PRD, a plain list of tasks, or build one interactively:

> Set up a kanban board from this PRD: [paste or reference file]
> Create a kanban board with these tasks:
> 1. Set up the database schema
> 2. Build the API endpoints
> 3. Wire up the frontend forms

The skill creates this structure:

.kanban/
  index.md              # board controller
  inbox/
    001-database-schema.md
    002-api-endpoints.md
    003-frontend-forms.md
  in-progress/           # empty at start
  done/                  # empty at start

Tasks are numbered sequentially. The skill derives dependencies automatically. If task 3 references tables from task 1, it adds that dependency.

Task file format

Each task file uses YAML frontmatter with a body for notes:

yaml---
id: "001"
title: "Set up the database schema"
priority: p0
complexity: M
depends_on: []
created: "2026-05-26T10:00:00Z"
last_touched: "2026-05-26T10:00:00Z"
claimed_by: ""
stale: false
acceptance:
  - "Migration runs without errors"
  - "All tables have proper indexes"
  - "Seed data loads successfully"
---

p0 is must-have, p1 is should-have, p2 is nice-to-have. Complexity goes from S (under 30 minutes) through M (1-2 hours) and L (half a day) to XL (a full day or more).

claimed_by is empty when unclaimed. When an agent starts work, it writes its identity here: a session ID, worktree name, or self-assigned label like agent-1.

acceptance lists concrete, verifiable criteria. "Works correctly" doesn't cut it. "Migration runs without errors on a fresh database" does.

The three gates

Every transition runs through a gate. No exceptions.

READY gate (inbox to in-progress)

Before an agent can start a task, five checks must pass:

CheckWhat it verifies
WIPThis agent has no other task in in-progress
ClaimNo other agent has claimed this task
DependenciesEvery task in depends_on is in done/
FreshnessIf the codebase changed since task creation, the description still applies
ClarityAt least one acceptance criterion exists

If any check fails, the agent gets a specific resolution from the gate playbook. Finish your current task, pick a different one, work on a dependency first, or write acceptance criteria before starting.

DONE gate (in-progress to done)

Four checks before a task can move to done:

CheckWhat it verifies
AcceptanceEvery acceptance criterion passes. Run the test, check the file, verify the output.
RegressionRelated features still work
CommitChanges are committed or staged
NotesCompletion section filled: what was done, files changed, how it was verified

The agent runs each acceptance criterion as a concrete check. "Migration runs without errors" means actually running the migration. "All tables have proper indexes" means querying the schema. Verbal confirmation doesn't count.

SWEEP (automatic maintenance)

SWEEP runs before every task pick. It scans the full board for problems:

  • Pileup: inbox tasks with met dependencies that haven't started
  • Drift: tasks whose referenced files changed since creation
  • Zombies: in-progress tasks stuck for 2+ turns without progress
  • Orphans: tasks with dependencies that don't exist
  • Conflicts: multiple in-progress tasks touching the same files

SWEEP flags issues but doesn't block work. Problems get surfaced early, before they compound.

Working the board

Pick and complete a task

> What should I work on next?

The skill reads the index, runs SWEEP, finds the highest-priority non-stale inbox task with met dependencies, runs the READY gate, claims it, moves it to in-progress, and starts working.

When the work is done:

> Mark the current task as done

The skill runs the DONE gate. It checks acceptance criteria, looks for regressions, verifies the commit, fills completion notes, moves the file to done, and updates the index.

Check board status

> Show the kanban board

Returns a table of all tasks across all three columns with priority, owner, dependencies, and stale flags.

Split a task that's too big

If a task turns out to be larger than expected, split it instead of abandoning it:

> This task is too big, split it

The skill creates 2+ smaller task files with new sequential IDs, carries over dependencies, adds cross-dependencies if the subtasks are ordered, updates anything that depended on the original, and moves the original to done with a note: "Split into 004, 005."

Multi-agent usage

This is where it gets interesting. The board supports parallel execution. Each agent identifies itself with a tag (claimed_by), and the WIP limit is enforced per agent, not globally.

To run multiple agents, open separate Claude Code sessions (or use worktrees). Each session picks its own tasks. The skill coordinates through the shared files:

  • Agent 1 claims task 001, moves it to in-progress
  • Agent 2 tries to claim task 002, but it depends on 001, so the READY gate blocks it
  • Agent 2 picks task 003 instead (no dependencies)
  • Agent 1 finishes 001, moves it to done
  • Agent 2 finishes 003, then picks up 002 now that the dependency is met

SWEEP warns when two in-progress tasks reference the same files, so agents can coordinate before they create merge conflicts.

The index file

index.md is the board controller. Every operation reads it first and updates it after. Three sections:

Config

yamlwip_limit_per_agent: 1
staleness_threshold: 3
last_sweep: "2026-05-26T10:30:00Z"

wip_limit_per_agent caps how many in-progress tasks a single agent can hold. Default is 1, meaning finish before you start. staleness_threshold is how many other tasks can complete before an idle inbox task gets flagged as stale.

Board state lists every task per column with ID, title, priority, dependencies, owner, and stale flag.

Changelog is a timestamped log of every move and decision. Who claimed what, what passed or failed gates, when SWEEP ran and what it found.

Gate playbook

When a gate check fails, the skill doesn't just say "blocked." It gives a specific resolution:

FailureResolution
WIP exceededFinish your current task, split it, or move it back to inbox with an explanation
Task already claimedPick a different task
Dependencies not metWork on the dependency first
Freshness failedRe-read the referenced files, update the task description
Clarity failedWrite concrete acceptance criteria before starting
Acceptance criterion not metFix the issue, don't skip the check
Regression detectedFix it now, or create a separate task if the fix is unrelated
Stale taskRevalidate. Is this still needed? Update or close it.
Zombie taskAssess scope, split if too large, document blockers if stuck

Trade-offs

File-based, not real-time

The board is a set of markdown files. No live dashboard, no WebSocket updates, no drag-and-drop. You check status by asking Claude Code or reading the files directly. For solo or small-team agent workflows, that's enough. For a ten-person team, you'd want a proper project management tool.

Git conflicts on the index

If two agents update index.md at the same time and both commit, you get a merge conflict. In practice, agents working in separate worktrees avoid this. If it happens, the index can be regenerated from the task files. The files are the source of truth; the index is a cache.

No notifications

Nothing pings you when a task is done or blocked. You ask, or you check. SWEEP surfaces problems, but only when an agent runs it.

WIP limit is trust-based

The gate checks WIP before allowing a claim, but nothing prevents an agent from editing two files at once without going through the gate. The system works because the skill follows the protocol. It's discipline encoded in a prompt, not enforced by a lock.