aether-colony 5.3.3 → 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 (142) hide show
  1. package/.aether/commands/archaeology.yaml +3 -3
  2. package/.aether/commands/build.yaml +45 -45
  3. package/.aether/commands/chaos.yaml +7 -7
  4. package/.aether/commands/colonize.yaml +17 -17
  5. package/.aether/commands/continue.yaml +40 -40
  6. package/.aether/commands/council.yaml +6 -6
  7. package/.aether/commands/data-clean.yaml +3 -3
  8. package/.aether/commands/dream.yaml +2 -2
  9. package/.aether/commands/entomb.yaml +11 -11
  10. package/.aether/commands/export-signals.yaml +2 -2
  11. package/.aether/commands/feedback.yaml +6 -6
  12. package/.aether/commands/flag.yaml +2 -2
  13. package/.aether/commands/flags.yaml +4 -4
  14. package/.aether/commands/focus.yaml +6 -6
  15. package/.aether/commands/help.yaml +1 -1
  16. package/.aether/commands/history.yaml +1 -1
  17. package/.aether/commands/import-signals.yaml +2 -2
  18. package/.aether/commands/init.yaml +16 -16
  19. package/.aether/commands/insert-phase.yaml +1 -1
  20. package/.aether/commands/interpret.yaml +2 -2
  21. package/.aether/commands/lay-eggs.yaml +3 -3
  22. package/.aether/commands/maturity.yaml +2 -2
  23. package/.aether/commands/memory-details.yaml +1 -1
  24. package/.aether/commands/migrate-state.yaml +1 -1
  25. package/.aether/commands/oracle.yaml +77 -82
  26. package/.aether/commands/organize.yaml +5 -5
  27. package/.aether/commands/patrol.yaml +6 -6
  28. package/.aether/commands/pause-colony.yaml +7 -7
  29. package/.aether/commands/phase.yaml +1 -1
  30. package/.aether/commands/pheromones.yaml +1 -1
  31. package/.aether/commands/plan.yaml +14 -14
  32. package/.aether/commands/quick.yaml +4 -4
  33. package/.aether/commands/redirect.yaml +6 -6
  34. package/.aether/commands/resume-colony.yaml +9 -9
  35. package/.aether/commands/resume.yaml +5 -38
  36. package/.aether/commands/run.yaml +7 -7
  37. package/.aether/commands/seal.yaml +33 -33
  38. package/.aether/commands/skill-create.yaml +4 -4
  39. package/.aether/commands/status.yaml +14 -14
  40. package/.aether/commands/swarm.yaml +13 -13
  41. package/.aether/commands/tunnels.yaml +7 -7
  42. package/.aether/commands/update.yaml +1 -1
  43. package/.aether/commands/verify-castes.yaml +3 -3
  44. package/.aether/commands/watch.yaml +15 -15
  45. package/.aether/docs/command-playbooks/build-complete.md +7 -7
  46. package/.aether/docs/command-playbooks/build-context.md +11 -11
  47. package/.aether/docs/command-playbooks/build-full.md +69 -69
  48. package/.aether/docs/command-playbooks/build-prep.md +9 -9
  49. package/.aether/docs/command-playbooks/build-verify.md +27 -27
  50. package/.aether/docs/command-playbooks/build-wave.md +38 -38
  51. package/.aether/docs/command-playbooks/continue-advance.md +28 -28
  52. package/.aether/docs/command-playbooks/continue-finalize.md +12 -12
  53. package/.aether/docs/command-playbooks/continue-full.md +47 -47
  54. package/.aether/docs/command-playbooks/continue-gates.md +18 -18
  55. package/.aether/docs/command-playbooks/continue-verify.md +10 -10
  56. package/.aether/templates/colony-state-template.json +1 -0
  57. package/.aether/utils/oracle/oracle-stop-hook.sh +896 -0
  58. package/.claude/commands/ant/archaeology.md +2 -2
  59. package/.claude/commands/ant/chaos.md +4 -4
  60. package/.claude/commands/ant/colonize.md +9 -9
  61. package/.claude/commands/ant/council.md +6 -6
  62. package/.claude/commands/ant/data-clean.md +3 -3
  63. package/.claude/commands/ant/dream.md +2 -2
  64. package/.claude/commands/ant/entomb.md +8 -8
  65. package/.claude/commands/ant/export-signals.md +2 -2
  66. package/.claude/commands/ant/feedback.md +4 -4
  67. package/.claude/commands/ant/flag.md +2 -2
  68. package/.claude/commands/ant/flags.md +4 -4
  69. package/.claude/commands/ant/focus.md +4 -4
  70. package/.claude/commands/ant/help.md +1 -1
  71. package/.claude/commands/ant/history.md +1 -1
  72. package/.claude/commands/ant/import-signals.md +2 -2
  73. package/.claude/commands/ant/init.md +16 -16
  74. package/.claude/commands/ant/insert-phase.md +1 -1
  75. package/.claude/commands/ant/interpret.md +2 -2
  76. package/.claude/commands/ant/lay-eggs.md +2 -2
  77. package/.claude/commands/ant/maturity.md +2 -2
  78. package/.claude/commands/ant/memory-details.md +1 -1
  79. package/.claude/commands/ant/migrate-state.md +1 -1
  80. package/.claude/commands/ant/oracle.md +43 -42
  81. package/.claude/commands/ant/organize.md +3 -3
  82. package/.claude/commands/ant/patrol.md +6 -6
  83. package/.claude/commands/ant/pause-colony.md +5 -5
  84. package/.claude/commands/ant/phase.md +1 -1
  85. package/.claude/commands/ant/pheromones.md +1 -1
  86. package/.claude/commands/ant/plan.md +8 -8
  87. package/.claude/commands/ant/quick.md +4 -4
  88. package/.claude/commands/ant/redirect.md +4 -4
  89. package/.claude/commands/ant/resume-colony.md +5 -5
  90. package/.claude/commands/ant/resume.md +17 -29
  91. package/.claude/commands/ant/run.md +7 -7
  92. package/.claude/commands/ant/seal.md +25 -25
  93. package/.claude/commands/ant/skill-create.md +2 -2
  94. package/.claude/commands/ant/status.md +14 -14
  95. package/.claude/commands/ant/swarm.md +13 -13
  96. package/.claude/commands/ant/tunnels.md +4 -4
  97. package/.claude/commands/ant/update.md +1 -1
  98. package/.claude/commands/ant/verify-castes.md +2 -2
  99. package/.claude/commands/ant/watch.md +8 -8
  100. package/.opencode/commands/ant/archaeology.md +1 -1
  101. package/.opencode/commands/ant/build.md +45 -45
  102. package/.opencode/commands/ant/chaos.md +3 -3
  103. package/.opencode/commands/ant/colonize.md +8 -8
  104. package/.opencode/commands/ant/continue.md +40 -40
  105. package/.opencode/commands/ant/council.md +5 -5
  106. package/.opencode/commands/ant/data-clean.md +2 -2
  107. package/.opencode/commands/ant/dream.md +1 -1
  108. package/.opencode/commands/ant/entomb.md +3 -3
  109. package/.opencode/commands/ant/export-signals.md +1 -1
  110. package/.opencode/commands/ant/feedback.md +2 -2
  111. package/.opencode/commands/ant/flag.md +1 -1
  112. package/.opencode/commands/ant/flags.md +3 -3
  113. package/.opencode/commands/ant/focus.md +2 -2
  114. package/.opencode/commands/ant/import-signals.md +1 -1
  115. package/.opencode/commands/ant/init.md +16 -16
  116. package/.opencode/commands/ant/insert-phase.md +1 -1
  117. package/.opencode/commands/ant/interpret.md +1 -1
  118. package/.opencode/commands/ant/lay-eggs.md +2 -2
  119. package/.opencode/commands/ant/maturity.md +1 -1
  120. package/.opencode/commands/ant/memory-details.md +1 -1
  121. package/.opencode/commands/ant/oracle.md +34 -40
  122. package/.opencode/commands/ant/organize.md +2 -2
  123. package/.opencode/commands/ant/patrol.md +6 -6
  124. package/.opencode/commands/ant/pause-colony.md +2 -2
  125. package/.opencode/commands/ant/pheromones.md +1 -1
  126. package/.opencode/commands/ant/plan.md +6 -6
  127. package/.opencode/commands/ant/quick.md +4 -4
  128. package/.opencode/commands/ant/redirect.md +2 -2
  129. package/.opencode/commands/ant/resume-colony.md +4 -4
  130. package/.opencode/commands/ant/resume.md +5 -17
  131. package/.opencode/commands/ant/run.md +7 -7
  132. package/.opencode/commands/ant/seal.md +8 -8
  133. package/.opencode/commands/ant/skill-create.md +2 -2
  134. package/.opencode/commands/ant/status.md +10 -10
  135. package/.opencode/commands/ant/tunnels.md +3 -3
  136. package/.opencode/commands/ant/verify-castes.md +1 -1
  137. package/.opencode/commands/ant/watch.md +7 -7
  138. package/bin/cli.js +118 -3
  139. package/bin/lib/binary-downloader.js +267 -0
  140. package/bin/lib/update-transaction.js +19 -0
  141. package/bin/lib/version-gate.js +179 -0
  142. package/package.json +1 -1
