Skip to content

Agents ​

Agents are defined in .kanbot/agents/<name>.md. This is the only place to edit them. kanbot sync renders them into each provider's format:

  • Claude: .claude/agents/<name>.md and .claude/settings.json
  • Codex: .codex/agents/<name>.toml

The generated files also let you use the same agents in normal Claude Code or Codex sessions.

Tiers ​

  • Column agents (tier: column) are started by the daemon for a board job. They must declare an output schema.
  • Subagents (tier: sub) are called by column agents for focused work.

Default team ​

AgentTierRole
plannercolumnWrites and revises the plan.
implementer-frontendcolumnBuilds UI work.
implementer-backendcolumnBuilds server, API and data work.
implementer-docscolumnWrites docs.
implementer-technicalcolumnRefactors, infra, tooling and CI.
reviewer-codecolumnReview pass 1: correctness and code quality.
reviewer-speccolumnReview pass 2: acceptance criteria and UX.
fixercolumnFixes findings, your comments and failing CI.
explorersubMaps the codebase for a change.
plan-criticsubCritiques a draft plan.
approach-designersubDesigns N approaches for explore:N.
test-writersubWrites failing tests first.
ui-verifiersubTakes screenshots with Playwright.

planner, reviewer-code, reviewer-spec and fixer are required. Implementers are picked through implementers in config.

File format ​

YAML frontmatter, then markdown instructions:

markdown
---

name: implementer-backend
tier: column
description: Implements an approved plan for server, API and data work.
models: { claude: sonnet, codex: default }
effort: high
tools: [read, edit, bash]
skills: [project-conventions, tdd, pr-description]
subagents: [explorer, test-writer]
output: implement-result
---

You are the backend implementer. ...

Frontmatter ​

FieldRequiredDescription
nameyesLowercase, dashes. Must match the filename.
tieryescolumn or sub.
descriptionyesWhen to use the agent. Callers read this.
modelsnoModel per provider: { claude: opus, codex: default }.
effortnolow, medium, high, xhigh or max.
toolsnoAny of read, edit, bash, web. Default [read].
skillsnoSkill names from .agents/skills/.
subagentsnoNames of tier: sub agents it may call.
outputcolumnplan-result, implement-result, review-result or fix-result.

Tools map to provider tools:

ToolClaudeCodex
readRead, Grep, Globread-only sandbox
editEdit, Write, NotebookEditworkspace-write sandbox
bashBashworkspace-write sandbox
webWebFetch, WebSearch—

Output schemas ​

Column agents answer with JSON. The daemon turns it into comments, PRs and labels.

OutputUsed byMain fields
plan-resultplannerplan, summary, replies, newIssues, labels, questions
implement-resultimplementersstatus, prTitle, prBody, testsRun, screenshots, risks
review-resultreviewersverdict, summary, findings
fix-resultfixeraddressed, summary, prBody

Schemas are defined in src/schemas/results.ts and can't be changed per repo. Agents must match the one they declare.

Common changes ​

Change a model. Edit models and run kanbot sync.

Change behaviour. Edit the markdown body. Keep it about how to work; the daemon's prompt carries the task.

Add an implementer. Copy an implementer file, rename it, then map a label to it:

yaml
# .kanbot/config.yml
implementers:
  frontend: implementer-frontend
  backend: implementer-backend
  docs: implementer-docs
  infra: implementer-technical
  mobile: implementer-mobile # used for type:mobile
  default: implementer-backend

Create the type:mobile label in GitHub too.

Add a subagent. Create a tier: sub file and add its name to a column agent's subagents.

Apply changes ​

sh
kanbot sync
git add -A && git commit -m "chore: update agents" && git push

The daemon refuses to start if generated files are stale. Never edit files in .claude/agents/ or .codex/agents/; sync overwrites them and removes ones whose source was deleted.