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,307 @@
1
+ <!-- Generated from .aether/commands/status.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:status
4
+ description: "📈🐜🏘️🐜📈 Show colony status at a glance"
5
+ ---
6
+
7
+ ### Step -1: Normalize Arguments
8
+
9
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
10
+
11
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
12
+
13
+ You are the **Queen**. Show colony status.
14
+
15
+ ## Instructions
16
+
17
+ ### Step 0: Version Check (Non-blocking)
18
+
19
+ Run: `bash .aether/aether-utils.sh version-check-cached 2>/dev/null || true`
20
+
21
+ If the command succeeds and the JSON result contains a non-empty string, display it as a one-line notice. Proceed regardless of outcome.
22
+
23
+ ### Step 1: Read State + Version Check
24
+
25
+ Read `.aether/data/COLONY_STATE.json`.
26
+
27
+ If file missing or `goal: null`:
28
+ ```
29
+ No colony initialized. Run /ant:init first.
30
+ ```
31
+ Stop here.
32
+
33
+ **Auto-upgrade old state:**
34
+ If `version` field is missing, "1.0", or "2.0":
35
+ 1. Preserve: `goal`, `state`, `current_phase`, `plan.phases` (keep phase structure)
36
+ 2. Write upgraded state:
37
+ ```json
38
+ {
39
+ "version": "3.0",
40
+ "goal": "<preserved>",
41
+ "state": "<preserved or 'READY'>",
42
+ "current_phase": <preserved or 0>,
43
+ "session_id": "migrated_<timestamp>",
44
+ "initialized_at": "<preserved or now>",
45
+ "build_started_at": null,
46
+ "plan": {
47
+ "generated_at": "<preserved or null>",
48
+ "confidence": null,
49
+ "phases": <preserved or []>
50
+ },
51
+ "memory": { "phase_learnings": [], "decisions": [], "instincts": [] },
52
+ "errors": { "records": [], "flagged_patterns": [] },
53
+ "events": ["<now>|state_upgraded|system|Auto-upgraded from v<old> to v3.0"]
54
+ }
55
+ ```
56
+ 3. Output: `State auto-upgraded to v3.0`
57
+ 4. Continue with command.
58
+
59
+ ### Step 1.5: Load State and Show Resumption Context
60
+
61
+ Run: `bash .aether/aether-utils.sh load-state`
62
+
63
+ If successful and goal is not null:
64
+ 1. Extract current_phase from state
65
+ 2. Get phase name from plan.phases[current_phase - 1].name (or "(unnamed)")
66
+ 3. Get last event timestamp from events array (last element)
67
+ 4. Display extended resumption context:
68
+ ```
69
+ 🔄 Resuming: Phase X - Name
70
+ Last activity: timestamp
71
+ ```
72
+
73
+ 5. Check for .aether/HANDOFF.md existence in the load-state output or via separate check
74
+ 6. If .aether/HANDOFF.md exists:
75
+ - Display: "Resuming from paused session"
76
+ - Read .aether/HANDOFF.md content for additional context
77
+ - Remove .aether/HANDOFF.md after displaying (cleanup)
78
+
79
+ Run: `bash .aether/aether-utils.sh unload-state` to release lock.
80
+
81
+ ### Step 2: Compute Summary
82
+
83
+ From state, extract:
84
+
85
+ ### Step 2.4: Survey Freshness (Advisory)
86
+
87
+ Run:
88
+ ```bash
89
+ survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
90
+ survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
91
+ if [[ -n "$survey_latest" ]]; then
92
+ now_epoch=$(date +%s)
93
+ modified_epoch=$(stat -f %m "$survey_latest" 2>/dev/null || stat -c %Y "$survey_latest" 2>/dev/null || echo 0)
94
+ survey_age_days=$(( (now_epoch - modified_epoch) / 86400 ))
95
+ else
96
+ survey_age_days=-1
97
+ fi
98
+ echo "survey_docs=$survey_docs"
99
+ echo "survey_age_days=$survey_age_days"
100
+ ```
101
+
102
+ Interpretation:
103
+ - If `survey_docs == 0`: `survey_status = "missing"`
104
+ - If `survey_age_days > 14`: `survey_status = "stale"`
105
+ - Otherwise: `survey_status = "fresh"`
106
+
107
+ ### Step 2.5: Gather Dream Information
108
+
109
+ Run: `ls -1 .aether/dreams/*.md 2>/dev/null | wc -l`
110
+
111
+ Capture:
112
+ - Dream count: number of .md files in .aether/dreams/
113
+ - Latest dream: most recent file by name (files are timestamped: YYYY-MM-DD-HHMM.md)
114
+
115
+ To get latest dream timestamp, Run:
116
+ ```bash
117
+ ls -1 .aether/dreams/*.md 2>/dev/null | sort | tail -1 | sed 's/.*\/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)-\([0-9]\{4\}\).*/\1 \2/'
118
+ ```
119
+
120
+ Format the timestamp as: YYYY-MM-DD HH:MM
121
+
122
+
123
+
124
+ **Phase info:**
125
+ - Current phase number: `current_phase`
126
+ - Total phases: `plan.phases.length`
127
+ - Phase name: `plan.phases[current_phase - 1].name` (if exists)
128
+
129
+ **Task progress:**
130
+ - If phases exist, count tasks in current phase
131
+ - Completed: tasks with `status: "completed"`
132
+ - Total: all tasks in current phase
133
+
134
+ **Constraints:**
135
+ Read `.aether/data/constraints.json` if exists:
136
+ - Focus count: `focus.length`
137
+ - Constraints count: `constraints.length`
138
+
139
+ **Flags:**
140
+ Run: `bash .aether/aether-utils.sh flag-check-blockers`
141
+ Extract:
142
+ - Blockers count (critical, block advancement)
143
+ - Issues count (high, warnings)
144
+ - Notes count (low, informational)
145
+
146
+ **Escalation state:**
147
+ Count escalated flags by checking for blocker flags with source "escalation":
148
+
149
+ Run:
150
+ ```bash
151
+ escalated_count=$(bash .aether/aether-utils.sh flag-list --type blocker 2>/dev/null | jq '[.result.flags[] | select(.source == "escalation")] | length' 2>/dev/null || echo "0")
152
+ echo "escalated_count=$escalated_count"
153
+ ```
154
+
155
+ **Instincts:**
156
+ From `memory.instincts`:
157
+ - Total count: `instincts.length`
158
+ - High confidence (≥0.7): count where confidence >= 0.7
159
+ - Top 3: sorted by confidence descending
160
+
161
+ **Colony state:**
162
+ - `state` field (IDLE, READY, EXECUTING, PLANNING)
163
+
164
+ **Milestone:**
165
+ - `milestone` field (First Mound, Open Chambers, Brood Stable, Ventilated Nest, Sealed Chambers, Crowned Anthill)
166
+ - `milestone_updated_at` field (timestamp of last milestone change)
167
+
168
+ ### Step 2.6: Detect Milestone
169
+
170
+ Run: `bash .aether/aether-utils.sh milestone-detect`
171
+
172
+ Extract from JSON result:
173
+ - `milestone`: Current milestone name
174
+ - `version`: Computed version string
175
+ - `phases_completed`: Number of completed phases
176
+ - `total_phases`: Total phases in plan
177
+
178
+ ### Step 2.8: Load Memory Health Metrics
179
+
180
+ Run:
181
+ ```bash
182
+ bash .aether/aether-utils.sh memory-metrics
183
+ ```
184
+
185
+ Extract from JSON result:
186
+ - wisdom.total
187
+ - pending.total
188
+ - recent_failures.count
189
+ - last_activity.queen_md_updated
190
+ - last_activity.learning_captured
191
+
192
+ Format timestamps for display (YYYY-MM-DD HH:MM).
193
+
194
+ ### Step 2.7: Generate Progress Bars
195
+
196
+ Calculate progress metrics and generate visual bars.
197
+
198
+ Run:
199
+ ```bash
200
+ current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
201
+ total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
202
+
203
+ # Calculate task progress in current phase
204
+ if [[ "$current_phase" -gt 0 && "$current_phase" -le "$total_phases" ]]; then
205
+ phase_idx=$((current_phase - 1))
206
+ tasks_completed=$(jq -r ".plan.phases[$phase_idx].tasks // [] | map(select(.status == \"completed\")) | length" .aether/data/COLONY_STATE.json)
207
+ tasks_total=$(jq -r ".plan.phases[$phase_idx].tasks // [] | length" .aether/data/COLONY_STATE.json)
208
+ phase_name=$(jq -r ".plan.phases[$phase_idx].name // \"Unnamed\"" .aether/data/COLONY_STATE.json)
209
+ else
210
+ tasks_completed=0
211
+ tasks_total=0
212
+ phase_name="No plan created"
213
+ fi
214
+
215
+ # Generate progress bars
216
+ phase_bar=$(bash .aether/aether-utils.sh generate-progress-bar "$current_phase" "$total_phases" 20)
217
+ task_bar=$(bash .aether/aether-utils.sh generate-progress-bar "$tasks_completed" "$tasks_total" 20)
218
+
219
+ echo "phase_bar=$phase_bar"
220
+ echo "task_bar=$task_bar"
221
+ echo "phase_name=$phase_name"
222
+ ```
223
+
224
+ Store `phase_bar`, `task_bar`, and `phase_name` values for display in Step 3.
225
+
226
+ ### Step 3: Display
227
+
228
+ Output format:
229
+
230
+ ```
231
+ .-.
232
+ (o o) AETHER COLONY
233
+ | O | Status Report
234
+ `-`
235
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
236
+
237
+ 👑 Goal: <goal (truncated to 60 chars)>
238
+
239
+ 📍 Progress
240
+ Phase: [████████░░░░░░░░░░░░] <N>/<M> phases
241
+ Tasks: [████████████████░░░░] <completed>/<total> tasks in Phase <N>
242
+
243
+ 🎯 Focus: <focus_count> areas | 🚫 Avoid: <constraints_count> patterns
244
+ 🧠 Instincts: <total> learned (<high_confidence> strong)
245
+ 🚩 Flags: <blockers> blockers | <issues> issues | <notes> notes
246
+ {if escalated_count > 0:}
247
+ ⚠️ Escalated: {escalated_count} task(s) awaiting your decision
248
+ {end if}
249
+ 🏆 Milestone: <milestone> (<version>)
250
+
251
+ 💭 Dreams: <dream_count> recorded (latest: <latest_dream>)
252
+ 🗺️ Survey: <survey_docs> docs (<survey_age_days>d old, <fresh|stale|missing>)
253
+
254
+ 📚 Memory Health
255
+ ┌─────────────────┬────────┬─────────────────────────────┐
256
+ │ Metric │ Count │ Last Updated │
257
+ ├─────────────────┼────────┼─────────────────────────────┤
258
+ │ Wisdom Entries │ {wisdom_total:>6} │ {queen_updated} │
259
+ │ Pending Promos │ {pending_total:>6} │ {learning_updated} │
260
+ │ Recent Failures │ {failures_count:>6} │ {last_failure} │
261
+ └─────────────────┴────────┴─────────────────────────────┘
262
+
263
+ State: <state>
264
+ ```
265
+
266
+ Use the `phase_bar` and `task_bar` values computed in Step 2.7 for the actual bar characters and counts.
267
+
268
+ **If instincts exist, also show top 3:**
269
+ ```
270
+ 🧠 Colony Instincts:
271
+ [0.9] 🐜 testing: Always run tests before completion
272
+ [0.8] 🐜 architecture: Use composition over inheritance
273
+ [0.7] 🐜 debugging: Trace to root cause first
274
+ ```
275
+
276
+ **Dream display:**
277
+ - If no dreams exist: `💭 Dreams: None recorded`
278
+ - If dreams exist: `💭 Dreams: <count> recorded (latest: YYYY-MM-DD HH:MM)`
279
+
280
+ **Memory Health display:**
281
+ - If memory-metrics returns empty/null values, show:
282
+ ```
283
+ 📚 Memory Health
284
+ No memory data available. Colony wisdom will accumulate as you complete phases.
285
+ ```
286
+
287
+
288
+
289
+
290
+
291
+ **Edge cases:**
292
+ - No phases yet: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 phases`
293
+ - No tasks in phase: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 tasks in Phase 0`
294
+ - No constraints file: "Constraints: 0 focus, 0 avoid"
295
+
296
+ **At the end of the output, generate the Next Up block:**
297
+
298
+ Run:
299
+ ```bash
300
+ state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
301
+ current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
302
+ total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
303
+
304
+ bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
305
+ ```
306
+
307
+ This auto-generates state-based recommendations (IDLE → init, READY → build, EXECUTING → continue, PLANNING → plan).
@@ -0,0 +1,15 @@
1
+ <!-- Generated from .aether/commands/swarm.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:swarm
4
+ description: "🔥🐜🗡️🐜🔥 Real-time colony swarm display + stubborn bug destroyer"
5
+ ---
6
+
7
+ ### Step -1: Normalize Arguments
8
+
9
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
10
+
11
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
12
+
13
+ You are the **Queen Ant Colony**. Deploy the swarm to destroy a stubborn bug or view real-time colony activity.
14
+
15
+ ## Instructions