Skip to content

v3.0.7

Choose a tag to compare

@github-actions github-actions released this 14 Jul 01:12
· 55 commits to main since this release

Changed

  • Migrated to agent-client-protocol 0.11 (pinned >=0.11,<0.12). ACP 0.11 removed model channel 1
    (session.models / SessionModelState / ModelInfo / session/set_model) outright. Rutherford now reads
    the legacy channel defensively (a config-only 0.11 response no longer AttributeErrors at session open) and
    selects models through the surviving configOptions channel and, for launch-flag agents, the process argv.
    The ACP client conforms to the 0.11 Client protocol — it adds the elicitation callbacks
    (create_elicitation is declined, since Rutherford drives agents headless) and matches the reordered
    filesystem / terminal / permission signatures. The upper cap is load-bearing: it keeps a future breaking
    minor from resolving into a runtime break rather than an install-time error.
  • Provenance is stricter. DelegationResult now tracks requested_model (the pre-effort request) versus
    selected_model (the model an in-session ACP selection actually confirmed), and provenance.confirmed is
    True only after a verified in-session selection — never a config echo or a launch-argv intent.
    provenance.model remains the effective model that ran, so cross-model diversity and the correlation
    discount keep their lineage key.

Added

  • Cursor model selection via a launch --model flag (new AgentDescriptor.model_launch_flag). Cursor
    applies its model from the process argv rather than an in-session ACP call, including effort-encoded
    compound ids (…[effort=high,fast=false]), and inherits the flag on a config clone that reuses the built-in
    launch command. Launch-flag selection is validated advisorily and never blocks a turn on a missing ACP
    advertisement (the model is on the argv regardless). Contributed by
    @Artemonim in #10.
  • capabilities reports static per-agent model metadatadefault_model, fallback_model,
    model_selection (launch_argv for launch-flag agents, else in_session), and effort_capable — without
    spawning the agent; use doctor(connect_only=true) for live advertised model ids.

Fixed

  • An unconfirmable requested model fails loudly instead of silently running the wrong one. When a caller
    names a model (or effort rewrites one) that the agent advertises on no ACP channel, the turn fails
    MODEL_UNAVAILABLE rather than quietly falling back to the agent's default. A descriptor default the agent
    does not advertise — for example a Bedrock/Vertex provider id applied via an injected ANTHROPIC_MODEL,
    never on an ACP channel — remains a soft-skip, so a Bedrock/Vertex Claude Code seat is unaffected.
  • A model-selection failure can no longer leak the spawned agent process. The session tears the agent down
    before a post-handshake MODEL_UNAVAILABLE propagates, so a rejected model does not orphan a process tree.

Thanks to @Artemonim for the Cursor ACP model-routing contribution in #10.