Skip to content

v3.0.6

Choose a tag to compare

@github-actions github-actions released this 04 Jul 07:23
· 59 commits to main since this release

Added

  • New built-in agent: fast_agent (evalstate's fast-agent, Apache-2.0), run as its own ACP server via
    uvx fast-agent-acp==0.8.3 — bringing the built-in roster to 20. The version is pinned (not @latest) so
    the built-in launches the exact release whose ACP handshake was verified rather than a moving remote spec;
    override with [agents.fast_agent] command = [...] to track a newer release. It is bring-your-own-model /
    multi-provider (provider=None): a turn needs a provider key in the environment (ANTHROPIC_API_KEY /
    OPENAI_API_KEY / ...) or a fast-agent.secrets.yaml, which the agent advertises as its ACP authMethod.
    ACP conformance is verified: it spawns, handshakes (agentInfo fast-agent-acp v0.8.3, protocolVersion
    1), and reaches a turn that cleanly reports Authentication required with no key. Like kimi / openhands
    it is a conformance-verified seat whose full answering turn is gated on the user's own provider key.

Fixed

  • A config clone of an effort-capable built-in now keeps its reasoning-effort tier. Effort is a
    capability of the launched ACP adapter, not the agent id, but the per-call effort dispatch keyed on the
    agent id alone — so a base= clone (or a local backend= clone) of codex / claude_code / cursor /
    cline / kiro / junie got a new id, fell through the dispatch table, and had its requested tier
    silently dropped to a no-op (effort_applied null) across every channel (the model[effort] model-id, the
    --thinking / --effort launch flag, the JUNIE_EFFORT env, and the effort / reasoning_effort config
    options). The descriptor now records the built-in whose knob it inherits (AgentDescriptor.effort_base,
    stamped when a clone reuses a built-in's launch command) and effort dispatches on effort_base or id, so a
    clone resolves through the adapter it actually launches. Built-ins are unaffected (effort_base is None,
    resolving by id); a clone that supplies its own raw command stays an honest no-op by design (arbitrary
    argv — the lineage is never inferred from command[0]). Non-breaking; no config-schema change. Thanks to
    Tony Stone (@Tasktivity) for reporting and fixing this in #7.