aether-colony 5.0.0 → 5.2.1

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 (317) hide show
  1. package/.aether/aether-utils.sh +3226 -3345
  2. package/.aether/agents-claude/aether-ambassador.md +265 -0
  3. package/.aether/agents-claude/aether-archaeologist.md +327 -0
  4. package/.aether/agents-claude/aether-architect.md +236 -0
  5. package/.aether/agents-claude/aether-auditor.md +271 -0
  6. package/.aether/agents-claude/aether-builder.md +224 -0
  7. package/.aether/agents-claude/aether-chaos.md +269 -0
  8. package/.aether/agents-claude/aether-chronicler.md +305 -0
  9. package/.aether/agents-claude/aether-gatekeeper.md +330 -0
  10. package/.aether/agents-claude/aether-includer.md +374 -0
  11. package/.aether/agents-claude/aether-keeper.md +272 -0
  12. package/.aether/agents-claude/aether-measurer.md +322 -0
  13. package/.aether/agents-claude/aether-oracle.md +237 -0
  14. package/.aether/agents-claude/aether-probe.md +211 -0
  15. package/.aether/agents-claude/aether-queen.md +330 -0
  16. package/.aether/agents-claude/aether-route-setter.md +178 -0
  17. package/.aether/agents-claude/aether-sage.md +418 -0
  18. package/.aether/agents-claude/aether-scout.md +179 -0
  19. package/.aether/agents-claude/aether-surveyor-disciplines.md +417 -0
  20. package/.aether/agents-claude/aether-surveyor-nest.md +355 -0
  21. package/.aether/agents-claude/aether-surveyor-pathogens.md +289 -0
  22. package/.aether/agents-claude/aether-surveyor-provisions.md +360 -0
  23. package/.aether/agents-claude/aether-tracker.md +270 -0
  24. package/.aether/agents-claude/aether-watcher.md +280 -0
  25. package/.aether/agents-claude/aether-weaver.md +248 -0
  26. package/.aether/commands/archaeology.yaml +653 -0
  27. package/.aether/commands/build.yaml +1221 -0
  28. package/.aether/commands/chaos.yaml +653 -0
  29. package/.aether/commands/colonize.yaml +442 -0
  30. package/.aether/commands/continue.yaml +1484 -0
  31. package/.aether/commands/council.yaml +509 -0
  32. package/.aether/commands/data-clean.yaml +80 -0
  33. package/.aether/commands/dream.yaml +275 -0
  34. package/.aether/commands/entomb.yaml +863 -0
  35. package/.aether/commands/export-signals.yaml +64 -0
  36. package/.aether/commands/feedback.yaml +158 -0
  37. package/.aether/commands/flag.yaml +160 -0
  38. package/.aether/commands/flags.yaml +177 -0
  39. package/.aether/commands/focus.yaml +112 -0
  40. package/.aether/commands/help.yaml +167 -0
  41. package/.aether/commands/history.yaml +137 -0
  42. package/.aether/commands/import-signals.yaml +79 -0
  43. package/.aether/commands/init.yaml +502 -0
  44. package/.aether/commands/insert-phase.yaml +102 -0
  45. package/.aether/commands/interpret.yaml +285 -0
  46. package/.aether/commands/lay-eggs.yaml +224 -0
  47. package/.aether/commands/maturity.yaml +122 -0
  48. package/.aether/commands/memory-details.yaml +74 -0
  49. package/.aether/commands/migrate-state.yaml +174 -0
  50. package/.aether/commands/oracle.yaml +1224 -0
  51. package/.aether/commands/organize.yaml +446 -0
  52. package/.aether/commands/patrol.yaml +621 -0
  53. package/.aether/commands/pause-colony.yaml +424 -0
  54. package/.aether/commands/phase.yaml +124 -0
  55. package/.aether/commands/pheromones.yaml +153 -0
  56. package/.aether/commands/plan.yaml +1364 -0
  57. package/.aether/commands/preferences.yaml +63 -0
  58. package/.aether/commands/quick.yaml +104 -0
  59. package/.aether/commands/redirect.yaml +123 -0
  60. package/.aether/commands/resume-colony.yaml +375 -0
  61. package/.aether/commands/resume.yaml +407 -0
  62. package/.aether/commands/run.yaml +229 -0
  63. package/.aether/commands/seal.yaml +1214 -0
  64. package/.aether/commands/skill-create.yaml +337 -0
  65. package/.aether/commands/status.yaml +408 -0
  66. package/.aether/commands/swarm.yaml +352 -0
  67. package/.aether/commands/tunnels.yaml +814 -0
  68. package/.aether/commands/update.yaml +131 -0
  69. package/.aether/commands/verify-castes.yaml +159 -0
  70. package/.aether/commands/watch.yaml +454 -0
  71. package/.aether/docs/INCIDENT_TEMPLATE.md +32 -0
  72. package/.aether/docs/QUEEN-SYSTEM.md +11 -11
  73. package/.aether/docs/README.md +32 -2
  74. package/.aether/docs/command-playbooks/README.md +23 -0
  75. package/.aether/docs/command-playbooks/build-complete.md +349 -0
  76. package/.aether/docs/command-playbooks/build-context.md +282 -0
  77. package/.aether/docs/command-playbooks/build-full.md +1683 -0
  78. package/.aether/docs/command-playbooks/build-prep.md +284 -0
  79. package/.aether/docs/command-playbooks/build-verify.md +405 -0
  80. package/.aether/docs/command-playbooks/build-wave.md +749 -0
  81. package/.aether/docs/command-playbooks/continue-advance.md +524 -0
  82. package/.aether/docs/command-playbooks/continue-finalize.md +447 -0
  83. package/.aether/docs/command-playbooks/continue-full.md +1725 -0
  84. package/.aether/docs/command-playbooks/continue-gates.md +686 -0
  85. package/.aether/docs/command-playbooks/continue-verify.md +407 -0
  86. package/.aether/docs/context-continuity.md +84 -0
  87. package/.aether/docs/disciplines/DISCIPLINES.md +9 -7
  88. package/.aether/docs/error-codes.md +1 -1
  89. package/.aether/docs/known-issues.md +34 -173
  90. package/.aether/docs/pheromones.md +86 -6
  91. package/.aether/docs/plans/pheromone-display-plan.md +257 -0
  92. package/.aether/docs/queen-commands.md +10 -9
  93. package/.aether/docs/source-of-truth-map.md +132 -0
  94. package/.aether/docs/xml-utilities.md +47 -0
  95. package/.aether/rules/aether-colony.md +23 -13
  96. package/.aether/scripts/incident-test-add.sh +47 -0
  97. package/.aether/scripts/weekly-audit.sh +79 -0
  98. package/.aether/skills/.index.json +649 -0
  99. package/.aether/skills/colony/.manifest.json +16 -0
  100. package/.aether/skills/colony/build-discipline/SKILL.md +78 -0
  101. package/.aether/skills/colony/colony-interaction/SKILL.md +56 -0
  102. package/.aether/skills/colony/colony-lifecycle/SKILL.md +77 -0
  103. package/.aether/skills/colony/colony-visuals/SKILL.md +112 -0
  104. package/.aether/skills/colony/context-management/SKILL.md +80 -0
  105. package/.aether/skills/colony/error-presentation/SKILL.md +99 -0
  106. package/.aether/skills/colony/pheromone-protocol/SKILL.md +79 -0
  107. package/.aether/skills/colony/pheromone-visibility/SKILL.md +81 -0
  108. package/.aether/skills/colony/state-safety/SKILL.md +84 -0
  109. package/.aether/skills/colony/worker-priming/SKILL.md +82 -0
  110. package/.aether/skills/domain/.manifest.json +24 -0
  111. package/.aether/skills/domain/README.md +33 -0
  112. package/.aether/skills/domain/django/SKILL.md +49 -0
  113. package/.aether/skills/domain/docker/SKILL.md +52 -0
  114. package/.aether/skills/domain/golang/SKILL.md +52 -0
  115. package/.aether/skills/domain/graphql/SKILL.md +51 -0
  116. package/.aether/skills/domain/html-css/SKILL.md +48 -0
  117. package/.aether/skills/domain/nextjs/SKILL.md +45 -0
  118. package/.aether/skills/domain/nodejs/SKILL.md +53 -0
  119. package/.aether/skills/domain/postgresql/SKILL.md +53 -0
  120. package/.aether/skills/domain/prisma/SKILL.md +59 -0
  121. package/.aether/skills/domain/python/SKILL.md +50 -0
  122. package/.aether/skills/domain/rails/SKILL.md +52 -0
  123. package/.aether/skills/domain/react/SKILL.md +45 -0
  124. package/.aether/skills/domain/rest-api/SKILL.md +58 -0
  125. package/.aether/skills/domain/svelte/SKILL.md +47 -0
  126. package/.aether/skills/domain/tailwind/SKILL.md +45 -0
  127. package/.aether/skills/domain/testing/SKILL.md +53 -0
  128. package/.aether/skills/domain/typescript/SKILL.md +58 -0
  129. package/.aether/skills/domain/vue/SKILL.md +49 -0
  130. package/.aether/templates/QUEEN.md.template +23 -41
  131. package/.aether/templates/colony-state-reset.jq.template +1 -0
  132. package/.aether/templates/colony-state.template.json +4 -0
  133. package/.aether/templates/learning-observations.template.json +6 -0
  134. package/.aether/templates/midden.template.json +13 -0
  135. package/.aether/templates/pheromones.template.json +6 -0
  136. package/.aether/templates/session.template.json +9 -0
  137. package/.aether/utils/atomic-write.sh +63 -17
  138. package/.aether/utils/chamber-utils.sh +145 -2
  139. package/.aether/utils/council.sh +425 -0
  140. package/.aether/utils/emoji-audit.sh +166 -0
  141. package/.aether/utils/error-handler.sh +21 -7
  142. package/.aether/utils/file-lock.sh +182 -27
  143. package/.aether/utils/flag.sh +278 -0
  144. package/.aether/utils/hive.sh +572 -0
  145. package/.aether/utils/immune.sh +508 -0
  146. package/.aether/utils/learning.sh +1928 -0
  147. package/.aether/utils/midden.sh +520 -0
  148. package/.aether/utils/oracle/oracle.md +168 -0
  149. package/.aether/utils/oracle/oracle.sh +1023 -0
  150. package/.aether/utils/pheromone.sh +2029 -0
  151. package/.aether/utils/queen.sh +1710 -0
  152. package/.aether/utils/scan.sh +860 -0
  153. package/.aether/utils/semantic-cli.sh +10 -8
  154. package/.aether/utils/session.sh +816 -0
  155. package/.aether/utils/skills.sh +509 -0
  156. package/.aether/utils/spawn-tree.sh +103 -271
  157. package/.aether/utils/spawn.sh +260 -0
  158. package/.aether/utils/state-api.sh +389 -0
  159. package/.aether/utils/state-loader.sh +8 -6
  160. package/.aether/utils/suggest.sh +611 -0
  161. package/.aether/utils/swarm-display.sh +10 -1
  162. package/.aether/utils/swarm.sh +1004 -0
  163. package/.aether/utils/watch-spawn-tree.sh +11 -2
  164. package/.aether/utils/xml-compose.sh +2 -2
  165. package/.aether/utils/xml-convert.sh +9 -5
  166. package/.aether/utils/xml-core.sh +5 -9
  167. package/.aether/utils/xml-query.sh +4 -4
  168. package/.aether/workers.md +86 -67
  169. package/.claude/agents/ant/aether-ambassador.md +2 -1
  170. package/.claude/agents/ant/aether-archaeologist.md +6 -1
  171. package/.claude/agents/ant/aether-architect.md +236 -0
  172. package/.claude/agents/ant/aether-auditor.md +6 -1
  173. package/.claude/agents/ant/aether-builder.md +38 -1
  174. package/.claude/agents/ant/aether-chaos.md +2 -1
  175. package/.claude/agents/ant/aether-chronicler.md +1 -0
  176. package/.claude/agents/ant/aether-gatekeeper.md +6 -1
  177. package/.claude/agents/ant/aether-includer.md +1 -0
  178. package/.claude/agents/ant/aether-keeper.md +1 -0
  179. package/.claude/agents/ant/aether-measurer.md +6 -1
  180. package/.claude/agents/ant/aether-oracle.md +237 -0
  181. package/.claude/agents/ant/aether-probe.md +2 -1
  182. package/.claude/agents/ant/aether-queen.md +6 -1
  183. package/.claude/agents/ant/aether-route-setter.md +6 -1
  184. package/.claude/agents/ant/aether-sage.md +68 -3
  185. package/.claude/agents/ant/aether-scout.md +38 -1
  186. package/.claude/agents/ant/aether-surveyor-disciplines.md +2 -1
  187. package/.claude/agents/ant/aether-surveyor-nest.md +2 -1
  188. package/.claude/agents/ant/aether-surveyor-pathogens.md +2 -1
  189. package/.claude/agents/ant/aether-surveyor-provisions.md +2 -1
  190. package/.claude/agents/ant/aether-tracker.md +6 -1
  191. package/.claude/agents/ant/aether-watcher.md +37 -1
  192. package/.claude/agents/ant/aether-weaver.md +2 -1
  193. package/.claude/commands/ant/archaeology.md +1 -8
  194. package/.claude/commands/ant/build.md +43 -1159
  195. package/.claude/commands/ant/chaos.md +1 -14
  196. package/.claude/commands/ant/colonize.md +3 -14
  197. package/.claude/commands/ant/continue.md +40 -1026
  198. package/.claude/commands/ant/council.md +213 -15
  199. package/.claude/commands/ant/data-clean.md +81 -0
  200. package/.claude/commands/ant/dream.md +12 -9
  201. package/.claude/commands/ant/entomb.md +62 -87
  202. package/.claude/commands/ant/export-signals.md +57 -0
  203. package/.claude/commands/ant/feedback.md +18 -0
  204. package/.claude/commands/ant/flag.md +12 -0
  205. package/.claude/commands/ant/flags.md +22 -8
  206. package/.claude/commands/ant/focus.md +18 -0
  207. package/.claude/commands/ant/help.md +40 -8
  208. package/.claude/commands/ant/history.md +3 -0
  209. package/.claude/commands/ant/import-signals.md +71 -0
  210. package/.claude/commands/ant/init.md +349 -191
  211. package/.claude/commands/ant/insert-phase.md +105 -0
  212. package/.claude/commands/ant/interpret.md +11 -0
  213. package/.claude/commands/ant/lay-eggs.md +167 -158
  214. package/.claude/commands/ant/maturity.md +22 -11
  215. package/.claude/commands/ant/memory-details.md +77 -0
  216. package/.claude/commands/ant/migrate-state.md +6 -0
  217. package/.claude/commands/ant/oracle.md +317 -62
  218. package/.claude/commands/ant/organize.md +10 -5
  219. package/.claude/commands/ant/patrol.md +620 -0
  220. package/.claude/commands/ant/pause-colony.md +8 -22
  221. package/.claude/commands/ant/phase.md +26 -37
  222. package/.claude/commands/ant/pheromones.md +156 -0
  223. package/.claude/commands/ant/plan.md +199 -50
  224. package/.claude/commands/ant/preferences.md +65 -0
  225. package/.claude/commands/ant/quick.md +100 -0
  226. package/.claude/commands/ant/redirect.md +18 -0
  227. package/.claude/commands/ant/resume-colony.md +37 -22
  228. package/.claude/commands/ant/resume.md +60 -7
  229. package/.claude/commands/ant/run.md +231 -0
  230. package/.claude/commands/ant/seal.md +506 -78
  231. package/.claude/commands/ant/skill-create.md +286 -0
  232. package/.claude/commands/ant/status.md +171 -1
  233. package/.claude/commands/ant/swarm.md +11 -23
  234. package/.claude/commands/ant/tunnels.md +1 -0
  235. package/.claude/commands/ant/update.md +58 -135
  236. package/.claude/commands/ant/verify-castes.md +90 -42
  237. package/.claude/commands/ant/watch.md +1 -0
  238. package/.opencode/agents/aether-ambassador.md +1 -1
  239. package/.opencode/agents/aether-architect.md +133 -0
  240. package/.opencode/agents/aether-builder.md +3 -3
  241. package/.opencode/agents/aether-oracle.md +137 -0
  242. package/.opencode/agents/aether-queen.md +1 -1
  243. package/.opencode/agents/aether-route-setter.md +1 -1
  244. package/.opencode/agents/aether-scout.md +1 -1
  245. package/.opencode/agents/aether-surveyor-disciplines.md +6 -1
  246. package/.opencode/agents/aether-surveyor-nest.md +6 -1
  247. package/.opencode/agents/aether-surveyor-pathogens.md +6 -1
  248. package/.opencode/agents/aether-surveyor-provisions.md +6 -1
  249. package/.opencode/agents/aether-tracker.md +1 -1
  250. package/.opencode/agents/aether-watcher.md +1 -1
  251. package/.opencode/agents/aether-weaver.md +1 -1
  252. package/.opencode/commands/ant/archaeology.md +7 -14
  253. package/.opencode/commands/ant/build.md +54 -88
  254. package/.opencode/commands/ant/chaos.md +7 -24
  255. package/.opencode/commands/ant/colonize.md +10 -17
  256. package/.opencode/commands/ant/continue.md +595 -66
  257. package/.opencode/commands/ant/council.md +150 -18
  258. package/.opencode/commands/ant/data-clean.md +77 -0
  259. package/.opencode/commands/ant/dream.md +15 -17
  260. package/.opencode/commands/ant/entomb.md +28 -18
  261. package/.opencode/commands/ant/export-signals.md +54 -0
  262. package/.opencode/commands/ant/feedback.md +24 -5
  263. package/.opencode/commands/ant/flag.md +16 -4
  264. package/.opencode/commands/ant/flags.md +24 -10
  265. package/.opencode/commands/ant/focus.md +22 -5
  266. package/.opencode/commands/ant/help.md +41 -8
  267. package/.opencode/commands/ant/history.md +9 -0
  268. package/.opencode/commands/ant/import-signals.md +68 -0
  269. package/.opencode/commands/ant/init.md +396 -154
  270. package/.opencode/commands/ant/insert-phase.md +111 -0
  271. package/.opencode/commands/ant/interpret.md +16 -0
  272. package/.opencode/commands/ant/lay-eggs.md +184 -112
  273. package/.opencode/commands/ant/maturity.md +18 -2
  274. package/.opencode/commands/ant/memory-details.md +83 -0
  275. package/.opencode/commands/ant/migrate-state.md +12 -0
  276. package/.opencode/commands/ant/oracle.md +322 -67
  277. package/.opencode/commands/ant/organize.md +14 -12
  278. package/.opencode/commands/ant/patrol.md +626 -0
  279. package/.opencode/commands/ant/pause-colony.md +12 -29
  280. package/.opencode/commands/ant/phase.md +30 -40
  281. package/.opencode/commands/ant/pheromones.md +162 -0
  282. package/.opencode/commands/ant/plan.md +210 -57
  283. package/.opencode/commands/ant/preferences.md +71 -0
  284. package/.opencode/commands/ant/quick.md +91 -0
  285. package/.opencode/commands/ant/redirect.md +22 -5
  286. package/.opencode/commands/ant/resume-colony.md +41 -29
  287. package/.opencode/commands/ant/resume.md +80 -20
  288. package/.opencode/commands/ant/run.md +237 -0
  289. package/.opencode/commands/ant/seal.md +230 -25
  290. package/.opencode/commands/ant/skill-create.md +63 -0
  291. package/.opencode/commands/ant/status.md +125 -30
  292. package/.opencode/commands/ant/swarm.md +3 -345
  293. package/.opencode/commands/ant/tunnels.md +3 -9
  294. package/.opencode/commands/ant/update.md +63 -127
  295. package/.opencode/commands/ant/verify-castes.md +96 -42
  296. package/.opencode/commands/ant/watch.md +7 -0
  297. package/CHANGELOG.md +368 -1
  298. package/README.md +195 -324
  299. package/bin/cli.js +236 -429
  300. package/bin/generate-commands.js +186 -0
  301. package/bin/generate-commands.sh +128 -89
  302. package/bin/lib/spawn-logger.js +0 -15
  303. package/bin/lib/update-transaction.js +285 -35
  304. package/bin/npx-install.js +178 -0
  305. package/bin/validate-package.sh +85 -3
  306. package/package.json +16 -4
  307. package/.aether/CONTEXT.md +0 -160
  308. package/.aether/docs/QUEEN.md +0 -84
  309. package/.aether/exchange/colony-registry.xml +0 -11
  310. package/.aether/exchange/pheromones.xml +0 -87
  311. package/.aether/exchange/queen-wisdom.xml +0 -14
  312. package/.aether/model-profiles.yaml +0 -100
  313. package/.aether/utils/spawn-with-model.sh +0 -56
  314. package/bin/lib/model-profiles.js +0 -445
  315. package/bin/lib/model-verify.js +0 -288
  316. package/bin/lib/proxy-health.js +0 -253
  317. package/bin/lib/telemetry.js +0 -441
@@ -1,34 +1,23 @@
1
+ <!-- Generated from .aether/commands/seal.yaml - DO NOT EDIT DIRECTLY -->
1
2
  ---
2
3
  name: ant:seal
3
4
  description: "🏺🐜🏺 Seal the colony with Crowned Anthill milestone"
4
5
  ---
5
6
 
6
- You are the **Queen**. Seal the colony when all work is complete.
7
-
8
- ## Instructions
9
-
10
7
  ### Step -1: Normalize Arguments
11
8
 
12
9
  Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
10
 
14
11
  This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
12
 
13
+ You are the **Queen**. Seal the colony when all work is complete.
14
+
15
+ ## Instructions
16
+
16
17
  Parse `$normalized_args`:
17
18
  - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
18
19
  - Otherwise: set `visual_mode = true`
19
20
 
20
- ### Step 0: Initialize Visual Mode (if enabled)
21
-
22
- If `visual_mode` is true:
23
- ```bash
24
- # Generate session ID
25
- seal_id="seal-$(date +%s)"
26
-
27
- # Initialize swarm display
28
- bash .aether/aether-utils.sh swarm-display-init "$seal_id"
29
- bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Sealing colony" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
30
- ```
31
-
32
21
  ### Step 1: Read State
33
22
 
34
23
  Read `.aether/data/COLONY_STATE.json`.
@@ -139,6 +128,31 @@ Create archive manifest file `$archive_dir/manifest.json`:
139
128
  }
140
129
  ```
141
130
 
131
+ ### Step 4.5: Increment Colony Version
132
+
133
+ Before writing the Crowned Anthill milestone, increment `colony_version` in COLONY_STATE.json.
134
+
135
+ ```bash
136
+ # Read current colony_version (default to 0 for backward compat with older colonies)
137
+ current_colony_version=$(jq -r '.colony_version // 0' .aether/data/COLONY_STATE.json 2>/dev/null || echo 0)
138
+ # Guard against non-integer values (floats, strings)
139
+ [[ "$current_colony_version" =~ ^[0-9]+$ ]] || current_colony_version=0
140
+ new_colony_version=$(( current_colony_version + 1 ))
141
+
142
+ # Write incremented value back — guard against empty output destroying the file
143
+ updated=$(jq --argjson v "$new_colony_version" '.colony_version = $v' .aether/data/COLONY_STATE.json 2>/dev/null)
144
+ if [[ -n "$updated" && ${#updated} -gt 10 ]]; then
145
+ echo "$updated" > .aether/data/COLONY_STATE.json
146
+ else
147
+ echo "Warning: jq update failed — colony_version defaults to 1, state file unchanged"
148
+ new_colony_version=1
149
+ fi
150
+ ```
151
+
152
+ Use `new_colony_version` as `{colony_version}` throughout the rest of the seal ceremony (e.g., display as "Crowned Anthill v{colony_version}").
153
+
154
+ **Error handling:** If jq fails or produces empty/short output, COLONY_STATE.json is NOT overwritten and `new_colony_version` defaults to 1. Never let version increment failures block the seal.
155
+
142
156
  ### Step 5: Update Milestone to Crowned Anthill
143
157
 
144
158
  Update COLONY_STATE.json:
@@ -146,6 +160,99 @@ Update COLONY_STATE.json:
146
160
  2. Set `milestone_updated_at` to current ISO-8601 timestamp
147
161
  3. Append event: `"<timestamp>|milestone_reached|archive|Achieved Crowned Anthill milestone - colony archived"`
148
162
 
163
+ ### Step 5.1: Update Changelog
164
+
165
+ **MANDATORY: Record the seal in the project changelog. This step is never skipped.**
166
+
167
+ If no `CHANGELOG.md` exists, `changelog-append` creates one automatically.
168
+
169
+ Build a summary of what the colony accomplished across all phases:
170
+ - Collect completed phase names from COLONY_STATE.json
171
+ - Summarize the goal and key outcomes in one line
172
+
173
+ ```bash
174
+ bash .aether/aether-utils.sh changelog-append \
175
+ "$(date +%Y-%m-%d)" \
176
+ "seal-crowned-anthill" \
177
+ "00" \
178
+ "{key_files_csv}" \
179
+ "Colony sealed at Crowned Anthill;{goal}" \
180
+ "{phases_completed} phases completed;Colony wisdom promoted to QUEEN.md" \
181
+ ""
182
+ ```
183
+
184
+ - `{key_files_csv}` — list the most significant files created or modified across the colony's lifetime (derive from phase plans or git log)
185
+ - `{goal}` — the colony goal from COLONY_STATE.json
186
+
187
+ **Error handling:** If `changelog-append` fails, log to midden and continue — changelog failure never blocks sealing.
188
+
189
+ ### Step 5.2: Update Registry (Silent)
190
+
191
+ Mark the colony as inactive in the global registry. This is silent on failure — registry is not required for the colony to work.
192
+
193
+ Run using the Bash tool (ignore errors):
194
+ ```bash
195
+ bash .aether/aether-utils.sh registry-add "$(pwd)" "$(jq -r '.version // "unknown"' ~/.aether/version.json 2>/dev/null || echo 'unknown')" --active false 2>/dev/null || true
196
+ ```
197
+
198
+ If the command fails, proceed silently. This is optional bookkeeping.
199
+
200
+ ### Step 5.25: Hive Promotion (NON-BLOCKING)
201
+
202
+ After wisdom promotion, promote abstracted instincts to the cross-colony hive.
203
+
204
+ **Extract high-confidence instincts for hive promotion:**
205
+ ```bash
206
+ # Get instincts with confidence >= 0.8
207
+ high_conf_instincts=$(jq -r '.memory.instincts[] | select(.confidence >= 0.8) | @base64' .aether/data/COLONY_STATE.json 2>/dev/null || echo "")
208
+
209
+ # Derive source repo name from current directory
210
+ source_repo="$(pwd)"
211
+
212
+ # Read domain tags from registry (NOT from instinct.domain which is a category, not a repo domain)
213
+ repo_domain_tags=$(jq -r --arg repo "$(pwd)" \
214
+ '[.repos[] | select(.path == $repo) | .domain_tags // []] | .[0] // [] | join(",")' \
215
+ "$HOME/.aether/registry.json" 2>/dev/null || echo "")
216
+
217
+ hive_promoted_count=0
218
+ hive_errors=0
219
+ for encoded in $high_conf_instincts; do
220
+ [[ -z "$encoded" ]] && continue
221
+
222
+ # Extract trigger and action fields from the instinct object
223
+ trigger=$(echo "$encoded" | base64 -d | jq -r '.trigger // empty')
224
+ action=$(echo "$encoded" | base64 -d | jq -r '.action // empty')
225
+ confidence=$(echo "$encoded" | base64 -d | jq -r '.confidence // 0.7')
226
+
227
+ [[ -z "$trigger" || -z "$action" ]] && continue
228
+
229
+ # Strip leading "When " or "when " from trigger to avoid "When When..." stutter
230
+ trigger_clean=$(echo "$trigger" | sed 's/^[Ww]hen //')
231
+
232
+ # Build the promotion text in "When {trigger}: {action}" format
233
+ promote_text="When ${trigger_clean}: ${action}"
234
+
235
+ # Build hive-promote args with --text and --source-repo (required)
236
+ promote_args=(hive-promote --text "$promote_text" --source-repo "$source_repo" --confidence "$confidence")
237
+ [[ -n "$repo_domain_tags" ]] && promote_args+=(--domain "$repo_domain_tags")
238
+
239
+ # Call hive-promote which orchestrates abstract + store
240
+ result=$(bash .aether/aether-utils.sh "${promote_args[@]}" 2>/dev/null || echo '{}')
241
+ was_promoted=$(echo "$result" | jq -r '.result.action // "skipped"' 2>/dev/null || echo "skipped")
242
+
243
+ if [[ "$was_promoted" == "promoted" || "$was_promoted" == "merged" ]]; then
244
+ hive_promoted_count=$((hive_promoted_count + 1))
245
+ fi
246
+ done
247
+
248
+ if [[ "$hive_promoted_count" -gt 0 ]]; then
249
+ echo "Hive promotion: $hive_promoted_count instinct(s) promoted to cross-colony hive"
250
+ fi
251
+ ```
252
+
253
+ **Continue to Step 5.5 (non-blocking):**
254
+ Proceed to Step 5.5 regardless of hive promotion results — hive promotion is strictly non-blocking.
255
+
149
256
  ### Step 5.5: Write Final Handoff
150
257
 
151
258
  After archiving, write the final handoff documenting the completed colony:
@@ -171,7 +278,7 @@ This handoff serves as the final record of the completed colony.
171
278
 
172
279
  ### Step 5.75: Export XML Archive (best-effort)
173
280
 
174
- Export colony data as a combined XML archive. This is best-effort — seal proceeds even if XML export fails.
281
+ Export colony data as a combined XML archive and a standalone pheromones.xml. Both are best-effort — seal proceeds even if XML export fails.
175
282
 
176
283
  ```bash
177
284
  # Check if xmllint is available
@@ -184,30 +291,57 @@ if command -v xmllint >/dev/null 2>&1; then
184
291
  else
185
292
  xml_export_line="XML Archive: export failed (non-blocking)"
186
293
  fi
294
+
295
+ # Also export standalone pheromones.xml for cross-colony sharing
296
+ pher_result=$(bash .aether/aether-utils.sh pheromone-export-xml ".aether/exchange/pheromones.xml" 2>&1)
297
+ pher_ok=$(echo "$pher_result" | jq -r '.ok // false' 2>/dev/null)
298
+ if [[ "$pher_ok" == "true" ]]; then
299
+ pher_signal_count=$(jq '[.signals[] | select(.active != false)] | length' .aether/data/pheromones.json 2>/dev/null || echo "0")
300
+ pher_export_line="Signal Export: pheromones.xml (${pher_signal_count} signals, importable by other colonies)"
301
+ else
302
+ pher_export_line="Signal Export: failed (non-blocking)"
303
+ fi
304
+
305
+ # Export standalone queen-wisdom.xml for cross-colony wisdom sharing
306
+ wisdom_result=$(bash .aether/aether-utils.sh wisdom-export-xml ".aether/exchange/queen-wisdom.xml" 2>&1)
307
+ wisdom_ok=$(echo "$wisdom_result" | jq -r '.ok // false' 2>/dev/null)
308
+ if [[ "$wisdom_ok" == "true" ]]; then
309
+ wisdom_count=$(echo "$wisdom_result" | jq -r '.result.entries // 0' 2>/dev/null)
310
+ wisdom_export_line="Wisdom Export: queen-wisdom.xml (${wisdom_count} entries)"
311
+ else
312
+ wisdom_export_line="Wisdom Export: failed (non-blocking)"
313
+ fi
314
+
315
+ # Export standalone colony-registry.xml for lineage tracking
316
+ registry_result=$(bash .aether/aether-utils.sh registry-export-xml ".aether/exchange/colony-registry.xml" 2>&1)
317
+ registry_ok=$(echo "$registry_result" | jq -r '.ok // false' 2>/dev/null)
318
+ if [[ "$registry_ok" == "true" ]]; then
319
+ registry_count=$(echo "$registry_result" | jq -r '.result.colonies // 0' 2>/dev/null)
320
+ registry_export_line="Registry Export: colony-registry.xml (${registry_count} colonies)"
321
+ else
322
+ registry_export_line="Registry Export: failed (non-blocking)"
323
+ fi
187
324
  else
188
325
  xml_export_line="XML Archive: skipped (xmllint not available)"
326
+ pher_export_line="Signal Export: skipped (xmllint not available)"
327
+ wisdom_export_line="Wisdom Export: skipped (xmllint not available)"
328
+ registry_export_line="Registry Export: skipped (xmllint not available)"
189
329
  fi
190
330
  ```
191
331
 
192
332
  ### Step 6: Display Result
193
333
 
194
- **If visual_mode is true, render final swarm display:**
195
- ```bash
196
- bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony sealed" "Colony" '{"read":3,"grep":0,"edit":2,"bash":3}' 100 "fungus_garden" 100
197
- bash .aether/aether-utils.sh swarm-display-render "$seal_id"
198
- ```
199
-
200
334
  Output:
201
335
  ```
202
336
  🏺 ════════════════════════════════════════════════════
203
- C R O W N E D A N T H I L L
337
+ C R O W N E D A N T H I L L v{colony_version}
204
338
  ══════════════════════════════════════════════════ 🏺
205
339
 
206
340
  ✅ Colony archived successfully!
207
341
 
208
342
  👑 Goal: {goal (truncated to 60 chars)}
209
343
  📍 Phases: {total_phases} completed
210
- 🏆 Milestone: Crowned Anthill
344
+ 🏆 Milestone: Crowned Anthill v{colony_version}
211
345
 
212
346
  📦 Archive Location: {archive_dir}
213
347
  - COLONY_STATE.json
@@ -216,6 +350,9 @@ Output:
216
350
  - flags.json (if existed)
217
351
  - constraints.json (if existed)
218
352
  {xml_export_line}
353
+ {pher_export_line}
354
+ {wisdom_export_line}
355
+ {registry_export_line}
219
356
 
220
357
  🐜 The colony has reached its final form.
221
358
  The anthill stands crowned and sealed.
@@ -235,6 +372,74 @@ If option 2 selected: run /ant:tunnels
235
372
  If option 3 selected: display "Run /ant:lay-eggs to begin anew after clearing"
236
373
  ```
237
374
 
375
+ ### Step 6.5: Commit Suggestion (Non-blocking)
376
+
377
+ After the ceremony, offer to commit all colony work.
378
+
379
+ **Gate check — skip silently if any fail:**
380
+ 1. Not a git repo: `git rev-parse --git-dir 2>/dev/null` fails -> skip
381
+ 2. Clean working tree: `git status --porcelain 2>/dev/null` is empty -> skip to Step 6.6
382
+
383
+ **If uncommitted changes exist:**
384
+
385
+ Generate a seal commit message:
386
+ ```bash
387
+ seal_commit=$(bash .aether/aether-utils.sh generate-commit-message seal "$phases_completed" "$goal" "$colony_age_days" 2>/dev/null)
388
+ seal_message=$(echo "$seal_commit" | jq -r '.result.message // "aether-seal: colony sealed"')
389
+ seal_body=$(echo "$seal_commit" | jq -r '.result.body // ""')
390
+ ```
391
+
392
+ Display the suggestion:
393
+ ```
394
+ Commit suggestion:
395
+ $seal_message
396
+ $seal_body
397
+ ```
398
+
399
+ Prompt with AskUserQuestion (3 options):
400
+ 1. **Commit with this message** — Run `git add -A && git commit -m "$seal_message" -m "$seal_body"`
401
+ 2. **Edit message** — Ask user for their preferred message, then commit with that
402
+ 3. **Skip** — Do not commit
403
+
404
+ If the user chooses option 1 or 2 and the commit succeeds, set `seal_committed = true`.
405
+ If the commit fails or user skips, set `seal_committed = false`.
406
+
407
+ **Error handling:** If `generate-commit-message` fails, fall back to message `"aether-seal: colony sealed"`. Never let commit suggestion failures stop the seal flow.
408
+
409
+ ### Step 6.6: Push Suggestion (Non-blocking)
410
+
411
+ Only show if a commit was just made in Step 6.5 (`seal_committed == true`) OR if there are unpushed commits.
412
+
413
+ **Gate check — skip silently if any fail:**
414
+ 1. Not a git repo -> skip
415
+ 2. No remote configured: `git remote -v 2>/dev/null` is empty -> skip
416
+
417
+ **Check for unpushed commits:**
418
+ ```bash
419
+ unpushed=$(git log --oneline @{u}..HEAD 2>/dev/null | wc -l | tr -d ' ')
420
+ ```
421
+ If `unpushed == 0` and `seal_committed == false` -> skip
422
+
423
+ **If there are commits to push:**
424
+
425
+ Detect current branch and upstream status:
426
+ ```bash
427
+ current_branch=$(git branch --show-current)
428
+ has_upstream=$(git rev-parse --abbrev-ref @{u} 2>/dev/null && echo "yes" || echo "no")
429
+ ```
430
+
431
+ Display: `Push {unpushed} commit(s) to remote? Branch: {current_branch}`
432
+
433
+ Prompt with AskUserQuestion (2 options):
434
+ 1. **Push now** — If upstream exists: `git push`. If no upstream: `git push -u origin $current_branch`
435
+ 2. **I'll push later** — Skip
436
+
437
+ Display result on success or skip.
438
+
439
+ **Error handling:** If push fails, display the error but do not stop the seal flow.
440
+
441
+ **Safety:** Never auto-push. Always require explicit user approval.
442
+
238
443
  ### Edge Cases
239
444
 
240
445
  **If milestone is already "Sealed Chambers" but phases are complete:**
@@ -0,0 +1,63 @@
1
+ <!-- Generated from .aether/commands/skill-create.yaml - DO NOT EDIT DIRECTLY -->
2
+ ---
3
+ name: ant:skill-create
4
+ description: "Create a custom domain skill using Oracle mini-research and a guided wizard"
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 **Builder**. Create a custom domain skill by researching best practices and guiding the user through a wizard.
14
+
15
+ ## Instructions
16
+
17
+ ### Step 0: Parse Arguments
18
+
19
+ If `$normalized_args` is empty:
20
+ ```
21
+ Usage: /ant:skill-create "<topic>"
22
+
23
+ Creates a custom domain skill using Oracle mini-research.
24
+
25
+ Examples:
26
+ /ant:skill-create "tailwind"
27
+ /ant:skill-create "react native"
28
+ /ant:skill-create "kubernetes"
29
+ ```
30
+ Stop here.
31
+
32
+ ### Step 1: Oracle Mini-Research
33
+
34
+ Launch a focused research session on the topic (5 iterations max):
35
+ 1. Web search for best practices, common patterns, and gotchas
36
+ 2. Codebase scan for existing usage of the technology
37
+ 3. Compile findings into structured notes
38
+
39
+ ### Step 2: Wizard Questions
40
+
41
+ Ask the user:
42
+ 1. What aspect to focus on? (provide 2-4 options based on findings)
43
+ 2. Experience level? (beginner / intermediate / advanced)
44
+ 3. Any specific rules or constraints? (free text)
45
+
46
+ ### Step 3: Generate SKILL.md
47
+
48
+ Create the skill file with proper frontmatter and body:
49
+ - name: derived from topic
50
+ - description: "Use when working with {topic}"
51
+ - type: domain
52
+ - domains: inferred from research
53
+ - agent_roles: [builder]
54
+ - detect_files / detect_packages: inferred from research
55
+ - Body: practical best-practices guide from research + wizard answers
56
+
57
+ ### Step 4: Write and Verify
58
+
59
+ 1. Write to `~/.aether/skills/domain/{name}/SKILL.md`
60
+ 2. Run: `bash .aether/aether-utils.sh skill-parse-frontmatter ~/.aether/skills/domain/{name}/SKILL.md`
61
+ 3. Run: `bash .aether/aether-utils.sh skill-cache-rebuild`
62
+ 4. Show the generated skill to the user
63
+ 5. Ask if they want to adjust anything
@@ -1,15 +1,22 @@
1
+ <!-- Generated from .aether/commands/status.yaml - DO NOT EDIT DIRECTLY -->
1
2
  ---
2
3
  name: ant:status
3
4
  description: "📈🐜🏘️🐜📈 Show colony status at a glance"
4
5
  ---
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
+
6
13
  You are the **Queen**. Show colony status.
7
14
 
8
15
  ## Instructions
9
16
 
10
17
  ### Step 0: Version Check (Non-blocking)
11
18
 
12
- Run using the Bash tool: `bash .aether/aether-utils.sh version-check 2>/dev/null || true`
19
+ Run: `bash .aether/aether-utils.sh version-check-cached 2>/dev/null || true`
13
20
 
14
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.
15
22
 
@@ -51,7 +58,7 @@ If `version` field is missing, "1.0", or "2.0":
51
58
 
52
59
  ### Step 1.5: Load State and Show Resumption Context
53
60
 
54
- Run using Bash tool: `bash .aether/aether-utils.sh load-state`
61
+ Run: `bash .aether/aether-utils.sh load-state`
55
62
 
56
63
  If successful and goal is not null:
57
64
  1. Extract current_phase from state
@@ -75,22 +82,44 @@ Run: `bash .aether/aether-utils.sh unload-state` to release lock.
75
82
 
76
83
  From state, extract:
77
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
+
78
107
  ### Step 2.5: Gather Dream Information
79
108
 
80
- Run using Bash tool: `ls -1 .aether/dreams/*.md 2>/dev/null | wc -l`
109
+ Run: `ls -1 .aether/dreams/*.md 2>/dev/null | wc -l`
81
110
 
82
111
  Capture:
83
112
  - Dream count: number of .md files in .aether/dreams/
84
113
  - Latest dream: most recent file by name (files are timestamped: YYYY-MM-DD-HHMM.md)
85
114
 
86
- To get latest dream timestamp:
115
+ To get latest dream timestamp, Run:
87
116
  ```bash
88
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/'
89
118
  ```
90
119
 
91
120
  Format the timestamp as: YYYY-MM-DD HH:MM
92
121
 
93
- From state, extract:
122
+
94
123
 
95
124
  **Phase info:**
96
125
  - Current phase number: `current_phase`
@@ -117,6 +146,7 @@ Extract:
117
146
  **Escalation state:**
118
147
  Count escalated flags by checking for blocker flags with source "escalation":
119
148
 
149
+ Run:
120
150
  ```bash
121
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")
122
152
  echo "escalated_count=$escalated_count"
@@ -137,7 +167,7 @@ From `memory.instincts`:
137
167
 
138
168
  ### Step 2.6: Detect Milestone
139
169
 
140
- Run using Bash tool: `bash .aether/aether-utils.sh milestone-detect`
170
+ Run: `bash .aether/aether-utils.sh milestone-detect`
141
171
 
142
172
  Extract from JSON result:
143
173
  - `milestone`: Current milestone name
@@ -145,6 +175,54 @@ Extract from JSON result:
145
175
  - `phases_completed`: Number of completed phases
146
176
  - `total_phases`: Total phases in plan
147
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
+
148
226
  ### Step 3: Display
149
227
 
150
228
  Output format:
@@ -154,12 +232,13 @@ Output format:
154
232
  (o o) AETHER COLONY
155
233
  | O | Status Report
156
234
  `-`
157
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
235
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
158
236
 
159
237
  👑 Goal: <goal (truncated to 60 chars)>
160
238
 
161
- 📍 Phase <N>/<M>: <phase name>
162
- Tasks: <completed>/<total> complete
239
+ 📍 Progress
240
+ Phase: [████████░░░░░░░░░░░░] <N>/<M> phases
241
+ Tasks: [████████████████░░░░] <completed>/<total> tasks in Phase <N>
163
242
 
164
243
  🎯 Focus: <focus_count> areas | 🚫 Avoid: <constraints_count> patterns
165
244
  🧠 Instincts: <total> learned (<high_confidence> strong)
@@ -168,19 +247,23 @@ Output format:
168
247
  ⚠️ Escalated: {escalated_count} task(s) awaiting your decision
169
248
  {end if}
170
249
  🏆 Milestone: <milestone> (<version>)
250
+
171
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
+ └─────────────────┴────────┴─────────────────────────────┘
172
262
 
173
263
  State: <state>
174
- Next: <suggested_command> <phase_context>
175
264
  ```
176
265
 
177
- **Phase context for Next line:** Include the phase name inline with the suggestion:
178
- - READY → `Next: /ant:build 3 Phase 3: Add Authentication`
179
- - EXECUTING → `Next: /ant:continue Phase 3: Add Authentication`
180
- - PLANNING → `Next: /ant:plan`
181
- - IDLE → `Next: /ant:init`
182
-
183
- Look up the phase name from `plan.phases[current_phase].name` and append it.
266
+ Use the `phase_bar` and `task_bar` values computed in Step 2.7 for the actual bar characters and counts.
184
267
 
185
268
  **If instincts exist, also show top 3:**
186
269
  ```
@@ -190,23 +273,35 @@ Look up the phase name from `plan.phases[current_phase].name` and append it.
190
273
  [0.7] 🐜 debugging: Trace to root cause first
191
274
  ```
192
275
 
193
- **Suggested command logic (use actual values, not templates):**
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
+ ```
194
286
 
195
- Calculate `next_phase = current_phase + 1` from state.
196
287
 
197
- Generate the suggested command based on colony state:
198
- - IDLE -> `/ant:init`
199
- - READY -> `/ant:build {next_phase}` (e.g., if current_phase is 2, output `/ant:build 3`)
200
- - EXECUTING -> `/ant:continue`
201
- - PLANNING -> `/ant:plan`
202
288
 
203
- The output must be a copy-pasteable command with real numbers, not placeholders.
204
289
 
205
- **Dream display:**
206
- - If no dreams exist: `💭 Dreams: None recorded`
207
- - If dreams exist: `💭 Dreams: <count> recorded (latest: YYYY-MM-DD HH:MM)`
208
290
 
209
291
  **Edge cases:**
210
- - No phases yet: "Phase 0/0: No plan created"
211
- - No tasks in phase: "Tasks: 0/0 complete"
292
+ - No phases yet: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 phases`
293
+ - No tasks in phase: show `[░░░░░░░░░░░░░░░░░░░░] 0/0 tasks in Phase 0`
212
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).