aether-colony 3.1.4 → 3.1.15

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 (124) hide show
  1. package/.claude/commands/ant/archaeology.md +12 -0
  2. package/.claude/commands/ant/build.md +382 -319
  3. package/.claude/commands/ant/chaos.md +23 -1
  4. package/.claude/commands/ant/colonize.md +147 -87
  5. package/.claude/commands/ant/continue.md +213 -23
  6. package/.claude/commands/ant/council.md +22 -0
  7. package/.claude/commands/ant/dream.md +18 -0
  8. package/.claude/commands/ant/entomb.md +178 -6
  9. package/.claude/commands/ant/init.md +87 -13
  10. package/.claude/commands/ant/lay-eggs.md +45 -5
  11. package/.claude/commands/ant/oracle.md +82 -9
  12. package/.claude/commands/ant/organize.md +2 -2
  13. package/.claude/commands/ant/pause-colony.md +86 -28
  14. package/.claude/commands/ant/phase.md +26 -0
  15. package/.claude/commands/ant/plan.md +204 -111
  16. package/.claude/commands/ant/resume-colony.md +23 -1
  17. package/.claude/commands/ant/resume.md +159 -0
  18. package/.claude/commands/ant/seal.md +177 -3
  19. package/.claude/commands/ant/swarm.md +78 -97
  20. package/.claude/commands/ant/verify-castes.md +7 -7
  21. package/.claude/commands/ant/watch.md +17 -0
  22. package/.opencode/agents/aether-ambassador.md +97 -0
  23. package/.opencode/agents/aether-archaeologist.md +91 -0
  24. package/.opencode/agents/aether-architect.md +66 -0
  25. package/.opencode/agents/aether-auditor.md +111 -0
  26. package/.opencode/agents/aether-builder.md +28 -10
  27. package/.opencode/agents/aether-chaos.md +98 -0
  28. package/.opencode/agents/aether-chronicler.md +80 -0
  29. package/.opencode/agents/aether-gatekeeper.md +107 -0
  30. package/.opencode/agents/aether-guardian.md +107 -0
  31. package/.opencode/agents/aether-includer.md +108 -0
  32. package/.opencode/agents/aether-keeper.md +106 -0
  33. package/.opencode/agents/aether-measurer.md +119 -0
  34. package/.opencode/agents/aether-probe.md +91 -0
  35. package/.opencode/agents/aether-queen.md +72 -19
  36. package/.opencode/agents/aether-route-setter.md +85 -0
  37. package/.opencode/agents/aether-sage.md +98 -0
  38. package/.opencode/agents/aether-scout.md +33 -15
  39. package/.opencode/agents/aether-surveyor-disciplines.md +334 -0
  40. package/.opencode/agents/aether-surveyor-nest.md +272 -0
  41. package/.opencode/agents/aether-surveyor-pathogens.md +209 -0
  42. package/.opencode/agents/aether-surveyor-provisions.md +277 -0
  43. package/.opencode/agents/aether-tracker.md +91 -0
  44. package/.opencode/agents/aether-watcher.md +30 -12
  45. package/.opencode/agents/aether-weaver.md +87 -0
  46. package/.opencode/agents/workers.md +1034 -0
  47. package/.opencode/commands/ant/archaeology.md +44 -26
  48. package/.opencode/commands/ant/build.md +327 -295
  49. package/.opencode/commands/ant/chaos.md +32 -4
  50. package/.opencode/commands/ant/colonize.md +119 -93
  51. package/.opencode/commands/ant/continue.md +98 -10
  52. package/.opencode/commands/ant/council.md +28 -0
  53. package/.opencode/commands/ant/dream.md +24 -0
  54. package/.opencode/commands/ant/entomb.md +73 -1
  55. package/.opencode/commands/ant/feedback.md +8 -2
  56. package/.opencode/commands/ant/flag.md +9 -3
  57. package/.opencode/commands/ant/flags.md +8 -2
  58. package/.opencode/commands/ant/focus.md +8 -2
  59. package/.opencode/commands/ant/help.md +12 -0
  60. package/.opencode/commands/ant/init.md +49 -4
  61. package/.opencode/commands/ant/lay-eggs.md +30 -2
  62. package/.opencode/commands/ant/oracle.md +39 -7
  63. package/.opencode/commands/ant/organize.md +9 -3
  64. package/.opencode/commands/ant/pause-colony.md +54 -1
  65. package/.opencode/commands/ant/phase.md +36 -4
  66. package/.opencode/commands/ant/plan.md +225 -117
  67. package/.opencode/commands/ant/redirect.md +8 -2
  68. package/.opencode/commands/ant/resume-colony.md +51 -26
  69. package/.opencode/commands/ant/seal.md +76 -0
  70. package/.opencode/commands/ant/status.md +50 -20
  71. package/.opencode/commands/ant/swarm.md +108 -104
  72. package/.opencode/commands/ant/tunnels.md +107 -2
  73. package/CHANGELOG.md +21 -0
  74. package/README.md +199 -86
  75. package/bin/cli.js +142 -25
  76. package/bin/generate-commands.sh +100 -16
  77. package/bin/lib/caste-colors.js +5 -5
  78. package/bin/lib/errors.js +16 -0
  79. package/bin/lib/file-lock.js +279 -44
  80. package/bin/lib/state-sync.js +206 -23
  81. package/bin/lib/update-transaction.js +206 -24
  82. package/bin/sync-to-runtime.sh +129 -0
  83. package/package.json +2 -2
  84. package/runtime/CONTEXT.md +160 -0
  85. package/runtime/aether-utils.sh +1421 -55
  86. package/runtime/docs/AETHER-2.0-IMPLEMENTATION-PLAN.md +1343 -0
  87. package/runtime/docs/AETHER-PHEROMONE-SYSTEM-MASTER-SPEC.md +2642 -0
  88. package/runtime/docs/PHEROMONE-INJECTION.md +240 -0
  89. package/runtime/docs/PHEROMONE-INTEGRATION.md +192 -0
  90. package/runtime/docs/PHEROMONE-SYSTEM-DESIGN.md +426 -0
  91. package/runtime/docs/README.md +94 -0
  92. package/runtime/docs/VISUAL-OUTPUT-SPEC.md +219 -0
  93. package/runtime/docs/biological-reference.md +272 -0
  94. package/runtime/docs/codebase-review.md +399 -0
  95. package/runtime/docs/command-sync.md +164 -0
  96. package/runtime/docs/implementation-learnings.md +89 -0
  97. package/runtime/docs/known-issues.md +217 -0
  98. package/runtime/docs/namespace.md +148 -0
  99. package/runtime/docs/planning-discipline.md +159 -0
  100. package/runtime/lib/queen-utils.sh +729 -0
  101. package/runtime/model-profiles.yaml +100 -0
  102. package/runtime/recover.sh +136 -0
  103. package/runtime/templates/QUEEN.md.template +79 -0
  104. package/runtime/utils/atomic-write.sh +5 -5
  105. package/runtime/utils/chamber-utils.sh +6 -3
  106. package/runtime/utils/error-handler.sh +200 -0
  107. package/runtime/utils/queen-to-md.xsl +395 -0
  108. package/runtime/utils/spawn-tree.sh +428 -0
  109. package/runtime/utils/spawn-with-model.sh +56 -0
  110. package/runtime/utils/state-loader.sh +215 -0
  111. package/runtime/utils/swarm-display.sh +5 -5
  112. package/runtime/utils/watch-spawn-tree.sh +90 -22
  113. package/runtime/utils/xml-compose.sh +247 -0
  114. package/runtime/utils/xml-core.sh +186 -0
  115. package/runtime/utils/xml-utils.sh +2161 -0
  116. package/runtime/verification-loop.md +1 -1
  117. package/runtime/workers-new-castes.md +516 -0
  118. package/runtime/workers.md +20 -8
  119. package/.aether/visualizations/anthill-stages/brood-stable.txt +0 -26
  120. package/.aether/visualizations/anthill-stages/crowned-anthill.txt +0 -30
  121. package/.aether/visualizations/anthill-stages/first-mound.txt +0 -18
  122. package/.aether/visualizations/anthill-stages/open-chambers.txt +0 -24
  123. package/.aether/visualizations/anthill-stages/sealed-chambers.txt +0 -28
  124. package/.aether/visualizations/anthill-stages/ventilated-nest.txt +0 -27
@@ -7,10 +7,16 @@ You are the **Queen**. Emit a FEEDBACK signal.
7
7
 
8
8
  ## Instructions
9
9
 
10
- The feedback message is: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ The feedback message is: `$normalized_args`
11
17
 
12
18
  ### Step 1: Validate
13
- If `$ARGUMENTS` empty -> show usage: `/ant:feedback <message>`, stop.
19
+ If `$normalized_args` empty -> show usage: `/ant:feedback <message>`, stop.
14
20
  If content > 500 chars -> "Signal content too long (max 500 chars)", stop.
15
21
 
16
22
  ### Step 2: Read + Update State
@@ -7,11 +7,17 @@ You are the **Queen**. Create a project-specific flag.
7
7
 
8
8
  ## Instructions
9
9
 
10
- The flag is: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ The flag is: `$normalized_args`
11
17
 
12
18
  ### Step 1: Parse Arguments
13
19
 
14
- Parse `$ARGUMENTS` for:
20
+ Parse `$normalized_args` for:
15
21
  - `--type` or `-t`: blocker | issue | note (default: issue)
16
22
  - `--phase` or `-p`: phase number (optional)
17
23
  - Remaining text: the flag title/description
@@ -21,7 +27,7 @@ Examples:
21
27
  - `/ant:flag --type blocker "API rate limit hit"` → blocker type
22
28
  - `/ant:flag -t note -p 3 "Consider refactoring later"` → note for phase 3
23
29
 
24
- If `$ARGUMENTS` is empty:
30
+ If `$normalized_args` is empty:
25
31
  ```
26
32
  Usage: /ant:flag "<description>" [--type blocker|issue|note] [--phase N]
27
33
 
@@ -7,11 +7,17 @@ You are the **Queen**. Display project flags.
7
7
 
8
8
  ## Instructions
9
9
 
10
- Arguments: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ Arguments: `$normalized_args`
11
17
 
12
18
  ### Step 1: Parse Arguments
13
19
 
14
- Parse `$ARGUMENTS` for:
20
+ Parse `$normalized_args` for:
15
21
  - `--all` or `-a`: Show resolved flags too
16
22
  - `--type` or `-t`: Filter by type (blocker|issue|note)
17
23
  - `--phase` or `-p`: Filter by phase number
@@ -7,11 +7,17 @@ You are the **Queen**. Add a FOCUS constraint.
7
7
 
8
8
  ## Instructions
9
9
 
10
- The focus area is: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ The focus area is: `$normalized_args`
11
17
 
12
18
  ### Step 1: Validate
13
19
 
14
- If `$ARGUMENTS` empty -> show usage: `/ant:focus <area>`, stop.
20
+ If `$normalized_args` empty -> show usage: `/ant:focus <area>`, stop.
15
21
  If content > 500 chars -> "Focus content too long (max 500 chars)", stop.
16
22
 
17
23
  ### Step 2: Read + Update Constraints
@@ -109,4 +109,16 @@ HOW IT WORKS
109
109
  activity.log Timestamped worker activity
110
110
  spawn-tree.txt Worker spawn hierarchy
111
111
  constraints.json Focus/redirect pheromone data
112
+
113
+ OPENCODE USERS
114
+
115
+ Argument syntax: OpenCode handles multi-word arguments differently than Claude.
116
+ Wrap text arguments in quotes for reliable parsing:
117
+
118
+ ✅ /ant:init "Build a REST API"
119
+ ✅ /ant:plan "authentication system"
120
+ ✅ /ant:focus "database layer"
121
+
122
+ Without quotes, only the first word may be captured. This is now handled
123
+ automatically by the normalize-args utility, but quoting is recommended.
112
124
  ```
@@ -7,9 +7,33 @@ You are the **Queen Ant Colony**. Initialize the colony with the Queen's intenti
7
7
 
8
8
  ## Instructions
9
9
 
10
- The user's goal is: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
11
 
