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
@@ -20,7 +20,7 @@ Drill-down view of accumulated colony wisdom, pending promotions, and recent fai
20
20
 
21
21
  Run using the Bash tool with description "Loading colony memory...":
22
22
  ```bash
23
- bash .aether/aether-utils.sh memory-metrics
23
+ aether memory-metrics
24
24
  ```
25
25
 
26
26
  ### Step 2: Display Wisdom (from QUEEN.md)
@@ -166,6 +166,6 @@ Generate the state-based Next Up block by running using the Bash tool with descr
166
166
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
167
167
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
168
168
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
169
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
169
+ aether print-next-up
170
170
  ```
171
171
 
@@ -44,10 +44,10 @@ Oracle peering into the depths...
44
44
 
45
45
  ### Step 0b: Stop Oracle
46
46
 
47
- Create the stop signal file by running using the Bash tool with description "Stopping oracle research...":
47
+ Stop any active Oracle research by running using the Bash tool with description "Stopping oracle research...":
48
48
 
49
49
  ```bash
50
- mkdir -p .aether/oracle && touch .aether/oracle/.stop
50
+ mkdir -p .aether/oracle && touch .aether/oracle/.stop && rm -f .aether/oracle/.loop-active
51
51
  ```
52
52
 
53
53
  Output:
@@ -55,8 +55,11 @@ Output:
55
55
  ```
56
56
  🔮🐜 Oracle Stop Signal Sent
57
57
 
58
- Created .aether/oracle/.stop
59
- The research loop will halt at the end of the current iteration.
58
+ Removed loop state files.
59
+ - .aether/oracle/.stop (signal for legacy tmux loop)
60
+ - .aether/oracle/.loop-active (signal for in-session loop)
61
+
62
+ Any active research will halt at the next iteration boundary.
60
63
 
61
64
  To check final results: /ant:oracle status
62
65
  ```
@@ -409,14 +412,14 @@ ORACLE_START=$(date +%s)
409
412
 
410
413
  Check for stale files by running using the Bash tool with description "Checking for stale oracle session...":
411
414
  ```bash
412
- stale_check=$(bash .aether/aether-utils.sh session-verify-fresh --command oracle "" "$ORACLE_START")
415
+ stale_check=$(aether session-verify-fresh --command oracle "" "$ORACLE_START")
413
416
  has_stale=$(echo "$stale_check" | jq -r '.stale | length')
414
417
  has_progress=$(echo "$stale_check" | jq -r '.fresh | length')
415
418
 
416
419
  if [[ "$has_stale" -gt 0 ]] || [[ "$has_progress" -gt 0 ]]; then
417
420
  # Found existing oracle session
418
421
  if [[ "$force_research" == "true" ]]; then
419
- bash .aether/aether-utils.sh session-clear --command oracle
422
+ aether session-clear --command oracle
420
423
  echo "Cleared stale oracle session for fresh research"
421
424
  else
422
425
  # Existing session found - prompt user
@@ -482,7 +485,7 @@ Use the Write tool to create `.aether/oracle/state.json`:
482
485
  For each focus area string from Question 7, run using the Bash tool with description "Emitting focus area pheromones...":
483
486
 
484
487
  ```bash
485
- bash .aether/aether-utils.sh pheromone-write FOCUS "$focus_area" \
488
+ aether pheromone-write --type FOCUS --content "$focus_area" \
486
489
  --strength 0.8 --source "oracle:wizard" \
487
490
  --reason "Focus area set in oracle wizard" --ttl "24h" 2>/dev/null || true
488
491
  ```
@@ -581,7 +584,7 @@ Next investigation: <text of q1, the first question>
581
584
 
582
585
  Verify that state.json, plan.json, gaps.md, synthesis.md, and research-plan.md were created successfully by running using the Bash tool with description "Verifying oracle files...":
