aether-colony 5.1.0 → 5.3.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 (185) hide show
  1. package/.aether/aether-utils.sh +157 -42
  2. package/.aether/agents/aether-ambassador.md +140 -0
  3. package/.aether/agents/aether-archaeologist.md +108 -0
  4. package/.aether/agents/aether-architect.md +133 -0
  5. package/.aether/agents/aether-auditor.md +144 -0
  6. package/.aether/agents/aether-builder.md +184 -0
  7. package/.aether/agents/aether-chaos.md +115 -0
  8. package/.aether/agents/aether-chronicler.md +122 -0
  9. package/.aether/agents/aether-gatekeeper.md +116 -0
  10. package/.aether/agents/aether-includer.md +117 -0
  11. package/.aether/agents/aether-keeper.md +177 -0
  12. package/.aether/agents/aether-measurer.md +128 -0
  13. package/.aether/agents/aether-oracle.md +137 -0
  14. package/.aether/agents/aether-probe.md +133 -0
  15. package/.aether/agents/aether-queen.md +286 -0
  16. package/.aether/agents/aether-route-setter.md +130 -0
  17. package/.aether/agents/aether-sage.md +106 -0
  18. package/.aether/agents/aether-scout.md +101 -0
  19. package/.aether/agents/aether-surveyor-disciplines.md +391 -0
  20. package/.aether/agents/aether-surveyor-nest.md +329 -0
  21. package/.aether/agents/aether-surveyor-pathogens.md +264 -0
  22. package/.aether/agents/aether-surveyor-provisions.md +334 -0
  23. package/.aether/agents/aether-tracker.md +137 -0
  24. package/.aether/agents/aether-watcher.md +174 -0
  25. package/.aether/agents/aether-weaver.md +130 -0
  26. package/.aether/commands/claude/archaeology.md +334 -0
  27. package/.aether/commands/claude/build.md +65 -0
  28. package/.aether/commands/claude/chaos.md +336 -0
  29. package/.aether/commands/claude/colonize.md +259 -0
  30. package/.aether/commands/claude/continue.md +60 -0
  31. package/.aether/commands/claude/council.md +507 -0
  32. package/.aether/commands/claude/data-clean.md +81 -0
  33. package/.aether/commands/claude/dream.md +268 -0
  34. package/.aether/commands/claude/entomb.md +498 -0
  35. package/.aether/commands/claude/export-signals.md +57 -0
  36. package/.aether/commands/claude/feedback.md +96 -0
  37. package/.aether/commands/claude/flag.md +151 -0
  38. package/.aether/commands/claude/flags.md +169 -0
  39. package/.aether/commands/claude/focus.md +76 -0
  40. package/.aether/commands/claude/help.md +154 -0
  41. package/.aether/commands/claude/history.md +140 -0
  42. package/.aether/commands/claude/import-signals.md +71 -0
  43. package/.aether/commands/claude/init.md +505 -0
  44. package/.aether/commands/claude/insert-phase.md +105 -0
  45. package/.aether/commands/claude/interpret.md +278 -0
  46. package/.aether/commands/claude/lay-eggs.md +210 -0
  47. package/.aether/commands/claude/maturity.md +113 -0
  48. package/.aether/commands/claude/memory-details.md +77 -0
  49. package/.aether/commands/claude/migrate-state.md +171 -0
  50. package/.aether/commands/claude/oracle.md +642 -0
  51. package/.aether/commands/claude/organize.md +232 -0
  52. package/.aether/commands/claude/patrol.md +620 -0
  53. package/.aether/commands/claude/pause-colony.md +233 -0
  54. package/.aether/commands/claude/phase.md +115 -0
  55. package/.aether/commands/claude/pheromones.md +156 -0
  56. package/.aether/commands/claude/plan.md +693 -0
  57. package/.aether/commands/claude/preferences.md +65 -0
  58. package/.aether/commands/claude/quick.md +100 -0
  59. package/.aether/commands/claude/redirect.md +76 -0
  60. package/.aether/commands/claude/resume-colony.md +197 -0
  61. package/.aether/commands/claude/resume.md +388 -0
  62. package/.aether/commands/claude/run.md +231 -0
  63. package/.aether/commands/claude/seal.md +774 -0
  64. package/.aether/commands/claude/skill-create.md +286 -0
  65. package/.aether/commands/claude/status.md +410 -0
  66. package/.aether/commands/claude/swarm.md +349 -0
  67. package/.aether/commands/claude/tunnels.md +426 -0
  68. package/.aether/commands/claude/update.md +132 -0
  69. package/.aether/commands/claude/verify-castes.md +143 -0
  70. package/.aether/commands/claude/watch.md +239 -0
  71. package/.aether/commands/colonize.yaml +4 -0
  72. package/.aether/commands/council.yaml +205 -0
  73. package/.aether/commands/init.yaml +46 -13
  74. package/.aether/commands/insert-phase.yaml +4 -0
  75. package/.aether/commands/opencode/archaeology.md +331 -0
  76. package/.aether/commands/opencode/build.md +1168 -0
  77. package/.aether/commands/opencode/chaos.md +329 -0
  78. package/.aether/commands/opencode/colonize.md +195 -0
  79. package/.aether/commands/opencode/continue.md +1436 -0
  80. package/.aether/commands/opencode/council.md +437 -0
  81. package/.aether/commands/opencode/data-clean.md +77 -0
  82. package/.aether/commands/opencode/dream.md +260 -0
  83. package/.aether/commands/opencode/entomb.md +377 -0
  84. package/.aether/commands/opencode/export-signals.md +54 -0
  85. package/.aether/commands/opencode/feedback.md +99 -0
  86. package/.aether/commands/opencode/flag.md +149 -0
  87. package/.aether/commands/opencode/flags.md +167 -0
  88. package/.aether/commands/opencode/focus.md +73 -0
  89. package/.aether/commands/opencode/help.md +157 -0
  90. package/.aether/commands/opencode/history.md +136 -0
  91. package/.aether/commands/opencode/import-signals.md +68 -0
  92. package/.aether/commands/opencode/init.md +518 -0
  93. package/.aether/commands/opencode/insert-phase.md +111 -0
  94. package/.aether/commands/opencode/interpret.md +272 -0
  95. package/.aether/commands/opencode/lay-eggs.md +213 -0
  96. package/.aether/commands/opencode/maturity.md +108 -0
  97. package/.aether/commands/opencode/memory-details.md +83 -0
  98. package/.aether/commands/opencode/migrate-state.md +165 -0
  99. package/.aether/commands/opencode/oracle.md +593 -0
  100. package/.aether/commands/opencode/organize.md +226 -0
  101. package/.aether/commands/opencode/patrol.md +626 -0
  102. package/.aether/commands/opencode/pause-colony.md +203 -0
  103. package/.aether/commands/opencode/phase.md +113 -0
  104. package/.aether/commands/opencode/pheromones.md +162 -0
  105. package/.aether/commands/opencode/plan.md +684 -0
  106. package/.aether/commands/opencode/preferences.md +71 -0
  107. package/.aether/commands/opencode/quick.md +91 -0
  108. package/.aether/commands/opencode/redirect.md +84 -0
  109. package/.aether/commands/opencode/resume-colony.md +190 -0
  110. package/.aether/commands/opencode/resume.md +394 -0
  111. package/.aether/commands/opencode/run.md +237 -0
  112. package/.aether/commands/opencode/seal.md +452 -0
  113. package/.aether/commands/opencode/skill-create.md +63 -0
  114. package/.aether/commands/opencode/status.md +307 -0
  115. package/.aether/commands/opencode/swarm.md +15 -0
  116. package/.aether/commands/opencode/tunnels.md +400 -0
  117. package/.aether/commands/opencode/update.md +127 -0
  118. package/.aether/commands/opencode/verify-castes.md +139 -0
  119. package/.aether/commands/opencode/watch.md +227 -0
  120. package/.aether/commands/plan.yaml +53 -2
  121. package/.aether/commands/quick.yaml +104 -0
  122. package/.aether/commands/resume-colony.yaml +6 -4
  123. package/.aether/commands/resume.yaml +9 -0
  124. package/.aether/commands/run.yaml +37 -1
  125. package/.aether/commands/seal.yaml +9 -0
  126. package/.aether/commands/status.yaml +45 -1
  127. package/.aether/docs/command-playbooks/build-full.md +3 -2
  128. package/.aether/docs/command-playbooks/build-prep.md +12 -4
  129. package/.aether/docs/command-playbooks/build-verify.md +51 -0
  130. package/.aether/docs/command-playbooks/continue-advance.md +115 -6
  131. package/.aether/docs/command-playbooks/continue-full.md +1 -0
  132. package/.aether/docs/command-playbooks/continue-verify.md +33 -0
  133. package/.aether/utils/clash-detect.sh +239 -0
  134. package/.aether/utils/council.sh +425 -0
  135. package/.aether/utils/error-handler.sh +3 -3
  136. package/.aether/utils/flag.sh +23 -12
  137. package/.aether/utils/hive.sh +2 -2
  138. package/.aether/utils/hooks/clash-pre-tool-use.js +99 -0
  139. package/.aether/utils/immune.sh +508 -0
  140. package/.aether/utils/learning.sh +2 -2
  141. package/.aether/utils/merge-driver-lockfile.sh +35 -0
  142. package/.aether/utils/midden.sh +712 -0
  143. package/.aether/utils/pheromone.sh +1376 -108
  144. package/.aether/utils/queen.sh +31 -21
  145. package/.aether/utils/session.sh +264 -0
  146. package/.aether/utils/spawn-tree.sh +7 -7
  147. package/.aether/utils/spawn.sh +2 -2
  148. package/.aether/utils/state-api.sh +216 -5
  149. package/.aether/utils/swarm.sh +1 -1
  150. package/.aether/utils/worktree.sh +189 -0
  151. package/.claude/commands/ant/colonize.md +2 -0
  152. package/.claude/commands/ant/council.md +205 -0
  153. package/.claude/commands/ant/init.md +53 -14
  154. package/.claude/commands/ant/insert-phase.md +4 -0
  155. package/.claude/commands/ant/plan.md +27 -1
  156. package/.claude/commands/ant/quick.md +100 -0
  157. package/.claude/commands/ant/resume-colony.md +3 -2
  158. package/.claude/commands/ant/resume.md +9 -0
  159. package/.claude/commands/ant/run.md +37 -1
  160. package/.claude/commands/ant/seal.md +9 -0
  161. package/.claude/commands/ant/status.md +45 -1
  162. package/.opencode/commands/ant/colonize.md +2 -0
  163. package/.opencode/commands/ant/council.md +143 -0
  164. package/.opencode/commands/ant/init.md +53 -13
  165. package/.opencode/commands/ant/insert-phase.md +4 -0
  166. package/.opencode/commands/ant/plan.md +26 -1
  167. package/.opencode/commands/ant/quick.md +91 -0
  168. package/.opencode/commands/ant/resume-colony.md +3 -2
  169. package/.opencode/commands/ant/resume.md +9 -0
  170. package/.opencode/commands/ant/run.md +37 -1
  171. package/.opencode/commands/ant/status.md +2 -0
  172. package/CHANGELOG.md +116 -0
  173. package/README.md +34 -8
  174. package/bin/cli.js +103 -61
  175. package/bin/lib/banner.js +14 -0
  176. package/bin/lib/init.js +8 -7
  177. package/bin/lib/interactive-setup.js +251 -0
  178. package/bin/npx-entry.js +21 -0
  179. package/bin/npx-install.js +9 -167
  180. package/bin/validate-package.sh +23 -0
  181. package/package.json +11 -3
  182. package/.aether/docs/plans/pheromone-display-plan.md +0 -257
  183. package/.aether/schemas/example-prompt-builder.xml +0 -234
  184. package/.aether/scripts/incident-test-add.sh +0 -47
  185. package/.aether/scripts/weekly-audit.sh +0 -79