12
- ### Step 0: Version Check (Non-blocking)
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode.
15
+
16
+ The user's goal is: `$normalized_args`
17
+
18
+ Parse `$normalized_args`:
19
+ - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
20
+ - Otherwise: set `visual_mode = true`
21
+
22
+ Note: Use `$normalized_args` instead of `$ARGUMENTS` throughout this command.
23
+
24
+ ### Step 0: Initialize Visual Mode (if enabled)
25
+
26
+ If `visual_mode` is true:
27
+ ```bash
28
+ # Generate session ID
29
+ init_id="init-$(date +%s)"
30
+
31
+ # Initialize swarm display
32
+ bash .aether/aether-utils.sh swarm-display-init "$init_id"
33
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Colony initialization" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
34
+ ```
35
+
36
+ ### Step 0.5: Version Check (Non-blocking)
13
37
 
14
38
  Run using the Bash tool: `bash .aether/aether-utils.sh version-check 2>/dev/null || true`
15
39
 
@@ -17,7 +41,7 @@ If the command succeeds and the JSON result contains a non-empty string, display
17
41
 
18
42
  ### Step 1: Validate Input
19
43
 
20
- If `$ARGUMENTS` is empty or blank, output:
44
+ If `$normalized_args` is empty or blank, output:
21
45
 
22
46
  ```
23
47
  Aether Colony
@@ -175,7 +199,16 @@ bash .aether/aether-utils.sh validate-state colony
175
199
 
176
200
  This validates COLONY_STATE.json structure. If validation fails, output a warning.
177
201
 
178
- ### Step 5.5: Register Repo (Silent)
202
+ ### Step 5.5: Detect Nestmates
203
+
204
+ Run using Bash tool: `node -e "const nl = require('./bin/lib/nestmate-loader'); console.log(JSON.stringify(nl.findNestmates(process.cwd())))"`
205
+
206
+ If nestmates are found:
207
+ 1. Display: `Nestmates found: N related colonies`
208
+ 2. List each nestmate with name and truncated goal
209
+ 3. Check for shared TO-DOs or cross-project dependencies
210
+
211
+ ### Step 5.6: Register Repo (Silent)
179
212
 
180
213
  Attempt to register this repo in the global hub. Both steps are silent on failure — registry is not required for the colony to work.
181
214
 
@@ -193,6 +226,12 @@ If either command fails, proceed silently. These are optional bookkeeping.
193
226
 
194
227
  ### Step 6: Display Result
195
228
 
229
+ **If visual_mode is true, render final swarm display:**
230
+ ```bash
231
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony initialized" "Colony" '{"read":5,"grep":2,"edit":3,"bash":2}' 100 "fungus_garden" 100
232
+ bash .aether/aether-utils.sh swarm-display-render "$init_id"
233
+ ```
234
+
196
235
  Output this header:
197
236
 
198
237
  ```
@@ -216,6 +255,12 @@ Then output the result:
216
255
  {N} instinct(s) | {N} learning(s)
217
256
  {End if}
218
257
 
258
+ {If nestmates found in Step 5.5:}
259
+ 🏘️ Nest Context: {N} sibling colonies detected
260
+ Context from related projects will be automatically considered
261
+ during planning and execution.
262
+ {End if}
263
+
219
264
  🐜 The colony awaits your command:
220
265
 
221
266
  /ant:plan 📋 Generate project plan
@@ -7,9 +7,31 @@ You are the **Queen**. Begin a new colony, preserving pheromones.
7
7
 
8
8
  ## Instructions
9
9
 
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ Parse `$normalized_args`:
17
+ - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
18
+ - Otherwise: set `visual_mode = true`
19
+
20
+ ### Step 0: Initialize Visual Mode (if enabled)
21
+
22
+ If `visual_mode` is true:
23
+ ```bash
24
+ # Generate session ID
25
+ layeggs_id="layeggs-$(date +%s)"
26
+
27
+ # Initialize swarm display
28
+ bash .aether/aether-utils.sh swarm-display-init "$layeggs_id"
29
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Laying first eggs" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "nursery" 0
30
+ ```
31
+
10
32
  ### Step 1: Validate Input
11
33
 