583
586
  ```bash
584
- verify_result=$(bash .aether/aether-utils.sh session-verify-fresh --command oracle "" "$ORACLE_START")
587
+ verify_result=$(aether session-verify-fresh --command oracle "" "$ORACLE_START")
585
588
  fresh_count=$(echo "$verify_result" | jq -r '.fresh | length')
586
589
 
587
590
  if [[ "$fresh_count" -lt 5 ]]; then
@@ -593,7 +596,7 @@ Proceed to Step 3.
593
596
 
594
597
  ---
595
598
 
596
- ### Step 3: Launch
599
+ ### Step 3: Launch (In-Session Loop)
597
600
 
598
601
  Output the research configuration summary, showing the sub-questions from plan.json:
599
602
 
@@ -617,61 +620,59 @@ Output the research configuration summary, showing the sub-questions from plan.j
617
620
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
618
621
  ```
619
622
 
620
- Now launch the loop. Try tmux first, fall back to manual.
621
-
622
- **Try tmux** by running using the Bash tool with description "Launching oracle in tmux...":
623
+ **Create the loop marker file** by running using the Bash tool with description "Creating oracle loop marker...":
623
624
 
624
625
  ```bash
625
- tmux new-session -d -s oracle "cd $(pwd) && bash .aether/utils/oracle/oracle.sh; echo ''; echo '🔮🐜 Oracle loop finished. Press any key to close.'; read -n1" 2>/dev/null && echo "TMUX_OK" || echo "TMUX_FAIL"
626
+ SESSION_ID="${CLAUDE_SESSION_ID:-$(uuidgen 2>/dev/null || date +%s)}"
627
+ MAX_IT=<max_iterations from wizard>
628
+ TARGET_CONF=<target_confidence from wizard>
629
+ cat > .aether/oracle/.loop-active <<MARKER
630
+ ---
631
+ iteration: 0
632
+ max_iterations: $MAX_IT
633
+ session_id: $SESSION_ID
634
+ phase: survey
635
+ target_confidence: $TARGET_CONF
636
+ synthesis_done: false
637
+ oracle_md_path: .aether/utils/oracle/oracle.md
638
+ ---
639
+ Oracle research loop active
640
+ MARKER
641
+ echo "LOOP_MARKER_CREATED"
626
642
  ```
627
643
 
628
- **If TMUX_OK:**
644
+ Output:
629
645
 
630
646
  ```
631
- 🔮🐜 Oracle Launched
647
+ 🔮🐜 Oracle Research Started (In-Session Loop)
632
648
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
633
649
 
634
- The Oracle is researching in a background tmux session.
650
+ The Oracle is researching IN THIS SESSION.
651
+
652
+ The Stop hook will keep the loop running automatically:
653
+ - Each iteration researches one question
654
+ - Phases advance: survey -> investigate -> synthesize -> verify
655
+ - Loop ends when confidence reaches {target_confidence}% or max iterations hit
656
+ - A final synthesis pass produces the research report
635
657
 
636
- 👁️ Watch live: tmux attach -t oracle
637
658
  📊 Check status: /ant:oracle status
638
659
  🛑 Stop early: /ant:oracle stop
639
660
 
640
661
  Research progress visible at .aether/oracle/research-plan.md
641
- The Oracle will stop when it reaches {target_confidence}% confidence
642
- or completes {max_iterations} iterations.
643
662
 
644
663
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
645
664
 
646
- You can keep working. The Oracle runs independently.
665
+ You can continue chatting. The Oracle loop runs between your messages.
647
666
  ```
648
667
 
649
- Stop here.
650
-
651
- **If TMUX_FAIL** (tmux not installed or error):
652
-
653
- ```
654
- 🔮 Ready to Launch
655
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
656
-
657
- tmux not available. Run this in a separate terminal:
658
-
659
- cd {current_working_directory}
660
- bash .aether/utils/oracle/oracle.sh
661
-
662
- Then come back here:
663
- 📊 Check status: /ant:oracle status
664
- 🛑 Stop early: /ant:oracle stop
665
-
666
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
667
- ```
668
+ **Now begin the first iteration.** Read `.aether/utils/oracle/oracle.md` and start the survey phase research immediately.
669
+ Target the first untouched question from plan.json. Update state files as you go.
670
+ When you try to stop, the Stop hook will check progress and continue the loop if needed.
668
671
 
