Files
sp80/.opencode/get-shit-done/references/model-profiles.md
2026-03-13 15:46:10 +08:00

3.2 KiB

Model Profiles

Model profiles control which OpenCode model each GSD agent uses. This allows balancing quality vs token spend.

Profile Definitions

Agent quality balanced budget
gsd-planner opus opus sonnet
gsd-roadmapper opus sonnet sonnet
gsd-executor opus sonnet sonnet
gsd-phase-researcher opus sonnet haiku
gsd-project-researcher opus sonnet haiku
gsd-research-synthesizer sonnet sonnet haiku
gsd-debugger opus sonnet sonnet
gsd-codebase-mapper sonnet haiku haiku
gsd-verifier sonnet sonnet haiku
gsd-plan-checker sonnet sonnet haiku
gsd-integration-checker sonnet sonnet haiku
gsd-nyquist-auditor sonnet sonnet haiku

Profile Philosophy

quality - Maximum reasoning power

  • Opus for all decision-making agents
  • Sonnet for read-only verification
  • Use when: quota available, critical architecture work

balanced (default) - Smart allocation

  • Opus only for planning (where architecture decisions happen)
  • Sonnet for execution and research (follows explicit instructions)
  • Sonnet for verification (needs reasoning, not just pattern matching)
  • Use when: normal development, good balance of quality and cost

budget - Minimal Opus usage

  • Sonnet for anything that writes code
  • Haiku for research and verification
  • Use when: conserving quota, high-volume work, less critical phases

Resolution Logic

Orchestrators resolve model before spawning:

1. read .planning/config.json
2. Check model_overrides for agent-specific override
3. If no override, look up agent in profile table
4. Pass model parameter to task call

Per-Agent Overrides

Override specific agents without changing the entire profile:

{
  "model_profile": "balanced",
  "model_overrides": {
    "gsd-executor": "opus",
    "gsd-planner": "haiku"
  }
}

Overrides take precedence over the profile. Valid values: opus, sonnet, haiku.

Switching Profiles

Runtime: /gsd-set-profile <profile>

Per-project default: Set in .planning/config.json:

{
  "model_profile": "balanced"
}

Design Rationale

Why Opus for gsd-planner? Planning involves architecture decisions, goal decomposition, and task design. This is where model quality has the highest impact.

Why Sonnet for gsd-executor? Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.

Why Sonnet (not Haiku) for verifiers in balanced? Verification requires goal-backward reasoning - checking if code delivers what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.

Why Haiku for gsd-codebase-mapper? read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.

Why inherit instead of passing opus directly? OpenCode's "opus" alias maps to a specific model version. Organizations may block older opus versions while allowing newer ones. GSD returns "inherit" for opus-tier agents, causing them to use whatever opus version the user has configured in their session. This avoids version conflicts and silent fallbacks to Sonnet.