12
- - If `$ARGUMENTS` is empty:
34
+ - If `$normalized_args` is empty:
13
35
  ```
14
36
  Usage: /ant:lay-eggs "<new colony goal>"
15
37
 
@@ -54,7 +76,7 @@ Generate new state following RESEARCH.md Pattern 2 (State Reset with Pheromone P
54
76
  - memory.instincts (high confidence only)
55
77
 
56
78
  **Fields to reset:**
57
- - goal: new goal from $ARGUMENTS
79
+ - goal: new goal from $normalized_args
58
80
  - state: "READY"
59
81
  - current_phase: 0
60
82
  - session_id: new session_{unix_timestamp}_{random}
@@ -86,6 +108,12 @@ Write `.aether/data/constraints.json`:
86
108
 
87
109
  ### Step 6: Display Result
88
110
 
111
+ **If visual_mode is true, render final swarm display:**
112
+ ```bash
113
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "First eggs laid" "Colony" '{"read":3,"grep":0,"edit":2,"bash":1}' 100 "nursery" 100
114
+ bash .aether/aether-utils.sh swarm-display-render "$layeggs_id"
115
+ ```
116
+
89
117
  ```
90
118
  🥚 ═══════════════════════════════════════════════════
91
119
  F I R S T E G G S L A I D
@@ -5,7 +5,7 @@ description: "🔮🐜🧠🐜🔮 Oracle Ant - deep research agent using RALF i
5
5
 
6
6
  You are the **Oracle Ant** command handler. You configure and launch a deep research loop that runs autonomously in a separate process.
7
7
 
8
- The user's input is: `$ARGUMENTS`
8
+ The user's input is: `$normalized_args`
9
9
 
10
10
  ## Non-Invasive Guarantee
11
11
 
@@ -13,13 +13,45 @@ Oracle NEVER touches COLONY_STATE.json, constraints.json, activity.log, or any c
13
13
 
14
14
  ## Instructions
15
15
 
16
+ ### Step -1: Normalize Arguments
17
+
18
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
19
+
20
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
21
+
16
22
  ### Step 0: Parse Arguments and Route
17
23
 
18
- Parse `$ARGUMENTS` to determine the action:
24
+ Parse `$normalized_args` to determine the action:
25
+
26
+ 1. Check for flags:
27
+ - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
28
+ - Otherwise: set `visual_mode = true`
29
+ - Remove flags from arguments before routing
19
30
 
20
- 1. **If `$ARGUMENTS` is exactly `stop`** — go to **Step 0b: Stop Oracle**
21
- 2. **If `$ARGUMENTS` is exactly `status`** — go to **Step 0c: Show Status**
22
- 3. **Otherwise** — go to **Step 1: Research Wizard**
31
+ 2. **If remaining arguments is exactly `stop`** — go to **Step 0b: Stop Oracle**
32
+ 3. **If remaining arguments is exactly `status`** — go to **Step 0c: Show Status**
33
+ 4. **Otherwise** — go to **Step 0.5: Initialize Visual Mode** then **Step 1: Research Wizard**
34
+
35
+ ### Step 0.5: Initialize Visual Mode (if enabled)
36
+
37
+ If `visual_mode` is true:
38
+ ```bash
39
+ # Generate session ID
40
+ oracle_id="oracle-$(date +%s)"
41
+
42
+ # Initialize swarm display
43
+ bash .aether/aether-utils.sh swarm-display-init "$oracle_id"
44
+ bash .aether/aether-utils.sh swarm-display-update "Oracle" "oracle" "researching" "Deep research in progress" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
45
+ ```
46
+
47
+ Display visual header:
48
+ ```
49
+ 🔮🐜🧠🐜🔮 ═══════════════════════════════════════════════
50
+ O R A C L E — R e s e a r c h M o d e
51
+ ═══════════════════════════════════════════════ 🔮🐜🧠🐜🔮
52
+
53
+ Oracle peering into the depths...
54
+ ```
23
55
 
24
56
  ---
25
57
 
@@ -99,13 +131,13 @@ Output the header:
99
131
  ═══════════════════════════════════════════════════ 🔮🐜🧠🐜🔮
