board — tm_board, rendered as a table
tm_board is read-only and derives every state from task.json itself — never a second source
of truth. This skill calls it and prints the Output Template below; it makes no decisions.
Process
- No EPIC named →
tm_board({})→ the epic-list table. - An EPIC named (
E-xxxxxxxx) → calltm_board({task_id: "E-xxxxxxxx"})with the key straight through;tm_boardresolves it the same waytm_ticketdoes, so no lookup round trip is needed here (a fulltask_idfrom earlier in the session also still works, unchanged). - Render exactly the fields the reply carries; do not add columns for data it doesn't return (no vendor/model, no human-inbox counts, no gate status — those come from tooling this round didn't build).
- If the human wants the long form, name
doc_pathrather than reading the md into context — render it first withtm_docs({task_id})if it doesn't exist on disk yet.
Output Template
Epic list (no EPIC named):
| key | title | state | phase |
|------------|--------------------|-------------|-------|
| E-a1b2c3d4 | 결제 취소 기능 | IN_PROGRESS | impl |
| E-b2c3d4e5 | 알림 배치 정리 | DONE | report|
One EPIC (named):
## E-a1b2c3d4 결제 취소 기능 state: IN_PROGRESS phase: impl daemon: pid 4121 alive
| key | role | state | tasks | last verdict |
|------|----------|--------------|-------|--------------|
| PLAN | planning | DONE | 1/1 | accept 92 |
| P1 | develop | DONE | 3/3 | accept 94 |
| P2 | develop | IN_PROGRESS | 2/5 | — |
| P3 | develop | WAITING_USER | — | — |
| QA | qa | READY | — | — |
doc: .teams_output/team/E-a1b2c3d4/INDEX.md
role is develop for an ordinary package. planning, qa and audit are the phase-Team rows
that .claude/team.json's roles.planning/roles.qa switches insert into the EPIC flow, each
appearing only when its switch is on: planning (key PLAN) is always the first row — it drafts
the PRD shape reads, before shape runs at all. qa (key QA) runs between integrate and
gate:goal, reusing the repair worktree. audit (key AUDIT, roles.planning again) is always
the last row — planning's second pass, cross-checking the integrated result against its own PRD
after QA, or straight after integrate when qa is off. tasks is — when no dispatch has
started a child run.
reporter says where a story came from: shape is original scope, repair is an integration
seam, and qa, planning-audit and you are filed stories — a defect QA found, a user story the
audit found unmet, and one filed by hand through tm_file. Anything but shape is work the EPIC
grew after shaping; call it out in prose under the table.
daemon prints none when the task has none yet.
What Claude Does
Calls tm_board with the right argument — the EPIC key or a full task_id, passed straight
through — and renders the table above — nothing more.
What You Do
Name an EPIC key for its kanban, or nothing for the full list. Open doc_path yourself for the
long form; the skill won't paste it into the conversation.
For a live visual instead of a table — the manager pipeline, per-package cards, each child
run's node chain, and the event ledger, polling every ~3s in a browser — run
node teams/scripts/view.mjs --task <task_id> (read-only; --once prints a text tree instead).
Related Skills
ticket— one ticket's full detail, EPIC or STORYorchestrate— drives the run this board reports on