opencode-agile-agent 1.0.3 → 1.2.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 +6 -5
- package/bin/cli.js +13 -241
- package/bin/sync-templates.js +1 -7
- package/bin/validate-templates.js +0 -2
- package/package.json +1 -1
- package/templates/.opencode/ARCHITECTURE.md +10 -4
- package/templates/.opencode/README.md +17 -7
- package/templates/.opencode/agents/api-designer.md +52 -43
- package/templates/.opencode/agents/backend-specialist.md +53 -44
- package/templates/.opencode/agents/code-archaeologist.md +52 -43
- package/templates/.opencode/agents/context-gatherer.md +19 -8
- package/templates/.opencode/agents/database-architect.md +52 -43
- package/templates/.opencode/agents/debugger.md +52 -43
- package/templates/.opencode/agents/developer.md +56 -43
- package/templates/.opencode/agents/devops-engineer.md +51 -43
- package/templates/.opencode/agents/documentation-writer.md +50 -43
- package/templates/.opencode/agents/explorer-agent.md +17 -11
- package/templates/.opencode/agents/feature-lead.md +42 -30
- package/templates/.opencode/agents/feature-loop.md +100 -0
- package/templates/.opencode/agents/frontend-specialist.md +52 -44
- package/templates/.opencode/agents/game-developer.md +51 -43
- package/templates/.opencode/agents/mobile-developer.md +52 -43
- package/templates/.opencode/agents/orchestrator.md +46 -34
- package/templates/.opencode/agents/penetration-tester.md +46 -39
- package/templates/.opencode/agents/performance-optimizer.md +52 -43
- package/templates/.opencode/agents/pr-reviewer.md +61 -43
- package/templates/.opencode/agents/product-manager.md +44 -35
- package/templates/.opencode/agents/project-planner.md +52 -43
- package/templates/.opencode/agents/qa-automation-engineer.md +44 -35
- package/templates/.opencode/agents/security-auditor.md +43 -36
- package/templates/.opencode/agents/seo-specialist.md +52 -43
- package/templates/.opencode/agents/system-analyst.md +46 -37
- package/templates/.opencode/agents/test-engineer.md +46 -39
- package/templates/.opencode/commands/brainstorm.md +1 -1
- package/templates/.opencode/commands/create.md +1 -1
- package/templates/.opencode/commands/debug.md +1 -1
- package/templates/.opencode/commands/plan.md +1 -1
- package/templates/.opencode/commands/progress.md +20 -0
- package/templates/.opencode/commands/reframe.md +17 -0
- package/templates/.opencode/commands/rubber-duck.md +14 -0
- package/templates/.opencode/config.template.json +61 -17
- package/templates/.opencode/package-lock.json +115 -0
- package/templates/.opencode/skills/plan-writing/SKILL.md +5 -5
- package/templates/.opencode/templates/brief.template.md +20 -0
- package/templates/.opencode/templates/notes.template.md +13 -0
- package/templates/.opencode/templates/spec.template.md +17 -0
- package/templates/.opencode/templates/status.template.yaml +14 -0
- package/templates/.opencode/templates/task.template.md +13 -0
- package/templates/AGENTS.template.md +0 -300
package/README.md
CHANGED
|
@@ -18,15 +18,15 @@ Scaffold the OpenCode spec-driven agent kit into any project with one confirmati
|
|
|
18
18
|
- The installer writes to the current working directory, not the package directory.
|
|
19
19
|
|
|
20
20
|
## What Gets Installed
|
|
21
|
-
-
|
|
21
|
+
- 26 agents
|
|
22
22
|
- 14 skills
|
|
23
|
-
-
|
|
23
|
+
- 10 commands
|
|
24
24
|
- Shared rules, docs, and project config
|
|
25
25
|
|
|
26
26
|
## Custom Commands
|
|
27
27
|
- `.opencode/commands/*.md` holds the slash commands.
|
|
28
28
|
- Each command uses Markdown frontmatter plus a prompt body, matching OpenCode's command format.
|
|
29
|
-
- The command set is `brainstorm`, `create`, `debug`, `plan`, `review`, `status`, and `test`.
|
|
29
|
+
- The command set is `brainstorm`, `create`, `debug`, `plan`, `progress`, `reframe`, `review`, `rubber-duck`, `status`, and `test`.
|
|
30
30
|
|
|
31
31
|
## Design Notes
|
|
32
32
|
- Skills are compact, philosophy-first, and loaded by intent.
|
|
@@ -34,14 +34,14 @@ Scaffold the OpenCode spec-driven agent kit into any project with one confirmati
|
|
|
34
34
|
- `redteam-validation` simulates attacker behavior and proves exploitability.
|
|
35
35
|
- `qa-automation-engineer` is support-only for harness and CI plumbing, not the default test path.
|
|
36
36
|
- `orchestrator` is optional; default routing stays with `feature-lead` and the owning specialists.
|
|
37
|
-
- The compact planning bundle is
|
|
37
|
+
- The compact planning bundle is brief.md, spec.md, task.md, notes.md, and status.yaml.
|
|
38
38
|
- `@feature-lead` is the primary entry point; the rest are subagents.
|
|
39
39
|
- Completed feature bundles are archived in `.opencode/archive/<feature-slug>/`.
|
|
40
40
|
|
|
41
41
|
## Spec-Driven Flow
|
|
42
42
|
- `@feature-lead` is the primary entry point.
|
|
43
43
|
- `@context-gatherer` maps the current project before any planning or proof.
|
|
44
|
-
- `@project-planner` and `@system-analyst` build `
|
|
44
|
+
- `@project-planner` and `@system-analyst` build `brief.md`, `spec.md`, `task.md`, `notes.md`, and `status.yaml`.
|
|
45
45
|
- `@developer` implements the approved spec.
|
|
46
46
|
- `@test-engineer`, `@security-auditor`, `@penetration-tester`, and `@pr-reviewer` close the loop.
|
|
47
47
|
- `@feature-lead` archives the completed bundle in `.opencode/archive/<feature-slug>/`.
|
|
@@ -49,6 +49,7 @@ Scaffold the OpenCode spec-driven agent kit into any project with one confirmati
|
|
|
49
49
|
## Template Source Of Truth
|
|
50
50
|
- `templates/.opencode` mirrors the project kit.
|
|
51
51
|
- Use `node bin/sync-templates.js` after editing `.opencode`.
|
|
52
|
+
- `AGENTS.md` is generated per installed project and is not stored as a reusable template.
|
|
52
53
|
|
|
53
54
|
## Requirements
|
|
54
55
|
- Node.js 16+
|
package/bin/cli.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
import { dirname, join, sep } from 'path';
|
|
5
|
-
import { existsSync, mkdirSync, cpSync,
|
|
5
|
+
import { existsSync, mkdirSync, cpSync, rmSync } from 'fs';
|
|
6
6
|
import { createInterface } from 'readline';
|
|
7
7
|
|
|
8
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -53,10 +53,9 @@ OpenCode Agile Agent Installer
|
|
|
53
53
|
Usage:
|
|
54
54
|
opencode-agile-agent
|
|
55
55
|
|
|
56
|
-
What it does:
|
|
57
|
-
- Asks one yes/no question.
|
|
58
|
-
-
|
|
59
|
-
- Copies .opencode and generates AGENTS.md.
|
|
56
|
+
What it does:
|
|
57
|
+
- Asks one yes/no question.
|
|
58
|
+
- Copies .opencode into the current project.
|
|
60
59
|
|
|
61
60
|
Commands:
|
|
62
61
|
--help, -h Show this help message
|
|
@@ -69,230 +68,7 @@ function shouldCopyPath(path) {
|
|
|
69
68
|
return !path.includes(`${sep}node_modules${sep}`) && !path.endsWith(`${sep}node_modules`);
|
|
70
69
|
}
|
|
71
70
|
|
|
72
|
-
function
|
|
73
|
-
const defaults = {
|
|
74
|
-
projectName: 'My Project',
|
|
75
|
-
framework: 'Generic',
|
|
76
|
-
language: 'JavaScript',
|
|
77
|
-
styling: 'Follow existing styles',
|
|
78
|
-
stateManagement: 'None / follow existing patterns',
|
|
79
|
-
testing: 'Follow existing tests',
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const packageJsonPath = join(projectRoot, 'package.json');
|
|
83
|
-
|
|
84
|
-
if (!existsSync(packageJsonPath)) {
|
|
85
|
-
return defaults;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
try {
|
|
89
|
-
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
90
|
-
const deps = { ...(packageJson.dependencies ?? {}), ...(packageJson.devDependencies ?? {}) };
|
|
91
|
-
const has = (name) => Boolean(deps[name]);
|
|
92
|
-
|
|
93
|
-
const framework = has('next')
|
|
94
|
-
? 'Next.js'
|
|
95
|
-
: has('nuxt')
|
|
96
|
-
? 'Nuxt.js'
|
|
97
|
-
: has('@angular/core')
|
|
98
|
-
? 'Angular'
|
|
99
|
-
: has('svelte')
|
|
100
|
-
? 'Svelte'
|
|
101
|
-
: has('vue') || has('vue2') || has('vue3')
|
|
102
|
-
? 'Vue'
|
|
103
|
-
: has('react-native') || has('expo')
|
|
104
|
-
? 'React Native'
|
|
105
|
-
: has('react') || has('react-dom')
|
|
106
|
-
? 'React'
|
|
107
|
-
: has('express')
|
|
108
|
-
? 'Express'
|
|
109
|
-
: has('fastify')
|
|
110
|
-
? 'Fastify'
|
|
111
|
-
: has('nestjs') || has('@nestjs/core')
|
|
112
|
-
? 'NestJS'
|
|
113
|
-
: 'Generic';
|
|
114
|
-
|
|
115
|
-
const language = has('typescript') || existsSync(join(rootDir, 'tsconfig.json'))
|
|
116
|
-
? 'TypeScript'
|
|
117
|
-
: 'JavaScript';
|
|
118
|
-
|
|
119
|
-
const styling = has('tailwindcss')
|
|
120
|
-
? 'Tailwind'
|
|
121
|
-
: has('styled-components')
|
|
122
|
-
? 'Styled Components'
|
|
123
|
-
: has('sass') || has('scss')
|
|
124
|
-
? 'SCSS'
|
|
125
|
-
: has('css-modules')
|
|
126
|
-
? 'CSS Modules'
|
|
127
|
-
: 'Follow existing styles';
|
|
128
|
-
|
|
129
|
-
const stateManagement = has('pinia')
|
|
130
|
-
? 'Pinia'
|
|
131
|
-
: has('zustand')
|
|
132
|
-
? 'Zustand'
|
|
133
|
-
: has('redux') || has('@reduxjs/toolkit')
|
|
134
|
-
? 'Redux'
|
|
135
|
-
: has('mobx')
|
|
136
|
-
? 'MobX'
|
|
137
|
-
: 'None / follow existing patterns';
|
|
138
|
-
|
|
139
|
-
const testing = has('vitest')
|
|
140
|
-
? 'Vitest'
|
|
141
|
-
: has('jest')
|
|
142
|
-
? 'Jest'
|
|
143
|
-
: has('playwright')
|
|
144
|
-
? 'Playwright'
|
|
145
|
-
: has('cypress')
|
|
146
|
-
? 'Cypress'
|
|
147
|
-
: 'Follow existing tests';
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
...defaults,
|
|
151
|
-
projectName: packageJson.name || defaults.projectName,
|
|
152
|
-
framework,
|
|
153
|
-
language,
|
|
154
|
-
styling,
|
|
155
|
-
stateManagement,
|
|
156
|
-
testing,
|
|
157
|
-
};
|
|
158
|
-
} catch {
|
|
159
|
-
return defaults;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
function generateAgentsMd(context) {
|
|
164
|
-
return `# AGENTS.md - ${context.projectName}
|
|
165
|
-
|
|
166
|
-
> Instructions for AI agents working on this project.
|
|
167
|
-
>
|
|
168
|
-
> How to build lives here; what to build comes from feature specs.
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
## Project Stack
|
|
173
|
-
|
|
174
|
-
- Framework: ${context.framework}
|
|
175
|
-
- Language: ${context.language}
|
|
176
|
-
- State Management: ${context.stateManagement}
|
|
177
|
-
- Styling: ${context.styling}
|
|
178
|
-
- Testing: ${context.testing}
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Core Documentation
|
|
183
|
-
|
|
184
|
-
Review these before making architectural or styling decisions:
|
|
185
|
-
|
|
186
|
-
| Document | Purpose | Location |
|
|
187
|
-
|----------|---------|----------|
|
|
188
|
-
| OpenCode README | Kit overview and flow | .opencode/README.md |
|
|
189
|
-
| OpenCode Architecture | Agent lifecycle and gates | .opencode/ARCHITECTURE.md |
|
|
190
|
-
| Agent prompts | Role-specific behavior | .opencode/agents/*.md |
|
|
191
|
-
| Commands | Custom slash commands | .opencode/commands/*.md |
|
|
192
|
-
| Rules | Shared coding standards | .opencode/rules/*.md |
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## OpenCode Delivery Model
|
|
197
|
-
|
|
198
|
-
- Primary agent: @feature-lead
|
|
199
|
-
- First call: @context-gatherer maps the current project state before planning or proof.
|
|
200
|
-
- Other agents are subagents and are called with @ awareness.
|
|
201
|
-
- Security-sensitive work: @security-auditor first, then @penetration-tester for redteam validation when needed.
|
|
202
|
-
|
|
203
|
-
## Compact Context Bundle
|
|
204
|
-
|
|
205
|
-
- proposal.md: why, value, scope
|
|
206
|
-
- goal.md: target outcome, constraints, default choice
|
|
207
|
-
- spec.md: contract, data flow, edge cases, risks
|
|
208
|
-
- task.md: ordered checklist, dependencies, owners
|
|
209
|
-
- important.md: facts, blockers, links, decisions
|
|
210
|
-
|
|
211
|
-
## Archive
|
|
212
|
-
|
|
213
|
-
- Archive completed bundles in .opencode/archive/<feature-slug>/.
|
|
214
|
-
|
|
215
|
-
## Decision Style
|
|
216
|
-
|
|
217
|
-
- Default first: choose a safe default when the downside is small.
|
|
218
|
-
- Ask only when scope, security, or architecture changes materially.
|
|
219
|
-
- Keep handoffs compact and explicit.
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
## Code Conventions
|
|
224
|
-
|
|
225
|
-
### File Naming
|
|
226
|
-
|
|
227
|
-
| Type | Pattern | Example |
|
|
228
|
-
|------|---------|---------|
|
|
229
|
-
| Components | PascalCase.tsx | UserCard.tsx |
|
|
230
|
-
| Pages | PascalCasePage.tsx | LoginPage.tsx |
|
|
231
|
-
| Stores | camelCase.store.ts | auth.store.ts |
|
|
232
|
-
| Hooks/Composables | useCamelCase.ts | useAuth.ts |
|
|
233
|
-
| Types | camelCase.types.ts | user.types.ts |
|
|
234
|
-
| Utils | camelCase.utils.ts | date.utils.ts |
|
|
235
|
-
| API | camelCase.api.ts | auth.api.ts |
|
|
236
|
-
| Tests | *.test.ts or *.spec.ts | auth.test.ts |
|
|
237
|
-
|
|
238
|
-
### Code Style
|
|
239
|
-
|
|
240
|
-
- Indentation: 2 spaces
|
|
241
|
-
- Quotes: single
|
|
242
|
-
- Semicolons: required
|
|
243
|
-
- Line Width: 100
|
|
244
|
-
- Trailing Commas: es5
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Project-Specific Rules
|
|
249
|
-
|
|
250
|
-
- Keep changes aligned to the compact spec bundle.
|
|
251
|
-
- Prefer defaults when a tradeoff is low risk.
|
|
252
|
-
- Surface options only when the decision changes scope, security, or architecture.
|
|
253
|
-
|
|
254
|
-
---
|
|
255
|
-
|
|
256
|
-
## Architecture Patterns
|
|
257
|
-
|
|
258
|
-
### State Management
|
|
259
|
-
|
|
260
|
-
- Describe where state lives.
|
|
261
|
-
- Keep async work inside the owning module.
|
|
262
|
-
- Make loading and error states explicit.
|
|
263
|
-
|
|
264
|
-
### API Layer
|
|
265
|
-
|
|
266
|
-
- Keep request and response shapes explicit.
|
|
267
|
-
- Normalize errors near the boundary.
|
|
268
|
-
- Version breaking contract changes.
|
|
269
|
-
|
|
270
|
-
### Component Structure
|
|
271
|
-
|
|
272
|
-
- Keep presentation and side effects separated.
|
|
273
|
-
- Put validation near the boundary.
|
|
274
|
-
- Make loading and error states visible.
|
|
275
|
-
|
|
276
|
-
---
|
|
277
|
-
|
|
278
|
-
## Testing Standards
|
|
279
|
-
|
|
280
|
-
- Unit tests: pure logic and helper functions.
|
|
281
|
-
- Integration tests: API calls and service boundaries.
|
|
282
|
-
- E2E tests: critical user journeys.
|
|
283
|
-
- Quality gate: verify behavior before release.
|
|
284
|
-
|
|
285
|
-
---
|
|
286
|
-
|
|
287
|
-
## Quick Reference
|
|
288
|
-
|
|
289
|
-
- Validate templates: node bin/validate-templates.js
|
|
290
|
-
- Sync templates: node bin/sync-templates.js
|
|
291
|
-
- Entry point: @feature-lead
|
|
292
|
-
`;
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
async function install() {
|
|
71
|
+
async function install() {
|
|
296
72
|
console.log(banner);
|
|
297
73
|
log.title('OpenCode Agile Agent Installer');
|
|
298
74
|
|
|
@@ -303,9 +79,6 @@ async function install() {
|
|
|
303
79
|
return;
|
|
304
80
|
}
|
|
305
81
|
|
|
306
|
-
const context = detectProjectContext();
|
|
307
|
-
log.info(`Detected project: ${context.projectName} (${context.framework}, ${context.language})`);
|
|
308
|
-
|
|
309
82
|
const source = join(templatesDir, '.opencode');
|
|
310
83
|
const target = join(projectRoot, '.opencode');
|
|
311
84
|
|
|
@@ -324,15 +97,14 @@ async function install() {
|
|
|
324
97
|
}
|
|
325
98
|
|
|
326
99
|
cpSync(source, target, {
|
|
327
|
-
recursive: true,
|
|
328
|
-
overwrite: true,
|
|
329
|
-
filter: shouldCopyPath,
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
log.
|
|
334
|
-
log
|
|
335
|
-
console.log('Start with @feature-lead and review .opencode/README.md for the flow.');
|
|
100
|
+
recursive: true,
|
|
101
|
+
overwrite: true,
|
|
102
|
+
filter: shouldCopyPath,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
log.success('Installed .opencode.');
|
|
106
|
+
log.title('Done');
|
|
107
|
+
console.log('Start with @feature-lead and add or update AGENTS.md manually if your repo needs one.');
|
|
336
108
|
|
|
337
109
|
rl.close();
|
|
338
110
|
}
|
package/bin/sync-templates.js
CHANGED
|
@@ -9,8 +9,6 @@ const __dirname = dirname(__filename);
|
|
|
9
9
|
const rootDir = join(__dirname, '..');
|
|
10
10
|
const sourceOpencode = join(rootDir, '.opencode');
|
|
11
11
|
const targetTemplates = join(rootDir, 'templates');
|
|
12
|
-
const sourceTemplate = join(rootDir, 'AGENTS.template.md');
|
|
13
|
-
const targetTemplate = join(targetTemplates, 'AGENTS.template.md');
|
|
14
12
|
|
|
15
13
|
function skipNodeModules(path) {
|
|
16
14
|
return !path.includes(`${sep}node_modules${sep}`) && !path.endsWith(`${sep}node_modules`);
|
|
@@ -38,8 +36,4 @@ cpSync(sourceOpencode, join(targetTemplates, '.opencode'), {
|
|
|
38
36
|
filter: skipNodeModules,
|
|
39
37
|
});
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
cpSync(sourceTemplate, targetTemplate, { force: true });
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
console.log('Synced .opencode and AGENTS.template.md to templates/');
|
|
39
|
+
console.log('Synced .opencode to templates/');
|
|
@@ -10,13 +10,11 @@ const templatesDir = join(__dirname, '..', 'templates');
|
|
|
10
10
|
|
|
11
11
|
// Required files for templates
|
|
12
12
|
const requiredFiles = [
|
|
13
|
-
'AGENTS.template.md',
|
|
14
13
|
'.opencode/README.md',
|
|
15
14
|
'.opencode/ARCHITECTURE.md',
|
|
16
15
|
'.opencode/archive/README.md',
|
|
17
16
|
'.opencode/config.template.json',
|
|
18
17
|
'.opencode/package.json',
|
|
19
|
-
'.opencode/memory/project.md',
|
|
20
18
|
'.opencode/agents/context-gatherer.md',
|
|
21
19
|
'.opencode/agents/api-designer.md',
|
|
22
20
|
'.opencode/agents/backend-specialist.md',
|
package/package.json
CHANGED
|
@@ -23,16 +23,22 @@
|
|
|
23
23
|
|
|
24
24
|
## Context Bundle
|
|
25
25
|
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
- spec.md: contract, data flow, edge cases, risks
|
|
26
|
+
- brief.md: why, outcome, scope, constraints, default choice
|
|
27
|
+
- spec.md: contract, data flow, edge cases, risks, acceptance criteria
|
|
29
28
|
- task.md: ordered checklist, dependencies, owners
|
|
30
|
-
-
|
|
29
|
+
- notes.md: facts, decisions, blockers, links
|
|
30
|
+
- status.yaml: live execution state
|
|
31
|
+
|
|
32
|
+
- `status.yaml` is the live execution artifact; the markdown files stay as stable planning/reference context.
|
|
33
|
+
- `status.yaml.status` allowed values: `active`, `blocked`, `review`, `done`.
|
|
31
34
|
|
|
32
35
|
## Archive
|
|
33
36
|
|
|
34
37
|
- Archive completed bundles in `.opencode/archive/<feature-slug>/`.
|
|
35
38
|
- Keep archive entries compact and aligned with the approved bundle.
|
|
39
|
+
- Archive only when `status.yaml` is `done`.
|
|
40
|
+
- Archive the full bundle: `brief.md`, `spec.md`, `task.md`, `notes.md`, and final `status.yaml`.
|
|
41
|
+
- Finalize archive only from the main agent handling the request: `feature-lead` or `feature-loop`.
|
|
36
42
|
|
|
37
43
|
## Skill Design
|
|
38
44
|
|
|
@@ -8,7 +8,7 @@ Spec-driven multi-agent system for OpenCode.
|
|
|
8
8
|
|
|
9
9
|
- 25 agents
|
|
10
10
|
- 14 skills
|
|
11
|
-
-
|
|
11
|
+
- 10 commands
|
|
12
12
|
|
|
13
13
|
## Skill Design
|
|
14
14
|
|
|
@@ -28,29 +28,36 @@ Spec-driven multi-agent system for OpenCode.
|
|
|
28
28
|
|
|
29
29
|
- Custom slash commands live in `.opencode/commands/`.
|
|
30
30
|
- Each command file uses Markdown frontmatter plus a prompt body, matching OpenCode's command format.
|
|
31
|
-
- The current command set is `brainstorm`, `create`, `debug`, `plan`, `review`, `status`, and `test`.
|
|
31
|
+
- The current command set is `brainstorm`, `create`, `debug`, `plan`, `progress`, `reframe`, `review`, `rubber-duck`, `status`, and `test`.
|
|
32
32
|
|
|
33
33
|
## Primary Flow
|
|
34
34
|
|
|
35
35
|
1. @feature-lead receives the request.
|
|
36
36
|
2. @context-gatherer maps the current project state.
|
|
37
|
-
3. @project-planner and @system-analyst create the compact bundle:
|
|
37
|
+
3. @project-planner and @system-analyst create the compact bundle: brief.md, spec.md, task.md, notes.md, and status.yaml.
|
|
38
38
|
4. @developer implements the approved spec.
|
|
39
39
|
5. @test-engineer, @security-auditor, @penetration-tester, and @pr-reviewer close the loop.
|
|
40
40
|
6. @feature-lead archives the completed bundle.
|
|
41
41
|
|
|
42
42
|
## Context Bundle
|
|
43
43
|
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
- spec.md: contract, data flow, edge cases, risks
|
|
44
|
+
- Templates live in `.opencode/templates/` for quick bundle creation.
|
|
45
|
+
- brief.md: why, outcome, scope, constraints, default choice
|
|
46
|
+
- spec.md: contract, data flow, edge cases, risks, acceptance criteria
|
|
47
47
|
- task.md: ordered checklist, dependencies, owners
|
|
48
|
-
-
|
|
48
|
+
- notes.md: facts, decisions, blockers, links
|
|
49
|
+
- status.yaml: live execution state
|
|
50
|
+
|
|
51
|
+
- `status.yaml` is the live execution artifact; the markdown files stay as stable planning/reference context.
|
|
52
|
+
- `status.yaml.status` allowed values: `active`, `blocked`, `review`, `done`.
|
|
49
53
|
|
|
50
54
|
## Archive
|
|
51
55
|
|
|
52
56
|
- Completed bundles live in `.opencode/archive/<feature-slug>/`.
|
|
53
57
|
- Keep the archive copy approved, compact, and read-only in practice.
|
|
58
|
+
- Archive only when `status.yaml` is `done`.
|
|
59
|
+
- Archive the full bundle: `brief.md`, `spec.md`, `task.md`, `notes.md`, and final `status.yaml`.
|
|
60
|
+
- Only the main agent (`feature-lead` or `feature-loop`) should finalize the archive.
|
|
54
61
|
|
|
55
62
|
## Agent Groups
|
|
56
63
|
|
|
@@ -76,7 +83,10 @@ Spec-driven multi-agent system for OpenCode.
|
|
|
76
83
|
| create | Build new features, components, or project slices with a spec-driven flow. |
|
|
77
84
|
| debug | Diagnose and fix bugs using a root-cause approach. |
|
|
78
85
|
| plan | Create structured task breakdowns and spec artifacts. |
|
|
86
|
+
| progress | Check current status, visible changes, remaining work, and the next best step. |
|
|
87
|
+
| reframe | Reset the framing when the output is off-target, unclear, or stuck repeating the same mistake. |
|
|
79
88
|
| review | Review code against the spec, standards, and quality gates. |
|
|
89
|
+
| rubber-duck | Think out loud, challenge assumptions, and isolate the real problem before changing anything. |
|
|
80
90
|
| status | Check project health, docs, and operating readiness. |
|
|
81
91
|
| test | Run and generate tests for the codebase. |
|
|
82
92
|
|
|
@@ -1,45 +1,54 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: api-designer
|
|
3
|
-
description: Subagent for contract-first API design and version-aware interfaces.
|
|
4
|
-
mode: subagent
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
---
|
|
2
|
+
name: api-designer
|
|
3
|
+
description: Subagent for contract-first API design and version-aware interfaces.
|
|
4
|
+
mode: subagent
|
|
5
|
+
temperature: 0.2
|
|
6
|
+
top_p: 0.88
|
|
7
|
+
steps: 35
|
|
8
|
+
permission:
|
|
9
|
+
task:
|
|
10
|
+
"*": deny
|
|
11
|
+
"backend-specialist": allow
|
|
12
|
+
"test-engineer": allow
|
|
13
|
+
tools:
|
|
14
|
+
read: true
|
|
15
|
+
grep: true
|
|
16
|
+
glob: true
|
|
17
|
+
bash: true
|
|
18
|
+
write: true
|
|
19
|
+
edit: true
|
|
20
|
+
skills:
|
|
21
|
+
- clean-code
|
|
22
|
+
- api-patterns
|
|
23
|
+
- plan-writing
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# API Designer
|
|
27
|
+
|
|
28
|
+
## Role
|
|
29
|
+
- Define the API shape before code is written.
|
|
30
|
+
- Keep request and response contracts stable.
|
|
31
|
+
|
|
32
|
+
## @ Awareness
|
|
33
|
+
- Call @backend-specialist for implementation details.
|
|
34
|
+
- Call @database-architect when payloads map closely to persistence shape.
|
|
35
|
+
- Call @test-engineer for contract coverage.
|
|
36
|
+
|
|
29
37
|
## Context Bundle
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- spec.md: contract, data flow, edge cases, risks
|
|
38
|
+
- brief.md: why, outcome, scope, constraints, default choice
|
|
39
|
+
- spec.md: contract, data flow, edge cases, risks, acceptance criteria
|
|
33
40
|
- task.md: ordered checklist, dependencies, owners
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
- notes.md: facts, decisions, blockers, links
|
|
42
|
+
- status.yaml: live execution state
|
|
43
|
+
|
|
44
|
+
## Working Loop
|
|
45
|
+
1. Read the assigned context.
|
|
46
|
+
2. Solve the local problem in your domain.
|
|
47
|
+
3. Update `status.yaml` with `in_progress`, `remaining`, `summary`, and `updated_at` as the contract work moves.
|
|
48
|
+
4. Expose tradeoffs and the recommended default.
|
|
49
|
+
5. Hand off to the next owning agent.
|
|
50
|
+
6. Stop when the exit gate is satisfied.
|
|
51
|
+
|
|
52
|
+
## Guardrails
|
|
53
|
+
- Do not write UI code.
|
|
54
|
+
- Treat breaking changes as a deliberate decision.
|
|
@@ -1,46 +1,55 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: backend-specialist
|
|
3
|
-
description: Subagent for APIs, services, business logic, and integration boundaries.
|
|
4
|
-
mode: subagent
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
1
|
+
---
|
|
2
|
+
name: backend-specialist
|
|
3
|
+
description: Subagent for APIs, services, business logic, and integration boundaries.
|
|
4
|
+
mode: subagent
|
|
5
|
+
temperature: 0.25
|
|
6
|
+
top_p: 0.9
|
|
7
|
+
steps: 80
|
|
8
|
+
permission:
|
|
9
|
+
task:
|
|
10
|
+
"*": ask
|
|
11
|
+
"database-architect": allow
|
|
12
|
+
"security-auditor": ask
|
|
13
|
+
tools:
|
|
14
|
+
read: true
|
|
15
|
+
grep: true
|
|
16
|
+
glob: true
|
|
17
|
+
bash: true
|
|
18
|
+
write: true
|
|
19
|
+
edit: true
|
|
20
|
+
skills:
|
|
21
|
+
- clean-code
|
|
22
|
+
- api-patterns
|
|
23
|
+
- code-philosophy
|
|
24
|
+
- testing-patterns
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# Backend Specialist
|
|
28
|
+
|
|
29
|
+
## Role
|
|
30
|
+
- Build explicit APIs and service logic.
|
|
31
|
+
- Validate inputs and keep contracts predictable.
|
|
32
|
+
|
|
33
|
+
## @ Awareness
|
|
34
|
+
- Call @database-architect for schema or migration changes.
|
|
35
|
+
- Call @security-auditor for auth, permissions, or data exposure.
|
|
36
|
+
- Call @test-engineer for contract and integration coverage.
|
|
37
|
+
|
|
30
38
|
## Context Bundle
|
|
31
|
-
-
|
|
32
|
-
-
|
|
33
|
-
- spec.md: contract, data flow, edge cases, risks
|
|
39
|
+
- brief.md: why, outcome, scope, constraints, default choice
|
|
40
|
+
- spec.md: contract, data flow, edge cases, risks, acceptance criteria
|
|
34
41
|
- task.md: ordered checklist, dependencies, owners
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
- notes.md: facts, decisions, blockers, links
|
|
43
|
+
- status.yaml: live execution state
|
|
44
|
+
|
|
45
|
+
## Working Loop
|
|
46
|
+
1. Read the assigned context.
|
|
47
|
+
2. Solve the local problem in your domain.
|
|
48
|
+
3. Update `status.yaml` with `in_progress`, `remaining`, `summary`, and `updated_at` as backend work changes.
|
|
49
|
+
4. Expose tradeoffs and the recommended default.
|
|
50
|
+
5. Hand off to the next owning agent.
|
|
51
|
+
6. Stop when the exit gate is satisfied.
|
|
52
|
+
|
|
53
|
+
## Guardrails
|
|
54
|
+
- Do not write UI code.
|
|
55
|
+
- Keep error handling close to the boundary.
|