get-shit-done-cc 1.3.31 → 1.3.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +125 -100
- package/commands/gsd/resume-task.md +87 -0
- package/get-shit-done/templates/agent-history.md +161 -0
- package/get-shit-done/workflows/execute-phase.md +114 -5
- package/get-shit-done/workflows/resume-project.md +26 -0
- package/get-shit-done/workflows/resume-task.md +259 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# GET SHIT DONE
|
|
4
|
+
|
|
5
|
+
**A light-weight and powerful meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.**
|
|
2
6
|
|
|
3
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/get-shit-done-cc)
|
|
8
|
+
[](https://www.npmjs.com/package/get-shit-done-cc)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
[](https://github.com/glittercowboy/get-shit-done)
|
|
11
|
+
|
|
12
|
+
<br>
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx get-shit-done-cc
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Works on Mac, Windows, and Linux.**
|
|
19
|
+
|
|
20
|
+
<br>
|
|
4
21
|
|
|
5
22
|

|
|
6
23
|
|
|
7
|
-
<div align="center">
|
|
8
24
|
<br>
|
|
9
25
|
|
|
10
26
|
*"If you know clearly what you want, this WILL build it for you. No bs."*
|
|
@@ -17,67 +33,50 @@
|
|
|
17
33
|
|
|
18
34
|
**Trusted by engineers at Amazon, Google, Shopify, and Webflow.**
|
|
19
35
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
---
|
|
36
|
+
[Why I Built This](#why-i-built-this) · [How It Works](#how-it-works) · [Commands](#commands) · [Why It Works](#why-it-works)
|
|
23
37
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
GSD fixes that. It's the context engineering layer that makes Claude Code reliable. Describe your idea, let the system extract everything it needs to know, and let Claude Code get to work.
|
|
38
|
+
</div>
|
|
27
39
|
|
|
28
40
|
---
|
|
29
41
|
|
|
30
|
-
##
|
|
31
|
-
|
|
32
|
-
People who want to describe what they want and have it built correctly — without pretending they're running a 50-person engineering org.
|
|
33
|
-
|
|
34
|
-
### Marketplace Installation
|
|
42
|
+
## Why I Built This
|
|
35
43
|
|
|
36
|
-
|
|
44
|
+
I'm a solo developer. I don't write code — Claude Code does.
|
|
37
45
|
|
|
38
|
-
|
|
39
|
-
/plugin marketplace add glittercowboy/get-shit-done
|
|
40
|
-
/plugin install get-shit-done@get-shit-done
|
|
41
|
-
```
|
|
46
|
+
Other spec-driven development tools exist; BMAD, Speckit... But they all seem to make things way more complicated than they need to be (sprint ceremonies, story points, stakeholder syncs, retrospectives, Jira workflows) or lack real big picture understanding of what you're building. I'm not a 50-person software company. I don't want to play enterprise theater. I'm just a creative person trying to build great things that work.
|
|
42
47
|
|
|
43
|
-
|
|
48
|
+
So I built GSD. The complexity is in the system, not in your workflow. Behind the scenes: context engineering, XML prompt formatting, subagent orchestration, state management. What you see: a few commands that just work.
|
|
44
49
|
|
|
45
|
-
|
|
50
|
+
The system gives Claude everything it needs to do the work *and* verify it. I trust the workflow. It just does a good job.
|
|
46
51
|
|
|
47
|
-
|
|
48
|
-
git clone https://github.com/glittercowboy/get-shit-done.git
|
|
49
|
-
claude --plugin-dir ./get-shit-done
|
|
50
|
-
```
|
|
52
|
+
That's what this is. No enterprise roleplay bullshit. Just an incredibly effective system for building cool stuff consistently using Claude Code.
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
— **TÂCHES**
|
|
53
55
|
|
|
54
56
|
---
|
|
55
57
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
I'm a solo developer. I don't write code — Claude Code does.
|
|
59
|
-
|
|
60
|
-
Other spec-driven development tools exist; BMAD, Speckit... But they all seem to make things way more complicated than they need to be (sprint ceremonies, story points, stakeholder syncs, retrospectives, Jira workflows) or lack real big picture understanding of what you're building. I'm not a 50-person software company. I don't want to play enterprise theater. I'm just a creative person trying to build great things that work.
|
|
58
|
+
Vibecoding has a bad reputation. You describe what you want, AI generates code, and you get inconsistent garbage that falls apart at scale.
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
GSD fixes that. It's the context engineering layer that makes Claude Code reliable. Describe your idea, let the system extract everything it needs to know, and let Claude Code get to work.
|
|
63
61
|
|
|
64
|
-
|
|
62
|
+
---
|
|
65
63
|
|
|
66
|
-
|
|
64
|
+
## Who This Is For
|
|
67
65
|
|
|
68
|
-
—
|
|
66
|
+
People who want to describe what they want and have it built correctly — without pretending they're running a 50-person engineering org.
|
|
69
67
|
|
|
70
68
|
---
|
|
71
69
|
|
|
72
|
-
##
|
|
70
|
+
## Getting Started
|
|
73
71
|
|
|
74
72
|
```bash
|
|
75
73
|
npx get-shit-done-cc
|
|
76
74
|
```
|
|
77
75
|
|
|
78
|
-
That's it.
|
|
76
|
+
That's it. Verify with `/gsd:help`.
|
|
79
77
|
|
|
80
|
-
|
|
78
|
+
<details>
|
|
79
|
+
<summary><strong>Non-interactive Install (Docker, CI, Scripts)</strong></summary>
|
|
81
80
|
|
|
82
81
|
```bash
|
|
83
82
|
npx get-shit-done-cc --global # Install to ~/.claude/
|
|
@@ -86,7 +85,22 @@ npx get-shit-done-cc --local # Install to ./.claude/
|
|
|
86
85
|
|
|
87
86
|
Use `--global` (`-g`) or `--local` (`-l`) to skip the interactive prompt.
|
|
88
87
|
|
|
89
|
-
|
|
88
|
+
</details>
|
|
89
|
+
|
|
90
|
+
<details>
|
|
91
|
+
<summary><strong>Development Installation</strong></summary>
|
|
92
|
+
|
|
93
|
+
Clone the repository and run the installer locally:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
git clone https://github.com/glittercowboy/get-shit-done.git
|
|
97
|
+
cd get-shit-done
|
|
98
|
+
node bin/install.js --local
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Installs to `./.claude/` for testing modifications before contributing.
|
|
102
|
+
|
|
103
|
+
</details>
|
|
90
104
|
|
|
91
105
|
### Recommended: Skip Permissions Mode
|
|
92
106
|
|
|
@@ -96,12 +110,13 @@ GSD is designed for frictionless automation. Run Claude Code with:
|
|
|
96
110
|
claude --dangerously-skip-permissions
|
|
97
111
|
```
|
|
98
112
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
If you prefer not to use that flag, add this to your project's `.claude/settings.json` to auto-approve GSD's commands:
|
|
113
|
+
> [!TIP]
|
|
114
|
+
> This is how GSD is intended to be used — stopping to approve `date` and `git commit` 50 times defeats the purpose.
|
|
102
115
|
|
|
103
116
|
<details>
|
|
104
|
-
<summary>
|
|
117
|
+
<summary><strong>Alternative: Granular Permissions</strong></summary>
|
|
118
|
+
|
|
119
|
+
If you prefer not to use that flag, add this to your project's `.claude/settings.json`:
|
|
105
120
|
|
|
106
121
|
```json
|
|
107
122
|
{
|
|
@@ -146,13 +161,12 @@ The system asks questions. Keeps asking until it has everything — your goals,
|
|
|
146
161
|
### 2. Create roadmap
|
|
147
162
|
|
|
148
163
|
```
|
|
149
|
-
/gsd:create-roadmap
|
|
164
|
+
/gsd:create-roadmap
|
|
150
165
|
```
|
|
151
166
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
- **
|
|
155
|
-
- **STATE.md** - Living memory that persists across sessions
|
|
167
|
+
Produces:
|
|
168
|
+
- **ROADMAP.md** — Phases from start to finish
|
|
169
|
+
- **STATE.md** — Living memory that persists across sessions
|
|
156
170
|
|
|
157
171
|
### 3. Plan and execute phases
|
|
158
172
|
|
|
@@ -187,13 +201,15 @@ Already have code? Start here instead.
|
|
|
187
201
|
|
|
188
202
|
Spawns parallel agents to analyze your code. Creates `.planning/codebase/` with 7 documents:
|
|
189
203
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
204
|
+
| Document | Purpose |
|
|
205
|
+
|----------|---------|
|
|
206
|
+
| `STACK.md` | Languages, frameworks, dependencies |
|
|
207
|
+
| `ARCHITECTURE.md` | Patterns, layers, data flow |
|
|
208
|
+
| `STRUCTURE.md` | Directory layout, where things live |
|
|
209
|
+
| `CONVENTIONS.md` | Code style, naming patterns |
|
|
210
|
+
| `TESTING.md` | Test framework, patterns |
|
|
211
|
+
| `INTEGRATIONS.md` | External services, APIs |
|
|
212
|
+
| `CONCERNS.md` | Tech debt, known issues, fragile areas |
|
|
197
213
|
|
|
198
214
|
### 2. Initialize project
|
|
199
215
|
|
|
@@ -215,18 +231,18 @@ The codebase docs load automatically during planning. Claude knows your patterns
|
|
|
215
231
|
|
|
216
232
|
### Context Engineering
|
|
217
233
|
|
|
218
|
-
Claude Code is incredibly powerful
|
|
234
|
+
Claude Code is incredibly powerful *if* you give it the context it needs. Most people don't.
|
|
219
235
|
|
|
220
236
|
GSD handles it for you:
|
|
221
237
|
|
|
222
|
-
| File
|
|
223
|
-
|
|
224
|
-
| `PROJECT.md` | Project vision, always loaded
|
|
225
|
-
| `ROADMAP.md` | Where you're going, what's done
|
|
226
|
-
| `STATE.md`
|
|
227
|
-
| `PLAN.md`
|
|
228
|
-
| `SUMMARY.md` | What happened, what changed, committed to history
|
|
229
|
-
| `ISSUES.md`
|
|
238
|
+
| File | What it does |
|
|
239
|
+
|------|--------------|
|
|
240
|
+
| `PROJECT.md` | Project vision, always loaded |
|
|
241
|
+
| `ROADMAP.md` | Where you're going, what's done |
|
|
242
|
+
| `STATE.md` | Decisions, blockers, position — memory across sessions |
|
|
243
|
+
| `PLAN.md` | Atomic task with XML structure, verification steps |
|
|
244
|
+
| `SUMMARY.md` | What happened, what changed, committed to history |
|
|
245
|
+
| `ISSUES.md` | Deferred enhancements tracked across sessions |
|
|
230
246
|
|
|
231
247
|
Size limits based on where Claude's quality degrades. Stay under, get consistent excellence.
|
|
232
248
|
|
|
@@ -252,19 +268,21 @@ Precise instructions. No guessing. Verification built in.
|
|
|
252
268
|
|
|
253
269
|
### Subagent Execution
|
|
254
270
|
|
|
255
|
-
As Claude fills its context window, quality degrades. You've seen it: "Due to context limits, I'll be more concise now." That "concision" is code for cutting corners.
|
|
271
|
+
As Claude fills its context window, quality degrades. You've seen it: *"Due to context limits, I'll be more concise now."* That "concision" is code for cutting corners.
|
|
256
272
|
|
|
257
273
|
GSD prevents this. Each plan is maximum 3 tasks. Each plan runs in a fresh subagent — 200k tokens purely for implementation, zero accumulated garbage.
|
|
258
274
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
275
|
+
| Task | Context | Quality |
|
|
276
|
+
|------|---------|---------|
|
|
277
|
+
| Task 1 | Fresh | ✅ Full |
|
|
278
|
+
| Task 2 | Fresh | ✅ Full |
|
|
279
|
+
| Task 3 | Fresh | ✅ Full |
|
|
262
280
|
|
|
263
281
|
No degradation. Walk away, come back to completed work.
|
|
264
282
|
|
|
265
283
|
### Atomic Git Commits
|
|
266
284
|
|
|
267
|
-
Each task gets its own commit immediately after completion
|
|
285
|
+
Each task gets its own commit immediately after completion:
|
|
268
286
|
|
|
269
287
|
```bash
|
|
270
288
|
abc123f docs(08-02): complete user registration plan
|
|
@@ -273,11 +291,8 @@ hij789k feat(08-02): implement password hashing
|
|
|
273
291
|
lmn012o feat(08-02): create registration endpoint
|
|
274
292
|
```
|
|
275
293
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
- Each task independently revertable
|
|
279
|
-
- Clear history for Claude in future sessions
|
|
280
|
-
- Better observability in AI-automated workflow
|
|
294
|
+
> [!NOTE]
|
|
295
|
+
> **Benefits:** Git bisect finds exact failing task. Each task independently revertable. Clear history for Claude in future sessions. Better observability in AI-automated workflow.
|
|
281
296
|
|
|
282
297
|
Every commit is surgical, traceable, and meaningful.
|
|
283
298
|
|
|
@@ -294,31 +309,31 @@ You're never locked in. The system adapts.
|
|
|
294
309
|
|
|
295
310
|
## Commands
|
|
296
311
|
|
|
297
|
-
| Command
|
|
298
|
-
|
|
299
|
-
| `/gsd:new-project`
|
|
300
|
-
| `/gsd:create-roadmap`
|
|
301
|
-
| `/gsd:map-codebase`
|
|
302
|
-
| `/gsd:plan-phase [N]`
|
|
303
|
-
| `/gsd:execute-plan`
|
|
304
|
-
| `/gsd:progress`
|
|
305
|
-
| `/gsd:verify-work [N]
|
|
306
|
-
| `/gsd:plan-fix [plan]`
|
|
307
|
-
| `/gsd:complete-milestone`
|
|
308
|
-
| `/gsd:discuss-milestone`
|
|
309
|
-
| `/gsd:new-milestone [name]`
|
|
310
|
-
| `/gsd:add-phase`
|
|
311
|
-
| `/gsd:insert-phase [N]`
|
|
312
|
-
| `/gsd:remove-phase [N]`
|
|
313
|
-
| `/gsd:discuss-phase [N]`
|
|
314
|
-
| `/gsd:research-phase [N]`
|
|
315
|
-
| `/gsd:list-phase-assumptions [N]` | See what Claude thinks before you correct it
|
|
316
|
-
| `/gsd:pause-work`
|
|
317
|
-
| `/gsd:resume-work`
|
|
318
|
-
| `/gsd:consider-issues`
|
|
319
|
-
| `/gsd:help`
|
|
320
|
-
|
|
321
|
-
|
|
312
|
+
| Command | What it does |
|
|
313
|
+
|---------|--------------|
|
|
314
|
+
| `/gsd:new-project` | Extract your idea through questions, create PROJECT.md |
|
|
315
|
+
| `/gsd:create-roadmap` | Create roadmap and state tracking |
|
|
316
|
+
| `/gsd:map-codebase` | Map existing codebase for brownfield projects |
|
|
317
|
+
| `/gsd:plan-phase [N]` | Generate task plans for phase |
|
|
318
|
+
| `/gsd:execute-plan` | Run plan via subagent |
|
|
319
|
+
| `/gsd:progress` | Where am I? What's next? |
|
|
320
|
+
| `/gsd:verify-work [N]` | User acceptance test of phase or plan ¹ |
|
|
321
|
+
| `/gsd:plan-fix [plan]` | Plan fixes for UAT issues from verify-work |
|
|
322
|
+
| `/gsd:complete-milestone` | Ship it, prep next version |
|
|
323
|
+
| `/gsd:discuss-milestone` | Gather context for next milestone |
|
|
324
|
+
| `/gsd:new-milestone [name]` | Create new milestone with phases |
|
|
325
|
+
| `/gsd:add-phase` | Append phase to roadmap |
|
|
326
|
+
| `/gsd:insert-phase [N]` | Insert urgent work |
|
|
327
|
+
| `/gsd:remove-phase [N]` | Remove future phase, renumber subsequent |
|
|
328
|
+
| `/gsd:discuss-phase [N]` | Gather context before planning |
|
|
329
|
+
| `/gsd:research-phase [N]` | Deep ecosystem research for niche domains |
|
|
330
|
+
| `/gsd:list-phase-assumptions [N]` | See what Claude thinks before you correct it |
|
|
331
|
+
| `/gsd:pause-work` | Create handoff file when stopping mid-phase |
|
|
332
|
+
| `/gsd:resume-work` | Restore from last session |
|
|
333
|
+
| `/gsd:consider-issues` | Review deferred issues, close resolved, identify urgent |
|
|
334
|
+
| `/gsd:help` | Show all commands and usage guide |
|
|
335
|
+
|
|
336
|
+
<sup>¹ Contributed by reddit user OracleGreyBeard</sup>
|
|
322
337
|
|
|
323
338
|
---
|
|
324
339
|
|
|
@@ -341,7 +356,13 @@ npx get-shit-done-cc@latest
|
|
|
341
356
|
|
|
342
357
|
## Star History
|
|
343
358
|
|
|
344
|
-
|
|
359
|
+
<a href="https://star-history.com/#glittercowboy/get-shit-done&Date">
|
|
360
|
+
<picture>
|
|
361
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date&theme=dark" />
|
|
362
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date" />
|
|
363
|
+
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=glittercowboy/get-shit-done&type=Date" />
|
|
364
|
+
</picture>
|
|
365
|
+
</a>
|
|
345
366
|
|
|
346
367
|
---
|
|
347
368
|
|
|
@@ -351,4 +372,8 @@ MIT License. See [LICENSE](LICENSE) for details.
|
|
|
351
372
|
|
|
352
373
|
---
|
|
353
374
|
|
|
375
|
+
<div align="center">
|
|
376
|
+
|
|
354
377
|
**Claude Code is powerful. GSD makes it reliable.**
|
|
378
|
+
|
|
379
|
+
</div>
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd:resume-task
|
|
3
|
+
description: Resume an interrupted subagent execution
|
|
4
|
+
argument-hint: "[agent-id]"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Edit
|
|
9
|
+
- Bash
|
|
10
|
+
- Task
|
|
11
|
+
- AskUserQuestion
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<objective>
|
|
15
|
+
Resume an interrupted subagent execution using the Task tool's resume parameter.
|
|
16
|
+
|
|
17
|
+
When a session ends mid-execution, subagents may be left in an incomplete state. This command allows users to continue that work without starting over.
|
|
18
|
+
|
|
19
|
+
Uses the agent ID tracking infrastructure from execute-phase to identify and resume agents.
|
|
20
|
+
</objective>
|
|
21
|
+
|
|
22
|
+
<execution_context>
|
|
23
|
+
@~/.claude/get-shit-done/workflows/resume-task.md
|
|
24
|
+
</execution_context>
|
|
25
|
+
|
|
26
|
+
<context>
|
|
27
|
+
Agent ID: $ARGUMENTS (optional - defaults to most recent)
|
|
28
|
+
|
|
29
|
+
**Load project state:**
|
|
30
|
+
@.planning/STATE.md
|
|
31
|
+
|
|
32
|
+
**Load agent tracking:**
|
|
33
|
+
@.planning/current-agent-id.txt
|
|
34
|
+
@.planning/agent-history.json
|
|
35
|
+
</context>
|
|
36
|
+
|
|
37
|
+
<process>
|
|
38
|
+
1. Check .planning/ directory exists (error if not)
|
|
39
|
+
2. Parse agent ID from arguments or current-agent-id.txt
|
|
40
|
+
3. Validate agent exists in history and is resumable
|
|
41
|
+
4. Check for file conflicts since spawn
|
|
42
|
+
5. Follow resume-task.md workflow:
|
|
43
|
+
- Update agent status to "interrupted"
|
|
44
|
+
- Resume via Task tool resume parameter
|
|
45
|
+
- Update history on completion
|
|
46
|
+
- Clear current-agent-id.txt
|
|
47
|
+
</process>
|
|
48
|
+
|
|
49
|
+
<usage>
|
|
50
|
+
**Resume most recent interrupted agent:**
|
|
51
|
+
```
|
|
52
|
+
/gsd:resume-task
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Resume specific agent by ID:**
|
|
56
|
+
```
|
|
57
|
+
/gsd:resume-task agent_01HXYZ123
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Find available agents to resume:**
|
|
61
|
+
Check `.planning/agent-history.json` for entries with status "spawned" or "interrupted".
|
|
62
|
+
</usage>
|
|
63
|
+
|
|
64
|
+
<error_handling>
|
|
65
|
+
**No agent to resume:**
|
|
66
|
+
- current-agent-id.txt empty or missing
|
|
67
|
+
- Solution: Run /gsd:progress to check project status
|
|
68
|
+
|
|
69
|
+
**Agent already completed:**
|
|
70
|
+
- Agent finished successfully, nothing to resume
|
|
71
|
+
- Solution: Continue with next plan
|
|
72
|
+
|
|
73
|
+
**Agent not found:**
|
|
74
|
+
- Provided ID not in history
|
|
75
|
+
- Solution: Check agent-history.json for valid IDs
|
|
76
|
+
|
|
77
|
+
**Resume failed:**
|
|
78
|
+
- Agent context expired or invalidated
|
|
79
|
+
- Solution: Start fresh with /gsd:execute-plan
|
|
80
|
+
</error_handling>
|
|
81
|
+
|
|
82
|
+
<success_criteria>
|
|
83
|
+
- [ ] Agent resumed via Task tool resume parameter
|
|
84
|
+
- [ ] Agent-history.json updated with completion
|
|
85
|
+
- [ ] current-agent-id.txt cleared
|
|
86
|
+
- [ ] User informed of result
|
|
87
|
+
</success_criteria>
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Agent History Template
|
|
2
|
+
|
|
3
|
+
Template for `.planning/agent-history.json` - tracks subagent spawns during plan execution for resume capability.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## File Template
|
|
8
|
+
|
|
9
|
+
```json
|
|
10
|
+
{
|
|
11
|
+
"version": "1.0",
|
|
12
|
+
"max_entries": 50,
|
|
13
|
+
"entries": []
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Entry Schema
|
|
18
|
+
|
|
19
|
+
Each entry tracks a subagent spawn or status change:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"agent_id": "agent_01HXXXX...",
|
|
24
|
+
"task_description": "Execute tasks 1-3 from plan 02-01",
|
|
25
|
+
"phase": "02",
|
|
26
|
+
"plan": "01",
|
|
27
|
+
"segment": 1,
|
|
28
|
+
"timestamp": "2026-01-15T14:22:10Z",
|
|
29
|
+
"status": "spawned",
|
|
30
|
+
"completion_timestamp": null
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Field Definitions
|
|
35
|
+
|
|
36
|
+
| Field | Type | Description |
|
|
37
|
+
|-------|------|-------------|
|
|
38
|
+
| agent_id | string | Unique ID returned by Task tool |
|
|
39
|
+
| task_description | string | Brief description of what agent is executing |
|
|
40
|
+
| phase | string | Phase number (e.g., "02", "02.1") |
|
|
41
|
+
| plan | string | Plan number within phase |
|
|
42
|
+
| segment | number | Segment number (1-based) for segmented plans, null for Pattern A |
|
|
43
|
+
| timestamp | string | ISO 8601 timestamp when agent was spawned |
|
|
44
|
+
| status | string | Current status: spawned, completed, interrupted, resumed |
|
|
45
|
+
| completion_timestamp | string/null | ISO 8601 timestamp when completed, null if pending |
|
|
46
|
+
|
|
47
|
+
### Status Lifecycle
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
spawned ──────────────────────────> completed
|
|
51
|
+
│ ^
|
|
52
|
+
│ │
|
|
53
|
+
└──> interrupted ──> resumed ───────┘
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- **spawned**: Agent created via Task tool, execution in progress
|
|
57
|
+
- **completed**: Agent finished successfully, results received
|
|
58
|
+
- **interrupted**: Session ended before agent completed (detected on resume)
|
|
59
|
+
- **resumed**: Previously interrupted agent resumed via resume parameter
|
|
60
|
+
|
|
61
|
+
## Usage
|
|
62
|
+
|
|
63
|
+
### When to Create File
|
|
64
|
+
|
|
65
|
+
Create `.planning/agent-history.json` from this template when:
|
|
66
|
+
- First subagent spawn in execute-phase workflow
|
|
67
|
+
- File doesn't exist yet
|
|
68
|
+
|
|
69
|
+
### When to Add Entry
|
|
70
|
+
|
|
71
|
+
Add new entry immediately after Task tool returns with agent_id:
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
1. Task tool spawns subagent
|
|
75
|
+
2. Response includes agent_id
|
|
76
|
+
3. Write agent_id to .planning/current-agent-id.txt
|
|
77
|
+
4. Append entry to agent-history.json with status "spawned"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### When to Update Entry
|
|
81
|
+
|
|
82
|
+
Update existing entry when:
|
|
83
|
+
|
|
84
|
+
**On successful completion:**
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"status": "completed",
|
|
88
|
+
"completion_timestamp": "2026-01-15T14:45:33Z"
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**On resume detection (interrupted agent found):**
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"status": "interrupted"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Then add new entry with resumed status:
|
|
100
|
+
```json
|
|
101
|
+
{
|
|
102
|
+
"agent_id": "agent_01HXXXX...",
|
|
103
|
+
"status": "resumed",
|
|
104
|
+
"timestamp": "2026-01-15T15:00:00Z"
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Entry Retention
|
|
109
|
+
|
|
110
|
+
- Keep maximum 50 entries (configurable via max_entries)
|
|
111
|
+
- On exceeding limit, remove oldest completed entries first
|
|
112
|
+
- Never remove entries with status "spawned" (may need resume)
|
|
113
|
+
- Prune during init_agent_tracking step
|
|
114
|
+
|
|
115
|
+
## Example File
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"version": "1.0",
|
|
120
|
+
"max_entries": 50,
|
|
121
|
+
"entries": [
|
|
122
|
+
{
|
|
123
|
+
"agent_id": "agent_01HXY123ABC",
|
|
124
|
+
"task_description": "Execute full plan 02-01 (autonomous)",
|
|
125
|
+
"phase": "02",
|
|
126
|
+
"plan": "01",
|
|
127
|
+
"segment": null,
|
|
128
|
+
"timestamp": "2026-01-15T14:22:10Z",
|
|
129
|
+
"status": "completed",
|
|
130
|
+
"completion_timestamp": "2026-01-15T14:45:33Z"
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"agent_id": "agent_01HXY456DEF",
|
|
134
|
+
"task_description": "Execute tasks 1-3 from plan 02-02",
|
|
135
|
+
"phase": "02",
|
|
136
|
+
"plan": "02",
|
|
137
|
+
"segment": 1,
|
|
138
|
+
"timestamp": "2026-01-15T15:00:00Z",
|
|
139
|
+
"status": "spawned",
|
|
140
|
+
"completion_timestamp": null
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Related Files
|
|
147
|
+
|
|
148
|
+
- `.planning/current-agent-id.txt`: Single line with currently active agent ID (for quick resume lookup)
|
|
149
|
+
- `.planning/STATE.md`: Project state including session continuity info
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Template Notes
|
|
154
|
+
|
|
155
|
+
**When to create:** First subagent spawn during execute-phase workflow.
|
|
156
|
+
|
|
157
|
+
**Location:** `.planning/agent-history.json`
|
|
158
|
+
|
|
159
|
+
**Companion file:** `.planning/current-agent-id.txt` (single agent ID, overwritten on each spawn)
|
|
160
|
+
|
|
161
|
+
**Purpose:** Enable resume capability for interrupted subagent executions via Task tool's resume parameter.
|
|
@@ -204,15 +204,48 @@ No segmentation benefit - execute entirely in main
|
|
|
204
204
|
**For fully autonomous plans:**
|
|
205
205
|
|
|
206
206
|
```
|
|
207
|
-
|
|
207
|
+
1. Run init_agent_tracking step first (see step below)
|
|
208
208
|
|
|
209
|
-
|
|
209
|
+
2. Use Task tool with subagent_type="general-purpose":
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
Prompt: "Execute plan at .planning/phases/{phase}-{plan}-PLAN.md
|
|
212
212
|
|
|
213
|
-
|
|
213
|
+
This is an autonomous plan (no checkpoints). Execute all tasks, create SUMMARY.md in phase directory, commit with message following plan's commit guidance.
|
|
214
214
|
|
|
215
|
-
|
|
215
|
+
Follow all deviation rules and authentication gate protocols from the plan.
|
|
216
|
+
|
|
217
|
+
When complete, report: plan name, tasks completed, SUMMARY path, commit hash."
|
|
218
|
+
|
|
219
|
+
3. After Task tool returns with agent_id:
|
|
220
|
+
|
|
221
|
+
a. Write agent_id to current-agent-id.txt:
|
|
222
|
+
echo "[agent_id]" > .planning/current-agent-id.txt
|
|
223
|
+
|
|
224
|
+
b. Append spawn entry to agent-history.json:
|
|
225
|
+
{
|
|
226
|
+
"agent_id": "[agent_id from Task response]",
|
|
227
|
+
"task_description": "Execute full plan {phase}-{plan} (autonomous)",
|
|
228
|
+
"phase": "{phase}",
|
|
229
|
+
"plan": "{plan}",
|
|
230
|
+
"segment": null,
|
|
231
|
+
"timestamp": "[ISO timestamp]",
|
|
232
|
+
"status": "spawned",
|
|
233
|
+
"completion_timestamp": null
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
4. Wait for subagent to complete
|
|
237
|
+
|
|
238
|
+
5. After subagent completes successfully:
|
|
239
|
+
|
|
240
|
+
a. Update agent-history.json entry:
|
|
241
|
+
- Find entry with matching agent_id
|
|
242
|
+
- Set status: "completed"
|
|
243
|
+
- Set completion_timestamp: "[ISO timestamp]"
|
|
244
|
+
|
|
245
|
+
b. Clear current-agent-id.txt:
|
|
246
|
+
rm .planning/current-agent-id.txt
|
|
247
|
+
|
|
248
|
+
6. Report completion to user
|
|
216
249
|
```
|
|
217
250
|
|
|
218
251
|
**For segmented plans (has verify-only checkpoints):**
|
|
@@ -247,6 +280,54 @@ Quality maintained through small scope (2-3 tasks per plan)
|
|
|
247
280
|
See step name="segment_execution" for detailed segment execution loop.
|
|
248
281
|
</step>
|
|
249
282
|
|
|
283
|
+
<step name="init_agent_tracking">
|
|
284
|
+
**Initialize agent tracking for subagent resume capability.**
|
|
285
|
+
|
|
286
|
+
Before spawning any subagents, set up tracking infrastructure:
|
|
287
|
+
|
|
288
|
+
**1. Create/verify tracking files:**
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
# Create agent history file if doesn't exist
|
|
292
|
+
if [ ! -f .planning/agent-history.json ]; then
|
|
293
|
+
echo '{"version":"1.0","max_entries":50,"entries":[]}' > .planning/agent-history.json
|
|
294
|
+
fi
|
|
295
|
+
|
|
296
|
+
# Clear any stale current-agent-id (from interrupted sessions)
|
|
297
|
+
# Will be populated when subagent spawns
|
|
298
|
+
rm -f .planning/current-agent-id.txt
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**2. Check for interrupted agents (resume detection):**
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
# Check if current-agent-id.txt exists from previous interrupted session
|
|
305
|
+
if [ -f .planning/current-agent-id.txt ]; then
|
|
306
|
+
INTERRUPTED_ID=$(cat .planning/current-agent-id.txt)
|
|
307
|
+
echo "Found interrupted agent: $INTERRUPTED_ID"
|
|
308
|
+
fi
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**If interrupted agent found:**
|
|
312
|
+
- The agent ID file exists from a previous session that didn't complete
|
|
313
|
+
- This agent can potentially be resumed using Task tool's `resume` parameter
|
|
314
|
+
- Present to user: "Previous session was interrupted. Resume agent [ID] or start fresh?"
|
|
315
|
+
- If resume: Use Task tool with `resume` parameter set to the interrupted ID
|
|
316
|
+
- If fresh: Clear the file and proceed normally
|
|
317
|
+
|
|
318
|
+
**3. Prune old entries (housekeeping):**
|
|
319
|
+
|
|
320
|
+
If agent-history.json has more than `max_entries`:
|
|
321
|
+
- Remove oldest entries with status "completed"
|
|
322
|
+
- Never remove entries with status "spawned" (may need resume)
|
|
323
|
+
- Keep file under size limit for fast reads
|
|
324
|
+
|
|
325
|
+
**When to run this step:**
|
|
326
|
+
- Pattern A (fully autonomous): Before spawning the single subagent
|
|
327
|
+
- Pattern B (segmented): Before the segment execution loop
|
|
328
|
+
- Pattern C (main context): Skip - no subagents spawned
|
|
329
|
+
</step>
|
|
330
|
+
|
|
250
331
|
<step name="segment_execution">
|
|
251
332
|
**Detailed segment execution loop for segmented plans.**
|
|
252
333
|
|
|
@@ -299,8 +380,36 @@ For Pattern A (fully autonomous) and Pattern C (decision-dependent), skip this s
|
|
|
299
380
|
- Deviations encountered
|
|
300
381
|
- Any issues or blockers"
|
|
301
382
|
|
|
383
|
+
**After Task tool returns with agent_id:**
|
|
384
|
+
|
|
385
|
+
1. Write agent_id to current-agent-id.txt:
|
|
386
|
+
echo "[agent_id]" > .planning/current-agent-id.txt
|
|
387
|
+
|
|
388
|
+
2. Append spawn entry to agent-history.json:
|
|
389
|
+
{
|
|
390
|
+
"agent_id": "[agent_id from Task response]",
|
|
391
|
+
"task_description": "Execute tasks [X-Y] from plan {phase}-{plan}",
|
|
392
|
+
"phase": "{phase}",
|
|
393
|
+
"plan": "{plan}",
|
|
394
|
+
"segment": [segment_number],
|
|
395
|
+
"timestamp": "[ISO timestamp]",
|
|
396
|
+
"status": "spawned",
|
|
397
|
+
"completion_timestamp": null
|
|
398
|
+
}
|
|
399
|
+
|
|
302
400
|
Wait for subagent to complete
|
|
303
401
|
Capture results (files changed, deviations, etc.)
|
|
402
|
+
|
|
403
|
+
**After subagent completes successfully:**
|
|
404
|
+
|
|
405
|
+
1. Update agent-history.json entry:
|
|
406
|
+
- Find entry with matching agent_id
|
|
407
|
+
- Set status: "completed"
|
|
408
|
+
- Set completion_timestamp: "[ISO timestamp]"
|
|
409
|
+
|
|
410
|
+
2. Clear current-agent-id.txt:
|
|
411
|
+
rm .planning/current-agent-id.txt
|
|
412
|
+
|
|
304
413
|
```
|
|
305
414
|
|
|
306
415
|
C. If routing = Main context:
|
|
@@ -69,6 +69,12 @@ for plan in .planning/phases/*/*-PLAN.md; do
|
|
|
69
69
|
summary="${plan/PLAN/SUMMARY}"
|
|
70
70
|
[ ! -f "$summary" ] && echo "Incomplete: $plan"
|
|
71
71
|
done 2>/dev/null
|
|
72
|
+
|
|
73
|
+
# Check for interrupted agents
|
|
74
|
+
if [ -f .planning/current-agent-id.txt ] && [ -s .planning/current-agent-id.txt ]; then
|
|
75
|
+
AGENT_ID=$(cat .planning/current-agent-id.txt | tr -d '\n')
|
|
76
|
+
echo "Interrupted agent: $AGENT_ID"
|
|
77
|
+
fi
|
|
72
78
|
```
|
|
73
79
|
|
|
74
80
|
**If .continue-here file exists:**
|
|
@@ -81,6 +87,12 @@ done 2>/dev/null
|
|
|
81
87
|
|
|
82
88
|
- Execution was started but not completed
|
|
83
89
|
- Flag: "Found incomplete plan execution"
|
|
90
|
+
|
|
91
|
+
**If interrupted agent found:**
|
|
92
|
+
|
|
93
|
+
- Subagent was spawned but session ended before completion
|
|
94
|
+
- Read agent-history.json for task details
|
|
95
|
+
- Flag: "Found interrupted agent"
|
|
84
96
|
</step>
|
|
85
97
|
|
|
86
98
|
<step name="present_status">
|
|
@@ -103,6 +115,14 @@ Present complete project status to user:
|
|
|
103
115
|
⚠️ Incomplete work detected:
|
|
104
116
|
- [.continue-here file or incomplete plan]
|
|
105
117
|
|
|
118
|
+
[If interrupted agent found:]
|
|
119
|
+
⚠️ Interrupted agent detected:
|
|
120
|
+
Agent ID: [id]
|
|
121
|
+
Task: [task description from agent-history.json]
|
|
122
|
+
Interrupted: [timestamp]
|
|
123
|
+
|
|
124
|
+
Resume with: /gsd:resume-task
|
|
125
|
+
|
|
106
126
|
[If deferred issues exist:]
|
|
107
127
|
📋 [N] deferred issues awaiting attention
|
|
108
128
|
|
|
@@ -120,6 +140,10 @@ Present complete project status to user:
|
|
|
120
140
|
<step name="determine_next_action">
|
|
121
141
|
Based on project state, determine the most logical next action:
|
|
122
142
|
|
|
143
|
+
**If interrupted agent exists:**
|
|
144
|
+
→ Primary: Resume interrupted agent (/gsd:resume-task)
|
|
145
|
+
→ Option: Start fresh (abandon agent work)
|
|
146
|
+
|
|
123
147
|
**If .continue-here file exists:**
|
|
124
148
|
→ Primary: Resume from checkpoint
|
|
125
149
|
→ Option: Start fresh on current plan
|
|
@@ -154,6 +178,8 @@ Present contextual options based on project state:
|
|
|
154
178
|
What would you like to do?
|
|
155
179
|
|
|
156
180
|
[Primary action based on state - e.g.:]
|
|
181
|
+
1. Resume interrupted agent (/gsd:resume-task) [if interrupted agent found]
|
|
182
|
+
OR
|
|
157
183
|
1. Resume from checkpoint (/gsd:execute-plan .planning/phases/XX-name/.continue-here-02-01.md)
|
|
158
184
|
OR
|
|
159
185
|
1. Execute next plan (/gsd:execute-plan .planning/phases/XX-name/02-02-PLAN.md)
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
<trigger>
|
|
2
|
+
Use this workflow when:
|
|
3
|
+
- User runs /gsd:resume-task
|
|
4
|
+
- Need to continue interrupted subagent execution
|
|
5
|
+
- Resuming work after session ended mid-plan
|
|
6
|
+
</trigger>
|
|
7
|
+
|
|
8
|
+
<purpose>
|
|
9
|
+
Resume an interrupted subagent execution using the Task tool's resume parameter.
|
|
10
|
+
|
|
11
|
+
Enables seamless continuation of autonomous work that was interrupted by session timeout, user exit, or crash.
|
|
12
|
+
</purpose>
|
|
13
|
+
|
|
14
|
+
<process>
|
|
15
|
+
|
|
16
|
+
<step name="parse_arguments">
|
|
17
|
+
Parse the optional agent_id argument:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Check if argument provided
|
|
21
|
+
if [ -n "$ARGUMENTS" ]; then
|
|
22
|
+
AGENT_ID="$ARGUMENTS"
|
|
23
|
+
echo "Using provided agent ID: $AGENT_ID"
|
|
24
|
+
else
|
|
25
|
+
# Read from current-agent-id.txt
|
|
26
|
+
if [ -f .planning/current-agent-id.txt ] && [ -s .planning/current-agent-id.txt ]; then
|
|
27
|
+
AGENT_ID=$(cat .planning/current-agent-id.txt | tr -d '\n')
|
|
28
|
+
echo "Using current agent ID: $AGENT_ID"
|
|
29
|
+
else
|
|
30
|
+
echo "ERROR: No agent to resume"
|
|
31
|
+
exit 1
|
|
32
|
+
fi
|
|
33
|
+
fi
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**If no agent ID found:**
|
|
37
|
+
Present error:
|
|
38
|
+
```
|
|
39
|
+
No active agent to resume.
|
|
40
|
+
|
|
41
|
+
There's no interrupted agent recorded. This could mean:
|
|
42
|
+
- No subagent was spawned in the current plan
|
|
43
|
+
- The last agent completed successfully
|
|
44
|
+
- .planning/current-agent-id.txt was cleared
|
|
45
|
+
|
|
46
|
+
Use /gsd:progress to check project status.
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**If agent ID found:** Continue to validate_agent step.
|
|
50
|
+
</step>
|
|
51
|
+
|
|
52
|
+
<step name="validate_agent">
|
|
53
|
+
Validate the agent exists and is resumable:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Check if agent-history.json exists
|
|
57
|
+
if [ ! -f .planning/agent-history.json ]; then
|
|
58
|
+
echo "ERROR: No agent history found"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
# Read history and find the agent
|
|
63
|
+
cat .planning/agent-history.json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**Parse agent-history.json and find entry matching AGENT_ID:**
|
|
67
|
+
|
|
68
|
+
Check the entry status:
|
|
69
|
+
- **If status = "completed":** Error - agent already completed
|
|
70
|
+
- **If status = "spawned" or "interrupted":** Valid for resume
|
|
71
|
+
- **If not found:** Error - agent ID not in history
|
|
72
|
+
|
|
73
|
+
**If agent already completed:**
|
|
74
|
+
```
|
|
75
|
+
Agent already completed.
|
|
76
|
+
|
|
77
|
+
Agent ID: [id]
|
|
78
|
+
Completed: [completion_timestamp]
|
|
79
|
+
Task: [task_description]
|
|
80
|
+
|
|
81
|
+
This agent finished successfully. No resume needed.
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**If agent not found:**
|
|
85
|
+
```
|
|
86
|
+
Agent ID not found in history.
|
|
87
|
+
|
|
88
|
+
ID: [provided_id]
|
|
89
|
+
|
|
90
|
+
Available agents:
|
|
91
|
+
- [list most recent 5 agents with status]
|
|
92
|
+
|
|
93
|
+
Did you mean one of these?
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**If valid for resume:** Continue to check_conflicts step.
|
|
97
|
+
</step>
|
|
98
|
+
|
|
99
|
+
<step name="check_conflicts">
|
|
100
|
+
Check for file modifications since the agent was spawned.
|
|
101
|
+
|
|
102
|
+
**Read the agent entry to get context:**
|
|
103
|
+
- phase, plan, segment information
|
|
104
|
+
- timestamp of spawn
|
|
105
|
+
|
|
106
|
+
**Check for git changes since spawn:**
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Get files modified since agent spawn
|
|
110
|
+
# Note: This is a best-effort check - relies on git status
|
|
111
|
+
git status --short
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**If modifications detected:**
|
|
115
|
+
|
|
116
|
+
Use AskUserQuestion to warn user:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
Files modified since agent was interrupted:
|
|
120
|
+
- [list files]
|
|
121
|
+
|
|
122
|
+
These changes may conflict with the agent's work.
|
|
123
|
+
|
|
124
|
+
Options:
|
|
125
|
+
1. Continue anyway - Agent will resume with current files
|
|
126
|
+
2. Abort - Review changes first
|
|
127
|
+
|
|
128
|
+
Select option:
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Wait for user response.
|
|
132
|
+
|
|
133
|
+
**If user selects "Abort":**
|
|
134
|
+
```
|
|
135
|
+
Resume aborted. Review your changes and run /gsd:resume-task when ready.
|
|
136
|
+
```
|
|
137
|
+
End workflow.
|
|
138
|
+
|
|
139
|
+
**If user selects "Continue anyway" or no conflicts found:**
|
|
140
|
+
Continue to update_status step.
|
|
141
|
+
</step>
|
|
142
|
+
|
|
143
|
+
<step name="update_status">
|
|
144
|
+
Update the agent status to "interrupted" if it was "spawned" (marking the interruption point):
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Read current history
|
|
148
|
+
HISTORY=$(cat .planning/agent-history.json)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Update the entry in agent-history.json:
|
|
152
|
+
- If status was "spawned", change to "interrupted"
|
|
153
|
+
- Add note about resume attempt
|
|
154
|
+
|
|
155
|
+
This provides audit trail of the interruption before resume.
|
|
156
|
+
</step>
|
|
157
|
+
|
|
158
|
+
<step name="resume_agent">
|
|
159
|
+
Resume the agent using Task tool's resume parameter:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
Resuming agent: [agent_id]
|
|
163
|
+
Task: [task_description from history]
|
|
164
|
+
Phase: [phase]-[plan]
|
|
165
|
+
|
|
166
|
+
The agent will continue from where it left off...
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Use Task tool with resume parameter:**
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
Task(
|
|
173
|
+
description: "Resume interrupted agent",
|
|
174
|
+
prompt: "Continue your previous work. You were executing [task_description].",
|
|
175
|
+
subagent_type: "general-purpose",
|
|
176
|
+
resume: "[AGENT_ID]"
|
|
177
|
+
)
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Wait for agent completion.
|
|
181
|
+
|
|
182
|
+
**On agent completion:**
|
|
183
|
+
- Capture any results returned
|
|
184
|
+
- Continue to completion_update step
|
|
185
|
+
</step>
|
|
186
|
+
|
|
187
|
+
<step name="completion_update">
|
|
188
|
+
Update tracking files on successful completion:
|
|
189
|
+
|
|
190
|
+
**1. Update agent-history.json:**
|
|
191
|
+
|
|
192
|
+
Add new entry marking the resume completion:
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"agent_id": "[AGENT_ID]",
|
|
196
|
+
"task_description": "[original task] (resumed)",
|
|
197
|
+
"phase": "[phase]",
|
|
198
|
+
"plan": "[plan]",
|
|
199
|
+
"segment": [segment or null],
|
|
200
|
+
"timestamp": "[now]",
|
|
201
|
+
"status": "completed",
|
|
202
|
+
"completion_timestamp": "[now]"
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**2. Clear current-agent-id.txt:**
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Clear the current agent file
|
|
210
|
+
> .planning/current-agent-id.txt
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**3. Present completion message:**
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
Agent resumed and completed successfully.
|
|
217
|
+
|
|
218
|
+
Agent ID: [id]
|
|
219
|
+
Task: [task_description]
|
|
220
|
+
Original spawn: [original_timestamp]
|
|
221
|
+
Completed: [now]
|
|
222
|
+
|
|
223
|
+
The agent's work has been incorporated. Check git status for changes.
|
|
224
|
+
```
|
|
225
|
+
</step>
|
|
226
|
+
|
|
227
|
+
<step name="handle_errors">
|
|
228
|
+
Error handling for resume failures:
|
|
229
|
+
|
|
230
|
+
**If Task tool returns error on resume:**
|
|
231
|
+
```
|
|
232
|
+
Failed to resume agent.
|
|
233
|
+
|
|
234
|
+
Agent ID: [id]
|
|
235
|
+
Error: [error message]
|
|
236
|
+
|
|
237
|
+
Possible causes:
|
|
238
|
+
- Agent context may have expired
|
|
239
|
+
- Agent may have been invalidated
|
|
240
|
+
|
|
241
|
+
Options:
|
|
242
|
+
1. Start fresh - Execute plan from beginning
|
|
243
|
+
2. Check status - Review what was completed
|
|
244
|
+
|
|
245
|
+
Run /gsd:execute-plan to start fresh if needed.
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Do NOT clear current-agent-id.txt on error - allow retry.
|
|
249
|
+
</step>
|
|
250
|
+
|
|
251
|
+
</process>
|
|
252
|
+
|
|
253
|
+
<success_criteria>
|
|
254
|
+
Resume is complete when:
|
|
255
|
+
- [ ] Agent resumed successfully via Task tool resume parameter
|
|
256
|
+
- [ ] Agent-history.json updated with completion status
|
|
257
|
+
- [ ] Current-agent-id.txt cleared
|
|
258
|
+
- [ ] User informed of completion
|
|
259
|
+
</success_criteria>
|
package/package.json
CHANGED