@@ -0,0 +1,239 @@
1
+ <!-- Generated from .aether/commands/watch.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:watch
4
+ description: "👁️🔄🐜🏠🔄👁️ Set up tmux session to watch ants working in real-time"
5
+ ---
6
+
7
+ You are the **Queen**. Set up live visibility into colony activity.
8
+
9
+ ## Instructions
10
+
11
+ ### Step 1: Check Prerequisites
12
+
13
+ Use Bash with description "Checking for tmux..." to check if tmux is available:
14
+ ```bash
15
+ command -v tmux >/dev/null 2>&1 && echo "tmux_available" || echo "tmux_missing"
16
+ ```
17
+
18
+ If tmux is missing:
19
+ ```
20
+ tmux is required for live colony viewing.
21
+
22
+ Install with:
23
+ macOS: brew install tmux
24
+ Ubuntu: sudo apt install tmux
25
+ Fedora: sudo dnf install tmux
26
+ ```
27
+ Stop here.
28
+
29
+ ### Step 2: Initialize Activity Log
30
+
31
+ Ensure activity log exists by running using the Bash tool with description "Initializing watch files...":
32
+ ```bash
33
+ mkdir -p .aether/data
34
+ touch .aether/data/activity.log
35
+ ```
36
+
37
+ ### Step 2.5: Check for Stale Watch Session
38
+
39
+ Capture session start time:
40
+ ```bash
41
+ WATCH_START=$(date +%s)
42
+ ```
43
+
44
+ Check for stale watch files by running using the Bash tool with description "Checking for stale watch session...":
45
+ ```bash
46
+ stale_check=$(bash .aether/aether-utils.sh session-verify-fresh --command watch "" "$WATCH_START")
47
+ has_stale=$(echo "$stale_check" | jq -r '.stale | length' 2>/dev/null || echo "0")
48
+ ```
49
+
50
+ If stale files exist, they will be overwritten by the new watch session.
51
+ The tmux session check in Step 4 handles concurrent sessions.
52
+
53
+ ### Step 3: Create Status File
54
+
55
+ Write initial status to `.aether/data/watch-status.txt`:
56
+
57
+ ```
58
+ .-.
59
+ (o o) AETHER COLONY
60
+ | O | Live Status
61
+ `-`
62
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
63
+
64
+ Session Started: $(date -u +"%Y-%m-%dT%H:%M:%SZ")
65
+ State: IDLE
66
+ Phase: -/-
67
+
68
+ Active Workers:
69
+ (none)
70
+
71
+ Last Activity:
72
+ (waiting for colony activity)
73
+ ```
74
+
75
+ ### Step 4: Create or Attach to tmux Session
76
+
77
+ Check if session exists by running using the Bash tool with description "Checking tmux session...":
78
+ ```bash
79
+ tmux has-session -t aether-colony 2>/dev/null && echo "exists" || echo "new"
80
+ ```
81
+
82
+ **If session exists:** Attach to it by running using the Bash tool with description "Attaching to watch session...":
83
+ ```bash
84
+ tmux attach-session -t aether-colony
85
+ ```
86
+ Output: `Attached to existing aether-colony session.`
87
+ Stop here.
88
+
89
+ **If session is new:** Create the layout.
90
+
91
+ ### Step 5: Create tmux Layout (4-Pane)
92
+
93
+ Use Bash with description "Creating watch session layout..." to create the session with 4 panes in a 2x2 grid:
94
+
95
+ ```bash
96
+ # Create session with first pane
97
+ tmux new-session -d -s aether-colony -n colony
98
+
99
+ # Split into 4 panes (2x2 grid)
100
+ # First split horizontally (left|right)
101
+ tmux split-window -h -t aether-colony:colony
102
+
103
+ # Split left side vertically (top-left, bottom-left)
104
+ tmux split-window -v -t aether-colony:colony.0
105
+
106
+ # Split right side vertically (top-right, bottom-right)
107
+ tmux split-window -v -t aether-colony:colony.2
108
+
109
+ # Set pane contents:
110
+ # Pane 0 (top-left): Status display
111
+ tmux send-keys -t aether-colony:colony.0 'watch -n 1 cat .aether/data/watch-status.txt' C-m
112
+
113
+ # Pane 1 (bottom-left): Progress bar
114
+ tmux send-keys -t aether-colony:colony.1 'watch -n 1 cat .aether/data/watch-progress.txt' C-m
115
+
116
+ # Pane 2 (top-right): Spawn tree visualization
117
+ tmux send-keys -t aether-colony:colony.2 'bash .aether/utils/watch-spawn-tree.sh .aether/data' C-m
118
+
119
+ # Pane 3 (bottom-right): Colorized activity log stream
120
+ tmux send-keys -t aether-colony:colony.3 'bash .aether/utils/colorize-log.sh .aether/data/activity.log' C-m
121
+
122
+ # Set pane titles (if supported)
123
+ tmux select-pane -t aether-colony:colony.0 -T "Status"
124
+ tmux select-pane -t aether-colony:colony.1 -T "Progress"
125
+ tmux select-pane -t aether-colony:colony.2 -T "Spawn Tree"
126
+ tmux select-pane -t aether-colony:colony.3 -T "Activity Log"
127
+
128
+ # Balance panes for even 2x2 grid
129
+ tmux select-layout -t aether-colony:colony tiled
130
+
131
+ echo "Session created"
132
+ ```
133
+
134
+ ### Step 6: Create Progress File
135
+
136
+ Write initial progress to `.aether/data/watch-progress.txt`:
137
+
138
+ ```
139
+ .-.
140
+ (o o) AETHER COLONY
141
+ | O | Progress
142
+ `-`
143
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
144
+
145
+ Phase: -/-
146
+
147
+ [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0%
148
+
149
+ ⏳ Waiting for build...
150
+
151
+ Target: 95% confidence
152
+ ```
153
+
154
+ ### Step 7: Attach and Display
155
+
156
+ Run using the Bash tool with description "Attaching to watch display...":
157
+ ```bash
158
+ tmux attach-session -t aether-colony
159
+ ```
160
+
161
+ Before attaching, output:
162
+
163
+ ```
164
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
165
+ 👁️🔄🐜🏠🔄👁️ A E T H E R C O L O N Y W A T C H
166
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
167
+
168
+ tmux session 'aether-colony' created.
169
+
170
+ Layout (4-pane 2x2 grid):
171
+ +------------------+------------------+
172
+ | Status | Spawn Tree |
173
+ | Colony state | Worker hierarchy |
174
+ +------------------+------------------+
175
+ | Progress | Activity Log |
176
+ | Phase progress | Live stream |
177
+ +------------------+------------------+
178
+
179
+ Commands:
180
+ Ctrl+B D Detach from session
181
+ Ctrl+B [ Scroll mode (q to exit)
182
+ Ctrl+B Arrow Navigate between panes
183
+ tmux kill-session -t aether-colony Stop watching
184
+
185
+ The session will update in real-time as colony works.
186
+ Attaching now...
187
+ ```
188
+
189
+ Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
190
+
191
+ ---
192
+
193
+ ## Status Update Protocol
194
+
195
+ Workers and commands update watch files as they work:
196
+
197
+ ### Activity Log
198
+ Workers write via: `bash .aether/aether-utils.sh activity-log "ACTION" "caste" "description"`
199
+
200
+ For named ants (recommended):
201
+ ```bash
202
+ # Generate a name first
203
+ ant_name=$(bash .aether/aether-utils.sh generate-ant-name "builder" | jq -r '.result')
204
+ # Log with ant name
205
+ bash .aether/aether-utils.sh activity-log "CREATED" "$ant_name (Builder)" "Implemented auth module"
206
+ ```
207
+
208
+ ### Spawn Tracking
209
+ Log spawns for tree visualization:
210
+ ```bash
211
+ bash .aether/aether-utils.sh spawn-log "Prime" "builder" "Hammer-42" "implementing auth"
212
+ bash .aether/aether-utils.sh spawn-complete "Hammer-42" "completed" "auth module done"
213
+ ```
214
+
215
+ ### Status File
216
+ Commands update `.aether/data/watch-status.txt` with current state:
217
+ - State: PLANNING, EXECUTING, READY
218
+ - Phase: current/total
219
+ - Active Workers: list of named ants
220
+ - Last Activity: most recent log entry
221
+
222
+ ### Progress File
223
+ Update via: `bash .aether/aether-utils.sh update-progress <percent> "<message>" <phase> <total>`
224
+
225
+ Example:
226
+ ```bash
227
+ bash .aether/aether-utils.sh update-progress 45 "Building auth module..." 2 5
228
+ ```
229
+
230
+ ---
231
+
232
+ ## Cleanup
233
+
234
+ To stop watching:
235
+ ```bash
236
+ tmux kill-session -t aether-colony
237
+ ```
238
+
239
+ This stops the session but preserves all log files.
@@ -66,6 +66,8 @@ body_claude: |
66
66
 
67
67
  **If the file exists:** continue.
68
68
 
69
+ **If `milestone` == `"Crowned Anthill"`:** output "This colony has been sealed. Start a new colony with `/ant:init \"new goal\"`.", stop.
70
+
69
71
  **If `plan.phases` is not empty:** output "Colony already has phases. Use /ant:continue.", stop.
70
72
 
71
73
  ### Step 2: Quick Surface Scan (for session context)
@@ -287,6 +289,8 @@ body_opencode: |
287
289
 
288
290
  **If the file exists:** continue.
289
291
 
292
+ **If `milestone` == `"Crowned Anthill"`:** output "This colony has been sealed. Start a new colony with `/ant:init \"new goal\"`.", stop.
293
+
290
294
  **If `plan.phases` is not empty:** output "Colony already has phases. Use /ant:continue.", stop.
291
295
 
292
296
  ### Step 2: Quick Surface Scan (for session context)
@@ -6,9 +6,208 @@ body: |
6
6
  ## Instructions
7
7
 
8
8
  Parse `{{ARGUMENTS}}`:
9
+ - If starts with `--deliberate`: set `deliberate_mode = true`, extract proposal text after `--deliberate`
9
10
  - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
10
11
  - Otherwise: set `visual_mode = true`
11
12
 
13
+ **If `deliberate_mode` is true:** Skip to [Deliberation Mode](#deliberation-mode) and stop after it.
14
+
15
+ ---
16
+
17
+ ## Deliberation Mode
18
+
19
+ When `--deliberate "<proposal>"` is passed, run a structured Advocate/Challenger/Sage deliberation.
20
+
21
+ ### Step D1: Check Budget
22
+
23
+ Run using the Bash tool with description "Checking deliberation budget...":
24
+ ```bash
25
+ bash .aether/aether-utils.sh council-budget-check
26
+ ```
27
+
28
+ Parse result. If `allowed` is `false`:
29
+ ```
30
+ 📜🐜🏛️🐜📜 COUNCIL — BUDGET EXHAUSTED
31
+
32
+ Spawn budget is fully allocated. Complete or close existing deliberations before starting new ones.
33
+ Run /ant:council to review existing deliberations.
34
+ ```
35
+ Stop here.
36
+
37
+ ### Step D2: Open Deliberation
38
+
39
+ Run using the Bash tool with description "Opening deliberation...":
40
+ ```bash
41
+ bash .aether/aether-utils.sh council-deliberate --proposal "<proposal>"
42
+ ```
43
+
44
+ Capture `deliberation_id` from `result.id`.
45
+
46
+ Display:
47
+ ```
48
+ 📜🐜🏛️🐜📜 COUNCIL DELIBERATION OPENED
49
+
50
+ Proposal: "<proposal>"
51
+ ID: {deliberation_id}
52
+ Budget: {budget} spawns available
53
+
54
+ Convening Advocate, Challenger, and Sage...
55
+ ```
56
+
57
+ ### Step D3: Spawn Advocate Scout
58
+
59
+ Spawn an Advocate scout to argue **in favor** of the proposal.
60
+
61
+ {{#claude}}
62
+ Use the Task tool to spawn a scout with the following system prompt:
63
+ ```
64
+ You are the Advocate on the Ant Colony council.
65
+ Your role is to argue STRONGLY IN FAVOR of the proposal.
66
+ Present the strongest possible case for why this proposal should be adopted.
67
+ Be specific. Focus on concrete benefits and outcomes.
68
+ Keep your argument under 200 words.
69
+ Reply with ONLY your argument text — no preamble or meta-commentary.
70
+ ```
71
+
72
+ And user message:
73
+ ```
74
+ Proposal: "<proposal>"
75
+
76
+ Present your strongest argument in favor of this proposal.
77
+ ```
78
+
79
+ Capture the advocate's argument as `advocate_argument`.
80
+ {{/claude}}
81
+
82
+ Record the argument:
83
+ ```bash
84
+ bash .aether/aether-utils.sh council-advocate \
85
+ --deliberation-id "<deliberation_id>" \
86
+ --argument "<advocate_argument>"
87
+ ```
88
+
89
+ Display:
90
+ ```
91
+ ⚖️ ADVOCATE:
92
+ {advocate_argument}
93
+ ```
94
+
95
+ ### Step D4: Spawn Challenger Scout
96
+
97
+ Spawn a Challenger scout to argue **against** the proposal.
98
+
99
+ {{#claude}}
100
+ Use the Task tool to spawn a scout with the following system prompt:
101
+ ```
102
+ You are the Challenger on the Ant Colony council.
103
+ Your role is to argue STRONGLY AGAINST the proposal.
104
+ Present the strongest possible case for why this proposal should be rejected or deferred.
105
+ Be specific. Focus on concrete risks, costs, and downsides.
106
+ Keep your argument under 200 words.
107
+ Reply with ONLY your argument text — no preamble or meta-commentary.
108
+ ```
109
+
110
+ And user message:
111
+ ```
112
+ Proposal: "<proposal>"
113
+
114
+ Present your strongest argument against this proposal.
115
+ ```
116
+
117
+ Capture the challenger's argument as `challenger_argument`.
118
+ {{/claude}}
119
+
120
+ Record the argument:
121
+ ```bash
122
+ bash .aether/aether-utils.sh council-challenger \
123
+ --deliberation-id "<deliberation_id>" \
124
+ --argument "<challenger_argument>"
125
+ ```
126
+
127
+ Display:
128
+ ```
129
+ ⚔️ CHALLENGER:
130
+ {challenger_argument}
131
+ ```
132
+
133
+ ### Step D5: Spawn Sage Scout
134
+
135
+ Spawn a Sage scout to synthesize both positions and provide a recommendation.
136
+
137
+ {{#claude}}
138
+ Use the Task tool to spawn a scout with the following system prompt:
139
+ ```
140
+ You are the Sage on the Ant Colony council.
141
+ You have heard both the Advocate and Challenger arguments.
142
+ Your role is to synthesize both positions into balanced wisdom and provide a clear recommendation.
143
+ Your recommendation must be one of: adopt, reject, defer, or adopt-with-conditions.
144
+ Keep your synthesis under 150 words.
145
+ Reply with JSON only:
146
+ {"synthesis": "<your balanced synthesis>", "recommendation": "adopt|reject|defer|adopt-with-conditions"}
147
+ ```
148
+
149
+ And user message:
150
+ ```
151
+ Proposal: "<proposal>"
152
+
153
+ Advocate argued: "<advocate_argument>"
154
+
155
+ Challenger argued: "<challenger_argument>"
156
+
157
+ Synthesize both positions and provide your recommendation.
158
+ ```
159
+
160
+ Parse the JSON response. Capture `synthesis` and `recommendation`.
161
+ {{/claude}}
162
+
163
+ Record the sage synthesis:
164
+ ```bash
165
+ bash .aether/aether-utils.sh council-sage \
166
+ --deliberation-id "<deliberation_id>" \
167
+ --synthesis "<synthesis>" \
168
+ --recommendation "<recommendation>"
169
+ ```
170
+
171
+ ### Step D6: Display Result
172
+
173
+ ```
174
+ 📜🐜🏛️🐜📜 COUNCIL DELIBERATION COMPLETE
175
+
176
+ Proposal: "<proposal>"
177
+
178
+ ⚖️ Advocate:
179
+ {advocate_argument}
180
+
181
+ ⚔️ Challenger:
182
+ {challenger_argument}
183
+
184
+ 🧙 Sage Synthesis:
185
+ {synthesis}
186
+
187
+ Recommendation: {recommendation}
188
+ ```
189
+
190
+ If recommendation is `adopt` or `adopt-with-conditions`:
191
+ ```
192
+ ✅ Council recommends proceeding.
193
+ Run /ant:focus "<proposal summary>" to inject guidance for the colony.
194
+ ```
195
+
196
+ If recommendation is `reject`:
197
+ ```
198
+ ❌ Council recommends against this proposal.
199
+ Run /ant:redirect "<proposal summary>" if you want to make this a hard constraint.
200
+ ```
201
+
202
+ If recommendation is `defer`:
203
+ ```
204
+ ⏸️ Council recommends deferring this decision.
205
+ Return when more context is available.
206
+ ```
207
+
208
+ ---
209
+
210
+
12
211
  {{#claude}}
13
212
  ### Step 0: Initialize Visual Mode (if enabled)
14
213
 
@@ -26,6 +225,12 @@ body: |
26
225
  ```
27
226
  Stop here.
28
227
 
228
+ If `milestone` == `"Crowned Anthill"`:
229
+ ```
230
+ This colony has been sealed. Start a new colony with /ant:init "new goal".
231
+ ```
232
+ Stop here.
233
+
29
234
  Capture the current state for context:
30
235
  - `prior_state` = state field value (READY, EXECUTING, PLANNING, etc.)
31
236
  - `current_phase` = current_phase field value
@@ -135,8 +135,14 @@ body: |
135
135
 
136
136
  Use Read tool to check `.aether/data/COLONY_STATE.json`.
137
137
 
138
- - If file exists AND has a non-null `goal` field: set `reinit_mode = true`, store `existing_goal`
139
- - Otherwise: set `reinit_mode = false`
138
+ - If file exists AND has a non-null `goal` field:
139
+ - Check the `milestone` field. If `milestone == "Crowned Anthill"`:
140
+ - This is a **sealed colony**. Treat as **fresh init**, NOT re-init.
141
+ - Set `reinit_mode = false`
142
+ - Display: `Previous colony was sealed. Starting fresh colony.`
143
+ - The old COLONY_STATE.json will be overwritten in Step 7 (fresh init path).
144
+ - Otherwise (colony exists but is NOT sealed): set `reinit_mode = true`, store `existing_goal`
145
+ - If file does not exist or `goal` is null: set `reinit_mode = false`
140
146
 
141
147
  If re-init mode, read existing charter entries from `.aether/QUEEN.md`:
142
148
  ```bash
@@ -276,14 +282,29 @@ body: |
276
282
 
277
283
  2. Auto-apply approved pheromone suggestions (see pheromone auto-apply below).
278
284
 
279
- 3. Optionally update the goal field in COLONY_STATE.json in-place:
285
+ 3. Update the goal field in COLONY_STATE.json in-place using the state API:
280
286
  ```bash
281
- jq --arg new_goal "{approved_intent}" '.goal = $new_goal' .aether/data/COLONY_STATE.json > .aether/data/COLONY_STATE.json.tmp && mv .aether/data/COLONY_STATE.json.tmp .aether/data/COLONY_STATE.json
287
+ bash .aether/aether-utils.sh state-write "$(jq --arg new_goal "{approved_intent}" '.goal = $new_goal' .aether/data/COLONY_STATE.json)"
282
288
  ```
283
289
 
284
- 4. Run `bash .aether/aether-utils.sh session-init "$(jq -r '.session_id' .aether/data/COLONY_STATE.json)" "{approved_intent}"`
290
+ 4. **Verify the write** read back and confirm goal is set:
291
+ ```bash
292
+ verify_goal=$(jq -r '.goal' .aether/data/COLONY_STATE.json)
293
+ if [[ "$verify_goal" == "null" || -z "$verify_goal" ]]; then
294
+ echo "ERROR: Colony state write failed — goal is still null after write. Re-run /ant:init."
295
+ # Attempt recovery: write goal directly
296
+ jq --arg g "{approved_intent}" '.goal = $g' .aether/data/COLONY_STATE.json > .aether/data/COLONY_STATE.json.tmp && mv .aether/data/COLONY_STATE.json.tmp .aether/data/COLONY_STATE.json
297
+ verify_goal=$(jq -r '.goal' .aether/data/COLONY_STATE.json)
298
+ if [[ "$verify_goal" == "null" || -z "$verify_goal" ]]; then
299
+ echo "FATAL: Recovery write also failed. Colony state may be corrupted."
300
+ stop
301
+ fi
302
+ fi
303
+ ```
304
+
305
+ 5. Run `bash .aether/aether-utils.sh session-init "$(jq -r '.session_id' .aether/data/COLONY_STATE.json)" "{approved_intent}"`
285
306
 
286
- 5. Skip to Step 8 (display result). Do NOT write COLONY_STATE.json from template, do NOT write constraints.json, do NOT write pheromones.json.
307
+ 6. Skip to Step 8 (display result). Do NOT write COLONY_STATE.json from template, do NOT write constraints.json, do NOT write pheromones.json.
287
308
 
288
309
  **If fresh init:**
289
310
 
@@ -299,12 +320,24 @@ body: |
299
320
  - Remove ALL keys starting with underscore
300
321
  - Write the resulting JSON to `.aether/data/COLONY_STATE.json` using the Write tool
301
322
 
302
- 5. Write constraints.json from template:
323
+ 5. **Verify the write** — read back and confirm COLONY_STATE.json is valid and goal is set:
324
+ ```bash
325
+ verify_goal=$(jq -r '.goal' .aether/data/COLONY_STATE.json 2>/dev/null)
326
+ verify_valid=$(jq -e . .aether/data/COLONY_STATE.json >/dev/null 2>&1 && echo "valid" || echo "invalid")
327
+ if [[ "$verify_valid" != "valid" || "$verify_goal" == "null" || -z "$verify_goal" ]]; then
328
+ echo "ERROR: Colony state write verification failed (valid=$verify_valid, goal=$verify_goal)"
329
+ echo "The colony file may be corrupted. Remove .aether/data/COLONY_STATE.json and re-run /ant:init."
330
+ stop
331
+ fi
332
+ echo "Colony state verified: goal=\"$verify_goal\""
333
+ ```
334
+
335
+ 6. Write constraints.json from template:
303
336
  - Resolve template: check `~/.aether/system/templates/constraints.template.json` first, then `.aether/templates/constraints.template.json`
304
337
  - If no template found: output "Template missing: constraints.template.json. Run aether update to fix." and stop
305
338
  - Read template, follow `_instructions`, remove `_` prefixed keys, write to `.aether/data/constraints.json`
306
339
 
307
- 6. Initialize runtime files from templates (non-blocking):
340
+ 7. Initialize runtime files from templates (non-blocking):
308
341
  ```bash
309
342
  for template in pheromones midden learning-observations; do
310
343
  if [[ "$template" == "midden" ]]; then
@@ -327,15 +360,15 @@ body: |
327
360
  done
328
361
  ```
329
362
 
330
- 7. Run `bash .aether/aether-utils.sh context-update init "{approved_intent}"`
331
- 8. Run `bash .aether/aether-utils.sh validate-state colony`
332
- 9. Register repo (silent on failure):
363
+ 8. Run `bash .aether/aether-utils.sh context-update init "{approved_intent}"`
364
+ 9. Run `bash .aether/aether-utils.sh validate-state colony`
365
+ 10. Register repo (silent on failure):
333
366
  ```bash
334
367
  domain_tags=$(bash .aether/aether-utils.sh domain-detect 2>/dev/null | jq -r '.result.tags // ""' || echo "")
335
368
  bash .aether/aether-utils.sh registry-add "$(pwd)" "$(jq -r '.version // "unknown"' ~/.aether/version.json 2>/dev/null || echo 'unknown')" --goal "{approved_intent}" --active true --tags "$domain_tags" 2>/dev/null || true
336
369
  cp ~/.aether/version.json .aether/version.json 2>/dev/null || true
337
370
  ```
338
- 10. Seed QUEEN.md from hive (non-blocking):
371
+ 11. Seed QUEEN.md from hive (non-blocking):
339
372
  ```bash
340
373
  domain_tags=$(jq -r --arg repo "$(pwd)" \
341
374
  '[.repos[] | select(.path == $repo) | .domain_tags // []] | .[0] // [] | join(",")' \
@@ -345,7 +378,7 @@ body: |
345
378
  seed_result=$(bash .aether/aether-utils.sh $seed_args 2>/dev/null || echo '{}')
346
379
  seeded_count=$(echo "$seed_result" | jq -r '.result.seeded // 0' 2>/dev/null || echo "0")
347
380
  ```
348
- 11. Run `bash .aether/aether-utils.sh session-init "{session_id}" "{approved_intent}"`
381
+ 12. Run `bash .aether/aether-utils.sh session-init "{session_id}" "{approved_intent}"`
349
382
 
350
383
  **Pheromone auto-apply (referenced by both re-init and fresh init paths above):**
351
384
 
@@ -13,6 +13,10 @@ body: |
13
13
  `No colony initialized. Run /ant:init first.`
14
14
  Stop.
15
15
 
16
+ If `milestone` == `"Crowned Anthill"`:
17
+ `This colony has been sealed. Start a new colony with /ant:init "new goal".`
18
+ Stop.
19
+
16
20
  If `plan.phases` is empty:
17
21
  `No project plan. Run /ant:plan first.`
18
22
  Stop.