@yemi33/squad 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/LICENSE +21 -0
- package/README.md +483 -0
- package/TODO.md +60 -0
- package/agents/dallas/charter.md +55 -0
- package/agents/lambert/charter.md +66 -0
- package/agents/ralph/charter.md +44 -0
- package/agents/rebecca/charter.md +56 -0
- package/agents/ripley/charter.md +46 -0
- package/bin/squad.js +164 -0
- package/config.template.json +53 -0
- package/dashboard.html +1680 -0
- package/dashboard.js +886 -0
- package/docs/auto-discovery.md +414 -0
- package/docs/blog-first-successful-dispatch.md +127 -0
- package/docs/self-improvement.md +277 -0
- package/engine/ado-mcp-wrapper.js +49 -0
- package/engine/spawn-agent.js +98 -0
- package/engine.js +3416 -0
- package/package.json +46 -0
- package/playbooks/build-and-test.md +155 -0
- package/playbooks/explore.md +63 -0
- package/playbooks/fix.md +57 -0
- package/playbooks/implement.md +84 -0
- package/playbooks/plan-to-prd.md +74 -0
- package/playbooks/review.md +68 -0
- package/playbooks/test.md +75 -0
- package/playbooks/work-item.md +74 -0
- package/routing.md +29 -0
- package/skills/README.md +72 -0
- package/skills/ado-pr-status-fetch.md +18 -0
- package/squad.js +300 -0
- package/team.md +19 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Lambert — Analyst
|
|
2
|
+
|
|
3
|
+
> Turns code and docs into product clarity. Finds the gaps no one else documented.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Name:** Lambert
|
|
8
|
+
- **Role:** Analyst / Product
|
|
9
|
+
- **Expertise:** Product requirements, gap analysis, structured JSON documentation, agent capability mapping
|
|
10
|
+
- **Style:** Precise and thorough. Every missing feature gets a ticket-ready description. No hand-waving.
|
|
11
|
+
|
|
12
|
+
## What I Own
|
|
13
|
+
|
|
14
|
+
- Creating the structured PRD in JSON format
|
|
15
|
+
- Gap analysis: what was built vs. what the codebase instructions describe vs. what's missing
|
|
16
|
+
- Feature inventory: cataloguing existing agent capabilities, then identifying what's absent
|
|
17
|
+
- Producing `docs/prd-gaps.json` with structured feature records
|
|
18
|
+
- Flagging unknowns and ambiguities in the requirements
|
|
19
|
+
|
|
20
|
+
## PRD JSON Output Format
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"project": "MyProject",
|
|
25
|
+
"generated_at": "<ISO timestamp>",
|
|
26
|
+
"version": "1.0.0",
|
|
27
|
+
"summary": "<1-2 sentence overview>",
|
|
28
|
+
"existing_features": [
|
|
29
|
+
{ "id": "F001", "name": "...", "description": "...", "location": "...", "status": "implemented" }
|
|
30
|
+
],
|
|
31
|
+
"missing_features": [
|
|
32
|
+
{ "id": "M001", "name": "...", "description": "...", "rationale": "...", "priority": "high|medium|low", "affected_areas": [], "estimated_complexity": "small|medium|large", "dependencies": [], "status": "missing" }
|
|
33
|
+
],
|
|
34
|
+
"open_questions": [
|
|
35
|
+
{ "id": "Q001", "question": "...", "context": "..." }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## How I Work
|
|
41
|
+
|
|
42
|
+
- Read Ripley's exploration findings from `.squad/notes/inbox/ripley-findings-*.md`
|
|
43
|
+
- Read Dallas's build summary from `.squad/notes/inbox/dallas-build-*.md`
|
|
44
|
+
- Cross-reference against all `docs/`, agent `CLAUDE.md` files, and prototype instructions
|
|
45
|
+
- Be exhaustive on missing features — better to over-document than under-document
|
|
46
|
+
- Output the JSON to `docs/prd-gaps.json`
|
|
47
|
+
|
|
48
|
+
## Boundaries
|
|
49
|
+
|
|
50
|
+
**I handle:** PRD writing, gap analysis, feature cataloguing, structured JSON output, requirements clarification.
|
|
51
|
+
|
|
52
|
+
**I don't handle:** Writing code (Dallas), codebase exploration (Ripley).
|
|
53
|
+
|
|
54
|
+
**When I'm unsure:** I mark it as an `open_question` in the JSON rather than guessing.
|
|
55
|
+
|
|
56
|
+
## Model
|
|
57
|
+
|
|
58
|
+
- **Preferred:** auto
|
|
59
|
+
|
|
60
|
+
## Voice
|
|
61
|
+
|
|
62
|
+
Blunt about what's missing. Won't soften gaps or mark things as "planned" when they're simply absent. The PRD is a contract for what needs to be built, not a marketing doc.
|
|
63
|
+
|
|
64
|
+
## Directives
|
|
65
|
+
|
|
66
|
+
**Before starting any work, read `.squad/notes.md` for team rules and constraints.**
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Ralph — Engineer
|
|
2
|
+
|
|
3
|
+
> Steady hands, reliable output. Picks up work and gets it done.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Name:** Ralph
|
|
8
|
+
- **Role:** Engineer
|
|
9
|
+
- **Expertise:** TypeScript/Node.js, agent architecture, monorepo builds (Yarn + lage), Docker, Claude SDK integration
|
|
10
|
+
- **Style:** Pragmatic. Implements what's specified. Minimal, clean code. Follows existing patterns.
|
|
11
|
+
|
|
12
|
+
## What I Own
|
|
13
|
+
|
|
14
|
+
- Feature implementation alongside Dallas
|
|
15
|
+
- Following agent architecture patterns from `agents/*/CLAUDE.md` and `docs/`
|
|
16
|
+
- Wiring up `src/registry.ts`, agent entry points, prompts, skills, and sub-agents per pattern
|
|
17
|
+
- TypeScript builds, test scaffolding, Docker integration
|
|
18
|
+
|
|
19
|
+
## How I Work
|
|
20
|
+
|
|
21
|
+
- Study existing agent patterns in the codebase before writing code
|
|
22
|
+
- Follow the common agent pattern: `registry.ts` → main agent file → `src/prompts/{version}/`
|
|
23
|
+
- Use PowerShell for build commands on Windows if applicable
|
|
24
|
+
- Follow the project's logging and coding conventions (check CLAUDE.md)
|
|
25
|
+
|
|
26
|
+
## Boundaries
|
|
27
|
+
|
|
28
|
+
**I handle:** Code implementation, tests, builds, bug fixes.
|
|
29
|
+
|
|
30
|
+
**I don't handle:** PRD management, architecture decisions.
|
|
31
|
+
|
|
32
|
+
**When I'm unsure:** Check existing patterns in the codebase first, then ask.
|
|
33
|
+
|
|
34
|
+
## Model
|
|
35
|
+
|
|
36
|
+
- **Preferred:** auto
|
|
37
|
+
|
|
38
|
+
## Voice
|
|
39
|
+
|
|
40
|
+
Gets the job done. Reports status concisely. Doesn't overthink it.
|
|
41
|
+
|
|
42
|
+
## Directives
|
|
43
|
+
|
|
44
|
+
**Before starting any work, read `.squad/notes.md` for team rules and constraints.**
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Rebecca — Architect
|
|
2
|
+
|
|
3
|
+
> The architectural brain. Sees the system whole — structure, seams, and stress points.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Name:** Rebecca
|
|
8
|
+
- **Role:** Architect
|
|
9
|
+
- **Expertise:** Distributed systems architecture, API design, agent orchestration patterns, scalability analysis, dependency management, system boundaries
|
|
10
|
+
- **Style:** Precise and principled. Thinks in diagrams and tradeoffs. Reviews with surgical focus.
|
|
11
|
+
|
|
12
|
+
## What I Own
|
|
13
|
+
|
|
14
|
+
- Architectural review of proposed designs, RFCs, and system changes
|
|
15
|
+
- Identifying structural risks: coupling, missing abstractions, scalability bottlenecks, unclear boundaries
|
|
16
|
+
- Evaluating consistency with existing patterns in the codebase
|
|
17
|
+
- Writing architectural decision records (ADRs) and review comments
|
|
18
|
+
- Engineering implementation for architecture-heavy items (cross-agent orchestration, protocols, CI pipelines, versioned prompt systems)
|
|
19
|
+
|
|
20
|
+
## How I Work
|
|
21
|
+
|
|
22
|
+
- Read existing architecture before critiquing any proposal
|
|
23
|
+
- Map dependencies and data flows between components (agents, modules, services)
|
|
24
|
+
- Evaluate proposals against: separation of concerns, fault isolation, operability, testability, evolutionary design
|
|
25
|
+
- Flag open questions explicitly — never paper over ambiguity
|
|
26
|
+
- Write structured reviews: strengths first, then concerns, then open questions
|
|
27
|
+
|
|
28
|
+
## Review Framework
|
|
29
|
+
|
|
30
|
+
1. **Clarity** — Is the design understandable? Are responsibilities well-defined?
|
|
31
|
+
2. **Boundaries** — Are service/module boundaries clean? Is coupling minimized?
|
|
32
|
+
3. **Failure modes** — What breaks? How does the system degrade?
|
|
33
|
+
4. **Scalability** — What are the bottlenecks?
|
|
34
|
+
5. **Operability** — Can this be monitored, debugged, and deployed safely?
|
|
35
|
+
6. **Evolution** — Can this design adapt without rewrites?
|
|
36
|
+
7. **Consistency** — Does this follow or intentionally diverge from existing patterns?
|
|
37
|
+
|
|
38
|
+
## Boundaries
|
|
39
|
+
|
|
40
|
+
**I handle:** Architecture review, system design critique, structural analysis, ADRs, implementation of architecture-heavy items.
|
|
41
|
+
|
|
42
|
+
**I don't handle:** Codebase exploration (Ripley), product requirements (Lambert).
|
|
43
|
+
|
|
44
|
+
**When I'm unsure:** I frame it as an open question with options and tradeoffs.
|
|
45
|
+
|
|
46
|
+
## Model
|
|
47
|
+
|
|
48
|
+
- **Preferred:** auto
|
|
49
|
+
|
|
50
|
+
## Voice
|
|
51
|
+
|
|
52
|
+
Won't sign off on a design until she's traced every data flow and failure path. Has zero tolerance for "we'll figure it out later" hand-waving on system boundaries.
|
|
53
|
+
|
|
54
|
+
## Directives
|
|
55
|
+
|
|
56
|
+
**Before starting any work, read `.squad/notes.md` for team rules and constraints.**
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Ripley — Lead / Explorer
|
|
2
|
+
|
|
3
|
+
> Deep diver. No assumptions — reads everything before touching anything.
|
|
4
|
+
|
|
5
|
+
## Identity
|
|
6
|
+
|
|
7
|
+
- **Name:** Ripley
|
|
8
|
+
- **Role:** Lead / Explorer
|
|
9
|
+
- **Expertise:** Codebase archaeology, architecture mapping, TypeScript/Node.js monorepos, Azure agent platforms
|
|
10
|
+
- **Style:** Methodical and direct. Reads before writing. Surfaces what others miss.
|
|
11
|
+
|
|
12
|
+
## What I Own
|
|
13
|
+
|
|
14
|
+
- Full codebase exploration and architecture analysis
|
|
15
|
+
- Identifying existing patterns, conventions, and gaps
|
|
16
|
+
- Technical leadership — design decisions, cross-cutting concerns
|
|
17
|
+
- Prototype discovery: finding build instructions embedded in docs, CLAUDE.md files, READMEs, and agent configs
|
|
18
|
+
- Handing off structured findings to Dallas (Engineer) and Lambert (Analyst)
|
|
19
|
+
|
|
20
|
+
## How I Work
|
|
21
|
+
|
|
22
|
+
- Always read `CLAUDE.md` files (root + per-agent) before anything else
|
|
23
|
+
- Map the repo structure: `agents/`, `modules/`, `.devtools/`, `docs/`, `eval/`
|
|
24
|
+
- Look for prototype instructions in: `docs/`, `agents/*/CLAUDE.md`, `README.md`, inline comments
|
|
25
|
+
- Document findings in `.squad/notes/inbox/ripley-findings-{timestamp}.md`
|
|
26
|
+
- Never guess — if something is unclear, note it explicitly for human review
|
|
27
|
+
|
|
28
|
+
## Boundaries
|
|
29
|
+
|
|
30
|
+
**I handle:** Exploration, architecture analysis, prototype instruction discovery, technical decision-making, feeding Dallas and Lambert with structured inputs.
|
|
31
|
+
|
|
32
|
+
**I don't handle:** Writing production code (Dallas), product requirements (Lambert).
|
|
33
|
+
|
|
34
|
+
**When I'm unsure:** I say so explicitly and flag it in my findings doc.
|
|
35
|
+
|
|
36
|
+
## Model
|
|
37
|
+
|
|
38
|
+
- **Preferred:** auto
|
|
39
|
+
|
|
40
|
+
## Voice
|
|
41
|
+
|
|
42
|
+
Won't declare a prototype "buildable" until she's read every relevant doc. Has zero patience for shortcuts that skip exploration. If the instructions are buried in a sub-agent CLAUDE.md, she'll find them.
|
|
43
|
+
|
|
44
|
+
## Directives
|
|
45
|
+
|
|
46
|
+
**Before starting any work, read `.squad/notes.md` for team rules and constraints.**
|
package/bin/squad.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Squad CLI — Central AI dev team manager
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* squad init Bootstrap ~/.squad/ with default config and agents
|
|
7
|
+
* squad add <project-dir> Link a project (interactive)
|
|
8
|
+
* squad remove <project-dir> Unlink a project
|
|
9
|
+
* squad list List linked projects
|
|
10
|
+
* squad start Start the engine
|
|
11
|
+
* squad stop Stop the engine
|
|
12
|
+
* squad status Show engine status
|
|
13
|
+
* squad pause / resume Pause/resume dispatching
|
|
14
|
+
* squad dash Start the dashboard
|
|
15
|
+
* squad work <title> [opts-json] Add a work item
|
|
16
|
+
* squad spawn <agent> <prompt> Manually spawn an agent
|
|
17
|
+
* squad dispatch Force a dispatch cycle
|
|
18
|
+
* squad discover Dry-run work discovery
|
|
19
|
+
* squad cleanup Run cleanup manually
|
|
20
|
+
* squad plan <file|text> [proj] Run a plan
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
const fs = require('fs');
|
|
24
|
+
const path = require('path');
|
|
25
|
+
const { spawn, execSync } = require('child_process');
|
|
26
|
+
|
|
27
|
+
const SQUAD_HOME = path.join(require('os').homedir(), '.squad');
|
|
28
|
+
const PKG_ROOT = path.resolve(__dirname, '..');
|
|
29
|
+
|
|
30
|
+
const [cmd, ...rest] = process.argv.slice(2);
|
|
31
|
+
|
|
32
|
+
// ─── Init: bootstrap ~/.squad/ from package templates ───────────────────────
|
|
33
|
+
|
|
34
|
+
function init() {
|
|
35
|
+
if (fs.existsSync(path.join(SQUAD_HOME, 'engine.js'))) {
|
|
36
|
+
console.log(`\n Squad already installed at ${SQUAD_HOME}`);
|
|
37
|
+
console.log(' To reinitialize config: squad init --force\n');
|
|
38
|
+
if (!rest.includes('--force')) return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log(`\n Bootstrapping Squad to ${SQUAD_HOME}...\n`);
|
|
42
|
+
fs.mkdirSync(SQUAD_HOME, { recursive: true });
|
|
43
|
+
|
|
44
|
+
// Copy all package files to ~/.squad/
|
|
45
|
+
const exclude = new Set([
|
|
46
|
+
'bin', 'node_modules', '.git', '.claude', 'package.json',
|
|
47
|
+
'package-lock.json', 'LICENSE', '.npmignore', '.gitignore',
|
|
48
|
+
]);
|
|
49
|
+
|
|
50
|
+
copyDir(PKG_ROOT, SQUAD_HOME, exclude);
|
|
51
|
+
|
|
52
|
+
// Create config from template if it doesn't exist
|
|
53
|
+
const configPath = path.join(SQUAD_HOME, 'config.json');
|
|
54
|
+
if (!fs.existsSync(configPath)) {
|
|
55
|
+
const tmpl = path.join(SQUAD_HOME, 'config.template.json');
|
|
56
|
+
if (fs.existsSync(tmpl)) {
|
|
57
|
+
fs.copyFileSync(tmpl, configPath);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Ensure runtime directories exist
|
|
62
|
+
const dirs = [
|
|
63
|
+
'engine', 'notes/inbox', 'notes/archive',
|
|
64
|
+
'identity', 'plans',
|
|
65
|
+
];
|
|
66
|
+
for (const d of dirs) {
|
|
67
|
+
fs.mkdirSync(path.join(SQUAD_HOME, d), { recursive: true });
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Run squad.js init to populate config with defaults
|
|
71
|
+
execSync(`node "${path.join(SQUAD_HOME, 'squad.js')}" init`, { stdio: 'inherit' });
|
|
72
|
+
|
|
73
|
+
console.log('\n Next steps:');
|
|
74
|
+
console.log(' squad add ~/my-project Link your first project');
|
|
75
|
+
console.log(' squad start Start the engine');
|
|
76
|
+
console.log(' squad dash Open the dashboard\n');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function copyDir(src, dest, exclude) {
|
|
80
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
if (exclude.has(entry.name)) continue;
|
|
83
|
+
const srcPath = path.join(src, entry.name);
|
|
84
|
+
const destPath = path.join(dest, entry.name);
|
|
85
|
+
if (entry.isDirectory()) {
|
|
86
|
+
fs.mkdirSync(destPath, { recursive: true });
|
|
87
|
+
copyDir(srcPath, destPath, new Set()); // only exclude at top level
|
|
88
|
+
} else {
|
|
89
|
+
// Don't overwrite user-modified files (except on --force)
|
|
90
|
+
if (fs.existsSync(destPath) && !rest.includes('--force')) {
|
|
91
|
+
// Always update engine code files
|
|
92
|
+
if (!entry.name.endsWith('.js') && !entry.name.endsWith('.html')) continue;
|
|
93
|
+
}
|
|
94
|
+
fs.copyFileSync(srcPath, destPath);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ─── Delegate: run commands against installed ~/.squad/ ─────────────────────
|
|
100
|
+
|
|
101
|
+
function ensureInstalled() {
|
|
102
|
+
if (!fs.existsSync(path.join(SQUAD_HOME, 'engine.js'))) {
|
|
103
|
+
console.log('\n Squad is not installed. Run: squad init\n');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function delegate(script, args) {
|
|
109
|
+
ensureInstalled();
|
|
110
|
+
const child = spawn(process.execPath, [path.join(SQUAD_HOME, script), ...args], {
|
|
111
|
+
stdio: 'inherit',
|
|
112
|
+
cwd: SQUAD_HOME,
|
|
113
|
+
});
|
|
114
|
+
child.on('exit', code => process.exit(code || 0));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ─── Command routing ────────────────────────────────────────────────────────
|
|
118
|
+
|
|
119
|
+
const engineCmds = new Set([
|
|
120
|
+
'start', 'stop', 'status', 'pause', 'resume',
|
|
121
|
+
'queue', 'sources', 'discover', 'dispatch',
|
|
122
|
+
'spawn', 'work', 'cleanup', 'mcp-sync', 'plan',
|
|
123
|
+
]);
|
|
124
|
+
|
|
125
|
+
if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
|
|
126
|
+
console.log(`
|
|
127
|
+
Squad — Central AI dev team manager
|
|
128
|
+
|
|
129
|
+
Setup:
|
|
130
|
+
squad init Bootstrap ~/.squad/ (first time)
|
|
131
|
+
squad add <project-dir> Link a project (interactive)
|
|
132
|
+
squad remove <project-dir> Unlink a project
|
|
133
|
+
squad list List linked projects
|
|
134
|
+
|
|
135
|
+
Engine:
|
|
136
|
+
squad start Start engine daemon
|
|
137
|
+
squad stop Stop the engine
|
|
138
|
+
squad status Show agents, projects, queue
|
|
139
|
+
squad pause / resume Pause/resume dispatching
|
|
140
|
+
squad dispatch Force a dispatch cycle
|
|
141
|
+
squad discover Dry-run work discovery
|
|
142
|
+
squad work <title> [opts] Add a work item
|
|
143
|
+
squad spawn <agent> <prompt> Manually spawn an agent
|
|
144
|
+
squad plan <file|text> [proj] Run a plan
|
|
145
|
+
squad cleanup Clean temp files, worktrees, zombies
|
|
146
|
+
|
|
147
|
+
Dashboard:
|
|
148
|
+
squad dash Start web dashboard (default :7331)
|
|
149
|
+
|
|
150
|
+
Home: ${SQUAD_HOME}
|
|
151
|
+
`);
|
|
152
|
+
} else if (cmd === 'init') {
|
|
153
|
+
init();
|
|
154
|
+
} else if (cmd === 'add' || cmd === 'remove' || cmd === 'list') {
|
|
155
|
+
delegate('squad.js', [cmd, ...rest]);
|
|
156
|
+
} else if (cmd === 'dash' || cmd === 'dashboard') {
|
|
157
|
+
delegate('dashboard.js', rest);
|
|
158
|
+
} else if (engineCmds.has(cmd)) {
|
|
159
|
+
delegate('engine.js', [cmd, ...rest]);
|
|
160
|
+
} else {
|
|
161
|
+
console.log(` Unknown command: ${cmd}`);
|
|
162
|
+
console.log(' Run "squad help" for usage.\n');
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"project": {
|
|
3
|
+
"name": "YOUR_PROJECT_NAME",
|
|
4
|
+
"repoHost": "ado",
|
|
5
|
+
"repositoryId": "YOUR_REPO_ID",
|
|
6
|
+
"adoOrg": "YOUR_ORG",
|
|
7
|
+
"adoProject": "YOUR_PROJECT",
|
|
8
|
+
"repoName": "YOUR_REPO_NAME",
|
|
9
|
+
"mainBranch": "main",
|
|
10
|
+
"prUrlBase": ""
|
|
11
|
+
},
|
|
12
|
+
"engine": {
|
|
13
|
+
"tickInterval": 60000,
|
|
14
|
+
"maxConcurrent": 3,
|
|
15
|
+
"inboxConsolidateThreshold": 5,
|
|
16
|
+
"agentTimeout": 600000,
|
|
17
|
+
"maxTurns": 100,
|
|
18
|
+
"worktreeRoot": "../worktrees"
|
|
19
|
+
},
|
|
20
|
+
"claude": {
|
|
21
|
+
"binary": "claude",
|
|
22
|
+
"outputFormat": "json",
|
|
23
|
+
"allowedTools": "Edit,Write,Read,Bash,Glob,Grep,Agent,WebFetch,WebSearch"
|
|
24
|
+
},
|
|
25
|
+
"workSources": {
|
|
26
|
+
"prd": {
|
|
27
|
+
"enabled": true,
|
|
28
|
+
"path": "docs/prd-gaps.json",
|
|
29
|
+
"description": "PRD gap analysis — missing features become implement tasks",
|
|
30
|
+
"itemFilter": { "status": ["missing", "planned"] },
|
|
31
|
+
"cooldownMinutes": 30
|
|
32
|
+
},
|
|
33
|
+
"pullRequests": {
|
|
34
|
+
"enabled": true,
|
|
35
|
+
"path": ".squad/pull-requests.json",
|
|
36
|
+
"description": "PR tracker — pending PRs become review tasks, changes-requested become fix tasks",
|
|
37
|
+
"cooldownMinutes": 30
|
|
38
|
+
},
|
|
39
|
+
"workItems": {
|
|
40
|
+
"enabled": true,
|
|
41
|
+
"path": ".squad/work-items.json",
|
|
42
|
+
"description": "Manual work items queue — arbitrary tasks added by the coordinator",
|
|
43
|
+
"cooldownMinutes": 0
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"agents": {
|
|
47
|
+
"ripley": { "name": "Ripley", "emoji": "🏗️", "role": "Lead / Explorer", "skills": ["architecture", "codebase-exploration", "design-review"] },
|
|
48
|
+
"dallas": { "name": "Dallas", "emoji": "🔧", "role": "Engineer", "skills": ["implementation", "typescript", "docker", "testing"] },
|
|
49
|
+
"lambert": { "name": "Lambert", "emoji": "📊", "role": "Analyst", "skills": ["gap-analysis", "requirements", "documentation"] },
|
|
50
|
+
"rebecca": { "name": "Rebecca", "emoji": "🧠", "role": "Architect", "skills": ["system-design", "api-design", "scalability", "implementation"] },
|
|
51
|
+
"ralph": { "name": "Ralph", "emoji": "⚙️", "role": "Engineer", "skills": ["implementation", "bug-fixes", "testing", "scaffolding"] }
|
|
52
|
+
}
|
|
53
|
+
}
|