669
672
  Generate the state-based Next Up block by running using the Bash tool with description "Generating Next Up suggestions...":
670
673
  ```bash
671
674
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
672
675
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
673
676
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
674
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
677
+ aether print-next-up
675
678
  ```
676
-
677
- Stop here.
@@ -33,7 +33,7 @@ From COLONY_STATE.json, extract:
33
33
 
34
34
  Run using the Bash tool with description "Loading active pheromones...":
35
35
  ```bash
36
- bash .aether/aether-utils.sh pheromone-read
36
+ aether pheromone-read
37
37
  ```
38
38
 
39
39
  Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
@@ -209,7 +209,7 @@ Next:
209
209
 
210
210
  Use the Bash tool with description "Logging hygiene activity..." to run:
211
211
  ```
212
- bash .aether/aether-utils.sh activity-log "COMPLETE" "queen" "Hygiene report generated"
212
+ aether activity-log "COMPLETE" "queen" "Hygiene report generated"
213
213
  ```
214
214
 
215
215
  Display persistence confirmation:
@@ -228,5 +228,5 @@ Generate the state-based Next Up block by running using the Bash tool with descr
228
228
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
229
229
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
230
230
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
231
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
231
+ aether print-next-up
232
232
  ```
@@ -249,12 +249,12 @@ Run these commands in parallel using the Bash tool:
249
249
 
250
250
  **Flags check:**
251
251
  ```bash
252
- bash .aether/aether-utils.sh flag-list 2>/dev/null || echo '{"result":{"flags":[]}}'
252
+ aether flag-list --json 2>/dev/null || echo '{"result":{"flags":[]}}'
253
253
  ```
254
254
 
255
255
  **Midden check:**
256
256
  ```bash
257
- bash .aether/aether-utils.sh midden-recent-failures 2>/dev/null || echo '{"result":{"failures":[]}}'
257
+ aether midden-recent-failures 2>/dev/null || echo '{"result":{"failures":[]}}'
258
258
  ```
259
259
 
260
260
  **Parse flag results:**
@@ -332,12 +332,12 @@ Display: `Checking colony health...`
332
332
 
333
333
  **Expire stale pheromones:**
334
334
  ```bash
335
- bash .aether/aether-utils.sh pheromone-expire 2>/dev/null || true
335
+ aether pheromone-expire 2>/dev/null || true
336
336
  ```
337
337
 
338
338
  **Load memory metrics:**
339
339
  ```bash
340
- bash .aether/aether-utils.sh memory-metrics 2>/dev/null || echo '{}'
340
+ aether memory-metrics 2>/dev/null || echo '{}'
341
341
  ```
342
342
 
343
343
  **Load instincts:**
@@ -357,7 +357,7 @@ From COLONY_STATE.json `events`:
357
357
 
358
358
  **Count pheromone signals:**
359
359
  ```bash
360
- bash .aether/aether-utils.sh pheromone-count 2>/dev/null || echo '{"result":{"count":0}}'
360
+ aether pheromone-count 2>/dev/null || echo '{"result":{"count":0}}'
361
361
  ```
362
362
 
363
363
  Display:
@@ -586,7 +586,7 @@ Next:
586
586
 
587
587
  Run using the Bash tool:
588
588
  ```bash
589
- bash .aether/aether-utils.sh activity-log "COMPLETE" "queen" "Colony audit completed - {recommendation}"
589
+ aether activity-log "COMPLETE" "queen" "Colony audit completed - {recommendation}"
590
590
  ```
591
591
 
592
592
  Display persistence confirmation:
@@ -25,7 +25,7 @@ If `goal` is null, output `No colony initialized. Nothing to pause.` and stop.
25
25
 
26
26
  Run using the Bash tool with description "Loading active pheromones...":
27
27
  ```bash
28
- bash .aether/aether-utils.sh pheromone-read
28
+ aether pheromone-read
29
29
  ```
30
30
 
31
31
  Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
@@ -117,7 +117,7 @@ Store this as `ai_description`. If no clear description emerges, leave empty (wi
117
117
 
118
118
  **4. Generate Enhanced Commit Message:**
119
119
  ```bash
