@esotech/contextuate 2.1.0 → 2.1.2

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 (48) hide show
  1. package/dist/commands/doctor.d.ts +6 -0
  2. package/dist/commands/doctor.js +131 -0
  3. package/dist/commands/init.d.ts +0 -2
  4. package/dist/commands/init.js +164 -228
  5. package/dist/commands/install.js +8 -24
  6. package/dist/index.js +7 -0
  7. package/dist/templates/agents/aegis.md +1 -1
  8. package/dist/templates/agents/archon.md +116 -8
  9. package/dist/templates/agents/atlas.md +17 -17
  10. package/dist/templates/agents/canvas.md +1 -1
  11. package/dist/templates/agents/chronicle.md +1 -1
  12. package/dist/templates/agents/chronos.md +1 -1
  13. package/dist/templates/agents/cipher.md +1 -1
  14. package/dist/templates/agents/crucible.md +1 -1
  15. package/dist/templates/agents/echo.md +1 -1
  16. package/dist/templates/agents/forge.md +1 -1
  17. package/dist/templates/agents/ledger.md +34 -3
  18. package/dist/templates/agents/meridian.md +1 -1
  19. package/dist/templates/agents/nexus.md +1 -1
  20. package/dist/templates/agents/pythia.md +1 -1
  21. package/dist/templates/agents/scribe.md +1 -1
  22. package/dist/templates/agents/sentinel.md +1 -1
  23. package/dist/templates/agents/thoth.md +1 -1
  24. package/dist/templates/agents/unity.md +1 -1
  25. package/dist/templates/agents/vox.md +1 -1
  26. package/dist/templates/agents/weaver.md +1 -1
  27. package/dist/templates/{skills → commands}/consult.md +1 -1
  28. package/dist/templates/commands/orchestrate.md +49 -0
  29. package/dist/templates/framework-agents/documentation-expert.md +3 -3
  30. package/dist/templates/framework-agents/tools-expert.md +3 -3
  31. package/dist/templates/templates/contextuate.md +1 -1
  32. package/dist/templates/tools/agent-creator.md +4 -4
  33. package/dist/templates/tools/standards-detector.md +1 -1
  34. package/dist/utils/tools.d.ts +60 -0
  35. package/dist/utils/tools.js +260 -0
  36. package/package.json +2 -2
  37. package/dist/templates/skills/orchestrate.md +0 -173
  38. package/dist/templates/skills/pythia.md +0 -37
  39. package/dist/templates/templates/standards/go.standards.md +0 -167
  40. package/dist/templates/templates/standards/java.standards.md +0 -167
  41. package/dist/templates/templates/standards/javascript.standards.md +0 -292
  42. package/dist/templates/templates/standards/php.standards.md +0 -181
  43. package/dist/templates/templates/standards/python.standards.md +0 -175
  44. package/dist/templates/tools/agent-creator.tool.md +0 -252
  45. package/dist/templates/tools/quickref.tool.md +0 -216
  46. package/dist/templates/tools/spawn.tool.md +0 -31
  47. package/dist/templates/tools/standards-detector.tool.md +0 -301
  48. package/dist/templates/version.json +0 -8
@@ -0,0 +1,60 @@
1
+ export interface ToolInfo {
2
+ installed: boolean;
3
+ version: string | null;
4
+ path: string | null;
5
+ }
6
+ export interface ToolsConfig {
7
+ ripgrep: ToolInfo;
8
+ }
9
+ export interface ContextuateConfig {
10
+ name: string;
11
+ version: string;
12
+ description: string;
13
+ repository: string;
14
+ initialized: string;
15
+ updated: string;
16
+ tools: ToolsConfig;
17
+ }
18
+ /**
19
+ * Detect ripgrep installation
20
+ */
21
+ export declare function detectRipgrep(): ToolInfo;
22
+ /**
23
+ * Detect all tools
24
+ */
25
+ export declare function detectTools(): ToolsConfig;
26
+ /**
27
+ * Detect the current operating system and package manager
28
+ */
29
+ export declare function detectPlatform(): {
30
+ os: 'macos' | 'linux' | 'windows';
31
+ packageManager: string | null;
32
+ };
33
+ /**
34
+ * Install ripgrep using the appropriate package manager
35
+ */
36
+ export declare function installRipgrep(): Promise<boolean>;
37
+ /**
38
+ * Prompt user to install missing tools
39
+ */
40
+ export declare function promptInstallTools(tools: ToolsConfig, nonInteractive?: boolean): Promise<ToolsConfig>;
41
+ /**
42
+ * Process template variables in a file
43
+ */
44
+ export declare function processTemplateVariables(content: string, tools: ToolsConfig): string;
45
+ /**
46
+ * Process template variables in all files in a directory
47
+ */
48
+ export declare function processTemplateDirectory(dir: string, tools: ToolsConfig): Promise<number>;
49
+ /**
50
+ * Read contextuate.json config
51
+ */
52
+ export declare function readContextuateConfig(installDir: string): Promise<ContextuateConfig | null>;
53
+ /**
54
+ * Write contextuate.json config
55
+ */
56
+ export declare function writeContextuateConfig(installDir: string, config: ContextuateConfig): Promise<void>;
57
+ /**
58
+ * Print tool status
59
+ */
60
+ export declare function printToolStatus(tools: ToolsConfig): void;
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.detectRipgrep = detectRipgrep;
7
+ exports.detectTools = detectTools;
8
+ exports.detectPlatform = detectPlatform;
9
+ exports.installRipgrep = installRipgrep;
10
+ exports.promptInstallTools = promptInstallTools;
11
+ exports.processTemplateVariables = processTemplateVariables;
12
+ exports.processTemplateDirectory = processTemplateDirectory;
13
+ exports.readContextuateConfig = readContextuateConfig;
14
+ exports.writeContextuateConfig = writeContextuateConfig;
15
+ exports.printToolStatus = printToolStatus;
16
+ const child_process_1 = require("child_process");
17
+ const chalk_1 = __importDefault(require("chalk"));
18
+ const inquirer_1 = __importDefault(require("inquirer"));
19
+ const fs_extra_1 = __importDefault(require("fs-extra"));
20
+ const path_1 = __importDefault(require("path"));
21
+ const os_1 = __importDefault(require("os"));
22
+ /**
23
+ * Detect if a command exists and get its path
24
+ */
25
+ function detectCommand(command) {
26
+ try {
27
+ const result = (0, child_process_1.execSync)(`which ${command}`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
28
+ return { exists: true, path: result.trim() };
29
+ }
30
+ catch {
31
+ return { exists: false, path: null };
32
+ }
33
+ }
34
+ /**
35
+ * Get ripgrep version
36
+ */
37
+ function getRipgrepVersion(rgPath) {
38
+ try {
39
+ const result = (0, child_process_1.execSync)(`"${rgPath}" --version`, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
40
+ const match = result.match(/ripgrep\s+(\d+\.\d+\.\d+)/);
41
+ return match ? match[1] : null;
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Detect ripgrep installation
49
+ */
50
+ function detectRipgrep() {
51
+ const detection = detectCommand('rg');
52
+ if (!detection.exists) {
53
+ return { installed: false, version: null, path: null };
54
+ }
55
+ const version = getRipgrepVersion(detection.path);
56
+ return {
57
+ installed: true,
58
+ version,
59
+ path: detection.path
60
+ };
61
+ }
62
+ /**
63
+ * Detect all tools
64
+ */
65
+ function detectTools() {
66
+ return {
67
+ ripgrep: detectRipgrep()
68
+ };
69
+ }
70
+ /**
71
+ * Detect the current operating system and package manager
72
+ */
73
+ function detectPlatform() {
74
+ const platform = os_1.default.platform();
75
+ if (platform === 'darwin') {
76
+ // Check for Homebrew
77
+ const brew = detectCommand('brew');
78
+ return { os: 'macos', packageManager: brew.exists ? 'brew' : null };
79
+ }
80
+ if (platform === 'linux') {
81
+ // Check for common package managers
82
+ if (detectCommand('apt-get').exists) {
83
+ return { os: 'linux', packageManager: 'apt' };
84
+ }
85
+ if (detectCommand('dnf').exists) {
86
+ return { os: 'linux', packageManager: 'dnf' };
87
+ }
88
+ if (detectCommand('yum').exists) {
89
+ return { os: 'linux', packageManager: 'yum' };
90
+ }
91
+ if (detectCommand('pacman').exists) {
92
+ return { os: 'linux', packageManager: 'pacman' };
93
+ }
94
+ return { os: 'linux', packageManager: null };
95
+ }
96
+ if (platform === 'win32') {
97
+ // Check for common Windows package managers
98
+ if (detectCommand('choco').exists) {
99
+ return { os: 'windows', packageManager: 'choco' };
100
+ }
101
+ if (detectCommand('winget').exists) {
102
+ return { os: 'windows', packageManager: 'winget' };
103
+ }
104
+ return { os: 'windows', packageManager: null };
105
+ }
106
+ return { os: 'linux', packageManager: null };
107
+ }
108
+ /**
109
+ * Install ripgrep using the appropriate package manager
110
+ */
111
+ async function installRipgrep() {
112
+ const platform = detectPlatform();
113
+ let installCommand;
114
+ switch (platform.packageManager) {
115
+ case 'brew':
116
+ installCommand = 'brew install ripgrep';
117
+ break;
118
+ case 'apt':
119
+ installCommand = 'sudo apt-get install -y ripgrep';
120
+ break;
121
+ case 'dnf':
122
+ installCommand = 'sudo dnf install -y ripgrep';
123
+ break;
124
+ case 'yum':
125
+ installCommand = 'sudo yum install -y ripgrep';
126
+ break;
127
+ case 'pacman':
128
+ installCommand = 'sudo pacman -S --noconfirm ripgrep';
129
+ break;
130
+ case 'choco':
131
+ installCommand = 'choco install ripgrep -y';
132
+ break;
133
+ case 'winget':
134
+ installCommand = 'winget install BurntSushi.ripgrep.MSVC';
135
+ break;
136
+ default:
137
+ console.log(chalk_1.default.yellow('[WARN] No supported package manager found.'));
138
+ console.log(chalk_1.default.blue('[INFO] Please install ripgrep manually:'));
139
+ console.log(chalk_1.default.gray(' - macOS: brew install ripgrep'));
140
+ console.log(chalk_1.default.gray(' - Ubuntu/Debian: sudo apt install ripgrep'));
141
+ console.log(chalk_1.default.gray(' - Fedora: sudo dnf install ripgrep'));
142
+ console.log(chalk_1.default.gray(' - Arch: sudo pacman -S ripgrep'));
143
+ console.log(chalk_1.default.gray(' - Windows: choco install ripgrep'));
144
+ console.log(chalk_1.default.gray(' - Or download from: https://github.com/BurntSushi/ripgrep/releases'));
145
+ return false;
146
+ }
147
+ console.log(chalk_1.default.blue(`[INFO] Installing ripgrep via ${platform.packageManager}...`));
148
+ console.log(chalk_1.default.gray(` Running: ${installCommand}`));
149
+ return new Promise((resolve) => {
150
+ (0, child_process_1.exec)(installCommand, (error, stdout, stderr) => {
151
+ if (error) {
152
+ console.log(chalk_1.default.red(`[ERROR] Installation failed: ${error.message}`));
153
+ if (stderr) {
154
+ console.log(chalk_1.default.gray(stderr));
155
+ }
156
+ resolve(false);
157
+ }
158
+ else {
159
+ console.log(chalk_1.default.green('[OK] ripgrep installed successfully'));
160
+ resolve(true);
161
+ }
162
+ });
163
+ });
164
+ }
165
+ /**
166
+ * Prompt user to install missing tools
167
+ */
168
+ async function promptInstallTools(tools, nonInteractive = false) {
169
+ // Check ripgrep
170
+ if (!tools.ripgrep.installed && !nonInteractive) {
171
+ const { installRg } = await inquirer_1.default.prompt([
172
+ {
173
+ type: 'confirm',
174
+ name: 'installRg',
175
+ message: 'ripgrep (rg) is not installed. Would you like to install it? (Recommended for faster code search)',
176
+ default: true,
177
+ },
178
+ ]);
179
+ if (installRg) {
180
+ const success = await installRipgrep();
181
+ if (success) {
182
+ // Re-detect after installation
183
+ tools.ripgrep = detectRipgrep();
184
+ }
185
+ }
186
+ }
187
+ return tools;
188
+ }
189
+ /**
190
+ * Process template variables in a file
191
+ */
192
+ function processTemplateVariables(content, tools) {
193
+ // Replace {grep} with rg if ripgrep is installed, otherwise grep
194
+ const grepCommand = tools.ripgrep.installed ? 'rg' : 'grep';
195
+ return content.replace(/\{grep\}/g, grepCommand);
196
+ }
197
+ /**
198
+ * Process template variables in all files in a directory
199
+ */
200
+ async function processTemplateDirectory(dir, tools) {
201
+ let processedCount = 0;
202
+ if (!fs_extra_1.default.existsSync(dir)) {
203
+ return processedCount;
204
+ }
205
+ const processDir = async (currentDir) => {
206
+ const entries = await fs_extra_1.default.readdir(currentDir, { withFileTypes: true });
207
+ for (const entry of entries) {
208
+ const fullPath = path_1.default.join(currentDir, entry.name);
209
+ if (entry.isDirectory()) {
210
+ await processDir(fullPath);
211
+ }
212
+ else if (entry.isFile() && entry.name.endsWith('.md')) {
213
+ const content = await fs_extra_1.default.readFile(fullPath, 'utf-8');
214
+ const processed = processTemplateVariables(content, tools);
215
+ if (content !== processed) {
216
+ await fs_extra_1.default.writeFile(fullPath, processed);
217
+ processedCount++;
218
+ }
219
+ }
220
+ }
221
+ };
222
+ await processDir(dir);
223
+ return processedCount;
224
+ }
225
+ /**
226
+ * Read contextuate.json config
227
+ */
228
+ async function readContextuateConfig(installDir) {
229
+ const configPath = path_1.default.join(installDir, 'contextuate.json');
230
+ try {
231
+ if (fs_extra_1.default.existsSync(configPath)) {
232
+ const content = await fs_extra_1.default.readFile(configPath, 'utf-8');
233
+ return JSON.parse(content);
234
+ }
235
+ }
236
+ catch {
237
+ // Config doesn't exist or is invalid
238
+ }
239
+ return null;
240
+ }
241
+ /**
242
+ * Write contextuate.json config
243
+ */
244
+ async function writeContextuateConfig(installDir, config) {
245
+ const configPath = path_1.default.join(installDir, 'contextuate.json');
246
+ await fs_extra_1.default.writeFile(configPath, JSON.stringify(config, null, 2));
247
+ }
248
+ /**
249
+ * Print tool status
250
+ */
251
+ function printToolStatus(tools) {
252
+ console.log('');
253
+ console.log(chalk_1.default.blue('[INFO] Tool Status:'));
254
+ if (tools.ripgrep.installed) {
255
+ console.log(chalk_1.default.green(` [OK] ripgrep: ${tools.ripgrep.path} (v${tools.ripgrep.version})`));
256
+ }
257
+ else {
258
+ console.log(chalk_1.default.yellow(' [--] ripgrep: not installed (using grep fallback)'));
259
+ }
260
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esotech/contextuate",
3
- "version": "2.1.0",
3
+ "version": "2.1.2",
4
4
  "description": "**Standardized AI Context for Software Projects**",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "scripts": {
13
13
  "test": "echo \"Error: no test specified\" && exit 1",
14
- "build": "tsc && mkdir -p dist/templates && cp -r src/templates/* dist/templates/ && mkdir -p dist/monitor/hooks && cp src/monitor/hooks/emit-event.js dist/monitor/hooks/ && chmod +x dist/index.js dist/monitor/hooks/emit-event.js dist/monitor/daemon/cli.js dist/monitor/server/cli.js",
14
+ "build": "tsc && rm -rf dist/templates && mkdir -p dist/templates && cp -r src/templates/* dist/templates/ && mkdir -p dist/monitor/hooks && cp src/monitor/hooks/emit-event.js dist/monitor/hooks/ && chmod +x dist/index.js dist/monitor/hooks/emit-event.js dist/monitor/daemon/cli.js dist/monitor/server/cli.js",
15
15
  "build:monitor-ui": "cd src/monitor/ui && npm install && npm run build",
16
16
  "build:all": "npm run build && npm run build:monitor-ui",
17
17
  "prepublishOnly": "npm run build:all"
@@ -1,173 +0,0 @@
1
- # /orchestrate - Orchestrator Mode Skill
2
-
3
- Activate the ARCHON agent for coordinated multi-agent task execution.
4
-
5
- ## Agent Invocation
6
-
7
- **IMPORTANT:** Before proceeding, read and adopt the ARCHON agent persona:
8
-
9
- **Agent Definition:** [agents/archon.md](../agents/archon.md)
10
-
11
- Read the agent file above, then follow its guidelines for task analysis, delegation, and synthesis.
12
-
13
- ## Usage
14
-
15
- ```
16
- /orchestrate [task description]
17
- ```
18
-
19
- ## Behavior
20
-
21
- When this skill is invoked, read the ARCHON agent definition and adopt its persona to:
22
-
23
- 1. **Analyze the task** to identify required domains and complexity
24
- 2. **Delegate to specialist agents** rather than implementing directly
25
- 3. **Coordinate handoffs** between agents for dependent tasks
26
- 4. **Synthesize results** into a cohesive solution
27
-
28
- ## Pre-Orchestration
29
-
30
- For complex or unfamiliar work, use `/consult` BEFORE `/orchestrate`:
31
- ```
32
- /consult [research/plan topic] → produces specification
33
- /orchestrate [implement spec] → delegates to specialists
34
- ```
35
-
36
- ## Available Specialist Agents
37
-
38
- > **Agent Roster:** [agent-roles.md](../.contextuate/standards/agent-roles.md)
39
-
40
- Read the agent roster for the complete list of specialist agents with their domains and when to use each one.
41
-
42
- ## Examples
43
-
44
- ### Multi-domain feature
45
- ```
46
- /orchestrate Add a new API endpoint with database query, validation, and tests
47
- ```
48
- Result: Delegates to thoth (query), nexus (API), sentinel (validation), crucible (tests)
49
-
50
- ### Code review workflow
51
- ```
52
- /orchestrate Review the authentication module for security issues and suggest improvements
53
- ```
54
- Result: Delegates to atlas (find files), sentinel (security analysis), aegis (code review)
55
-
56
- ### Documentation task
57
- ```
58
- /orchestrate Document the monitor feature architecture and create API reference
59
- ```
60
- Result: Delegates to chronicle (architecture doc), scribe (API reference)
61
-
62
- ## Orchestration Rules
63
-
64
- 1. **Never implement directly** - Always delegate to specialist agents
65
- 2. **Provide context** - Give agents specific file paths and patterns to follow
66
- 3. **Track complex tasks** - Use ledger for multi-step work
67
- 4. **Synthesize results** - Combine agent outputs into cohesive solution
68
- 5. **Keep context clean** - Delegate to subagents to preserve main context window
69
-
70
- ## Parallel Execution
71
-
72
- **CRITICAL: Always spawn independent agents in parallel.**
73
-
74
- When multiple agents can work independently (no dependencies between their outputs), you MUST launch them in a single message with multiple Task tool calls:
75
-
76
- ```
77
- Good: Single message with parallel Task calls for independent work
78
- ├── Task: atlas (find auth files)
79
- ├── Task: thoth (analyze schema)
80
- └── Task: sentinel (security review)
81
-
82
- Bad: Sequential Task calls when work is independent
83
- ├── Message 1: Task: atlas...
84
- ├── Message 2: Task: thoth...
85
- └── Message 3: Task: sentinel...
86
- ```
87
-
88
- **Parallel execution rules:**
89
- - Identify independent tasks that don't depend on each other's output
90
- - Launch all independent tasks in a single response
91
- - Only serialize tasks that have true dependencies
92
- - Use background execution (`run_in_background: true`) for long-running tasks when appropriate
93
-
94
- ## File Contention & Conflict Avoidance
95
-
96
- When multiple agents may modify the same files, use the **Intent-First Locking Protocol**.
97
-
98
- > **Full Protocol:** [agent-workflow.md](../.contextuate/standards/agent-workflow.md#conflict-avoidance--file-locking)
99
-
100
- ### Quick Reference
101
-
102
- **Step 1: Intent Declaration** - Before editing, agents declare intent:
103
- ```yaml
104
- Status: PLANNING
105
- Intent:
106
- - Modify: src/path/to/file.js
107
- - Create: src/path/to/new-file.js
108
- ```
109
-
110
- **Step 2: Archon Validation** - Check against Active Lock Table:
111
- - **Clear**: Lock the files, approve execution
112
- - **Conflict**: Queue the agent until files are released
113
-
114
- **Step 3: Resolution Options:**
115
- | Scenario | Resolution |
116
- |----------|------------|
117
- | Files are free | Lock and proceed |
118
- | Files locked by another agent | Queue and wait |
119
- | Highly parallel work | Use Git Worktree isolation |
120
-
121
- ### Git Worktree Alternative
122
- For highly parallel tasks where locking is too restrictive:
123
- 1. Create disposable Git worktree (branch) per agent
124
- 2. Agent works entirely within worktree
125
- 3. Agent commits and signals ready
126
- 4. **Unity** merges branch into main
127
-
128
- ## Agent Preference Order
129
-
130
- **CRITICAL: Prefer specialist agents over general-purpose agents.**
131
-
132
- When deciding which agent to use, follow this preference hierarchy:
133
-
134
- 1. **Custom Specialist Agents** (STRONGLY PREFERRED)
135
- - aegis, atlas, canvas, chronicle, chronos, cipher, crucible, echo, forge, ledger, meridian, nexus, thoth, scribe, sentinel, unity, vox, weaver
136
- - These have domain-specific expertise and context
137
-
138
- 2. **Built-in Specialized Agents** (Use only if no specialist fits)
139
- - Plan, Explore, claude-code-guide
140
-
141
- 3. **General-Purpose Agents** (AVOID unless absolutely necessary)
142
- - general-purpose - Only use for truly generic tasks that don't fit any specialist
143
-
144
- **Examples:**
145
- | Task | Wrong Choice | Right Choice |
146
- |------|-------------|--------------|
147
- | Find files related to auth | general-purpose | **atlas** |
148
- | Write API documentation | general-purpose | **scribe** |
149
- | Review code quality | Explore | **aegis** |
150
- | Create database queries | general-purpose | **thoth** |
151
- | Build new component | general-purpose | **forge** (scaffold) + **canvas** (UI) |
152
-
153
- **Always ask: "Which specialist agent has domain expertise for this task?"**
154
-
155
- ## Decision Tree
156
-
157
- ```
158
- Is this a simple, single-domain task?
159
- ├── YES → Delegate to single specialist
160
- └── NO → Break down and coordinate multiple specialists
161
-
162
- Does it require exploration first?
163
- ├── YES → Start with atlas for navigation
164
- └── NO → Proceed to implementation agents
165
-
166
- Is this multi-step?
167
- ├── YES → Engage ledger for tracking
168
- └── NO → Direct delegation
169
-
170
- Should we review the result?
171
- ├── YES → aegis for quality, crucible for tests
172
- └── NO → Deliver directly
173
- ```
@@ -1,37 +0,0 @@
1
- # /pythia - Strategic Planning Oracle
2
-
3
- Alias for `/consult`. Activates the PYTHIA agent for strategic planning and research.
4
-
5
- ## Agent Invocation
6
-
7
- **IMPORTANT:** Before proceeding, read and adopt the PYTHIA agent persona:
8
-
9
- **Agent Definition:** [agents/pythia.md](../agents/pythia.md)
10
-
11
- Read the agent file above, then follow its guidelines for research, synthesis, and specification creation.
12
-
13
- ## Usage
14
-
15
- ```
16
- /pythia [topic or question]
17
- ```
18
-
19
- See [/consult](./consult.md) for full documentation and behavior details.
20
-
21
- ## Quick Reference
22
-
23
- | Command | Purpose |
24
- |---------|---------|
25
- | `/pythia [topic]` | Research and plan before implementation |
26
- | `/consult [topic]` | Same as `/pythia` |
27
- | `/orchestrate [task]` | Execute implementation with specialist agents |
28
-
29
- ## Example Flow
30
-
31
- ```
32
- /pythia How should we implement real-time notifications?
33
- |
34
- [PYTHIA produces specification]
35
- |
36
- /orchestrate Implement the notification system per spec
37
- ```