{ "$schema": "https://opencode.ai/config.json", "default_agent": "stella-architect", "permission": { "*": "allow", "webfetch": "deny", "edit": "ask", "bash": "ask", "external_directory": { "*": "ask", "../wt-*": "allow", "..\\wt-*": "allow" } }, "agent": { "stella-architect": { "mode": "primary", "description": "Reads docs/implplan sprints, writes SEP, spawns lane workers, runs reviewer, enforces determinism/offline + sprint log updates.", "model": "github-copilot/claude-opus-4.6", "temperature": 0.1, "max_steps": 20, "tools": { "write": false, "edit": false, "bash": true }, "permission": { "edit": "deny", "webfetch": "deny", "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "git log*": "allow", "git show*": "allow", "git branch*": "allow", "git checkout*": "ask", "git switch*": "ask", "git worktree*": "ask", "dotnet build*": "allow", "dotnet test*": "allow", "npm test*": "ask", "npx playwright*": "ask" }, "task": { "*": "deny", "stella-worker-*": "allow", "stella-reviewer": "allow" } } }, "stella-reviewer": { "mode": "subagent", "description": "Read-only gatekeeper: verifies sprint completion criteria, determinism/offline tests, and prevents architectural drift.", "model": "github-copilot/claude-opus-4.6", "temperature": 0.1, "max_steps": 15, "tools": { "write": false, "edit": false, "bash": true }, "permission": { "edit": "deny", "webfetch": "deny", "bash": { "*": "ask", "git diff*": "allow", "git status*": "allow", "dotnet test*": "allow" }, "task": { "*": "deny" } } }, "stella-worker-libraries": { "mode": "subagent", "description": "Codex worker for src/__Libraries/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/__Libraries/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-advisoryai": { "mode": "subagent", "description": "Codex worker for src/AdvisoryAI/** (+ src/Zastava/**) and docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/AdvisoryAI/**": "allow", "src/Zastava/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-attestor": { "mode": "subagent", "description": "Codex worker for src/Attestor/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/Attestor/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-policy": { "mode": "subagent", "description": "Codex worker for src/Policy/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/Policy/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-scanner": { "mode": "subagent", "description": "Codex worker for src/Scanner/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/Scanner/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-reachgraph": { "mode": "subagent", "description": "Codex worker for src/ReachGraph/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/ReachGraph/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-orchestrator": { "mode": "subagent", "description": "Codex worker for src/Orchestrator/** and src/ReleaseOrchestrator/** and related docs/sprint log updates.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/Orchestrator/**": "allow", "src/ReleaseOrchestrator/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow" } } }, "stella-worker-fe": { "mode": "subagent", "description": "Codex worker for src/Web/** (frontend) and related docs/sprint log updates. Use Playwright for UI testable features.", "model": "openai/gpt-5.3-codex", "temperature": 0.0, "max_steps": 35, "permission": { "webfetch": "deny", "task": { "*": "deny" }, "edit": { "*": "deny", "src/Web/**": "allow", "docs/implplan/**": "allow", "docs/modules/**": "allow", "docs/process/**": "allow" }, "bash": { "*": "ask", "git status*": "allow", "git diff*": "allow", "dotnet build*": "allow", "dotnet test*": "allow", "npm test*": "ask", "npx playwright*": "ask" } } } }, "command": { "sprint": { "description": "Architect: read one sprint file, produce SEP, spawn lane worker, then run reviewer.", "agent": "stella-architect", "template": "You are the Stella Architect.\nRead the sprint file at @docs/implplan/$ARGUMENTS.\n\n1) Produce a Sprint Execution Plan (SEP):\n - files likely to change\n - T1/T2/T3 steps mapped to concrete edits\n - deterministic/offline test plan + exact commands\n - explicit non-goals\n\n2) Choose exactly one worker lane based on 'Working directory' and/or module:\n - src/__Libraries/** => @stella-worker-libraries\n - src/AdvisoryAI/** or src/Zastava/** => @stella-worker-advisoryai\n - src/Attestor/** => @stella-worker-attestor\n - src/Policy/** => @stella-worker-policy\n - src/Scanner/** => @stella-worker-scanner\n - src/ReachGraph/** => @stella-worker-reachgraph\n - src/Orchestrator/** or src/ReleaseOrchestrator/** => @stella-worker-orchestrator\n - src/Web/** or FE => @stella-worker-fe\n\n3) Spawn the worker as a subagent to implement the sprint strictly against the SEP.\n Requirements for the worker:\n - Update sprint Execution Log (START + FINISH entries) in the sprint file.\n - Add deterministic unit/integration tests; no external network calls in tests.\n - Update docs/modules/** if the sprint requires it.\n\n4) After the worker finishes, spawn @stella-reviewer to gate the diff vs completion criteria.\n5) If reviewer blocks, delegate fixes back to the same worker lane." }, "sprints": { "description": "Architect: run multiple sprints in parallel (only if lanes don’t overlap).", "agent": "stella-architect", "template": "You are the Stella Architect.\nYou are given multiple sprint filenames in $ARGUMENTS (space-separated).\n\nProcess each sprint:\nA) Read @docs/implplan/ and generate an SEP.\nB) Determine its lane (libraries/advisoryai/attestor/policy/scanner/reachgraph/orchestrator/fe).\n\nConcurrency rules:\n- Never run two sprints at the same time in the same lane.\n- If two sprints map to the same lane, queue them (start the next only after the previous finishes).\n- If lanes are distinct, you may spawn multiple workers concurrently via Task tool.\n\nFor each sprint you start, spawn the matching @stella-worker-* subagent with that sprint + SEP.\nAfter each worker completes, spawn @stella-reviewer for that sprint diff.\n\nOutput a live table of: Sprint -> Lane -> Worker -> Status (Queued/Running/Review/Blocked/Done)." } } }