120
- bash .aether/aether-utils.sh generate-commit-message "contextual" {current_phase} "{phase_name}" "{ai_description}" {plan_number}
120
+ aether generate-commit-message --type "contextual" --phase {current_phase} --subject "{phase_name}" "{ai_description}" {plan_number}
121
121
  ```
122
122
 
123
123
  Parse the returned JSON to extract `message`, `body`, `files_changed`, `subsystem`, and `scope`.
@@ -173,12 +173,12 @@ Continue to Step 5.
173
173
  Log this pause activity to `.aether/CONTEXT.md` by running using the Bash tool with description "Updating context document...":
174
174
 
175
175
  ```bash
176
- bash .aether/aether-utils.sh context-update activity "pause-colony" "Colony paused — handoff created" "—"
176
+ aether context-update activity "pause-colony" "Colony paused — handoff created" "—"
177
177
  ```
178
178
 
179
179
  Update safe-to-clear status by running using the Bash tool with description "Marking safe to clear...":
180
180
  ```bash
181
- bash .aether/aether-utils.sh context-update safe-to-clear "YES" "Colony paused — safe to /clear, run /ant:resume-colony to continue"
181
+ aether context-update safe-to-clear "YES" "Colony paused — safe to /clear, run /ant:resume-colony to continue"
182
182
  ```
183
183
 
184
184
  ### Step 5: Display Confirmation
@@ -229,5 +229,5 @@ Generate the state-based Next Up block by running using the Bash tool with descr
229
229
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
230
230
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
231
231
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
232
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
232
+ aether print-next-up
233
233
  ```
@@ -75,7 +75,7 @@ After displaying phase details, generate the state-based Next Up block by runnin
75
75
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
76
76
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
77
77
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
78
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
78
+ aether print-next-up
79
79
  ```
80
80
 
81
81
 
@@ -112,7 +112,7 @@ Stop here.
112
112
 
113
113
  Run using the Bash tool with description "Displaying pheromones...":
114
114
  ```bash
115
- bash .aether/aether-utils.sh pheromone-display "{subcommand or 'all'}"
115
+ aether pheromone-display "{subcommand or 'all'}"
116
116
  ```
117
117
 
118
118
  The output will be the formatted pheromone table.
@@ -39,7 +39,7 @@ Stop here.
39
39
 
40
40
  ### Step 1.5: Load State and Show Resumption Context
41
41
 
42
- Run using Bash tool: `bash .aether/aether-utils.sh load-state`
42
+ Run using Bash tool: `aether load-state`
43
43
 
44
44
  If successful and goal is not null:
45
45
  1. Extract current_phase from state
@@ -54,7 +54,7 @@ If .aether/HANDOFF.md exists (detected in load-state output):
54
54
  - Read .aether/HANDOFF.md for additional context
55
55
  - Remove .aether/HANDOFF.md after display (cleanup)
56
56
 
57
- Run: `bash .aether/aether-utils.sh unload-state` to release lock.
57
+ Run: `aether unload-state` to release lock.
58
58
 
59
59
  **Error handling:**
60
60
  - If E_FILE_NOT_FOUND: "No colony initialized. Run /ant:init first." and stop
@@ -90,7 +90,7 @@ Select planning depth (prompt user if not explicitly provided):
90
90
 
91
91
  Run using the Bash tool with description "Loading compact planning context...":
92
92
  ```bash
93
- bash .aether/aether-utils.sh context-capsule --compact --json 2>/dev/null
93
+ aether context-capsule --compact --json 2>/dev/null
94
94
  ```
95
95
 
96
96
  If JSON is valid and `.ok == true`, extract `.result.prompt_section` into `context_capsule_prompt`.
@@ -172,7 +172,7 @@ Investigate domain knowledge for each phase before the planning loop begins. Thi
172
172
  **1. Retrieve hive wisdom for research priming:**
173
173
 
174
174
  ```bash
