From kanban-skill
Maintain the repo-level kanban board under kanban/ to track work items across sessions
How this skill is triggered — by the user, by Claude, or both
Slash command
/kanban-skill:kanban-trackerThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Maintain the persistent kanban board at `kanban/` in the repo root. This board tracks work items across Claude Code sessions so progress is never lost.
Maintain the persistent kanban board at kanban/ in the repo root. This board tracks work items across Claude Code sessions so progress is never lost.
kanban/
├── README.md # Board overview and conventions
├── workstreams/ # Workstream definitions
├── todo/ # Work not yet started
├── in-progress/ # Actively being worked on
├── ready-to-review/ # Complete, awaiting human review
└── reviews/ # Human-readable review/verification guides
A workstream is a logical grouping of related tickets that share a cohesive goal. Workstreams:
Each workstream is defined in kanban/workstreams/<slug>.md:
---
slug: voice-extraction
status: active
priority: high
created: YYYY-MM-DD
tickets:
- refactor--extract-base-voice-step
- docs--document-voice-steps
depends-on-workstreams: []
tags: []
---
# Voice Extraction
## Goal
<1-3 sentences describing what this workstream achieves when complete>
## Scope
<What's included and explicitly excluded>
## Success Criteria
- [ ] <measurable outcome 1>
- [ ] <measurable outcome 2>
## Notes
<Implementation strategy, risks, open questions>
| Field | Required | Type | Description |
|---|---|---|---|
slug | yes | string | Unique identifier matching filename |
status | yes | enum | active, blocked, completed |
priority | yes | enum | high, medium, low |
created | yes | date | YYYY-MM-DD |
tickets | yes | list | Ordered list of ticket slugs in this workstream |
depends-on-workstreams | no | list | Other workstream slugs this workstream blocks on |
tags | no | list | Freeform tags for filtering |
A ticket belongs to at most one workstream. If work spans multiple concerns, split the ticket.
Ticket order in the tickets list is significant. It represents the recommended execution order within the workstream.
Workstream status is derived:
completed — all tickets in ready-to-review/ or done/blocked — depends on incomplete workstream, or all tickets are blockedactive — has at least one unblocked ticketCross-workstream dependencies should be explicit. Use depends-on-workstreams when an entire workstream must complete before another can start.
Keep workstreams focused. 3-8 tickets is ideal. Larger workstreams should be split.
Every work item has a type in its frontmatter. Use these standard types:
| Type | When to use | Example |
|---|---|---|
feature | New functionality or capability | Add Analysis & Critique voices |
test | Test coverage, property tests, verification | CircuitBreaker StateM property test |
bug | Defect fix | Fix weight normalization off-by-one |
refactor | Restructuring without behavior change | Extract Composer merge into module |
infra | Deps, build, CI, tooling, dev experience | Add PropCheck dependency |
docs | Documentation changes | Update API usage guide |
spike | Time-boxed research or investigation | Evaluate PropCheck vs StreamData |
Each work item is a markdown file named with a type-prefixed slug: <type>--<short-slug>.md
The type prefix is separated by a double-dash (--) from the slug to avoid ambiguity with kebab-case names. This makes ticket types visible when scanning a directory listing without opening files.
Examples:
feat--analysis-critique-voices.mdtest--circuit-breaker-statem.mdinfra--propcheck-streamdata-setup.mdbug--weight-normalization-off-by-one.mdType prefixes: feat, test, bug, refactor, infra, docs, spike
All structured metadata goes in YAML frontmatter (compatible with Obsidian, Dataview, and standard markdown tooling). The body contains only prose, criteria, and notes.
Use this template:
---
type: feature
project: atelier
created: YYYY-MM-DD
priority: medium
session: <claude-code-session-url>
git-ref: <short-sha>
branch:
workstream: <workstream-slug-or-empty>
depends-on: []
depends-on-workstreams: []
tags: []
---
# Title
## Description
<1-3 sentences describing the work item>
## Acceptance Criteria
- [ ] <criterion 1>
- [ ] <criterion 2>
## Context
<Why this ticket exists. What was happening when it was created — the conversation,
discovery, or observation that motivated it. Link to relevant code, design docs,
prior tickets, or external references. This section captures the "institutional memory"
so a future session can pick up the ticket without losing the thread.>
## Notes
<Any implementation hints, decisions, blockers, or open questions>
| Field | Required | Type | Description |
|---|---|---|---|
type | yes | enum | One of: feature, test, bug, refactor, infra, docs, spike |
project | yes | string | Repository or project identifier (e.g. atelier). Enables cross-repo Obsidian vaults. |
created | yes | date | YYYY-MM-DD |
priority | yes | enum | high, medium, or low |
session | yes | string | Claude Code session URL where the ticket was created (e.g. https://claude.ai/code/session_abc123). Provides backlink to the conversation that motivated the ticket. |
git-ref | yes | string | Short SHA of the commit HEAD when the ticket was created (e.g. 9494eca). Anchors the ticket to a specific codebase state. |
branch | no | string | Git branch name. Null/empty until work starts. |
workstream | no | string | Workstream slug this ticket belongs to (e.g. voice-extraction). Empty if not part of a workstream. |
depends-on | no | list | Slugs of tickets this blocks on (e.g. [infra--propcheck-streamdata-setup]) |
depends-on-workstreams | no | list | Workstream slugs this ticket blocks on (e.g. [guardrails]). Ticket is blocked until all tickets in the workstream are complete. |
tags | no | list | Freeform tags for filtering/grouping (e.g. [property-testing, ai]) |
Review link is not in frontmatter — it's always derivable from the filename: ../reviews/<type>--<slug>.mddepends-on uses ticket slugs (filenames without .md), not full pathsdepends-on-workstreams uses workstream slugs (filenames without .md), not full pathsproject should match the application directory name in the repotags are freeform; use them for cross-cutting concerns that don't fit the type systemA ticket is blocked if ANY of these conditions are true:
Ticket dependency not satisfied: Any slug in depends-on does not have a matching file in kanban/ready-to-review/ or kanban/done/
Workstream dependency not satisfied: Any slug in depends-on-workstreams refers to a workstream that is not completed (i.e., not all of its tickets are in ready-to-review/ or done/)
Workstream predecessor not done: The ticket belongs to a workstream, and there's an earlier ticket in that workstream's tickets list that is not yet in ready-to-review/ or done/
Example blocking scenarios:
# Blocked by ticket dependency
depends-on: [feat--modulator-resources] # blocked until this ticket is done
# Blocked by workstream dependency
depends-on-workstreams: [guardrails] # blocked until ALL guardrails tickets done
# Blocked by workstream order (implicit)
workstream: voice-extraction # if earlier tickets in workstream aren't done, blocked
When moving an item to ready-to-review/, create (or update) a corresponding file in kanban/reviews/<type>--<short-slug>.md. This file is written for the human reviewer and should be included in PR descriptions.
Use this template:
# Review: <Title>
**Work Item:** [<type>--<short-slug>](../ready-to-review/<type>--<short-slug>.md)
**Branch:** <git branch name>
**Date:** <YYYY-MM-DD>
## Summary
<2-4 sentences: what changed and why>
## Key Files
| File | What changed |
|------|-------------|
| `path/to/file.ex` | <brief description> |
## How to Verify
### Prerequisites
<Any setup steps: env vars, database, etc.>
### Steps
1. <concrete verification step>
2. <concrete verification step>
3. ...
### Expected Results
<What the reviewer should see if everything is working>
## Risks / Things to Watch
- <anything the reviewer should pay extra attention to>
## PR Notes
<!-- Copy everything below into the PR description -->
<Summary of changes>
### How to Verify
<Inline checklist of verification steps — do NOT just link to the review file. The PR description must be self-contained so reviewers can verify without navigating elsewhere.>
### Risks
<Bullet list of risks>
Full review: [link to review file]
Spikes are time-boxed research and investigation tickets. They are not implementation tickets. A spike produces:
design-docs/agent/ documenting findings, trade-offs, and a recommendation. This is the primary deliverable.kanban/todo/ derived from the spike's recommendation. These turn research into action.What a spike does NOT produce:
When completing a spike:
ready-to-review/All feature and bug tickets must follow TDD practices. See CLAUDE.md for the full policy.
type: feature)Work on feature tickets follows the Red → Green → Refactor loop:
Acceptance criteria on feature tickets should include testable assertions. When creating feature tickets, include a ## Test Plan section describing which tests will be written and what properties/behaviors they verify.
type: bug)Bug tickets require a reproduce-first workflow:
When creating bug tickets, include a ## Reproduction section describing the failure. When completing bug tickets, the review file must reference the reproducing test(s).
type: test)Test tickets add coverage to existing code. They still follow TDD thinking — write the test, confirm it passes against existing behavior, then note any bugs discovered as new bug tickets.
One file per work item. Keep items granular — a single feature, bug fix, or task. Not an epic.
Move files between directories to change status. Never delete items — move completed work to ready-to-review/.
Update the file when moving it. Add notes about what was done, check off acceptance criteria, update the branch in frontmatter if relevant.
When starting a session, read kanban/in-progress/ and kanban/todo/ to understand current state.
When finishing work:
ready-to-review/ and check off acceptance criteria.kanban/reviews/.feature and bug tickets, the review file must list the tests written and confirm they pass.When creating a PR, include the contents of the review file's "PR Notes" section in the PR body.
When the user creates new tasks, add them to kanban/todo/ with the template above.
Never auto-start work on a newly created ticket. When you create follow-up tickets (e.g. from a spike, or when the user describes new work), add them to kanban/todo/ and stop. Do not pick up or begin implementing a ticket unless the user explicitly asks you to. Always wait for confirmation before starting work.
Naming convention: Filenames use <type>--<kebab-case-slug>.md. The double-dash separates the type prefix from the descriptive slug. The work item and its review file share the same filename. Examples: feat--steel-thread-foundation.md in ready-to-review/ pairs with feat--steel-thread-foundation.md in reviews/.
Keep it lightweight. The kanban board is a coordination tool, not documentation. Link to design docs and code rather than duplicating content.
TDD is mandatory for feature and bug tickets. No implementation code before tests. The test suite is the source of truth for "done".
npx claudepluginhub kormie/dot-skillsManage a Markdown-based Kanban board using card files in a kanban/ directory (including kanban/archived/ for completed cards). Use when the user asks to create, move, view, list, or manage tasks or cards on a kanban board, or when tracking work items across statuses like backlog, todo, doing, done, or archive.
Defines conventions for TASKS.md files: structure with optional sections, status symbols ([ ] todo, [/] ongoing, [x] done, [-] backlog), task descriptions, and testable acceptance criteria. Use for creating, editing, updating tasks or tracking progress.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.