oh-my-claudecode 0.1.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.
- package/README.md +281 -0
- package/bin/oh-my-claudecode.js +5 -0
- package/dist/agents/azathoth.d.ts +19 -0
- package/dist/agents/azathoth.d.ts.map +1 -0
- package/dist/agents/azathoth.js +105 -0
- package/dist/agents/azathoth.js.map +1 -0
- package/dist/agents/builtin-agents.d.ts +18 -0
- package/dist/agents/builtin-agents.d.ts.map +1 -0
- package/dist/agents/builtin-agents.js +141 -0
- package/dist/agents/builtin-agents.js.map +1 -0
- package/dist/agents/cthulhu.d.ts +21 -0
- package/dist/agents/cthulhu.d.ts.map +1 -0
- package/dist/agents/cthulhu.js +368 -0
- package/dist/agents/cthulhu.js.map +1 -0
- package/dist/agents/dagon.d.ts +17 -0
- package/dist/agents/dagon.d.ts.map +1 -0
- package/dist/agents/dagon.js +190 -0
- package/dist/agents/dagon.js.map +1 -0
- package/dist/agents/hastur.d.ts +18 -0
- package/dist/agents/hastur.d.ts.map +1 -0
- package/dist/agents/hastur.js +92 -0
- package/dist/agents/hastur.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +13 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/ithaqua.d.ts +19 -0
- package/dist/agents/ithaqua.d.ts.map +1 -0
- package/dist/agents/ithaqua.js +254 -0
- package/dist/agents/ithaqua.js.map +1 -0
- package/dist/agents/nyarlathotep.d.ts +18 -0
- package/dist/agents/nyarlathotep.d.ts.map +1 -0
- package/dist/agents/nyarlathotep.js +129 -0
- package/dist/agents/nyarlathotep.js.map +1 -0
- package/dist/agents/shoggoth.d.ts +17 -0
- package/dist/agents/shoggoth.d.ts.map +1 -0
- package/dist/agents/shoggoth.js +123 -0
- package/dist/agents/shoggoth.js.map +1 -0
- package/dist/agents/shub-niggurath.d.ts +18 -0
- package/dist/agents/shub-niggurath.d.ts.map +1 -0
- package/dist/agents/shub-niggurath.js +164 -0
- package/dist/agents/shub-niggurath.js.map +1 -0
- package/dist/agents/the-deep-one.d.ts +17 -0
- package/dist/agents/the-deep-one.d.ts.map +1 -0
- package/dist/agents/the-deep-one.js +114 -0
- package/dist/agents/the-deep-one.js.map +1 -0
- package/dist/agents/tsathoggua.d.ts +19 -0
- package/dist/agents/tsathoggua.d.ts.map +1 -0
- package/dist/agents/tsathoggua.js +177 -0
- package/dist/agents/tsathoggua.js.map +1 -0
- package/dist/agents/types.d.ts +61 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/agents/yog-sothoth.d.ts +17 -0
- package/dist/agents/yog-sothoth.d.ts.map +1 -0
- package/dist/agents/yog-sothoth.js +147 -0
- package/dist/agents/yog-sothoth.js.map +1 -0
- package/dist/cli/doctor.d.ts +2 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +105 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +53 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/install.d.ts +5 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +179 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +7406 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +197 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/features/background-agent/index.d.ts +58 -0
- package/dist/features/background-agent/index.d.ts.map +1 -0
- package/dist/features/background-agent/index.js +113 -0
- package/dist/features/background-agent/index.js.map +1 -0
- package/dist/features/mcp-manager/index.d.ts +40 -0
- package/dist/features/mcp-manager/index.d.ts.map +1 -0
- package/dist/features/mcp-manager/index.js +71 -0
- package/dist/features/mcp-manager/index.js.map +1 -0
- package/dist/features/skill-loader/index.d.ts +37 -0
- package/dist/features/skill-loader/index.d.ts.map +1 -0
- package/dist/features/skill-loader/index.js +81 -0
- package/dist/features/skill-loader/index.js.map +1 -0
- package/dist/hooks/comment-checker.d.ts +18 -0
- package/dist/hooks/comment-checker.d.ts.map +1 -0
- package/dist/hooks/comment-checker.js +75 -0
- package/dist/hooks/comment-checker.js.map +1 -0
- package/dist/hooks/elder-loop.d.ts +26 -0
- package/dist/hooks/elder-loop.d.ts.map +1 -0
- package/dist/hooks/elder-loop.js +84 -0
- package/dist/hooks/elder-loop.js.map +1 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +73 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/rules-injector.d.ts +12 -0
- package/dist/hooks/rules-injector.d.ts.map +1 -0
- package/dist/hooks/rules-injector.js +52 -0
- package/dist/hooks/rules-injector.js.map +1 -0
- package/dist/hooks/todo-continuation.d.ts +25 -0
- package/dist/hooks/todo-continuation.d.ts.map +1 -0
- package/dist/hooks/todo-continuation.js +74 -0
- package/dist/hooks/todo-continuation.js.map +1 -0
- package/dist/hooks/write-guard.d.ts +11 -0
- package/dist/hooks/write-guard.d.ts.map +1 -0
- package/dist/hooks/write-guard.js +39 -0
- package/dist/hooks/write-guard.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin-config.d.ts +22 -0
- package/dist/plugin-config.d.ts.map +1 -0
- package/dist/plugin-config.js +133 -0
- package/dist/plugin-config.js.map +1 -0
- package/dist/plugin-handlers/config-handler.d.ts +21 -0
- package/dist/plugin-handlers/config-handler.d.ts.map +1 -0
- package/dist/plugin-handlers/config-handler.js +33 -0
- package/dist/plugin-handlers/config-handler.js.map +1 -0
- package/dist/plugin-handlers/index.d.ts +2 -0
- package/dist/plugin-handlers/index.d.ts.map +1 -0
- package/dist/plugin-handlers/index.js +2 -0
- package/dist/plugin-handlers/index.js.map +1 -0
- package/dist/shared/deep-merge.d.ts +6 -0
- package/dist/shared/deep-merge.d.ts.map +1 -0
- package/dist/shared/deep-merge.js +30 -0
- package/dist/shared/deep-merge.js.map +1 -0
- package/dist/shared/index.d.ts +5 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +5 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/log.d.ts +3 -0
- package/dist/shared/log.d.ts.map +1 -0
- package/dist/shared/log.js +22 -0
- package/dist/shared/log.js.map +1 -0
- package/dist/shared/model-resolution.d.ts +15 -0
- package/dist/shared/model-resolution.d.ts.map +1 -0
- package/dist/shared/model-resolution.js +46 -0
- package/dist/shared/model-resolution.js.map +1 -0
- package/dist/shared/parse-jsonc.d.ts +6 -0
- package/dist/shared/parse-jsonc.d.ts.map +1 -0
- package/dist/shared/parse-jsonc.js +14 -0
- package/dist/shared/parse-jsonc.js.map +1 -0
- package/package.json +42 -0
- package/skills/cancel-elder-loop.md +22 -0
- package/skills/cthulhu.md +45 -0
- package/skills/elder-loop.md +39 -0
- package/skills/exorcise-ai-slop.md +45 -0
- package/skills/invoke-shub.md +32 -0
- package/skills/old-ones-init.md +47 -0
- package/skills/session-handoff.md +57 -0
- package/skills/shoggoth.md +34 -0
- package/skills/yog-sothoth.md +30 -0
package/README.md
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# oh-my-claudecode
|
|
2
|
+
|
|
3
|
+
> *Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.*
|
|
4
|
+
|
|
5
|
+
A Cthulhu Mythos-themed agentic harness for [Claude Code](https://claude.ai/code). Provides 11 specialized Elder God agents, lifecycle hooks, a skill system, and multi-tier orchestration.
|
|
6
|
+
|
|
7
|
+
## What This Is
|
|
8
|
+
|
|
9
|
+
oh-my-claudecode extends Claude Code with a complete agentic infrastructure:
|
|
10
|
+
|
|
11
|
+
- **11 Elder God agents** each specialized for a different domain
|
|
12
|
+
- **5 lifecycle hooks** for todo enforcement, completion loops, code quality, and context injection
|
|
13
|
+
- **9 slash commands (skills)** for invoking agents and managing sessions
|
|
14
|
+
- **3-level config system** (defaults → user → project) with Zod validation
|
|
15
|
+
- **Background agent management** with circuit breaker and concurrency limits
|
|
16
|
+
- **Work plan system** with structured planning and review flow
|
|
17
|
+
|
|
18
|
+
## Agent Roster
|
|
19
|
+
|
|
20
|
+
| Elder God | Maps From | Model | Mode | Role |
|
|
21
|
+
|-----------|-----------|-------|------|------|
|
|
22
|
+
| **Cthulhu** | Sisyphus | Opus | primary | Main orchestrator — intent gate, delegation, parallel execution, verification |
|
|
23
|
+
| **Nyarlathotep** | Hephaestus | Opus | subagent | Deep autonomous worker — end-to-end goal execution |
|
|
24
|
+
| **Azathoth** | Atlas | Opus | primary | First-message planner — initial context sweep and routing |
|
|
25
|
+
| **Shub-Niggurath** | Prometheus | Opus | primary | Strategic planner — interview → scope → plan → Tsathoggua review |
|
|
26
|
+
| **Yog-Sothoth** | Oracle | Opus | subagent | Architecture/debug advisor — read-only, high-reasoning consultation |
|
|
27
|
+
| **Hastur** | Sisyphus-Jr | Sonnet | subagent | Lightweight sub-orchestrator for bounded tasks |
|
|
28
|
+
| **Ithaqua** | Metis | Sonnet | subagent | Pre-planning consultant — intent classification, anti-slop guardrails |
|
|
29
|
+
| **Tsathoggua** | Momus | Sonnet | subagent | Work plan reviewer — blocker-finder, not perfectionist |
|
|
30
|
+
| **Dagon** | Librarian | Sonnet | subagent | External documentation and GitHub source research |
|
|
31
|
+
| **The Deep One** | Multimodal-Looker | Sonnet | subagent | Vision agent — images, screenshots, diagrams |
|
|
32
|
+
| **Shoggoth** | Explore | Haiku | subagent | Fast parallel codebase search |
|
|
33
|
+
|
|
34
|
+
## Installation
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
npx oh-my-claudecode install
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The interactive wizard will:
|
|
41
|
+
1. Install hook scripts to `~/.claude/hooks/`
|
|
42
|
+
2. Register hooks in `~/.claude/settings.json`
|
|
43
|
+
3. Install skill files to `~/.claude/skills/`
|
|
44
|
+
4. Create `~/.claude/oh-my-claudecode.jsonc` config
|
|
45
|
+
|
|
46
|
+
### Non-interactive install
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx oh-my-claudecode install --no-tui
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Requirements
|
|
53
|
+
|
|
54
|
+
- Claude Code CLI installed (`npm install -g @anthropic-ai/claude-code` or equivalent)
|
|
55
|
+
- Node.js 20+
|
|
56
|
+
- `~/.claude/` directory writable
|
|
57
|
+
|
|
58
|
+
## Slash Commands
|
|
59
|
+
|
|
60
|
+
After installation, these are available in Claude Code sessions:
|
|
61
|
+
|
|
62
|
+
| Command | Maps From | Description |
|
|
63
|
+
|---------|-----------|-------------|
|
|
64
|
+
| `/cthulhu` | (entry) | Activate Cthulhu orchestrator mode |
|
|
65
|
+
| `/shoggoth` | (entry) | Activate Shoggoth search mode |
|
|
66
|
+
| `/yog-sothoth` | (entry) | Activate Yog-Sothoth advisor mode |
|
|
67
|
+
| `/elder-loop` | `/ralph-loop` | Start the completion loop |
|
|
68
|
+
| `/cancel-elder-loop` | `/cancel-ralph` | Stop the active loop |
|
|
69
|
+
| `/old-ones-init` | `/init-deep` | Generate AGENTS.md hierarchy |
|
|
70
|
+
| `/invoke-shub` | `/start-work` | Strategic planning flow |
|
|
71
|
+
| `/session-handoff` | `/handoff` | Create session continuation doc |
|
|
72
|
+
| `/exorcise-ai-slop` | `/remove-ai-slops` | Purge AI code smells |
|
|
73
|
+
|
|
74
|
+
## How Agents Are Invoked
|
|
75
|
+
|
|
76
|
+
**Important difference from OpenCode**: OpenCode has a plugin API that allows registering named agents directly into its agent selector UI. Claude Code does not have an equivalent public plugin API.
|
|
77
|
+
|
|
78
|
+
Instead, oh-my-claudecode agents are invoked through:
|
|
79
|
+
|
|
80
|
+
1. **Slash commands** — `/cthulhu`, `/shoggoth`, etc. activate the named agent mode
|
|
81
|
+
2. **Agent tool delegation** — Cthulhu uses `Agent(subagent_type="shoggoth", ...)` to spawn specialists
|
|
82
|
+
3. **Skill-based dispatch** — skills installed to `~/.claude/skills/` are likely available as `subagent_type` values
|
|
83
|
+
|
|
84
|
+
The agents are additive — they don't replace Claude Code's built-in agent types.
|
|
85
|
+
|
|
86
|
+
## Configuration
|
|
87
|
+
|
|
88
|
+
Config file: `~/.claude/oh-my-claudecode.jsonc` (user-level) and/or `.claude/oh-my-claudecode.jsonc` (project-level).
|
|
89
|
+
|
|
90
|
+
Project config overrides user config for scalar/object fields. Array fields (`disabled_*`) are unioned.
|
|
91
|
+
|
|
92
|
+
```jsonc
|
|
93
|
+
{
|
|
94
|
+
// Override models for specific agents
|
|
95
|
+
"agents": {
|
|
96
|
+
"cthulhu": {
|
|
97
|
+
"model": "opus",
|
|
98
|
+
"prompt_append": "Always write tests for every function you create."
|
|
99
|
+
},
|
|
100
|
+
"shoggoth": {
|
|
101
|
+
"model": "haiku"
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
// Disable agents you don't need
|
|
106
|
+
"disabled_agents": ["nyarlathotep", "the-deep-one"],
|
|
107
|
+
|
|
108
|
+
// Disable specific lifecycle hooks
|
|
109
|
+
"disabled_hooks": ["comment-checker", "write-guard"],
|
|
110
|
+
|
|
111
|
+
// Elder Loop settings (completion loop)
|
|
112
|
+
"elder_loop": {
|
|
113
|
+
"max_iterations": 15,
|
|
114
|
+
"strategy": "continue" // or "reset"
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
// Background agent limits
|
|
118
|
+
"background_task": {
|
|
119
|
+
"max_concurrent": 8,
|
|
120
|
+
"circuit_breaker_threshold": 3
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Available Models
|
|
126
|
+
|
|
127
|
+
Only Claude models are used:
|
|
128
|
+
|
|
129
|
+
| Short Alias | Full Model ID |
|
|
130
|
+
|-------------|--------------|
|
|
131
|
+
| `opus` | `claude-opus-4-6` |
|
|
132
|
+
| `sonnet` | `claude-sonnet-4-6` |
|
|
133
|
+
| `haiku` | `claude-haiku-4-5` |
|
|
134
|
+
|
|
135
|
+
## Lifecycle Hooks
|
|
136
|
+
|
|
137
|
+
5 hooks are installed into Claude Code's `settings.json`:
|
|
138
|
+
|
|
139
|
+
| Hook | Event | Description |
|
|
140
|
+
|------|-------|-------------|
|
|
141
|
+
| `todo-continuation` | Stop | If incomplete todos exist when stopping, inject a reminder to continue |
|
|
142
|
+
| `elder-loop` | Stop | Self-referential completion loop (set promise → keeps running until met) |
|
|
143
|
+
| `comment-checker` | PostToolUse | Warn when AI-slop comments are written (explains obvious code) |
|
|
144
|
+
| `rules-injector` | PreToolUse | Auto-inject `.elder-gods/rules/*.md` into agent context |
|
|
145
|
+
| `write-guard` | PreToolUse | Warn when `Write` is used on an existing file (suggest `Edit`) |
|
|
146
|
+
|
|
147
|
+
Disable specific hooks in config:
|
|
148
|
+
```jsonc
|
|
149
|
+
{ "disabled_hooks": ["comment-checker", "write-guard"] }
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Project Structure
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
oh-my-claudecode/
|
|
156
|
+
├── src/
|
|
157
|
+
│ ├── agents/ # 11 Elder God agent definitions + builder
|
|
158
|
+
│ ├── config/ # Zod schema — full type system
|
|
159
|
+
│ ├── hooks/ # Lifecycle hook scripts and configs
|
|
160
|
+
│ ├── features/
|
|
161
|
+
│ │ ├── background-agent/ # BackgroundManager (circuit breaker, concurrency)
|
|
162
|
+
│ │ ├── skill-loader/ # Discovers user skills from .claude/skills/
|
|
163
|
+
│ │ └── mcp-manager/ # Skill-scoped MCP lifecycle
|
|
164
|
+
│ ├── plugin-handlers/ # 5-phase config pipeline
|
|
165
|
+
│ ├── shared/ # Logging, deep-merge, model resolution
|
|
166
|
+
│ └── cli/ # Installer, doctor, list-agents
|
|
167
|
+
├── skills/ # Markdown slash commands
|
|
168
|
+
└── NECRONOMICON.md # Plugin architecture reference
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Project-Level Setup
|
|
172
|
+
|
|
173
|
+
### Architectural Rules
|
|
174
|
+
|
|
175
|
+
Place rules in `.elder-gods/rules/*.md` — auto-injected into every agent's context:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
.elder-gods/
|
|
179
|
+
└── rules/
|
|
180
|
+
├── no-any.md # No TypeScript `any`
|
|
181
|
+
├── test-coverage.md # Minimum test requirements
|
|
182
|
+
└── naming-conv.md # Naming conventions
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Example `.elder-gods/rules/no-any.md`:
|
|
186
|
+
```markdown
|
|
187
|
+
# No TypeScript `any`
|
|
188
|
+
|
|
189
|
+
NEVER use `any` type. Use `unknown` and narrow appropriately, or define a proper type.
|
|
190
|
+
This rule is non-negotiable. Tsathoggua will reject any plan that introduces `any`.
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Work Plans
|
|
194
|
+
|
|
195
|
+
Plans are stored in `.elder-gods/plans/*.md` and reviewed by Tsathoggua before execution.
|
|
196
|
+
|
|
197
|
+
Use `/invoke-shub` to start the planning flow:
|
|
198
|
+
1. Shub-Niggurath surveys codebase
|
|
199
|
+
2. Interviews you with scoping questions
|
|
200
|
+
3. Creates plan at `.elder-gods/plans/[task].md`
|
|
201
|
+
4. Tsathoggua reviews for executability
|
|
202
|
+
5. Cthulhu orchestrates implementation
|
|
203
|
+
|
|
204
|
+
### Knowledge Base
|
|
205
|
+
|
|
206
|
+
Use `/old-ones-init` to generate `AGENTS.md` files at the root and in key subdirectories. These give all agents project context without requiring repeated exploration.
|
|
207
|
+
|
|
208
|
+
## Diagnostics
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
npx oh-my-claudecode doctor
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Checks:
|
|
215
|
+
- `~/.claude/` directory exists
|
|
216
|
+
- `settings.json` present
|
|
217
|
+
- All hook scripts installed
|
|
218
|
+
- Hooks registered in settings
|
|
219
|
+
- Skills installed
|
|
220
|
+
- Plugin config valid
|
|
221
|
+
|
|
222
|
+
## Agent Detail
|
|
223
|
+
|
|
224
|
+
### Cthulhu (Main Orchestrator)
|
|
225
|
+
|
|
226
|
+
The heart of the system. Every user message passes through Cthulhu's intent gate:
|
|
227
|
+
|
|
228
|
+
1. **Verbalize intent** — explicitly classify what the user wants before acting
|
|
229
|
+
2. **Route accordingly** — trivial → direct tools; exploratory → parallel Shoggoth agents; implementation → plan + delegate; ambiguous → one question
|
|
230
|
+
3. **Plan before acting** — if 2+ steps, create detailed todos immediately
|
|
231
|
+
4. **Delegate aggressively** — never work alone when a specialist is available
|
|
232
|
+
5. **Verify before completing** — diagnostics, tests, evidence required
|
|
233
|
+
|
|
234
|
+
### Shoggoth (Codebase Search)
|
|
235
|
+
|
|
236
|
+
Fire 3+ in parallel. They're formless and free. Use for:
|
|
237
|
+
- Finding where X is implemented
|
|
238
|
+
- Discovering patterns to follow
|
|
239
|
+
- Cross-module structure discovery
|
|
240
|
+
|
|
241
|
+
### Yog-Sothoth (Architecture Advisor)
|
|
242
|
+
|
|
243
|
+
Consult when:
|
|
244
|
+
- Architecture decision requires multi-system tradeoffs
|
|
245
|
+
- After 2+ failed fix attempts
|
|
246
|
+
- Completing significant implementation for self-review
|
|
247
|
+
|
|
248
|
+
Response always includes: Bottom line (2-3 sentences), Action plan (≤7 steps), Effort estimate.
|
|
249
|
+
|
|
250
|
+
### Shub-Niggurath + Tsathoggua (Planning Flow)
|
|
251
|
+
|
|
252
|
+
Shub-Niggurath interviews → creates `.elder-gods/plans/task.md` → Tsathoggua reviews it → OKAY or REJECT with max 3 blocking issues → Cthulhu executes.
|
|
253
|
+
|
|
254
|
+
### The Elder Loop
|
|
255
|
+
|
|
256
|
+
Activate with `/elder-loop [completion promise]`. The loop writes state to `.claude/elder-loop-state.json`. Each Stop event, the hook checks if the promise is met — if not, injects a reminder to continue.
|
|
257
|
+
|
|
258
|
+
Deactivate with `/cancel-elder-loop`.
|
|
259
|
+
|
|
260
|
+
## Development
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
git clone https://github.com/[your-username]/oh-my-claudecode
|
|
264
|
+
cd oh-my-claudecode
|
|
265
|
+
npm install
|
|
266
|
+
npm run build
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Philosophy
|
|
270
|
+
|
|
271
|
+
Core philosophy:
|
|
272
|
+
|
|
273
|
+
- **Delegate first** — specialists exist for a reason; use them
|
|
274
|
+
- **Parallel by default** — independent work always runs simultaneously
|
|
275
|
+
- **Evidence required** — no task is complete without diagnostics/test proof
|
|
276
|
+
- **No AI slop** — no unnecessary abstractions, comments, or scope creep
|
|
277
|
+
- **Blocker-finding, not perfectionism** — Tsathoggua finds blockers, not nitpicks
|
|
278
|
+
|
|
279
|
+
## License
|
|
280
|
+
|
|
281
|
+
MIT
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AgentConfig, AgentPromptMetadata } from "./types.js";
|
|
2
|
+
import type { AvailableAgent, AvailableSkill, AvailableCategory } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Azathoth — First-Message Planner
|
|
5
|
+
*
|
|
6
|
+
* Mapped from: Atlas
|
|
7
|
+
* Model tier: Opus
|
|
8
|
+
*
|
|
9
|
+
* Azathoth, the Blind Idiot God at the center of ultimate chaos — yet all reality
|
|
10
|
+
* flows from its dreaming. Azathoth is the first contact when you enter a session.
|
|
11
|
+
* Before Cthulhu takes over, Azathoth makes the initial context sweep and plan.
|
|
12
|
+
*/
|
|
13
|
+
export declare const AZATHOTH_PROMPT_METADATA: AgentPromptMetadata;
|
|
14
|
+
export declare function createAzathothAgent(model: string, availableAgents?: AvailableAgent[], _availableToolNames?: string[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[]): AgentConfig;
|
|
15
|
+
export declare namespace createAzathothAgent {
|
|
16
|
+
var mode: "primary";
|
|
17
|
+
}
|
|
18
|
+
export declare const azathothMetadata: AgentPromptMetadata;
|
|
19
|
+
//# sourceMappingURL=azathoth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azathoth.d.ts","sourceRoot":"","sources":["../../src/agents/azathoth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAInF;;;;;;;;;GASG;AAEH,eAAO,MAAM,wBAAwB,EAAE,mBAUtC,CAAA;AA6ED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,cAAc,EAAO,EACtC,mBAAmB,GAAE,MAAM,EAAO,EAClC,eAAe,GAAE,cAAc,EAAO,EACtC,mBAAmB,GAAE,iBAAiB,EAAO,GAC5C,WAAW,CAYb;yBAlBe,mBAAmB;;;AAqBnC,eAAO,MAAM,gBAAgB,EAAE,mBAA8C,CAAA"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
const MODE = "primary";
|
|
2
|
+
/**
|
|
3
|
+
* Azathoth — First-Message Planner
|
|
4
|
+
*
|
|
5
|
+
* Mapped from: Atlas
|
|
6
|
+
* Model tier: Opus
|
|
7
|
+
*
|
|
8
|
+
* Azathoth, the Blind Idiot God at the center of ultimate chaos — yet all reality
|
|
9
|
+
* flows from its dreaming. Azathoth is the first contact when you enter a session.
|
|
10
|
+
* Before Cthulhu takes over, Azathoth makes the initial context sweep and plan.
|
|
11
|
+
*/
|
|
12
|
+
export const AZATHOTH_PROMPT_METADATA = {
|
|
13
|
+
category: "orchestration",
|
|
14
|
+
cost: "EXPENSIVE",
|
|
15
|
+
promptAlias: "Azathoth",
|
|
16
|
+
keyTrigger: "First message in session → Azathoth activates for initial context gathering",
|
|
17
|
+
triggers: [
|
|
18
|
+
{ domain: "Session start", trigger: "Initial context gathering and planning for the session" },
|
|
19
|
+
],
|
|
20
|
+
useWhen: ["Very start of a new session with complex task"],
|
|
21
|
+
avoidWhen: ["Mid-session (Cthulhu handles continuation)"],
|
|
22
|
+
};
|
|
23
|
+
function buildAzathothPrompt(availableAgents, availableSkills, _availableCategories) {
|
|
24
|
+
const agentList = availableAgents
|
|
25
|
+
.filter(a => a.name !== "azathoth")
|
|
26
|
+
.map(a => `- **${a.metadata.promptAlias ?? a.name}**: ${a.description}`)
|
|
27
|
+
.join("\n");
|
|
28
|
+
const skillList = availableSkills
|
|
29
|
+
.map(s => `- **${s.name}**: ${s.description}`)
|
|
30
|
+
.join("\n");
|
|
31
|
+
return `You are "Azathoth" — the First Dreaming, the initial context gatherer of the oh-my-claudecode system.
|
|
32
|
+
|
|
33
|
+
**Your role**: You activate at the VERY BEGINNING of complex sessions to:
|
|
34
|
+
1. Quickly understand what the user needs
|
|
35
|
+
2. Survey the relevant codebase context
|
|
36
|
+
3. Make a lightweight plan
|
|
37
|
+
4. Hand off to the appropriate specialist
|
|
38
|
+
|
|
39
|
+
## Phase 1: Intent Classification (IMMEDIATE)
|
|
40
|
+
|
|
41
|
+
Read the user's first message and classify:
|
|
42
|
+
- **Trivial** (single file, known location) → Skip to direct execution
|
|
43
|
+
- **Exploratory** ("How does X work?", "Find Y") → Survey codebase quickly, answer
|
|
44
|
+
- **Implementation** (explicit implementation request) → Plan + handoff to Cthulhu
|
|
45
|
+
- **Ambiguous** → Ask ONE clarifying question
|
|
46
|
+
|
|
47
|
+
## Phase 2: Context Sweep (for non-trivial)
|
|
48
|
+
|
|
49
|
+
Launch 2-3 parallel searches to understand the relevant codebase area:
|
|
50
|
+
- Read AGENTS.md or CLAUDE.md if it exists
|
|
51
|
+
- Find key files related to the user's request
|
|
52
|
+
- Identify patterns to follow
|
|
53
|
+
|
|
54
|
+
**Always parallel. Never sequential.**
|
|
55
|
+
|
|
56
|
+
## Phase 3: Lightweight Plan
|
|
57
|
+
|
|
58
|
+
For implementation requests:
|
|
59
|
+
- Create a brief todo list (3-5 items max)
|
|
60
|
+
- Identify which agents/skills to involve
|
|
61
|
+
- Note any risks or ambiguities
|
|
62
|
+
|
|
63
|
+
## Phase 4: Execution or Handoff
|
|
64
|
+
|
|
65
|
+
- For trivial tasks: execute directly
|
|
66
|
+
- For complex tasks: hand off to Cthulhu with full context
|
|
67
|
+
- For ambiguous tasks: clarify first
|
|
68
|
+
|
|
69
|
+
## Available Specialists
|
|
70
|
+
|
|
71
|
+
${agentList || "No specialists loaded — operating solo."}
|
|
72
|
+
|
|
73
|
+
## Available Skills
|
|
74
|
+
|
|
75
|
+
${skillList || "No skills loaded."}
|
|
76
|
+
|
|
77
|
+
## Communication Style
|
|
78
|
+
|
|
79
|
+
- No preamble or acknowledgments
|
|
80
|
+
- Start immediately with context sweep or clarifying question
|
|
81
|
+
- Terse status updates
|
|
82
|
+
- Plan via todos, not prose
|
|
83
|
+
|
|
84
|
+
## Constraints
|
|
85
|
+
|
|
86
|
+
- This is the FIRST message. Do not assume prior context.
|
|
87
|
+
- Do not implement without planning (unless trivial)
|
|
88
|
+
- Do not skip intent classification
|
|
89
|
+
`;
|
|
90
|
+
}
|
|
91
|
+
export function createAzathothAgent(model, availableAgents = [], _availableToolNames = [], availableSkills = [], availableCategories = []) {
|
|
92
|
+
return {
|
|
93
|
+
name: "azathoth",
|
|
94
|
+
description: "The First Dreaming — initial context gatherer activated at session start. Surveys codebase, classifies intent, makes lightweight plan, hands off to appropriate specialist. (Azathoth — oh-my-claudecode)",
|
|
95
|
+
mode: MODE,
|
|
96
|
+
model,
|
|
97
|
+
thinking: { type: "enabled", budgetTokens: 16000 },
|
|
98
|
+
maxTokens: 32000,
|
|
99
|
+
prompt: buildAzathothPrompt(availableAgents, availableSkills, availableCategories),
|
|
100
|
+
color: "#FF8C00",
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
createAzathothAgent.mode = MODE;
|
|
104
|
+
export const azathothMetadata = AZATHOTH_PROMPT_METADATA;
|
|
105
|
+
//# sourceMappingURL=azathoth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azathoth.js","sourceRoot":"","sources":["../../src/agents/azathoth.ts"],"names":[],"mappings":"AAGA,MAAM,IAAI,GAAc,SAAS,CAAA;AAEjC;;;;;;;;;GASG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAwB;IAC3D,QAAQ,EAAE,eAAe;IACzB,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,UAAU;IACvB,UAAU,EAAE,6EAA6E;IACzF,QAAQ,EAAE;QACR,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,wDAAwD,EAAE;KAC/F;IACD,OAAO,EAAE,CAAC,+CAA+C,CAAC;IAC1D,SAAS,EAAE,CAAC,4CAA4C,CAAC;CAC1D,CAAA;AAED,SAAS,mBAAmB,CAC1B,eAAiC,EACjC,eAAiC,EACjC,oBAAyC;IAEzC,MAAM,SAAS,GAAG,eAAe;SAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;SACvE,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,SAAS,GAAG,eAAe;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwCP,SAAS,IAAI,yCAAyC;;;;EAItD,SAAS,IAAI,mBAAmB;;;;;;;;;;;;;;CAcjC,CAAA;AACD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,kBAAoC,EAAE,EACtC,sBAAgC,EAAE,EAClC,kBAAoC,EAAE,EACtC,sBAA2C,EAAE;IAE7C,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,WAAW,EACT,2MAA2M;QAC7M,IAAI,EAAE,IAAI;QACV,KAAK;QACL,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE;QAClD,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,mBAAmB,CAAC,eAAe,EAAE,eAAe,EAAE,mBAAmB,CAAC;QAClF,KAAK,EAAE,SAAS;KACjB,CAAA;AACH,CAAC;AACD,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAA;AAE/B,MAAM,CAAC,MAAM,gBAAgB,GAAwB,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AgentConfig, AvailableSkill, AvailableCategory, AgentPromptMetadata } from "./types.js";
|
|
2
|
+
import type { AgentOverrides } from "../config/schema.js";
|
|
3
|
+
/** Maps each agent name to its metadata (for orchestrator prompt building) */
|
|
4
|
+
export declare const AGENT_METADATA_MAP: Record<string, AgentPromptMetadata>;
|
|
5
|
+
export interface BuildAgentsOptions {
|
|
6
|
+
disabledAgents?: string[];
|
|
7
|
+
agentOverrides?: AgentOverrides;
|
|
8
|
+
systemDefaultModel?: string;
|
|
9
|
+
discoveredSkills?: AvailableSkill[];
|
|
10
|
+
availableCategories?: AvailableCategory[];
|
|
11
|
+
useTaskSystem?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Creates all built-in Elder God agents with model resolution and overrides applied.
|
|
15
|
+
* Returns a record of agent name → AgentConfig ready for registration.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildBuiltinAgents(options?: BuildAgentsOptions): Record<string, AgentConfig>;
|
|
18
|
+
//# sourceMappingURL=builtin-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-agents.d.ts","sourceRoot":"","sources":["../../src/agents/builtin-agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkB,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AACrH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAgBzD,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAYlE,CAAA;AAED,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gBAAgB,CAAC,EAAE,cAAc,EAAE,CAAA;IACnC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAA;IACzC,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAgIhG"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { createCthulhuAgent, CTHULHU_PROMPT_METADATA } from "./cthulhu.js";
|
|
2
|
+
import { createYogSothothAgent, YOG_SOTHOTH_PROMPT_METADATA } from "./yog-sothoth.js";
|
|
3
|
+
import { createShoggothAgent, SHOGGOTH_PROMPT_METADATA } from "./shoggoth.js";
|
|
4
|
+
import { createDagonAgent, DAGON_PROMPT_METADATA } from "./dagon.js";
|
|
5
|
+
import { createTsathoggua, TSATHOGGUA_PROMPT_METADATA } from "./tsathoggua.js";
|
|
6
|
+
import { createIthaquaAgent, ITHAQUA_PROMPT_METADATA } from "./ithaqua.js";
|
|
7
|
+
import { createHasturAgent, HASTUR_PROMPT_METADATA } from "./hastur.js";
|
|
8
|
+
import { createNyarlathotepAgent, NYARLATHOTEP_PROMPT_METADATA } from "./nyarlathotep.js";
|
|
9
|
+
import { createAzathothAgent, AZATHOTH_PROMPT_METADATA } from "./azathoth.js";
|
|
10
|
+
import { createShubNiggurathAgent, SHUB_NIGGURATH_PROMPT_METADATA } from "./shub-niggurath.js";
|
|
11
|
+
import { createDeepOneAgent, DEEP_ONE_PROMPT_METADATA } from "./the-deep-one.js";
|
|
12
|
+
import { resolveAgentModel } from "../shared/model-resolution.js";
|
|
13
|
+
import { deepMerge } from "../shared/deep-merge.js";
|
|
14
|
+
/** Maps each agent name to its metadata (for orchestrator prompt building) */
|
|
15
|
+
export const AGENT_METADATA_MAP = {
|
|
16
|
+
cthulhu: CTHULHU_PROMPT_METADATA,
|
|
17
|
+
"yog-sothoth": YOG_SOTHOTH_PROMPT_METADATA,
|
|
18
|
+
shoggoth: SHOGGOTH_PROMPT_METADATA,
|
|
19
|
+
dagon: DAGON_PROMPT_METADATA,
|
|
20
|
+
tsathoggua: TSATHOGGUA_PROMPT_METADATA,
|
|
21
|
+
ithaqua: ITHAQUA_PROMPT_METADATA,
|
|
22
|
+
hastur: HASTUR_PROMPT_METADATA,
|
|
23
|
+
nyarlathotep: NYARLATHOTEP_PROMPT_METADATA,
|
|
24
|
+
azathoth: AZATHOTH_PROMPT_METADATA,
|
|
25
|
+
"shub-niggurath": SHUB_NIGGURATH_PROMPT_METADATA,
|
|
26
|
+
"the-deep-one": DEEP_ONE_PROMPT_METADATA,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Creates all built-in Elder God agents with model resolution and overrides applied.
|
|
30
|
+
* Returns a record of agent name → AgentConfig ready for registration.
|
|
31
|
+
*/
|
|
32
|
+
export function buildBuiltinAgents(options = {}) {
|
|
33
|
+
const { disabledAgents = [], agentOverrides = {}, systemDefaultModel, discoveredSkills = [], availableCategories = [], useTaskSystem = false, } = options;
|
|
34
|
+
const disabled = new Set(disabledAgents);
|
|
35
|
+
const result = {};
|
|
36
|
+
function isEnabled(name) {
|
|
37
|
+
return !disabled.has(name);
|
|
38
|
+
}
|
|
39
|
+
function resolveModel(name) {
|
|
40
|
+
const override = agentOverrides[name];
|
|
41
|
+
return resolveAgentModel(name, override?.model, systemDefaultModel);
|
|
42
|
+
}
|
|
43
|
+
function applyOverride(config, name) {
|
|
44
|
+
const override = agentOverrides[name];
|
|
45
|
+
if (!override)
|
|
46
|
+
return config;
|
|
47
|
+
return {
|
|
48
|
+
...config,
|
|
49
|
+
model: resolveModel(name),
|
|
50
|
+
description: override.description ?? config.description,
|
|
51
|
+
temperature: override.temperature ?? config.temperature,
|
|
52
|
+
maxTokens: override.maxTokens ?? config.maxTokens,
|
|
53
|
+
thinking: override.thinking ?? config.thinking,
|
|
54
|
+
color: override.color ?? config.color,
|
|
55
|
+
prompt: override.prompt ?? config.prompt + (override.prompt_append ? `\n\n${override.prompt_append}` : ""),
|
|
56
|
+
tools: override.tools ? deepMerge(config.tools, override.tools) : config.tools,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Build available agents list for orchestrator prompt (excludes disabled agents)
|
|
60
|
+
const availableAgentsList = Object.entries(AGENT_METADATA_MAP)
|
|
61
|
+
.filter(([name]) => isEnabled(name) && name !== "cthulhu")
|
|
62
|
+
.map(([name, metadata]) => ({
|
|
63
|
+
name,
|
|
64
|
+
description: getAgentDescription(name),
|
|
65
|
+
metadata,
|
|
66
|
+
}));
|
|
67
|
+
// ── Cthulhu (main orchestrator) ─────────────────────────────────────────────
|
|
68
|
+
if (isEnabled("cthulhu")) {
|
|
69
|
+
const model = resolveModel("cthulhu");
|
|
70
|
+
const config = createCthulhuAgent(model, availableAgentsList, [], discoveredSkills, availableCategories, useTaskSystem);
|
|
71
|
+
result["cthulhu"] = applyOverride(config, "cthulhu");
|
|
72
|
+
}
|
|
73
|
+
// ── Nyarlathotep (deep worker) ───────────────────────────────────────────────
|
|
74
|
+
if (isEnabled("nyarlathotep")) {
|
|
75
|
+
const config = createNyarlathotepAgent(resolveModel("nyarlathotep"));
|
|
76
|
+
result["nyarlathotep"] = applyOverride(config, "nyarlathotep");
|
|
77
|
+
}
|
|
78
|
+
// ── Azathoth (first-message planner) ────────────────────────────────────────
|
|
79
|
+
if (isEnabled("azathoth")) {
|
|
80
|
+
const config = createAzathothAgent(resolveModel("azathoth"), availableAgentsList, [], discoveredSkills, availableCategories);
|
|
81
|
+
result["azathoth"] = applyOverride(config, "azathoth");
|
|
82
|
+
}
|
|
83
|
+
// ── Shub-Niggurath (strategic planner) ──────────────────────────────────────
|
|
84
|
+
if (isEnabled("shub-niggurath")) {
|
|
85
|
+
const config = createShubNiggurathAgent(resolveModel("shub-niggurath"));
|
|
86
|
+
result["shub-niggurath"] = applyOverride(config, "shub-niggurath");
|
|
87
|
+
}
|
|
88
|
+
// ── Yog-Sothoth (oracle/advisor) ────────────────────────────────────────────
|
|
89
|
+
if (isEnabled("yog-sothoth")) {
|
|
90
|
+
const config = createYogSothothAgent(resolveModel("yog-sothoth"));
|
|
91
|
+
result["yog-sothoth"] = applyOverride(config, "yog-sothoth");
|
|
92
|
+
}
|
|
93
|
+
// ── Dagon (librarian) ───────────────────────────────────────────────────────
|
|
94
|
+
if (isEnabled("dagon")) {
|
|
95
|
+
const config = createDagonAgent(resolveModel("dagon"));
|
|
96
|
+
result["dagon"] = applyOverride(config, "dagon");
|
|
97
|
+
}
|
|
98
|
+
// ── Ithaqua (plan consultant) ────────────────────────────────────────────────
|
|
99
|
+
if (isEnabled("ithaqua")) {
|
|
100
|
+
const config = createIthaquaAgent(resolveModel("ithaqua"));
|
|
101
|
+
result["ithaqua"] = applyOverride(config, "ithaqua");
|
|
102
|
+
}
|
|
103
|
+
// ── Tsathoggua (quality reviewer) ───────────────────────────────────────────
|
|
104
|
+
if (isEnabled("tsathoggua")) {
|
|
105
|
+
const config = createTsathoggua(resolveModel("tsathoggua"));
|
|
106
|
+
result["tsathoggua"] = applyOverride(config, "tsathoggua");
|
|
107
|
+
}
|
|
108
|
+
// ── Hastur (junior orchestrator) ────────────────────────────────────────────
|
|
109
|
+
if (isEnabled("hastur")) {
|
|
110
|
+
const config = createHasturAgent(resolveModel("hastur"));
|
|
111
|
+
result["hastur"] = applyOverride(config, "hastur");
|
|
112
|
+
}
|
|
113
|
+
// ── Shoggoth (explorer) ─────────────────────────────────────────────────────
|
|
114
|
+
if (isEnabled("shoggoth")) {
|
|
115
|
+
const config = createShoggothAgent(resolveModel("shoggoth"));
|
|
116
|
+
result["shoggoth"] = applyOverride(config, "shoggoth");
|
|
117
|
+
}
|
|
118
|
+
// ── The Deep One (vision) ───────────────────────────────────────────────────
|
|
119
|
+
if (isEnabled("the-deep-one")) {
|
|
120
|
+
const config = createDeepOneAgent(resolveModel("the-deep-one"));
|
|
121
|
+
result["the-deep-one"] = applyOverride(config, "the-deep-one");
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
/** Short descriptions for the delegation table in Cthulhu's prompt */
|
|
126
|
+
function getAgentDescription(name) {
|
|
127
|
+
const descriptions = {
|
|
128
|
+
"yog-sothoth": "Architecture/debugging advisor. Consult for hard problems and design decisions.",
|
|
129
|
+
shoggoth: "Codebase pattern-matcher. Fast parallel search for files and code.",
|
|
130
|
+
dagon: "External library and documentation specialist.",
|
|
131
|
+
tsathoggua: "Work plan reviewer. Verifies plans are executable.",
|
|
132
|
+
ithaqua: "Pre-planning consultant. Analyzes intent, prevents over-engineering.",
|
|
133
|
+
hastur: "Lightweight sub-orchestrator for bounded tasks.",
|
|
134
|
+
nyarlathotep: "Deep autonomous worker. End-to-end goal execution.",
|
|
135
|
+
azathoth: "First-message planner. Initial context gathering.",
|
|
136
|
+
"shub-niggurath": "Strategic planner. Interview → scope → plan.",
|
|
137
|
+
"the-deep-one": "Vision specialist. Analyzes images and visual content.",
|
|
138
|
+
};
|
|
139
|
+
return descriptions[name] ?? "Specialized agent.";
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=builtin-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-agents.js","sourceRoot":"","sources":["../../src/agents/builtin-agents.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AACrF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,EAAE,gBAAgB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAC7E,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kBAAkB,GAAwC;IACrE,OAAO,EAAE,uBAAuB;IAChC,aAAa,EAAE,2BAA2B;IAC1C,QAAQ,EAAE,wBAAwB;IAClC,KAAK,EAAE,qBAAqB;IAC5B,UAAU,EAAE,0BAA0B;IACtC,OAAO,EAAE,uBAAuB;IAChC,MAAM,EAAE,sBAAsB;IAC9B,YAAY,EAAE,4BAA4B;IAC1C,QAAQ,EAAE,wBAAwB;IAClC,gBAAgB,EAAE,8BAA8B;IAChD,cAAc,EAAE,wBAAwB;CACzC,CAAA;AAWD;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA8B,EAAE;IACjE,MAAM,EACJ,cAAc,GAAG,EAAE,EACnB,cAAc,GAAG,EAAE,EACnB,kBAAkB,EAClB,gBAAgB,GAAG,EAAE,EACrB,mBAAmB,GAAG,EAAE,EACxB,aAAa,GAAG,KAAK,GACtB,GAAG,OAAO,CAAA;IAEX,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAA;IACxC,MAAM,MAAM,GAAgC,EAAE,CAAA;IAE9C,SAAS,SAAS,CAAC,IAAY;QAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;IAED,SAAS,YAAY,CAAC,IAAY;QAChC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAmC,CAAC,CAAA;QACpE,OAAO,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAA;IACrE,CAAC;IAED,SAAS,aAAa,CAAC,MAAmB,EAAE,IAAY;QACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAmC,CAAC,CAAA;QACpE,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAA;QAC5B,OAAO;YACL,GAAG,MAAM;YACT,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;YACzB,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;YACvD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;YACvD,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS;YACjD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;YAC9C,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;YACrC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1G,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,KAAgC,EAAE,QAAQ,CAAC,KAAgC,CAA4B,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK;SAChK,CAAA;IACH,CAAC;IAED,iFAAiF;IACjF,MAAM,mBAAmB,GAAqB,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC7E,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,SAAS,CAAC;SACzD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI;QACJ,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC;QACtC,QAAQ;KACT,CAAC,CAAC,CAAA;IAEL,+EAA+E;IAC/E,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,kBAAkB,CAC/B,KAAK,EACL,mBAAmB,EACnB,EAAE,EACF,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,CACd,CAAA;QACD,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,gFAAgF;IAChF,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,uBAAuB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;QACpE,MAAM,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAChE,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,mBAAmB,CAChC,YAAY,CAAC,UAAU,CAAC,EACxB,mBAAmB,EACnB,EAAE,EACF,gBAAgB,EAChB,mBAAmB,CACpB,CAAA;QACD,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,wBAAwB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAA;QACvE,MAAM,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACpE,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAA;QACjE,MAAM,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IAC9D,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QACtD,MAAM,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;IAED,gFAAgF;IAChF,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAA;QAC1D,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAC5D,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,iBAAiB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACpD,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,mBAAmB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAA;QAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,+EAA+E;IAC/E,IAAI,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAA;QAC/D,MAAM,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,sEAAsE;AACtE,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,YAAY,GAA2B;QAC3C,aAAa,EAAE,iFAAiF;QAChG,QAAQ,EAAE,oEAAoE;QAC9E,KAAK,EAAE,gDAAgD;QACvD,UAAU,EAAE,oDAAoD;QAChE,OAAO,EAAE,sEAAsE;QAC/E,MAAM,EAAE,iDAAiD;QACzD,YAAY,EAAE,oDAAoD;QAClE,QAAQ,EAAE,mDAAmD;QAC7D,gBAAgB,EAAE,8CAA8C;QAChE,cAAc,EAAE,wDAAwD;KACzE,CAAA;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { AgentConfig, AgentPromptMetadata } from "./types.js";
|
|
2
|
+
import type { AvailableAgent, AvailableSkill, AvailableCategory } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Cthulhu — Main Orchestrator
|
|
5
|
+
*
|
|
6
|
+
* Mapped from: Sisyphus
|
|
7
|
+
* Model tier: Opus
|
|
8
|
+
*
|
|
9
|
+
* Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.
|
|
10
|
+
* "In his house at R'lyeh, dead Cthulhu waits dreaming."
|
|
11
|
+
*
|
|
12
|
+
* Cthulhu is the primary orchestrator of the entire system — the dreaming god
|
|
13
|
+
* who coordinates all Elder God agents. Plans obsessively, delegates ruthlessly,
|
|
14
|
+
* verifies thoroughly. The boulder rolls; so do we.
|
|
15
|
+
*/
|
|
16
|
+
export declare const CTHULHU_PROMPT_METADATA: AgentPromptMetadata;
|
|
17
|
+
export declare function createCthulhuAgent(model: string, availableAgents?: AvailableAgent[], availableToolNames?: string[], availableSkills?: AvailableSkill[], availableCategories?: AvailableCategory[], useTaskSystem?: boolean): AgentConfig;
|
|
18
|
+
export declare namespace createCthulhuAgent {
|
|
19
|
+
var mode: "primary";
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=cthulhu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cthulhu.d.ts","sourceRoot":"","sources":["../../src/agents/cthulhu.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAA;AAIlG;;;;;;;;;;;;GAYG;AAEH,eAAO,MAAM,uBAAuB,EAAE,mBAKrC,CAAA;AA6VD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,eAAe,GAAE,cAAc,EAAO,EACtC,kBAAkB,GAAE,MAAM,EAAO,EACjC,eAAe,GAAE,cAAc,EAAO,EACtC,mBAAmB,GAAE,iBAAiB,EAAO,EAC7C,aAAa,UAAQ,GACpB,WAAW,CAyBb;yBAhCe,kBAAkB"}
|