# 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-3` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dayeggpi/kamkan-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dayeggpi/kamkan-3/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-3

---


# KamKan Task Tracking

Use the `kamkan` MCP server to plan and track this session's work on a KamKan board.

## Activation

Activate when:
- The user types `/kamkan [boardId]`
- The user has `KAMKAN_TASK_BOARD` set and starts a multi-step request
- The user asks you to track or plan your work on a board

## Step 1 — Identify the board

Use the first available source:
1. Board ID passed in the invocation (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 on the new board. Do NOT call `list_boards` when a boardId is already known.

Identify the three column roles:

| Role | How to detect |
|---|---|
| **Todo** | First column where `isArchive: false` and `isDone: false` |
| **Doing** | Second column where `isArchive: false` and `isDone: false` (may not exist) |
| **Done** | Column where `isDone: true`, or last non-archive column |

Announce:
> Tracking 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

**Before writing any code, running commands, or making 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. Show the user the resulting task list with IDs.

### Task title examples

| Good | Bad |
|---|---|
| "Implement JWT refresh endpoint" | "Backend work" |
| "Add input validation to registration form" | "Fix form" |
| "Write unit tests for parseBoard()" | "Tests" |
| "Update README with new install steps" | "Documentation" |

## Step 4 — Execute task by task

For each task in sequence:

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

**Never mark a task done before the work is actually finished.**
**Never batch-complete multiple tasks at once.**

## Step 5 — Handle discovered tasks

When you uncover work not in the original plan:
- Call `create_task` in the **Todo** column immediately
- Tell the user: "Added task [N]: [title]"

When a task splits into two, rename the current one and create the second as a new task.

## Step 6 — Session summary

After all work is done, call `get_board` and report:
> ✓ [N] tasks completed · [N] remaining in [Todo/Doing]

---

## Edge cases

**Only one active column**: Use it as both Todo and Done. Skip the move-to-Doing step.

**Custom column names** (e.g. "Backlog", "In Progress", "Review"): Map by position and `isDone` flag, not by name.

**User changes scope mid-session**: Add new tasks, move cancelled ones directly to Done prefixed with "CANCELLED: ".

