slavedriver 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.
Files changed (240) hide show
  1. package/README.md +165 -0
  2. package/agents/executor.md +26 -0
  3. package/agents/planner.md +41 -0
  4. package/agents/researcher.md +28 -0
  5. package/agents/verifier.md +25 -0
  6. package/dist/agents/backends/claude-code.d.ts +2 -0
  7. package/dist/agents/backends/claude-code.js +215 -0
  8. package/dist/agents/backends/claude-code.js.map +1 -0
  9. package/dist/agents/backends/mock.d.ts +9 -0
  10. package/dist/agents/backends/mock.js +31 -0
  11. package/dist/agents/backends/mock.js.map +1 -0
  12. package/dist/agents/context-builder.d.ts +10 -0
  13. package/dist/agents/context-builder.js +61 -0
  14. package/dist/agents/context-builder.js.map +1 -0
  15. package/dist/agents/prompt-compiler.d.ts +27 -0
  16. package/dist/agents/prompt-compiler.js +549 -0
  17. package/dist/agents/prompt-compiler.js.map +1 -0
  18. package/dist/agents/runtime.d.ts +40 -0
  19. package/dist/agents/runtime.js +2 -0
  20. package/dist/agents/runtime.js.map +1 -0
  21. package/dist/cli/arg-parser.d.ts +6 -0
  22. package/dist/cli/arg-parser.js +59 -0
  23. package/dist/cli/arg-parser.js.map +1 -0
  24. package/dist/cli/commands/config.d.ts +9 -0
  25. package/dist/cli/commands/config.js +120 -0
  26. package/dist/cli/commands/config.js.map +1 -0
  27. package/dist/cli/commands/dashboard.d.ts +1 -0
  28. package/dist/cli/commands/dashboard.js +54 -0
  29. package/dist/cli/commands/dashboard.js.map +1 -0
  30. package/dist/cli/commands/find-root.d.ts +14 -0
  31. package/dist/cli/commands/find-root.js +55 -0
  32. package/dist/cli/commands/find-root.js.map +1 -0
  33. package/dist/cli/commands/init.d.ts +1 -0
  34. package/dist/cli/commands/init.js +65 -0
  35. package/dist/cli/commands/init.js.map +1 -0
  36. package/dist/cli/commands/next.d.ts +1 -0
  37. package/dist/cli/commands/next.js +61 -0
  38. package/dist/cli/commands/next.js.map +1 -0
  39. package/dist/cli/commands/plan.d.ts +2 -0
  40. package/dist/cli/commands/plan.js +53 -0
  41. package/dist/cli/commands/plan.js.map +1 -0
  42. package/dist/cli/commands/replan.d.ts +1 -0
  43. package/dist/cli/commands/replan.js +54 -0
  44. package/dist/cli/commands/replan.js.map +1 -0
  45. package/dist/cli/commands/run-pipeline.d.ts +2 -0
  46. package/dist/cli/commands/run-pipeline.js +74 -0
  47. package/dist/cli/commands/run-pipeline.js.map +1 -0
  48. package/dist/cli/commands/run.d.ts +2 -0
  49. package/dist/cli/commands/run.js +106 -0
  50. package/dist/cli/commands/run.js.map +1 -0
  51. package/dist/cli/commands/status.d.ts +1 -0
  52. package/dist/cli/commands/status.js +51 -0
  53. package/dist/cli/commands/status.js.map +1 -0
  54. package/dist/cli/commands/verify.d.ts +1 -0
  55. package/dist/cli/commands/verify.js +63 -0
  56. package/dist/cli/commands/verify.js.map +1 -0
  57. package/dist/cli/commands/wizard.d.ts +8 -0
  58. package/dist/cli/commands/wizard.js +39 -0
  59. package/dist/cli/commands/wizard.js.map +1 -0
  60. package/dist/cli/index.d.ts +2 -0
  61. package/dist/cli/index.js +82 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/wizard/index.d.ts +11 -0
  64. package/dist/cli/wizard/index.js +40 -0
  65. package/dist/cli/wizard/index.js.map +1 -0
  66. package/dist/cli/wizard/interview.d.ts +26 -0
  67. package/dist/cli/wizard/interview.js +284 -0
  68. package/dist/cli/wizard/interview.js.map +1 -0
  69. package/dist/cli/wizard/prompt.d.ts +18 -0
  70. package/dist/cli/wizard/prompt.js +72 -0
  71. package/dist/cli/wizard/prompt.js.map +1 -0
  72. package/dist/cli/wizard/template-generator.d.ts +8 -0
  73. package/dist/cli/wizard/template-generator.js +133 -0
  74. package/dist/cli/wizard/template-generator.js.map +1 -0
  75. package/dist/mcp/index.d.ts +2 -0
  76. package/dist/mcp/index.js +68 -0
  77. package/dist/mcp/index.js.map +1 -0
  78. package/dist/mcp/protocol.d.ts +33 -0
  79. package/dist/mcp/protocol.js +82 -0
  80. package/dist/mcp/protocol.js.map +1 -0
  81. package/dist/mcp/resources.d.ts +20 -0
  82. package/dist/mcp/resources.js +101 -0
  83. package/dist/mcp/resources.js.map +1 -0
  84. package/dist/mcp/run-manager.d.ts +36 -0
  85. package/dist/mcp/run-manager.js +179 -0
  86. package/dist/mcp/run-manager.js.map +1 -0
  87. package/dist/mcp/server.d.ts +13 -0
  88. package/dist/mcp/server.js +99 -0
  89. package/dist/mcp/server.js.map +1 -0
  90. package/dist/mcp/tools.d.ts +32 -0
  91. package/dist/mcp/tools.js +259 -0
  92. package/dist/mcp/tools.js.map +1 -0
  93. package/dist/orchestrator/alert-types.d.ts +16 -0
  94. package/dist/orchestrator/alert-types.js +2 -0
  95. package/dist/orchestrator/alert-types.js.map +1 -0
  96. package/dist/orchestrator/alerts.d.ts +20 -0
  97. package/dist/orchestrator/alerts.js +76 -0
  98. package/dist/orchestrator/alerts.js.map +1 -0
  99. package/dist/orchestrator/checkpoints.d.ts +8 -0
  100. package/dist/orchestrator/checkpoints.js +24 -0
  101. package/dist/orchestrator/checkpoints.js.map +1 -0
  102. package/dist/orchestrator/engine.d.ts +71 -0
  103. package/dist/orchestrator/engine.js +420 -0
  104. package/dist/orchestrator/engine.js.map +1 -0
  105. package/dist/orchestrator/phase-gates.d.ts +6 -0
  106. package/dist/orchestrator/phase-gates.js +127 -0
  107. package/dist/orchestrator/phase-gates.js.map +1 -0
  108. package/dist/orchestrator/plan-approval.d.ts +10 -0
  109. package/dist/orchestrator/plan-approval.js +51 -0
  110. package/dist/orchestrator/plan-approval.js.map +1 -0
  111. package/dist/orchestrator/safety.d.ts +22 -0
  112. package/dist/orchestrator/safety.js +126 -0
  113. package/dist/orchestrator/safety.js.map +1 -0
  114. package/dist/orchestrator/task-graph.d.ts +17 -0
  115. package/dist/orchestrator/task-graph.js +156 -0
  116. package/dist/orchestrator/task-graph.js.map +1 -0
  117. package/dist/orchestrator/wave-executor.d.ts +37 -0
  118. package/dist/orchestrator/wave-executor.js +237 -0
  119. package/dist/orchestrator/wave-executor.js.map +1 -0
  120. package/dist/session/in-process.d.ts +2 -0
  121. package/dist/session/in-process.js +149 -0
  122. package/dist/session/in-process.js.map +1 -0
  123. package/dist/session/log-capture.d.ts +7 -0
  124. package/dist/session/log-capture.js +56 -0
  125. package/dist/session/log-capture.js.map +1 -0
  126. package/dist/session/manager.d.ts +20 -0
  127. package/dist/session/manager.js +2 -0
  128. package/dist/session/manager.js.map +1 -0
  129. package/dist/state/file-store.d.ts +3 -0
  130. package/dist/state/file-store.js +124 -0
  131. package/dist/state/file-store.js.map +1 -0
  132. package/dist/state/lock.d.ts +6 -0
  133. package/dist/state/lock.js +71 -0
  134. package/dist/state/lock.js.map +1 -0
  135. package/dist/state/plan-parser.d.ts +6 -0
  136. package/dist/state/plan-parser.js +54 -0
  137. package/dist/state/plan-parser.js.map +1 -0
  138. package/dist/state/store.d.ts +27 -0
  139. package/dist/state/store.js +2 -0
  140. package/dist/state/store.js.map +1 -0
  141. package/dist/steps/events.d.ts +49 -0
  142. package/dist/steps/events.js +2 -0
  143. package/dist/steps/events.js.map +1 -0
  144. package/dist/steps/pipeline.d.ts +14 -0
  145. package/dist/steps/pipeline.js +284 -0
  146. package/dist/steps/pipeline.js.map +1 -0
  147. package/dist/steps/plan-parser.d.ts +35 -0
  148. package/dist/steps/plan-parser.js +147 -0
  149. package/dist/steps/plan-parser.js.map +1 -0
  150. package/dist/steps/runner.d.ts +13 -0
  151. package/dist/steps/runner.js +155 -0
  152. package/dist/steps/runner.js.map +1 -0
  153. package/dist/steps/store.d.ts +26 -0
  154. package/dist/steps/store.js +164 -0
  155. package/dist/steps/store.js.map +1 -0
  156. package/dist/steps/types.d.ts +36 -0
  157. package/dist/steps/types.js +2 -0
  158. package/dist/steps/types.js.map +1 -0
  159. package/dist/tui/app.d.ts +15 -0
  160. package/dist/tui/app.js +297 -0
  161. package/dist/tui/app.js.map +1 -0
  162. package/dist/tui/banner.d.ts +1 -0
  163. package/dist/tui/banner.js +11 -0
  164. package/dist/tui/banner.js.map +1 -0
  165. package/dist/tui/colors.d.ts +22 -0
  166. package/dist/tui/colors.js +30 -0
  167. package/dist/tui/colors.js.map +1 -0
  168. package/dist/tui/components/agent-panel.d.ts +8 -0
  169. package/dist/tui/components/agent-panel.js +80 -0
  170. package/dist/tui/components/agent-panel.js.map +1 -0
  171. package/dist/tui/components/header.d.ts +15 -0
  172. package/dist/tui/components/header.js +69 -0
  173. package/dist/tui/components/header.js.map +1 -0
  174. package/dist/tui/components/status-bar.d.ts +2 -0
  175. package/dist/tui/components/status-bar.js +8 -0
  176. package/dist/tui/components/status-bar.js.map +1 -0
  177. package/dist/tui/components/task-board.d.ts +3 -0
  178. package/dist/tui/components/task-board.js +96 -0
  179. package/dist/tui/components/task-board.js.map +1 -0
  180. package/dist/tui/display.d.ts +23 -0
  181. package/dist/tui/display.js +125 -0
  182. package/dist/tui/display.js.map +1 -0
  183. package/dist/tui/input.d.ts +2 -0
  184. package/dist/tui/input.js +44 -0
  185. package/dist/tui/input.js.map +1 -0
  186. package/dist/tui/layout-master.d.ts +7 -0
  187. package/dist/tui/layout-master.js +31 -0
  188. package/dist/tui/layout-master.js.map +1 -0
  189. package/dist/tui/layout.d.ts +13 -0
  190. package/dist/tui/layout.js +37 -0
  191. package/dist/tui/layout.js.map +1 -0
  192. package/dist/tui/pane-formatter.d.ts +27 -0
  193. package/dist/tui/pane-formatter.js +153 -0
  194. package/dist/tui/pane-formatter.js.map +1 -0
  195. package/dist/tui/renderer.d.ts +8 -0
  196. package/dist/tui/renderer.js +30 -0
  197. package/dist/tui/renderer.js.map +1 -0
  198. package/dist/tui/screen.d.ts +12 -0
  199. package/dist/tui/screen.js +32 -0
  200. package/dist/tui/screen.js.map +1 -0
  201. package/dist/tui/structured-display.d.ts +5 -0
  202. package/dist/tui/structured-display.js +74 -0
  203. package/dist/tui/structured-display.js.map +1 -0
  204. package/dist/tui/tmux-display.d.ts +6 -0
  205. package/dist/tui/tmux-display.js +187 -0
  206. package/dist/tui/tmux-display.js.map +1 -0
  207. package/dist/tui/tmux.d.ts +26 -0
  208. package/dist/tui/tmux.js +265 -0
  209. package/dist/tui/tmux.js.map +1 -0
  210. package/dist/types.d.ts +15 -0
  211. package/dist/types.js +2 -0
  212. package/dist/types.js.map +1 -0
  213. package/dist/utils/git.d.ts +6 -0
  214. package/dist/utils/git.js +35 -0
  215. package/dist/utils/git.js.map +1 -0
  216. package/dist/utils/hello.d.ts +1 -0
  217. package/dist/utils/hello.js +4 -0
  218. package/dist/utils/hello.js.map +1 -0
  219. package/dist/utils/id.d.ts +1 -0
  220. package/dist/utils/id.js +5 -0
  221. package/dist/utils/id.js.map +1 -0
  222. package/dist/utils/jsonl.d.ts +2 -0
  223. package/dist/utils/jsonl.js +18 -0
  224. package/dist/utils/jsonl.js.map +1 -0
  225. package/dist/utils/logger.d.ts +20 -0
  226. package/dist/utils/logger.js +40 -0
  227. package/dist/utils/logger.js.map +1 -0
  228. package/dist/utils/pricing.d.ts +3 -0
  229. package/dist/utils/pricing.js +26 -0
  230. package/dist/utils/pricing.js.map +1 -0
  231. package/dist/utils/xml.d.ts +13 -0
  232. package/dist/utils/xml.js +67 -0
  233. package/dist/utils/xml.js.map +1 -0
  234. package/dist/utils/yaml.d.ts +5 -0
  235. package/dist/utils/yaml.js +126 -0
  236. package/dist/utils/yaml.js.map +1 -0
  237. package/package.json +45 -0
  238. package/templates/CONSTITUTION.md +10 -0
  239. package/templates/STATE.md +3 -0
  240. package/templates/config.json +11 -0
package/README.md ADDED
@@ -0,0 +1,165 @@
1
+ # slavedriver
2
+
3
+ **Multi-agent orchestration that actually ships code.**
4
+
5
+ One command. Multiple AI agents. Parallel execution. Real results.
6
+
7
+ ```bash
8
+ npx slavedriver "build a REST API with auth, users, and tests"
9
+ ```
10
+
11
+ slavedriver spawns a team of AI agents that discover your codebase, plan the work, execute tasks in parallel waves, and verify the results — all with a lazygit-style TUI you can watch and control.
12
+
13
+ ## The Problem
14
+
15
+ Multi-agent orchestration is fragmented. Every framework picks one pattern and builds a universe around it. GSD has great wave execution but no TUI. OpenClaw has the best autonomous heartbeat but requires a full server. CrewAI has nice agent roles but locks you into their ecosystem. Ralph Wiggum's iterative loop is genius but it's just a bash script.
16
+
17
+ **slavedriver cherry-picks the best patterns from all of them into a single `npx` command.**
18
+
19
+ ## Key Features
20
+
21
+ - **Wave Execution** — Tasks organized in dependency-aware waves that run in parallel (from GSD)
22
+ - **Full TUI** — lazygit/k9s-style terminal UI with task board, agent output, and live controls
23
+ - **Ralph Loop** — Iterative self-improvement mode: run, check, fix, repeat (from Ralph Wiggum)
24
+ - **Heartbeat Daemon** — Autonomous scheduled agent that checks on your project (from OpenClaw)
25
+ - **Fresh Context Per Task** — Every agent spawns clean. No context rot. Ever (from GSD)
26
+ - **Git Worktree Isolation** — Each agent works in its own branch/directory. No conflicts (from Claude Code Teams)
27
+ - **File-Based State** — No databases. `.slavedriver/` is the state. Human-readable. Git-friendly
28
+ - **Zero Production Dependencies** — Built-in Node.js APIs only
29
+ - **Model-Agnostic** — Claude Code CLI, Anthropic API, OpenAI, Ollama — bring your own backend
30
+ - **Safety First** — Budget limits, iteration caps, path exclusions, human approval gates
31
+
32
+ ## Quick Start
33
+
34
+ ```bash
35
+ # Run with a goal (discover -> plan -> execute -> verify)
36
+ npx slavedriver "add user authentication with JWT"
37
+
38
+ # Launch the interactive TUI
39
+ npx slavedriver
40
+
41
+ # Just generate a plan
42
+ npx slavedriver plan "refactor the database layer"
43
+
44
+ # Execute an existing plan
45
+ npx slavedriver run
46
+
47
+ # Run in Ralph Wiggum loop mode
48
+ npx slavedriver run --ralph
49
+
50
+ # Start the autonomous heartbeat daemon
51
+ npx slavedriver heartbeat --daemon
52
+ ```
53
+
54
+ ## TUI
55
+
56
+ ```
57
+ ┌══════════════════════════════════════════════════════════════════┐
58
+ │ SLAVEDRIVER v0.1.0 │ Project: my-api │ Phase: EXECUTING │
59
+ │ Wave 2/4 │ Tasks: 3/12 done │ Agents: 3 active │ $0.42 │
60
+ ├═══════════════════════╤══════════════════════════════════════════┤
61
+ │ │ │
62
+ │ TASK BOARD │ AGENT OUTPUT │
63
+ │ │ │
64
+ │ Wave 1 [████] DONE │ > planner (opus) │
65
+ │ [x] T1: Setup DB │ Analyzing codebase structure... │
66
+ │ [x] T2: Init proj │ Found 47 files across 12 modules. │
67
+ │ │ Generating task dependency graph... │
68
+ │ Wave 2 [██ ] 1/3 │ │
69
+ │ [x] T3: Auth │ ───────────────────────────────────── │
70
+ │ [>] T4: User CRUD │ > executor-1 (sonnet) │
71
+ │ [>] T5: API routes │ Writing src/routes/users.ts... │
72
+ │ │ Created 4 endpoints: GET, POST, │
73
+ │ Wave 3 [ ] 0/2 │ PUT, DELETE. Running tsc... OK │
74
+ │ [ ] T6: Tests │ │
75
+ │ [ ] T7: Integrate │ ───────────────────────────────────── │
76
+ │ │ > executor-2 (sonnet) │
77
+ │ Wave 4 [ ] 0/1 │ Implementing auth middleware... │
78
+ │ [ ] T8: Deploy │ JWT generation complete. │
79
+ │ │ │
80
+ ├═══════════════════════╧══════════════════════════════════════════┤
81
+ │ [q]uit [p]ause [r]esume [a]bort [l]ogs [t]asks [Tab]focus [?] │
82
+ │ > _ │
83
+ └══════════════════════════════════════════════════════════════════┘
84
+ ```
85
+
86
+ ## Architecture Overview
87
+
88
+ ```
89
+ CLI / TUI
90
+
91
+ ├── Orchestrator (state machine: DISCOVER → PLAN → EXECUTE → VERIFY)
92
+ │ │
93
+ │ ├── Task Graph (DAG with wave-based parallel execution)
94
+ │ ├── Safety Engine (budgets, caps, exclusions)
95
+ │ ├── Heartbeat Daemon (autonomous scheduled runs)
96
+ │ └── Ralph Loop (iterative self-improvement mode)
97
+
98
+ ├── Session Manager (tmux backend + git worktree isolation)
99
+ │ │
100
+ │ └── Agent 1..N (each in isolated worktree + fresh context)
101
+
102
+ ├── Agent Runtime (model-agnostic abstraction)
103
+ │ │
104
+ │ └── Backends: Claude Code CLI | Anthropic API | OpenAI | Ollama
105
+
106
+ └── State Store (file-based, .slavedriver/ directory)
107
+
108
+ ├── STATE.md, PLAN.md, CONTEXT.md
109
+ ├── tasks.jsonl (append-only event log)
110
+ └── config.json
111
+ ```
112
+
113
+ See [`.planning/ARCHITECTURE.md`](.planning/ARCHITECTURE.md) for the full system design.
114
+
115
+ ## Project Structure
116
+
117
+ ```
118
+ .slavedriver/ # Per-project state (created by `slavedriver init`)
119
+ ├── config.json # Project configuration + safety limits
120
+ ├── STATE.md # Current project state (<100 lines, always current)
121
+ ├── CONTEXT.md # Locked decisions all agents must respect
122
+ ├── PLAN.md # XML-structured task plan with waves
123
+ ├── CONSTITUTION.md # Project-level non-negotiable principles
124
+ ├── HEARTBEAT.md # What the heartbeat daemon should check
125
+ ├── tasks.jsonl # Append-only task event log
126
+ ├── sessions/ # Agent session data
127
+ ├── memory/ # Per-agent persistent memory
128
+ └── worktrees/ # Git worktree directories per agent
129
+ ```
130
+
131
+ ## Inspiration & Credits
132
+
133
+ slavedriver stands on the shoulders of these projects:
134
+
135
+ | Project | What We Took | License |
136
+ |---------|-------------|---------|
137
+ | [GSD](https://github.com/get-shit-done) | Wave execution, fresh context per task, atomic commits, `.planning/` pattern | MIT |
138
+ | [OpenClaw](https://docs.openclaw.ai) | Heartbeat daemon, skills system, file-based state philosophy | MIT |
139
+ | [Ralph Wiggum Loop](https://ghuntley.com/ralph/) | Iterative self-improvement loop, worker/reviewer dual-model, git-as-memory | MIT |
140
+ | [Goose](https://github.com/block/goose) | MCP extension system, recipe format, permission modes, subagent limits | Apache 2.0 |
141
+ | [Warp Terminal](https://www.warp.dev) | Block-based output, tiered approval UX, agent management panel, Oz orchestration | Proprietary |
142
+ | [BMAD](https://github.com/bmad-method) | Artifact-first development, quality gates, agent roles | MIT |
143
+ | [Spec Kit](https://github.com/spec-kit) | Spec-driven workflow, phase context templates | MIT |
144
+ | [Claude Code](https://docs.anthropic.com) | Git worktree isolation, orchestrator-worker, hooks system, stream JSON | — |
145
+ | [Claude Cowork](https://claude.com/blog/cowork-research-preview) | No-code plugin system, VM sandboxing, two-tier parallelism, 15+ lifecycle hooks | — |
146
+ | [CrewAI](https://github.com/crewai) | Role-based agents, crew/flow hybrid, YAML agent definitions | Apache 2.0 |
147
+ | [Devin](https://devin.ai) | Four-tab workspace, following toggle, auto-proceed approval, machine snapshots | Proprietary |
148
+ | [Cursor](https://cursor.com) | Agent sessions sidebar, parallel agents, aggregated diff view | Proprietary |
149
+ | [LangGraph Studio](https://github.com/langchain-ai/langgraph) | Time travel / state forking, graph-as-execution-trace | MIT |
150
+
151
+ ## Documentation
152
+
153
+ - [Architecture](.planning/ARCHITECTURE.md) — Full system design, interfaces, state machines
154
+ - [Requirements](.planning/REQUIREMENTS.md) — All v1 requirements with IDs
155
+ - [Roadmap](.planning/ROADMAP.md) — Phased milestones and success criteria
156
+ - [Stack](.planning/STACK.md) — Technology decisions and rationale
157
+ - [Conventions](.planning/CONVENTIONS.md) — Coding standards and patterns
158
+ - [Research](.planning/RESEARCH.md) — Framework analysis and pattern extraction
159
+ - [References](.planning/references/INDEX.md) — Deep implementation references from all inspiration projects
160
+ - [Project State](.planning/STATE.md) — Current status and open questions
161
+ - [Constitution](CONSTITUTION.md) — Non-negotiable project principles
162
+
163
+ ## License
164
+
165
+ MIT
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: executor
3
+ role: "Code implementation specialist"
4
+ model: sonnet
5
+ maxTurns: 50
6
+ tools:
7
+ - Read
8
+ - Write
9
+ - Edit
10
+ - Bash
11
+ - Glob
12
+ - Grep
13
+ color: green
14
+ icon: ">"
15
+ ---
16
+
17
+ You are an executor agent for slavedriver. Your job is to implement a single task as described in your prompt.
18
+
19
+ ## Rules
20
+
21
+ - Read existing code before modifying it
22
+ - Follow the project's coding conventions
23
+ - Write clean, working code — not placeholder stubs
24
+ - Run tests if they exist
25
+ - Create one atomic commit when done
26
+ - Do not modify files outside your task scope
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: planner
3
+ role: "Strategic task planning and decomposition"
4
+ model: opus
5
+ maxTurns: 30
6
+ color: blue
7
+ icon: "P"
8
+ ---
9
+
10
+ You are a planner agent for slavedriver. Your job is to analyze a codebase and create a structured task plan.
11
+
12
+ ## Your Output
13
+
14
+ You MUST output a valid PLAN.md with this exact format:
15
+
16
+ # Plan: [Goal Description]
17
+
18
+ ## Must-Haves
19
+ - [List of verification criteria]
20
+
21
+ ## Tasks
22
+
23
+ <task id="T1" wave="1" agent="executor" priority="critical">
24
+ <title>Task title</title>
25
+ <depends-on></depends-on>
26
+ <description>What to do</description>
27
+ <must-haves>
28
+ - Specific success criteria
29
+ </must-haves>
30
+ <verification>How to verify</verification>
31
+ <mode>one-shot</mode>
32
+ </task>
33
+
34
+ ## Rules
35
+
36
+ - Group independent tasks into the same wave
37
+ - Tasks that depend on others go in later waves
38
+ - Every task must have clear, testable must-haves
39
+ - Prefer smaller, focused tasks over large ones
40
+ - Use "critical" priority for tasks that block everything
41
+ - Use "ralph-loop" mode only for tasks requiring iterative correctness
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: researcher
3
+ role: "Codebase analysis and exploration"
4
+ model: haiku
5
+ maxTurns: 15
6
+ color: cyan
7
+ icon: "R"
8
+ ---
9
+
10
+ You are a researcher agent for slavedriver. Your job is to analyze a codebase and produce a concise summary.
11
+
12
+ ## Process
13
+
14
+ 1. Check for project files (package.json, Cargo.toml, go.mod, etc.)
15
+ 2. List the directory structure
16
+ 3. Read key files (entry points, configs, READMEs)
17
+ 4. Identify architecture patterns, frameworks, and conventions
18
+
19
+ ## Output
20
+
21
+ Write a concise STATE.md with:
22
+ - Project type and language
23
+ - Framework and key dependencies
24
+ - Directory structure summary
25
+ - Architecture patterns
26
+ - Entry points
27
+ - Test setup
28
+ - Key conventions to follow
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: verifier
3
+ role: "Goal-backward verification specialist"
4
+ model: opus
5
+ maxTurns: 20
6
+ color: yellow
7
+ icon: "V"
8
+ ---
9
+
10
+ You are a verifier agent for slavedriver. Your job is to check whether the planned must-haves have been achieved.
11
+
12
+ ## Process
13
+
14
+ 1. Read the must-haves from the plan
15
+ 2. For each must-have, check the actual codebase
16
+ 3. Run tests, type checks, and linting if applicable
17
+ 4. Report PASS if all must-haves are met, FAIL with specific gaps if not
18
+
19
+ ## Output Format
20
+
21
+ For each must-have:
22
+ - [PASS] or [FAIL]: description
23
+ - If FAIL: what's missing and what needs to be done
24
+
25
+ Final verdict: PASS or FAIL
@@ -0,0 +1,2 @@
1
+ import type { AgentRuntime } from '../runtime.js';
2
+ export declare function createClaudeCodeRuntime(): AgentRuntime;
@@ -0,0 +1,215 @@
1
+ import { spawn, execFile } from 'node:child_process';
2
+ // Remove CLAUDECODE env var so spawned claude processes don't think they're nested
3
+ function cleanEnv() {
4
+ const env = { ...process.env };
5
+ delete env.CLAUDECODE;
6
+ return env;
7
+ }
8
+ export function createClaudeCodeRuntime() {
9
+ const activeProcesses = new Map();
10
+ return {
11
+ type: 'claude-code',
12
+ async isAvailable() {
13
+ return new Promise((resolve) => {
14
+ execFile('claude', ['--version'], { env: cleanEnv() }, (error) => {
15
+ resolve(error === null);
16
+ });
17
+ });
18
+ },
19
+ async *execute(params) {
20
+ const args = buildArgs(params);
21
+ const child = spawn('claude', args, {
22
+ cwd: params.workingDirectory,
23
+ stdio: ['pipe', 'pipe', 'pipe'],
24
+ env: cleanEnv(),
25
+ });
26
+ activeProcesses.set(params.executionId, child);
27
+ // Pipe prompt to stdin
28
+ if (child.stdin) {
29
+ child.stdin.write(params.prompt);
30
+ child.stdin.end();
31
+ }
32
+ try {
33
+ yield* parseNdjsonStream(child, params.executionId);
34
+ }
35
+ finally {
36
+ activeProcesses.delete(params.executionId);
37
+ }
38
+ },
39
+ async abort(executionId) {
40
+ const child = activeProcesses.get(executionId);
41
+ if (child) {
42
+ child.kill('SIGTERM');
43
+ activeProcesses.delete(executionId);
44
+ }
45
+ },
46
+ };
47
+ }
48
+ function buildArgs(params) {
49
+ const args = ['-p', '--output-format', 'stream-json'];
50
+ if (params.model !== undefined) {
51
+ args.push('--model', params.model);
52
+ }
53
+ if (params.maxTurns !== undefined) {
54
+ args.push('--max-turns', String(params.maxTurns));
55
+ }
56
+ if (params.allowedTools !== undefined && params.allowedTools.length > 0) {
57
+ args.push('--allowedTools', params.allowedTools.join(','));
58
+ }
59
+ if (params.systemPrompt !== undefined) {
60
+ args.push('--append-system-prompt', params.systemPrompt);
61
+ }
62
+ if (params.dangerouslySkipPermissions === true) {
63
+ args.push('--dangerously-skip-permissions');
64
+ }
65
+ return args;
66
+ }
67
+ async function* parseNdjsonStream(child, executionId) {
68
+ const stdout = child.stdout;
69
+ if (!stdout) {
70
+ yield { type: 'error', error: `No stdout for execution ${executionId}` };
71
+ return;
72
+ }
73
+ let buffer = '';
74
+ const events = [];
75
+ let done = false;
76
+ let resolveWait;
77
+ let error;
78
+ function onData(chunk) {
79
+ buffer += chunk.toString('utf-8');
80
+ const lines = buffer.split('\n');
81
+ buffer = lines.pop() ?? '';
82
+ for (const line of lines) {
83
+ const trimmed = line.trim();
84
+ if (trimmed === '')
85
+ continue;
86
+ try {
87
+ const parsed = JSON.parse(trimmed);
88
+ const mapped = mapClaudeEvent(parsed);
89
+ for (const event of mapped) {
90
+ events.push(event);
91
+ }
92
+ }
93
+ catch {
94
+ // Skip malformed JSON lines
95
+ }
96
+ }
97
+ if (resolveWait) {
98
+ const r = resolveWait;
99
+ resolveWait = undefined;
100
+ r();
101
+ }
102
+ }
103
+ function onError(err) {
104
+ error = err.message;
105
+ done = true;
106
+ if (resolveWait) {
107
+ const r = resolveWait;
108
+ resolveWait = undefined;
109
+ r();
110
+ }
111
+ }
112
+ function onClose() {
113
+ // Process remaining buffer
114
+ if (buffer.trim() !== '') {
115
+ try {
116
+ const parsed = JSON.parse(buffer.trim());
117
+ const mapped = mapClaudeEvent(parsed);
118
+ for (const event of mapped) {
119
+ events.push(event);
120
+ }
121
+ }
122
+ catch {
123
+ // Skip malformed final line
124
+ }
125
+ }
126
+ done = true;
127
+ if (resolveWait) {
128
+ const r = resolveWait;
129
+ resolveWait = undefined;
130
+ r();
131
+ }
132
+ }
133
+ stdout.on('data', onData);
134
+ child.on('error', onError);
135
+ child.on('close', onClose);
136
+ try {
137
+ while (true) {
138
+ while (events.length > 0) {
139
+ yield events.shift();
140
+ }
141
+ if (done)
142
+ break;
143
+ await new Promise((resolve) => {
144
+ resolveWait = resolve;
145
+ });
146
+ }
147
+ // Yield any remaining events
148
+ while (events.length > 0) {
149
+ yield events.shift();
150
+ }
151
+ if (error !== undefined) {
152
+ yield { type: 'error', error };
153
+ }
154
+ }
155
+ finally {
156
+ stdout.removeListener('data', onData);
157
+ child.removeListener('error', onError);
158
+ child.removeListener('close', onClose);
159
+ }
160
+ }
161
+ function mapClaudeEvent(raw) {
162
+ if (raw === null || typeof raw !== 'object')
163
+ return [];
164
+ const obj = raw;
165
+ const eventType = obj.type;
166
+ if (eventType === 'assistant') {
167
+ return mapAssistantEvent(obj);
168
+ }
169
+ if (eventType === 'tool_use') {
170
+ const tool = typeof obj.name === 'string' ? obj.name : 'unknown';
171
+ return [{ type: 'tool_use', tool, input: obj.input }];
172
+ }
173
+ if (eventType === 'tool_result') {
174
+ const tool = typeof obj.name === 'string' ? obj.name : 'unknown';
175
+ return [{ type: 'tool_result', tool, output: obj.output }];
176
+ }
177
+ if (eventType === 'result') {
178
+ const events = [];
179
+ const inputTokens = typeof obj.input_tokens === 'number' ? obj.input_tokens : 0;
180
+ const outputTokens = typeof obj.output_tokens === 'number' ? obj.output_tokens : 0;
181
+ events.push({
182
+ type: 'cost_update',
183
+ inputTokens,
184
+ outputTokens,
185
+ });
186
+ const result = typeof obj.result === 'string'
187
+ ? obj.result
188
+ : typeof obj.message === 'string'
189
+ ? obj.message
190
+ : '';
191
+ events.push({ type: 'complete', result });
192
+ return events;
193
+ }
194
+ return [];
195
+ }
196
+ function mapAssistantEvent(obj) {
197
+ const events = [];
198
+ const message = obj.message;
199
+ if (message !== null && typeof message === 'object') {
200
+ const msg = message;
201
+ const content = msg.content;
202
+ if (Array.isArray(content)) {
203
+ for (const block of content) {
204
+ if (block !== null && typeof block === 'object') {
205
+ const b = block;
206
+ if (b.type === 'text' && typeof b.text === 'string') {
207
+ events.push({ type: 'text_delta', text: b.text });
208
+ }
209
+ }
210
+ }
211
+ }
212
+ }
213
+ return events;
214
+ }
215
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/agents/backends/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AgentRuntime, AgentEvent } from '../runtime.js';
2
+ export interface MockConfig {
3
+ readonly events?: readonly AgentEvent[];
4
+ readonly delay?: number;
5
+ readonly shouldFail?: boolean;
6
+ readonly errorMessage?: string;
7
+ readonly isAvailableResult?: boolean;
8
+ }
9
+ export declare function createMockRuntime(config: MockConfig): AgentRuntime;
@@ -0,0 +1,31 @@
1
+ export function createMockRuntime(config) {
2
+ return {
3
+ type: 'mock',
4
+ async isAvailable() {
5
+ return config.isAvailableResult ?? true;
6
+ },
7
+ async *execute(_params) {
8
+ if (config.shouldFail === true) {
9
+ yield {
10
+ type: 'error',
11
+ error: config.errorMessage ?? 'Mock execution failed',
12
+ };
13
+ return;
14
+ }
15
+ const events = config.events ?? [];
16
+ for (const event of events) {
17
+ if (config.delay !== undefined && config.delay > 0) {
18
+ await sleep(config.delay);
19
+ }
20
+ yield event;
21
+ }
22
+ },
23
+ async abort(_executionId) {
24
+ // no-op for mock
25
+ },
26
+ };
27
+ }
28
+ function sleep(ms) {
29
+ return new Promise((resolve) => setTimeout(resolve, ms));
30
+ }
31
+ //# sourceMappingURL=mock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../src/agents/backends/mock.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IAClD,OAAO;QACL,IAAI,EAAE,MAAM;QAEZ,KAAK,CAAC,WAAW;YACf,OAAO,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,CAAC,OAAO,CAAC,OAA2B;YACxC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC/B,MAAM;oBACJ,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,uBAAuB;iBACtD,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;oBACnD,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,YAAoB;YAC9B,iBAAiB;QACnB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Task } from '../types.js';
2
+ import type { StateStore } from '../state/store.js';
3
+ export interface BuildContextParams {
4
+ readonly task: Task;
5
+ readonly store: StateStore;
6
+ readonly constitution?: string;
7
+ readonly dependencySummaries?: Record<string, string>;
8
+ readonly waveSummary?: string;
9
+ }
10
+ export declare function buildContext(params: BuildContextParams): Promise<string>;
@@ -0,0 +1,61 @@
1
+ export async function buildContext(params) {
2
+ const { task, store, constitution, dependencySummaries, waveSummary } = params;
3
+ const sections = [];
4
+ // Task header
5
+ sections.push(`# Task: ${task.title}`);
6
+ // Description
7
+ sections.push('## Description');
8
+ sections.push(task.description);
9
+ // Must-Haves
10
+ if (task.mustHaves.length > 0) {
11
+ sections.push('## Must-Haves');
12
+ sections.push(task.mustHaves.map((item) => `- ${item}`).join('\n'));
13
+ }
14
+ // Verification
15
+ if (task.verification) {
16
+ sections.push('## Verification');
17
+ sections.push(task.verification);
18
+ }
19
+ // Completed Dependency Outputs
20
+ if (dependencySummaries && Object.keys(dependencySummaries).length > 0) {
21
+ sections.push('## Completed Dependency Outputs');
22
+ for (const [key, summary] of Object.entries(dependencySummaries)) {
23
+ sections.push(`### ${key}`);
24
+ sections.push(summary);
25
+ }
26
+ }
27
+ // Previous Wave Summary
28
+ if (waveSummary) {
29
+ sections.push('## Previous Wave Summary');
30
+ sections.push(waveSummary);
31
+ }
32
+ // Project State
33
+ const stateContent = await safeRead(() => store.readState());
34
+ if (stateContent) {
35
+ sections.push('## Project State');
36
+ sections.push(stateContent);
37
+ }
38
+ // Project Context
39
+ const contextContent = await safeRead(() => store.readContext());
40
+ if (contextContent) {
41
+ sections.push('## Project Context');
42
+ sections.push(contextContent);
43
+ }
44
+ // Constitution
45
+ const constitutionContent = constitution ?? await safeRead(() => store.readConstitution());
46
+ if (constitutionContent) {
47
+ sections.push('## Constitution');
48
+ sections.push(constitutionContent);
49
+ }
50
+ return sections.join('\n\n');
51
+ }
52
+ async function safeRead(fn) {
53
+ try {
54
+ const content = await fn();
55
+ return content || undefined;
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ }
61
+ //# sourceMappingURL=context-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-builder.js","sourceRoot":"","sources":["../../src/agents/context-builder.ts"],"names":[],"mappings":"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"}