Kanban board
Use scripts/kanban.mjs as the shared renderer. Do not hand-edit generated HTML.
Workflow
Create or update a
kanban.jsonin the target project. Treat it as the source of truth: never invent cards, themes, notes, links, or column assignments.Install the managed lifecycle block into the project-root
CLAUDE.mdfor Claude Code andAGENTS.mdfor Codex. Usescripts/install-lifecycle.mjs <project-directory> --agent claude|codex|both; it preserves existing instructions and replaces an existing marked block instead of duplicating it.Use
workflow.planning,workflow.active,workflow.review, andworkflow.completedto map lifecycle events to the project's actual columns. Ifworkflowis missing, ask for or establish the mappings before moving a card; do not guess based on a column name.Build the board:
/path/to/kanban/scripts/kanban build kanban.json --out kanban.htmlAt work start, launch the local board server in the background. It selects an available random port and opens the browser for the user:
mkdir -p .kanban /path/to/kanban/scripts/kanban build kanban.json --out .kanban/board.html node /path/to/kanban/scripts/serve.mjs .kanban/board.html > .kanban/server.log 2>&1 &Read
.kanban/server.logand report theKanban board:URL. Rebuild.kanban/board.htmland reload the same local URL whenever the board changes.Open
kanban.htmllocally and inspect filters, search, and card expansion after a meaningful update.Commit the data file with the generated board when the project wants a shareable snapshot.
Data model
Use JSON. Required shape:
{
"title": "Project Board",
"description": "What this board covers and how to read it.",
"headerNote": "Snapshot: accurate as of 2026-08-16.",
"columns": ["Backlog", "In progress", "Done"],
"columnDescriptions": { "Backlog": "Known work not yet started." },
"columnColors": { "Backlog": "#8b5cf6" },
"workflow": { "planning": "Backlog", "active": "In progress", "completed": "Done" },
"themes": { "product": "#8b5cf6", "ops": "#22c55e" },
"cards": [
{ "id": "api-1", "title": "Add API", "theme": "product", "column": "In progress", "note": "Blocked on schema review.", "link": "https://example.test/issues/1" }
]
}
title, description, headerNote, columnDescriptions, columnColors, workflow, note, and link are optional. Use description and columnDescriptions to give viewers factual context; use columnColors for meaningful workflow color coding. workflow maps planning, active, review, and completed work to declared columns so agents do not infer statuses. id must be unique. A card theme and column must exist in themes and columns respectively. Use a complete https:// or project-relative link when adding link.
Agent lifecycle
Follow the managed block in references/kanban-workflow.md. Update kanban.json and regenerate the HTML at four factual points: before planning, after a plan exists, when material work starts, and before handing off. Do not update the board when there is no relevant board/card or when the status would be speculative.
Commands
# Validate the data without writing HTML
/path/to/kanban/scripts/kanban validate kanban.json
# Write a self-contained board
/path/to/kanban/scripts/kanban build kanban.json --out docs/kanban.html
# Build and open with the platform's default browser
/path/to/kanban/scripts/kanban build kanban.json --out kanban.html --open
The output contains no external assets, fonts, scripts, or data fetches. Rerunning build from unchanged JSON must reproduce the same board.