aether-colony 1.1.0

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.
Files changed (207) hide show
  1. package/.aether/CONTEXT.md +160 -0
  2. package/.aether/QUEEN.md +84 -0
  3. package/.aether/aether-utils.sh +7749 -0
  4. package/.aether/docs/QUEEN-SYSTEM.md +211 -0
  5. package/.aether/docs/README.md +68 -0
  6. package/.aether/docs/caste-system.md +48 -0
  7. package/.aether/docs/disciplines/DISCIPLINES.md +93 -0
  8. package/.aether/docs/disciplines/coding-standards.md +197 -0
  9. package/.aether/docs/disciplines/debugging.md +207 -0
  10. package/.aether/docs/disciplines/learning.md +254 -0
  11. package/.aether/docs/disciplines/tdd.md +257 -0
  12. package/.aether/docs/disciplines/verification-loop.md +167 -0
  13. package/.aether/docs/disciplines/verification.md +116 -0
  14. package/.aether/docs/error-codes.md +268 -0
  15. package/.aether/docs/known-issues.md +233 -0
  16. package/.aether/docs/pheromones.md +205 -0
  17. package/.aether/docs/queen-commands.md +97 -0
  18. package/.aether/exchange/colony-registry.xml +11 -0
  19. package/.aether/exchange/pheromone-xml.sh +575 -0
  20. package/.aether/exchange/pheromones.xml +87 -0
  21. package/.aether/exchange/queen-wisdom.xml +14 -0
  22. package/.aether/exchange/registry-xml.sh +273 -0
  23. package/.aether/exchange/wisdom-xml.sh +319 -0
  24. package/.aether/midden/approach-changes.md +5 -0
  25. package/.aether/midden/build-failures.md +5 -0
  26. package/.aether/midden/test-failures.md +5 -0
  27. package/.aether/model-profiles.yaml +100 -0
  28. package/.aether/rules/aether-colony.md +134 -0
  29. package/.aether/schemas/aether-types.xsd +255 -0
  30. package/.aether/schemas/colony-registry.xsd +309 -0
  31. package/.aether/schemas/example-prompt-builder.xml +234 -0
  32. package/.aether/schemas/pheromone.xsd +163 -0
  33. package/.aether/schemas/prompt.xsd +416 -0
  34. package/.aether/schemas/queen-wisdom.xsd +325 -0
  35. package/.aether/schemas/worker-priming.xsd +276 -0
  36. package/.aether/templates/QUEEN.md.template +79 -0
  37. package/.aether/templates/colony-state-reset.jq.template +22 -0
  38. package/.aether/templates/colony-state.template.json +35 -0
  39. package/.aether/templates/constraints.template.json +9 -0
  40. package/.aether/templates/crowned-anthill.template.md +36 -0
  41. package/.aether/templates/handoff-build-error.template.md +30 -0
  42. package/.aether/templates/handoff-build-success.template.md +39 -0
  43. package/.aether/templates/handoff.template.md +40 -0
  44. package/.aether/templates/learning-observations.template.json +6 -0
  45. package/.aether/templates/midden.template.json +7 -0
  46. package/.aether/templates/pheromones.template.json +6 -0
  47. package/.aether/templates/session.template.json +9 -0
  48. package/.aether/utils/atomic-write.sh +219 -0
  49. package/.aether/utils/chamber-compare.sh +193 -0
  50. package/.aether/utils/chamber-utils.sh +297 -0
  51. package/.aether/utils/colorize-log.sh +132 -0
  52. package/.aether/utils/error-handler.sh +212 -0
  53. package/.aether/utils/file-lock.sh +158 -0
  54. package/.aether/utils/queen-to-md.xsl +395 -0
  55. package/.aether/utils/semantic-cli.sh +413 -0
  56. package/.aether/utils/spawn-tree.sh +428 -0
  57. package/.aether/utils/spawn-with-model.sh +56 -0
  58. package/.aether/utils/state-loader.sh +215 -0
  59. package/.aether/utils/swarm-display.sh +268 -0
  60. package/.aether/utils/watch-spawn-tree.sh +253 -0
  61. package/.aether/utils/xml-compose.sh +253 -0
  62. package/.aether/utils/xml-convert.sh +273 -0
  63. package/.aether/utils/xml-core.sh +186 -0
  64. package/.aether/utils/xml-query.sh +201 -0
  65. package/.aether/utils/xml-utils.sh +110 -0
  66. package/.aether/workers.md +765 -0
  67. package/.claude/agents/ant/aether-ambassador.md +264 -0
  68. package/.claude/agents/ant/aether-archaeologist.md +322 -0
  69. package/.claude/agents/ant/aether-auditor.md +266 -0
  70. package/.claude/agents/ant/aether-builder.md +187 -0
  71. package/.claude/agents/ant/aether-chaos.md +268 -0
  72. package/.claude/agents/ant/aether-chronicler.md +304 -0
  73. package/.claude/agents/ant/aether-gatekeeper.md +325 -0
  74. package/.claude/agents/ant/aether-includer.md +373 -0
  75. package/.claude/agents/ant/aether-keeper.md +271 -0
  76. package/.claude/agents/ant/aether-measurer.md +317 -0
  77. package/.claude/agents/ant/aether-probe.md +210 -0
  78. package/.claude/agents/ant/aether-queen.md +325 -0
  79. package/.claude/agents/ant/aether-route-setter.md +173 -0
  80. package/.claude/agents/ant/aether-sage.md +353 -0
  81. package/.claude/agents/ant/aether-scout.md +142 -0
  82. package/.claude/agents/ant/aether-surveyor-disciplines.md +416 -0
  83. package/.claude/agents/ant/aether-surveyor-nest.md +354 -0
  84. package/.claude/agents/ant/aether-surveyor-pathogens.md +288 -0
  85. package/.claude/agents/ant/aether-surveyor-provisions.md +359 -0
  86. package/.claude/agents/ant/aether-tracker.md +265 -0
  87. package/.claude/agents/ant/aether-watcher.md +244 -0
  88. package/.claude/agents/ant/aether-weaver.md +247 -0
  89. package/.claude/commands/ant/archaeology.md +341 -0
  90. package/.claude/commands/ant/build.md +1160 -0
  91. package/.claude/commands/ant/chaos.md +349 -0
  92. package/.claude/commands/ant/colonize.md +270 -0
  93. package/.claude/commands/ant/continue.md +1070 -0
  94. package/.claude/commands/ant/council.md +309 -0
  95. package/.claude/commands/ant/dream.md +265 -0
  96. package/.claude/commands/ant/entomb.md +487 -0
  97. package/.claude/commands/ant/feedback.md +78 -0
  98. package/.claude/commands/ant/flag.md +139 -0
  99. package/.claude/commands/ant/flags.md +155 -0
  100. package/.claude/commands/ant/focus.md +58 -0
  101. package/.claude/commands/ant/help.md +122 -0
  102. package/.claude/commands/ant/history.md +137 -0
  103. package/.claude/commands/ant/init.md +409 -0
  104. package/.claude/commands/ant/interpret.md +267 -0
  105. package/.claude/commands/ant/lay-eggs.md +201 -0
  106. package/.claude/commands/ant/maturity.md +102 -0
  107. package/.claude/commands/ant/memory-details.md +77 -0
  108. package/.claude/commands/ant/migrate-state.md +165 -0
  109. package/.claude/commands/ant/oracle.md +387 -0
  110. package/.claude/commands/ant/organize.md +227 -0
  111. package/.claude/commands/ant/pause-colony.md +247 -0
  112. package/.claude/commands/ant/phase.md +126 -0
  113. package/.claude/commands/ant/plan.md +544 -0
  114. package/.claude/commands/ant/redirect.md +58 -0
  115. package/.claude/commands/ant/resume-colony.md +182 -0
  116. package/.claude/commands/ant/resume.md +363 -0
  117. package/.claude/commands/ant/seal.md +306 -0
  118. package/.claude/commands/ant/status.md +272 -0
  119. package/.claude/commands/ant/swarm.md +361 -0
  120. package/.claude/commands/ant/tunnels.md +425 -0
  121. package/.claude/commands/ant/update.md +209 -0
  122. package/.claude/commands/ant/verify-castes.md +95 -0
  123. package/.claude/commands/ant/watch.md +238 -0
  124. package/.opencode/agents/aether-ambassador.md +140 -0
  125. package/.opencode/agents/aether-archaeologist.md +108 -0
  126. package/.opencode/agents/aether-auditor.md +144 -0
  127. package/.opencode/agents/aether-builder.md +184 -0
  128. package/.opencode/agents/aether-chaos.md +115 -0
  129. package/.opencode/agents/aether-chronicler.md +122 -0
  130. package/.opencode/agents/aether-gatekeeper.md +116 -0
  131. package/.opencode/agents/aether-includer.md +117 -0
  132. package/.opencode/agents/aether-keeper.md +177 -0
  133. package/.opencode/agents/aether-measurer.md +128 -0
  134. package/.opencode/agents/aether-probe.md +133 -0
  135. package/.opencode/agents/aether-queen.md +286 -0
  136. package/.opencode/agents/aether-route-setter.md +130 -0
  137. package/.opencode/agents/aether-sage.md +106 -0
  138. package/.opencode/agents/aether-scout.md +101 -0
  139. package/.opencode/agents/aether-surveyor-disciplines.md +386 -0
  140. package/.opencode/agents/aether-surveyor-nest.md +324 -0
  141. package/.opencode/agents/aether-surveyor-pathogens.md +259 -0
  142. package/.opencode/agents/aether-surveyor-provisions.md +329 -0
  143. package/.opencode/agents/aether-tracker.md +137 -0
  144. package/.opencode/agents/aether-watcher.md +174 -0
  145. package/.opencode/agents/aether-weaver.md +130 -0
  146. package/.opencode/commands/ant/archaeology.md +338 -0
  147. package/.opencode/commands/ant/build.md +1200 -0
  148. package/.opencode/commands/ant/chaos.md +346 -0
  149. package/.opencode/commands/ant/colonize.md +202 -0
  150. package/.opencode/commands/ant/continue.md +938 -0
  151. package/.opencode/commands/ant/council.md +305 -0
  152. package/.opencode/commands/ant/dream.md +262 -0
  153. package/.opencode/commands/ant/entomb.md +367 -0
  154. package/.opencode/commands/ant/feedback.md +80 -0
  155. package/.opencode/commands/ant/flag.md +137 -0
  156. package/.opencode/commands/ant/flags.md +153 -0
  157. package/.opencode/commands/ant/focus.md +56 -0
  158. package/.opencode/commands/ant/help.md +124 -0
  159. package/.opencode/commands/ant/history.md +127 -0
  160. package/.opencode/commands/ant/init.md +337 -0
  161. package/.opencode/commands/ant/interpret.md +256 -0
  162. package/.opencode/commands/ant/lay-eggs.md +141 -0
  163. package/.opencode/commands/ant/maturity.md +92 -0
  164. package/.opencode/commands/ant/memory-details.md +77 -0
  165. package/.opencode/commands/ant/migrate-state.md +153 -0
  166. package/.opencode/commands/ant/oracle.md +338 -0
  167. package/.opencode/commands/ant/organize.md +224 -0
  168. package/.opencode/commands/ant/pause-colony.md +220 -0
  169. package/.opencode/commands/ant/phase.md +123 -0
  170. package/.opencode/commands/ant/plan.md +531 -0
  171. package/.opencode/commands/ant/redirect.md +67 -0
  172. package/.opencode/commands/ant/resume-colony.md +178 -0
  173. package/.opencode/commands/ant/resume.md +363 -0
  174. package/.opencode/commands/ant/seal.md +247 -0
  175. package/.opencode/commands/ant/status.md +272 -0
  176. package/.opencode/commands/ant/swarm.md +357 -0
  177. package/.opencode/commands/ant/tunnels.md +406 -0
  178. package/.opencode/commands/ant/update.md +191 -0
  179. package/.opencode/commands/ant/verify-castes.md +85 -0
  180. package/.opencode/commands/ant/watch.md +220 -0
  181. package/.opencode/opencode.json +3 -0
  182. package/CHANGELOG.md +325 -0
  183. package/DISCLAIMER.md +74 -0
  184. package/LICENSE +21 -0
  185. package/README.md +258 -0
  186. package/bin/cli.js +2436 -0
  187. package/bin/generate-commands.sh +291 -0
  188. package/bin/lib/caste-colors.js +57 -0
  189. package/bin/lib/colors.js +76 -0
  190. package/bin/lib/errors.js +255 -0
  191. package/bin/lib/event-types.js +190 -0
  192. package/bin/lib/file-lock.js +695 -0
  193. package/bin/lib/init.js +454 -0
  194. package/bin/lib/logger.js +242 -0
  195. package/bin/lib/model-profiles.js +445 -0
  196. package/bin/lib/model-verify.js +288 -0
  197. package/bin/lib/nestmate-loader.js +130 -0
  198. package/bin/lib/proxy-health.js +253 -0
  199. package/bin/lib/spawn-logger.js +266 -0
  200. package/bin/lib/state-guard.js +602 -0
  201. package/bin/lib/state-sync.js +516 -0
  202. package/bin/lib/telemetry.js +441 -0
  203. package/bin/lib/update-transaction.js +1454 -0
  204. package/bin/npx-install.js +178 -0
  205. package/bin/sync-to-runtime.sh +6 -0
  206. package/bin/validate-package.sh +88 -0
  207. package/package.json +70 -0
