Skip to content

Add Claude Opus 5 as a pinned selectable model #1018

Description

@realproject7

EPIC Context

  • Parent: none — standalone
  • Epic goal: Offer a reproducible Claude Opus 5 pin while preserving aliases and saved configurations.
  • This ticket's role: Extend the shared Claude catalog and its persistence/launch regression coverage.
  • Depends on: none Enables: operators can select and persist claude-opus-5 across both model-selection surfaces.
  • Contracts to respect/expose: MODEL_OPTIONS.claude remains the single catalog; opus remains the first concrete option; valid saved model values must survive normalization and launch unchanged.
  • Out of scope here (later tickets): Claude effort controls, free-text models, provider profiles, and all non-Claude catalog changes.

Goal

Make Claude Opus 5 selectable as an explicit pinned model in QuadWork, while preserving the existing opus (latest) alias and every saved agent configuration. An operator must be able to choose claude-opus-5 from both model-selection surfaces, persist it, and have the Claude Code PTY launch with that exact model argument.

Scope

  1. Add { value: "claude-opus-5", label: "claude-opus-5" } to MODEL_OPTIONS.claude in src/lib/agentModels.ts, immediately after claude-fable-5 and before the 4.x pins. Do not reorder opus; it remains the first concrete Claude option.
  2. Keep the CLI-default behavior and do not silently migrate saved opus or Opus 4.x values.
  3. Extend server/agentModels.test.js to assert the Claude catalog contains the pin, effectiveModel("claude", "claude-opus-5") preserves it, and sanitizeModel("claude", "claude-opus-5") preserves it.
  4. Add a Butler-normalization regression in server/agentModels.test.js: normalizeButler({command:"claude", model:"claude-opus-5"}).model remains claude-opus-5.
  5. Extend the existing Claude branch in server/agentArgs.gemini.test.js with claude-opus-5; assert buildAgentArgs() emits --model claude-opus-5 and retains the existing permission and MCP arguments.
  6. Run the full test suite and production build.

Acceptance Criteria

  • Both the dashboard Agent Models modal and Settings page offer claude-opus-5 for Claude Code agents and Butler.
  • Selecting and saving it persists model: "claude-opus-5"; loading or saving unrelated settings does not rewrite existing saved models.
  • A Claude agent with the pin launches with --model claude-opus-5 while retaining permission and MCP arguments.
  • opus (latest) remains available and remains the first concrete Claude option.
  • Butler normalization preserves the new valid pin.
  • Codex and Gemini catalogs, argument generation, and model sanitization remain unchanged.
  • npm test and npm run build pass.

Non-Goals

  • Do not remove or replace opus (latest).
  • Do not change the default Claude model, restart running agents, or modify existing project configuration.
  • Do not add free-text model entry, provider profiles, non-Claude model changes, or Claude effort controls.

Implementation baseline

Verified on main commit caf94e2 (2026-07-25). Related prior art: #840 added the Opus 4.8 pin; #841 added the current latest-model aliases; #931 made the model selectors backend-aware.

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/devAssigned to Dev agentenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions