skills/tt-implement-plan/SKILL.md
Tasktracker-native plan orchestrator. Drives execution of a plan whose phases are stored as tasktracker phase tasks (NOT a docs/plans/*.md file). Honours active-task discipline (setActiveTask before every artifact-producing call, pauseActiveTask before user waits, clearActiveTask on phase done), respects the locked phase body (design notes go to sub-tasks, never to the phase description), logs defects/learnings/frictions through tasktracker insights as they surface, and delegates the actual implementation to /implement-phase. Use whenever the user wants to "implement the plan", "run the plan", or "work through the phases" AND the plan was created with /tt-create-plan (or otherwise lives in tasktracker). Triggers on "tt implement plan", "tt implement", "implement plan (tasktracker)", "/tt-implement-plan", "execute the tasktracker plan", or any plan-execution request inside a session that already has a tasktracker active task or project. Prefer this over the plain /implement-plan skill whenever a tasktracker MCP is available — it correctly handles the locked phase body, requirement linking, insight logging, and lifecycle gating that the file-based variant ignores.
npx skillsauth add mhylle/claude-skills-collection tt-implement-planInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Tasktracker-native orchestrator that executes a plan stored as phase tasks. It runs phases one at a time, honours active-task / locked-body / insight-logging conventions, and delegates the actual code work to /tt-implement-phase (which in turn delegates to subagents).
| | /implement-plan | /tt-implement-plan (this skill) |
|---|---|---|
| Plan source | docs/plans/*.md + task_list_id | Phase tasks in tasktracker (no file) |
| Progress tracking | TaskCreate/TaskUpdate (built-in) | tasktracker_updateTaskStatus + active-task heartbeats |
| Active task discipline | None | setActiveTask / pauseActiveTask / clearActiveTask — required |
| Phase body updates | Free edit | Forbidden once children exist — write to sub-tasks |
| Insight capture | Ad-hoc / lessons.md | logDefect, logLearning, logFriction |
| Multi-session resume | CLAUDE_CODE_TASK_LIST_ID=... | Built-in: active task persists across MCP restarts |
| Completion criterion | All checkboxes ticked | All phase tasks completed AND no in-progress sub-tasks |
If the plan came from /create-plan (file-based), use /implement-plan. If the plan lives in tasktracker, use this skill.
THIS SESSION IS A PLAN-LEVEL ORCHESTRATOR. IT NEVER IMPLEMENTS CODE DIRECTLY — it walks phases and delegates each to
/tt-implement-phase. That holds in every environment. What varies is one level down:/tt-implement-phasewrites code via subagents when a subagent-dispatch tool exists, or in-context itself when none does (its graceful-degradation mode). Either way, this session's job is unchanged — drive the plan, never the code.
tt-implement-plan (this session — PLAN ORCHESTRATOR)
│
│ ⛔ NEVER writes code ⛔ NEVER uses Write/Edit (in EVERY mode)
│ (creates files only via tasktracker MCP calls)
│
└── tt-implement-phase (per-phase executor)
│
├── orchestrated mode → Subagents write code / create files / run tests
└── in-context mode → tt-implement-phase does it directly (no subagent tool)
| DO | DO NOT |
|---|---|
| Read task tree, principles, requirements | Write code |
| Set/pause/clear active task | Create files (other than via MCP) |
| Invoke /tt-implement-phase per phase | Use Write/Edit/NotebookEdit |
| Track plan-level progress via task status | Run implementation commands |
| Log defects / learnings / frictions | Edit a locked phase body |
| Pause for user confirmation between phases | Skip readiness gates |
If you find yourself about to use Write/Edit/NotebookEdit:
⛔ STOP — you are violating the plan-orchestrator pattern.
✅ Delegate to /tt-implement-phase. (It will spawn subagents, or — with no
subagent tool — do the work in-context. Plan-level code-writing is the bug,
regardless of which mode the phase runs in.)
1. tasktracker_listProjects({search: "..."}) # or use argument hint.
- If user passed a slug or id, use it directly with getProject.
2. tasktracker_getProject({projectId})
3. tasktracker_getProjectReadiness({projectId})
- The `plan` row should read satisfied — meaning concrete phases
exist beyond the four lifecycle phases. If not, STOP. The user
probably needs /tt-create-plan first.
If the user gives a phase task id directly ("implement phase X"), skip the readiness gate and treat that single phase as the scope.
tasktracker_getPrinciples({projectId, includeGlobal: true})
tasktracker_listRequirements({projectId, status: "approved"})
Spend a moment reading. Principles are the durable rules; requirements are the contract this work fulfils. The next ~hour of decisions hangs off these.
tasktracker_listTasks({projectId, type: "phase"})
# Filter out the four lifecycle phases (metadata.lifecycleSlug ∈
# {brainstorm, requirements, architecture, plan}) — those are done.
# What remains is the implementation plan.
# For each implementation phase, in dependency order:
tasktracker_getTask({taskId}) # full body + sub-tasks
tasktracker_listAcceptanceCriteria({...}) # if linked
Note the order: phase tasks are intended to be executed in the order they were created (or per blockedBy if explicit). Identify the first non-completed phase — that's the resume point.
For each implementation phase, in order:
- status == "completed" → skip
- status == "in_progress" → resume from here
- status == "pending" → first incomplete; resume from here
- Stop at the first pending/in_progress one.
Display the resume point to the user:
● Plan Status: <project name>
✓ Phase 1 — Database schema (completed)
✓ Phase 2 — Auth service (completed)
◻ Phase 3 — API endpoints (in_progress) ← resume here
◻ Phase 4 — Tests (pending, blocked by 3)
◻ Phase 5 — Docs (pending, blocked by 4)
Resuming Phase 3.
Multi-session note: the MCP persists activeTask to ~/.config/tasktracker-mcp/active-task across restarts. You usually do not need CLAUDE_CODE_TASK_LIST_ID=... — opening a new session sees the same active task.
For each phase, in order:
tasktracker_setActiveTask(<phase-task-id>)
tasktracker_updateTaskStatus(<phase-task-id>, "in_progress")
setActiveTask returns a digest containing principles, the phase body, acceptance criteria, and (if present) the directional-work block. Read this carefully — it's the ground truth for the phase scope. Do not re-derive scope from the original brainstorm; the phase body is the locked contract.
═══════════════════════════════════════════════════════════════
● STARTING PHASE N: <Phase Name>
═══════════════════════════════════════════════════════════════
Objective: <from phase body>
Verification approach: <from phase body>
Requirements: <list of REQ-... this phase implements>
Sub-tasks: <count> seeded
Principles in play: <any directly relevant>
Delegating to /tt-implement-phase...
Skill(skill="tt-implement-phase"): Execute Phase N.
Context:
- Project: <project name + id>
- Phase task id: <id>
- Phase title: <title>
- Sub-tasks: <list from getTask>
- Requirements: <list of (id, title, criteria) from listAcceptanceCriteria>
- Principles: <surfaced from setActiveTask digest>
Execute all quality gates. Update each sub-task's status as it
completes. Return structured PHASE_RESULT.
CRITICAL: do NOT update the phase description — it is locked
once sub-tasks exist (HTTP 422). Any design rationale or new
finding goes to the "Design + decision note" sub-task (or a
new sub-task if that one is already closed).
/tt-implement-phase handles: subagent delegation for code, sub-task setActiveTask/updateTaskStatus discipline, exit-condition verification via /verification-loop, integration testing, code review via /code-review, ADR compliance, task-tree synchronization, and insight logging. This skill does not do any of that work directly.
Expect two short reports in the main chat per phase: a pre-flight report (right after tt-implement-phase's Step 0 — objective, sub-task titles, verification approach) and a completion report (at Step 8 — counts, statuses, caveats). Don't restate them; they're already terse on purpose. If tt-implement-phase does NOT emit a pre-flight report before subagent work starts, treat that as a skill-bug worth surfacing — the contract requires it.
/tt-implement-phase Step 7 captures phase-level insights. At the plan-orchestrator level, ALSO log anything that surfaces as a cross-phase concern (e.g., a defect that affects future phases, a friction with the plan itself). Don't bury it in chat.
| Situation | Tool | Notes |
|---|---|---|
| Bug discovered during this phase | tasktracker_logDefect | Severity + repro steps. Counts toward getDefectStats. |
| Pattern learned, applicable to future work | tasktracker_logLearning | E.g., "uuid v14 is ESM-only — trips ts-jest". Becomes searchable via listInsights. |
| Friction encountered (slow build, flaky test, confusing error) | tasktracker_logFriction | Use category=workflow when it's process pain, category=code when it's code pain. |
| Defect / missing capability in TaskTracker itself (MCP tool, workflow, a tt-* skill) | tasktracker_reportToTaskTracker | Files UPSTREAM into the central TaskTracker project (continual-correction loop), NOT a local insight. |
If a principle should be added based on this phase's experience, propose it to the user — don't silently add. Principles are a charter, not a backlog.
Before any message that ends with a question, tasktracker_pauseActiveTask. The user's thinking time is not work time.
When /tt-implement-phase returns PHASE_RESULT.status: COMPLETE:
completed (or deleted if dropped, with a one-line reason logged).tasktracker_updateTaskStatus(<phase-task-id>, "completed").If /tt-implement-phase returns BLOCKED, stop. Surface the blocker and options to the user (see "Handling blockers" below). Do not auto-proceed.
If /tt-implement-phase returns COMPLETE with caveats (e.g., one sub-task had to be skipped), it will have called completeWithCaveat itself — just propagate the caveat in the user-facing summary.
═══════════════════════════════════════════════════════════════
● PHASE N COMPLETE: <Phase Name>
═══════════════════════════════════════════════════════════════
Results from /tt-implement-phase:
✅ Implementation: <N> files created, <M> modified
✅ Exit Conditions: all passed
✅ Code Review: passed with <K> recommendations
✅ ADR Compliance: passed
✅ Sub-tasks: <X>/<X> completed
Insights logged this phase:
• Defect: <id> — <summary>
• Learning: <id> — <summary>
• Friction: <id> — <summary>
Manual verification required:
- [ ] <user-observable check from PHASE_RESULT>
───────────────────────────────────────────────────────────────
Please confirm the manual verification, then say "go" to start
Phase N+1: <Next Phase Name>.
═══════════════════════════════════════════════════════════════
pauseActiveTask before sending this message.
When all implementation phases are completed:
tasktracker_getProjectReadiness({projectId})
# Verify all four lifecycle rows still satisfied; verify plan row.
# ── Definition-of-Done gate (Phase 115) ──────────────────────────
# THE authoritative "is the build actually done" check. Server-side,
# all-pillars: every phase completed, zero unsatisfied ACs on linked
# approved requirements, zero open defects, zero architecture drift.
tasktracker_getProjectDoneness({projectId})
# If done:false — DO NOT declare the build complete. Surface each
# blocker, resolve it (or open a follow-up phase), and re-run. A
# "green" completion with open defects / unsatisfied ACs / drift is
# exactly what this gate exists to stop. readiness=plan formed;
# doneness=work correct — both must pass before the closing summary.
tasktracker_getDefectStats({projectId})
tasktracker_getImprovementMetrics({projectId})
tasktracker_clearActiveTask()
Closing summary:
═══════════════════════════════════════════════════════════════
● PLAN COMPLETE: <Project Name>
═══════════════════════════════════════════════════════════════
Implementation phases completed: <N>/<N>
Insights this run:
Defects logged: <count> (open: <count>)
Learnings: <count>
Frictions: <count>
Final verification:
- [ ] E2E run: <command>
- [ ] Documentation updated (if applicable)
- [ ] Security checklist (if security-sensitive)
Active task cleared. Ready for review.
═══════════════════════════════════════════════════════════════
When /tt-implement-phase returns BLOCKED:
Don't auto-fix. Don't auto-revise the plan. Don't auto-edit the phase body (it's locked anyway). The user owns the call.
⛔ PHASE N BLOCKED
Issue: <from /tt-implement-phase>
Options:
A) <option from /tt-implement-phase>
B) <option>
C) Abort and create a follow-up phase
Recommendation: <which option, with rationale>
How should I proceed?
If the resolution is "create a follow-up phase", do that outside the blocked phase — tasktracker_createTask({type: "phase", ...}) with a clear title, linked to the same requirements. Do not stuff new scope into the blocked phase's body (which is locked anyway).
Five common situations where you'd want to edit the phase body, and the right answer:
| You want to… | Do this instead |
|---|---|
| Record why you took a different approach than planned | createTask({type: "subtask", parentId: <phase>, title: "Decision: <topic>"}) with the rationale in the body |
| Note a discovered scope gap | New sub-task under the phase if minor; new phase if major |
| Update the verification approach | New sub-task Verification — updated approach documenting the change; the original verification approach in the phase body stands as the planning-time intent |
| Note an ADR was created mid-phase | New sub-task ADR-NNNN reference with the link |
| Cross-reference to another phase | Set metadata.relatedPhaseIds: [...] on the phase task (metadata is editable) |
This is not bureaucracy — it's the audit trail. The phase body shows "what we planned", the sub-tasks show "what actually happened", and the diff is debuggable.
/tt-implement-phase.setActiveTask before phase work — heartbeats won't fire, principles won't surface.pauseActiveTask before user-wait messages.completed with sub-tasks still in_progress.logDefect/logLearning.TaskCreate/TaskUpdate (the Claude-Code built-ins) for phase progress — use tasktracker_updateTaskStatus.setActiveTask set before the first artifact-producing call.setActiveTask digest (not re-derived)./tt-implement-phase did the actual work; this session orchestrated.completed as each finished.pauseActiveTask before every user-wait message.completed only when all sub-tasks are completed (or explicitly dropped).completed.getProjectReadiness shows all four lifecycle rows still satisfied.getProjectDoneness returns done:true — the build was NOT declared complete while any blocker stood (open defects / unsatisfied ACs / incomplete phases / architecture drift).getDefectStats reviewed; open defects either resolved or have a follow-up task.clearActiveTask called.plan-format.md — Expected shape of a tasktracker-stored plan (phase task body conventions, sub-task patterns).insight-cookbook.md — When and how to use logDefect, logLearning, logFriction. Common patterns./tt-implement-phase — Per-phase orchestrator. This skill delegates to it for every phase./code-review — Per-phase quality gate inside /tt-implement-phase./adr — Recording mid-implementation design decisions (the ADR file lives in docs/decisions/; the reference goes to a sub-task)./verification-loop — 6-check verification framework used inside /tt-implement-phase./project-ready — Useful at start and end as a sanity check./tt-create-plan — Upstream: the skill that produces the plan this orchestrator runs./tt-implement-phase for all phase work.setActiveTask / pauseActiveTask / clearActiveTask are not optional.logDefect / logLearning / logFriction, not just chat./tt-implement-phase results — act on the structured PHASE_RESULT.tools
--- name: tt-workflow-build description: Tasktracker-native trigger for a PARALLEL build via the Claude Code Workflow tool. Thin by design — it does two things, then drives to done: (1) ensure a tasktracker project exists (use the existing one, or create one), then (2) start a dynamic `Workflow` that builds it, tracking the work in tasktracker and using the build + verify skills. It does NOT analyze parallelism up front, ask the user to choose a mode, hand back, or fall back to a sequential skil
tools
--- name: grumpy-reviewer description: A single grumpy, nitpicky structural code reviewer that runs as an isolated subagent and treats the code as third-party work submitted by a junior programmer for validation. It cares about exactly one thing — maintainability — judged through separation of concerns, service-oriented design, helper-method extraction, small files, and the rule of 7 (as any grouping nears 7 members, it pushes for sub-groupings). It is deliberately kept OUT of the implementation
development
--- name: tt-workflow-run description: Tasktracker-native autonomous build-loop orchestrator. Drives a first-class `workflow_run` end-to-end — create the run (Gate 1 lifecycle completeness + Gate 2 zero-defects-in), then loop while `getNextReadyTask(projectId)` returns a slice — `setActiveTask` → record a pre-slice `scanArchitectureDrift` baseline → delegate the slice to `/tt-implement-phase` (which does the code work, registers the architecture delta in-slice, and auto-logs defects/learnings/fr
tools
Tasktracker-native project-wide parallel audit using the Claude Code Workflow tool (dynamic workflows). Partitions a repo / backlog / architecture and fans out read-only agents (one per partition) that return schema-checked findings, aggregates them into a deduplicated, ranked risk register, and OPTIONALLY writes fixes back as tasks under a Bug Fix phase — with all tasktracker writes done by the PARENT, never the parallel agents (single global active-task pointer). Journaled and resumable, so a rate-limit or crash mid-audit resumes without re-running completed partitions. Use for large, embarrassingly-parallel, read/analyze-heavy jobs where each unit is self-contained and the output aggregates — audit every file/component for risk, find all architecture drift (scanArchitectureDrift) or duplicate tasks (detectDuplicates/auditDuplicates), per-file tech-debt sweep, test-coverage or security-surface scan across a whole project. Triggers on "/tt-workflow-audit", "audit the whole repo", "parallel audit", "scan every file/component", "find all drift/duplicates", "tech-debt sweep (tasktracker)", or any whole-project analyze-at-scale request inside a session with a tasktracker project. Prefer this over /codebase-audit or /code-quality-audit when the project is tracked in tasktracker AND you want the findings written back as tasks; prefer it over team-* modes when the units don't need to negotiate live (they just report).