---
title: "Changelog (Stable)"
description: "Release notes for the stable channel"
---

## 2026.7.16

### Plugins

Install bundles of skills from a GitHub repo, a git URL, or a local folder, and share them across projects. A plugin is any source containing a `.devin-plugin/plugin.json` manifest and a `skills/` directory; its skills become available as `/<plugin>:<skill>`. A plugin can require other plugins (installed automatically), endorse optional ones, and forbid others — so a plugin can act as a curated, governed collection. Plugins are in beta and opt-in for enterprises, so behavior and configuration may change in future releases. See the [plugins overview](/cli/extensibility/plugins/overview) for details.

### Enterprise controls

Expanded controls for admins to govern what Devin Local can do and which tools it can reach.

- Teams can define terminal command allow/deny lists, enforced through CLI permission scopes with exact-command matching and `*` wildcards.
- Org-level control to disable Devin CLI plugins: when set, the CLI refuses to install or update plugins and skips the skills from any installed plugins.
- The "Disable CLI access" team setting is now enforced for Devin Local (the CLI hosted in Windsurf), including the bundled agent registry and the allowed-MCP-server allowlist.

### Added
- `devin plugins install <source>` installs a plugin (and its required plugins) from a GitHub `owner/repo`, a git URL, or a local path.
- `devin plugins list` shows installed plugins with their version and whether they are currently blocked by policy.
- `devin plugins info <plugin>` shows the skills a plugin provides and its required, optional, and forbidden lists.
- `devin plugins update [plugin]` re-fetches a plugin (or all plugins) at the latest version; local plugins are linked to their source folder so edits are live without re-installing.
- `devin plugins remove <plugin>` uninstalls a plugin, leaving any auto-installed required plugins in place.
- `forbiddenPlugins` entries accept glob patterns (e.g. `acme/*`, `*/secrets`, `https://gitlab.com/acme/*`) in addition to exact identities and the lone `*` lockdown.

### Changed
- Improved authentication in third-party ACP clients, including JetBrains and Zed: both browser and manual sign-in now use the Devin auth flow, so the manual `/login` fallback works where it previously failed.

## 2026.5.26-8

### Fixed
- Signing in to Devin now honors the `proxy` settings in `config.json` (`mode`, `url`, `no_proxy`). Previously the login token exchange always connected directly (apart from `HTTP_PROXY`/`HTTPS_PROXY` env vars), ignoring a configured `manual` proxy URL, `off` mode, and config-level `no_proxy`.

## 2026.5.26-7

### Fixed
- Custom HTTP headers are now forwarded through the MCP OAuth discovery and authorization flows, so MCP servers behind a gateway that requires extra headers (e.g. an authorization header) can complete OAuth sign-in.
- Built-in MCP OAuth strategies (such as Figma's) are now matched by issuer rather than gateway hostname, so they resolve correctly when the server is reached through a gateway or proxy.

## 2026.5.26-6

### Fixed
- IDE editor context (active file, cursor position, open tabs) now includes explicit relevance guidance, so the agent no longer treats passive code browsing as a request to act on the focused file.
- IDE editor context (active file, cursor position, open tabs) is now injected once alongside each user message instead of being repeated before every model response, so the agent no longer narrates whether the open IDE files are related to the request.

## 2026.5.26-5

### Fixed
- Starting Devin CLI and exiting without sending a message no longer leaves an empty "Untitled" session in `devin list`; sessions are saved once you send your first message.

## 2026.5.26-0

### Added
- Gemini 3.5 Flash model support.
- ATIF export (`--export --output-format atif`) now includes per-step token usage and cost data (`total_input_tokens`, `output_tokens`, `cache_read_tokens`, `cache_creation_tokens`, `committed_credit_cost`, `committed_acu_cost`, `generation_model`).
- New `/cloud-attach <session-id>` command to attach to an existing cloud Devin session with full TUI rendering (tool calls, messages, plans, file edits). The existing `/handoff` behavior is unchanged.
- New `/cloud-sessions [--all]` command to list recent cloud Devin sessions and their attachable session IDs.
- Custom subagent profiles can opt in to nested subagent spawning via the `max-nesting` frontmatter field, overriding the default depth limit.
- Supported editor integrations, including Windsurf, now show the agent which file you have open, your cursor position, and other open editor tabs as part of its context.
- `--export` flag for exporting conversation history in ATIF format.
- New `/fast` slash command to quickly switch to SWE-1.6 Fast, with pricing comparison against the current model.
- Figma MCP servers can now authenticate with `devin mcp add figma --url https://mcp.figma.com/v1` without additional configuration.
- When prompted for an MCP tool permission, two additional server-level options are now offered: approve all tools on the server for the current session, or permanently. This lets you grant broader access without re-approving each tool individually.
- Prompt navigation and collapsible command sections in terminals with shell integration. VS Code, Windsurf, Ghostty, iTerm2, kitty, WezTerm, and Windows Terminal users can now jump between prompts with keyboard shortcuts (e.g. Ctrl+Shift+Up/Down in VS Code), see prompt markers in the scrollbar, and collapse agent output sections (iTerm2). Prompt marks also survive session restore.
- Revert preview now shows line diff stats (`+N -M`) and a "View diff" button for all action types (restore, delete, recreate).
- `show_hints` config option to suppress "Did you know" tips between turns (default: on)

### Changed
- Long conversations are compacted earlier in the background so the agent spends less time pausing when context is nearly full.
- ATIF exports now include richer per-step transcript details, including telemetry, timing metrics, token counts, and cost information.
- Shell commands that continue running in the background after a timeout now report how long Devin waited before returning.
- The built-in Explore subagent can now use web search to research topics outside the codebase, in addition to its read-only codebase tools. It still cannot fetch arbitrary URLs or edit files.
- Homebrew installations are now externally-managed. The `/update` command will direct users to upgrade via `brew upgrade devin` instead of attempting self-update.
- HTTP MCP servers now try Streamable HTTP first and automatically fall back to legacy SSE when the server responds with an HTTP 4xx error, per the [MCP spec](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility).
- MCP OAuth callback pages now show Devin-branded success and failure screens instead of plain text.
- Renamed the product from "Devin for Terminal" to "Devin CLI" in user-facing UI, the REPL welcome and startup banner, slash command descriptions (`/bug`), bug report output, cloud handoff messages, version self-manage messages, tips, and public documentation. The binary name, config paths, and install URLs are unchanged.
- Revert preview now shows descriptive warnings for irreversible actions instead of empty placeholders.
- Read-only shell commands (e.g. `ls`, `cat`, `pwd`) no longer trigger irreversible action warnings during revert.
- Shell integration startup is faster, reducing noticeable delay when opening a shell.
- Trimmed the first-run welcome message for Devin CLI.
- Windows: default non-interactive shell is now PowerShell instead of Git Bash. Git for Windows is no longer required to run Devin CLI on Windows.

### Fixed
- Image attachments in Windsurf now show the correct warning when the selected Devin CLI model does not support images.
- Responses silently truncated when the model hits its max output token limit now show a warning and exit non-zero in pipe mode instead of returning partial output as if complete.
- Persist the reduced trailing-image cap across turns after HTTP 413; prevents the cap from resetting to 20 each turn and triggering repeated 413 cycles
- Re-encode bmp/tiff/ico images to PNG at the message-forest chokepoint instead of forwarding them to Anthropic with an unsupported `mime_type`, which surfaced as `messages.N.content.0.image.source.base64.media_type: Input should be 'image/jpeg', 'image/png', 'image/gif' or 'image/webp'` 400 errors.
- Drop oversize (>5 MB) images whose bytes can't be fully decoded instead of passing them through verbatim, which surfaced as `image exceeds 5 MB maximum` 400 errors.
- Typing into a multiple-choice question's "Other (type your own)" field no longer drops `e`/space or treats `j`/`k`/digits as shortcuts; all characters now insert into the answer.
- Plan mode is now available when your organization requires sandbox mode. Previously `/plan` and `/mode plan` were rejected with "Plan mode is not available", even though plan mode is read-only.
- Pre-user-prompt hooks that exit with code 2 now correctly block the prompt instead of being silently ignored.
- Reverting a step no longer reports a spurious "file was modified externally" conflict for files where the agent's edit was rejected in the IDE.
- Reverting or editing a cancelled prompt (stopped before any output streamed) no longer fails with "could not resolve step."
- Sandbox mode no longer leaves empty ghost dotfiles (`.bashrc`, `.gitconfig`, `.mcp.json`, etc.) in the project directory after commands finish.
- The in-session `skill` tool now finds skills behind symlinked directories under `.windsurf/skills/`, `.agents/skills/`, and `.claude/skills/`, matching `devin skills list`.
- `/handoff` now collects untracked files from the entire repository, not just the current subdirectory
- `/handoff` now includes untracked files in the git diff sent to cloud Devin, not just tracked changes
- "Always Allow" permission grants in Windsurf now persist across sessions. Previously, selecting "Always Allow" in the ACP permission dialog only granted the scope for the current session.

## 2026.5.6-1

### Web search

Search the web directly from your Devin CLI sessions. The agent can
look up documentation, find solutions, and pull in relevant information
from the internet without leaving the terminal.

### Added
- Built-in OAuth device flow for GitHub MCP server. `devin mcp add github --url https://api.githubcopilot.com/mcp/` now authenticates via device flow (enter a code at github.com/login/device) without needing `--oauth-client-id`.
- `/copy` command to copy the last agent response to the system clipboard. Works over SSH connections and on Linux desktops.
- Numbered options in select prompts can now be picked directly with the `1`-`9` keys instead of arrowing + Enter. The shortcut is shown as a digit prefix on each option in non-search prompts.
- `web_search` tool for searching the web during agent sessions.

### Fixed
- Cancelling a session now also stops running subagents instead of letting them continue in the background
- Shell commands that redirect output to `/dev/null` (e.g. `2>/dev/null`, `>/dev/null`, `&>/dev/null`) no longer prompt for write permission to `/dev/null`.
- Edit tool previews now show correct file line numbers instead of always starting from 1.
- Output token limit raised from 16k to match each model's actual capacity (128k for Opus, 64k for Sonnet), preventing premature response truncation.
- Option+Backspace now correctly deletes words in select menus (user question "Other" field and search) on BS-mode terminals, instead of inserting 'h'.
- Slash command output now has consistent visual separation from the prompt, matching how agent responses are displayed.

## 2026.5.5-0

### Added
- `skill search` can find model-invocable skills recursively under a project path and filter them by keywords.

### Changed
- Default model is now SWE 1.6 Fast instead of Adaptive.

### Fixed
- `apply_patch` diffs now appear incrementally as the patch is being written, not just after it completes. Both new-file and modify-existing-file patches show diffs progressively.
- Command hints now show the binary name used to launch Devin CLI when run through a renamed binary, symlink, or alias.
- Fixed process hang when MCP OAuth dynamic client registration fails. The local callback server was not properly shut down on error, causing the process to block indefinitely waiting for a browser redirect that would never arrive.
- `/steps`, `/revert`, and `/fork` now show and work with steps from before compaction. Previously, compacting a session made all earlier steps invisible and unrevertible.
- Text now correctly appears before tool calls in scrollback when both are produced in the same streaming turn.

## 2026.4.30-4

### Fixed
- `/usage` command now shows quota % remaining and overage balance for quota-billing users instead of "no credits consumed."

## 2026.4.30-0

---
bumps:
  chisel: minor
  config-importers: minor
---

Added MCP config import support for OpenCode, VS Code, and Zed editors.
Added Cursor global MCP config loading (`~/.cursor/mcp.json`).
New providers can be toggled via `read_config_from` in user config.
### Added
- File edits from `apply_patch` now display as inline diffs in Windsurf, matching the diff preview already shown for the `edit` tool.
- `/login-status` command to show login debugging info (email, plan, team).

- New `post_compaction` hook event that fires after context compaction, with the compaction summary available on stdin.

### Changed
- Permission prompts now use clearer wording for always-allow command choices and can offer switching to Bypass when allowed by org policy.
- Background shell commands now render as a single exec card with a spinner instead of showing separate "Command Read" / "Killing shell" cards for each `get_output` and `kill_shell` poll.

- Ctrl+L now clears the screen properly, like bash and other shells. Visible content is scrolled into the terminal's scrollback buffer so you can still scroll up to see it. Full redraw (re-render all content from scratch) moved to Ctrl+Shift+L.
- Startup banner no longer shows the user's email address.

- Resuming a session from a different directory now prompts you to choose between the session's original directory, switching permanently to your current directory, or using your current directory just this time.
- Improved streaming view for model output.

- Updated the startup braille logo to match the design on devin.ai/terminal.

### Fixed
- Resuming a Windsurf session with `devin -r` now shows the conversation history instead of a blank screen.
- MCP OAuth discovery now works with POST-only servers and servers whose `.well-known` paths are behind SSO.
- Resuming a session now correctly restores the selected mode (Plan, Ask, Code) instead of silently reverting to Code.
- Skill discovery no longer picks up duplicate skills from nested configuration directories inside skill folders, reducing token usage at session start.
- Shell integration setup (`devin shell setup`) is now available for enterprise accounts.

## 2026.4.24-9

### Fixed
- Opt+backspace no longer inserts 'h' on terminals that send BS for backspace.

## 2026.4.24-1

### Interactive step picker for `/revert`

`/revert` with no arguments now opens an interactive searchable picker showing all conversation steps. Select a step to revert to it. Double-tap Esc while the agent is idle to open the same picker.
### Added
- MCP servers configured with `"transport": "sse"` (legacy SSE protocol) are now fully supported. Previously, these servers were rejected with an error; they now connect via the legacy SSE protocol (GET for event stream, POST for messages). Stored OAuth tokens are injected automatically, and 401 responses trigger the interactive OAuth flow.
- Terminal notification (bell + desktop notification) on successful authentication, making it easier to return to the terminal after logging in via the browser.
- `/btw <prompt>` asks the agent a quick side question using the current conversation context. The answer streams into a box below the agent's output without adding the question to the main conversation, so you can check in without disrupting what the agent is working on.

- `devin cloud drs` subcommands for managing environment blueprints, sandbox sessions, and builds directly from the CLI.
- First-startup welcome box with tips for getting started in Devin for Terminal.
- Git provider connection prompt during `devin setup`: detects locally logged-in `gh` CLI accounts and offers to connect them to Devin, or open the browser to set up a GitHub App or other provider.

- Typing `&` on an empty prompt enters handoff mode, a shortcut for `/handoff` that mirrors the `!` bash-mode pattern.
- Context-aware placeholder text in the input field guides users based on agent state: prompts to ask Devin for help when idle, suggests guiding Devin while it works, and indicates how to send queued messages.
- Support disabling individual MCP tools per server via `disabledTools` in the MCP config. Disabled tools are hidden from the agent and rejected at call time.
- `devin mcp enable` and `devin mcp disable` subcommands to toggle MCP servers on/off without removing them. Supports `--scope` (user, local, project). Disabled servers show with a `(disabled)` label in `devin mcp list` and a status line in `devin mcp get`.
- Support for MCP servers that require a pre-registered OAuth client (e.g. GitHub). Pass `--oauth-client-id` (and optionally `--oauth-client-secret`) to `devin mcp add` and `devin mcp login`, or set `oauthClientId` / `oauthClientSecret` in your MCP config.
- Organization selection is now part of the setup wizard. Users with multiple Devin organizations are prompted to choose one during onboarding; single-org users are auto-selected.
- `/org` command for selecting a Devin organization from the terminal.

- Option to hand off a plan to a cloud Devin session when exiting plan mode, available for users signed in with a Devin account.
- `Ctrl+R` fuzzy search for inserting previous prompts into the input box.
- Proxy configuration section in `config.json` for controlling how the CLI routes outbound HTTP traffic. Set `proxy.mode` to `"system"` (default), `"manual"`, or `"off"`, provide a `proxy.url` for manual mode, and use `proxy.no_proxy` to bypass specific hosts.
- Add `terminal-light` and `terminal-dark` theme names for 16-color terminal themes. `16color` and `terminal-colors` remain supported for backwards compatibility with `terminal-dark`.
- `/theme` accepts an optional theme name, such as `/theme dark` or `/theme light`.
- When opening the CLI inside a repo that has a Devin wiki, the wiki is now downloaded in the background and made available to the agent on subsequent sessions, so it can answer project questions using an explore subagent.

### Changed
- Browser authentication pages redesigned to show a connection status between your computer and Devin, matching the devin.ai website style.
- Login and API-key authentication labels now use Devin or generic API-key wording instead of legacy Windsurf-only wording.
- Code mode now auto-approves file edits in workspace directories. The separate "Accept Edits" mode has been folded into Code; both display as "Code" in the mode picker, with the auto-approval variant used when the org policy allows it.
- The default model is now Adaptive, which automatically routes each turn to the best model for the task. You can still pick a specific model with `/model` or by setting `agent.model` in your config.

- Declarative Repo Setup (DRS) is now a builtin agent skill instead of a `/drs` slash command. The agent automatically invokes it when you ask about environment setup. The `devin cloud drs` subcommands continue to work as before.
- Shell command previews use clearer titles and show commands with a prompt prefix in the preview body.

- Cloud handoffs now send gathered terminal context in an expandable section.
- `/handoff` now stops when the selected organization has no connected git provider and asks the user to run `devin setup` before retrying.
- New Devin CLI sessions use memorable word-pair IDs.
- Model picker now shows labeled pricing (e.g. "$5 / MTok In · $25 / MTok Out") on the highlighted model instead of unlabeled dollar amounts.

- Slash commands now show confirmation messages when switching models, themes, or modes via the interactive picker.
- Cleaned up slash command output: removed unnecessary colors, improved spacing, and simplified progress messages.

- Improved how freeform "Other" answers are handled in agent questions. Typed responses that don't match a predefined option are now recognized as custom answers automatically.

- `/resume` now opens the interactive session picker when run without a session ID.
- Rule files use tighter injection limits and switch to path-only guidance when triggered rules exceed the available context budget.
- Selection prompts now use a neutral highlighted row with clearer contrast and show item descriptions consistently.

- Normalized tool preview verb tenses: streaming previews now use present progressive ("Editing file.rs") and completed previews use past tense ("Edited file.rs").
- Status messages (warnings, errors, tips) now render through the Alert component with proper icons and theme-aware colors.
- Added meaningful titles to error messages: "Something went wrong", "Quota exhausted", "Turn limit reached", "Couldn't open browser".
- Standardized "cancelled" spelling to "canceled" (one L) in all user-facing strings.
- "Connection lost, retrying..." replaces "Inference failed mid-stream, retrying...".
- Muted text is now easier to read in both dark and light themes.
- Multiple-choice questions now use the same selection UI as other CLI prompts, including typed custom answers.

### Fixed
- File writes from `apply_patch` now appear in the agent timeline / worklog alongside writes from the `write` and `edit` tools.
- Long sessions exit more quickly when shutting down.
- Code blocks no longer lose their last character when text fills the terminal width.
- Input responsiveness while the agent is actively streaming events.
- Numbered lists in rendered markdown now show numeric markers (`1.`, `2.`, `3.`) instead of bullet points.

- OpenAI reasoning models no longer fail when a request configures temperature.
- Prompt history opens while Devin is running, including when completions are visible.

- Todo list no longer disappears after the agent finishes updating it.
- `/upgrade` opens Devin plans instead of Windsurf pricing.

- Opening a session database that was written by a newer CLI now shows a clear "please run `devin update`" message instead of a raw "migration is missing from the filesystem" error.

- `/handoff` now sets the repo via the session config option and tags the session as "Terminal".
- Model picker search no longer replaces family grouping with individual variants.
- The "Update vX available!" banner is no longer shown when background auto-update is going to install the new version on its own. It now only appears when the user has to take action (e.g. externally managed installs, or when auto-update has been disabled).
- File and code snippet references now render as readable paths instead of raw XML tags.

## 2026.4.17-0

### Background auto-updates

On macOS and Linux, new releases are now downloaded and activated while Devin for Terminal runs, so the next invocation picks up the latest version automatically. Quitting mid-update is safe and cannot leave the installation in a broken state. Opt out by setting `"auto_update": false` in `config.json`.
### Interactive config editor

`/config` opens an interactive in-terminal config editor with tree navigation, search, and type-aware value editing.
### `/handoff` to cloud Devin

The `/handoff` slash command is now generally available. Hand off a task to a remote Devin session with live status updates showing what the agent is currently working on.
### Searchable model picker

The model picker now has a searchable interface: type to filter models, navigate with arrow keys, and see pricing info at a glance.
### Added
- Support for adaptive and model-router selections, which now resolve to concrete models automatically during inference.
- Detailed login info in `devin auth status`: login method, user name and email, user ID, team ID, plan and tier, and cached team settings.
- Added a tray panel listing running background shells. Press the down arrow from the input to open it, navigate with up/down, and press `x` to kill the selected shell.
- Support for an enterprise-configured default model. Admins can set a team-wide default model for new sessions via the Windsurf or Devin enterprise admin dashboards.
- Added keyboard selection in the cloud agents tray: use the arrow keys to pick a cloud agent and press Enter to open its session in the default browser. The session URL is still shown below each entry as a fallback when a browser can't be launched.
- Enforcement of the organization's "Auto run terminal commands" setting. Enterprise admins can now restrict which permission modes are available to CLI users — for example, preventing selection of Bypass mode when the org policy is set to "Auto" or below.

- Added a way to flush queued messages to the agent immediately by pressing Enter on an empty input box while the agent is busy, so they're picked up as soon as the current tool call finishes (without interrupting it).
- `/handoff` now attaches the local git diff to the Devin session, giving it visibility into uncommitted changes.
- Interactive organization picker for `/handoff` when no org is configured, replacing the previous error that required manual config editing.
- `legacy_terminal` config option for VT100 terminal compatibility, disabling keyboard enhancement probing, OSC sequences, and theme auto-detection.
- `disable_osc` config option to independently control OSC sequence emission (terminal titles and hyperlinks).
- `skip_workspace_trust` config option to bypass workspace trust prompts.

- Per-model token pricing in the model selector, showing input and output cost per million tokens.
- NEW, PROMO, and BETA badges in the model picker for models flagged by the server.
- Relative cost tier (Free / $ / $$ / $$$) as a fallback description when per-token pricing is unavailable.
- Added `/rename-session` slash command to rename the current session.
- Added `/revert <step>` command to undo file changes back to a specific conversation step
- Added `/steps` command to list conversation steps for use with `/fork` and `/revert`
- Added optional `[step]` argument to `/fork` to branch from an earlier conversation point
- Shift+Insert now pastes from the clipboard, matching the standard X11/Linux paste shortcut.

### Changed
- `/bug` now clarifies that the report is sent to the Devin for Terminal developers.

- Improved model selector with compact single-height items, a visible search input border, and streamlined pricing display for the selected model.
- Unknown slash commands now show "did you mean?" suggestions based on similar command names.
- Styled `/handoff` status lines with the standard animated spinner and muted text, replacing the static half-circle symbol and blue accent color.

- `/handoff` can now be used without arguments. It summarizes the current conversation and hands off to a remote Devin session to continue the task.
- Error message when switching to an unavailable permission mode now explains that sandbox mode restricts available modes and whether the restriction is enforced by the organization.
- Model name below the input box now uses the default text color instead of blue.
- Login experience streamlined: the spinner now offers "Press Enter to paste a token manually instead" and the manual-token path prints a single concise line instead of a multi-step wall of text.
- "Logging in with Windsurf. If the browser didn't open..." preamble removed from the login spinner.
- Plan mode approval prompt now shows plan-specific options: "Yes, implement plan and accept edits", "Yes, implement plan and bypass permissions", and "No, plan needs changes".
- "16-color" theme renamed to "Terminal colors" to clarify that it inherits your terminal emulator's color scheme.
- Session resume picker (`devin -r`, `devin list`) now has a searchable type-to-filter interface, matching the model selector experience.
- Updated the tray panel to always show both Cloud agents and Subagents tabs, with an empty-state hint describing the other feature when a list has no entries.
- Subagents and cloud agents tray panels now sort in reverse chronological order so the most recently launched agent appears at the top.
- Always-on rule files (such as `AGENTS.md`) injected into context are now capped at 32 KiB each. Oversized rules are truncated with a hint pointing at the source path so the agent can read the full file on demand.

### Fixed

- Errors from upstream servers (quota exhaustion, 5xx responses, connection drops, etc.) now show up as legible warnings in the REPL with a retry hint instead of raw `Error: …` text, and reach ACP clients with a typed cause so they can render them with the right severity.
- Honored user `deny` / `allow` / `ask` permission rules (including `Read(...)` and `Write(...)`) in Devin for Terminal running inside Windsurf, matching standalone CLI behavior.
- Unnecessary compaction is no longer triggered on every turn when using the adaptive model.

- Logo now appears above conversation history when resuming a session, matching the layout of a fresh session.
- `/add-dir` on Windows no longer mangles paths containing backslashes. Both `D:\Source\Project` and `..\Project` forms now work correctly.
- Startup banner text alignment is now correct on continuation lines at narrow terminal widths.
- Day-of-week is now correct when asking for the current date.

- Compound shell commands are now blocked when they include a command you've denied in your CLI permissions.
- Fixed selected/highlighted UI elements (like active question tabs, selected image attachments, and selected subagents) rendering with the same text color as un-highlighted text, making them hard to distinguish.
- MCP servers configured with `"transport": "sse"` now fail with a clear error explaining that legacy SSE is unsupported, instead of silently connecting over the wrong transport.
- Unnecessary permission prompts for shell commands no longer appear in autonomous mode with sandboxing enabled.

- Clarified in the docs and `devin skills paths` output that on Windows, global skills live in `%APPDATA%\devin\skills\` instead of `~/.config/devin/skills/`.
- Cursor positioning now uses VT100-compatible sequences (CR + CUF) instead of CHA, which is not supported by all terminals.
- Tips and spinner symbols now respect the ASCII mode setting.

- Fixed the browser login page to only say "Authentication Successful" once sign-in actually completes, and show a failure page when it doesn't.
- Unrecognized slash commands now show an error instead of being sent to the model.
- Clear install-instructions error when `socat` is missing on Linux, instead of failing silently.
- File edits in the same turn no longer occasionally overwrite each other.

## 2026.4.9-0

### Read-only tools allowed by default

Read-only tool calls (file reads, grep, glob, thinking) are now always allowed and no longer surface a permission prompt. User-, project-, and organization-configured deny rules still take precedence, so you can still restrict reads to sensitive paths.
### `.devin/hooks.v1.json` support

Define pre- and post-command hooks in a standalone `.devin/hooks.v1.json` file using the same format as Claude Code hooks.
### `devin mcp add` overhaul

`devin mcp add` now matches Claude Code's syntax: positional URL argument (e.g. `devin mcp add notion https://mcp.notion.com/mcp`), inferred transport from `--url` (HTTP) or trailing args (stdio), default scope changed from `user` to `local` (writes to `.devin/config.local.json`, gitignored), and new short flags (`-t`, `-s`, `-e`, `-H`).
### Agent mode and permission mode separation

Agent profiles (normal, plan, ask) and permission modes (normal, accept edits, bypass, autonomous) are now two independent controls. Profiles are switched via `/plan`, `/ask`, `/normal` slash commands. `/plan <prompt>` switches to plan mode and immediately sends the prompt in one step. Permission modes are cycled with Shift+Tab or `/mode`.

### Live streaming tool previews

Tool calls now appear immediately as arguments stream in, showing structured titles and content (diffs for edits, code blocks for writes, commands for exec) instead of waiting for the full request.
### Terminal notifications

The CLI now sends terminal notifications when the agent finishes, needs input, or requests tool approval. Triggers dock badge and notification banners in supported terminal emulators. Controlled by the `notify` config option: `"never"`, `"smart"` (default, only when unfocused), or `"always"`.
### Added
- Added structured form-based input support when connected to ACP clients that advertise elicitation capability.
- Added inference tool name metadata to ACP tool call events so ACP clients can make per-tool presentation decisions (for example, hiding the arguments panel for internal tools).
- Enabled the `devin acp` subcommand on stable and next, so any released build of Devin for Terminal can be launched as an Agent Client Protocol server by ACP-aware editors.

- Added `/ask`, `/compact`, `/context`, and `/undo-add-dir` slash commands for ACP clients (e.g. JetBrains).
- Expanded `/help` output in ACP sessions to list all built-in commands and discovered skills.

- Show subagent activity and lifecycle events in the Windsurf UI.
- Made the "Mode:" and "Model:" labels in the footer clickable to open their selector menus
- Added mouse support to selector menus: click to select, scroll wheel to navigate, hover to highlight
- Autocomplete for `/continue` and `/rm-session` commands showing recent sessions with ID prefix, time ago, and title.
- `--force` flag on `devin update` and `/update` to force re-install even when already on the latest version.

- Added interactive OAuth support for MCP servers — when an MCP server requires authentication, the browser opens automatically and a status message appears in the REPL.
- `/new` as an alias for `/clear` to start a fresh conversation.
- Active permission level in the top border of the input box.

- Thumbs up/down feedback for agent responses via `Alt+↑`/`Alt+↓` and `/feedback`.
- `respect_gitignore` config option to control whether the agent respects `.gitignore` when accessing files via tools (default: off). Separate from `include_gitignored_files`, which only affects `@` tab completion.
- `/resume` as an alias for `/ls` (list recent sessions).
- Subagent prompt in the expanded view (Ctrl+O) when a subagent completes.
- Live streaming of subagent actions while waiting on a foreground subagent or a `read_subagent` call.
- `/session-stats` command to display cumulative session statistics (tool calls, files changed, commands run, tokens, model, request ID).

### Changed

- Changed workspace directory updates via ACP to use replacement semantics, enabling directory removal through the config option.
- Made `/ask <question>` a one-shot command matching REPL behavior: temporarily switches to Ask mode, submits the question, then restores the previous mode.
- Made session troubleshooting easier in Windsurf by showing diagnostic logs directly in the output panel.
- Presented related agent questions in a single paginated form instead of one at a time.
- Improved the plan mode exit approval with a dedicated review UI showing the plan summary and contextual button labels.

- Improved Windsurf hook scripts to receive richer tool information on stdin, including edit details, MCP tool results, and assistant responses
- `devin mcp add` no longer requires `--transport` or `--command` for the common stdio case — transport is inferred from `--url` (HTTP) or trailing args (stdio), and the first trailing arg is used as the command when `--command` is omitted
- `/mode` now opens an interactive dropdown selector (like `/model`) instead of printing a static list. Use arrow keys to navigate, Enter to confirm, Esc to cancel.
- `-p`/`--print` now accepts an optional inline prompt, so `devin -p "fix the bug"` works without needing the `--` separator. The old `devin -p -- fix the bug` syntax continues to work.
- Shortened the "always allow" label for command permission prompts to "Always allow `<cmd>` commands in `<workspace>`", where `<workspace>` is just the last path element of the workspace directory, so it no longer overflows narrow terminals or ACP client UIs when the workspace path is long.
- `/mode` now opens an interactive dropdown selector (like `/model`) instead of printing a static list. Use arrow keys to navigate, Enter to confirm, Esc to cancel.
- Plan mode exit approval now has a dedicated review UI showing the plan summary and contextual button labels.


- Removed the brand colors from the startup logo so it uses the terminal's default foreground color.
- Truncation notices now include a "(ctrl+o to expand)" hint.
- Consolidated the mode and permission pickers into a single unified mode selector in Windsurf. The available modes are now Code, Ask, Plan, Accept Edits, and Bypass Permissions.
- Each Devin CLI channel now reads Windsurf config (MCP servers, skills) from its matching channel-specific directory under `~/.codeium/`

### Fixed

- Fixed ACP sessions to require host-provided credentials instead of silently falling back to local CLI credentials, ensuring usage is properly attributed to the correct account.
- Preserved streamed shell command output in ACP chat UIs so it stays visible after the command completes, with the exit code shown alongside instead of replacing the output.
- Session mode selector now updates immediately after choosing "switch to accept edits" from a permission prompt.
- Skipping a tool call in Windsurf no longer stops the agent — the LLM now sees the rejection and can try an alternative approach
- Tool failure messages now show the error reason in Windsurf instead of just "Failed" with no explanation.

- Fixed `/add-dir` and `/undo-add-dir` failing to handle directory paths containing spaces. Slash command arguments are now parsed with shell-style quoting (e.g. `/add-dir "my dir"` or `/add-dir my\ dir`), and tab completions automatically escape spaces in directory names.

- Fixed excessive line spacing in the ASCII mode startup banner.
- Long-running shell commands like dev servers now start reliably without blocking subsequent work.

- Fixed bypass mode not auto-approving MCP `read_resource`, computer use, recording, and browser tools due to incorrect permission scopes.
- Fixed autonomous mode silently auto-approving privacy-sensitive tools (computer use, recording, browser) that operate outside the OS sandbox.
- Fixed browser screenshot path authorization mismatch when the screenshots directory was relative.

- Fixed wide character (CJK/emoji) display corruption when deleting characters adjacent to them.
- Fixed "always allow" for command permissions silently failing to persist when running outside a git repository.
- Improved text visibility when the terminal background doesn't match the selected color theme.
- Fixed alphabetic sorting in directory completion menus so that shorter directory names sort before longer ones that share the same prefix (e.g., `devin/` now correctly appears before `devin-docs/`).
- Shell command output is no longer lost after long terminal sessions with extensive scrollback.

- Fixed injected lint diagnostics appearing as fake user messages when reopening a saved session.

- Fixed an issue where the agent would not automatically review and fix lint errors detected after code edits.
- Improved lint error presentation with more detailed information including severity level, source, and precise location.
- Added a safety cap on lint-fix injection count to prevent infinite loops when a lint cannot be resolved.
- Separated new and persistent lint errors with distinct instruction text so the agent understands which lints it has seen before.
- ANSI color escape codes are no longer written to log files or piped stdout/stderr. Colored output is only emitted to real terminals and respects the `NO_COLOR` environment variable.
- Mode is now properly restored on session resume.
- Session resume no longer drops early conversation messages after multiple compaction rounds.
- Permission mode no longer resets unexpectedly mid-session.
- Sandbox sessions no longer revert from autonomous to normal mode when exiting plan mode.
- Code diffs and other rich tool call content no longer disappear from edit/write tool calls after reloading a session in the replay UI.
- `shell run` no longer leaves the terminal in a bad state after exit.
- Fixed silent crashes when a corporate proxy or firewall resets a network connection mid-session.
- Ctrl+C now exits quickly even when the network connection is slow or stalled.
- Session and always-allow choices in permission prompts now work correctly for terminal commands that also write files.

- Thinking output now always renders before content when a model skips the `ThinkingComplete` event
- Malformed tool-call error messages now point to the specific field and expected value type.
- Windows no longer shows double authentication prompts during initial setup.
- Windows installer now places files in the correct directory so PATH resolves properly.
- Windows config file location is now clearly documented as `%APPDATA%\devin\config.json` instead of `~/.config/devin/config.json`.
- Grep now searches hidden files like `.env` and `.github/`, matching the behavior of `rg --hidden`. The `.git/` directory remains excluded.
- Large images (over 5 MB) no longer fail to send.
- Local shell commands no longer continue running in the background after a session is interrupted or cancelled.
- Preserved rich mention rendering (e.g. `@README.md` chips) when resuming a session, instead of showing raw markdown text.

### Removed
- Removed the in-REPL overage status indicator banner
- "Thought for Xs" duration display no longer appears in the REPL scrollback.

## 2026.4.1-4

### Removed
- In-REPL overage status indicator banner is no longer shown.

## 2026.4.1-3

### Added
- Warning when your account is in overage so you know requests are being billed to your team's prepaid balance.
- `/usage` command to show Windsurf credits and ACUs consumed during the current session.

## 2026.4.1-2

### Fixed
- The installer now accepts existing `~/.local/bin/devin` symlinks pointing to the legacy `~/.local/share/cognition/cli/...` path and refreshes them correctly after the cognition-to-devin migration.

## 2026.4.1-1

### Fixed
- Wide character (CJK/emoji) display corruption no longer occurs when deleting characters adjacent to them.

## 2026.4.1-0

### Added
- Show subagent activity and lifecycle events in the Windsurf UI.
- "Mode:" and "Model:" labels in the footer are now clickable to open their selector menus.
- Mouse support in selector menus: click to select, scroll wheel to navigate, hover to highlight.
- Autocomplete for `/continue` and `/rm-session` commands showing recent sessions with ID prefix, time ago, and title.
- Added `--force` flag to `devin update` and `/update` to force re-install even when already on the latest version.

- Added support for reading hooks from `.devin/hooks.v1.json`, a standalone hooks file using the same format as Claude Code hooks

- Show subagent prompt in the expanded view (Ctrl+O) when a subagent completes.
- Stream subagent actions in the live display while waiting on a foreground subagent or a `read_subagent` call.

- New `notify` config option that controls terminal notifications when the agent finishes, needs input, or requests tool approval. Set to `"never"`, `"smart"` (default), or `"always"`. In `smart` mode, notifications are only sent when the terminal window is unfocused. Triggers dock badge and notification banners in supported terminal emulators.

### Changed
- `devin mcp add` no longer requires `--transport` or `--command` for the common stdio case — transport is inferred from `--url` (HTTP) or trailing args (stdio), and the first trailing arg is used as the command when `--command` is omitted
- `/mode` now opens an interactive dropdown selector (like `/model`) instead of printing a static list. Use arrow keys to navigate, Enter to confirm, Esc to cancel.

- `-p`/`--print` now accepts an optional inline prompt, so `devin -p "fix the bug"` works without needing the `--` separator. The old `devin -p -- fix the bug` syntax continues to work.
- Added "(ctrl+o to expand)" hint to truncation notices so users know how to view full output.

### Fixed
- Skipping a tool call in Windsurf no longer stops the agent — the LLM now sees the rejection and can try an alternative approach
- Tool failure messages now show the error reason in Windsurf instead of just "Failed" with no explanation.
- `/add-dir` and `/undo-add-dir` now handle directory paths containing spaces. Slash command arguments are parsed with shell-style quoting (e.g. `/add-dir "my dir"` or `/add-dir my\ dir`), and tab completions automatically escape spaces in directory names.
- "Always allow" for command permissions now persists correctly even when running outside a git repository.
- Text visibility improved when the terminal background doesn't match the selected color theme.
- Alphabetic sorting in directory completion menus now correctly places shorter names before longer ones with the same prefix (e.g. `devin/` before `devin-docs/`).
- Mode is now properly restored on session resume.
- Silent crashes no longer occur when a corporate proxy or firewall resets a network connection mid-session.
- Thinking output now always renders before content when a model skips the `ThinkingComplete` event.

- Fixed double authentication prompts on Windows during initial setup.
- Fixed Windows installer placing files in the wrong directory, causing PATH to point to the wrong location

- Fixed large images (over 5 MB) failing to send.

## 2026.3.20-2

### Added
- Add `16color` and `nocolor` theme modes. `16color` quantizes output to the 16 ANSI color palette (respects terminal color scheme). `nocolor` disables all color output for VT100 and other monochrome terminals.
 - Support multi-root workspaces with additional directories beyond the session working directory.
 - Add `/workspace` and `/add-dir` slash commands for listing and adding workspace directories at runtime.
 - Add `workspace-dirs` config option for setting workspace directories programmatically.
- Add Ask mode (`/ask`) for read-only question answering without code changes
- Add `/bug` slash command for submitting bug reports from the stdio server

 - Display a persistent warning banner when running in Windows Conhost, recommending Windows Terminal or Git Bash for a better experience.

- `Ctrl+Left` and `Ctrl+Right` now jump between words, matching standard Linux and Windows terminal behavior. `Ctrl+Backspace` and `Ctrl+Delete` delete words backward and forward respectively.
- Add custom subagent profiles: define specialized subagents with their own system prompts, tools, and models via `AGENT.md` files in your project's `agents/` directory (experimental)
- Add `subagent` and `agent` frontmatter fields for skills, allowing skills to run as independent subagents instead of inline (experimental)
- Add `include_gitignored_files` config option to include gitignored files in @ tab completion results (default: off)
- `/undo-add-dir` command to remove directories from the workspace.
- `/rm-session` command to delete sessions.
- Added `request_scope` tool for requesting read/write access to directories when running in sandbox mode
- Added sandbox mode system prompt that informs the agent about sandbox restrictions and how to request additional access
- The `--sandbox` flag and `devin sandbox setup` command are now available on all build channels (previously insiders-only)
- Add `unicode_mode` config option (`auto`/`unicode`/`ascii`) for terminals that don't support Unicode glyphs
- Add `devin version` subcommand as an alias for `devin --version`

### Changed
- Include the active interface mode in bug report details
 - Migrate all config, data, and cache directories from `~/.config/cognition/`, `~/.local/share/cognition/`, and `~/.cache/cognition/` to `devin/`. A backward-compatibility symlink is created at each old path so older sessions continue working.
 - Rename the project-level config directory from `.cognition/` to `.devin/`. Existing `.cognition/` directories are still read (with a deprecation warning) for backward compatibility.

### Fixed
- Hooks defined in `.claude/settings.json` are now loaded by the CLI (both project-level and global `~/.claude/settings.json`)
- Cmd+V now triggers clipboard paste in terminals that report it as a key event (e.g. when pasting non-text data like images)
 - Fixed panic when piping CLI output to commands that close early (e.g. `devin -p "..." | head`).
- Fix partial agent output (thinking and content) being silently dropped when the agent stops with an error during streaming

- Fixed image uploads failing when the file extension doesn't match the actual image format (e.g. a JPEG saved as `.png`). The MIME type is now detected from the image content rather than trusting the caller-supplied value.
- Fix `devin mcp login` failing against servers (e.g. Glean) that only allow `/auth/callback` as the OAuth redirect path
- Fix CLI freeze when pasting very long single-line text (e.g. JSON blobs, base64 strings) by collapsing pastes that exceed 5,000 characters
- Skills now display their true source path (e.g. `.agents/skills/`) instead of always showing `.devin/skills/`

- Fixed pasting text (Ctrl+V / bracketed paste) into slash command prompts like `/bug`
- Respect the `disabled: true` flag in MCP server configurations, so servers marked as disabled in Windsurf, Claude, or Devin config files are no longer loaded

## 2026.3.17-3

### Fixed
 - Load skills and agents from `~/.config/devin/` and `.devin/` directories as documented, in addition to the legacy `~/.config/cognition/` and `.cognition/` paths.

## 2026.3.16-0

### Added
- Add automatic generation of descriptive session titles.
- Add `CHISEL_LOG_STDERR` env var to direct log output to stderr
- Add PAC (Proxy Auto-Configuration) support on Windows and macOS. The CLI now respects system-level PAC settings and WPAD auto-detection, routing traffic through the correct proxy without requiring manual environment variable configuration.
- Add `!<command>` syntax to run shell commands directly from the REPL. Output streams in real-time and is automatically added to the conversation context for your next message. Typing `!` enters bash mode with a dedicated prompt and title indicator. Use Ctrl+C to cancel a running command.
- Display Devin logo alongside product info on CLI startup.

### Changed
 - The `/bug` command now automatically includes terminal environment info (`TERM_PROGRAM`, `TERM_PROGRAM_VERSION`, `TERM`) in bug reports.
- Change permission prompt default selection from "Yes, always allow" back to "Yes" (approve once)

### Fixed
- Fix "Always Allow" permission not persisting across tool calls when running inside Windsurf
- Fix enterprise team-enforced permission rules not being applied when running inside Windsurf
- Fixed `Co-Authored-By` commit trailer to use the correct GitHub App bot email instead of `noreply@cognition.ai`
 - Fix permission suggestions including file paths as part of the command prefix
   (e.g. `allow cat foo/bar/baz.txt` now correctly shows `allow cat`).
- Fix repeated "Context compacted" notifications when inference fails mid-stream and retries
- Fixed off-by-one error in edit tool's reported start/end line numbers when the edit is not at the beginning of the file
- Fix "always allow fetches to" permission not being recognized after restart

- `mcp_list_tools` now includes the `input_schema` for each tool, so the agent can discover parameter requirements without needing to trigger a tool call error first.
- Fix `devin mcp login` failing on servers that use RFC 8414 OAuth discovery instead of RFC 9728 (e.g. Atlassian)
 - Fix pasting text that starts with `#` (e.g. markdown headings) being silently dropped.
- Fix spinner disappearing after a sub-agent completes while the main session is still running
- Fixed layout shift in the startup banner where text jumped when account info loaded
- Fixed stray `<` character appearing at the start of terminal output on headless environments where `TERM=dumb`
 - Fixed missing whitespace in thoughts.
- Allow long question headers in `ask_user_question` instead of rejecting them; headers over 16 characters are now truncated with an ellipsis (…) for display
- Fix missing DLL errors on Windows ARM by statically linking the C runtime

### Removed
 - Removed the "Loading configuration from..." startup notice. Configuration import from Cursor, Windsurf, and Claude Code still works — the notice is simply no longer displayed.

## 2026.3.9-0

### Added
- Add `show_path` config option to display the current working directory in the input border