175
- hive_context=$(bash .aether/aether-utils.sh hive-read --limit 5 --format text 2>/dev/null)
175
+ hive_context=$(aether hive-read --limit 5 --format text 2>/dev/null)
176
176
  ```
177
177
 
178
178
  Parse the JSON result to extract `.result.text` as `hive_text`. If command fails or returns empty, set `hive_text = ""`.
@@ -574,7 +574,7 @@ if [[ "$verify_phases" -lt 1 || "$verify_timestamp" == "null" || "$verify_state"
574
574
  echo "ERROR: Plan write verification failed (phases=$verify_phases, generated_at=$verify_timestamp, state=$verify_state)"
575
575
  echo "Attempting retry write..."
576
576
  # Retry: re-read, update, write via state API
577
- bash .aether/aether-utils.sh state-write "$(jq --argjson phases "$(echo '$PLAN_JSON' | jq '.plan.phases')" --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" '.plan.phases = $phases | .plan.generated_at = $ts | .state = "READY"' .aether/data/COLONY_STATE.json)"
577
+ aether state-write "$(jq --argjson phases "$(echo '$PLAN_JSON' | jq '.plan.phases')" --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" '.plan.phases = $phases | .plan.generated_at = $ts | .state = "READY"' .aether/data/COLONY_STATE.json)"
578
578
  verify_phases=$(jq '.plan.phases | length' .aether/data/COLONY_STATE.json)
579
579
  if [[ "$verify_phases" -lt 1 ]]; then
580
580
  echo "FATAL: Retry write also failed. Plan was not persisted."
@@ -585,7 +585,7 @@ fi
585
585
  echo "Plan verified: $verify_phases phases, generated_at=$verify_timestamp, state=$verify_state"
586
586
  ```
587
587
 
588
- Log: `bash .aether/aether-utils.sh activity-log "PLAN_COMPLETE" "queen" "Plan finalized with {confidence}% confidence"`
588
+ Log: `aether activity-log "PLAN_COMPLETE" "queen" "Plan finalized with {confidence}% confidence"`
589
589
 
590
590
  Update watch-status.txt:
591
591
  ```
@@ -604,7 +604,7 @@ Ready to build.
604
604
  Update the session tracking file to enable `/ant:resume` after context clear:
605
605
 
606
606
  ```bash
607
- bash .aether/aether-utils.sh session-update "/ant:plan" "/ant:build 1" "Plan generated with {confidence}% confidence, {N} phases"
607
+ aether session-update --command "/ant:plan" --worker "/ant:build 1" --summary "Plan generated with {confidence}% confidence, {N} phases"
608
608
  ```
609
609
 
610
610
  ### Step 7: Display Plan
@@ -653,7 +653,7 @@ After displaying the plan, generate the state-based Next Up block:
653
653
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
654
654
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
655
655
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
656
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
656
+ aether print-next-up
657
657
  ```
658
658
 
659
659
  ---
@@ -33,7 +33,7 @@ Stop here.
33
33
 
34
34
  Run using the Bash tool with description "Naming scout...":
35
35
  ```bash
36
- bash .aether/aether-utils.sh generate-ant-name "scout"
36
+ aether generate-ant-name --caste "scout"
37
37
  ```
38
38
 
39
39
  Capture the output as `scout_name`.
@@ -48,7 +48,7 @@ Spawning {scout_name} — {query truncated to 50 chars}
48
48
 
49
49
  Run using the Bash tool with description "Dispatching scout...":
50
50
  ```bash
51
- bash .aether/aether-utils.sh spawn-log "Queen" "scout" "{scout_name}" "Quick query: {query}"
51
+ aether spawn-log --name "Queen" --caste "scout" --id "{scout_name}" --description "Quick query: {query}"
52
52
  ```
53
53
 
54
54
 
@@ -82,14 +82,14 @@ Display the Scout's answer directly to the user.
82
82
 
83
83
  Run using the Bash tool with description "Recording scout completion...":
84
84
  ```bash
85
- bash .aether/aether-utils.sh spawn-complete "{scout_name}" "completed" "Quick query answered"
85
+ aether spawn-complete --id "{scout_name}" --status "completed" --summary "Quick query answered"
86
86
  ```
87
87
 
88
88
  ### Step 5: Update Session (lightweight)
89
89
 
90
90
  Run using the Bash tool with description "Updating session...":
91
91
  ```bash
92
- bash .aether/aether-utils.sh session-update "/ant:quick" "" "Quick query: {query truncated to 60 chars}" 2>/dev/null || true
92
+ aether session-update --command "/ant:quick" --worker "" --summary "Quick query: {query truncated to 60 chars}" 2>/dev/null || true
93
93
  ```
94
94
 
95
95
  **NOTE:** This command does NOT:
@@ -32,7 +32,7 @@ If `goal: null` -> "No colony initialized.", stop.
32
32
 
33
33
  Run using the Bash tool with description "Setting colony redirect...":
34
34
  ```bash
35
- bash .aether/aether-utils.sh pheromone-write REDIRECT "<content>" --strength 0.9 --reason "User warned colony away from pattern" --ttl <ttl>
35
+ aether pheromone-write --type REDIRECT --content "<content>" --strength 0.9 --reason "User warned colony away from pattern" --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 redirect "<content>" "user" 2>/dev/null || true
44
+ aether context-update --section constraint --key redirect --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
 
@@ -17,13 +17,13 @@ Parse `$ARGUMENTS`:
17
17
  If `visual_mode` is true, run using the Bash tool with description "Initializing resume display...":
18
18
  ### Step 0.5: Version Check (Non-blocking)
19
19
 
20
- Run using the Bash tool with description "Checking colony version...": `bash .aether/aether-utils.sh version-check-cached 2>/dev/null || true`
20
+ Run using the Bash tool with description "Checking colony version...": `aether version-check-cached 2>/dev/null || true`
21
21
 
22
22
  If the command succeeds and the JSON result contains a non-empty string, display it as a one-line notice. Proceed regardless of outcome.
23
23
 
24
24
  ### Step 1: Load State and Validate
25
25
 
26
- Run using the Bash tool with description "Restoring colony session...": `bash .aether/aether-utils.sh load-state`
26
+ Run using the Bash tool with description "Restoring colony session...": `aether load-state`
27
27
 
28
28
  If successful:
29
29
  1. Parse state from result
@@ -38,7 +38,7 @@ Keep state loaded (don't unload yet) - we'll need it for the full display.
38
38
 
39
39
  Run using the Bash tool with description "Loading active pheromones...":
40
40
  ```bash
41
- bash .aether/aether-utils.sh pheromone-read
41
+ aether pheromone-read
42
42
  ```
43
43
 
44
44
  Use `.result.signals` as the active signal list (already decay-filtered by runtime logic).
@@ -130,7 +130,7 @@ Use Write tool to update COLONY_STATE.json:
130
130
 
131
131
  Use Bash tool with description "Cleaning up handoff file..." to remove HANDOFF.md: `rm -f .aether/HANDOFF.md`
132
132
 
133
- Run using the Bash tool with description "Releasing colony lock...": `bash .aether/aether-utils.sh unload-state` to release lock.
133
+ Run using the Bash tool with description "Releasing colony lock...": `aether unload-state` to release lock.
134
134
 
135
135
  ### Step 7: Next Up
136
136
 
@@ -139,7 +139,7 @@ Generate the state-based Next Up block by running using the Bash tool with descr
139
139
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
140
140
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
141
141
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
142
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
142
+ aether print-next-up
143
143
  ```
144
144
 
145
145
  ---
@@ -26,7 +26,7 @@ Execute the following steps in order when the user runs `/ant:resume`.
26
26
 
27
27
  Run using the Bash tool with description "Restoring colony session..."::
28
28
  ```bash
29
- bash .aether/aether-utils.sh session-read
29
+ aether session-read
30
30
  ```
31
31
 
32
32
  Parse the JSON result.
@@ -96,18 +96,18 @@ Do NOT proceed with stale or fabricated data.
96
96
 
97
97
  ### Step 3: Read Pheromone Signals
98
98
 
