SKILL.md
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:
``sh /path/to/kanban/scripts/kanban build kanban.json --out kanban.html ``
- At work start, launch the local board server in the background. It selects an available random port and opens the browser for the user:
``sh 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.log and report the Kanban board: URL. Rebuild .kanban/board.html and 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](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.