# Kamkan

> Plan and track AI work as tasks on a KamKan board. Before starting any multi-step task, break it into tasks, add them to the board, then move each through the columns as you work. Invoke as /kamkan [boardId] to activate for this session.

- Skill: `dayeggpi/kamkan-2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dayeggpi/kamkan-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dayeggpi/kamkan-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: dayeggpi (https://skillmd.com/u/dayeggpi)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/dayeggpi/kamkan-2

---


# KamKan Task Tracking

When invoked, activate task tracking for this session using the `kamkan` MCP server.

## Step 1 — Identify the board

Use the first available source:
1. Argument passed to this skill (e.g. `/kamkan MY_PROJECT`)
2. `KAMKAN_TASK_BOARD` environment variable
3. Ask the user: "Which KamKan board should I track tasks on?"

## Step 2 — Set up the board

Call `get_board` directly on the target board. If it fails (board not found), call `create_board` with:
- `boardId`: the chosen ID
- `columns`: `["Todo", "Doing", "Done"]`

Then call `get_board` again to get the fresh board state. Do NOT call `list_boards` when a boardId is already known.

Identify the three column roles from the result:
- **Todo column**: first column where `isArchive` is false and `isDone` is false
- **Doing column**: second such column (if it exists)
- **Done column**: the column where `isDone` is true, or the last non-archive column

Announce to the user:
> Tracking session on board **[boardId]** · Todo: "[col]" · Doing: "[col]" · Done: "[col]"
> Ready. Describe the work and I'll plan tasks before touching any code.

**From this point forward, for every work request in this session:** apply Steps 3–5 below. The board stays active for the entire conversation — do not wait to be re-invoked.

## Step 3 — Plan before acting

Whenever the user asks you to build, fix, refactor, or change anything — before writing any code or making any changes — break the work into **3–10 discrete tasks**.

Each task must be:
- A single, completable action ("Add input validation to login form", not "Work on auth")
- Specific enough that done/not-done is unambiguous
- Ordered by dependency (blockers first)

Call `create_task` for each task in the **Todo** column, in order.

Show the user the created task list with their numeric IDs.

## Step 4 — Work task by task

For each task in sequence:

1. Call `move_task` → **Doing** column (skip if no Doing column exists)
2. Do the work
3. Call `move_task` → **Done** column (or `complete_task` if it's the done column)

Never batch-complete tasks. Move each one individually as you actually finish it.

## Step 5 — Handle discovered work

If you uncover work that wasn't in the original plan:
- Immediately call `create_task` in the **Todo** column
- Say: "Added task [N]: [title]"

If a task turns out to be two tasks, create the new one and continue.

## Step 6 — End of session

When all work is done, call `get_board` and report a one-line summary:
> Done: [N] tasks completed · Remaining: [N] tasks in Todo/Doing

---

## Task naming guide

| Good | Bad |
|---|---|
| "Parse frontmatter from task detail file" | "Do the parsing" |
| "Add `create_board` handler to MCP server" | "Work on MCP" |
| "Write roundtrip test for serializeBoard()" | "Testing" |
| "Fix column color not persisting on save" | "Bug fix" |

## Column detection fallback

If `get_board` returns only one non-archive column, use it as both Todo and Done — skip the Doing step.
If the board has custom column names (e.g. "Backlog", "In Progress", "Review", "Done"), map them to the Todo/Doing/Done roles by position and `isDone` flag, not by name.

