Use when executing tasks from implementation plans. Provides task selection, parallel execution, progress tracking, and review cycle guidelines.
This skill provides guidelines for executing implementation plans created by the impl-plan agent.
Apply this skill when:
impl-plans/This skill bridges implementation plans (what to build) and actual code implementation. It provides:
NEVER read all plan files at once. This causes context overflow (>200K tokens).
Use impl-plans/PROGRESS.json instead, which contains:
Workflow:
PROGRESS.json (~2K tokens) to find executable tasksimpl-exec-specific updates the plan file immediatelyPROGRESS.json after impl-exec-specific completesClear ownership to avoid conflicts:
impl-exec-specific agent: Updates plan file (task status, progress log)Lock file path: impl-plans/.progress.lock
Before updating PROGRESS.json:
# Acquire lock (retry if busy)
while [ -f impl-plans/.progress.lock ]; do sleep 1; done
echo "<plan-name>:<TASK-ID>" > impl-plans/.progress.lock
After updating PROGRESS.json:
# Release lock
rm -f impl-plans/.progress.lock
This prevents race conditions when multiple conversations update concurrently.
{
"lastUpdated": "2026-01-06T16:00:00Z",
"phases": {
"1": { "status": "COMPLETED" },
"2": { "status": "READY" },
"3": { "status": "BLOCKED" },
"4": { "status": "BLOCKED" }
},
"plans": {
"session-groups-types": {
"phase": 2,
"status": "Ready",
"tasks": {
"TASK-001": { "status": "Not Started", "parallelizable": true, "deps": [] },
"TASK-002": { "status": "Not Started", "parallelizable": true, "deps": [] },
"TASK-007": { "status": "Not Started", "parallelizable": false, "deps": ["TASK-001"] }
}
}
}
}
"TASK-001" (task in same plan)"session-groups-types:TASK-001" (task in different plan)Two execution modes are available:
impl-exec-auto)Architecture: Analysis-only subagent + Main conversation orchestration via impl-exec-specific.
Claude Code does not support nested subagent spawning (subagents cannot use Task tool). Therefore:
impl-exec-auto agent: Analyzes plans and returns executable task listimpl-exec-specific to execute tasks (NOT direct ts-coding spawning)Cross-Plan Mode (no argument - recommended):
/impl-exec-auto
Analyzes ALL active plans and returns executable tasks across plans.
Single-Plan Mode (with argument):
/impl-exec-auto foundation-and-core
Focuses on one specific plan only.
Use this mode when:
The auto mode workflow:
Step 1: impl-exec-auto agent (analysis only):
impl-plans/PROGRESS.jsonStep 2: Main conversation (orchestration via impl-exec-specific):
impl-exec-specific with task IDs
b. impl-exec-specific handles: ts-coding, check-and-test, ts-review cycle, plan updatesimpl-exec-specific completes:
a. Updates PROGRESS.json status (with lock)
b. Reports completion and newly unblocked tasksWhy impl-exec-specific?
impl-exec-specific)Executes specific tasks by ID:
/impl-exec-specific foundation-and-core TASK-001 TASK-002
Use this mode when:
impl-plans/<plan-name>.mdSelect tasks for execution based on:
| Criterion | Priority | Rationale |
|---|---|---|
| Dependencies satisfied | Required | Cannot start blocked tasks |
| Marked as parallelizable | High | Can run concurrently |
| Small estimated effort | Medium | Quick wins build momentum |
| Foundation/core tasks | High | Unblock other tasks |
Execute tasks one at a time to avoid LLM errors:
run_in_background)CRITICAL: Execute this phase IMMEDIATELY after each task completes. DO NOT batch updates.
Responsibility Split (when using impl-exec-specific):
impl-exec-specific agent: Updates plan file onlyAfter task execution (within impl-exec-specific):
Update task status in the plan file:
Add progress log entry to plan file:
### Session: YYYY-MM-DD HH:MM
**Tasks Completed**: TASK-001, TASK-002
**Tasks In Progress**: TASK-003
**Blockers**: None
**Notes**: Implementation notes and decisions made
Check completion criteria for the overall plan
Update plan status in PROGRESS.json if all tasks done (set to "Completed")
NOTE: PROGRESS.json is updated by main conversation after impl-exec-specific completes. See "Main Conversation Orchestration Protocol" section for details.
No file move is required. PROGRESS.json is the single source of truth for plan status.
When invoking the ts-coding agent for a task:
Task tool parameters:
subagent_type: ts-coding
prompt: |
Purpose: <task description from implementation plan>
Reference Document: impl-plans/<plan-name>.md
Implementation Target: <deliverables list>
Completion Criteria:
- <criterion 1 from task>
- <criterion 2 from task>
- <criterion N from task>
run_in_background: true # For parallel execution of independent tasks
Note: Use run_in_background: true only when executing multiple independent tasks in parallel. Omit for sequential execution.
Extract prompt content from the task structure in the implementation plan:
### TASK-001: Core Interfaces
**Status**: Not Started
**Parallelizable**: Yes
**Deliverables**: <- Use for Implementation Target
- `src/interfaces/filesystem.ts`
- `src/interfaces/process-manager.ts`
**Description**: <- Use for Purpose
Define all core interfaces for abstracting external dependencies.
**Completion Criteria**: <- Use for Completion Criteria
- [ ] FileSystem interface defined
- [ ] ProcessManager interface defined
- [ ] Type checking passes
CRITICAL: Execute tasks ONE AT A TIME to avoid LLM errors.
For each task in the executable tasks list:
1. Invoke ts-coding (without run_in_background):
Task tool parameters:
subagent_type: ts-coding
prompt: |
Purpose: <TASK-001 description>
Reference Document: <implementation-plan-path>
Implementation Target: <TASK-001 deliverables>
Completion Criteria:
- <criterion 1>
- <criterion 2>
2. Wait for ts-coding to complete
3. Run check-and-test-after-modify:
Task tool parameters:
subagent_type: check-and-test-after-modify
prompt: |
Verify changes for TASK-001
4. Run ts-review (up to 3 iterations):
Task tool parameters:
subagent_type: ts-review
prompt: |
Review TASK-001 implementation
5. Update task status in plan
6. Proceed to TASK-002 (repeat steps 1-5)
All tasks run sequentially - each task completes fully (including review) before the next begins.
After each task completes:
Parse dependencies from plan:
**Parallelizable**: No (depends on TASK-001)
or
**Parallelizable**: No (depends on TASK-001, TASK-002)
| Type | Example | Resolution |
|---|---|---|
| Data dependency | Types must exist before using them | Execute sequentially |
| File dependency | Interface before implementation | Execute sequentially |
| None | Independent modules | Execute in parallel |
TASK-001 (Interfaces) TASK-002 (Errors) TASK-003 (Types)
| | |
+----------+---------------+ |
| |
TASK-004 (Mocks) TASK-007 (Repo Interfaces)
From this graph:
NOTE: To avoid LLM errors, all tasks now execute sequentially regardless of parallelization markers.
The "Parallelizable: Yes" marker is still used to:
When multiple tasks are executable, prefer this order:
| Status | Meaning |
|---|---|
Not Started |
Task not yet begun |
In Progress |
Currently being implemented |
Completed |
All completion criteria met |
Blocked |
Waiting on dependencies |
## Module Status
| Module | File Path | Status | Tests |
|--------|-----------|--------|-------|
| Core Interfaces | `src/interfaces/*.ts` | Completed | Pass |
| Error Types | `src/errors.ts` | In Progress | - |
| Mock Implementations | `src/test/mocks/*.ts` | Not Started | - |
### Session: 2026-01-04 14:30
**Tasks Completed**: TASK-001, TASK-002
**Tasks Started**: TASK-004
**Blockers**: None
**Notes**:
- Defined FileSystem, ProcessManager, Clock interfaces
- Added Result type with ok/err helpers
- Discovered need for additional WatchOptions type
A task is complete when:
bun run typecheck)A plan is complete when:
When a plan is complete:
impl-plans/README.md (move plan entry to Completed section if applicable)No file move is required. PROGRESS.json tracks plan completion status.
After task implementation and testing, each task goes through a code review cycle using the ts-review agent.
ts-coding agent (implementation)
|
v
check-and-test-after-modify agent (tests pass)
|
v
ts-review agent (iteration 1)
|
+-- APPROVED --> Task complete
|
+-- CHANGES_REQUESTED --> ts-coding (fixes) --> check-and-test --> ts-review (iteration 2)
|
+-- ... (up to 3 iterations)
The review cycle is limited to 3 iterations per task to prevent infinite loops:
| Iteration | Review Scope | Outcome |
|---|---|---|
| 1 | Full comprehensive review | APPROVED or CHANGES_REQUESTED |
| 2 | Focus on previous issues + new issues from fixes | APPROVED or CHANGES_REQUESTED |
| 3 | Critical issues only | APPROVED (with documented remaining issues) |
Task tool parameters:
subagent_type: ts-review
prompt: |
Design Reference: <path to design document>
Implementation Plan: impl-plans/<plan-name>.md
Task ID: TASK-XXX
Implemented Files:
- <file path 1>
- <file path 2>
Iteration: 1
Task tool parameters:
subagent_type: ts-review
prompt: |
Design Reference: <path to design document>
Implementation Plan: impl-plans/<plan-name>.md
Task ID: TASK-XXX
Implemented Files:
- <file path 1>
- <file path 2>
Iteration: 2
Previous Feedback:
- C1: Missing readonly modifiers
- S1: Duplicate validation logic
Focus Areas: readonly modifiers, duplicate validation
If APPROVED:
If CHANGES_REQUESTED:
When re-invoking ts-coding to fix review issues:
Task tool parameters:
subagent_type: ts-coding
prompt: |
Purpose: Fix code review issues for TASK-XXX
Reference Document: impl-plans/<plan-name>.md
Implementation Target: Fix the following review issues
Issues to Fix:
- C1 (Critical): src/foo.ts:25 - Missing required method X
Suggested Fix: Add method X per design spec section Y
- C2 (Critical): src/bar.ts:42 - Using `any` type
Suggested Fix: Replace with `unknown` and add type guard
- S1 (Improvement): src/foo.ts:30,45 - Duplicate validation logic
Suggested Fix: Extract to shared validateX function
Completion Criteria:
- All critical issues (C1, C2) are resolved
- Improvement suggestions addressed where reasonable
- Type checking passes
- Tests pass
### Session: 2026-01-04 14:30
**Tasks Completed**: TASK-001
**Review Iterations**: 2
**Review Summary**:
- Iteration 1: 2 critical issues, 1 improvement suggestion
- Iteration 2: APPROVED (all issues resolved)
**Notes**:
- Fixed missing readonly modifiers
- Extracted duplicate validation to shared utility
If a ts-coding agent fails:
If only some tasks complete:
| Action | Tool | Parameters |
|---|---|---|
| Read plan | Read | impl-plans/<plan>.md |
| Execute task | Task | subagent_type: ts-coding (NO run_in_background) |
| Run tests | Task | subagent_type: check-and-test-after-modify |
| Review code | Task | subagent_type: ts-review |
| Update plan | Edit | Update status, checkboxes, log |
| Update progress | Edit | Update PROGRESS.json task/plan status |
## Implementation Plan Completed
### Plan
`impl-plans/<plan-name>.md`
### Final Verification
- Type checking: Pass
- Tests: Pass (X/X)
### Plan Finalization
- Plan file status updated to: Completed
- PROGRESS.json status updated to: Completed
- README.md updated
### Next Steps
- Review completed implementation
- Consider integration testing
- Proceed to next implementation plan
### Failure Details
**TASK-XXX Failure**:
- Error: <error type>
- Details: <specific error message>
- Files affected: <file paths>
### Recommended Actions
1. Review failure details
2. Fix the issue
3. Re-run with: `/impl-exec-specific <plan-name> TASK-XXX`
check-and-test-after-modifyts-review for code review (max 3 iterations)When running /impl-exec-auto without arguments, the system analyzes active plans with lazy loading to prevent OOM.
DO NOT read all plan files. Only read plans from eligible phases.
impl-plans/README.md FIRST# Step 1: From README.md, get phase status
PHASE_STATUS = {
1: "COMPLETED",
2: "READY", # Only this phase is eligible
3: "BLOCKED",
4: "BLOCKED"
}
# Step 2: Get plan list for eligible phases from PHASE_TO_PLANS
eligible_phases = [p for p, s in PHASE_STATUS.items() if s == "READY"]
plans_to_read = PHASE_TO_PLANS[eligible_phases[0]] # Only Phase 2 plans
# Step 3: Read ONLY these plans (12 files, not 25)
# DO NOT read Phase 3/4 plans - they are BLOCKED
From impl-plans/README.md:
Phase 1: foundation-* (COMPLETED)
|
v
Phase 2: session-groups-*, command-queue-*, markdown-parser-*,
realtime-*, bookmarks-*, file-changes-*
| (can run in parallel with each other)
v
Phase 3: daemon-core, http-api, sse-events
|
v
Phase 4: browser-viewer-*, cli-*
When updating plans after cross-plan execution:
When a phase-gating plan completes (e.g., foundation-and-core):
/impl-exec-auto again for next phase| Skill/Agent | Relationship |
|---|---|
impl-plan/SKILL.md |
Read plans created by this skill |
ts-coding-standards/ |
ts-coding agent follows these |
design-doc/SKILL.md |
Original design reference |
ts-review agent |
Code review after implementation |
check-and-test-after-modify agent |
Test verification before review |
After impl-exec-auto returns the executable tasks list, the main conversation handles orchestration via impl-exec-specific.
IMPORTANT: DO NOT spawn ts-coding agents directly from the main conversation. Use impl-exec-specific instead.
1. Receive executable tasks list from impl-exec-auto
2. Group tasks by plan name
3. For each plan with executable tasks:
a. Invoke impl-exec-specific:
/impl-exec-specific <plan-name> <TASK-IDs>
Example:
/impl-exec-specific session-groups-runner TASK-008
/impl-exec-specific command-queue-core TASK-005 TASK-006
/impl-exec-specific bookmarks-types TASK-003 TASK-004
b. impl-exec-specific handles internally:
- ts-coding spawning
- check-and-test-after-modify
- ts-review cycle (up to 3 iterations)
- Plan file status updates
4. After impl-exec-specific completes:
a. Update PROGRESS.json (with lock)
b. Report results
5. Repeat for remaining plans/tasks
| Approach | Problem |
|---|---|
| Main spawns ts-coding directly | Main lacks review cycle logic, plan update format |
| impl-exec-auto spawns ts-coding | Claude Code prohibits nested subagent spawning |
| Main invokes impl-exec-specific | Correct - full implementation cycle handled |
1. Acquire lock:
Bash: while [ -f impl-plans/.progress.lock ]; do sleep 1; done && echo "<plan>:<task>" > impl-plans/.progress.lock
2. Edit PROGRESS.json:
// Before:
"TASK-001": { "status": "Not Started", "parallelizable": true, "deps": [] }
// After:
"TASK-001": { "status": "Completed", "parallelizable": true, "deps": [] }
Also update `lastUpdated` timestamp.
3. Release lock:
Bash: rm -f impl-plans/.progress.lock
The impl-exec-auto analysis found 9 executable tasks across 6 plans.
Executing via impl-exec-specific:
1. /impl-exec-specific session-groups-runner TASK-008
Result: TASK-008 completed (2 review iterations)
2. /impl-exec-specific command-queue-core TASK-005 TASK-006
Result: TASK-005, TASK-006 completed
3. /impl-exec-specific markdown-parser-core TASK-004
Result: TASK-004 completed
... (continue for remaining plans)
All 9 tasks completed. PROGRESS.json updated.
Newly unblocked tasks: TASK-009, TASK-010
If impl-exec-specific reports a task failure:
/impl-exec-specific <plan-name> <failed-task-id>