aether-colony 5.1.0 → 5.3.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 (185) hide show
  1. package/.aether/aether-utils.sh +157 -42
  2. package/.aether/agents/aether-ambassador.md +140 -0
  3. package/.aether/agents/aether-archaeologist.md +108 -0
  4. package/.aether/agents/aether-architect.md +133 -0
  5. package/.aether/agents/aether-auditor.md +144 -0
  6. package/.aether/agents/aether-builder.md +184 -0
  7. package/.aether/agents/aether-chaos.md +115 -0
  8. package/.aether/agents/aether-chronicler.md +122 -0
  9. package/.aether/agents/aether-gatekeeper.md +116 -0
  10. package/.aether/agents/aether-includer.md +117 -0
  11. package/.aether/agents/aether-keeper.md +177 -0
  12. package/.aether/agents/aether-measurer.md +128 -0
  13. package/.aether/agents/aether-oracle.md +137 -0
  14. package/.aether/agents/aether-probe.md +133 -0
  15. package/.aether/agents/aether-queen.md +286 -0
  16. package/.aether/agents/aether-route-setter.md +130 -0
  17. package/.aether/agents/aether-sage.md +106 -0
  18. package/.aether/agents/aether-scout.md +101 -0
  19. package/.aether/agents/aether-surveyor-disciplines.md +391 -0
  20. package/.aether/agents/aether-surveyor-nest.md +329 -0
  21. package/.aether/agents/aether-surveyor-pathogens.md +264 -0
  22. package/.aether/agents/aether-surveyor-provisions.md +334 -0
  23. package/.aether/agents/aether-tracker.md +137 -0
  24. package/.aether/agents/aether-watcher.md +174 -0
  25. package/.aether/agents/aether-weaver.md +130 -0
  26. package/.aether/commands/claude/archaeology.md +334 -0
  27. package/.aether/commands/claude/build.md +65 -0
  28. package/.aether/commands/claude/chaos.md +336 -0
  29. package/.aether/commands/claude/colonize.md +259 -0
  30. package/.aether/commands/claude/continue.md +60 -0
  31. package/.aether/commands/claude/council.md +507 -0
  32. package/.aether/commands/claude/data-clean.md +81 -0
  33. package/.aether/commands/claude/dream.md +268 -0
  34. package/.aether/commands/claude/entomb.md +498 -0
  35. package/.aether/commands/claude/export-signals.md +57 -0
  36. package/.aether/commands/claude/feedback.md +96 -0
  37. package/.aether/commands/claude/flag.md +151 -0
  38. package/.aether/commands/claude/flags.md +169 -0
  39. package/.aether/commands/claude/focus.md +76 -0
  40. package/.aether/commands/claude/help.md +154 -0
  41. package/.aether/commands/claude/history.md +140 -0
  42. package/.aether/commands/claude/import-signals.md +71 -0
  43. package/.aether/commands/claude/init.md +505 -0
  44. package/.aether/commands/claude/insert-phase.md +105 -0
  45. package/.aether/commands/claude/interpret.md +278 -0
  46. package/.aether/commands/claude/lay-eggs.md +210 -0
  47. package/.aether/commands/claude/maturity.md +113 -0
  48. package/.aether/commands/claude/memory-details.md +77 -0
  49. package/.aether/commands/claude/migrate-state.md +171 -0
  50. package/.aether/commands/claude/oracle.md +642 -0
  51. package/.aether/commands/claude/organize.md +232 -0
  52. package/.aether/commands/claude/patrol.md +620 -0
  53. package/.aether/commands/claude/pause-colony.md +233 -0
  54. package/.aether/commands/claude/phase.md +115 -0
  55. package/.aether/commands/claude/pheromones.md +156 -0
  56. package/.aether/commands/claude/plan.md +693 -0
  57. package/.aether/commands/claude/preferences.md +65 -0
  58. package/.aether/commands/claude/quick.md +100 -0
  59. package/.aether/commands/claude/redirect.md +76 -0
  60. package/.aether/commands/claude/resume-colony.md +197 -0
  61. package/.aether/commands/claude/resume.md +388 -0
  62. package/.aether/commands/claude/run.md +231 -0
  63. package/.aether/commands/claude/seal.md +774 -0
  64. package/.aether/commands/claude/skill-create.md +286 -0
  65. package/.aether/commands/claude/status.md +410 -0
  66. package/.aether/commands/claude/swarm.md +349 -0
  67. package/.aether/commands/claude/tunnels.md +426 -0
  68. package/.aether/commands/claude/update.md +132 -0
  69. package/.aether/commands/claude/verify-castes.md +143 -0
  70. package/.aether/commands/claude/watch.md +239 -0
  71. package/.aether/commands/colonize.yaml +4 -0
  72. package/.aether/commands/council.yaml +205 -0
  73. package/.aether/commands/init.yaml +46 -13
  74. package/.aether/commands/insert-phase.yaml +4 -0
  75. package/.aether/commands/opencode/archaeology.md +331 -0
  76. package/.aether/commands/opencode/build.md +1168 -0
  77. package/.aether/commands/opencode/chaos.md +329 -0
  78. package/.aether/commands/opencode/colonize.md +195 -0
  79. package/.aether/commands/opencode/continue.md +1436 -0
  80. package/.aether/commands/opencode/council.md +437 -0
  81. package/.aether/commands/opencode/data-clean.md +77 -0
  82. package/.aether/commands/opencode/dream.md +260 -0
  83. package/.aether/commands/opencode/entomb.md +377 -0
  84. package/.aether/commands/opencode/export-signals.md +54 -0
  85. package/.aether/commands/opencode/feedback.md +99 -0
  86. package/.aether/commands/opencode/flag.md +149 -0
  87. package/.aether/commands/opencode/flags.md +167 -0
  88. package/.aether/commands/opencode/focus.md +73 -0
  89. package/.aether/commands/opencode/help.md +157 -0
  90. package/.aether/commands/opencode/history.md +136 -0
  91. package/.aether/commands/opencode/import-signals.md +68 -0
  92. package/.aether/commands/opencode/init.md +518 -0
  93. package/.aether/commands/opencode/insert-phase.md +111 -0
  94. package/.aether/commands/opencode/interpret.md +272 -0
  95. package/.aether/commands/opencode/lay-eggs.md +213 -0
  96. package/.aether/commands/opencode/maturity.md +108 -0
  97. package/.aether/commands/opencode/memory-details.md +83 -0
  98. package/.aether/commands/opencode/migrate-state.md +165 -0
  99. package/.aether/commands/opencode/oracle.md +593 -0
  100. package/.aether/commands/opencode/organize.md +226 -0
  101. package/.aether/commands/opencode/patrol.md +626 -0
  102. package/.aether/commands/opencode/pause-colony.md +203 -0
  103. package/.aether/commands/opencode/phase.md +113 -0
  104. package/.aether/commands/opencode/pheromones.md +162 -0
  105. package/.aether/commands/opencode/plan.md +684 -0
  106. package/.aether/commands/opencode/preferences.md +71 -0
  107. package/.aether/commands/opencode/quick.md +91 -0
  108. package/.aether/commands/opencode/redirect.md +84 -0
  109. package/.aether/commands/opencode/resume-colony.md +190 -0
  110. package/.aether/commands/opencode/resume.md +394 -0
  111. package/.aether/commands/opencode/run.md +237 -0
  112. package/.aether/commands/opencode/seal.md +452 -0
  113. package/.aether/commands/opencode/skill-create.md +63 -0
  114. package/.aether/commands/opencode/status.md +307 -0
  115. package/.aether/commands/opencode/swarm.md +15 -0
  116. package/.aether/commands/opencode/tunnels.md +400 -0
  117. package/.aether/commands/opencode/update.md +127 -0
  118. package/.aether/commands/opencode/verify-castes.md +139 -0
  119. package/.aether/commands/opencode/watch.md +227 -0
  120. package/.aether/commands/plan.yaml +53 -2
  121. package/.aether/commands/quick.yaml +104 -0
  122. package/.aether/commands/resume-colony.yaml +6 -4
  123. package/.aether/commands/resume.yaml +9 -0
  124. package/.aether/commands/run.yaml +37 -1
  125. package/.aether/commands/seal.yaml +9 -0
  126. package/.aether/commands/status.yaml +45 -1
  127. package/.aether/docs/command-playbooks/build-full.md +3 -2
  128. package/.aether/docs/command-playbooks/build-prep.md +12 -4
  129. package/.aether/docs/command-playbooks/build-verify.md +51 -0
  130. package/.aether/docs/command-playbooks/continue-advance.md +115 -6
  131. package/.aether/docs/command-playbooks/continue-full.md +1 -0
  132. package/.aether/docs/command-playbooks/continue-verify.md +33 -0
  133. package/.aether/utils/clash-detect.sh +239 -0
  134. package/.aether/utils/council.sh +425 -0
  135. package/.aether/utils/error-handler.sh +3 -3
  136. package/.aether/utils/flag.sh +23 -12
  137. package/.aether/utils/hive.sh +2 -2
  138. package/.aether/utils/hooks/clash-pre-tool-use.js +99 -0
  139. package/.aether/utils/immune.sh +508 -0
  140. package/.aether/utils/learning.sh +2 -2
  141. package/.aether/utils/merge-driver-lockfile.sh +35 -0
  142. package/.aether/utils/midden.sh +712 -0
  143. package/.aether/utils/pheromone.sh +1376 -108
  144. package/.aether/utils/queen.sh +31 -21
  145. package/.aether/utils/session.sh +264 -0
  146. package/.aether/utils/spawn-tree.sh +7 -7
  147. package/.aether/utils/spawn.sh +2 -2
  148. package/.aether/utils/state-api.sh +216 -5
  149. package/.aether/utils/swarm.sh +1 -1
  150. package/.aether/utils/worktree.sh +189 -0
  151. package/.claude/commands/ant/colonize.md +2 -0
  152. package/.claude/commands/ant/council.md +205 -0
  153. package/.claude/commands/ant/init.md +53 -14
  154. package/.claude/commands/ant/insert-phase.md +4 -0
  155. package/.claude/commands/ant/plan.md +27 -1
  156. package/.claude/commands/ant/quick.md +100 -0
  157. package/.claude/commands/ant/resume-colony.md +3 -2
  158. package/.claude/commands/ant/resume.md +9 -0
  159. package/.claude/commands/ant/run.md +37 -1
  160. package/.claude/commands/ant/seal.md +9 -0
  161. package/.claude/commands/ant/status.md +45 -1
  162. package/.opencode/commands/ant/colonize.md +2 -0
  163. package/.opencode/commands/ant/council.md +143 -0
  164. package/.opencode/commands/ant/init.md +53 -13
  165. package/.opencode/commands/ant/insert-phase.md +4 -0
  166. package/.opencode/commands/ant/plan.md +26 -1
  167. package/.opencode/commands/ant/quick.md +91 -0
  168. package/.opencode/commands/ant/resume-colony.md +3 -2
  169. package/.opencode/commands/ant/resume.md +9 -0
  170. package/.opencode/commands/ant/run.md +37 -1
  171. package/.opencode/commands/ant/status.md +2 -0
  172. package/CHANGELOG.md +116 -0
  173. package/README.md +34 -8
  174. package/bin/cli.js +103 -61
  175. package/bin/lib/banner.js +14 -0
  176. package/bin/lib/init.js +8 -7
  177. package/bin/lib/interactive-setup.js +251 -0
  178. package/bin/npx-entry.js +21 -0
  179. package/bin/npx-install.js +9 -167
  180. package/bin/validate-package.sh +23 -0
  181. package/package.json +11 -3
  182. package/.aether/docs/plans/pheromone-display-plan.md +0 -257
  183. package/.aether/schemas/example-prompt-builder.xml +0 -234
  184. package/.aether/scripts/incident-test-add.sh +0 -47
  185. package/.aether/scripts/weekly-audit.sh +0 -79
@@ -1,177 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * npx-install.js — Professional installer for Aether Colony
4
+ * npx-install.js — Legacy installer for Aether Colony (deprecated)
5
5
  *
6
- * Usage: npx aether-colony install
7
- *
8
- * Creates the global hub at ~/.aether/ with all system files,
9
- * slash commands, and agent definitions.
6
+ * This entry point has been superseded by npx-entry.js.
7
+ * It now redirects to the interactive setup.
10
8
  */
11
9
 
12
- const fs = require('fs');
13
- const path = require('path');
14
- const os = require('os');
15
-
16
- const BANNER = `
17
- █████╗ ███████╗████████╗██╗ ██╗███████╗██████╗
18
- ██╔══██╗██╔════╝╚══██╔══╝██║ ██║██╔════╝██╔══██╗
19
- ███████║█████╗ ██║ ███████║█████╗ ██████╔╝
20
- ██╔══██║██╔══╝ ██║ ██╔══██║██╔══╝ ██╔══██╗
21
- ██║ ██║███████╗ ██║ ██║ ██║███████╗██║ ██║
22
- ╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
23
- `;
24
-
25
- const AETHER_VERSION = require('../package.json').version;
26
- const HOME_DIR = os.homedir();
27
- const HUB_DIR = path.join(HOME_DIR, '.aether');
28
- const CLAUDE_COMMANDS_DIR = path.join(HOME_DIR, '.claude', 'commands', 'ant');
29
- const CLAUDE_AGENTS_DIR = path.join(HOME_DIR, '.claude', 'agents', 'ant');
30
-
31
- // Get the package root (where this script is located)
32
- const PACKAGE_ROOT = path.resolve(__dirname, '..');
33
- const AETHER_SRC = path.join(PACKAGE_ROOT, '.aether');
34
- const CLAUDE_COMMANDS_SRC = path.join(PACKAGE_ROOT, '.claude', 'commands', 'ant');
35
- const OPENCODE_AGENTS_SRC = path.join(PACKAGE_ROOT, '.opencode', 'agents');
36
- const OPENCODE_COMMANDS_SRC = path.join(PACKAGE_ROOT, '.opencode', 'commands', 'ant');
37
-
38
- function log(message, type = 'info') {
39
- const icons = {
40
- info: 'ℹ',
41
- success: '✓',
42
- warning: '⚠',
43
- error: '✗',
44
- ant: '🐜'
45
- };
46
- console.log(`${icons[type] || '•'} ${message}`);
47
- }
48
-
49
- function ensureDir(dir) {
50
- if (!fs.existsSync(dir)) {
51
- fs.mkdirSync(dir, { recursive: true });
52
- return true;
53
- }
54
- return false;
55
- }
56
-
57
- function copyDir(src, dest, options = {}) {
58
- const { exclude = [] } = options;
59
- ensureDir(dest);
60
-
61
- const entries = fs.readdirSync(src, { withFileTypes: true });
62
- let copied = 0;
63
-
64
- for (const entry of entries) {
65
- const srcPath = path.join(src, entry.name);
66
- const destPath = path.join(dest, entry.name);
67
-
68
- // Skip excluded directories
69
- if (exclude.includes(entry.name)) {
70
- continue;
71
- }
72
-
73
- if (entry.isDirectory()) {
74
- copied += copyDir(srcPath, destPath, options);
75
- } else {
76
- fs.copyFileSync(srcPath, destPath);
77
- copied++;
78
- }
79
- }
80
-
81
- return copied;
82
- }
83
-
84
- function copyFile(src, dest) {
85
- const destDir = path.dirname(dest);
86
- ensureDir(destDir);
87
- fs.copyFileSync(src, dest);
88
- }
89
-
90
10
  function install() {
91
- console.log(BANNER);
92
- console.log('\n');
93
-
94
- let filesCopied = 0;
95
-
96
- // Step 1: Create hub directory structure
97
- log('Creating hub directory structure...', 'ant');
98
- const hubDirs = [
99
- path.join(HUB_DIR, 'system'),
100
- path.join(HUB_DIR, 'system', 'docs'),
101
- path.join(HUB_DIR, 'system', 'utils'),
102
- path.join(HUB_DIR, 'system', 'templates'),
103
- path.join(HUB_DIR, 'system', 'schemas'),
104
- path.join(HUB_DIR, 'system', 'exchange'),
105
- path.join(HUB_DIR, 'system', 'rules'),
106
- path.join(HUB_DIR, 'data'),
107
- path.join(HUB_DIR, 'chambers')
108
- ];
109
-
110
- for (const dir of hubDirs) {
111
- if (ensureDir(dir)) {
112
- log(` Created ${path.relative(HOME_DIR, dir)}`, 'info');
113
- }
114
- }
115
-
116
- // Step 2: Copy system files from .aether/
117
- log('Copying system files to hub...', 'ant');
118
- if (fs.existsSync(AETHER_SRC)) {
119
- // Private directories to exclude
120
- const excludeDirs = ['data', 'dreams', 'oracle', 'checkpoints', 'locks', 'temp', 'archive', 'chambers'];
121
- filesCopied += copyDir(AETHER_SRC, path.join(HUB_DIR, 'system'), { exclude: excludeDirs });
122
- log(` Copied ${filesCopied} files from .aether/`, 'success');
123
- } else {
124
- log(' Warning: .aether/ source not found', 'warning');
125
- }
126
-
127
- // Step 3: Copy Claude Code commands
128
- log('Installing Claude Code commands...', 'ant');
129
- if (fs.existsSync(CLAUDE_COMMANDS_SRC)) {
130
- const cmdCount = copyDir(CLAUDE_COMMANDS_SRC, CLAUDE_COMMANDS_DIR);
131
- log(` Installed ${cmdCount} slash commands to ~/.claude/commands/ant/`, 'success');
132
- filesCopied += cmdCount;
133
- }
134
-
135
- // Step 4: Copy Claude Code agents (from OpenCode agents)
136
- log('Installing Claude Code agents...', 'ant');
137
- if (fs.existsSync(OPENCODE_AGENTS_SRC)) {
138
- const agentCount = copyDir(OPENCODE_AGENTS_SRC, CLAUDE_AGENTS_DIR);
139
- log(` Installed ${agentCount} agents to ~/.claude/agents/ant/`, 'success');
140
- filesCopied += agentCount;
141
- }
142
-
143
- // Step 5: Write version file
144
- const versionData = {
145
- version: AETHER_VERSION,
146
- installed_at: new Date().toISOString(),
147
- package_root: PACKAGE_ROOT
148
- };
149
- fs.writeFileSync(
150
- path.join(HUB_DIR, 'version.json'),
151
- JSON.stringify(versionData, null, 2)
152
- );
153
- log(' Version info written', 'success');
154
-
155
- // Step 6: Create global QUEEN.md if missing
156
- const globalQueen = path.join(HUB_DIR, 'QUEEN.md');
157
- if (!fs.existsSync(globalQueen)) {
158
- const queenTemplate = path.join(HUB_DIR, 'system', 'templates', 'QUEEN.md.template');
159
- if (fs.existsSync(queenTemplate)) {
160
- let content = fs.readFileSync(queenTemplate, 'utf8');
161
- content = content.replace(/{TIMESTAMP}/g, new Date().toISOString());
162
- fs.writeFileSync(globalQueen, content);
163
- log(' Created global QUEEN.md', 'success');
164
- }
165
- }
166
-
167
- // Summary
168
- console.log('\n ─────────────────────────────────────────────\n');
169
- log(`Installation complete! ${filesCopied} files installed.`, 'success');
170
- console.log('\n Next steps:\n');
171
- console.log(' 1. Run /ant:init "your goal" in any project');
172
- console.log(' 2. Use /ant:build to execute phases');
173
- console.log(' 3. Run /ant:help for command reference\n');
174
- console.log(' ─────────────────────────────────────────────\n');
11
+ console.log('\n ⚠ This installer has moved. Redirecting...\n');
12
+ const { interactiveSetup } = require('./lib/interactive-setup');
13
+ interactiveSetup().catch(err => {
14
+ console.error('Setup failed:', err.message);
15
+ process.exit(1);
16
+ });
175
17
  }
176
18
 
177
19
  // Run installer
@@ -51,6 +51,29 @@ REQUIRED_FILES=(
51
51
  "skills/colony/.manifest.json"
52
52
  "skills/domain/.manifest.json"
53
53
  "utils/file-lock.sh"
54
+ "utils/chamber-compare.sh"
55
+ "utils/chamber-utils.sh"
56
+ "utils/clash-detect.sh"
57
+ "utils/colorize-log.sh"
58
+ "utils/council.sh"
59
+ "utils/emoji-audit.sh"
60
+ "utils/immune.sh"
61
+ "utils/merge-driver-lockfile.sh"
62
+ "utils/scan.sh"
63
+ "utils/semantic-cli.sh"
64
+ "utils/spawn-tree.sh"
65
+ "utils/state-loader.sh"
66
+ "utils/swarm-display.sh"
67
+ "utils/watch-spawn-tree.sh"
68
+ "utils/worktree.sh"
69
+ "utils/xml-compose.sh"
70
+ "utils/xml-convert.sh"
71
+ "utils/xml-core.sh"
72
+ "utils/xml-query.sh"
73
+ "utils/xml-utils.sh"
74
+ "utils/hooks/clash-pre-tool-use.js"
75
+ "utils/oracle/oracle.sh"
76
+ "utils/queen-to-md.xsl"
54
77
  "templates/QUEEN.md.template"
55
78
  "templates/colony-state.template.json"
56
79
  "templates/constraints.template.json"
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "aether-colony",
3
- "version": "5.1.0",
3
+ "version": "5.3.0",
4
4
  "description": "Multi-agent system using ant colony intelligence for Claude Code and OpenCode — workers self-organize via pheromone signals",
5
5
  "bin": {
6
6
  "aether": "bin/cli.js",
7
- "aether-colony": "bin/npx-install.js"
7
+ "aether-colony": "bin/npx-entry.js"
8
8
  },
9
9
  "files": [
10
10
  "bin/",
@@ -31,7 +31,7 @@
31
31
  "test:intelligence": "bash tests/bash/test-intelligence.sh",
32
32
  "generate": "node bin/generate-commands.js",
33
33
  "lint:shell": "shellcheck --severity=error .aether/aether-utils.sh bin/generate-commands.sh .aether/utils/file-lock.sh .aether/utils/atomic-write.sh .aether/utils/colorize-log.sh .aether/utils/watch-spawn-tree.sh",
34
- "lint:json": "node -e \"const fs=require('fs'); const files=['.aether/data/constraints.json','.aether/data/COLONY_STATE.json']; files.filter(f=>fs.existsSync(f)).forEach(f=>{JSON.parse(fs.readFileSync(f,'utf8'))}); console.log('JSON valid')\"",
34
+ "lint:json": "node -e \"const fs=require('fs'); const files=['.aether/data/constraints.json','.aether/data/COLONY_STATE.json']; files.filter(f=>fs.existsSync(f)).forEach(f=>{const s=fs.readFileSync(f,'utf8'); if(s.trim()) JSON.parse(s)}); console.log('JSON valid')\"",
35
35
  "lint:sync": "bash bin/generate-commands.sh check",
36
36
  "lint": "npm run lint:shell && npm run lint:json && npm run lint:sync"
37
37
  },
@@ -69,5 +69,13 @@
69
69
  "commander": "^12.1.0",
70
70
  "js-yaml": "^4.1.0",
71
71
  "picocolors": "^1.1.1"
72
+ },
73
+ "overrides": {
74
+ "minimatch": "^9.0.7",
75
+ "brace-expansion": "^2.0.3",
76
+ "path-to-regexp": "^8.4.0",
77
+ "picomatch": "^4.0.4",
78
+ "tar": "^7.5.11",
79
+ "diff": "^8.0.3"
72
80
  }
73
81
  }
@@ -1,257 +0,0 @@
1
- # Pheromone Display Enhancement Plan
2
-
3
- **Created:** 2026-02-21
4
- **Status:** ✅ COMPLETED
5
- **Priority:** High - User-requested feature gap
6
-
7
- ---
8
-
9
- ## Problem Statement
10
-
11
- The pheromone system works but is invisible:
12
-
13
- 1. **Council command exists** - `/ant:council` proposes pheromones via multiple choice
14
- 2. **Pheromone signals exist** - Stored in `.aether/data/pheromones.json`
15
- 3. **Colony-prime loads them** - But only shows a count like "Primed: 2 signals"
16
- 4. **User never sees them** - The actual content is hidden
17
-
18
- **User's exact words:** "I think it's important to create a significant plan here for how to display the pheromones that are being injected."
19
-
20
- ---
21
-
22
- ## What Exists (Don't Rebuild)
23
-
24
- | Component | Location | Status |
25
- |-----------|----------|--------|
26
- | Council command | `.claude/commands/ant/council.md` | ✅ Works - multi-choice pheromone proposal |
27
- | Focus command | `.claude/commands/ant/focus.md` | ✅ Works - emits FOCUS signal |
28
- | Redirect command | `.claude/commands/ant/redirect.md` | ✅ Works - emits REDIRECT signal |
29
- | Feedback command | `.claude/commands/ant/feedback.md` | ✅ Works - emits FEEDBACK signal |
30
- | Pheromone storage | `.aether/data/pheromones.json` | ✅ Works - stores signals |
31
- | Pheromone-prime | `aether-utils.sh:6211` | ✅ Works - loads signals with decay |
32
- | Colony-prime | `aether-utils.sh:6337` | ✅ Works - combines wisdom + signals |
33
- | Pheromone-count | `aether-utils.sh:6036` | ✅ Works - counts active signals |
34
-
35
- ---
36
-
37
- ## What's Missing
38
-
39
- ### 1. **Pheromone Display Function** (aether-utils.sh)
40
-
41
- A new `pheromone-display` function that outputs a formatted table:
42
-
43
- ```
44
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
45
- A C T I V E P H E R O M O N E S
46
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
47
-
48
- 🎯 FOCUS (Pay attention here)
49
- 1. [85%] "security" — injected 2d ago
50
- 2. [72%] "performance optimization" — injected 5d ago
51
-
52
- 🚫 REDIRECT (Hard constraints - DO NOT do this)
53
- 1. [90%] "use ORM" — injected 1d ago
54
- 2. [68%] "jQuery" — injected 7d ago
55
-
56
- 💬 FEEDBACK (Guidance to consider)
57
- 1. [65%] "prefer composition over inheritance" — injected 3d ago
58
-
59
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
60
- Total: 5 active signals | Decay: FOCUS 30d, REDIRECT 60d, FEEDBACK 90d
61
- ```
62
-
63
- ### 2. **Build Command Enhancement** (build.md)
64
-
65
- After Step 4 (Load Colony Context), add Step 4.1:
66
-
67
- ```markdown
68
- ### Step 4.1: Display Active Pheromones
69
-
70
- Run using the Bash tool:
71
- ```bash
72
- bash .aether/aether-utils.sh pheromone-display
73
- ```
74
-
75
- This displays the formatted pheromone table to the user so they can see what guidance is active.
76
- ```
77
-
78
- ### 3. **Status Command Enhancement** (status.md)
79
-
80
- Add pheromone summary to `/ant:status` output:
81
-
82
- ```markdown
83
- ### Pheromones Active
84
-
85
- 🎯 FOCUS: 2 signals
86
- 🚫 REDIRECT: 1 signal
87
- 💬 FEEDBACK: 1 signal
88
-
89
- Run /ant:pheromones for full details
90
- ```
91
-
92
- ### 4. **New Pheromones Command** (pheromones.md)
93
-
94
- A dedicated command for viewing/managing pheromones:
95
-
96
- ```markdown
97
- ---
98
- name: ant:pheromones
99
- description: "🎯🐜🚫🐜💬 View and manage active pheromone signals"
100
- ---
101
-
102
- Usage:
103
- /ant:pheromones # Display all active signals
104
- /ant:pheromones focus # Show only FOCUS signals
105
- /ant:pheromones redirect # Show only REDIRECT signals
106
- /ant:pheromones feedback # Show only FEEDBACK signals
107
- /ant:pheromones clear # Clear all expired signals
108
- /ant:pheromones expire <id> # Expire a specific signal
109
- ```
110
-
111
- ---
112
-
113
- ## Implementation Plan
114
-
115
- ### Phase 1: pheromone-display Function (aether-utils.sh)
116
-
117
- **Location:** After `pheromone-count` (~line 6058)
118
-
119
- ```bash
120
- pheromone-display)
121
- # Display active pheromones in formatted table
122
- # Usage: pheromone-display [type]
123
- # type: Optional filter (focus/redirect/feedback)
124
- # Returns: Formatted table string
125
-
126
- pd_file="$DATA_DIR/pheromones.json"
127
- pd_type="${1:-all}"
128
- pd_now=$(date +%s)
129
-
130
- if [[ ! -f "$pd_file" ]]; then
131
- echo "No pheromones file found. Run /ant:init to initialize colony."
132
- exit 0
133
- fi
134
-
135
- # Build display using same decay logic as pheromone-read
136
- # ... (implementation details)
137
- ```
138
-
139
- **Output format:**
140
- - Header with box drawing
141
- - Grouped by type (FOCUS, REDIRECT, FEEDBACK)
142
- - Each signal shows: effective strength %, content, age
143
- - Footer with totals and decay info
144
-
145
- ### Phase 2: Update build.md
146
-
147
- Add Step 4.1 after colony-prime call to display pheromones visibly.
148
-
149
- ### Phase 3: Update status.md
150
-
151
- Add pheromone summary section after memory health display.
152
-
153
- ### Phase 4: Create pheromones.md Command
154
-
155
- New slash command for dedicated pheromone viewing and management.
156
-
157
- ---
158
-
159
- ## Display Locations
160
-
161
- | Where | What | When |
162
- |-------|------|------|
163
- | `/ant:build` | Full table | Before spawning workers |
164
- | `/ant:status` | Summary counts | In colony overview |
165
- | `/ant:council` | After injection | Show what was added |
166
- | `/ant:pheromones` | Full table + management | On demand |
167
- | `/ant:continue` | Summary | After phase completion |
168
-
169
- ---
170
-
171
- ## Visual Design
172
-
173
- ### Full Table (for /ant:build, /ant:pheromones)
174
-
175
- ```
176
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
177
- A C T I V E P H E R O M O N E S
178
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
179
-
180
- 🎯 FOCUS (Pay attention here)
181
- 1. [85%] "security"
182
- └── injected 2d ago, expires in 28d
183
- 2. [72%] "performance optimization"
184
- └── injected 5d ago, expires in 25d
185
-
186
- 🚫 REDIRECT (Hard constraints - DO NOT do this)
187
- 1. [90%] "use ORM"
188
- └── injected 1d ago, expires in 59d
189
- 2. [68%] "jQuery"
190
- └── injected 7d ago, expires in 53d
191
-
192
- 💬 FEEDBACK (Guidance to consider)
193
- 1. [65%] "prefer composition over inheritance"
194
- └── injected 3d ago, expires in 87d
195
-
196
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
197
- 5 signals active | Decay rates: FOCUS 30d, REDIRECT 60d, FEEDBACK 90d
198
- ```
199
-
200
- ### Summary (for /ant:status)
201
-
202
- ```
203
- ┌─────────────────────────────────────────────────────────┐
204
- │ PHEROMONES │
205
- ├─────────────────────────────────────────────────────────┤
206
- │ 🎯 FOCUS: 2 🚫 REDIRECT: 1 💬 FEEDBACK: 1 │
207
- │ │
208
- │ Strongest: "use ORM" [90%] │
209
- │ Newest: "security" [85%] - 2d ago │
210
- │ │
211
- │ Run /ant:pheromones for details │
212
- └─────────────────────────────────────────────────────────┘
213
- ```
214
-
215
- ### Injection Confirmation (for /ant:council, /ant:focus, etc.)
216
-
217
- ```
218
- ✓ Pheromone injected:
219
- 🎯 FOCUS: "security"
220
- Strength: 0.8 | Expires: 30d
221
-
222
- Active signals: 5
223
- ```
224
-
225
- ---
226
-
227
- ## Files to Create/Modify
228
-
229
- | File | Action | Purpose |
230
- |------|--------|---------|
231
- | `.aether/aether-utils.sh` | Modify | Add `pheromone-display` function |
232
- | `.claude/commands/ant/build.md` | Modify | Add Step 4.1 - display pheromones |
233
- | `.claude/commands/ant/status.md` | Modify | Add pheromone summary section |
234
- | `.claude/commands/ant/pheromones.md` | Create | New command for viewing/managing |
235
- | `.opencode/commands/ant/pheromones.md` | Create | OpenCode version |
236
-
237
- ---
238
-
239
- ## Testing
240
-
241
- 1. Run `/ant:focus "test signal"` and verify it appears in display
242
- 2. Run `/ant:redirect "avoid this"` and verify it appears in display
243
- 3. Run `/ant:build 1` and verify pheromone table shows before workers spawn
244
- 4. Run `/ant:status` and verify pheromone summary appears
245
- 5. Test decay: Create signal, wait, verify strength decreases
246
-
247
- ---
248
-
249
- ## Success Criteria
250
-
251
- - [x] `/ant:build` displays full pheromone table before spawning workers
252
- - [x] `/ant:status` shows pheromone counts and strongest/newest
253
- - [x] `/ant:pheromones` command exists for dedicated viewing
254
- - [x] `/ant:council` displays what was injected after session (already existed)
255
- - [x] All signal types (FOCUS/REDIRECT/FEEDBACK) visible
256
- - [x] Decay strength shown as percentage
257
- - [x] Age and expiry shown per signal