Skip to main content
GSD Core assigns a model tier to each of its specialized agents based on the active model profile. Rather than running every agent on the most expensive model, profiles let you allocate compute intentionally — Opus for the agents where reasoning quality drives the outcome, Sonnet for workhorses, and Haiku for fast scanners and mappers. Dynamic routing and effort control let you push that further: start cheap and escalate only when an agent fails its quality gate.

Built-in profiles

Set model_profile in config.json or switch profiles instantly with /gsd-config --profile <name>.
Uses Opus for all decision-making agents and Sonnet for verification. Best for quota-rich environments and critical architecture work where output quality is the top priority.

Agent tier assignments

The table below shows how the five most-used agents resolve under each profile. The tier names (Opus, Sonnet, Haiku) are resolved to runtime-native model IDs when runtime is set in config.json.
The full catalog covers all 33 shipped agents with explicit per-profile tier assignments. These five represent the most frequently invoked agents during a standard phase lifecycle.

Per-agent overrides

Override individual agents without changing the profile for everything else. This is useful when you want one agent to use a more powerful model than the profile assigns.
Valid override values: opus, sonnet, haiku, inherit, or a fully-qualified model ID such as "openai/o3" or "google/gemini-2.5-pro".

Per-phase-type model assignment

The models block lets you tune at the phase level without knowing individual agent names. Specify a tier for each phase type and GSD applies it to all agents in that category.
Resolution precedence (highest to lowest):
  1. model_overrides[<agent>] — per-agent exception, wins over everything
  2. dynamic_routing.tier_models[<tier>] — when dynamic routing is enabled
  3. models[<phase_type>] — coarse phase-level tier
  4. model_profile — global profile tier per agent
  5. Runtime default

Dynamic routing with failure-tier escalation

Dynamic routing lets agents start on a cheaper tier and escalate automatically when the orchestrator detects a soft failure (plan-check FLAG, verification inconclusive). Enable it with dynamic_routing.enabled: true.
Each agent is pre-assigned to one of three default tiers based on its role:

Effort control

Control the reasoning effort of each agent invocation independently of model tier. The universal effort ladder is:
Effort is rendered per-runtime: output_config.effort for Claude, model_reasoning_effort for Codex. Cross-provider clamping applies: max is Anthropic-only and clamps to xhigh on Codex; minimal is Codex-only and clamps to low on Claude.
Effort precedence (highest to lowest):
  1. Invocation override (e.g. --effort flag on resolve-execution)
  2. effort.agent_overrides[<agent-id>]
  3. effort.routing_tier_defaults[<light|standard|heavy>]
  4. effort.default
  5. "high" (universal default)

Model policy presets

Model policy presets let you pick a provider family and a budget level, and have GSD materialize the concrete (opus, sonnet, haiku) tier mappings for you — no need to spell out every model ID by hand. Use a preset when you want a known-good mapping for a given vendor; fall back to generic when you want full control over individual model IDs.

Anthropic presets

GSD ships two Anthropic-family presets so you can decide whether to stay on the standard Opus 4.8 lineup or opt into Claude Fable 5 for top-tier routing. Both presets share the Sonnet 4.6 and Haiku 4.5 fallback tiers; they only differ at the high end. Use anthropic-fable when you want Claude Fable 5 — an Opus-tier model with a 1M-token context window, 128K max output, and adaptive thinking at the xhigh effort level — to handle high-budget Opus and Sonnet routing. The medium and low budgets fall back to the same Opus 4.8 / Sonnet 4.6 / Haiku 4.5 mix as the standard anthropic preset, so opting in only affects the top tier.
Claude Fable 5 is available through Anthropic direct, Anthropic on Vertex AI, Amazon Bedrock, and OpenRouter. Make sure your selected runtime can reach at least one of those providers before switching to the anthropic-fable preset.
If you set context_window: 1000000 to use Claude Fable 5’s full 1M-token window, GSD also enables adaptive context enrichment (deeper SUMMARY.md and anti-pattern reads).

Profile philosophy