@@ -309,7 +309,7 @@ Excavation date: {YYYY-MM-DD}
309
309
 
310
310
  Run using the Bash tool with description "Logging excavation activity...":
311
311
  ```bash
312
- bash .aether/aether-utils.sh activity-log "ARCHAEOLOGY" "Archaeologist" "Excavated {target}: {total_commits} commits, {author_count} authors, {findings_count} findings, {tech_debt_count} debt markers"
312
+ aether activity-log "ARCHAEOLOGY" "Archaeologist" "Excavated {target}: {total_commits} commits, {author_count} authors, {findings_count} findings, {tech_debt_count} debt markers"
313
313
  ```
314
314
 
315
315
  Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
@@ -317,7 +317,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
317
317
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
318
318
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
319
319
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
320
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
320
+ aether print-next-up
321
321
  ```
322
322
 
323
323
  ## Investigation Guidelines
@@ -295,12 +295,12 @@ After outputting the JSON report, iterate through the chaos report scenarios. Fo
295
295
 
296
296
  ```bash
297
297
  # For each scenario where status == "finding" AND severity is "CRITICAL" or "HIGH":
298
- bash .aether/aether-utils.sh flag-add "blocker" "{scenario.title}" "{scenario.description}" "chaos-standalone" {current_phase_number}
298
+ aether flag-add --severity "blocker" --title "{scenario.title}" --description "{scenario.description}" --source "chaos-standalone" --phase {current_phase_number}
299
299
  ```
300
300
 
301
301
  Log each flag creation by running using the Bash tool with description "Logging chaos flag...":
302
302
  ```bash
303
- bash .aether/aether-utils.sh activity-log "FLAG" "Chaos Ant" "Created blocker: {scenario.title}"
303
+ aether activity-log "FLAG" "Chaos Ant" "Created blocker: {scenario.title}"
304
304
  ```
305
305
 
306
306
  The `{current_phase_number}` comes from the colony state loaded in Step 1 (`.aether/data/COLONY_STATE.json` field `current_phase`).
@@ -311,7 +311,7 @@ The `{current_phase_number}` comes from the colony state loaded in Step 1 (`.aet
311
311
 
312
312
  Run using the Bash tool with description "Logging chaos activity...":
313
313
  ```bash
314
- bash .aether/aether-utils.sh activity-log "CHAOS" "Chaos Ant" "Resilience test on {target}: {findings_count} finding(s) ({critical} critical, {high} high, {medium} medium, {low} low), {resilient_count} resilient"
314
+ aether activity-log "CHAOS" "Chaos Ant" "Resilience test on {target}: {findings_count} finding(s) ({critical} critical, {high} high, {medium} medium, {low} low), {resilient_count} resilient"
315
315
  ```
316
316
 
317
317
  Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
@@ -319,7 +319,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
319
319
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
320
320
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
321
321
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
322
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
322
+ aether print-next-up
323
323
  ```
324
324
 
325
325
  ## Investigation Guidelines
@@ -109,14 +109,14 @@ Before dispatching surveyors, check for existing survey files and capture sessio
109
109
  SURVEY_START=$(date +%s)
110
110
 
111
111
  # Check for stale survey files
112
- stale_check=$(bash .aether/aether-utils.sh session-verify-fresh --command survey "" "$SURVEY_START")
112
+ stale_check=$(aether session-verify-fresh --command survey "" "$SURVEY_START")
113
113
  has_stale=$(echo "$stale_check" | jq -r '.stale | length')
114
114
  has_fresh=$(echo "$stale_check" | jq -r '.fresh | length')
115
115
 
116
116
  if [[ "$has_stale" -gt 0 ]] || [[ "$has_fresh" -gt 0 ]]; then
117
117
  # Found existing survey files
118
118
  if [[ "$force_resurvey" == "true" ]]; then
119
- bash .aether/aether-utils.sh session-clear --command survey
119
+ aether session-clear --command survey
120
120
  echo "Cleared existing survey files for fresh territory mapping"
121
121
  else
122
122
  echo "Found existing territory survey. Use --force-resurvey to remap."
@@ -127,15 +127,15 @@ fi
127
127
 
128
128
  Generate unique names for the 4 Surveyor Ants (each name must be captured separately):
129
129
  ```bash
130
- bash .aether/aether-utils.sh generate-ant-name "surveyor"
131
- bash .aether/aether-utils.sh generate-ant-name "surveyor"
132
- bash .aether/aether-utils.sh generate-ant-name "surveyor"
133
- bash .aether/aether-utils.sh generate-ant-name "surveyor"
130
+ aether generate-ant-name --caste "surveyor"
131
+ aether generate-ant-name --caste "surveyor"
132
+ aether generate-ant-name --caste "surveyor"
133
+ aether generate-ant-name --caste "surveyor"
134
134
  ```
135
135
 
136
136
  Log the dispatches (consolidated - fire-and-forget logging):
137
137
  ```bash
138
- bash .aether/aether-utils.sh spawn-log "Queen" "surveyor" "{provisions_name}" "Mapping provisions and trails" && bash .aether/aether-utils.sh spawn-log "Queen" "surveyor" "{nest_name}" "Mapping nest structure" && bash .aether/aether-utils.sh spawn-log "Queen" "surveyor" "{disciplines_name}" "Mapping disciplines and sentinels" && bash .aether/aether-utils.sh spawn-log "Queen" "surveyor" "{pathogens_name}" "Identifying pathogens"
138
+ aether spawn-log --name "Queen" --caste "surveyor" --id "{provisions_name}" --description "Mapping provisions and trails" && aether spawn-log --name "Queen" --caste "surveyor" --id "{nest_name}" --description "Mapping nest structure" && aether spawn-log --name "Queen" --caste "surveyor" --id "{disciplines_name}" --description "Mapping disciplines and sentinels" && aether spawn-log --name "Queen" --caste "surveyor" --id "{pathogens_name}" --description "Identifying pathogens"
139
139
  ```
140
140
 
141
141
  **Spawn 4 Surveyor Ants in parallel using the Task tool:**
@@ -179,7 +179,7 @@ If any documents are missing, note which ones in the output.
179
179
 
180
180
  Verify that all survey files were created after the session start:
181
181
  ```bash
182
- verify_result=$(bash .aether/aether-utils.sh session-verify-fresh --command survey "" "$SURVEY_START")
182
+ verify_result=$(aether session-verify-fresh --command survey "" "$SURVEY_START")
183
183
  fresh_count=$(echo "$verify_result" | jq -r '.fresh | length')
184
184
 
185
185
  if [[ "$fresh_count" -lt 7 ]]; then
@@ -255,5 +255,5 @@ Generate the state-based Next Up block:
255
255
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
256
256
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
257
257
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
258
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
258
+ aether print-next-up
259
259
  ```
@@ -25,7 +25,7 @@ When `--deliberate "<proposal>"` is passed, run a structured Advocate/Challenger
25
25
 
26
26
  Run using the Bash tool with description "Checking deliberation budget...":
27
27
  ```bash
28
- bash .aether/aether-utils.sh council-budget-check
28
+ aether council-budget-check
29
29
  ```
30
30
 
31
31
  Parse result. If `allowed` is `false`:
@@ -41,7 +41,7 @@ Stop here.
41
41
 
42
42
  Run using the Bash tool with description "Opening deliberation...":
43
43
  ```bash
44
- bash .aether/aether-utils.sh council-deliberate --proposal "<proposal>"
44
+ aether council-deliberate --proposal "<proposal>"
45
45
  ```
46
46
 
47
47
  Capture `deliberation_id` from `result.id`.
@@ -84,7 +84,7 @@ Capture the advocate's argument as `advocate_argument`.
84
84
 
85
85
  Record the argument:
86
86
  ```bash
87
- bash .aether/aether-utils.sh council-advocate \
87
+ aether council-advocate \
88
88
  --deliberation-id "<deliberation_id>" \
89
89
  --argument "<advocate_argument>"
90
90
  ```
@@ -122,7 +122,7 @@ Capture the challenger's argument as `challenger_argument`.
122
122
 
123
123
  Record the argument:
124
124
  ```bash
125
- bash .aether/aether-utils.sh council-challenger \
125
+ aether council-challenger \
126
126
  --deliberation-id "<deliberation_id>" \
127
127
  --argument "<challenger_argument>"
128
128
  ```
@@ -165,7 +165,7 @@ Parse the JSON response. Capture `synthesis` and `recommendation`.
165
165
 
166
166
  Record the sage synthesis:
167
167
  ```bash
168
- bash .aether/aether-utils.sh council-sage \
168
+ aether council-sage \
169
169
  --deliberation-id "<deliberation_id>" \
170
170
  --synthesis "<synthesis>" \
171
171
  --recommendation "<recommendation>"
@@ -502,6 +502,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
502
502
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
503
503
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
504
504
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
505
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
505
+ aether print-next-up
506
506
  ```
507
507
 
@@ -17,7 +17,7 @@ You are the **Queen Ant Colony**. Run the data cleaner to scan for and remove te
17
17
 
18
18
  Run using the Bash tool with description "Scanning colony data for test artifacts...":
19
19
  ```bash
20
- bash .aether/aether-utils.sh data-clean --dry-run
20
+ aether data-clean --dry-run
21
21
  ```
22
22
 
23
23
  Display the output to the user. This shows artifact counts per data file without modifying anything.
@@ -46,7 +46,7 @@ If user says no, display "No changes made." and skip to Step 5.
46
46
 
47
47
  If user confirmed, run using the Bash tool with description "Removing test artifacts...":
48
48
  ```bash
49
- bash .aether/aether-utils.sh data-clean --confirm
49
+ aether data-clean --confirm
50
50
  ```
51
51
 
52
52
  ### Step 4: Summary
@@ -76,6 +76,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
76
76
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
77
77
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
78
78
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
79
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
79
+ aether print-next-up
80
80
  ```
81
81
 
@@ -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 \
@@ -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
 
@@ -89,7 +89,7 @@ Stop here. Do not proceed.
89
89
 
90
90
  Run using the Bash tool with description "Initializing QUEEN.md...":
91
91
  ```
92
- bash .aether/aether-utils.sh queen-init
92
+ aether queen-init
93
93
  ```
94
94
 
95
95
  Parse the JSON result:
@@ -102,7 +102,7 @@ This step is non-blocking -- proceed regardless of outcome.
102
102
 
103
103
  Run the scan via Bash tool:
104
104
  ```bash
105
- scan_result=$(bash .aether/aether-utils.sh init-research 2>/dev/null)
105
+ scan_result=$(aether init-research 2>/dev/null)
106
106
  scan_data=$(echo "$scan_result" | jq '.result')
107
107
  ```
108
108
 
@@ -273,14 +273,14 @@ Only reached after user approval. ALL file writes happen here.
273
273
 
274
274
  1. Write charter content via:
275
275
  ```bash
276
- 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}"
277
277
  ```
278
278
 
279
279
  2. Auto-apply approved pheromone suggestions (see pheromone auto-apply below).
280
280
 
281
281
  3. Update the goal field in COLONY_STATE.json in-place using the state API:
282
282
  ```bash
283
- 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)"
284
284
  ```
285
285
 
286
286
  4. **Verify the write** — read back and confirm goal is set:
@@ -298,7 +298,7 @@ if [[ "$verify_goal" == "null" || -z "$verify_goal" ]]; then
298
298
  fi
299
299
  ```
300
300
 
301
- 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}"`
302
302
 
303
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.
304
304
 
@@ -356,12 +356,12 @@ for template in pheromones midden learning-observations; do
356
356
  done
357
357
  ```
358
358
 
359
- 8. Run `bash .aether/aether-utils.sh context-update init "{approved_intent}"`
360
- 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`
361
361
  10. Register repo (silent on failure):
362
362
  ```bash
363
- domain_tags=$(bash .aether/aether-utils.sh domain-detect 2>/dev/null | jq -r '.result.tags // ""' || echo "")
364
- 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
365
365
  cp ~/.aether/version.json .aether/version.json 2>/dev/null || true
366
366
  ```
367
367
  11. Seed QUEEN.md from hive (non-blocking):
@@ -371,10 +371,10 @@ domain_tags=$(jq -r --arg repo "$(pwd)" \
371
371
  "$HOME/.aether/registry.json" 2>/dev/null || echo "")
372
372
  seed_args="queen-seed-from-hive --limit 5"
373
373
  [[ -n "$domain_tags" ]] && seed_args="$seed_args --domain $domain_tags"
374
- seed_result=$(bash .aether/aether-utils.sh $seed_args 2>/dev/null || echo '{}')
374
+ seed_result=$(aether $seed_args 2>/dev/null || echo '{}')
375
375
  seeded_count=$(echo "$seed_result" | jq -r '.result.seeded // 0' 2>/dev/null || echo "0")
376
376
  ```
377
- 12. Run `bash .aether/aether-utils.sh session-init "{session_id}" "{approved_intent}"`
377
+ 12. Run `aether session-init "{session_id}" "{approved_intent}"`
378
378
 
379
379
  **Pheromone auto-apply (referenced by both re-init and fresh init paths above):**
380
380
 
@@ -382,7 +382,7 @@ If approved pheromone suggestions exist (the user kept them in the prompt and di
382
382
 
383
383
  For each approved pheromone suggestion, call:
384
384
  ```bash
385
- 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
386
386
  ```
387
387
 
388
388
  Implementation notes:
@@ -440,21 +440,21 @@ Import ALL available data types (per D-09 -- no cherry-picking):
440
440
  ```bash
441
441
  # Import pheromones (per D-09)
442
442
  if [[ -f "$latest_chamber/pheromones.xml" ]]; then
443
- 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}')
444
444
  pher_imported=$(echo "$pher_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
445
445
  echo "Pheromones: ${pher_imported} signal(s) imported"
446
446
  fi
447
447
 
448
448
  # Import wisdom to queen-wisdom.json (per D-09)
449
449
  if [[ -f "$latest_chamber/queen-wisdom.xml" ]]; then
450
- 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}')
451
451
  wis_imported=$(echo "$wis_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
452
452
  echo "Wisdom: ${wis_imported} entries(s) imported to queen-wisdom.json"
453
453
  fi
454
454
 
455
455
  # Import registry lineage (per D-09)
456
456
  if [[ -f "$latest_chamber/colony-registry.xml" ]]; then
457
- 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}')
458
458
  reg_imported=$(echo "$reg_import" | jq -r '.result.imported // 0' 2>/dev/null || echo "0")
459
459
  echo "Registry: ${reg_imported} colon(ies) lineage imported"
460
460
  fi
@@ -474,7 +474,7 @@ Skip silently -- proceed directly to Step 8 without any mention of import (per D
474
474
  If `.aether/utils/clash-detect.sh` exists, run:
475
475
 
476
476
  ```bash
477
- bash .aether/aether-utils.sh clash-setup --install 2>/dev/null || true
477
+ aether clash-setup --install 2>/dev/null || true
478
478
  ```
479
479
 
480
480
  This installs the PreToolUse hook that prevents conflicting edits across worktrees.
@@ -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