feat: add checkpoint pause/resume for spawned agents

- execute-plan.md: Add checkpoint_return_for_orchestrator step
  explaining how to return at checkpoints when spawned via Task tool
- subagent-task-prompt.md: Add checkpoint_behavior and completion_format
  sections to guide agents on returning for checkpoints

Tested: Task resume works - agent pauses at checkpoint, returns with
details, orchestrator presents to user, resumes with Task(resume=id).
Parallel agents each get unique agent_id for independent resume.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Lex Christopherson
2026-01-13 16:47:33 -06:00
parent 601c60c650
commit 72da23dec9
2 changed files with 84 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
# Subagent Task Prompt Template
Template for spawning plan execution subagents from execute-phase orchestrator.
Template for spawning plan execution agents from execute-phase orchestrator.
---
@@ -11,6 +11,8 @@ Template for spawning plan execution subagents from execute-phase orchestrator.
Execute plan {plan_number} of phase {phase_number}-{phase_name}.
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
**Checkpoint handling:** If you hit a checkpoint task, STOP and return a checkpoint message (see checkpoint_behavior below). The orchestrator will present it to the user and resume you with their response.
</objective>
<execution_context>
@@ -26,8 +28,40 @@ Project state: @.planning/STATE.md
Config: @.planning/config.json (if exists)
</context>
<checkpoint_behavior>
When you encounter a checkpoint task (type="checkpoint:*"), STOP execution and return this format:
## CHECKPOINT REACHED
**Type:** [human-verify | decision | human-action]
**Plan:** {phase}-{plan}
**Progress:** {completed}/{total} tasks complete
[Checkpoint content from checkpoint_protocol in execute-plan.md]
**Awaiting:** [Resume signal from the task]
The orchestrator will present this to the user and resume you with their response.
When resumed, you'll receive: "User response: {their_input}"
Parse and continue appropriately.
</checkpoint_behavior>
<completion_format>
When plan completes successfully, return:
## PLAN COMPLETE
**Plan:** {phase}-{plan}
**Tasks:** {completed}/{total}
**SUMMARY:** {path to SUMMARY.md}
**Commits:**
- {hash}: {message}
...
</completion_format>
<success_criteria>
- [ ] All tasks executed
- [ ] All tasks executed (or paused at checkpoint)
- [ ] Each task committed individually
- [ ] SUMMARY.md created in plan directory
- [ ] STATE.md updated with position and decisions
@@ -58,4 +92,8 @@ Task(
)
```
Subagent reads @-references, loads full workflow context, executes plan.
Agent reads @-references, loads full workflow context, executes plan.
When agent returns:
- If contains "## CHECKPOINT REACHED": Parse and present to user, then resume
- If contains "## PLAN COMPLETE": Finalize execution

View File

@@ -1152,6 +1152,49 @@ I'll verify after: [verification]
See ~/.claude/get-shit-done/references/checkpoints.md for complete checkpoint guidance.
</step>
<step name="checkpoint_return_for_orchestrator">
**When spawned by an orchestrator (execute-phase or execute-plan command):**
If you were spawned via Task tool and hit a checkpoint, you cannot directly interact with the user. Instead, RETURN to the orchestrator with checkpoint details so it can present to the user and resume you.
**Return format for checkpoints:**
```
## CHECKPOINT REACHED
**Type:** [human-verify | decision | human-action]
**Plan:** {phase}-{plan}
**Progress:** {completed}/{total} tasks complete
[Checkpoint content - same as checkpoint_protocol display above]
**Awaiting:** [Resume signal from the task]
```
The orchestrator will:
1. Parse your return
2. Present the checkpoint to the user
3. Collect user's response
4. Resume you with: `Task(resume=your_agent_id, prompt="User response: {their_input}")`
**When resumed after checkpoint:**
You will receive a prompt like: `"User response: approved"` or `"User response: option-a"`
- Parse the user's response
- If approved/done: continue to next task
- If issues described: address them, then continue or re-present checkpoint
- If option selected: proceed with that choice
**How to know if you were spawned:**
If you're reading this workflow because an orchestrator spawned you (vs running directly from /gsd:execute-plan), the orchestrator's prompt will include checkpoint return instructions. Follow those instructions when you hit a checkpoint.
**If running in main context (not spawned):**
Use the standard checkpoint_protocol - display checkpoint and wait for direct user response.
</step>
<step name="verification_failure_gate">
If any task verification fails: