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
@@ -84,7 +84,7 @@ body_opencode: |
84
84
 
85
85
  ### Step 1.5: Load State and Show Resumption Context
86
86
 
87
- Run using Bash tool: `bash .aether/aether-utils.sh load-state`
87
+ Run using Bash tool: `aether load-state`
88
88
 
89
89
  If successful and goal is not null:
90
90
  1. Extract current_phase from state
@@ -99,7 +99,7 @@ body_opencode: |
99
99
  - Read .aether/HANDOFF.md for additional context
100
100
  - Remove .aether/HANDOFF.md after display (cleanup)
101
101
 
102
- Run: `bash .aether/aether-utils.sh unload-state` to release lock.
102
+ Run: `aether unload-state` to release lock.
103
103
 
104
104
  **Error handling:**
105
105
  - If E_FILE_NOT_FOUND: "No colony initialized. Run /ant:init first." and stop
@@ -125,7 +125,7 @@ body_opencode: |
125
125
 
126
126
  Run:
127
127
  ```bash
128
- survey_check=$(bash .aether/aether-utils.sh survey-verify 2>/dev/null || true)
128
+ survey_check=$(aether survey-verify 2>/dev/null || true)
129
129
  survey_docs=$(ls -1 .aether/data/survey/*.md 2>/dev/null | wc -l | tr -d ' ')
130
130
  survey_latest=$(ls -t .aether/data/survey/*.md 2>/dev/null | head -1)
131
131
  if [[ -n "$survey_latest" ]]; then
@@ -234,7 +234,7 @@ body_opencode: |
234
234
  3. **If spawning Probe:**
235
235
 
236
236
  a. Generate Probe name and dispatch:
237
- Run using the Bash tool with description "Generating Probe name...": `probe_name=$(bash .aether/aether-utils.sh generate-ant-name "probe") && bash .aether/aether-utils.sh spawn-log "Queen" "probe" "$probe_name" "Coverage improvement: ${coverage_percent}%" && echo "{\"name\":\"$probe_name\"}"`
237
+ Run using the Bash tool with description "Generating Probe name...": `probe_name=$(aether generate-ant-name --caste "probe") && aether spawn-log --name "Queen" --caste "probe" --id "$probe_name" --description "Coverage improvement: ${coverage_percent}%" && echo "{\"name\":\"$probe_name\"}"`
238
238
 
239
239
  b. Display:
240
240
  ```
@@ -264,10 +264,10 @@ body_opencode: |
264
264
  f. Parse Probe JSON output and log completion:
265
265
  Extract: `tests_added`, `coverage.lines`, `coverage.branches`, `coverage.functions`, `edge_cases_discovered`
266
266
 
267
- Run using the Bash tool with description "Logging Probe completion...": `bash .aether/aether-utils.sh spawn-complete "$probe_name" "completed" "{probe_summary}"`
267
+ Run using the Bash tool with description "Logging Probe completion...": `aether spawn-complete --id "$probe_name" --status "completed" --summary "{probe_summary}"`
268
268
 
269
269
  g. Log findings to midden:
270
- Run using the Bash tool with description "Logging Probe findings to midden...": `bash .aether/aether-utils.sh midden-write "coverage" "Probe generated tests, coverage: ${coverage_lines}%/${coverage_branches}%/${coverage_functions}%" "probe"`
270
+ Run using the Bash tool with description "Logging Probe findings to midden...": `aether midden-write "coverage" "Probe generated tests, coverage: ${coverage_lines}%/${coverage_branches}%/${coverage_functions}%" "probe"`
271
271
 
272
272
  4. **NON-BLOCKING continuation:**
273
273
  Display Probe findings summary:
@@ -416,8 +416,8 @@ body_opencode: |
416
416
  **CRITICAL:** Do NOT proceed to Step 1.7. Do NOT advance the phase.
417
417
  Log the violation:
418
418
  ```bash
419
- bash .aether/aether-utils.sh activity-log "BLOCKED" "colony" "Spawn gate failed: {task_count} tasks, 0 spawns"
420
- bash .aether/aether-utils.sh error-flag-pattern "no-spawn-violation" "Prime Worker completed phase without spawning specialists" "critical"
419
+ aether activity-log "BLOCKED" "colony" "Spawn gate failed: {task_count} tasks, 0 spawns"
420
+ aether error-flag-pattern "no-spawn-violation" "Prime Worker completed phase without spawning specialists" "critical"
421
421
  ```
422
422
 
423
423
  **HARD REJECTION - If watcher_count == 0 (no testing separation):**
@@ -458,7 +458,7 @@ body_opencode: |
458
458
  Scan all modified/created files for known anti-patterns. This catches recurring bugs before they reach production.
459
459
 
460
460
  ```bash
461
- bash .aether/aether-utils.sh check-antipattern "{file_path}"
461
+ aether check-antipattern "{file_path}"
462
462
  ```
463
463
 
464
464
  Run for each file in `files_created` and `files_modified` from Prime Worker output.
@@ -567,7 +567,7 @@ body_opencode: |
567
567
  Run using the Bash tool with description "Establishing test baseline...": `test_output_before=$(npm test 2>&1 || echo "TEST_FAILED") && tests_passing_before=$(echo "$test_output_before" | grep -oE '[0-9]+ passing' | grep -oE '[0-9]+' || echo "0") && echo "Baseline: $tests_passing_before tests passing"`
568
568
 
569
569
  b. **Generate Weaver name and dispatch:**
570
- Run using the Bash tool with description "Generating Weaver name...": `weaver_name=$(bash .aether/aether-utils.sh generate-ant-name "weaver") && bash .aether/aether-utils.sh spawn-log "Queen" "weaver" "$weaver_name" "Proactive refactoring" && echo "{\"name\":\"$weaver_name\"}"`
570
+ Run using the Bash tool with description "Generating Weaver name...": `weaver_name=$(aether generate-ant-name --caste "weaver") && aether spawn-log --name "Queen" --caste "weaver" --id "$weaver_name" --description "Proactive refactoring" && echo "{\"name\":\"$weaver_name\"}"`
571
571
 
572
572
  c. **Display:**
573
573
  ```
@@ -613,10 +613,10 @@ body_opencode: |
613
613
  ```
614
614
 
615
615
  g. **Log completion:**
616
- Run using the Bash tool with description "Logging Weaver completion...": `bash .aether/aether-utils.sh spawn-complete "$weaver_name" "$weaver_status" "Refactoring $weaver_status"`
616
+ Run using the Bash tool with description "Logging Weaver completion...": `aether spawn-complete --id "$weaver_name" --status "$weaver_status" --summary "Refactoring $weaver_status"`
617
617
 
618
618
  h. **Log to midden:**
619
- Run using the Bash tool with description "Logging refactoring activity to midden...": `bash .aether/aether-utils.sh midden-write "refactoring" "Weaver refactored files, complexity before/after: ${complexity_before}/${complexity_after}" "weaver"`
619
+ Run using the Bash tool with description "Logging refactoring activity to midden...": `aether midden-write "refactoring" "Weaver refactored files, complexity before/after: ${complexity_before}/${complexity_after}" "weaver"`
620
620
 
621
621
  5. **Display completion:**
622
622
  ```
@@ -645,7 +645,7 @@ body_opencode: |
645
645
  **If package.json exists:**
646
646
 
647
647
  1. Generate Gatekeeper name and log spawn:
648
- Run using the Bash tool with description "Generating Gatekeeper name...": `gatekeeper_name=$(bash .aether/aether-utils.sh generate-ant-name "gatekeeper") && bash .aether/aether-utils.sh spawn-log "Queen" "gatekeeper" "$gatekeeper_name" "Supply chain security audit" && echo "{\"name\":\"$gatekeeper_name\"}"`
648
+ Run using the Bash tool with description "Generating Gatekeeper name...": `gatekeeper_name=$(aether generate-ant-name --caste "gatekeeper") && aether spawn-log --name "Queen" --caste "gatekeeper" --id "$gatekeeper_name" --description "Supply chain security audit" && echo "{\"name\":\"$gatekeeper_name\"}"`
649
649
 
650
650
  2. Display:
651
651
  ```
@@ -667,7 +667,7 @@ body_opencode: |
667
667
  5. Parse Gatekeeper JSON output and log completion:
668
668
  Extract: `security.critical`, `security.high`, `status`
669
669
 
670
- Run using the Bash tool with description "Logging Gatekeeper completion...": `bash .aether/aether-utils.sh spawn-complete "$gatekeeper_name" "completed" "{gatekeeper_summary}"`
670
+ Run using the Bash tool with description "Logging Gatekeeper completion...": `aether spawn-complete --id "$gatekeeper_name" --status "completed" --summary "{gatekeeper_summary}"`
671
671
 
672
672
  **Gate Decision Logic:**
673
673
 
@@ -695,7 +695,7 @@ body_opencode: |
695
695
  Security warnings logged to midden for later review.
696
696
  Proceeding with caution...
697
697
  ```
698
- Run using the Bash tool with description "Logging high-severity warnings...": `bash .aether/aether-utils.sh midden-write "security" "High CVEs found: $high_count" "gatekeeper"`
698
+ Run using the Bash tool with description "Logging high-severity warnings...": `aether midden-write "security" "High CVEs found: $high_count" "gatekeeper"`
699
699
  Continue to Step 1.9.
700
700
 
701
701
  - **If clean (no critical or high):**
@@ -709,7 +709,7 @@ body_opencode: |
709
709
  **Code quality audit -- runs on every `/ant:continue` for consistent coverage.**
710
710
 
711
711
  1. Generate Auditor name and log spawn:
712
- Run using the Bash tool with description "Generating Auditor name...": `auditor_name=$(bash .aether/aether-utils.sh generate-ant-name "auditor") && bash .aether/aether-utils.sh spawn-log "Queen" "auditor" "$auditor_name" "Code quality audit" && echo "{\"name\":\"$auditor_name\"}"`
712
+ Run using the Bash tool with description "Generating Auditor name...": `auditor_name=$(aether generate-ant-name --caste "auditor") && aether spawn-log --name "Queen" --caste "auditor" --id "$auditor_name" --description "Code quality audit" && echo "{\"name\":\"$auditor_name\"}"`
713
713
 
714
714
  2. Display:
715
715
  ```
@@ -734,7 +734,7 @@ body_opencode: |
734
734
  6. Parse Auditor JSON output and log completion:
735
735
  Extract: `findings.critical`, `findings.high`, `findings.medium`, `findings.low`, `findings.info`, `overall_score`, `dimensions_audited`
736
736
 
737
- Run using the Bash tool with description "Logging Auditor completion...": `bash .aether/aether-utils.sh spawn-complete "$auditor_name" "completed" "{auditor_summary}"`
737
+ Run using the Bash tool with description "Logging Auditor completion...": `aether spawn-complete --id "$auditor_name" --status "completed" --summary "{auditor_summary}"`
738
738
 
739
739
  **Gate Decision Logic:**
740
740
 
@@ -756,7 +756,7 @@ body_opencode: |
756
756
 
757
757
  The phase will NOT advance with critical quality issues.
758
758
  ```
759
- Run using the Bash tool with description "Logging critical quality block...": `bash .aether/aether-utils.sh error-flag-pattern "auditor-critical-findings" "$critical_count critical quality issues found" "critical"`
759
+ Run using the Bash tool with description "Logging critical quality block...": `aether error-flag-pattern "auditor-critical-findings" "$critical_count critical quality issues found" "critical"`
760
760
  **CRITICAL:** Do NOT proceed to Step 1.10. Stop here.
761
761
 
762
762
  - **Else if `overall_score < 60`:**
@@ -774,7 +774,7 @@ body_opencode: |
774
774
 
775
775
  The phase will NOT advance with quality score below 60.
776
776
  ```
777
- Run using the Bash tool with description "Logging quality score block...": `bash .aether/aether-utils.sh error-flag-pattern "auditor-quality-score" "Score $overall_score below threshold 60" "critical"`
777
+ Run using the Bash tool with description "Logging quality score block...": `aether error-flag-pattern "auditor-quality-score" "Score $overall_score below threshold 60" "critical"`
778
778
  **CRITICAL:** Do NOT proceed to Step 1.10. Stop here.
779
779
 
780
780
  - **Else if `findings.high > 0`:**
@@ -787,7 +787,7 @@ body_opencode: |
787
787
  Quality warnings logged to midden for later review.
788
788
  Proceeding with caution...
789
789
  ```
790
- Run using the Bash tool with description "Logging high-quality warnings...": `bash .aether/aether-utils.sh midden-write "quality" "High severity issues: $high_count (score: $overall_score)" "auditor"`
790
+ Run using the Bash tool with description "Logging high-quality warnings...": `aether midden-write "quality" "High severity issues: $high_count (score: $overall_score)" "auditor"`
791
791
  Continue to Step 1.10.
792
792
 
793
793
  - **If clean (score >= 60, no critical):**
@@ -833,7 +833,7 @@ body_opencode: |
833
833
 
834
834
  **CRITICAL:** Do NOT proceed. Log the violation:
835
835
  ```bash
836
- bash .aether/aether-utils.sh error-flag-pattern "fabricated-tdd" "Prime Worker reported TDD metrics without creating test files" "critical"
836
+ aether error-flag-pattern "fabricated-tdd" "Prime Worker reported TDD metrics without creating test files" "critical"
837
837
  ```
838
838
 
839
839
  **If tests_added == 0 or test files exist matching claims:**
@@ -879,7 +879,7 @@ body_opencode: |
879
879
 
880
880
  Use AskUserQuestion to get issue details. Log to errors.records:
881
881
  ```bash
882
- bash .aether/aether-utils.sh error-add "runtime" "critical" "{user_description}" {phase}
882
+ aether error-add "runtime" "critical" "{user_description}" {phase}
883
883
  ```
884
884
 
885
885
  Do NOT proceed to Step 2.
@@ -915,12 +915,12 @@ body_opencode: |
915
915
 
916
916
  First, auto-resolve any flags eligible for resolution now that verification has passed:
917
917
  ```bash
918
- bash .aether/aether-utils.sh flag-auto-resolve "build_pass"
918
+ aether flag-auto-resolve "build_pass"
919
919
  ```
920
920
 
921
921
  Then check for remaining blocking flags:
922
922
  ```bash
923
- bash .aether/aether-utils.sh flag-check-blockers {current_phase}
923
+ aether flag-check-blockers {current_phase}
924
924
  ```
925
925
 
926
926
  Parse result for `blockers`, `issues`, and `notes` counts.
@@ -1022,7 +1022,7 @@ body_opencode: |
1022
1022
 
1023
1023
  Run using the Bash tool with description "Recording learning observations...":
1024
1024
  ```bash
1025
- colony_name=$(bash .aether/aether-utils.sh colony-name 2>/dev/null | jq -r '.result.name // ""')
1025
+ colony_name=$(aether colony-name 2>/dev/null | jq -r '.result.name // ""')
1026
1026
  [[ -z "$colony_name" ]] && colony_name="unknown"
1027
1027
 
1028
1028
  # Get learnings from the current phase
@@ -1032,7 +1032,7 @@ body_opencode: |
1032
1032
  echo "$current_phase_learnings" | jq -r '.learnings[]?.claim // empty' 2>/dev/null | while read -r claim; do
1033
1033
  if [[ -n "$claim" ]]; then
1034
1034
  # Default wisdom_type to "pattern" (threshold: 3 observations)
1035
- bash .aether/aether-utils.sh memory-capture "learning" "$claim" "pattern" "worker:continue" 2>/dev/null || true
1035
+ aether memory-capture "learning" "$claim" "pattern" "worker:continue" 2>/dev/null || true
1036
1036
  fi
1037
1037
  done
1038
1038
  echo "Recorded observations for threshold tracking"
@@ -1108,7 +1108,7 @@ body_opencode: |
1108
1108
  Write COLONY_STATE.json.
1109
1109
 
1110
1110
  Validate the state file:
1111
- Run using the Bash tool with description "Validating colony state...": `bash .aether/aether-utils.sh validate-state colony`
1111
+ Run using the Bash tool with description "Validating colony state...": `aether validate-state colony`
1112
1112
 
1113
1113
  ### Step 2.1: Auto-Emit Phase Pheromones (SILENT)
1114
1114
 
@@ -1126,7 +1126,7 @@ body_opencode: |
1126
1126
  phase_feedback="Phase $phase_id ($phase_name) completed. Key patterns: {brief summary of 1-3 learnings from Step 2}"
1127
1127
  # Fallback if no learnings: "Phase $phase_id ($phase_name) completed without notable patterns."
1128
1128
 
1129
- bash .aether/aether-utils.sh pheromone-write FEEDBACK "$phase_feedback" \
1129
+ aether pheromone-write --type FEEDBACK --content "$phase_feedback" \
1130
1130
  --strength 0.6 \
1131
1131
  --source "worker:continue" \
1132
1132
  --reason "Auto-emitted on phase advance: captures what worked and what was learned" \
@@ -1146,7 +1146,7 @@ body_opencode: |
1146
1146
  For each pattern returned by the above query, emit a REDIRECT signal:
1147
1147
 
1148
1148
  ```bash
1149
- bash .aether/aether-utils.sh pheromone-write REDIRECT "$pattern_text" \
1149
+ aether pheromone-write --type REDIRECT --content "$pattern_text" \
1150
1150
  --strength 0.7 \
1151
1151
  --source "system" \
1152
1152
  --reason "Auto-emitted: error pattern recurred across 2+ phases" \
@@ -1156,7 +1156,7 @@ body_opencode: |
1156
1156
  Also capture each recurring pattern as a resolution candidate:
1157
1157
 
1158
1158
  ```bash
1159
- bash .aether/aether-utils.sh memory-capture \
1159
+ aether memory-capture \
1160
1160
  "resolution" \
1161
1161
  "$pattern_text" \
1162
1162
  "pattern" \
@@ -1169,7 +1169,7 @@ body_opencode: |
1169
1169
 
1170
1170
  After auto-emission, expire all signals with `expires_at == "phase_end"`:
1171
1171
 
1172
- Run using the Bash tool with description "Maintaining pheromone memory...": `bash .aether/aether-utils.sh pheromone-expire --phase-end-only 2>/dev/null && bash .aether/aether-utils.sh eternal-init 2>/dev/null`
1172
+ Run using the Bash tool with description "Maintaining pheromone memory...": `aether pheromone-expire --phase-end-only 2>/dev/null && aether eternal-init 2>/dev/null`
1173
1173
 
1174
1174
  ### Step 2.1.5: Check for Promotion Proposals
1175
1175
 
@@ -1179,7 +1179,7 @@ body_opencode: |
1179
1179
 
1180
1180
  1. **Check for proposals:**
1181
1181
  ```bash
1182
- proposals=$(bash .aether/aether-utils.sh learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
1182
+ proposals=$(aether learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
1183
1183
  proposal_count=$(echo "$proposals" | jq '.proposals | length')
1184
1184
  ```
1185
1185
 
@@ -1189,7 +1189,7 @@ body_opencode: |
1189
1189
 
1190
1190
  ```bash
1191
1191
  if [[ "$proposal_count" -gt 0 ]]; then
1192
- bash .aether/aether-utils.sh learning-approve-proposals
1192
+ aether learning-approve-proposals
1193
1193
  fi
1194
1194
  # If no proposals, silently skip without notice
1195
1195
  ```
@@ -1258,7 +1258,7 @@ body_opencode: |
1258
1258
  **Step 2.3.1: Collect plan data**
1259
1259
 
1260
1260
  ```bash
1261
- bash .aether/aether-utils.sh changelog-collect-plan-data "{phase_identifier}" "{plan_number}"
1261
+ aether changelog-collect-plan-data "{phase_identifier}" "{plan_number}"
1262
1262
  ```
1263
1263
 
1264
1264
  Parse the returned JSON to extract `files`, `decisions`, `worked`, and `requirements` arrays.
@@ -1274,7 +1274,7 @@ body_opencode: |
1274
1274
  **Step 2.3.2: Append changelog entry**
1275
1275
 
1276
1276
  ```bash
1277
- bash .aether/aether-utils.sh changelog-append \
1277
+ aether changelog-append \
1278
1278
  "$(date +%Y-%m-%d)" \
1279
1279
  "{phase_identifier}" \
1280
1280
  "{plan_number}" \
@@ -1296,7 +1296,7 @@ body_opencode: |
1296
1296
 
1297
1297
  1. **Generate the commit message:**
1298
1298
  ```bash
1299
- bash .aether/aether-utils.sh generate-commit-message "milestone" {phase_id} "{phase_name}" "{one_line_summary}"
1299
+ aether generate-commit-message --type "milestone" --phase {phase_id} --subject "{phase_name}" "{one_line_summary}"
1300
1300
  ```
1301
1301
  Parse the returned JSON to extract `message` and `files_changed`.
1302
1302
 
@@ -1397,18 +1397,18 @@ body_opencode: |
1397
1397
 
1398
1398
  **Log the activity:**
1399
1399
  ```bash
1400
- bash .aether/aether-utils.sh context-update activity "continue" "Phase {prev_id} completed, advanced to {next_id}" "---"
1400
+ aether context-update activity "continue" "Phase {prev_id} completed, advanced to {next_id}" "---"
1401
1401
  ```
1402
1402
 
1403
1403
  **Update the phase:**
1404
1404
  ```bash
1405
- bash .aether/aether-utils.sh context-update update-phase {next_id} "{next_phase_name}" "YES" "Phase advanced, ready to build"
1405
+ aether context-update update-phase {next_id} "{next_phase_name}" "YES" "Phase advanced, ready to build"
1406
1406
  ```
1407
1407
 
1408
1408
  **Log any decisions from this session:**
1409
1409
  If any architectural decisions were made during verification, also run:
1410
1410
  ```bash
1411
- bash .aether/aether-utils.sh context-update decision "{decision_description}" "{rationale}" "Queen"
1411
+ aether context-update decision "{decision_description}" "{rationale}" "Queen"
1412
1412
  ```
1413
1413
 
1414
1414
  ### Step 2.7: Project Completion
@@ -1480,5 +1480,5 @@ body_opencode: |
1480
1480
 
1481
1481
  Update the session tracking file to enable `/ant:resume` after context clear:
1482
1482
 
1483
- Run using the Bash tool with description "Saving session state...": `bash .aether/aether-utils.sh session-update "/ant:continue" "/ant:build {next_id}" "Phase {prev_id} completed, advanced to Phase {next_id}"`
1483
+ Run using the Bash tool with description "Saving session state...": `aether session-update --command "/ant:continue" --worker "/ant:build {next_id}" --summary "Phase {prev_id} completed, advanced to Phase {next_id}"`
1484
1484
 
@@ -22,7 +22,7 @@ body: |
22
22
 
23
23
  Run using the Bash tool with description "Checking deliberation budget...":
24
24
  ```bash
25
- bash .aether/aether-utils.sh council-budget-check
25
+ aether council-budget-check
26
26
  ```
27
27
 
28
28
  Parse result. If `allowed` is `false`:
@@ -38,7 +38,7 @@ body: |
38
38
 
39
39
  Run using the Bash tool with description "Opening deliberation...":
40
40
  ```bash
41
- bash .aether/aether-utils.sh council-deliberate --proposal "<proposal>"
41
+ aether council-deliberate --proposal "<proposal>"
42
42
  ```
43
43
 
44
44
  Capture `deliberation_id` from `result.id`.
@@ -81,7 +81,7 @@ body: |
81
81
 
82
82
  Record the argument:
83
83
  ```bash
84
- bash .aether/aether-utils.sh council-advocate \
84
+ aether council-advocate \
85
85
  --deliberation-id "<deliberation_id>" \
86
86
  --argument "<advocate_argument>"
87
87
  ```
@@ -119,7 +119,7 @@ body: |
119
119
 
120
120
  Record the argument:
121
121
  ```bash
122
- bash .aether/aether-utils.sh council-challenger \
122
+ aether council-challenger \
123
123
  --deliberation-id "<deliberation_id>" \
124
124
  --argument "<challenger_argument>"
125
125
  ```
@@ -162,7 +162,7 @@ body: |
162
162
 
163
163
  Record the sage synthesis:
164
164
  ```bash
165
- bash .aether/aether-utils.sh council-sage \
165
+ aether council-sage \
166
166
  --deliberation-id "<deliberation_id>" \
167
167
  --synthesis "<synthesis>" \
168
168
  --recommendation "<recommendation>"
@@ -504,6 +504,6 @@ body: |
504
504
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
505
505
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
506
506
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
507
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
507
+ aether print-next-up
508
508
  ```
509
509
  {{/claude}}
@@ -16,7 +16,7 @@ body: |
16
16
 
17
17
  Run using the Bash tool with description "Scanning colony data for test artifacts...":
18
18
  ```bash
19
- bash .aether/aether-utils.sh data-clean --dry-run
19
+ aether data-clean --dry-run
20
20
  ```
21
21
 
22
22
  Display the output to the user. This shows artifact counts per data file without modifying anything.
@@ -45,7 +45,7 @@ body: |
45
45
 
46
46
  If user confirmed, run using the Bash tool with description "Removing test artifacts...":
47
47
  ```bash
48
- bash .aether/aether-utils.sh data-clean --confirm
48
+ aether data-clean --confirm
49
49
  ```
50
50
 
51
51
  ### Step 4: Summary
@@ -75,6 +75,6 @@ body: |
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
  {{/claude}}
@@ -234,7 +234,7 @@ body: |
234
234
  Run using the Bash tool with description "Logging dream activity...":
235
235
  {{/claude}}
236
236
  ```bash
237
- bash .aether/aether-utils.sh activity-log "DREAM" "Dreamer" "Dream session: {N} observations, {concerns} concerns, {pheromones} pheromone suggestions"
237
+ aether activity-log "DREAM" "Dreamer" "Dream session: {N} observations, {concerns} concerns, {pheromones} pheromone suggestions"
238
238
  ```
239
239
 
240
240
  {{#claude}}
@@ -243,7 +243,7 @@ body: |
243
243
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
244
244
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
245
245
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
246
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
246
+ aether print-next-up
247
247
  ```
248
248
 
249
249
  {{/claude}}
@@ -126,7 +126,7 @@ body_claude: |
126
126
 
127
127
  ```bash
128
128
  # Check for pending proposals
129
- proposals=$(bash .aether/aether-utils.sh learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
129
+ proposals=$(aether learning-check-promotion 2>/dev/null || echo '{"proposals":[]}')
130
130
  proposal_count=$(echo "$proposals" | jq '.proposals | length')
131
131
 
132
132
  if [[ "$proposal_count" -gt 0 ]]; then
@@ -140,7 +140,7 @@ body_claude: |
140
140
  echo ""
141
141
 
142
142
  # Run approval workflow (blocking)
143
- bash .aether/aether-utils.sh learning-approve-proposals
143
+ aether learning-approve-proposals
144
144
 
145
145
  echo ""
146
146
  echo "Wisdom review complete. Proceeding with entombment..."
@@ -202,12 +202,12 @@ body_claude: |
202
202
  ```bash
203
203
  queen_file=".aether/QUEEN.md"
204
204
  if [[ ! -f "$queen_file" ]]; then
205
- init_result=$(bash .aether/aether-utils.sh queen-init 2>/dev/null || echo '{"ok":false}')
205
+ init_result=$(aether queen-init 2>/dev/null || echo '{"ok":false}')
206
206
  init_ok=$(echo "$init_result" | jq -r '.ok // false')
207
207
  if [[ "$init_ok" == "true" ]]; then
208
208
  created=$(echo "$init_result" | jq -r '.result.created // false')
209
209
  if [[ "$created" == "true" ]]; then
210
- bash .aether/aether-utils.sh activity-log "CREATED" "Queen" "Initialized QUEEN.md for wisdom storage"
210
+ aether activity-log "CREATED" "Queen" "Initialized QUEEN.md for wisdom storage"
211
211
  fi
212
212
  fi
213
213
  fi
@@ -245,7 +245,7 @@ body_claude: |
245
245
 
246
246
  Create the chamber:
247
247
  ```bash
248
- bash .aether/aether-utils.sh chamber-create \
248
+ aether chamber-create \
249
249
  ".aether/chambers/$chamber_name" \
250
250
  ".aether/data/COLONY_STATE.json" \
251
251
  "$goal" \
@@ -295,7 +295,7 @@ body_claude: |
295
295
 
296
296
  ```bash
297
297
  chamber_dir=".aether/chambers/$chamber_name"
298
- xml_result=$(bash .aether/aether-utils.sh colony-archive-xml "$chamber_dir/colony-archive.xml" 2>&1)
298
+ xml_result=$(aether colony-archive-xml --output "$chamber_dir/colony-archive.xml" 2>&1)
299
299
  xml_ok=$(echo "$xml_result" | jq -r '.ok // false' 2>/dev/null)
300
300
 
301
301
  if [[ "$xml_ok" != "true" ]]; then
@@ -323,7 +323,7 @@ body_claude: |
323
323
 
324
324
  Run verification:
325
325
  ```bash
326
- bash .aether/aether-utils.sh chamber-verify ".aether/chambers/$chamber_name"
326
+ aether chamber-verify --path ".aether/chambers/$chamber_name"
327
327
  ```
328
328
 
329
329
  If verification fails, display error and stop:
@@ -341,7 +341,7 @@ body_claude: |
341
341
 
342
342
  Write colony summary to eternal memory:
343
343
  ```bash
344
- bash .aether/aether-utils.sh eternal-init # idempotent
344
+ aether eternal-init # idempotent
345
345
  eternal_file="$HOME/.aether/eternal/memory.json"
346
346
  if [[ -f "$eternal_file" ]]; then
347
347
  colony_entry=$(jq -n \
@@ -679,7 +679,7 @@ body_opencode: |
679
679
 
680
680
  Create the chamber:
681
681
  ```bash
682
- bash .aether/aether-utils.sh chamber-create \
682
+ aether chamber-create \
683
683
  ".aether/chambers/{chamber_name}" \
684
684
  ".aether/data/COLONY_STATE.json" \
685
685
  "{goal}" \
@@ -697,7 +697,7 @@ body_opencode: |
697
697
 
698
698
  ```bash
699
699
  chamber_dir=".aether/chambers/$chamber_name"
700
- xml_result=$(bash .aether/aether-utils.sh colony-archive-xml "$chamber_dir/colony-archive.xml" 2>&1)
700
+ xml_result=$(aether colony-archive-xml --output "$chamber_dir/colony-archive.xml" 2>&1)
701
701
  xml_ok=$(echo "$xml_result" | jq -r '.ok // false' 2>/dev/null)
702
702
 
703
703
  if [[ "$xml_ok" != "true" ]]; then
@@ -733,7 +733,7 @@ body_opencode: |
733
733
 
734
734
  Run verification:
735
735
  ```bash
736
- bash .aether/aether-utils.sh chamber-verify ".aether/chambers/{chamber_name}"
736
+ aether chamber-verify --path ".aether/chambers/{chamber_name}"
737
737
  ```
738
738
 
739
739
  If verification fails, display error and stop:
@@ -20,7 +20,7 @@ body: |
20
20
 
21
21
  Run using the Bash tool with description "Exporting pheromone signals to XML...":
22
22
  ```bash
23
- bash .aether/aether-utils.sh pheromone-export-xml "<output_path>"
23
+ aether pheromone-export-xml --output "<output_path>"
24
24
  ```
25
25
 
26
26
  Parse the returned JSON:
@@ -59,6 +59,6 @@ body: |
59
59
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
60
60
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
61
61
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
62
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
62
+ aether print-next-up
63
63
  ```
64
64
  {{/claude}}
@@ -32,7 +32,7 @@ body: |
32
32
  {{#claude}}
33
33
  {{TOOL_PREFIX "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 @@ body: |
59
59
 
60
60
  {{TOOL_PREFIX "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
  {{TOOL_PREFIX "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
@@ -119,8 +119,8 @@ body: |
119
119
 
120
120
  **Write pheromone signal and update context:**
121
121
  ```bash
122
- bash .aether/aether-utils.sh pheromone-write FEEDBACK "$normalized_args" --strength 0.7 --reason "User feedback guidance" 2>/dev/null || true
123
- bash .aether/aether-utils.sh context-update constraint feedback "$normalized_args" "user" 2>/dev/null || true
122
+ aether pheromone-write --type FEEDBACK --content "$normalized_args" --strength 0.7 --reason "User feedback guidance" 2>/dev/null || true
123
+ aether context-update --section constraint --key feedback --content "$normalized_args" "user" 2>/dev/null || true
124
124
  ```
125
125
 
126
126
  ### Step 3: Confirm
@@ -153,6 +153,6 @@ body: |
153
153
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
154
154
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
155
155
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
156
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
156
+ aether print-next-up
157
157
  ```
158
158
  {{/claude}}
@@ -48,7 +48,7 @@ body: |
48
48
 
49
49
  {{TOOL_PREFIX "Raising colony flag..."}}
50
50
  ```bash
51
- bash .aether/aether-utils.sh flag-add "{type}" "{title}" "{description}" "manual" {phase_or_null}
51
+ aether flag-add --severity "{type}" --title "{title}" --description "{description}" --source "manual" --phase {phase_or_null}
52
52
  ```
53
53
 
54
54
  Parse the result for the flag ID.
@@ -144,7 +144,7 @@ body: |
144
144
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
145
145
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
146
146
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
147
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
147
+ aether print-next-up
148
148
  ```
149
149
  {{/claude}}
150
150
 
@@ -32,7 +32,7 @@ body: |
32
32
  If `--resolve` was provided:
33
33
  {{/opencode}}
34
34
  ```bash
35
- bash .aether/aether-utils.sh flag-resolve "{flag_id}" "{resolution_message}"
35
+ aether flag-resolve --id "{flag_id}" --message "{resolution_message}"
36
36
  ```
37
37
  Output:
38
38
  ```
@@ -49,7 +49,7 @@ body: |
49
49
  If `--ack` was provided:
50
50
  {{/opencode}}
51
51
  ```bash
52
- bash .aether/aether-utils.sh flag-acknowledge "{flag_id}"
52
+ aether flag-acknowledge --id "{flag_id}"
53
53
  ```
54
54
  Output:
55
55
  ```
@@ -68,7 +68,7 @@ body: |
68
68
  Run:
69
69
  {{/opencode}}
70
70
  ```bash
71
- bash .aether/aether-utils.sh flag-list {options}
71
+ aether flag-list {options}
72
72
  ```
73
73
 
74
74
  Parse result for flags array.
@@ -153,7 +153,7 @@ body: |
153
153
  state=$(jq -r '.state // "IDLE"' .aether/data/COLONY_STATE.json)
154
154
  current_phase=$(jq -r '.current_phase // 0' .aether/data/COLONY_STATE.json)
155
155
  total_phases=$(jq -r '.plan.phases | length' .aether/data/COLONY_STATE.json)
156
- bash .aether/aether-utils.sh print-next-up "$state" "$current_phase" "$total_phases"
156
+ aether print-next-up
157
157
  ```
158
158
  {{/claude}}
159
159