100
132
  ```
101
133
 
102
- **If `$ARGUMENTS` is not empty and not a subcommand**, use it as the initial topic suggestion. Otherwise, the topic will be asked in Question 1.
134
+ **If `$normalized_args` is not empty and not a subcommand**, use it as the initial topic suggestion. Otherwise, the topic will be asked in Question 1.
103
135
 
104
136
  Now ask questions using AskUserQuestion. Ask them one at a time so each answer can inform the next question.
105
137
 
106
138
  **Question 1: Research Topic**
107
139
 
108
- If `$ARGUMENTS` already contains a topic, skip this question and use that as the topic.
140
+ If `$normalized_args` already contains a topic, skip this question and use that as the topic.
109
141
 
110
142
  Otherwise ask:
111
143
 
@@ -5,10 +5,16 @@ description: "🧹🐜🏛️🐜🧹 Run codebase hygiene report - archivist an
5
5
 
6
6
  You are the **Queen Ant Colony**. Spawn an archivist to analyze codebase hygiene.
7
7
 
8
- > **Note:** `$ARGUMENTS` is unused. Future extensions could accept a path scope argument.
8
+ > **Note:** `$normalized_args` is unused. Future extensions could accept a path scope argument.
9
9
 
10
10
  ## Instructions
11
11
 
12
+ ### Step -1: Normalize Arguments
13
+
14
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
15
+
16
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
17
+
12
18
  ### Step 1: Read State
13
19
 
14
20
  Use the Read tool to read these files (in parallel):
@@ -48,7 +54,8 @@ If no active signals after filtering:
48
54
 
49
55
  Read `.aether/workers.md` and extract the `## Architect` section.
50
56
 
51
- Spawn via **Task tool** with `subagent_type="general"`:
57
+ Spawn via **Task tool** with `subagent_type="general-purpose"`:
58
+ # NOTE: Claude Code uses aether-architect; OpenCode uses general-purpose with role injection
52
59
 
53
60
  ```
54
61
  --- WORKER SPEC ---
@@ -159,7 +166,6 @@ CONSTRAINTS:
159
166
  - Do NOT flag standard framework files (package.json, tsconfig.json, etc.) as orphaned.
160
167
  - Do NOT flag .aether/ internal data files as stale (they are managed by the colony).
161
168
  - Do NOT flag .claude/ command files as stale (they are the colony's brain).
162
- - Do NOT flag .planning/ files as stale (they are project management artifacts).
163
169
  - Aim for a useful report, not an exhaustive one. 5-15 findings is ideal.
164
170
  ```
165
171
 
@@ -7,6 +7,28 @@ You are the **Queen Ant Colony**. Save current state for session handoff.
7
7
 
8
8
  ## Instructions
9
9
 
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ Parse `$normalized_args`:
17
+ - If contains `--no-visual`: set `visual_mode = false` (visual is ON by default)
18
+ - Otherwise: set `visual_mode = true`
19
+
20
+ ### Step 0: Initialize Visual Mode (if enabled)
21
+
22
+ If `visual_mode` is true:
23
+ ```bash
24
+ # Generate session ID
25
+ pause_id="pause-$(date +%s)"
26
+
27
+ # Initialize swarm display
28
+ bash .aether/aether-utils.sh swarm-display-init "$pause_id"
29
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "excavating" "Pausing colony" "Colony" '{"read":0,"grep":0,"edit":0,"bash":0}' 0 "fungus_garden" 0
30
+ ```
31
+
10
32
  ### Step 1: Read State
11
33
 
12
34
  Use the Read tool to read `.aether/data/COLONY_STATE.json`.
@@ -69,7 +91,18 @@ Run `/ant:resume-colony` in a new session.
69
91
  <what should happen next>
70
92
  ```
71
93
 
72
- ### Step 4.5: Commit Suggestion (Optional)
94
+ ### Step 4.5: Set Paused Flag in State
95
+
96
+ Use Read tool to get current COLONY_STATE.json.
97
+
98
+ Use Write tool to update COLONY_STATE.json with paused flag:
99
+ - Add field: `"paused": true`
100
+ - Add field: `"paused_at": "<ISO-8601 timestamp>"`
101
+ - Update last_updated timestamp
102
+
103
+ This flag indicates the colony is in a paused state and will be cleared on resume.
104
+
105
+ ### Step 4.6: Commit Suggestion (Optional)
73
106
 
74
107
  **This step is non-blocking. Skipping does not affect the pause or any subsequent steps. Failure to commit has zero consequences.**
75
108
 
@@ -143,6 +176,12 @@ Continue to Step 5.
143
176
 
144
177
  ### Step 5: Display Confirmation
145
178
 
179
+ **If visual_mode is true, render final swarm display:**
180
+ ```bash
181
+ bash .aether/aether-utils.sh swarm-display-update "Queen" "prime" "completed" "Colony paused" "Colony" '{"read":3,"grep":0,"edit":2,"bash":1}' 100 "fungus_garden" 100
182
+ bash .aether/aether-utils.sh swarm-display-render "$pause_id"
183
+ ```
184
+
146
185
  Output header:
147
186
 
148
187
  ```
