github 0xPlaygrounds/rig v0.46.0-rc.1
rig-v0.46.0-rc.1

pre-release3 hours ago

Added

  • (rig) cargo install rig installs the coding-agent launcher. It builds the agent from published Bevy plugins, supports --resume, --model, --print and --json, and rebuilds and rolls back plugin changes. rig plugin new|add|remove|list|enable|disable|check manages the plugin set; rig help-agents documents the pipe protocol (by gold-silver-copper) (#2771, #2836, #2838, #2854)
  • (harness) published rig-harness, rig-tools and plugin crates: removable Bevy plugins for terminal and print fronts, models, sessions, compaction, subagents and coding tools. The final default plugins live in rig-basics and rig-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-shot rig -p --json, and --tools to narrow available tools. The opt-in helpers::HelpersPlugin runs child agents alone, in parallel or in a chain (by gold-silver-copper) (#2854, #2856)
  • (rig-tools) remote HOST:PATH files through configured transports, with per-host concurrency limits, one retry for read-only transport failures, hash-checked edits, atomic writes and shared Seen state for read, write and edit. 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_COLOR support 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's rawPredict / streamRawPredict endpoints 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_M3 model 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 repeated name[] 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_async and save_async, plus classic-agent persistence through AgentBuilder::memory(store).conversation(name) and per-run .memory() / .without_memory(). Overlapping saves are refused; DirStore is 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::project projects 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_after for 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 in on_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::emit is removed; use error for errors and let the decoder report usage. AdapterUsage.total_tokens is always None; use Usage::total_tokens (by gold-silver-copper) (#2755)
  • (agent) a model turn's effective TurnPolicy now 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 the session-id header; tool arguments are no longer written to the agent's DEBUG log (by gold-silver-copper) (#2802)
  • (typesafeai) Jev decodes OpenRouter's numeric usage.cost as the reported USD total and tolerates unknown usage fields. Response retains Serialize in 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; AgentBuilder has no type parameter. The message bus is replaced by inline Handlers, and over_bus becomes over_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::Text and DocumentData::File replace the ambiguous DocumentSourceKind::String; Document.data takes DocumentData, and ContentFormat is 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.policy replaces separate tool-policy fields, PendingToolCall separates executable and malformed calls, and AgentRun::answer / answer_all replace tool_results. Cancellation histories close unanswered calls; TurnAbandoned is a unit variant. Final RUN_FORMAT is 5: drain or discard older persisted runs before upgrading (by gold-silver-copper) (#2757, #2762, #2763, #2835)
  • (catalog) [breaking] lookup returns Resolved; strict lookup is get_exact. from_overrides / from_models_dev replace from_json, and with_overrides replaces merge. Connect through Catalog::connect or connect_with and ConnectOptions; ProviderRef and free registry connectors are removed. References use vendor/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 uses copilot.json instead of access-token and api-key.json; signed-in models replace client authenticate helpers. Copilot uses OpenAIConfig with copilot::DIALECT (by gold-silver-copper) (#2815, #2835)
  • (tools) [breaking] one contextual tool contract, Tool / ToolEmbedding, replaces portable and runtime-specific variants. Execute registered tools through RegisteredTool::execute; dynamic tools expose run / run_with. The old erased tool and dispatch helpers are removed, and ToolDefinition gains annotations (by gold-silver-copper) (#2835, #2845, #2848)
  • (wire, http) [breaking] Wire names a classified Event, reassemblers consume it, and shared DocumentDecoder replaces per-provider decoders. Observer callbacks take outcomes by value; ResponsesEvent::Frame.raw is optional. HTTP framing is incremental, SSE event names use Cow, and the shared fallback runtime lives at rig_http::runtime. Provider with_http constructors become config .connect(http) (by gold-silver-copper) (#2796, #2835)
  • (providers) [breaking] MCP uses rmcp 3.5 and owned connections; McpClientError::Request / Timeout replace 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-ecs is a new Bevy agent kernel, not a compatible update of the 0.44 ECS runtime. The old rig-cassette ecs adapter is removed; use the new kernel or classic rig-agent step protocol. New-kernel sessions use rig-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 VectorDistance helpers and Gemini gRPC (by gold-silver-copper) (#2796, #2835, #2845, #2848)
  • (facade) [breaking] use root rig:: paths instead of rig::core, and rig::handlers instead of rig::bus. Lower-level public APIs also changed; see the 0.44 → 0.45 migration guide. The classic agent feature 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)

Contributors

Don't miss a new rig release

NewReleases is sending notifications on new releases.