Skip to content

Per-purpose model defaults in the built-in agent templates (plan vs dispatch)#84

Merged
MJohnson459 merged 1 commit into
mainfrom
worktree-per-purpose-agent-models
Jul 16, 2026
Merged

Per-purpose model defaults in the built-in agent templates (plan vs dispatch)#84
MJohnson459 merged 1 commit into
mainfrom
worktree-per-purpose-agent-models

Conversation

@MJohnson459

Copy link
Copy Markdown
Contributor

Give the built-in claude verbs per-purpose model defaults.

The built-in claude templates in crates/voro-core/src/agent.rs passed no --model flag, so both dispatch and the interactive plan verb ran whatever the claude CLI defaulted to. This encodes the per-purpose intent from the task:

  • dispatch -> --model opus (workhorse for implementation)
  • plan -> --model fable (stronger reasoning model for interactive planning)

Decision on brittleness: rather than pinning model ids (which churn faster than Voro releases, the risk the task called out), the templates pass the claude model aliases opus/fable. claude --help confirms --model accepts these aliases ('fable', 'opus', 'sonnet') and resolves each to the current model of that class, so the built-ins track model releases without edits. An operator wanting other models overrides the agent wholesale in voro.toml (copy the block, change the flags) -- no new config surface, as the task suggested.

Changes:

  • agent.rs BUILTIN_AGENTS: added --model opus to claude dispatch, --model fable to claude plan, with a doc comment explaining the alias choice.
  • New test builtin_claude_carries_per_purpose_model_defaults pins both flags. The starter config and its existing tests derive from BUILTIN_AGENTS, so they pick the flags up unchanged.
  • docs/agent-integration.md: reproduced TOML block updated to match, plus a paragraph explaining the per-purpose models and how to override them.
  • docs/DESIGN.md §8: the sentence that called this 'a separate, related task' now describes the shipped behaviour.

Verification: cargo fmt --all clean; cargo test --workspace passes (194 tests); cargo clippy --workspace --all-targets -- -D warnings clean.

Branch: worktree-per-purpose-agent-models (committed locally; not pushed from this background session per the no-remote-git rule).

The built-in claude templates passed no --model flag, so dispatch and the
interactive plan verb both ran whatever the CLI defaulted to. Encode the
per-purpose intent instead: dispatch runs --model opus (a workhorse for
implementation) and plan runs --model fable (a stronger reasoning model for
interactive planning).

Both use the `claude` model *aliases* rather than pinned model ids, which
resolves the brittleness the task flagged — aliases track the current model of
their class, so the built-ins do not churn as models are released. An operator
wanting other models overrides the agent wholesale in voro.toml.

The starter config derives from BUILTIN_AGENTS, so it and its tests pick the
flags up unchanged; the reproduced block in agent-integration.md and the
DESIGN.md §8 note are updated to match, and a new test pins the two flags.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H5MedxfX6VHVzz9GfDWoWo
@MJohnson459
MJohnson459 merged commit 7b33865 into main Jul 16, 2026
6 checks passed
@MJohnson459
MJohnson459 deleted the worktree-per-purpose-agent-models branch July 16, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant