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
@@ -74,7 +74,7 @@ Update COLONY_STATE.json:
74
74
 
75
75
  if [[ "$patterns_count" -eq 0 ]]; then
76
76
  # Builder skipped learning output -- fire deterministic fallback
77
- fallback_result=$(bash .aether/aether-utils.sh learning-extract-fallback 2>/dev/null || echo '{"learnings":[],"count":0}')
77
+ fallback_result=$(aether learning-extract-fallback 2>/dev/null || echo '{"learnings":[],"count":0}')
78
78
  fallback_count=$(echo "$fallback_result" | jq '.result.count // 0')
79
79
  fi
80
80
 
@@ -92,7 +92,7 @@ Update COLONY_STATE.json:
92
92
 
93
93
  Run using the Bash tool with description "Recording learning observations...":
94
94
  ```bash
95
- colony_name=$(bash .aether/aether-utils.sh colony-name 2>/dev/null | jq -r '.result.name // ""')
95
+ colony_name=$(aether colony-name 2>/dev/null | jq -r '.result.name // ""')
96
96
  [[ -z "$colony_name" ]] && colony_name="unknown"
97
97
 
98
98
  # Get learnings from the current phase
@@ -101,7 +101,7 @@ Update COLONY_STATE.json:
101
101
  if [[ -n "$current_phase_learnings" ]]; then
102
102
  echo "$current_phase_learnings" | jq -r '.learnings[]?.claim // empty' 2>/dev/null | while read -r claim; do
103
103
  if [[ -n "$claim" ]]; then
104
- bash .aether/aether-utils.sh memory-capture "learning" "$claim" "pattern" "worker:continue" 2>/dev/null || true
104
+ aether memory-capture "learning" "$claim" "pattern" "worker:continue" 2>/dev/null || true
105
105
  fi
106
106
  done
107
107
  echo "Recorded observations for threshold tracking"
@@ -123,7 +123,7 @@ Update COLONY_STATE.json:
123
123
 
124
124
  Run using the Bash tool with description "Creating instinct from pattern...":
125
125
  ```bash
126
- bash .aether/aether-utils.sh instinct-create \
126
+ aether instinct-create \
127
127
  --trigger "<when this situation arises>" \
128
128
  --action "<what worked or should be done>" \
129
129
  --confidence <0.7-0.9 based on evidence strength> \
@@ -147,7 +147,7 @@ Update COLONY_STATE.json:
147
147
 
148
148
  Run using the Bash tool with description "Checking midden for error patterns...":
149
149
  ```bash
150
- midden_result=$(bash .aether/aether-utils.sh midden-recent-failures 10 2>/dev/null || echo '{"count":0,"failures":[]}')
150
+ midden_result=$(aether midden-recent-failures 10 2>/dev/null || echo '{"count":0,"failures":[]}')
151
151
  midden_count=$(echo "$midden_result" | jq '.count // 0')
152
152
  ```
153
153
 
@@ -155,7 +155,7 @@ Update COLONY_STATE.json:
155
155
 
156
156
  Run using the Bash tool with description "Creating instinct from error pattern...":
157
157
  ```bash
158
- bash .aether/aether-utils.sh instinct-create \
158
+ aether instinct-create \
159
159
  --trigger "<when this error condition arises>" \
160
160
  --action "<how to avoid or handle this error>" \
161
161
  --confidence 0.8 \
@@ -173,7 +173,7 @@ Update COLONY_STATE.json:
173
173
 
174
174
  Run using the Bash tool with description "Creating instinct from success pattern...":
175
175
  ```bash
176
- bash .aether/aether-utils.sh instinct-create \
176
+ aether instinct-create \
177
177
  --trigger "<when this type of task arises>" \
178
178
  --action "<the approach that worked well>" \
179
179
  --confidence 0.7 \ # Base value; increase if observation_count > 1 per formula
@@ -203,7 +203,7 @@ Update COLONY_STATE.json:
203
203
  domain=$(echo "$encoded" | base64 -d | jq -r '.domain // "workflow"')
204
204
 
205
205
  # queen-promote-instinct handles dedup internally (skips if already in QUEEN.md)
206
- result=$(bash .aether/aether-utils.sh queen-promote-instinct \
206
+ result=$(aether queen-promote-instinct \
207
207
  "$trigger" "$action" "$confidence" "$domain" 2>/dev/null || echo '{"ok":false}')
208
208
 
209
209
  was_promoted=$(echo "$result" | jq -r '.result.promoted // false' 2>/dev/null || echo "false")
@@ -260,7 +260,7 @@ Update COLONY_STATE.json:
260
260
  [[ -n "$repo_domain_tags" ]] && promote_args+=(--domain "$repo_domain_tags")
261
261
 
262
262
  # Call hive-promote which orchestrates abstract + store
263
- result=$(bash .aether/aether-utils.sh "${promote_args[@]}" 2>/dev/null || echo '{}')
263
+ result=$(aether "${promote_args[@]}" 2>/dev/null || echo '{}')
264
264
  was_promoted=$(echo "$result" | jq -r '.result.action // "skipped"' 2>/dev/null || echo "skipped")
265
265
 
266
266
  if [[ "$was_promoted" == "promoted" || "$was_promoted" == "merged" ]]; then
@@ -303,15 +303,15 @@ Write the updated state through targeted `state-mutate` calls. Each call acquire
303
303
  Run using the Bash tool with description "Advancing colony state...":
304
304
  ```bash
305
305
  # Mark current phase completed
306
- bash .aether/aether-utils.sh state-mutate --argjson pid "$current_phase" \
306
+ aether state-mutate --argjson pid "$current_phase" \
307
307
  '.plan.phases |= map(if .id == $pid then .status = "completed" else . end)'
308
308
 
309
309
  # Append learning (if any — skip if no learnings were extracted in Step 2)
310
- # bash .aether/aether-utils.sh state-mutate --argjson learning "$learning_json" \
310
+ # aether state-mutate --argjson learning "$learning_json" \
311
311
  # '.memory.phase_learnings += [$learning]'
312
312
 
313
313
  # Advance to next phase
314
- bash .aether/aether-utils.sh state-mutate \
314
+ aether state-mutate \
315
315
  --argjson pid "$current_phase" \
316
316
  --argjson next "$next_phase" \
317
317
  --arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
@@ -321,12 +321,45 @@ bash .aether/aether-utils.sh state-mutate \
321
321
  Run using the Bash tool with description "Enforcing memory caps...":
322
322
  ```bash
323
323
  # Cap enforcement — keep arrays bounded
324
- bash .aether/aether-utils.sh state-mutate \
324
+ aether state-mutate \
325
325
  '.memory.phase_learnings = (.memory.phase_learnings[-20:]) | .memory.decisions = (.memory.decisions[-30:]) | .memory.instincts = (.memory.instincts | sort_by(.confidence) | .[-30:]) | .events = (.events[-100:])'
326
326
  ```
327
327
 
328
328
  Validate the state file:
329
- Run using the Bash tool with description "Validating colony state...": `bash .aether/aether-utils.sh validate-state colony`
329
+ Run using the Bash tool with description "Validating colony state...": `aether validate-state colony`
330
+
331
+ ### Step 2.0.4: Worktree Merge-Back (NON-BLOCKING)
332
+
333
+ After state update, check for any completed worktree branches from the build wave and merge them back to the target branch.
334
+
335
+ Run using the Bash tool with description "Checking for worktree branches to merge...":
336
+ ```bash
337
+ # List worktree branches created during this build
338
+ branches=$(git -C "$AETHER_ROOT" worktree list --porcelain 2>/dev/null \
339
+ | grep "worktree-agent-\|worktree-" \
340
+ | awk '{print $NF}' || echo "")
341
+
342
+ last_merged_branch=""
343
+ last_merge_sha=""
344
+ merged_count=0
345
+
346
+ for branch in $branches; do
347
+ [[ -z "$branch" ]] && continue
348
+ result=$(aether worktree-merge --branch "$branch" 2>/dev/null || echo '{"ok":false}')
349
+ ok=$(echo "$result" | jq -r '.ok // false')
350
+ if [[ "$ok" == "true" ]]; then
351
+ last_merged_branch="$branch"
352
+ last_merge_sha=$(echo "$result" | jq -r '.result.sha // ""')
353
+ merged_count=$((merged_count + 1))
354
+ fi
355
+ done
356
+
357
+ if [[ "$merged_count" -gt 0 ]]; then
358
+ echo "Merged $merged_count worktree branch(es). Last: $last_merged_branch ($last_merge_sha)"
359
+ fi
360
+ ```
361
+
362
+ This step sets `$last_merged_branch` and `$last_merge_sha` which activates the existing dead code paths in Steps 2.0.5 and 2.0.6.
330
363
 
331
364
  ### Step 2.0.5: Pheromone Merge-Back (SILENT, NON-BLOCKING)
332
365
 
@@ -337,7 +370,7 @@ Run using the Bash tool with description "Checking for pheromone merge-back file
337
370
  # Check if a branch pheromone export was merged into main
338
371
  export_file=".aether/exchange/pheromone-branch-export.json"
339
372
  if [[ -f "$export_file" ]]; then
340
- merge_result=$(bash .aether/aether-utils.sh pheromone-merge-back --export-file "$export_file" 2>/dev/null || echo '{"ok":false}')
373
+ merge_result=$(aether pheromone-merge-back --export-file "$export_file" 2>/dev/null || echo '{"ok":false}')
341
374
  merge_ok=$(echo "$merge_result" | jq -r '.ok // false' 2>/dev/null)
342
375
  if [[ "$merge_ok" == "true" ]]; then
343
376
  new_count=$(echo "$merge_result" | jq -r '.result.new_signals_written // 0' 2>/dev/null)
@@ -370,7 +403,7 @@ last_merge_branch="${last_merged_branch:-}"
370
403
  last_merge_sha="${last_merge_sha:-}"
371
404
 
372
405
  if [[ -n "$last_merge_branch" && -n "$last_merge_sha" ]]; then
373
- collect_result=$(bash .aether/aether-utils.sh midden-collect \
406
+ collect_result=$(aether midden-collect \
374
407
  --branch "$last_merge_branch" --merge-sha "$last_merge_sha" \
375
408
  2>/dev/null || echo '{"ok":false}')
376
409
  collect_ok=$(echo "$collect_result" | jq -r '.ok // false' 2>/dev/null)
@@ -394,7 +427,7 @@ After midden collection (Step 2.0.6), run cross-PR analysis to detect systemic f
394
427
 
395
428
  Run using the Bash tool with description "Running cross-PR midden analysis...":
396
429
  ```bash
397
- analysis_result=$(bash .aether/aether-utils.sh midden-cross-pr-analysis --window 14 \
430
+ analysis_result=$(aether midden-cross-pr-analysis --window 14 \
398
431
  2>/dev/null || echo '{"ok":false}')
399
432
  analysis_ok=$(echo "$analysis_result" | jq -r '.ok // false' 2>/dev/null)
400
433
  if [[ "$analysis_ok" == "true" ]]; then
@@ -426,7 +459,7 @@ After learning extraction completes in Step 2, auto-emit a FEEDBACK signal summa
426
459
  phase_feedback="Phase $phase_id ($phase_name) completed. Key patterns: {brief summary of 1-3 learnings from Step 2}"
427
460
  # Fallback if no learnings: "Phase $phase_id ($phase_name) completed without notable patterns."
428
461
 
429
- bash .aether/aether-utils.sh pheromone-write FEEDBACK "$phase_feedback" \
462
+ aether pheromone-write FEEDBACK "$phase_feedback" \
430
463
  --strength 0.6 \
431
464
  --source "worker:continue" \
432
465
  --reason "Auto-emitted on phase advance: captures what worked and what was learned" \
@@ -462,7 +495,7 @@ if [[ -n "$decisions" ]]; then
462
495
  [.signals[] | select(.active == true and (.source == "auto:decision" or .source == "system:decision") and (.content.text | contains($text)))] | length
463
496
  ' .aether/data/pheromones.json 2>/dev/null || echo "0")
464
497
  if [[ "$existing" == "0" ]]; then
465
- bash .aether/aether-utils.sh pheromone-write FEEDBACK \
498
+ aether pheromone-write FEEDBACK \
466
499
  "[decision] $dec" \
467
500
  --strength 0.6 \
468
501
  --source "auto:decision" \
@@ -481,7 +514,7 @@ Strength is 0.6 (auto-emitted = lower than user-emitted). Source is `"auto:decis
481
514
  Query the actual failure store (`midden.json`) for recurring error categories. Categories with 3+ occurrences indicate persistent issues that should steer workers away from known failure modes.
482
515
 
483
516
  ```bash
484
- midden_result=$(bash .aether/aether-utils.sh midden-recent-failures 50 2>/dev/null || echo '{"count":0,"failures":[]}')
517
+ midden_result=$(aether midden-recent-failures 50 2>/dev/null || echo '{"count":0,"failures":[]}')
485
518
  midden_count=$(echo "$midden_result" | jq '.count // 0')
486
519
 
487
520
  if [[ "$midden_count" -gt 0 ]]; then
@@ -508,7 +541,7 @@ if [[ "$midden_count" -gt 0 ]]; then
508
541
  ' .aether/data/pheromones.json 2>/dev/null || echo "0")
509
542
 
510
543
  if [[ "$existing" == "0" ]]; then
511
- bash .aether/aether-utils.sh pheromone-write REDIRECT \
544
+ aether pheromone-write REDIRECT \
512
545
  "[error-pattern] Category \"$category\" recurring ($count occurrences)" \
513
546
  --strength 0.7 \
514
547
  --source "auto:error" \
@@ -517,7 +550,7 @@ if [[ "$midden_count" -gt 0 ]]; then
517
550
  emit_count=$((emit_count + 1))
518
551
 
519
552
  # Capture as resolution candidate for promotion tracking
520
- bash .aether/aether-utils.sh memory-capture \
553
+ aether memory-capture \
521
554
  "resolution" \
522
555
  "Recurring error pattern: $category ($count occurrences)" \
523
556
  "pattern" \
@@ -564,7 +597,7 @@ for encoded in $recurring_criteria; do
564
597
  ' .aether/data/pheromones.json 2>/dev/null || echo "0")
565
598
 
566
599
  if [[ "$existing" == "0" ]]; then
567
- bash .aether/aether-utils.sh pheromone-write FEEDBACK \
600
+ aether pheromone-write FEEDBACK \
568
601
  "[success-pattern] \"$text\" recurs across phases $phases" \
569
602
  --strength 0.6 \
570
603
  --source "auto:success" \
@@ -580,7 +613,7 @@ Strength is 0.6 (auto-emitted). Source is `"auto:success"`. Cap: max 2 success c
580
613
 
581
614
  After auto-emission, expire all signals with `expires_at == "phase_end"`. The FEEDBACK from 2.1a uses a 30d TTL and is not affected by this step.
582
615
 
583
- Run using the Bash tool with description "Maintaining pheromone memory...": `bash .aether/aether-utils.sh pheromone-expire --phase-end-only 2>/dev/null && bash .aether/aether-utils.sh eternal-init 2>/dev/null`
616
+ Run using the Bash tool with description "Maintaining pheromone memory...": `aether pheromone-expire --phase-end-only 2>/dev/null && aether eternal-init 2>/dev/null`
584
617
 
585
618
  This is idempotent — runs every time continue fires but only creates the directory/file once.
586
619
 
@@ -594,7 +627,7 @@ If `$ARGUMENTS` contains `--deferred`:
594
627
  ```bash
595
628
  if [[ "$ARGUMENTS" == *"--deferred"* ]] && [[ -f .aether/data/learning-deferred.json ]]; then
596
629
  echo "📦 Reviewing deferred proposals..."
597
- bash .aether/aether-utils.sh learning-approve-proposals --deferred ${verbose:+--verbose}
630
+ aether learning-approve-proposals --deferred ${verbose:+--verbose}
598
631
  fi
599
632
  ```
600
633
 
@@ -602,7 +635,7 @@ fi
602
635
 
603
636
  1. **Check for proposals:**
604
637
  ```bash
605
- proposals=$(bash .aether/aether-utils.sh learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
638
+ proposals=$(aether learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
606
639
  proposal_count=$(echo "$proposals" | jq '.proposals | length')
607
640
  ```
608
641
 
@@ -614,7 +647,7 @@ fi
614
647
  if [[ "$proposal_count" -gt 0 ]]; then
615
648
  verbose_flag=""
616
649
  [[ "$ARGUMENTS" == *"--verbose"* ]] && verbose_flag="--verbose"
617
- bash .aether/aether-utils.sh learning-approve-proposals $verbose_flag
650
+ aether learning-approve-proposals $verbose_flag
618
651
  fi
619
652
  # If no proposals, silently skip without notice (per user decision)
620
653
  ```
@@ -20,7 +20,7 @@ if [[ -f "$obs_file" ]]; then
20
20
  colony=$(echo "$encoded" | base64 -d | jq -r '.colonies[0] // "unknown"')
21
21
  [[ -z "$content" ]] && continue
22
22
 
23
- result=$(bash .aether/aether-utils.sh learning-promote-auto "$wisdom_type" "$content" "$colony" "learning" 2>/dev/null || echo '{}')
23
+ result=$(aether learning-promote-auto "$wisdom_type" "$content" "$colony" "learning" 2>/dev/null || echo '{}')
24
24
  was_promoted=$(echo "$result" | jq -r '.result.promoted // false' 2>/dev/null || echo "false")
25
25
  if [[ "$was_promoted" == "true" ]]; then
26
26
  promoted_count=$((promoted_count + 1))
@@ -63,7 +63,7 @@ learnings_count=$(echo "$learnings_json" | jq 'length' 2>/dev/null || echo "0")
63
63
  if [[ "$learnings_count" -gt 0 ]] && [[ "$learnings_json" != "[]" ]]; then
64
64
  prev_phase=$((current_phase - 1))
65
65
  queen_error="false"
66
- result=$(bash .aether/aether-utils.sh queen-write-learnings \
66
+ result=$(aether queen-write-learnings \
67
67
  "$prev_phase" "$phase_name" "$learnings_json" 2>/dev/null || echo '{"ok":false}')
68
68
  [[ "$result" == '{"ok":false}' ]] && queen_error="true"
69
69
 
@@ -170,7 +170,7 @@ If no `CHANGELOG.md` exists, `changelog-append` creates one automatically.
170
170
  **Step 2.3.1: Collect plan data**
171
171
 
172
172
  ```bash
173
- bash .aether/aether-utils.sh changelog-collect-plan-data "{phase_identifier}" "{plan_number}"
173
+ aether changelog-collect-plan-data "{phase_identifier}" "{plan_number}"
174
174
  ```
175
175
 
176
176
  Parse the returned JSON to extract `files`, `decisions`, `worked`, and `requirements` arrays.
@@ -186,7 +186,7 @@ If the command fails (e.g., no plan file found), fall back to collecting data ma
186
186
  **Step 2.3.2: Append changelog entry**
187
187
 
188
188
  ```bash
189
- bash .aether/aether-utils.sh changelog-append \
189
+ aether changelog-append \
190
190
  "$(date +%Y-%m-%d)" \
191
191
  "{phase_identifier}" \
192
192
  "{plan_number}" \
@@ -227,7 +227,7 @@ Store this as `ai_description` for the commit message.
227
227
  #### Step 2.4.2: Generate Enhanced Commit Message
228
228
 
229
229
  ```bash
230
- bash .aether/aether-utils.sh generate-commit-message "contextual" {phase_id} "{phase_name}" "{ai_description}" {plan_number}
230
+ aether generate-commit-message "contextual" {phase_id} "{phase_name}" "{ai_description}" {plan_number}
231
231
  ```
232
232
 
233
233
  Parse the returned JSON to extract:
@@ -342,18 +342,18 @@ After phase advancement is complete, update `.aether/CONTEXT.md`:
342
342
 
343
343
  **Log the activity:**
344
344
  ```bash
345
- bash .aether/aether-utils.sh context-update activity "continue" "Phase {prev_id} completed, advanced to {next_id}" "—"
345
+ aether context-update activity "continue" "Phase {prev_id} completed, advanced to {next_id}" "—"
346
346
  ```
347
347
 
348
348
  **Update the phase:**
349
349
  ```bash
350
- bash .aether/aether-utils.sh context-update update-phase {next_id} "{next_phase_name}" "YES" "Phase advanced, ready to build"
350
+ aether context-update update-phase {next_id} "{next_phase_name}" "YES" "Phase advanced, ready to build"
351
351
  ```
352
352
 
353
353
  **Log any decisions from this session:**
354
354
  If any architectural decisions were made during verification, also run:
355
355
  ```bash
356
- bash .aether/aether-utils.sh context-update decision "{decision_description}" "{rationale}" "Queen"
356
+ aether context-update decision "{decision_description}" "{rationale}" "Queen"
357
357
  ```
358
358
 
359
359
  ### Step 2.7: Project Completion
@@ -394,7 +394,7 @@ Output:
394
394
 
395
395
  ```
396
396
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
397
- P H A S E A D V A N C E M E N T
397
+ ➡️ P H A S E A D V A N C E M E N T
398
398
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
399
399
 
400
400
  ✅ Phase {prev_id}: {prev_name} -- COMPLETED
@@ -441,7 +441,21 @@ Output:
441
441
  Update the session tracking file to enable `/ant:resume` after context clear:
442
442
 
443
443
  ```bash
444
- bash .aether/aether-utils.sh session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"
444
+ aether session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"
445
445
  ```
446
446
 
447
- Run using the Bash tool with description "Saving session state...": `bash .aether/aether-utils.sh session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"`
447
+ Run using the Bash tool with description "Saving session state...": `aether session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"`
448
+
449
+ ### Step 4.5: Housekeeping (Non-Blocking)
450
+
451
+ Prune stale backups and temp files. This runs automatically — failures never affect phase advancement.
452
+
453
+ Run using the Bash tool with description "Pruning stale backups...":
454
+ ```bash
455
+ aether backup-prune-global 2>/dev/null || true
456
+ ```
457
+
458
+ Run using the Bash tool with description "Cleaning temp files...":
459
+ ```bash
460
+ aether temp-clean 2>/dev/null || true
461
+ ```