@@ -161,7 +200,21 @@ Then output:
161
200
  Pheromones: <active_count> active
162
201
 
163
202
  Handoff saved to .aether/HANDOFF.md
203
+ Paused state saved to COLONY_STATE.json
164
204
 
165
205
  To resume in a new session:
166
206
  /ant:resume-colony
207
+
208
+ 💾 State persisted — safe to /clear
209
+
210
+ 🐜 What would you like to do next?
211
+ 1. /ant:resume-colony — Resume work in this session
212
+ 2. /ant:lay-eggs "<new goal>" — Start a new colony
213
+ 3. /clear — Clear context and continue
214
+
215
+ Use AskUserQuestion with these three options.
216
+
217
+ If option 1 selected: proceed to run /ant:resume-colony flow
218
+ If option 2 selected: run /ant:lay-eggs flow
219
+ If option 3 selected: display "Run /ant:resume-colony when ready to continue, or /ant:lay-eggs to start fresh"
167
220
  ```
@@ -7,7 +7,13 @@ You are the **Queen Ant Colony**. Display phase details from the project plan.
7
7
 
8
8
  ## Instructions
9
9
 
10
- The argument is: `$ARGUMENTS`
10
+ ### Step -1: Normalize Arguments
11
+
12
+ Run: `normalized_args=$(bash .aether/aether-utils.sh normalize-args "$@")`
13
+
14
+ This ensures arguments work correctly in both Claude Code and OpenCode. Use `$normalized_args` throughout this command.
15
+
16
+ The argument is: `$normalized_args`
11
17
 
12
18
  ### Step 1: Read State
13
19
 
@@ -19,9 +25,9 @@ If `plan.phases` is an empty array, output `No project plan. Run /ant:plan first
19
25
 
20
26
  ### Step 2: Determine What to Show
21
27
 
22
- - If `$ARGUMENTS` is empty -> show the current phase (from `current_phase`). If `current_phase` is 0 or beyond the last phase, show phase 1.
23
- - If `$ARGUMENTS` is a number -> show that specific phase
24
- - If `$ARGUMENTS` is "list" or "all" -> show all phases in summary
28
+ - If `$normalized_args` is empty -> show the current phase (from `current_phase`). If `current_phase` is 0 or beyond the last phase, show phase 1.
29
+ - If `$normalized_args` is a number -> show that specific phase
30
+ - If `$normalized_args` is "list" or "all" -> show all phases in summary
25
31
 
26
32
  ### Step 3a: Single Phase View
27
33
 
@@ -89,3 +95,29 @@ Legend: [✓] completed [~] in progress [ ] pending
89
95
 
90
96
  🐜 /ant:phase <id> for details
91
97
  ```
98
+
99
+ ### Step 4: Update Handoff (Optional)
100
+
101
+ After displaying phase details, offer to update the handoff document with review notes:
102
+
103
+ Use AskUserQuestion:
104
+ ```
105
+ Update handoff with phase review notes?
106
+
107
+ 1. Yes — add notes about blockers or decisions
108
+ 2. No — continue without updating
109
+ ```
110
+
111
+ If option 1 selected:
112
+ Use AskUserQuestion to collect notes, then append to handoff:
113
+
114
+ ```bash
115
+ cat >> .aether/HANDOFF.md << 'HANDOFF_EOF'
116
+
117
+ ## Phase {id} Review Notes
118
+ - Reviewed: $(date -u +%Y-%m-%dT%H:%M:%SZ)
119
+ - Notes: {user_notes}
120
+ HANDOFF_EOF
121
+ ```
122
+
123
+ Display: `Handoff updated with review notes.`