@@ -0,0 +1,220 @@
1
+ ---
2
+ name: ant:pause-colony
3
+ description: "💾🐜⏸️🐜💾 Pause colony work and create handoff document for resuming later"
4
+ ---
5
+
6
+ You are the **Queen Ant Colony**. Save current state for session handoff.
7
+
8
+ ## Instructions
9
+
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ Parse `$normalized_args`:
17
+ - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
18
+ - Otherwise: set `visual_mode = true`
19
+
20
+ ### Step 0: Initialize Visual Mode (if enabled)
21
+
22
+ If `visual_mode` is true:
23
+ ```bash
24
+ # Generate session ID
25
+ pause_id="pause-$(date +%s)"
26
+
27
+ # Initialize swarm display
28
+ bash .aether/aether-utils.sh swarm-display-init "$pause_id"
29
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Pausing colony" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
30
+ ```
31
+
32
+ ### Step 1: Read State
33
+
34
+ Use the Read tool to read `.aether/data/COLONY_STATE.json`.
35
+
36
+ If `goal` is null, output `No colony initialized. Nothing to pause.` and stop.
37
+
38
+ ### Step 2: Compute Active Signals
39
+
40
+ Read active signals from COLONY_STATE.json `signals` array (already loaded in Step 1).
41
+
42
+ Filter signals where:
43
+ - `expires_at` is null (permanent signals like INIT), OR
44
+ - `expires_at` > current timestamp (not expired)
45
+
46
+ If `signals` array is empty or all expired, treat as "no active pheromones."
47
+
48
+ ### Step 3: Build Handoff Summary
49
+
50
+ Gather context for the handoff from `COLONY_STATE.json`:
51
+ - `goal` from top level
52
+ - `state` and `current_phase` from top level
53
+ - `workers` object
54
+ - Active signals from `signals` array (with current decayed strengths from Step 2)
55
+ - Phase progress from `plan.phases` (how many complete, current phase tasks)
56
+ - What was in progress or pending
57
+
58
+ ### Step 4: Write Handoff
59
+
60
+ Use the Write tool to update `.aether/HANDOFF.md` with a session handoff section at the top. The format:
61
+
62
+ ```markdown
63
+ # Colony Session Paused
64
+
65
+ ## Quick Resume
66
+ Run `/ant:resume-colony` in a new session.
67
+
68
+ ## State at Pause
69
+ - Goal: "<goal>"
70
+ - State: <state>
71
+ - Current Phase: <phase_number> — <phase_name>
72
+ - Session: <session_id>
73
+ - Paused: <ISO-8601 timestamp>
74
+
75
+ ## Active Pheromones
76
+ - <TYPE> (strength <current>): "<content>"
77
+ (list each non-expired signal)
78
+
79
+ ## Phase Progress
80
+ (for each phase, show status)
81
+ - Phase <id>: <name> [<status>]
82
+
83
+ ## Current Phase Tasks
84
+ (list tasks in the current phase with their statuses)
85
+ - [<icon>] <task_id>: <description>
86
+
87
+ ## What Was Happening
88
+ <brief description of what the colony was doing>
89
+
90
+ ## Next Steps on Resume
91
+ <what should happen next>
92
+ ```
93
+
94
+ ### Step 4.5: Set Paused Flag in State
95
+
96
+ Use Read tool to get current COLONY_STATE.json.
97
+
98
+ Use Write tool to update COLONY_STATE.json with paused flag:
99
+ - Add field: `"paused": true`
100
+ - Add field: `"paused_at": "<ISO-8601 timestamp>"`
101
+ - Update last_updated timestamp
102
+
103
+ This flag indicates the colony is in a paused state and will be cleared on resume.
104
+
105
+ ### Step 4.6: Commit Suggestion (Optional)
106
+
107
+ **This step is non-blocking. Skipping does not affect the pause or any subsequent steps. Failure to commit has zero consequences.**
108
+
109
+ Before displaying the pause confirmation, check if the user has uncommitted work worth preserving.
110
+
111
+ 1. **Check for uncommitted changes:**
112
+ ```bash
113
+ git status --porcelain 2>/dev/null
114
+ ```
115
+ If the output is empty (nothing to commit) or the command fails (not a git repo), skip this step silently and continue to Step 5.
116
+
117
+ 2. **Check for double-prompting:**
118
+ Read `last_commit_suggestion_phase` from COLONY_STATE.json (already loaded in Step 1).
119
+ If `last_commit_suggestion_phase` equals the current phase, skip this step silently — the user was already prompted at POST-ADVANCE. Continue to Step 5.
120
+
121
+ 3. **Generate the commit message:**
122
+ ```bash
123
+ bash .aether/aether-utils.sh generate-commit-message "pause" {current_phase} "{phase_name}"
124
+ ```
125
+ Parse the returned JSON to extract `message` and `files_changed`.
126
+
127
+ 4. **Check files changed:**
128
+ ```bash
129
+ git diff --stat HEAD 2>/dev/null | tail -5
130
+ ```
131
+
132
+ 5. **Display the suggestion:**
133
+ ```
134
+ ──────────────────────────────────────────────────
135
+ Commit Suggestion
136
+ ──────────────────────────────────────────────────
137
+
138
+ Message: {generated_message}
139
+ Files: {files_changed} files changed
140
+ Preview: {first 5 lines of git diff --stat}
141
+
142
+ ──────────────────────────────────────────────────
143
+ ```
144
+
145
+ 6. **Use AskUserQuestion:**
146
+ ```
147
+ Commit your work before pausing?
148
+
149
+ 1. Yes, commit with this message
150
+ 2. Yes, but let me write the message
151
+ 3. No, I'll commit later
152
+ ```
153
+
154
+ 7. **If option 1 ("Yes, commit with this message"):**
155
+ ```bash
156
+ git add -A && git commit -m "{generated_message}"
157
+ ```
158
+ Display: `Committed: {generated_message} ({files_changed} files)`
159
+
160
+ 8. **If option 2 ("Yes, but let me write the message"):**
161
+ Use AskUserQuestion to get the user's custom commit message, then:
162
+ ```bash
163
+ git add -A && git commit -m "{custom_message}"
164
+ ```
165
+ Display: `Committed: {custom_message} ({files_changed} files)`
166
+
167
+ 9. **If option 3 ("No, I'll commit later"):**
168
+ Display: `Skipped. Your changes are saved on disk but not committed.`
169
+
170
+ 10. **Record the suggestion to prevent double-prompting:**
171
+ Set `last_commit_suggestion_phase` to `{current_phase}` in COLONY_STATE.json (add the field at the top level if it does not exist).
172
+
173
+ **Error handling:** If any git command fails (not a repo, merge conflict, pre-commit hook rejection), display the error output and continue to Step 5. The commit suggestion is advisory only — it never blocks the pause flow.
174
+
175
+ Continue to Step 5.
176
+
177
+ ### Step 5: Display Confirmation
178
+
179
+ **If visual_mode is true, render final swarm display:**
180
+ ```bash
181
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony paused" "Colony" '{"read":3,"grep":0,"edit":2,"bash":1}' 100 "fungus_garden" 100
182
+ bash .aether/aether-utils.sh swarm-display-render "$pause_id"
183
+ ```
184
+
185
+ Output header:
186
+
187
+ ```
188
+ 💾🐜⏸️🐜💾 ═══════════════════════════════════════════════════
189
+ C O L O N Y P A U S E D
190
+ ═══════════════════════════════════════════════════ 💾🐜⏸️🐜💾
191
+ ```
192
+
193
+ Then output:
194
+ +=====================================================+
195
+ | AETHER COLONY :: PAUSED |
196
+ +=====================================================+
197
+
198
+ Goal: "<goal>"
199
+ Phase: <current_phase> — <phase_name>
200
+ Pheromones: <active_count> active
201
+
202
+ Handoff saved to .aether/HANDOFF.md
203
+ Paused state saved to COLONY_STATE.json
204
+
205
+ To resume in a new session:
206
+ /ant:resume-colony
207
+
208
+ 💾 State persisted — safe to /clear
209
+
210
+ 🐜 What would you like to do next?
211
+ 1. /ant:resume-colony — Resume work in this session
212
+ 2. /ant:lay-eggs "<new goal>" — Start a new colony
213
+ 3. /clear — Clear context and continue
214
+
215
+ Use AskUserQuestion with these three options.
216
+
217
+ If option 1 selected: proceed to run /ant:resume-colony flow
218
+ If option 2 selected: run /ant:lay-eggs flow
219
+ If option 3 selected: display "Run /ant:resume-colony when ready to continue, or /ant:lay-eggs to start fresh"
220
+ ```
@@ -0,0 +1,123 @@
1
+ ---
2
+ name: ant:phase
3
+ description: "📝🐜📍🐜📝 Show phase details - Queen reviews phase status, tasks, and caste assignment"
4
+ ---
5
+
6
+ You are the **Queen Ant Colony**. Display phase details from the project plan.
7
+
8
+ ## Instructions
9
+
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ The argument is: `$normalized_args`
17
+
18
+ ### Step 1: Read State
19
+
20
+ Use the Read tool to read `.aether/data/COLONY_STATE.json`.
21
+
22
+ If `goal` is null, output `No colony initialized. Run /ant:init first.` and stop.
23
+
24
+ If `plan.phases` is an empty array, output `No project plan. Run /ant:plan first.` and stop.
25
+
26
+ ### Step 2: Determine What to Show
27
+
28
+ - If `$normalized_args` is empty -> show the current phase (from `current_phase`). If `current_phase` is 0 or beyond the last phase, show phase 1.
29
+ - If `$normalized_args` is a number -> show that specific phase
30
+ - If `$normalized_args` is "list" or "all" -> show all phases in summary
31
+
32
+ ### Step 3a: Single Phase View
33
+
34
+ Find the phase by ID in `plan.phases`.
35
+
36
+ **Calculate next phase ID:**
37
+ - Let `total_phases` = length of `plan.phases` array
38
+ - If current phase ID < total_phases, then `next_id` = current phase ID + 1
39
+ - If current phase ID >= total_phases (viewing last phase), omit the "View next phase" suggestion
40
+
41
+ Output this header:
42
+
43
+ ```
44
+ 📝🐜📍🐜📝 ═══════════════════════════════════════════════════
45
+ P H A S E {id} D E T A I L S
46
+ ═══════════════════════════════════════════════════ 📝🐜📍🐜📝
47
+ ```
48
+
49
+ Then display:
50
+
51
+ ```
52
+ 📍 Phase <id>: <name>
53
+ 📊 Status: <status>
54
+
55
+ <description>
56
+
57
+ 🐜 Tasks:
58
+ {status_icon} <task_id>: <description>
59
+ ↳ depends on: <deps or "none">
60
+
61
+ ✅ Success Criteria:
62
+ • <criterion>
63
+
64
+ ─────────────────────────────────────────────────────
65
+ 🐜 Next Steps:
66
+ /ant:build <id> 🔨 Phase <id>: <phase_name>
67
+ /ant:phase <next_id> 📋 Phase <next_id>: <next_phase_name> (only if not last phase)
68
+ /ant:status 📊 Colony status
69
+ ```
70
+
71
+ Status icons: `[ ]` pending, `[~]` in_progress, `[✓]` completed
72
+
73
+ ### Step 3b: List View
74
+
75
+ Output this header:
76
+
77
+ ```
78
+ 📝🐜📍🐜📝 ═══════════════════════════════════════════════════
79
+ A L L P H A S E S
80
+ ═══════════════════════════════════════════════════ 📝🐜📍🐜📝
81
+ ```
82
+
83
+ Then display all phases as a summary:
84
+
85
+ ```
86
+ 👑 Goal: "<goal>"
87
+
88
+ {icon} Phase <id>: <name>
89
+ <completed>/<total> tasks | <status>
90
+
91
+ (repeat for each phase)
92
+
93
+ ─────────────────────────────────────────────────────
94
+ Legend: [✓] completed [~] in progress [ ] pending
95
+
96
+ 🐜 /ant:phase <id> for details
97
+ ```
98
+
99
+ ### Step 4: Update Handoff (Optional)
100
+
101
+ After displaying phase details, offer to update the handoff document with review notes:
102
+
103
+ Use AskUserQuestion:
104
+ ```
105
+ Update handoff with phase review notes?
106
+
107
+ 1. Yes — add notes about blockers or decisions
108
+ 2. No — continue without updating
109
+ ```
110
+
111
+ If option 1 selected:
112
+ Use AskUserQuestion to collect notes, then append to handoff:
113
+
114
+ ```bash
115
+ cat >> .aether/HANDOFF.md << 'HANDOFF_EOF'
116
+
117
+ ## Phase {id} Review Notes
118
+ - Reviewed: $(date -u +%Y-%m-%dT%H:%M:%SZ)
119
+ - Notes: {user_notes}
120
+ HANDOFF_EOF
121
+ ```
122
+
123
+ Display: `Handoff updated with review notes.`