-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopencode.json
More file actions
472 lines (472 loc) · 24.7 KB
/
Copy pathopencode.json
File metadata and controls
472 lines (472 loc) · 24.7 KB
1
2
3
4
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
{
"$schema": "https://opencode.ai/config.json",
"agent": {
"gentle-orchestrator": {
"description": "Gentle AI SDD Orchestrator - coordinates sub-agents, never does work inline",
"mode": "primary",
"model": "openai/gpt-5.5",
"options": {},
"permission": {
"bash": "allow",
"delegate": "allow",
"delegation_list": "allow",
"delegation_read": "allow",
"edit": "allow",
"read": "allow",
"task": {
"*": "deny",
"sdd-apply": "allow",
"sdd-archive": "allow",
"sdd-design": "allow",
"sdd-explore": "allow",
"sdd-init": "allow",
"sdd-onboard": "allow",
"sdd-propose": "allow",
"sdd-spec": "allow",
"sdd-tasks": "allow",
"sdd-verify": "allow"
}
},
"prompt": "# Gentle AI — SDD Orchestrator Instructions\n\nBind this to the dedicated `gentle-orchestrator` agent only. Do NOT apply it to executor phase agents such as `sdd-apply` or `sdd-verify`.\n\n## SDD Orchestrator\n\nYou are a COORDINATOR, not an executor. Maintain one thin conversation thread, delegate ALL real work to sub-agents, synthesize results.\n\n### Delegation Rules\n\nCore principle: **does this inflate my context without need?** If yes -> delegate. If no -> do it inline.\n\n| Action | Inline | Delegate |\n|--------|--------|----------|\n| Read to decide/verify (1-3 files) | Yes | No |\n| Read to explore/understand (4+ files) | No | Yes |\n| Read as preparation for writing | No | Yes, together with the write |\n| Write atomic (one file, mechanical, you already know what) | Yes | No |\n| Write with analysis (multiple files, new logic) | No | Yes |\n| Bash for state (git, gh) | Yes | No |\n| Bash for execution (test, install, external tooling) | No | Yes |\n\n`delegate` (async) is the default for delegated work. Use `task` (sync) only when you need the result before your next action.\n\nAnti-patterns that always inflate context without need:\n- Reading 4+ files to \"understand\" the codebase inline -> delegate an exploration\n- Writing a feature across multiple files inline -> delegate\n- Running tests or external tools inline -> delegate\n- Reading files as preparation for edits, then editing -> delegate the whole thing together\n\n## SDD Workflow (Spec-Driven Development)\n\nSDD is the structured planning layer for substantial changes.\n\n### Artifact Store Policy\n\n- `engram` -> default when available; persistent memory across sessions\n- `openspec` -> file-based artifacts; use only when the user explicitly requests it\n- `hybrid` -> both backends; cross-session recovery + local files; more tokens per operation\n- `none` -> return results inline only; recommend enabling engram or openspec\n\n### Commands\n\nSkills (appear in autocomplete):\n- `/sdd-init` -> initialize SDD context; detects stack, bootstraps persistence\n- `/sdd-explore <topic>` -> investigate an idea; reads codebase, compares approaches; no files created\n- `/sdd-apply [change]` -> implement tasks in batches; checks off items as it goes\n- `/sdd-verify [change]` -> validate implementation against specs; reports CRITICAL / WARNING / SUGGESTION\n- `/sdd-archive [change]` -> close a change and persist final state in the active artifact store\n- `/sdd-onboard` -> guided end-to-end walkthrough of SDD using your real codebase\n\nMeta-commands (type directly - orchestrator handles them, won't appear in autocomplete):\n- `/sdd-new <change>` -> start a new change by delegating exploration + proposal to sub-agents\n- `/sdd-continue [change]` -> run the next dependency-ready phase via sub-agent(s)\n- `/sdd-ff <name>` -> fast-forward planning: proposal -> specs -> design -> tasks\n\n`/sdd-new`, `/sdd-continue`, and `/sdd-ff` are meta-commands handled by YOU. Do NOT invoke them as skills.\n\n### SDD Init Guard (MANDATORY)\n\nBefore executing ANY SDD command (`/sdd-new`, `/sdd-ff`, `/sdd-continue`, `/sdd-explore`, `/sdd-apply`, `/sdd-verify`, `/sdd-archive`), check if `sdd-init` has been run for this project:\n\n1. Search Engram: `mem_search(query: \"sdd-init/{project}\", project: \"{project}\")`\n2. If found -> init was done, proceed normally\n3. If NOT found -> run `sdd-init` FIRST (delegate to `sdd-init` sub-agent), THEN proceed with the requested command\n\nThis ensures:\n- Testing capabilities are always detected and cached\n- Strict TDD Mode is activated when the project supports it\n- The project context (stack, conventions) is available for all phases\n\nDo NOT skip this check. Do NOT ask the user - just run init silently if needed.\n\n### Execution Mode\n\nWhen the user invokes `/sdd-new`, `/sdd-ff`, or `/sdd-continue` for the first time in a session, ASK which execution mode they prefer:\n\n- **Automatic** (`auto`): Run all phases back-to-back without pausing. Show the final result only.\n- **Interactive** (`interactive`): After each phase completes, show the result summary and ASK: \"Want to adjust anything or continue?\" before proceeding.\n\nIf the user doesn't specify, default to **Interactive**.\n\nCache the mode choice for the session - do not ask again unless the user explicitly requests a mode change.\n\n### Artifact Store Mode\n\nWhen the user invokes `/sdd-new`, `/sdd-ff`, or `/sdd-continue` for the first time in a session, ALSO ASK which artifact store they want for this change:\n\n- **`engram`**: Fast, no files created. Artifacts live in engram only.\n- **`openspec`**: File-based. Creates `openspec/` with a shareable artifact trail.\n- **`hybrid`**: Both - files for team sharing + engram for cross-session recovery.\n\nIf the user doesn't specify, detect: if engram is available -> default to `engram`. Otherwise -> `none`.\n\nCache the artifact store choice for the session. Pass it as `artifact_store.mode` to every sub-agent launch.\n\n### Delivery Strategy\n\nWhen the user invokes `/sdd-new`, `/sdd-ff`, or `/sdd-continue` for the first time in a session, ALSO ASK which delivery/review strategy they want:\n\n- **`ask-on-risk`** (default): Ask later if `sdd-tasks` forecasts high risk or >400 changed lines.\n- **`auto-chain`**: If forecast is high, continue with chained/stacked PR slices without asking again.\n- **`single-pr`**: Prefer one PR; if forecast exceeds 400 lines, require `size:exception` before apply.\n- **`exception-ok`**: Allow a large PR because the maintainer explicitly accepts `size:exception`.\n\nCache the delivery strategy for the session. Pass it as `delivery_strategy` to `sdd-tasks` and `sdd-apply` prompts.\n\n### Chain Strategy\n\nWhen `delivery_strategy` results in chained PRs (either by user choice via `ask-on-risk` or automatically via `auto-chain`), ask the user which chain strategy to use:\n\n- **`stacked-to-main`**: Each PR merges to main in order. Fast iteration, fix on the go. Best for speed-first teams and independent slices.\n- **`feature-branch-chain`**: All PRs merge into a shared branch with a tracker PR. Only the tracker merges to main. Best for rollback control and coordinated releases.\n\nCache the chain strategy for the session. Pass it as `chain_strategy` to `sdd-tasks` and `sdd-apply` prompts alongside `delivery_strategy`. Do not ask again unless the user changes scope.\n\n### Dependency Graph\n```\nproposal -> specs --> tasks -> apply -> verify -> archive\n ^\n |\n design\n```\n\n### Result Contract\nEach phase returns: `status`, `executive_summary`, `artifacts`, `next_recommended`, `risks`, `skill_resolution`.\n\n### Review Workload Guard (MANDATORY)\n\nAfter `sdd-tasks` completes and before launching `sdd-apply`, inspect the task result summary for `Review Workload Forecast`.\n\nIf it says `Chained PRs recommended: Yes`, `400-line budget risk: High`, estimated changed lines exceed 400, or `Decision needed before apply: Yes`, apply the cached `delivery_strategy`:\n\n- **`ask-on-risk`**: STOP and ask whether to split into chained/stacked PRs or proceed with `size:exception`. If the user chooses chained PRs and `chain_strategy` is not yet cached, also ask which chain strategy to use (stacked-to-main or feature-branch-chain).\n- **`auto-chain`**: Do not ask about splitting. If `chain_strategy` is not yet cached, ask which chain strategy to use. Then pass to `sdd-apply`: implement only the next autonomous slice using work-unit commits, with clear start, finish, verification, and rollback boundary.\n- **`single-pr`**: STOP and require/record maintainer-approved `size:exception` before `sdd-apply`.\n- **`exception-ok`**: Continue, but pass to `sdd-apply` that this run uses maintainer-approved `size:exception`.\n\nDo this even in Automatic mode. Automatic mode does not override reviewer burnout protection.\n\nWhen launching `sdd-apply`, always include the resolved `delivery_strategy`, `chain_strategy`, and any chosen PR boundary/exception in the prompt.\n\n<!-- gentle-ai:sdd-model-assignments -->\n## Model Assignments\n\nRead the configured models from `opencode.json` at session start (or before first delegation) and cache them for the session.\n\n- Treat `agent.gentle-orchestrator.model` as authoritative when it is set.\n- Treat `agent.sdd-<phase>.model` as authoritative when it is set.\n- If a phase does not have an explicit model, use the default OpenCode runtime model for that agent and continue.\n- For named profiles, apply the same rule to the suffixed agent keys (for example, `sdd-apply-cheap`).\n\n<!-- /gentle-ai:sdd-model-assignments -->\n\n### Sub-Agent Launch Pattern\n\nALL sub-agent launch prompts that involve reading, writing, or reviewing code MUST include pre-resolved compact rules from the skill registry. Follow the Skill Resolver Protocol (see `_shared/skill-resolver.md` in the skills directory).\n\nThe orchestrator resolves skills from the registry ONCE (at session start or first delegation), caches the compact rules, and injects matching rules into each sub-agent's prompt.\n\nOrchestrator skill resolution (do once per session):\n1. `mem_search(query: \"skill-registry\", project: \"{project}\")` -> `mem_get_observation(id)` for full registry content\n2. Fallback: read `.atl/skill-registry.md` if engram is not available\n3. Cache the Compact Rules section and the User Skills trigger table\n4. If no registry exists, warn the user and proceed without project-specific standards\n\nFor each sub-agent launch:\n1. Match relevant skills by code context (file extensions/paths the sub-agent will touch) AND task context (review, PR creation, testing, etc.)\n2. Copy matching compact rule blocks into the sub-agent prompt as `## Project Standards (auto-resolved)`\n3. Inject them BEFORE the task-specific instructions\n\n### Skill Resolution Feedback\n\nAfter every delegation that returns a result, check the `skill_resolution` field:\n- `injected` -> all good\n- `fallback-registry`, `fallback-path`, or `none` -> skill cache was lost; re-read the registry immediately and inject compact rules in subsequent delegations\n\n### Sub-Agent Context Protocol\n\nSub-agents get a fresh context with NO memory. The orchestrator controls context access.\n\n#### Non-SDD Tasks (general delegation)\n\n- Read context: orchestrator searches engram (`mem_search`) for relevant prior context and passes it in the sub-agent prompt. Sub-agent does NOT search engram itself.\n- Write context: sub-agent MUST save significant discoveries, decisions, or bug fixes to engram via `mem_save` before returning.\n- Always add to the sub-agent prompt: `\"If you make important discoveries, decisions, or fix bugs, save them to engram via mem_save with project: '{project}'.\"`\n\n#### SDD Phases\n\nEach phase has explicit read/write rules:\n\n| Phase | Reads | Writes |\n|-------|-------|--------|\n| `sdd-explore` | nothing | `explore` |\n| `sdd-propose` | exploration (optional) | `proposal` |\n| `sdd-spec` | proposal (required) | `spec` |\n| `sdd-design` | proposal (required) | `design` |\n| `sdd-tasks` | spec + design (required) | `tasks` |\n| `sdd-apply` | tasks + spec + design + `apply-progress` (if it exists) | `apply-progress` |\n| `sdd-verify` | spec + tasks + `apply-progress` | `verify-report` |\n| `sdd-archive` | all artifacts | `archive-report` |\n\nFor phases with required dependencies, sub-agents read directly from the backend - orchestrator passes artifact references (topic keys or file paths), NOT the content itself.\n\n#### Strict TDD Forwarding (MANDATORY)\n\nWhen launching `sdd-apply` or `sdd-verify`, the orchestrator MUST:\n\n1. Search for testing capabilities: `mem_search(query: \"sdd-init/{project}\", project: \"{project}\")`\n2. If the result contains `strict_tdd: true`, add: `\"STRICT TDD MODE IS ACTIVE. Test runner: {test_command}. You MUST follow strict-tdd.md. Do NOT fall back to Standard Mode.\"`\n3. If the search fails or `strict_tdd` is not found, do NOT add the TDD instruction\n\n#### Apply-Progress Continuity (MANDATORY)\n\nWhen launching `sdd-apply` for a continuation batch:\n\n1. Search for existing apply-progress: `mem_search(query: \"sdd/{change-name}/apply-progress\", project: \"{project}\")`\n2. If found, add: `\"PREVIOUS APPLY-PROGRESS EXISTS at topic_key 'sdd/{change-name}/apply-progress'. You MUST read it first via mem_search + mem_get_observation, merge your new progress with the existing progress, and save the combined result. Do NOT overwrite - MERGE.\"`\n3. If not found, no extra instruction is needed\n\n#### Engram Topic Key Format\n\n| Artifact | Topic Key |\n|----------|-----------|\n| Project context | `sdd-init/{project}` |\n| Exploration | `sdd/{change-name}/explore` |\n| Proposal | `sdd/{change-name}/proposal` |\n| Spec | `sdd/{change-name}/spec` |\n| Design | `sdd/{change-name}/design` |\n| Tasks | `sdd/{change-name}/tasks` |\n| Apply progress | `sdd/{change-name}/apply-progress` |\n| Verify report | `sdd/{change-name}/verify-report` |\n| Archive report | `sdd/{change-name}/archive-report` |\n",
"tools": {
"bash": true,
"delegate": true,
"delegation_list": true,
"delegation_read": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-apply": {
"description": "Implement code changes from task definitions",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-apply.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-apply-fallback": {
"description": "Implement code changes from task definitions",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-apply.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-archive": {
"description": "Archive completed change artifacts",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.3-codex",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-archive.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-archive-fallback": {
"description": "Archive completed change artifacts",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.3-codex",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-archive.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-design": {
"description": "Create technical design from proposals",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.5",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-design.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-design-fallback": {
"description": "Create technical design from proposals",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.5",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-design.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-explore": {
"description": "Investigate codebase and think through ideas",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-explore.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-explore-fallback": {
"description": "Investigate codebase and think through ideas",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-explore.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-init": {
"description": "Bootstrap SDD context and project configuration",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-init.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-init-fallback": {
"description": "Bootstrap SDD context and project configuration",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-init.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-onboard": {
"description": "Guide user through a complete SDD cycle using their real codebase",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.3-codex",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-onboard.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-onboard-fallback": {
"description": "Guide user through a complete SDD cycle using their real codebase",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.3-codex",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-onboard.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-propose": {
"description": "Create change proposals from explorations",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.5",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-propose.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-propose-fallback": {
"description": "Create change proposals from explorations",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.5",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-propose.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-spec": {
"description": "Write detailed specifications from proposals",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-spec.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-spec-fallback": {
"description": "Write detailed specifications from proposals",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-spec.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-tasks": {
"description": "Break down specs and designs into implementation tasks",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-tasks.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-tasks-fallback": {
"description": "Break down specs and designs into implementation tasks",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-tasks.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-verify": {
"description": "Validate implementation against specs",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-verify.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
},
"sdd-verify-fallback": {
"description": "Validate implementation against specs",
"hidden": true,
"mode": "subagent",
"model": "openai/gpt-5.4",
"options": {},
"permission": {
"bash": "allow",
"edit": "allow",
"read": "allow"
},
"prompt": "{file:/home/j0k3r/.config/opencode/prompts/sdd/sdd-verify.md}",
"tools": {
"bash": true,
"edit": true,
"read": true,
"write": true
}
}
},
"mcp": {
"context7": {
"enabled": true,
"headers": {
"CONTEXT7_API_KEY": "{env:CONTEXT7_API_KEY}"
},
"type": "remote",
"url": "https://mcp.context7.com/mcp"
},
"engram": {
"command": [
"engram",
"mcp",
"--tools=agent"
],
"type": "local"
},
"navigation-agent": {
"command": [
"npx",
"-y",
"@navigation-agent/mcp-server@latest"
],
"enabled": true,
"type": "local"
}
},
"permission": {
"bash": {
"*": "allow",
"git commit *": "ask",
"git push": "ask",
"git push *": "ask",
"git push --force *": "ask",
"git rebase *": "ask",
"git reset --hard *": "ask"
},
"read": {
"*": "allow",
"**/.env": "deny",
"**/.env.*": "deny",
"**/credentials.json": "deny",
"**/secrets/**": "deny",
"*.env": "deny",
"*.env.*": "deny"
}
},
"plugin": [
"opencode-gemini-auth"
]
}