Skip to content

Commit dee3287

Browse files
cailmdaleyclaude
andcommitted
feat: claude-opus defaults to xhigh effort everywhere
opus's registry default_effort low → xhigh, so every dispatch that selects opus without a declared effort (kanban, shuttle-ctl, capture) runs at xhigh. Single source of truth: share/agents.json; Go embed regenerated; tests updated. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bu7hkSqWLKjpnBkQCBNaGr
1 parent b0633a9 commit dee3287

5 files changed

Lines changed: 11 additions & 9 deletions

File tree

pkg/schema/agents_embedded.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ var embeddedAgentJSON = []byte(`
2525
"model": "opus",
2626
"extra_flags": "--permission-mode auto",
2727
"effort_levels": ["low", "medium", "high", "xhigh", "max"],
28-
"default_effort": "low",
28+
"default_effort": "xhigh",
2929
"chrome_capable": true,
3030
"cost_class": "premium",
3131
"aliases": [],

pkg/schema/axes_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ func TestResolve_BareClaudeUsesRegistryDefaultEffort(t *testing.T) {
2626
if base.ID != "claude-opus" {
2727
t.Fatalf("base = %q, want claude-opus", base.ID)
2828
}
29-
if eff.Effort != "low" || eff.Chrome {
30-
t.Fatalf("expected effort=low and chrome=false, got %+v", eff)
29+
// claude-opus's registry default_effort is xhigh.
30+
if eff.Effort != "xhigh" || eff.Chrome {
31+
t.Fatalf("expected effort=xhigh and chrome=false, got %+v", eff)
3132
}
3233
}
3334

share/agents.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"model": "opus",
2020
"extra_flags": "--permission-mode auto",
2121
"effort_levels": ["low", "medium", "high", "xhigh", "max"],
22-
"default_effort": "low",
22+
"default_effort": "xhigh",
2323
"chrome_capable": true,
2424
"cost_class": "premium",
2525
"aliases": [],

test/shuttle/dispatcher_test.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,9 +584,10 @@ defmodule Shuttle.DispatcherTest do
584584
end
585585

586586
test "claude with no declared effort renders the registry default" do
587+
# claude-opus's registry default_effort is xhigh.
587588
{:ok, agent} = Agents.resolve_with_axes("claude-opus", nil, false)
588589
cmd = Agents.build_command(agent, "hi")
589-
assert cmd =~ "--effort 'low'"
590+
assert cmd =~ "--effort 'xhigh'"
590591
refute cmd =~ "--chrome"
591592
end
592593

ui/src/forms/CaptureForm.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ const FALLBACK_AGENTS: AgentEntry[] = [
3939

4040
// Capture's default worker: claude-opus at xhigh reasoning. A captured yap is
4141
// often a real piece of thinking to crystallize, not throwaway — worth the
42-
// strong model. Effort is seeded here rather than taking opus's registry
43-
// default_effort so the global opus default (used by kanban/CLI dispatch) is
44-
// untouched; switching the agent in the form falls back to that agent's own
45-
// default_effort.
42+
// strong model. opus's registry default_effort is now xhigh too, so the live
43+
// agents list yields the same; this seed just keeps the dialog correct before
44+
// the registry loads (offline fallback). Switching the agent re-derives effort
45+
// from that agent's own default_effort.
4646
const CAPTURE_DEFAULT_AGENT = 'claude-opus'
4747
const CAPTURE_DEFAULT_EFFORT = 'xhigh'
4848

0 commit comments

Comments
 (0)