99
+ Run using the Bash tool with description "Loading active pheromone signals..."::
100
+ ```bash
101
+ aether pheromone-read all
102
+ ```
99
103
 
100
- Use the Read tool to read `.aether/data/constraints.json`.
101
-
102
- Extract the following top-level keys:
103
- - `focus` array — active focus signals (if key missing, treat as empty array)
104
- - `constraints` array — active redirect/constraint signals (if key missing, treat as empty array)
105
-
106
- If the file is missing: skip silently (no pheromones active).
107
-
108
- Pheromones persist until explicitly cleared — no decay.
104
+ Parse the JSON result. Extract `.result.signals` array.
109
105
 
106
+ - If `ok` is `true` and `.result.signals` is non-empty: store signals for dashboard rendering in Step 8
107
+ - If `ok` is `true` and `.result.signals` is empty: no active pheromones (skip in dashboard)
108
+ - If the command fails or returns an error: skip silently (no pheromones active)
110
109
 
110
+ Note: pheromone-read applies decay calculation automatically. The `effective_strength` field reflects current signal strength after time-based decay. Signals below 0.1 effective strength are already filtered out.
111
111
 
112
112
  ---
113
113
 
@@ -290,15 +290,9 @@ Recent Decisions:
290
290
 
291
291
  {if signals array from Step 3 is not empty:}
292
292
  Active Signals:
293
-
294
- {for each focus signal:}
295
- FOCUS: {focus text}
293
+ {for each signal in signals:}
294
+ {signal.type}: "{signal.content}" [{signal.effective_strength * 100 | floor}%]
296
295
  {end}
297
- {for each constraint signal:}
298
- REDIRECT: {constraint text}
299
- {end}
300
-
301
-
302
296
  {end}
303
297
  ```
304
298
 
@@ -308,7 +302,7 @@ Active Signals:
308
302
 
309
303
  Run using the Bash tool with description "Loading memory health..."::
310
304
  ```bash
311
- bash .aether/aether-utils.sh resume-dashboard
305
+ aether resume-dashboard
312
306
  ```
313
307
 
314
308
  Extract memory_health from the JSON result:
@@ -340,7 +334,7 @@ Session: {session_id}
340
334
 
341
335
  Run using the Bash tool with description "Marking session as resumed..."::
342
336
  ```bash
343
- bash .aether/aether-utils.sh session-mark-resumed
337
+ aether session-mark-resumed
344
338
  ```
345
339
 
346
340
  ### Step 10: Next Up
@@ -350,7 +344,7 @@ Generate the state-based Next Up block by Run using the Bash tool with descripti
350
344
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
351
345
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
352
346
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
353
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
347
+ aether print-next-up
354
348
  ```
355
349
 
356
350
  ---
@@ -361,10 +355,7 @@ bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_pha
361
355
  |-----------|----------|
362
356
  | session.json missing (exists=false) | "No previous session found" — offer /ant:init and /ant:status |
363
357
  | COLONY_STATE.json missing or corrupted | Pause, ask user: start fresh or recover |
364
-
365
- | constraints.json missing | Skip silently (no pheromones) |
366
-
367
-
358
+ | pheromone-read fails | Skip silently (no pheromones) |
368
359
  | CONTEXT.md missing | Fall back to COLONY_STATE.json narrative |
369
360
  | No plan phases, no generated_at | BLOCK — redirect to /ant:plan |
370
361
  | Plan attempted but no phases | BLOCK — redirect to /ant:plan |
@@ -376,10 +367,7 @@ bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_pha
376
367
 
377
368
  ## Key Constraints
378
369
 
379
-
380
- - Use Read tool for COLONY_STATE.json and constraints.json (not bash cat/jq).
381
-
382
-
370
+ - Use Read tool for COLONY_STATE.json (not bash cat/jq). Use Bash tool for pheromone-read (applies decay calculation).
383
371
  - Use Bash tool only for aether-utils.sh commands and git commands
384
372
  - Handle ALL missing/corrupted file cases gracefully
385
373
  - Time-agnostic: restore identically regardless of how long ago the session was