Added
- The app-server reports each model's compaction threshold, so a client can show how full a session's context is before it compacts.
- Desktop can import projects and sessions from another coding agent during onboarding.
- Rust CLI:
/leanstalland/unleanstallinstall and uninstall the Lean agent. - With
experimental_enable_model_catalogon, the model list includes Mistral's curated models, and your config can still override their settings. - Rust CLI: Tool approval options, /thinking levels, /resume sessions and /log-level rows and badges can be clicked.
- Rust CLI: Option lists show a faint hover background under the mouse.
- With a "shared only" API key,
/mcpblocks connectors that need your login and tells you to runvibe --setup. - Rust CLI:
/branchforks the current conversation into a new resumable session. - The agent can now wait for your next message or for background work to finish, instead of repeatedly checking.
- Rust CLI: Debug console for live session logs, opened with /debug or Ctrl+.
- Rust CLI: Report activity, approvals, questions, completion, and failure with session titles and error messages through the OSC 7501 Program Status Protocol.
/statusshows the credential source in use and the shadowed sources- Admin-enforceable
enable_mcpflag to block all user-facing MCP server operations (add, remove, toggle, login, logout, tool registration), including plugin-provided MCP servers, via managed config.
Changed
read_fileshows a file's line endings as they are on disk, like shell commands dowrite_filewrites new files with the line endings it is given, also on Windows- The app server now shows up as
vibe-app-serverinstead ofpython3in Activity Monitor,ps, andtop. - Rust CLI: dragging a scrollbar moves smoothly in fine steps on terminals that report the mouse in pixels, such as Ghostty, kitty and WezTerm.
- displayed_workdir, context_warnings and raise_on_compaction_failure are deprecated: they remain accepted in existing configs but have no effect on Unified execution.
- Rust CLI: The welcome banner starts at the top left, with the conversation and what's new flowing below it while queued messages stay at the bottom.
- Rust CLI: One click picks an option whose only action is choosing it (tool approvals, questions, /theme, /plugins, subagents, config choices, the remote project picker, MCP or connector sign-in); options with several actions (/model, /thinking, /resume, /mcp, /config) highlight on the first click and confirm on the second.
- Rust CLI: The highlighted free-text answer spans the full row, and clicking its number unticks it in multi-select questions.
- Rust CLI: Colored text on a highlighted row takes the row's text color.
- Rust CLI: headless mode (
-p) now follows the Python CLI's run contract, with turn, token, price and time limits, graceful stops, and a JSON run export whose exit code reports the outcome. - Pressing Esc twice to clear the input or open rewind now accepts a slower second press.
- Rust CLI: The welcome banner is more compact: the cat sits beside the version, model and plan, and the model, connector, MCP server, skill and hook counts are gone.
- The Vibe VS Code extension (ACP surface) now gets the same background session titles as CLI and Desktop; the sessions list shows the summarized title instead of the message preview
- The agent's subagent tools are renamed from
subagent.*toagents.*, and sessions saved with the old names still resume. - Plugins can no longer use the
agents,agentorcollaborationtool namespaces, which are reserved for built-in agent tools. - A programmatic tool call now stops after 60 seconds in total, and a single sleep inside it is capped at 30 seconds.
- Faster session startup when no MCP server is used.
- Vibe now requires Python 3.14 or newer (previously 3.12)
- Outbound HTTPS connections now validate certificate chains with stricter RFC 5280 rules; a private CA missing SKID/AKID or KeyUsage extensions may be rejected — set
enable_system_trust_storeor use a compliant CA - Vibe Code: the retry notice keeps counting the seconds past the planned retry instead of freezing until the provider answers, and screen readers get paced progress announcements
vibe -pJSON and streaming output mark each completed assistant message and reasoning with anoutcome: committed, or discarded with its cause.- The Rust TUI detects terminal activity reporting support to avoid duplicate title indicators and notification bells.
- Faster session startup, most noticeably on Windows and in repositories with many branches or tags.
Fixed
- Desktop local Code holds queued messages while editing without a timeout; Save and Cancel let the queue continue unless paused.
- Disconnecting during an unfinished queued edit keeps the original message and pauses the queue until Resume.
- In Vibe Desktop, the sidebar session list now only reorders when a new conversation turn starts, instead of jumping around on queued messages, steers, and permission answers.
- On Windows, the shell tools no longer auto-approve commands that use a mid-word
#, an escaped quote, or PowerShell quoting to hide part of the command from the approval check. - Multi-line edits to CRLF files no longer fail, and edited lines keep the file's line endings
- The Unified Harness no longer converts a CRLF file to LF when it overwrites it
- Sessions containing a large image no longer fail with a compaction error when the context is nowhere near full.
- Listing saved sessions (
/resumeand the Desktop session sidebar) is several times faster when you have thousands of sessions. - Rust CLI: scrolling with the wheel or a scrollbar no longer stutters or trails the pointer when the view is slow to redraw.
- Rust CLI: the smart approve mode now shows its warning-colored input border and cycles with Shift+Tab, matching the Python CLI.
- Automatic context compaction now shows a progress row in the transcript that settles to done, failed, or interrupted.
- The current input line no longer blinks with the cursor in the textual-dark theme.
- A suspended Rust CLI now dies when its terminal closes or it is killed, instead of lingering forever.
- Resuming a suspended session with shell
bgtwice no longer exits the CLI with an interrupted-syscall error. - Rust CLI: Fix shell MCP commands to support named URLs, static authentication, stdio servers, and timeout options.
- Rust CLI:
/mcpadd, login, logout, and status errors now show the server's reason. - Session meta.json records the active model and provider model name for Unified Harness sessions.
- Subagents now see connector tools in sessions whose connector catalog finishes loading after the session starts, and connector changes applied mid-session reach subagents spawned afterwards.
- Starting, resuming, or continuing another session no longer resets the shared host's resolved connector catalog to its start-time placeholder, so a session promoted after that keeps its connector grants.
- Rust CLI: config validation warnings that appear mid-session now surface as a toast, not only at startup.
- Very large tool outputs are truncated in the transcript, so sessions containing them can be previewed and resumed again.
- Rust CLI: A session preview that fails to load no longer closes the resume picker or makes the CLI unusable.
- Rust CLI: The
/renameusage tip and/mcp add --helpshow their<...>placeholders instead of dropping them. - A locked or unapproved macOS Keychain no longer hangs
vibe -pforever: the read gives up after 60s and the error says the Keychain could not be read instead of reporting a missing key. - Rust CLI:
-pruns announce on stderr when the API key comes from the keyring, fail if startup stalls, and print the server's error instead of a baresession/start. - When a third-party model declines a request, Vibe now says so instead of recording an empty reply.
- Sessions where a third-party model returned an empty reply no longer fail every later message with a 400 error.
- Sessions on GLM and other reasoning models get automatic titles again
- Rust CLI: Characters typed or pasted with AltGr on Windows (such as Polish
ą) are no longer dropped. - Rust CLI:
vibe -p --resume SESSION_IDcontinues that session instead of being rejected or starting a new one - Windows (Git Bash): the agent now uses
/c/...paths in shell commands instead of retrying several path spellings. - Ctrl+Shift+C copies the selection on terminals that report the shifted letter in uppercase.
- Text pasted while a picker or rewind is open no longer lands in the hidden prompt.
- Confirming a /model or /thinking pick after a turn has started, such as a /loop prompt firing while the picker is open, now saves it for the next turn instead of failing.
- Deleting the last saved session from
/resumenow confirms which session was deleted. - Restored the occasional feedback survey in Unified Harness sessions.
/confignow shows an error toast with the server's reason when saving or loading a setting fails, instead of silently doing nothing.- In Vibe Desktop, archiving a session now reliably removes its worktree once every session that used it is archived or deleted, without slowing the archive down.
- Vibe Code renders agent file edits as an inline diff in the chat panel again.
- Vibe Code restores the aggregate review panel on the unified backend.
- Rust CLI on Windows: pasting multiline text inserts it whole instead of sending each line as a separate message.
- Rust CLI: highlighted list rows no longer randomly lose their bold text.
- Rust CLI: Text no longer blinks or garbles in terminals without truecolor support, such as macOS Terminal.
- Rust CLI: Keep terminal status accurate across queued turns, overlapping dialogs, and interruptions.
- Smart approve now asks before a shell command whose redirect target it can place outside your workspace and temporary directories, or cannot place at all, even when the command looks like it only reads.
- Answers stream live again when a
post_agenthook is configured, instead of appearing all at once when the turn ends. - The
title_prompt_idsetting now also applies to session titles in Vibe Desktop and in the CLI's default harness. - Starting the interactive CLI or the
vibe updateprompt without a terminal (e.g.nohup vibe > /dev/null 2>&1 &) now exits with an error instead of running forever at full CPU. - The review diff refreshes when a shell command changes a tracked file mid-turn
- Interrupts that arrive while a turn is starting are delivered instead of dropped
- Cancelling a prompt no longer hangs the agent shutdown
- A
greporrgshell command run by the agent shows its matches as a file-search result with clickable file chips - Git timeouts while reading project context are now enforced on Windows.
- Recent commit messages in the project context are no longer truncated at their first parenthesis.
Removed
- Removed harness selection flags and rollout settings. Vibe, ACP, app-server, Desktop, and IDE sessions now always use the Unified Harness.
- Removed the retired legacy execution runtime while preserving Unified execution and read-only imports of Vibe 2.0+ session folders (meta.json and messages.jsonl). Vibe 1.x single-JSON sessions are no longer supported.
- Removed the unused app-server RPCs tools/list, stats/read and diagnostics/list.
- The legacy Python TUI and the
VIBE_CLIenvironment variable:vibealways starts the Rust TUI. - Plan mode: the
planagent and theexit_plan_modetool.