aether-colony 5.3.2 → 5.4.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 (281) hide show
  1. package/.aether/aether-utils.sh +181 -5
  2. package/.aether/commands/archaeology.yaml +3 -3
  3. package/.aether/commands/build.yaml +80 -45
  4. package/.aether/commands/chaos.yaml +7 -7
  5. package/.aether/commands/colonize.yaml +17 -17
  6. package/.aether/commands/continue.yaml +40 -40
  7. package/.aether/commands/council.yaml +6 -6
  8. package/.aether/commands/data-clean.yaml +3 -3
  9. package/.aether/commands/dream.yaml +2 -2
  10. package/.aether/commands/entomb.yaml +12 -12
  11. package/.aether/commands/export-signals.yaml +2 -2
  12. package/.aether/commands/feedback.yaml +6 -6
  13. package/.aether/commands/flag.yaml +2 -2
  14. package/.aether/commands/flags.yaml +4 -4
  15. package/.aether/commands/focus.yaml +6 -6
  16. package/.aether/commands/help.yaml +1 -1
  17. package/.aether/commands/history.yaml +1 -1
  18. package/.aether/commands/import-signals.yaml +2 -2
  19. package/.aether/commands/init.yaml +44 -27
  20. package/.aether/commands/insert-phase.yaml +1 -1
  21. package/.aether/commands/interpret.yaml +2 -2
  22. package/.aether/commands/lay-eggs.yaml +3 -3
  23. package/.aether/commands/maturity.yaml +2 -2
  24. package/.aether/commands/memory-details.yaml +1 -1
  25. package/.aether/commands/migrate-state.yaml +1 -1
  26. package/.aether/commands/oracle.yaml +147 -82
  27. package/.aether/commands/organize.yaml +5 -5
  28. package/.aether/commands/patrol.yaml +8 -8
  29. package/.aether/commands/pause-colony.yaml +7 -7
  30. package/.aether/commands/phase.yaml +1 -1
  31. package/.aether/commands/pheromones.yaml +1 -1
  32. package/.aether/commands/plan.yaml +14 -14
  33. package/.aether/commands/quick.yaml +4 -4
  34. package/.aether/commands/redirect.yaml +6 -6
  35. package/.aether/commands/resume-colony.yaml +9 -9
  36. package/.aether/commands/resume.yaml +5 -38
  37. package/.aether/commands/run.yaml +10 -10
  38. package/.aether/commands/seal.yaml +33 -33
  39. package/.aether/commands/skill-create.yaml +4 -4
  40. package/.aether/commands/status.yaml +14 -14
  41. package/.aether/commands/swarm.yaml +14 -14
  42. package/.aether/commands/tunnels.yaml +7 -7
  43. package/.aether/commands/update.yaml +1 -1
  44. package/.aether/commands/verify-castes.yaml +3 -3
  45. package/.aether/commands/watch.yaml +15 -15
  46. package/.aether/docs/command-playbooks/build-complete.md +48 -15
  47. package/.aether/docs/command-playbooks/build-context.md +11 -11
  48. package/.aether/docs/command-playbooks/build-full.md +76 -76
  49. package/.aether/docs/command-playbooks/build-prep.md +10 -10
  50. package/.aether/docs/command-playbooks/build-verify.md +27 -27
  51. package/.aether/docs/command-playbooks/build-wave.md +38 -38
  52. package/.aether/docs/command-playbooks/continue-advance.md +60 -27
  53. package/.aether/docs/command-playbooks/continue-finalize.md +25 -11
  54. package/.aether/docs/command-playbooks/continue-full.md +60 -46
  55. package/.aether/docs/command-playbooks/continue-gates.md +18 -18
  56. package/.aether/docs/command-playbooks/continue-verify.md +10 -10
  57. package/.aether/docs/source-of-truth-map.md +10 -10
  58. package/.aether/docs/structural-learning-stack.md +283 -0
  59. package/.aether/templates/colony-state-template.json +1 -0
  60. package/.aether/utils/consolidation-seal.sh +196 -0
  61. package/.aether/utils/consolidation.sh +127 -0
  62. package/.aether/utils/curation-ants/archivist.sh +97 -0
  63. package/.aether/utils/curation-ants/critic.sh +214 -0
  64. package/.aether/utils/curation-ants/herald.sh +102 -0
  65. package/.aether/utils/curation-ants/janitor.sh +121 -0
  66. package/.aether/utils/curation-ants/librarian.sh +99 -0
  67. package/.aether/utils/curation-ants/nurse.sh +153 -0
  68. package/.aether/utils/curation-ants/orchestrator.sh +181 -0
  69. package/.aether/utils/curation-ants/scribe.sh +164 -0
  70. package/.aether/utils/curation-ants/sentinel.sh +119 -0
  71. package/.aether/utils/event-bus.sh +301 -0
  72. package/.aether/utils/graph.sh +559 -0
  73. package/.aether/utils/instinct-store.sh +401 -0
  74. package/.aether/utils/learning.sh +79 -7
  75. package/.aether/utils/oracle/oracle-stop-hook.sh +896 -0
  76. package/.aether/utils/session.sh +13 -0
  77. package/.aether/utils/state-api.sh +1 -1
  78. package/.aether/utils/trust-scoring.sh +347 -0
  79. package/.aether/utils/worktree.sh +97 -0
  80. package/.claude/commands/ant/archaeology.md +2 -2
  81. package/.claude/commands/ant/chaos.md +4 -4
  82. package/.claude/commands/ant/colonize.md +9 -9
  83. package/.claude/commands/ant/council.md +6 -6
  84. package/.claude/commands/ant/data-clean.md +3 -3
  85. package/.claude/commands/ant/dream.md +2 -2
  86. package/.claude/commands/ant/entomb.md +9 -9
  87. package/.claude/commands/ant/export-signals.md +2 -2
  88. package/.claude/commands/ant/feedback.md +4 -4
  89. package/.claude/commands/ant/flag.md +2 -2
  90. package/.claude/commands/ant/flags.md +4 -4
  91. package/.claude/commands/ant/focus.md +4 -4
  92. package/.claude/commands/ant/help.md +1 -1
  93. package/.claude/commands/ant/history.md +1 -1
  94. package/.claude/commands/ant/import-signals.md +2 -2
  95. package/.claude/commands/ant/init.md +44 -27
  96. package/.claude/commands/ant/insert-phase.md +1 -1
  97. package/.claude/commands/ant/interpret.md +2 -2
  98. package/.claude/commands/ant/lay-eggs.md +2 -2
  99. package/.claude/commands/ant/maturity.md +2 -2
  100. package/.claude/commands/ant/memory-details.md +1 -1
  101. package/.claude/commands/ant/migrate-state.md +1 -1
  102. package/.claude/commands/ant/oracle.md +78 -42
  103. package/.claude/commands/ant/organize.md +3 -3
  104. package/.claude/commands/ant/patrol.md +8 -8
  105. package/.claude/commands/ant/pause-colony.md +5 -5
  106. package/.claude/commands/ant/phase.md +1 -1
  107. package/.claude/commands/ant/pheromones.md +1 -1
  108. package/.claude/commands/ant/plan.md +8 -8
  109. package/.claude/commands/ant/quick.md +4 -4
  110. package/.claude/commands/ant/redirect.md +4 -4
  111. package/.claude/commands/ant/resume-colony.md +5 -5
  112. package/.claude/commands/ant/resume.md +17 -29
  113. package/.claude/commands/ant/run.md +10 -10
  114. package/.claude/commands/ant/seal.md +25 -25
  115. package/.claude/commands/ant/skill-create.md +2 -2
  116. package/.claude/commands/ant/status.md +14 -14
  117. package/.claude/commands/ant/swarm.md +14 -14
  118. package/.claude/commands/ant/tunnels.md +4 -4
  119. package/.claude/commands/ant/update.md +1 -1
  120. package/.claude/commands/ant/verify-castes.md +2 -2
  121. package/.claude/commands/ant/watch.md +8 -8
  122. package/.opencode/commands/ant/archaeology.md +1 -1
  123. package/.opencode/commands/ant/build.md +80 -45
  124. package/.opencode/commands/ant/chaos.md +3 -3
  125. package/.opencode/commands/ant/colonize.md +8 -8
  126. package/.opencode/commands/ant/continue.md +40 -40
  127. package/.opencode/commands/ant/council.md +5 -5
  128. package/.opencode/commands/ant/data-clean.md +2 -2
  129. package/.opencode/commands/ant/dream.md +1 -1
  130. package/.opencode/commands/ant/entomb.md +3 -3
  131. package/.opencode/commands/ant/export-signals.md +1 -1
  132. package/.opencode/commands/ant/feedback.md +2 -2
  133. package/.opencode/commands/ant/flag.md +1 -1
  134. package/.opencode/commands/ant/flags.md +3 -3
  135. package/.opencode/commands/ant/focus.md +2 -2
  136. package/.opencode/commands/ant/import-signals.md +1 -1
  137. package/.opencode/commands/ant/init.md +44 -27
  138. package/.opencode/commands/ant/insert-phase.md +1 -1
  139. package/.opencode/commands/ant/interpret.md +1 -1
  140. package/.opencode/commands/ant/lay-eggs.md +2 -2
  141. package/.opencode/commands/ant/maturity.md +1 -1
  142. package/.opencode/commands/ant/memory-details.md +1 -1
  143. package/.opencode/commands/ant/oracle.md +69 -40
  144. package/.opencode/commands/ant/organize.md +2 -2
  145. package/.opencode/commands/ant/patrol.md +8 -8
  146. package/.opencode/commands/ant/pause-colony.md +2 -2
  147. package/.opencode/commands/ant/pheromones.md +1 -1
  148. package/.opencode/commands/ant/plan.md +6 -6
  149. package/.opencode/commands/ant/quick.md +4 -4
  150. package/.opencode/commands/ant/redirect.md +2 -2
  151. package/.opencode/commands/ant/resume-colony.md +4 -4
  152. package/.opencode/commands/ant/resume.md +5 -17
  153. package/.opencode/commands/ant/run.md +10 -10
  154. package/.opencode/commands/ant/seal.md +8 -8
  155. package/.opencode/commands/ant/skill-create.md +2 -2
  156. package/.opencode/commands/ant/status.md +10 -10
  157. package/.opencode/commands/ant/tunnels.md +3 -3
  158. package/.opencode/commands/ant/verify-castes.md +1 -1
  159. package/.opencode/commands/ant/watch.md +7 -7
  160. package/CHANGELOG.md +83 -0
  161. package/README.md +22 -9
  162. package/bin/cli.js +118 -3
  163. package/bin/lib/binary-downloader.js +267 -0
  164. package/bin/lib/update-transaction.js +27 -3
  165. package/bin/lib/version-gate.js +179 -0
  166. package/bin/npx-entry.js +0 -0
  167. package/package.json +1 -1
  168. package/.aether/agents/aether-ambassador.md +0 -140
  169. package/.aether/agents/aether-archaeologist.md +0 -108
  170. package/.aether/agents/aether-architect.md +0 -133
  171. package/.aether/agents/aether-auditor.md +0 -144
  172. package/.aether/agents/aether-builder.md +0 -184
  173. package/.aether/agents/aether-chaos.md +0 -115
  174. package/.aether/agents/aether-chronicler.md +0 -122
  175. package/.aether/agents/aether-gatekeeper.md +0 -116
  176. package/.aether/agents/aether-includer.md +0 -117
  177. package/.aether/agents/aether-keeper.md +0 -177
  178. package/.aether/agents/aether-measurer.md +0 -128
  179. package/.aether/agents/aether-oracle.md +0 -137
  180. package/.aether/agents/aether-probe.md +0 -133
  181. package/.aether/agents/aether-queen.md +0 -286
  182. package/.aether/agents/aether-route-setter.md +0 -130
  183. package/.aether/agents/aether-sage.md +0 -106
  184. package/.aether/agents/aether-scout.md +0 -101
  185. package/.aether/agents/aether-surveyor-disciplines.md +0 -391
  186. package/.aether/agents/aether-surveyor-nest.md +0 -329
  187. package/.aether/agents/aether-surveyor-pathogens.md +0 -264
  188. package/.aether/agents/aether-surveyor-provisions.md +0 -334
  189. package/.aether/agents/aether-tracker.md +0 -137
  190. package/.aether/agents/aether-watcher.md +0 -174
  191. package/.aether/agents/aether-weaver.md +0 -130
  192. package/.aether/commands/claude/archaeology.md +0 -334
  193. package/.aether/commands/claude/build.md +0 -65
  194. package/.aether/commands/claude/chaos.md +0 -336
  195. package/.aether/commands/claude/colonize.md +0 -259
  196. package/.aether/commands/claude/continue.md +0 -60
  197. package/.aether/commands/claude/council.md +0 -507
  198. package/.aether/commands/claude/data-clean.md +0 -81
  199. package/.aether/commands/claude/dream.md +0 -268
  200. package/.aether/commands/claude/entomb.md +0 -498
  201. package/.aether/commands/claude/export-signals.md +0 -57
  202. package/.aether/commands/claude/feedback.md +0 -96
  203. package/.aether/commands/claude/flag.md +0 -151
  204. package/.aether/commands/claude/flags.md +0 -169
  205. package/.aether/commands/claude/focus.md +0 -76
  206. package/.aether/commands/claude/help.md +0 -154
  207. package/.aether/commands/claude/history.md +0 -140
  208. package/.aether/commands/claude/import-signals.md +0 -71
  209. package/.aether/commands/claude/init.md +0 -505
  210. package/.aether/commands/claude/insert-phase.md +0 -105
  211. package/.aether/commands/claude/interpret.md +0 -278
  212. package/.aether/commands/claude/lay-eggs.md +0 -210
  213. package/.aether/commands/claude/maturity.md +0 -113
  214. package/.aether/commands/claude/memory-details.md +0 -77
  215. package/.aether/commands/claude/migrate-state.md +0 -171
  216. package/.aether/commands/claude/oracle.md +0 -642
  217. package/.aether/commands/claude/organize.md +0 -232
  218. package/.aether/commands/claude/patrol.md +0 -620
  219. package/.aether/commands/claude/pause-colony.md +0 -233
  220. package/.aether/commands/claude/phase.md +0 -115
  221. package/.aether/commands/claude/pheromones.md +0 -156
  222. package/.aether/commands/claude/plan.md +0 -693
  223. package/.aether/commands/claude/preferences.md +0 -65
  224. package/.aether/commands/claude/quick.md +0 -100
  225. package/.aether/commands/claude/redirect.md +0 -76
  226. package/.aether/commands/claude/resume-colony.md +0 -197
  227. package/.aether/commands/claude/resume.md +0 -388
  228. package/.aether/commands/claude/run.md +0 -231
  229. package/.aether/commands/claude/seal.md +0 -774
  230. package/.aether/commands/claude/skill-create.md +0 -286
  231. package/.aether/commands/claude/status.md +0 -410
  232. package/.aether/commands/claude/swarm.md +0 -349
  233. package/.aether/commands/claude/tunnels.md +0 -426
  234. package/.aether/commands/claude/update.md +0 -132
  235. package/.aether/commands/claude/verify-castes.md +0 -143
  236. package/.aether/commands/claude/watch.md +0 -239
  237. package/.aether/commands/opencode/archaeology.md +0 -331
  238. package/.aether/commands/opencode/build.md +0 -1168
  239. package/.aether/commands/opencode/chaos.md +0 -329
  240. package/.aether/commands/opencode/colonize.md +0 -195
  241. package/.aether/commands/opencode/continue.md +0 -1436
  242. package/.aether/commands/opencode/council.md +0 -437
  243. package/.aether/commands/opencode/data-clean.md +0 -77
  244. package/.aether/commands/opencode/dream.md +0 -260
  245. package/.aether/commands/opencode/entomb.md +0 -377
  246. package/.aether/commands/opencode/export-signals.md +0 -54
  247. package/.aether/commands/opencode/feedback.md +0 -99
  248. package/.aether/commands/opencode/flag.md +0 -149
  249. package/.aether/commands/opencode/flags.md +0 -167
  250. package/.aether/commands/opencode/focus.md +0 -73
  251. package/.aether/commands/opencode/help.md +0 -157
  252. package/.aether/commands/opencode/history.md +0 -136
  253. package/.aether/commands/opencode/import-signals.md +0 -68
  254. package/.aether/commands/opencode/init.md +0 -518
  255. package/.aether/commands/opencode/insert-phase.md +0 -111
  256. package/.aether/commands/opencode/interpret.md +0 -272
  257. package/.aether/commands/opencode/lay-eggs.md +0 -213
  258. package/.aether/commands/opencode/maturity.md +0 -108
  259. package/.aether/commands/opencode/memory-details.md +0 -83
  260. package/.aether/commands/opencode/migrate-state.md +0 -165
  261. package/.aether/commands/opencode/oracle.md +0 -593
  262. package/.aether/commands/opencode/organize.md +0 -226
  263. package/.aether/commands/opencode/patrol.md +0 -626
  264. package/.aether/commands/opencode/pause-colony.md +0 -203
  265. package/.aether/commands/opencode/phase.md +0 -113
  266. package/.aether/commands/opencode/pheromones.md +0 -162
  267. package/.aether/commands/opencode/plan.md +0 -684
  268. package/.aether/commands/opencode/preferences.md +0 -71
  269. package/.aether/commands/opencode/quick.md +0 -91
  270. package/.aether/commands/opencode/redirect.md +0 -84
  271. package/.aether/commands/opencode/resume-colony.md +0 -190
  272. package/.aether/commands/opencode/resume.md +0 -394
  273. package/.aether/commands/opencode/run.md +0 -237
  274. package/.aether/commands/opencode/seal.md +0 -452
  275. package/.aether/commands/opencode/skill-create.md +0 -63
  276. package/.aether/commands/opencode/status.md +0 -307
  277. package/.aether/commands/opencode/swarm.md +0 -15
  278. package/.aether/commands/opencode/tunnels.md +0 -400
  279. package/.aether/commands/opencode/update.md +0 -127
  280. package/.aether/commands/opencode/verify-castes.md +0 -139
  281. package/.aether/commands/opencode/watch.md +0 -227
@@ -227,7 +227,7 @@ Colony status: /ant:status
227
227
  Run using the Bash tool with description "Logging dream activity...":
228
228
 
229
229
  ```bash
230
- bash .aether/aether-utils.sh activity-log "DREAM" "Dreamer" "Dream session: {N} observations, {concerns} concerns, {pheromones} pheromone suggestions"
230
+ aether activity-log "DREAM" "Dreamer" "Dream session: {N} observations, {concerns} concerns, {pheromones} pheromone suggestions"
231
231
  ```
232
232
 
233
233
 
@@ -236,7 +236,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
236
236
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
237
237
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
238
238
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
239
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
239
+ aether print-next-up
240
240
  ```
241
241
 
242
242
 
@@ -129,7 +129,7 @@ Before archiving, review wisdom proposals accumulated during this colony's lifec
129
129
 
130
130
  ```bash
131
131
  # Check for pending proposals
132
- proposals=$(bash .aether/aether-utils.sh learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
132
+ proposals=$(aether learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
133
133
  proposal_count=$(echo "$proposals" | jq '.proposals | length')
134
134
 
135
135
  if [[ "$proposal_count" -gt 0 ]]; then
@@ -143,7 +143,7 @@ if [[ "$proposal_count" -gt 0 ]]; then
143
143
  echo ""
144
144
 
145
145
  # Run approval workflow (blocking)
146
- bash .aether/aether-utils.sh learning-approve-proposals
146
+ aether learning-approve-proposals
147
147
 
148
148
  echo ""
149
149
  echo "Wisdom review complete. Proceeding with entombment..."
@@ -205,12 +205,12 @@ Verify QUEEN.md is initialized for wisdom storage:
205
205
  ```bash
206
206
  queen_file=".aether/QUEEN.md"
207
207
  if [[ ! -f "$queen_file" ]]; then
208
- init_result=$(bash .aether/aether-utils.sh queen-init 2>/dev/null || echo '{"ok":false}')
208
+ init_result=$(aether queen-init 2>/dev/null || echo '{"ok":false}')
209
209
  init_ok=$(echo "$init_result" | jq -r '.ok // false')
210
210
  if [[ "$init_ok" == "true" ]]; then
211
211
  created=$(echo "$init_result" | jq -r '.result.created // false')
212
212
  if [[ "$created" == "true" ]]; then
213
- bash .aether/aether-utils.sh activity-log "CREATED" "Queen" "Initialized QUEEN.md for wisdom storage"
213
+ aether activity-log "CREATED" "Queen" "Initialized QUEEN.md for wisdom storage"
214
214
  fi
215
215
  fi
216
216
  fi
@@ -248,7 +248,7 @@ version=$(jq -r '.version // "3.0"' .aether/data/COLONY_STATE.json)
248
248
 
249
249
  Create the chamber:
250
250
  ```bash
251
- bash .aether/aether-utils.sh chamber-create \
251
+ aether chamber-create \
252
252
  ".aether/chambers/$chamber_name" \
253
253
  ".aether/data/COLONY_STATE.json" \
254
254
  "$goal" \
@@ -298,7 +298,7 @@ Export combined XML archive to the chamber. This is a HARD REQUIREMENT — entom
298
298
 
299
299
  ```bash
300
300
  chamber_dir=".aether/chambers/$chamber_name"
301
- xml_result=$(bash .aether/aether-utils.sh colony-archive-xml "$chamber_dir/colony-archive.xml" 2>&1)
301
+ xml_result=$(aether colony-archive-xml --output "$chamber_dir/colony-archive.xml" 2>&1)
302
302
  xml_ok=$(echo "$xml_result" | jq -r '.ok // false' 2>/dev/null)
303
303
 
304
304
  if [[ "$xml_ok" != "true" ]]; then
@@ -326,7 +326,7 @@ xml_archive_line="XML Archive: colony-archive.xml (${xml_pheromone_count} signal
326
326
 
327
327
  Run verification:
328
328
  ```bash
329
- bash .aether/aether-utils.sh chamber-verify ".aether/chambers/$chamber_name"
329
+ aether chamber-verify --path ".aether/chambers/$chamber_name"
330
330
  ```
331
331
 
332
332
  If verification fails, display error and stop:
@@ -344,7 +344,7 @@ Stop here.
344
344
 
345
345
  Write colony summary to eternal memory:
346
346
  ```bash
347
- bash .aether/aether-utils.sh eternal-init # idempotent
347
+ aether eternal-init # idempotent
348
348
  eternal_file="$HOME/.aether/eternal/memory.json"
349
349
  if [[ -f "$eternal_file" ]]; then
350
350
  colony_entry=$(jq -n \
@@ -444,7 +444,7 @@ Write the result to .aether/HANDOFF.md using the Write tool.
444
444
  Display:
445
445
  ```
446
446
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
447
- C O L O N Y E N T O M B E D
447
+ ⚰️ C O L O N Y E N T O M B E D
448
448
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
449
449
 
450
450
  Entombed v{colony_version}
@@ -23,7 +23,7 @@ Parse `$ARGUMENTS`:
23
23
 
24
24
  Run using the Bash tool with description "Exporting pheromone signals to XML...":
25
25
  ```bash
26
- bash .aether/aether-utils.sh pheromone-export-xml "<output_path>"
26
+ aether pheromone-export-xml --output "<output_path>"
27
27
  ```
28
28
 
29
29
  Parse the returned JSON:
@@ -52,6 +52,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
52
52
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
53
53
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
54
54
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
55
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
55
+ aether print-next-up
56
56
  ```
57
57
 
@@ -32,7 +32,7 @@ If `goal: null` -> "No colony initialized.", stop.
32
32
 
33
33
  Run using the Bash tool with description "Recording colony feedback...":
34
34
  ```bash
35
- bash .aether/aether-utils.sh pheromone-write FEEDBACK "<content>" --strength 0.7 --reason "User feedback guidance" --ttl <ttl>
35
+ aether pheromone-write --type FEEDBACK --content "<content>" --strength 0.7 --reason "User feedback guidance" --ttl <ttl>
36
36
  ```
37
37
 
38
38
  **Create instinct from feedback:**
@@ -59,14 +59,14 @@ Write COLONY_STATE.json.
59
59
 
60
60
  Run using the Bash tool with description "Updating context document...":
61
61
  ```bash
62
- bash .aether/aether-utils.sh context-update constraint feedback "<content>" "user" 2>/dev/null || true
62
+ aether context-update --section constraint --key feedback --content "<content>" "user" 2>/dev/null || true
63
63
  ```
64
64
 
65
65
  ### Step 3: Get Active Counts
66
66
 
67
67
  Run using the Bash tool with description "Counting active signals...":
68
68
  ```bash
69
- bash .aether/aether-utils.sh pheromone-count
69
+ aether pheromone-count
70
70
  ```
71
71
 
72
72
  ### Step 4: Confirm
@@ -91,6 +91,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
91
91
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
92
92
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
93
93
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
94
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
94
+ aether print-next-up
95
95
  ```
96
96
 
@@ -51,7 +51,7 @@ Stop here.
51
51
 
52
52
  Run using the Bash tool with description "Raising colony flag...":
53
53
  ```bash
54
- bash .aether/aether-utils.sh flag-add "{type}" "{title}" "{description}" "manual" {phase_or_null}
54
+ aether flag-add --severity "{type}" --title "{title}" --description "{description}" --source "manual" --phase {phase_or_null}
55
55
  ```
56
56
 
57
57
  Parse the result for the flag ID.
@@ -135,7 +135,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
135
135
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
136
136
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
137
137
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
138
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
138
+ aether print-next-up
139
139
  ```
140
140
 
141
141
 
@@ -33,7 +33,7 @@ If `--resolve` was provided, run using the Bash tool with description "Resolving
33
33
 
34
34
 
35
35
  ```bash
36
- bash .aether/aether-utils.sh flag-resolve "{flag_id}" "{resolution_message}"
36
+ aether flag-resolve --id "{flag_id}" --message "{resolution_message}"
37
37
  ```
38
38
  Output:
39
39
  ```
@@ -48,7 +48,7 @@ If `--ack` was provided, run using the Bash tool with description "Acknowledging
48
48
 
49
49
 
50
50
  ```bash
51
- bash .aether/aether-utils.sh flag-acknowledge "{flag_id}"
51
+ aether flag-acknowledge --id "{flag_id}"
52
52
  ```
53
53
  Output:
54
54
  ```
@@ -65,7 +65,7 @@ Run using the Bash tool with description "Loading colony flags...":
65
65
 
66
66
 
67
67
  ```bash
68
- bash .aether/aether-utils.sh flag-list {options}
68
+ aether flag-list {options}
69
69
  ```
70
70
 
71
71
  Parse result for flags array.
@@ -145,7 +145,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
145
145
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
146
146
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
147
147
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
148
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
148
+ aether print-next-up
149
149
  ```
150
150
 
151
151
 
@@ -32,7 +32,7 @@ If `goal: null` -> "No colony initialized.", stop.
32
32
 
33
33
  Run using the Bash tool with description "Setting colony focus...":
34
34
  ```bash
35
- bash .aether/aether-utils.sh pheromone-write FOCUS "<content>" --strength 0.8 --reason "User directed colony attention" --ttl <ttl>
35
+ aether pheromone-write --type FOCUS --content "<content>" --strength 0.8 --reason "User directed colony attention" --ttl <ttl>
36
36
  ```
37
37
 
38
38
  Parse the returned JSON for the signal ID.
@@ -41,14 +41,14 @@ Parse the returned JSON for the signal ID.
41
41
 
42
42
  Run using the Bash tool with description "Updating context document...":
43
43
  ```bash
44
- bash .aether/aether-utils.sh context-update constraint focus "<content>" "user" 2>/dev/null || true
44
+ aether context-update --section constraint --key focus --content "<content>" "user" 2>/dev/null || true
45
45
  ```
46
46
 
47
47
  ### Step 3: Get Active Counts
48
48
 
49
49
  Run using the Bash tool with description "Counting active signals...":
50
50
  ```bash
51
- bash .aether/aether-utils.sh pheromone-count
51
+ aether pheromone-count
52
52
  ```
53
53
 
54
54
  ### Step 4: Confirm
@@ -71,6 +71,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
71
71
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
72
72
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
73
73
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
74
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
74
+ aether print-next-up
75
75
  ```
76
76
 
@@ -149,6 +149,6 @@ Generate the state-based Next Up block by Run using the Bash tool with descripti
149
149
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
150
150
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
151
151
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
152
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
152
+ aether print-next-up
153
153
  ```
154
154
 
@@ -135,6 +135,6 @@ Generate the state-based Next Up block using the Bash tool with description "Gen
135
135
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
136
136
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
137
137
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
138
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
138
+ aether print-next-up
139
139
  ```
140
140
 
@@ -36,7 +36,7 @@ Verify the XML file exists. If not -> "File not found: <path>", stop.
36
36
 
37
37
  Run using the Bash tool with description "Importing pheromone signals from XML...":
38
38
  ```bash
39
- bash .aether/aether-utils.sh pheromone-import-xml "<xml_path>" "<colony_prefix>"
39
+ aether pheromone-import-xml --input "<xml_path>" --colony "<colony_prefix>"
40
40
  ```
41
41
 
42
42
  Parse the returned JSON:
@@ -66,6 +66,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
66
66
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
67
67
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
68
68
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
69
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
69
+ aether print-next-up
70
70
  ```
71
71
 
@@ -41,7 +41,6 @@ Do not touch during init:
41
41
  - .aether/dreams/ (user notes)
42
42
  - .aether/chambers/ (archived colonies)
43
43
  - .env* files
44
- - .claude/settings.json
45
44
  - .github/workflows/
46
45
  </read_only>
47
46
 
@@ -90,7 +89,7 @@ Stop here. Do not proceed.
90
89
 
91
90
  Run using the Bash tool with description "Initializing QUEEN.md...":
92
91
  ```
93
- bash .aether/aether-utils.sh queen-init
92
+ aether queen-init
94
93
  ```
95
94
 
96
95
  Parse the JSON result:
@@ -103,7 +102,7 @@ This step is non-blocking -- proceed regardless of outcome.
103
102
 
104
103
  Run the scan via Bash tool:
105
104
  ```bash
106
- scan_result=$(bash .aether/aether-utils.sh init-research 2>/dev/null)
105
+ scan_result=$(aether init-research 2>/dev/null)
107
106
  scan_data=$(echo "$scan_result" | jq '.result')
108
107
  ```
109
108
 
@@ -156,7 +155,7 @@ Strip `(Colony: ...)` suffixes using sed. If grep finds nothing, variables remai
156
155
  Display a brief header:
157
156
  ```
158
157
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
159
- A E T H E R C O L O N Y I N I T
158
+ 🥚 A E T H E R C O L O N Y I N I T
160
159
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
161
160
  ```
162
161
 
@@ -274,14 +273,14 @@ Only reached after user approval. ALL file writes happen here.
274
273
 
275
274
  1. Write charter content via:
276
275
  ```bash
277
- bash .aether/aether-utils.sh charter-write --intent "{approved_intent}" --vision "{approved_vision}" --governance "{approved_governance}" --goals "{approved_goals}"
276
+ aether charter-write --intent "{approved_intent}" --vision "{approved_vision}" --governance "{approved_governance}" --goals "{approved_goals}"
278
277
  ```
279
278
 
280
279
  2. Auto-apply approved pheromone suggestions (see pheromone auto-apply below).
281
280
 
282
281
  3. Update the goal field in COLONY_STATE.json in-place using the state API:
283
282
  ```bash
284
- bash .aether/aether-utils.sh state-write "$(jq --arg new_goal "{approved_intent}" '.goal = $new_goal' .aether/data/COLONY_STATE.json)"
283
+ aether state-write "$(jq --arg new_goal "{approved_intent}" '.goal = $new_goal' .aether/data/COLONY_STATE.json)"
285
284
  ```
286
285
 
287
286
  4. **Verify the write** — read back and confirm goal is set:
@@ -299,7 +298,7 @@ if [[ "$verify_goal" == "null" || -z "$verify_goal" ]]; then
299
298
  fi
300
299
  ```
301
300
 
302
- 5. Run `bash .aether/aether-utils.sh session-init "$(jq -r '.session_id' .aether/data/COLONY_STATE.json)" "{approved_intent}"`
301
+ 5. Run `aether session-init "$(jq -r '.session_id' .aether/data/COLONY_STATE.json)" "{approved_intent}"`
303
302
 
304
303
  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.
305
304
 
@@ -357,12 +356,12 @@ for template in pheromones midden learning-observations; do
357
356
  done
358
357
  ```
359
358
 
360
- 8. Run `bash .aether/aether-utils.sh context-update init "{approved_intent}"`
361
- 9. Run `bash .aether/aether-utils.sh validate-state colony`
359
+ 8. Run `aether context-update init "{approved_intent}"`
360
+ 9. Run `aether validate-state colony`
362
361
  10. Register repo (silent on failure):
363
362
  ```bash
364
- domain_tags=$(bash .aether/aether-utils.sh domain-detect 2>/dev/null | jq -r '.result.tags // ""' || echo "")
365
- 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
363
+ domain_tags=$(aether domain-detect 2>/dev/null | jq -r '.result.tags // ""' || echo "")
364
+ aether registry-add --path "$(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
366
365
  cp ~/.aether/version.json .aether/version.json 2>/dev/null || true
367
366
  ```
368
367
  11. Seed QUEEN.md from hive (non-blocking):
@@ -372,10 +371,10 @@ domain_tags=$(jq -r --arg repo "$(pwd)" \
372
371
  "$HOME/.aether/registry.json" 2>/dev/null || echo "")
373
372
  seed_args="queen-seed-from-hive --limit 5"
374
373
  [[ -n "$domain_tags" ]] && seed_args="$seed_args --domain $domain_tags"
375
- seed_result=$(bash .aether/aether-utils.sh $seed_args 2>/dev/null || echo '{}')
374
+ seed_result=$(aether $seed_args 2>/dev/null || echo '{}')
376
375
  seeded_count=$(echo "$seed_result" | jq -r '.result.seeded // 0' 2>/dev/null || echo "0")
377
376
  ```
378
- 12. Run `bash .aether/aether-utils.sh session-init "{session_id}" "{approved_intent}"`
377
+ 12. Run `aether session-init "{session_id}" "{approved_intent}"`
379
378
 
380
379
  **Pheromone auto-apply (referenced by both re-init and fresh init paths above):**
381
380
 
@@ -383,7 +382,7 @@ If approved pheromone suggestions exist (the user kept them in the prompt and di
383
382
 
384
383
  For each approved pheromone suggestion, call:
385
384
  ```bash
386
- bash .aether/aether-utils.sh pheromone-write "{type}" '{content}' --source "system:init" --reason '{reason}' --ttl "30d" 2>/dev/null || true
385
+ aether pheromone-write "{type}" '{content}' --source "system:init" --reason '{reason}' --ttl "30d" 2>/dev/null || true
387
386
  ```
388
387
 
389
388
  Implementation notes:
@@ -441,21 +440,21 @@ Import ALL available data types (per D-09 -- no cherry-picking):
441
440
  ```bash
442
441
  # Import pheromones (per D-09)
443
442
  if [[ -f "$latest_chamber/pheromones.xml" ]]; then
444
- pher_import=$(bash .aether/aether-utils.sh pheromone-import-xml "$latest_chamber/pheromones.xml" "imported" 2>/dev/null || echo '{"ok":false}')
443
+ pher_import=$(aether pheromone-import-xml --input "$latest_chamber/pheromones.xml" --colony "imported" 2>/dev/null || echo '{"ok":false}')
445
444
  pher_imported=$(echo "$pher_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
446
445
  echo "Pheromones: ${pher_imported} signal(s) imported"
447
446
  fi
448
447
 
449
448
  # Import wisdom to queen-wisdom.json (per D-09)
450
449
  if [[ -f "$latest_chamber/queen-wisdom.xml" ]]; then
451
- wis_import=$(bash .aether/aether-utils.sh wisdom-import-xml "$latest_chamber/queen-wisdom.xml" ".aether/data/queen-wisdom.json" 2>/dev/null || echo '{"ok":false}')
450
+ wis_import=$(aether wisdom-import-xml "$latest_chamber/queen-wisdom.xml" ".aether/data/queen-wisdom.json" 2>/dev/null || echo '{"ok":false}')
452
451
  wis_imported=$(echo "$wis_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
453
452
  echo "Wisdom: ${wis_imported} entries(s) imported to queen-wisdom.json"
454
453
  fi
455
454
 
456
455
  # Import registry lineage (per D-09)
457
456
  if [[ -f "$latest_chamber/colony-registry.xml" ]]; then
458
- reg_import=$(bash .aether/aether-utils.sh registry-import-xml "$latest_chamber/colony-registry.xml" 2>/dev/null || echo '{"ok":false}')
457
+ reg_import=$(aether registry-import-xml "$latest_chamber/colony-registry.xml" 2>/dev/null || echo '{"ok":false}')
459
458
  reg_imported=$(echo "$reg_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
460
459
  echo "Registry: ${reg_imported} colon(ies) lineage imported"
461
460
  fi
@@ -470,30 +469,48 @@ Display "Import skipped. Starting fresh colony." and proceed to Step 8.
470
469
  **If xml_import_available is false (no chambers, no XML, or no xmllint):**
471
470
 
472
471
  Skip silently -- proceed directly to Step 8 without any mention of import (per D-11).
472
+ ### Step 7.5: Install Clash Detection Hook
473
+
474
+ If `.aether/utils/clash-detect.sh` exists, run:
475
+
476
+ ```bash
477
+ aether clash-setup --install 2>/dev/null || true
478
+ ```
479
+
480
+ This installs the PreToolUse hook that prevents conflicting edits across worktrees.
481
+ Non-blocking — if it fails, init continues normally.
482
+
483
+ Also configure the merge driver for package-lock.json:
484
+
485
+ ```bash
486
+ git config merge.lockfile.driver "bash .aether/utils/merge-driver-lockfile.sh %O %A %B" 2>/dev/null || true
487
+ git config merge.lockfile.name "npm lockfile auto-merge" 2>/dev/null || true
488
+ ```
489
+
473
490
  ### Step 8: Display Result
474
491
 
475
492
  Display the success header and result block:
476
493
 
477
494
  ```
478
495
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
479
- A E T H E R C O L O N Y
496
+ 🥚 A E T H E R C O L O N Y
480
497
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
481
498
 
482
- Queen has set the colony's intention
499
+ 👑 Queen has set the colony's intention
483
500
 
484
501
  "{approved_intent}"
485
502
 
486
- Colony Status: READY
503
+ 🟢 Colony Status: READY
487
504
 
488
- {If re-init: " Mode: Re-init (charter updated, state preserved)"}
489
- {If fresh and seeded_count > 0: " Hive wisdom: {seeded_count} cross-colony pattern(s) seeded into QUEEN.md"}
505
+ {If re-init: " 🔄 Mode: Re-init (charter updated, state preserved)"}
506
+ {If fresh and seeded_count > 0: " 🧠 Hive wisdom: {seeded_count} cross-colony pattern(s) seeded into QUEEN.md"}
490
507
 
491
- State persisted -- safe to /clear, then run /ant:plan
508
+ 💾 State persisted -- safe to /clear, then run /ant:plan
492
509
 
493
510
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
494
- Next Up
511
+ 🐜 Next Up
495
512
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
496
- /ant:plan Generate execution plan
497
- /ant:status Check colony state
498
- /ant:focus Set initial focus
513
+ /ant:plan 📊 Generate execution plan
514
+ /ant:status 📋 Check colony state
515
+ /ant:focus 🎯 Set initial focus
499
516
  ```
@@ -70,7 +70,7 @@ Example:
70
70
  Run using the Bash tool with description "Inserting corrective phase...":
71
71
 
72
72
  ```bash
73
- bash .aether/aether-utils.sh phase-insert "<phase_name>" "<goal_text>" "<constraints_text>"
73
+ aether phase-insert --name "<phase_name>" --goal "<goal_text>" --constraints "<constraints_text>"
74
74
  ```
75
75
 
76
76
  Parse JSON result:
@@ -229,7 +229,7 @@ Wait for user response.
229
229
  Run using the Bash tool with description "Logging interpretation activity...":
230
230
 
231
231
  ```bash
232
- bash .aether/aether-utils.sh activity-log "INTERPRET" "Interpreter" "Dream review: {dream_file}, {confirmed} confirmed, {partial} partial, {unconfirmed} unconfirmed, {refuted} refuted, {actions_taken} actions taken"
232
+ aether activity-log "INTERPRET" "Interpreter" "Dream review: {dream_file}, {confirmed} confirmed, {partial} partial, {unconfirmed} unconfirmed, {refuted} refuted, {actions_taken} actions taken"
233
233
  ```
234
234
 
235
235
  ### Step 8: Display Closing
@@ -261,7 +261,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
261
261
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
262
262
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
263
263
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
264
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
264
+ aether print-next-up
265
265
  ```
266
266
 
267
267
 
@@ -142,7 +142,7 @@ echo "System files copied."
142
142
 
143
143
  Run using the Bash tool with description "Initializing QUEEN.md...":
144
144
  ```bash
145
- bash .aether/aether-utils.sh queen-init
145
+ aether queen-init
146
146
  ```
147
147
 
148
148
 
@@ -160,7 +160,7 @@ Run using the Bash tool with description "Registering repo..." (ignore errors):
160
160
 
161
161
 
162
162
  ```bash
163
- bash .aether/aether-utils.sh registry-add "$(pwd)" "$(jq -r '.version // "unknown"' ~/.aether/version.json 2>/dev/null || echo 'unknown')" 2>/dev/null || true
163
+ aether registry-add --path "$(pwd)" "$(jq -r '.version // "unknown"' ~/.aether/version.json 2>/dev/null || echo 'unknown')" 2>/dev/null || true
164
164
  ```
165
165
 
166
166
  ### Step 7: Verify Setup
@@ -11,7 +11,7 @@ You are the **Queen**. Display the colony's maturity journey.
11
11
  ### Step 1: Detect Current Milestone
12
12
 
13
13
  Run using the Bash tool with description "Detecting colony milestone...":
14
- `bash .aether/aether-utils.sh milestone-detect`
14
+ `aether milestone-detect`
15
15
 
16
16
  Parse JSON result to get:
17
17
  - `milestone`: Current milestone name (First Mound, Open Chambers, Brood Stable, Ventilated Nest, Sealed Chambers, Crowned Anthill)
@@ -108,6 +108,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
108
108
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
109
109
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
110
110
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
111
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
111
+ aether print-next-up
112
112
  ```
113
113
 
@@ -20,7 +20,7 @@ Drill-down view of accumulated colony wisdom, pending promotions, and recent fai
20
20
 
21
21
  Run using the Bash tool with description "Loading colony memory...":
22
22
  ```bash
23
- bash .aether/aether-utils.sh memory-metrics
23
+ aether memory-metrics
24
24
  ```
25
25
 
26
26
  ### Step 2: Display Wisdom (from QUEEN.md)
@@ -166,6 +166,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
166
166
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
167
167
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
168
168
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
169
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
169
+ aether print-next-up
170
170
  ```
171
171