- New media-generation subcommands
aivo video,aivo audio, andaivo speakjoin the existingaivo image, sharing aservices::media_iomodule for output path parsing, overwrite policy, atomic writes, and error extraction. Hidden from--helpfor now while the surface stabilizes.
- CI: scope concurrency cancellation to
ci.ymland run the test workflow onmainpushes / PRs so the matrix validates before tagging.
- Launcher: skip extension-less PATH entries when looking up tool binaries on Windows — npm drops both
claude.cmdand a bash-styleclaude(no extension) into%APPDATA%\npm; the lookup matched the unspawnable bash shim first.aivo claude/aivo codex/aivo gemininow resolve to the.cmdshim and spawn correctly even when the tool was already installed
(v0.19.12 and v0.19.13 carried the same fix but failed CI — v0.19.12 on a PATHEXT casing mismatch in tests, v0.19.13 on a clippy::needless_return lint that only fires on the newer Rust shipped to windows-latest. No binaries were published for either.)
- Launcher: pin the resolved binary path before spawning so npm
.cmdshims (claude.cmd,codex.cmd, etc.) launch on Windows —CreateProcessWdoes not honor PATHEXT for non-.exefiles, so spawning the bareclaude/codexname failed after install
- Chat TUI /
keys addsecret prompt: filter Windows key Release events so typed characters aren't doubled — crossterm emits both Press and Release on Windows for every keystroke; we now only process Press
- Build: statically link the MSVC C runtime for Windows targets so
aivo.exeno longer depends onVCRUNTIME140.dll— fixes silent load failure (STATUS_DLL_NOT_FOUND) on Windows ARM64 systems without the Visual C++ Redistributable installed, whereaivo --versionprinted nothing
- Bridge: propagate cached input tokens from OpenAI-shape upstreams — Claude Code now records
cache_read_input_tokenscorrectly so cached usage shows up inaivo statsinstead of being silently dropped - Bridge: coalesce parallel function_calls into one assistant message
- Run: skip model picker on first run when only the starter key exists
- Launcher: fall back to installer drop dirs when PATH lookup misses
- MCP/router: pin nickname session resolution; trust proven route on attempt 0
- Removed cross-tool MCP peer awareness
- Build: add
win32-arm64target
aivo updateandinstall.shnow fetch binaries fromgetaivo.dev(R2) instead of GitHub Releases — faster in regions with poor GitHub connectivity- Fixed text selection and session list in chat TUI
- Bridge: filter Anthropic server-side tools (
web_search_*,code_execution_*, etc.) - Bridge: propagate
input_tokensviamessage_deltaon OpenAI streams — fixes Claude Code status-line percent stuck at 0% - Router: apply learned
requires_reasoning_contentto in-flight requests, eliminating per-request 400 + retry until relaunch - MCP: stabilize session discovery and nickname mapping
- Removed Chat TUI thinking toggle and think-tag detection
- Fix handling
reasoning_contentin deepseek learn the config - Reorder
--helpcommand listing (keys, models, chat, serve, image, stats)
- Extended
aliassupport to launch tool, not only model - Added Poolside provider preset
- Improved
--max-contextflag parsing to handle more formats and edge cases - Force non-streamed upstream for Inception Mercury when tools are in use
- Fixed
alias rm <name>parsing
- Fallback: persistent learned protocol/path routing with smarter Responses-API detection
- Bridge: forward image/file parts and dropped sampling params; safer
tool_useIDs, stop-reason mapping, andcache_controlhandling - Gemini: persist
thoughtSignatureacross restarts; group parallel tool responses into one user turn - Claude:
--1m/--2mflags (and--max-context=1m|2m) append the canonical[Nm]suffix to set max context window aivo keys reset-route <name>to clear learned routing;--debugrewritten as JSONL HTTP logger
aivo stats --since DURATION: time-windowed reports (e.g.--since 7d,--since 24h)- Claude Code: per-task model overrides for individual slots
- CLI: drop custom short-flag pre-expander, rely on clap POSIX bundling
- Gemini: handle
thoughtSignaturefor gemini-3
aivo image: experimental image generation command
- Router: try native
/v1/messageswhentarget_protocolis anthropic; respect learnedPathVarianton fast paths - Router: prefer CLI-native protocol and force aivo-starter through the router
- Fix Linux ETXTBSY flake in Claude
setup-tokenspawn tests aivo chat --jsonnow prints the provider's raw response body instead of aivo's envelopeaivo run: skip the model picker on non-TTY and under--dry-runaivo chatno longer injectsmax_tokens: 8192for DeepSeek / aivo-starter; matchescurlopencode: default to an OpenAI-style model instead ofclaude-sonnet
- Improve key pickers and status prints for
--as.
- Preserve Codex trust settings across launches
- Reject for disable OAuth keys for
modelsandserveinstead of error
- Multi-account OAuth for Codex, Gemini and Claude Code
- Align
ctx,out, and price columns inaivo models
- Drop reserved-name shortcuts in
aivo keys; preselect in the picker instead - Rework
Ctrl+C/Ctrl+Lhandling and drop the/clearcommand
- Fix build on windows.
- Cross-tool MCP communication via
--as <name>: Run a tool under a custom identity so peers can query it live aivo contextand--contextinjection: Export recent session context as Markdown and inject it into any launched CLI for cross-tool handoffs- Copilot premium-request multiplier: Surfaced in
aivo modelsso you can see which Copilot models cost more - Chat TUI keybinding swap:
Ctrl+CandCtrl+Lswapped to match other agents
- Bypass HTTP proxy for the loopback router when launching CLIs
- Cancel in-flight chat requests when the user exits
- Close tool-calling parity gaps in the serve bridge layer
- Plug correctness gaps across crypto, bridges, and TUI
- Tighten bridge-layer fragility across serve, launch, and
cache_control - Make Windows first-class in PID liveness checks and Pi binary reuse
- Preserve
tool_resultimages through Anthropic-to-OpenAI conversion and the typed OpenAI round-trip - Extend multimodal preservation through the Responses API and recover sniffed
media_type - Close post-review gaps across serve auth,
tool_resultimages, and the OpenAI round-trip - Surface unreadable session files in debug builds during
--contextingestion - Align
aivo statsClaude totals with Claude Code's/statsUI - Prevent update download from timing out on slow connections
- Improved the ux of adding keys: Interactive provider picker backed by the full known-provider catalog
- Added JSON output via
--json: Enables scripting and| jqpipelines
- Streamline
logscommand and redesign the status output
- Normalize
input_tokensto fresh-only across all stats parsers for consistent accounting - Exclude subagent sidechain files from Claude session count
- Add Claude Code env vars for timeouts, attribution, and subagent model
- Handle Ollama pull errors instead of silently succeeding
- Refresh PATH from login shell after tool install
- Move
--versionand--helpbefore service init and improve smoke test diagnostics
- Fix
ETXTBSYon Linux during self-update: close write file descriptor before smoke test
- Google Gemini native API: Direct support for
generativelanguage.googleapis.comas a provider across all tools - Open aivo-starter model list: aivo-starter users can now access the full model catalog
- Enriched
aivo models: Show context window, max output tokens, and pricing from the provider API - Prompt to install missing tools: Interactively offer to install tool binaries when not found on PATH, with cross-platform support
- R2 download mirror: GitHub-first binary downloads with Cloudflare R2 fallback for faster installs and updates
- Clear
last_selectionon key add so the newly added key is actually used - Resolve aivo-starter sentinel URL in serve router and model picker
- Normalize Pi stats token counting to include cached input tokens
- Reduce GitHub download timeout and deduplicate mirror fallback messages
- Fix mirror fallback for self-update flow
- aivo-starter: Zero-config provider — start using aivo without any API key setup
- Update rollback: Automatically roll back failed updates; added config migration tests and CI clippy gate
- Local session logging: SQLite-backed
aivo logscommand for browsing session history - Native top session view: Opt-in
aivo stats --topfor a live session overview - Combined short flags: Support Unix-style combined flags like
-xr,-nar - Ollama lifecycle management: Auto-stop Ollama on exit using PID-file refcount for safe concurrent instances
- DeepSeek reasoning streaming: Stream
reasoning_contentthrough routers for DeepSeek-reasoner models - Conditional default model option: Only show "default model" in the picker when the selected tool supports it
- Cap
max_tokensfor aivo-starter and DeepSeek in chat requests - Remove last two production
unwrap()calls for safer error handling - Fix device auth for starter provider across all tools
- Hide default model option in chat mode since it requires a concrete model
- Support Responses API-only Copilot models (e.g. gpt-5.4) for Claude and Gemini
- Resolve tilde paths and add PDF/binary support for chat attachments
- Remove tool name from active key display, show only key and model
- Avoid PBKDF2 decryption when displaying active selection label
- Warm model cache in background after adding API key
- Redesign key/model selection: per-directory → global last-selection
- Replace
sqlite3CLI withrusqlitefor OpenCode stats reading - Route OpenCode through router for providers with quirks
Major update with stats aggregation, better tool support
- Global stats aggregation across all AI tools (Claude, Codex, Gemini, OpenCode, Pi).
- Mask API key input with asterisks during entry
- Show install guide when a tool is not found on PATH
- Support Pi tool with Copilot subscription
- Rename
lscommand toinfo(keeplsas alias) - Embed provider registry as JSON with table-driven tests
- Remove redundant token stats recording from run tool
- Bump GitHub Actions to v5 for Node.js 24 compatibility
- Remove custom User-Agent headers from API requests
- Use Codex
model_providerconfig to bypassauth.jsonandOPENAI_BASE_URLdeprecation - Wire
--refreshflag through run command for model picker cache bypass - Auto-strip
anthropic-betaheaders for Bedrock/Vertex providers
Stability hardening. Fixed panics from char-boundary slicing and API response handling. Switched Linux builds to musl targets for better portability.
Added Responses API fallback for models that require the /v1/responses endpoint. Fixed /attach command autocomplete.
Bug fixes and CI improvements.