Added
- (rig)
cargo install riginstalls the coding-agent launcher. It builds the agent from published Bevy plugins, supports--resume,--model,--printand--json, and rebuilds and rolls back plugin changes.rig plugin new|add|remove|list|enable|disable|checkmanages the plugin set;rig help-agentsdocuments the pipe protocol (by gold-silver-copper) (#2771, #2836, #2838, #2854) - (harness) published
rig-harness,rig-toolsand plugin crates: removable Bevy plugins for terminal and print fronts, models, sessions, compaction, subagents and coding tools. The final default plugins live inrig-basicsandrig-tui; approval, preview, checkpoints, search, subagents and helpers are opt-in. The plugin guide documents the public extension points (by gold-silver-copper) (#2771, #2832, #2836, #2844, #2848, #2863) - (rig-basics) versioned JSON-lines input and output with
rig --json, one-shotrig -p --json, and--toolsto narrow available tools. The opt-inhelpers::HelpersPluginruns child agents alone, in parallel or in a chain (by gold-silver-copper) (#2854, #2856) - (rig-tools) remote
HOST:PATHfiles through configured transports, with per-host concurrency limits, one retry for read-only transport failures, hash-checked edits, atomic writes and sharedSeenstate forread,writeandedit. Reading or writing a whole file lets a subsequent edit use one transport call (by gold-silver-copper) (#2849, #2850, #2852, #2855, #2857, #2858, #2860) - (rig-tui) a flat, syntax-highlighted transcript with whole tool outputs, state-tinted call rows, word-highlighted diffs, width-aware Markdown tables,
NO_COLORsupport and Shift+Enter on kitty-protocol terminals. New sessions show the version, model and directory in a welcome that is neither saved nor sent to the model (by gold-silver-copper) (#2832, #2859, #2861) - (gemini) Gemini 3 image generation with explicit sizes and reference images, access to every image and text part, Interactions text-to-speech with one or two speakers, current Deep Research options and stream-resume cursors (by gold-silver-copper) (#2809)
- (vertexai)
VertexAi::anthropic(model)serves Claude through Google'srawPredict/streamRawPredictendpoints with Google credentials and the shared Anthropic encoder (by gold-silver-copper) (#2817) - (minimax) image generation, text-to-speech, voice upload and cloning, and the
MINIMAX_M3model constant. HTTP-200 media replies reporting a provider failure now fail the call (by gold-silver-copper) (#2807) - (transcription) language, duration, confidence, timed segments and words, and speaker labels in
TranscriptionResponse; multipart array parameters are sent as repeatedname[]fields so timestamp granularity takes effect (by gold-silver-copper) (#2814) - (rmcp) owned
McpConnections keep registered tools alive, expose resources and resource context, and support tool-name aliases and per-call_meta(by gold-silver-copper) (#2812) - (memory)
AsyncStore,load_asyncandsave_async, plus classic-agent persistence throughAgentBuilder::memory(store).conversation(name)and per-run.memory()/.without_memory(). Overlapping saves are refused;DirStoreis cloneable and locks across processes (by gold-silver-copper) (#2845, #2848) - (catalog) programmatic spec builders, strict override loading, lenient models.dev imports, refreshes that preserve pinned facts, model-bound facts and preflight option checks. Catalog overrides now reach every wire and cost calculation (by gold-silver-copper) (#2769)
- (agent) canonical cancellation histories and resumable in-flight model calls and partial tool batches.
run::projectprojects committed calls and results for foreign hosts, including recovery feedback and output-tool reprompts (by gold-silver-copper) (#2762, #2763) - (cassette) JSONL effect logs, checkpoint-aware by-id replay and
Handlers::resume_ids_afterfor resuming dispatch identities (by gold-silver-copper) (#2771, #2845, #2848)
Fixed
- (agent) every dispatched completion gets exactly one
on_outcome, including rejected, retried, recovered and abandoned attempts. Only an accepted turn's outcome can be replaced; accepted-turn accounting belongs inon_model_turn_finished(by gold-silver-copper) (#2756) - (core) in-band provider failures share HTTP-rejection classification, retryability and machine codes, including numeric codes and Responses failures. Error-envelope observations use the same locator (by gold-silver-copper) (#2758)
- (observe) [breaking] usage is observed once per successful attempt from the decoder's normalized response, immediately before its terminal event, instead of from individual frames.
ObservationSink::emitis removed; useerrorfor errors and let the decoder report usage.AdapterUsage.total_tokensis alwaysNone; useUsage::total_tokens(by gold-silver-copper) (#2755) - (agent) a model turn's effective
TurnPolicynow owns tool choice, executable tools and the output tool, so hook patches, invalid-call recovery and output-tool interception agree (by gold-silver-copper) (#2757) - (providers) Bedrock rejects an empty or multi-name
ToolChoice::Specific; ChatGPT sends thesession-idheader; tool arguments are no longer written to the agent's DEBUG log (by gold-silver-copper) (#2802) - (typesafeai) Jev decodes OpenRouter's numeric
usage.costas the reported USD total and tolerates unknown usage fields.ResponseretainsSerializein the final release (by gold-silver-copper) (#2800, #2845) - (core) empty LSH stores index subsequently added documents; zero-table LSH searches all documents. Gemini image generation sends non-square aspect ratios width-first (by gold-silver-copper) (#2796, #2848)
- (rmcp) MCP timeouts no longer panic outside a tokio runtime; tools declaring an output schema return structured content without duplicating the content blocks (by gold-silver-copper) (#2812, #2835)
- (gemini-grpc) replies up to 256 MiB, Gemini 3 thinking levels, current catalog models, REST-compatible embedding widths, connect timeouts and grounding metadata (by gold-silver-copper) (#2848)
- (harness) changing tool calls fail closed when their marks cannot be saved; untrusted remote tools are not rerun after a crash. Keys are redacted from logs, spill files, tool answers and cassette headers; ChatGPT refresh uses an atomic token file and cross-process lock (by gold-silver-copper) (#2838)
- (compaction) recovery clears, then compacts, then fails without looping; near-window clearing preserves notes for outputs that cannot be fetched again. Stopping a turn while a summary is held for review cancels it instead of applying it (by gold-silver-copper) (#2841, #2843, #2846)
- (rig-basics) Esc stops subagents; messages do not prematurely close task requests, and only the final answer reports. Resumed print runs finish restored turns without a new prompt, and reload preserves the print or JSON front (by gold-silver-copper) (#2841, #2844, #2849, #2854)
- (rig-tools) shell output interleaves stdout and stderr at line boundaries, strips terminal escapes and keeps the first, last and error lines when cut. Stopped commands name the signal; timeout, quiet and output-limit stops send SIGTERM before SIGKILL and warn when a remote command may still run (by gold-silver-copper) (#2849, #2852, #2855, #2857, #2858)
- (rig-tools) edits apply in order, report nearby text on a miss and show changed lines with context on success. Reads fit long lines within the byte limit; remote write failures check whether the write actually happened (by gold-silver-copper) (#2852, #2857, #2858, #2860)
Other
- (workspace) [breaking] minimum Rust version is 1.97.1 (by gold-silver-copper) (#2771)
- (core, agent) [breaking] requests, histories, tool definitions and completion outcomes share data through
Arc;AgentBuilderhas no type parameter. The message bus is replaced by inlineHandlers, andover_busbecomesover_handlers. Request encoding, decoding, long agent sessions, effect-log writing and memory saves allocate and copy substantially less (by gold-silver-copper) (#2796, #2835) - (completion) [breaking]
DocumentData::TextandDocumentData::Filereplace the ambiguousDocumentSourceKind::String;Document.datatakesDocumentData, andContentFormatis removed. Legacy string documents load as text, legacy string images/audio/video as base64; older releases cannot read the new text encoding (by gold-silver-copper) (#2754) - (agent) [breaking]
PreparedRequest.policyreplaces separate tool-policy fields,PendingToolCallseparates executable and malformed calls, andAgentRun::answer/answer_allreplacetool_results. Cancellation histories close unanswered calls;TurnAbandonedis a unit variant. FinalRUN_FORMATis 5: drain or discard older persisted runs before upgrading (by gold-silver-copper) (#2757, #2762, #2763, #2835) - (catalog) [breaking] lookup returns
Resolved; strict lookup isget_exact.from_overrides/from_models_devreplacefrom_json, andwith_overridesreplacesmerge. Connect throughCatalog::connectorconnect_withandConnectOptions;ProviderRefand free registry connectors are removed. References usevendor/model; reasoning support is an enum and option refusals are model-owned. Unlisted cache rates leave cost incomplete instead of using the input rate (by gold-silver-copper) (#2769, #2835) - (auth) [breaking] ChatGPT and Copilot authenticators take an application-supplied
TokenStore, with file and memory implementations. Copilot's file store usescopilot.jsoninstead ofaccess-tokenandapi-key.json; signed-in models replace clientauthenticatehelpers. Copilot usesOpenAIConfigwithcopilot::DIALECT(by gold-silver-copper) (#2815, #2835) - (tools) [breaking] one contextual tool contract,
Tool/ToolEmbedding, replaces portable and runtime-specific variants. Execute registered tools throughRegisteredTool::execute; dynamic tools exposerun/run_with. The old erased tool and dispatch helpers are removed, andToolDefinitiongains annotations (by gold-silver-copper) (#2835, #2845, #2848) - (wire, http) [breaking]
Wirenames a classifiedEvent, reassemblers consume it, and sharedDocumentDecoderreplaces per-provider decoders. Observer callbacks take outcomes by value;ResponsesEvent::Frame.rawis optional. HTTP framing is incremental, SSE event names useCow, and the shared fallback runtime lives atrig_http::runtime. Providerwith_httpconstructors become config.connect(http)(by gold-silver-copper) (#2796, #2835) - (providers) [breaking] MCP uses rmcp 3.5 and owned connections;
McpClientError::Request/Timeoutreplace tool-fetch variants. Image generation requests gain reference images, transcription responses gain timing fields, and Gemini Interactions uses typed speech, image-size and Deep Research options. Retired model constants are removed (by gold-silver-copper) (#2807, #2809, #2812, #2814, #2835) - (ecs) [breaking]
rig-ecsis a new Bevy agent kernel, not a compatible update of the 0.44 ECS runtime. The oldrig-cassetteecsadapter is removed; use the new kernel or classicrig-agentstep protocol. New-kernel sessions userig-session/4; forks are agents in one session (by gold-silver-copper) (#2761, #2771, #2841) - (memory, cassette) [breaking] memory APIs accept shared messages; the old core memory policies, session upgrade machinery and older replay helpers are removed. By-id replay, multi-program headers, checkpoints, refusal reporting and LSH search remain available in the final release, as do
VectorDistancehelpers and Gemini gRPC (by gold-silver-copper) (#2796, #2835, #2845, #2848) - (facade) [breaking] use root
rig::paths instead ofrig::core, andrig::handlersinstead ofrig::bus. Lower-level public APIs also changed; see the 0.44 → 0.45 migration guide. The classicagentfeature remains enabled by default in the final release (by gold-silver-copper) (#2835, #2845) - (docs) the coding-agent reference is in
docs/agent.md; the library examples include a configurable LiteLLM proxy setup (by gold-silver-copper) (#2772, #2862)