wg-setup-routes

wg setup routes use wrong model split: evaluator/assigner should be haiku (cheap), agent should be opus (premium)

Metadata

Statusdone
Assignedagent-686
Agent identityf51439356729d112a6c404803d88015d5b44832c6c584c62b96732b63c2b0c7e
Created2026-04-27T14:05:18.425511758+00:00
Started2026-04-27T14:05:57.859453357+00:00
Completed2026-04-27T14:43:06.235047021+00:00
Tagseval-scheduled
Eval score0.90
└ blocking impact0.90
└ completeness0.95
└ coordination overhead0.90
└ correctness0.95
└ downstream usability0.80
└ efficiency0.85
└ intent fidelity0.88
└ style adherence0.95

Description

Description

wg setup --route claude-cli --dry-run produces this config:

[models.default]   model = 'claude:sonnet'
[models.evaluator] model = 'claude:sonnet'   # 10x cost vs haiku, no quality gain (verified)
[models.assigner]  model = 'claude:sonnet'   # same
[agent]/[dispatcher] model = 'claude:sonnet' # workers should run opus for real implementation

This is the OPPOSITE of optimal:

  • Eval / assign / FLIP work is mostly summarization + scoring — haiku is sufficient, sonnet adds ~10x cost for nearly identical scores (we verified: 0.82 vs 0.84 for same task, same red-flag dimensions)
  • Worker agents do the actual implementation — opus is the right default for code quality

User's mental model (verbatim): 'haiku is fine for all this stuff... we should default to that if possible. for local models where cost is much less of an issue, we can run the same model for everything'.

Required defaults per route

Routeagent.modelevaluatorassignertiers
claude-cliclaude:opusclaude:haikuclaude:haikuhaiku/sonnet/opus
openrouter(premium opus equivalent)(cheapest equivalent)(cheapest)per-provider 3-tier
codex-cli(codex premium)(codex cheap)(codex cheap)per-provider 3-tier
locallocal:local:local:(same model everywhere — cost ≈ 0)
nex-customuser-supplieduser-supplied OR sameuser-supplied OR sameuser-supplied

For local and nex-custom routes specifically: when the endpoint is local (cost ≈ 0), default to using the SAME model for all roles. No need for tier split.

For paid routes (claude-cli, openrouter, codex-cli): cheap/standard/premium tiers PLUS appropriate role-to-tier mapping.

Files likely to touch

  • src/config/defaults.rs (or wherever route defaults live — probably src/commands/setup.rs since the routes were added there)
  • The config_for_route() function (or equivalent) that produces the per-route Config

Out of scope

  • Changing the tier scheme itself (haiku/sonnet/opus naming stays)
  • Per-task model overrides (already work)

Validation

  • Failing tests first:
    • test_route_claude_cli_evaluator_is_haiku — config_for_route(ClaudeCli).models.evaluator.model == 'claude:haiku'
    • test_route_claude_cli_assigner_is_haiku
    • test_route_claude_cli_agent_is_opus
    • test_route_local_uses_same_model_everywhere — given a local route with model X, all role-models point at X
  • Implementation makes tests pass
  • cargo build + cargo test pass with no regressions
  • Manual smoke:
    • wg setup --route claude-cli --dry-run --yes produces config with evaluator=haiku, assigner=haiku, agent.model=opus
    • wg setup --route local --model qwen3-coder --url http://lambda01... --dry-run --yes produces config with all role-models = local:qwen3-coder

Depends on

Required by

Log