# Billing
Source: https://docs.devin.ai/admin/billing
Devin has two pricing models:
* **Self-serve**: Free, Pro, Max, and Teams plans you can sign up for directly at [app.devin.ai](https://app.devin.ai). Self-serve usage is billed through a mix of included quota and on-demand credits. See [Self-serve plans](/admin/billing/self-serve) for full details.
* **Enterprise**: Devin Enterprise customers are billed in Agent Compute Units (ACUs) at the rate set in their order form. See [Enterprise](/admin/billing/enterprise) for how ACU consumption is tracked, or [contact sales](https://cognition.com/contact) for pricing.
For how Devin meters work in general (how usage accrues, idle/sleep behavior, and tips for keeping consumption under control), see [Usage](/admin/billing/usage). The tips on that page apply to both pricing models.
# Enterprise
Source: https://docs.devin.ai/admin/billing/enterprise
How Devin Enterprise contracts are billed and how admins track ACU consumption
Devin Enterprise customers are billed in **Agent Compute Units (ACUs)** at the rate set in their order form. [Contact sales](https://cognition.com/contact) for pricing.
For how Devin meters work in general (sleep behavior, what counts toward consumption, tips for keeping costs down), see [Usage](/admin/billing/usage).
## Tracking ACU consumption
Enterprise customers can track ACU consumption at both the Enterprise and Organization level:
* **Enterprise admins** view Enterprise ACU consumption at [Settings > Consumption](https://app.devin.ai/settings/consumption) in Enterprise Settings.
* **Organization admins** view Organization ACU consumption at [Settings > Consumption Analytics](https://app.devin.ai/settings/analytics?tab=consumption) within Organization Settings.
* **Any user** can see the ACU cost of a specific session from [Session Insights](/product-guides/session-insights).
## Setting Organization ACU limits
Enterprise admins can set per-Organization ACU limits from [Settings > Organizations](https://app.devin.ai/settings/organizations) in Enterprise Settings.
Once set, an Organization can only consume up to its limit. All Devin activity stops once the limit is reached, and users see a message indicating the Organization has hit its ACU limit and to contact the Enterprise admin to raise it.
## Frequently asked questions
Enterprise customers are billed for ACUs as stated in their order form.
Enterprise ACUs represent the work performed by Devin for customers on the Enterprise plan, which adheres more strictly to task planning and end-to-end testing. They are distinct from self-serve quota and on-demand credits, and are priced per the customer's Enterprise order form.
Enterprise admins can break consumption down by Organization from the [Consumption](https://app.devin.ai/settings/consumption) page in Enterprise Settings. Org admins can break it down by user from [Consumption Analytics](https://app.devin.ai/settings/analytics?tab=consumption) inside Organization Settings.
# Self-serve plans
Source: https://docs.devin.ai/admin/billing/self-serve
Compare Devin's self-serve plans and understand usage quota and on-demand credits
Devin has four self-serve plans you can sign up for directly at [app.devin.ai](https://app.devin.ai). For authoritative pricing, see the [Devin pricing page](https://devin.ai/pricing). This page explains how the plans relate to each other and how billing mechanics work.
## Plan overview
| Plan | For | Price | Members |
| --------- | --------------------------------- | ------------------ | --------- |
| **Free** | Individuals trying Devin | Free | 1 |
| **Pro** | Individual users | \$20/month | 1 |
| **Max** | Power users who need more quota | \$200/month | 1 |
| **Teams** | Teams working with Devin together | \$80/month minimum | Unlimited |
The **Pro** and **Max** plans are individual plans. They cannot be shared across multiple users. If you want multiple people to use Devin under a single subscription, you need the **Teams** plan.
## Free
The Free plan lets you try Devin with limited usage. It includes:
* Limited Devin usage
* Access to [Devin Review](/work-with-devin/devin-review)
* Access to [DeepWiki](/work-with-devin/deepwiki)
Free users can upgrade to any paid plan at any time from [Settings > Plans](https://app.devin.ai/settings/plans).
## Pro
Pro is Devin's entry-level individual plan. It's designed for a single developer who uses Devin regularly. Pro includes:
* A daily and weekly usage quota that covers Devin sessions, [Devin CLI](/cli), and [Devin Desktop](https://windsurf.com)
* Pay-as-you-go [on-demand credits](#on-demand-credits) for usage past your quota
* Slack, Linear, and [MCP](/work-with-devin/mcp) integrations
Pro is a single-user plan. Pro subscribers cannot invite additional members to their organization. To work with teammates on a shared subscription, use the [Teams](#teams) plan.
## Max
Max is for individual users who consistently exceed the Pro quota. It includes everything in Pro, plus a significantly larger weekly usage quota (with no daily cap), also shared between Devin sessions, [Devin CLI](/cli), and Devin Desktop.
Like Pro, Max is a single-user plan and does not support multiple members.
## Teams
The Teams plan is Devin's self-serve plan for teams of any size. Key properties:
* **Unlimited members**: invite as many teammates as you want.
* **\$80/month minimum**: every Teams account pays at least \$80/month.
* Each member gets either a **full seat** or a **flex seat**.
* **On-demand credits** are shared across the whole team.
### Full seats vs. flex seats
Every member of a Teams account holds one of two seat types:
**\$40/month per seat**, billed as a fixed recurring line item.
Best for members who use Devin regularly. Each full seat includes:
* A daily and weekly usage quota equivalent to the Pro plan
* Access to Devin Desktop
**Free**. Teams can have unlimited flex seats.
Best for occasional users. Flex seats:
* Draw entirely from the team's shared pool of on-demand credits
* Do **not** include Devin Desktop access
* Have no fixed monthly charge per seat
Admins choose the seat type when [inviting a member](/product-guides/invite-team), and can convert a member between seat types later from **Settings > Members**.
### The \$80 Teams minimum
Every Teams subscription costs **at least \$80/month**. You can hit this minimum in any combination of full seats (\$40 each) and on-demand credits:
| Full seats | On-demand credits included | Monthly total |
| ---------: | -------------------------: | ------------: |
| 0 | \$80 | \$80 |
| 1 | \$40 | \$80 |
| 2 | \$0 | \$80 |
| 3 | \$0 | \$120 |
| *N* ≥ 2 | \$0 | *N* × \$40 |
When you have fewer than two full seats, the remainder of the \$80 minimum is automatically charged as prepaid on-demand credits that the whole team can draw from. Once you have two or more full seats, you've cleared the minimum and no additional on-demand credits are included, but you can still [top up on-demand credits](#on-demand-credits) at any time.
Give a full seat to anyone who uses Devin regularly. Full seats include their own Pro-equivalent quota and Devin Desktop access at a predictable fixed cost, making them the best fit for power users. Reserve flex seats for occasional or trial users who only need ad-hoc access through shared on-demand credits.
## How quotas work
Each paid plan and full seat includes a usage allowance that refreshes automatically on a calendar basis:
* **Pro** and **Teams full seats** have a **daily and weekly** allowance. The daily allowance is more than 1/7 of the weekly, so you can keep working through weekends without giving up overall capacity for the week.
* **Max** has a **weekly** allowance only, with no daily cap.
When you've used up your allowance, [on-demand credits](#on-demand-credits) keep you working without interruption.
## On-demand credits
On-demand credits are prepaid usage credit that fund any work past your plan's included quota:
* **Roll over** month-to-month. Purchased credits never expire.
* Can be topped up at any time from [Settings > Plans](https://app.devin.ai/settings/plans), and optionally refilled automatically via auto-reload.
* Admins can set auto-reload thresholds and default session spending limits from **Settings > Usage**.
* On the **Teams** plan, credits are **shared across all members**, with no per-member balance. Any teammate can draw from the shared pool.
* On the **Teams** plan, credits fund all usage on **flex seats** and any **full seat** usage past its included quota, and cover any portion of the [\$80/month minimum](#the-80-teams-minimum) not already covered by full seats.
## Devin Review and Automations Pricing
[Automations](/product-guides/automations) and [Devin Review](/work-with-devin/devin-review) are available on self-serve plans.
* **Teams use shared on-demand credits.** On the Teams plan, Automations and Devin Review draw directly from the team's shared [on-demand credit](#on-demand-credits) pool and do not consume full-seat quota.
* **What happens when you run out of credits.** If you run out of credits, Automations stop running and Devin Review switches to its smart diff viewer. Top up [on-demand credits](#on-demand-credits) to start Automations again and re-enable AI-powered review.
* **Public PRs are free.** Anyone can review a public GitHub PR at [devinreview.com](https://devinreview.com) — or by replacing `github.com` with `devinreview.com` in any PR URL — without a Devin account, and no on-demand credits are consumed.
Admins can keep usage predictable by tuning how often auto-review runs. Configure the trigger mode (every commit, only when a PR is first opened, or manual only) per repository or per user from [Settings > Review](https://app.devin.ai/settings/review). See [Trigger Modes](/work-with-devin/devin-review#trigger-modes) in the Devin Review docs for details.
## Migrating from legacy ACU-based plans
If you were previously on a legacy ACU-based plan, here's what you need to know:
* On-demand credits are the same dollar value as the ACUs you're used to.
* **Legacy Core plan users** have been migrated to the Free plan and can continue using any remaining on-demand credits. To purchase additional credits, upgrade to the [Teams](#teams) plan.
## Managing your plan
Admins can view and change the account's plan from [Settings > Plans](https://app.devin.ai/settings/plans). From there you can:
* Upgrade or downgrade between Free, Pro, Max, and Teams
* Add or cancel Teams full seats
* Purchase on-demand credits or configure auto-reload to replenish them automatically
* Download past invoices
For tips on keeping consumption under control across all plans, see [Usage](/admin/billing/usage).
# Usage
Source: https://docs.devin.ai/admin/billing/usage
How Devin meters work, what counts toward consumption, and how to keep usage under control
This page explains how Devin's work is metered. The mechanics are the same regardless of pricing model. The only difference is the unit:
* **Enterprise** customers consume **Agent Compute Units (ACUs)** against the volume in their order form.
* **Self-serve** customers consume their plan's included quota first, then draw from prepaid **on-demand credits**.
Throughout this page, "usage" refers to whichever unit applies to your account.
## What counts toward usage
Usage accrues based on the work Devin actually performs in a session, including:
* Number and complexity of actions Devin takes (planning, context gathering, task execution, browser actions, code execution, and so on)
* Virtual machine time and networking bandwidth (typically a small fraction of total usage)
### Windows sessions
Windows sessions consume approximately **9% more** usage than equivalent Linux (Ubuntu) sessions.
Aside from the few units required to keep the Devin VM running, Devin will not consume usage when:
* Waiting for your response
* Waiting for a test suite to run
* Setting up and cloning repositories
## Sleep and idle behavior
When a session is idle, Devin goes to sleep. While sleeping, Devin does not consume usage. You can wake the session up at any time by sending another message. Devin typically sleeps automatically after roughly 0.1 ACUs (or the equivalent quota / on-demand credit) of inactivity.
## Managing usage effectively
A number of variables affect how much Devin consumes:
* Task complexity
* Prompt quality (or specificity)
* Size of context or codebase
* Number of files being touched or modified
* Session runtime
* Length of conversation
* Frequency of back-and-forth messaging
A few tips to keep usage under control:
* Delegate clearly scoped tasks with a well-defined end goal
* Keep prompts and sessions short
* Avoid asking Devin to do a lot of different tasks in the same session
* Split big projects into sub-tasks across sessions; there are no concurrent session limits, so take advantage of it
These tips also tend to improve the quality of Devin's work, so it's a win-win.
## Frequently asked questions
No, Devin does not consume any usage while sleeping.
Devin typically sleeps automatically after roughly 0.1 ACUs (or the equivalent quota / on-demand credit) of inactivity, so awake-but-idle time generally adds up to very little.
Any user can see per-session usage from [Session Insights](/product-guides/session-insights), regardless of pricing model.
* **Self-serve**: Current month's usage, quota remaining, and on-demand credit balance live at [Settings > Plans](https://app.devin.ai/settings/plans).
* **Enterprise**: Enterprise and per-Organization ACU consumption are available from the [Consumption](https://app.devin.ai/settings/consumption) and [Consumption Analytics](https://app.devin.ai/settings/analytics?tab=consumption) pages in Enterprise and Organization Settings respectively.
Yes. If your enterprise enables [Personal Analytics](/enterprise/security-access/personal-analytics), users with the **View Personal Analytics** permission can see their own ACU consumption across every organization from the **My analytics** page in their settings.
# Common Issues
Source: https://docs.devin.ai/admin/common-issues
## I'm unable to connect my GitHub.com organization
If you're unable to set up your integration or seeing "Configure" next to the organization you want to connect, you or one of your teammates has likely already connected your GitHub organization to another Devin account. **You will need to disconnect the existing integration before you can connect to your Devin account.**
You can disconnect the existing integration by following these steps:
1. Navigate to the Devin Enterprise or Organization with the active integration
2. Navigate to the Integrations page
* If you are on an Enterprise account, navigate to [https://app.devin.ai/settings/connected-accounts](https://app.devin.ai/settings/connected-accounts) in Enterprise Settings
* If you are on a Teams account, navigate to [https://app.devin.ai/settings/integrations](https://app.devin.ai/settings/integrations) in Organization Settings
3. Click through on the GitHub integration card
4. Click "Disconnect" under the GitHub integration
Alternatively, you can disconnect the integration via GitHub:
1. Go to the [GitHub Integration settings](https://github.com/settings/installations)
2. Navigate to Devin.ai Integration and click "Configure"
3. Scroll to the "Danger zone" section to uninstall the integration
## I'm unable to connect my Slack organization
If you're seeing an "Unable to proceed with request" error, it means that you or one of your teammates has already connected your Slack organization to another Devin organization. **You will need to disconnect the existing integration before you can connect your new organization.**
You can disconnect the existing integration by following these steps:
1. Navigate to the Devin Enterprise or Organization with the active integration
2. Navigate to the Integrations page
* If you are on an Enterprise account, navigate to [https://app.devin.ai/settings/connected-accounts](https://app.devin.ai/settings/connected-accounts) in Enterprise Settings
* If you are on a Teams account, navigate to [https://app.devin.ai/settings/integrations](https://app.devin.ai/settings/integrations) in Organization Settings
3. Click through on the Slack integration card
4. Click "Disconnect" under the Slack integration
If you're unable to disconnect or find the existing organization, please reach out to [support@cognition.ai](mailto:support@cognition.ai)
## IP Whitelisting
If you need to whitelist Devin's services, please add the following IP addresses:
* 100.20.50.251
* 44.238.19.62
* 52.10.84.81
* 52.183.72.253
* 20.172.46.235
* 52.159.232.99
* 4.204.199.103
* 54.201.200.193
* 54.69.238.189
* 100.23.34.160
(Please note: While we intend to keep this list static, it is possible these IPs may change in future updates.)
## Session Expiration
Devin sessions can't be continued after 30 days. If you need to resume work after that window, start a new session and re-share any relevant context (for example: goals, requirements, key decisions, and any important files or links) so Devin can continue effectively.
# Security at Cognition
Source: https://docs.devin.ai/admin/security
We want Devin to be a core contributor in your organization, and have prioritized security, data privacy and compliance to make it possible
## Security
All data transmission is encrypted in transit and at rest. Production software is also routinely monitored via logging, error handling and monitoring dashboards of live metrics. Unusual application states (i.e. unusually high error rates, slowness, failures) trigger alerts which are quickly investigated by our team.
Access to our cloud environment in AWS is granted on an as-required basis based on business roles and only a small number of employees or contractors are granted direct access to production systems.
All employees and contractors are required to use multi-factor authentication on all main work applications. All employees and contractors also receive annual training about security best practices, including good password management and how to identify social engineering and phishing scams.
Cognition obtained SOC 2 Type II certification and conducted Security Training in March 2024 for all employees at Cognition. As part of the SOC 2 audit, Cognition's auditors reviewed all of Cognition's security policies, procedures, internal and third party controls related to data security, privacy, processing integrity, confidentiality and availability.
For more details about our security please visit our [Trust Center](https://trust.cognition.ai/).
If you have identified a potential security issue, we encourage you to share your findings with us. Please send your vulnerability reports to our security team at [security@cognition.ai](mailto:security@cognition.ai).
## Privacy & Intellectual Property
Cognition processes data based on the application Customers use to interact with Devin. Devin can be accessed via web application, integration with GitHub, or integration with Slack. For the web application, Cognition only processes data actively provided by the authorized user prompting Devin; for the GitHub and Slack integrations, the administrator installing the integration can review and manage all permissions granted to Devin.
Cognition uses Customer data to:
* Deliver, maintain and update services provided to the Customer per their configuration and type of Devin access (e.g. web application, integration with GitHub, or integration with Slack) to make sure the software is up-to-date and operational.
* Troubleshoot, prevent and resolve issues such as product-related issues, software bugs or security incidents to maintain service functionality and reliability.
Cognition only retains data processed through Devin for the duration of the relationship with a given Customer, unless otherwise specified by the Customers.
Any Feedback Data and User Interaction Data are retained as long as needed and as determined by Cognition.
By default, we may use your data for model training purposes to improve and enhance the Services. If you're on a paid plan, you can opt out at any time on the Data Controls settings page. After you opt out, your data will not be used for training and Zero Data Retention will be enabled with our model providers. On the Teams plan, only an administrator can exercise the opt-out. Devin can still learn to fit into your unique workflow via the [Knowledge](/product-guides/knowledge) feature. When you share Knowledge, Devin can become more reliable at working on your specific projects over time.
If you are an Enterprise customer, we will never train on your data without your express prior written consent. Please refer to the terms in your agreement with Cognition for details.
The output — code, work product, or other — produced by Devin is considered the user’s intellectual property and can be used for the Customer’s commercial purposes, with the exception of using the output to train models that would attempt to reverse engineer and/or build a competing product to Devin.
When setting up the GitHub integration, users can select which repositories Devin can access, with permissions adjustable through GitHub's App Settings during and post-installation.
For more details on the requested permissions and security considerations go to [GitHub Integration Guide](/integrations/gh).
In Slack, Devin doesn’t read, process or store any data in your Slack instance other than the information provided when @Devin is tagged, initially prompted and when any additional information is provided within the Slack thread while the session is ongoing.
For more details on the requested permissions and security considerations go to [Integration with Slack Guide](/integrations/slack).
## User Best Practices
While Devin’s performance is improving daily, it can still experience hallucinations, introduce bugs into code, or suggest insecure code or procedures. Like with any coding best practices, we recommend taking the appropriate precautions with the code written by Devin such as code reviews, enabling branch protections to ensure checks are enforced before Devin can merge any changes, and any practices currently adopted in your organization to review engineers’ work.
You may need to provide Devin with credentials and keys such as passwords, API keys, cookies or other for authentication. In all cases we advise users to leverage our Secrets feature under the Settings page to share and store those credentials securely.
We’re still learning and developing Devin to be a great AI software engineer, and our customers’ feedback is crucial for Devin’s development. We strongly encourage sharing feedback and feature requests directly with your Cognition account team or by emailing [support@cognition.ai](mailto:support@cognition.ai), and reporting incidents by emailing [security@cognition.ai](mailto:security@cognition.ai).
# JetBrains
Source: https://docs.devin.ai/cli/acp/jetbrains
Run Devin inside JetBrains IDEs from AI Chat using the Agent Client Protocol (ACP), including JetBrains Remote Development.
JetBrains IDEs can run Devin as an agent inside **AI Chat** using the
[Agent Client Protocol (ACP)](https://agentclientprotocol.com/). The quickest way to
add Devin is to install it from the **ACP Registry**; you can also configure it
manually as a custom agent. Either way, you can drive Devin from the AI Chat panel in
IntelliJ IDEA, PyCharm, GoLand, and other JetBrains IDEs — including over
[JetBrains Remote Development](https://www.jetbrains.com/remote-development/).
This integration uses JetBrains' built-in ACP support in AI Assistant. For the
upstream reference, see the JetBrains docs on
[adding a custom agent](https://www.jetbrains.com/help/ai-assistant/acp.html#add-custom-agent).
## Prerequisites
* A JetBrains IDE with the **AI Assistant** plugin and AI Chat available.
## Setup
Install Devin directly from the **ACP Registry** — no CLI installation or manual
configuration required.
Click the **AI Chat** icon in the right-hand tool window bar.
Click the agent selector in the AI Chat footer to see the list of available
agents.
Choose **Install From ACP Registry...**, search for **Devin**, and click
**Install**. Devin is added to the list of available agents.
The first time you connect, you may be prompted to authenticate. Follow the
prompt to log in to your Devin account.
Select **Devin** in the agent selector and send a message to start a session.
## Manual setup (custom ACP)
If you'd rather run Devin from your own installation of the Devin CLI, you can add it
as a custom ACP agent instead of installing from the registry.
### Prerequisites
* Devin CLI installed and authenticated. If you haven't installed it yet, follow
the [Quickstart](/cli/index), then run `devin auth login`.
* The absolute path to the `devin` binary. You can find it with:
```bash theme={null}
which devin
```
This typically resolves to something like `~/.local/bin/devin`.
For **JetBrains Remote Development**, Devin CLI must be installed on the **remote
host** (where the backend runs), not on your local client. Run `which devin` in a
terminal on the remote host and use that path in the configuration below.
Click the **AI Chat** icon in the right-hand tool window bar.
Click the three-dots menu in the top-right of the AI Chat panel, then choose
**Add Custom Agent**. This opens the `acp.json` configuration file.
Add Devin to the `agent_servers` block in `acp.json`. Set `command` to the
absolute path of your `devin` binary (from `which devin`) and pass `acp` as
the only argument:
```json acp.json theme={null}
{
"default_mcp_settings": {},
"agent_servers": {
"devin": {
"command": "/home/you/.local/bin/devin",
"args": ["acp"]
}
}
}
```
Save the file. Devin now appears as a selectable agent in AI Chat.
Select **devin** as the agent in AI Chat and send a message to start a
session. The first time you connect, you may be prompted to authenticate;
Devin uses the credentials from `devin auth login` (or `WINDSURF_API_KEY` if
set).
## Managing the integration
The three-dots menu in the AI Chat panel includes a few helpful actions for the
Devin agent:
* **Reset ACP Authentication** — clear stored ACP credentials and re-authenticate.
* **Get ACP Logs** — open the ACP logs, useful for debugging connection issues or
inspecting what the agent is doing under the hood.
## Notes and limitations
* Devin CLI's terminal/shell output is surfaced through JetBrains AI Chat's ACP
rendering, which differs from the native Devin CLI terminal UI. Some richer
interactions are only available in the standalone CLI.
* The `devin acp` subcommand is intended to be launched by an ACP-aware client
(like JetBrains AI Chat) as a subprocess — it speaks JSON-RPC over stdio and is
not meant to be run interactively. See
[`devin acp`](/cli/reference/commands#devin-acp) in the command reference.
# Xcode
Source: https://docs.devin.ai/cli/acp/xcode
Run Devin inside Xcode's coding assistant via the Agent Client Protocol (ACP), or give the Devin CLI access to your Xcode project through Xcode's MCP bridge.
Xcode 26.6's [coding intelligence](https://developer.apple.com/documentation/xcode/setting-up-coding-intelligence)
can run Devin as an agent inside the **coding assistant** using the
[Agent Client Protocol (ACP)](https://agentclientprotocol.com/). Devin isn't one
of the agents listed in Xcode's Intelligence settings, so you add it manually as
a custom ACP agent that runs from your local Devin CLI installation.
This integration uses Xcode's built-in ACP support in the coding assistant. For
the upstream reference, see Apple's docs on
[setting up coding intelligence](https://developer.apple.com/documentation/xcode/setting-up-coding-intelligence).
## Prerequisites
* **Xcode 26.6 or later** with the coding assistant available.
* Devin CLI installed and authenticated. If you haven't installed it yet, follow
the [Quickstart](/cli/index), then run `devin auth login`.
* The **absolute** path to the `devin` binary. You can find it with:
```bash theme={null}
which devin
```
This typically resolves to something like `/Users/you/.local/bin/devin`.
Xcode requires an **absolute** path for the agent command — it does not expand
`~` or use your shell's `PATH`. If `which devin` prints a `~`-prefixed path,
expand it first (for example, run `echo "$(cd ~ && pwd)/.local/bin/devin"`) and
use the full `/Users/...` result.
## Setup
Add Devin as a custom agent from the Intelligence settings.
Choose **Xcode > Settings**, then select **Intelligence** in the sidebar.
Under **Agents**, click **Add an Agent**. Xcode's built-in ACP support lets
you register any agent that speaks the Agent Client Protocol.
In the sheet that appears, enter the agent's details:
* **Name** — `Devin` (or any label you prefer).
* **Command** — the **absolute** path to your `devin` binary (from
`which devin`), for example `/Users/you/.local/bin/devin`. A relative path
or a `~`-prefixed path won't work.
* **Arguments** — `acp` (the only argument Devin needs).
Click **Add**. Devin now appears as a selectable agent under **Agents**.
Select **Devin** in the coding assistant and send a message to start a
session. The first time you connect, you may be prompted to authenticate;
Devin uses the credentials from `devin auth login` (or `WINDSURF_API_KEY` if
set).
## Give Devin CLI access to your Xcode project (MCP)
Separately from running Devin *inside* Xcode, you can point the standalone Devin
CLI at your Xcode project so it can build, run tests, read and edit files, render
SwiftUI previews, and search Apple's documentation. Xcode ships an
[MCP](/cli/extensibility/mcp/overview) server, `xcrun mcpbridge`, that exposes
these Xcode tools to any external agent (the same mechanism
[Cursor uses](https://cursor.com/docs/integrations/xcode)). Add it to Devin like
any other MCP server.
The Xcode MCP bridge requires **Xcode 26.3 or later**. Confirm the binary is
available with `xcrun --find mcpbridge` (see [Troubleshooting](#troubleshooting)
if it isn't). See Apple's docs on
[giving external agents access to Xcode](https://developer.apple.com/documentation/xcode/giving-external-agents-access-to-xcode).
Choose **Xcode > Settings**, select **Intelligence**, and under **Model
Context Protocol** turn on **Allow external agents to use Xcode tools**.
Register `xcrun mcpbridge` as a stdio MCP server:
```bash theme={null}
devin mcp add xcode -- xcrun mcpbridge
```
Verify it was added with `devin mcp list`. See
[`devin mcp`](/cli/reference/commands#devin-mcp) for scope and configuration
options.
Open your project or workspace in Xcode (the bridge needs a running Xcode
session with a project open), then prompt Devin from the CLI. Xcode alerts
you when the external agent connects and while it's active.
## Troubleshooting
* **`xcrun: error: unable to find utility "mcpbridge"`** — your system is pointed
at the Command Line Tools instead of the full Xcode install. Fix it with:
```bash theme={null}
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
sudo xcodebuild -runFirstLaunch
```
Then confirm with `xcrun --find mcpbridge`, which should print a path.
* **Devin can't reach the Xcode tools** — make sure Xcode is running with a
project (not an empty window) open, and that **Allow external agents to use
Xcode tools** is enabled in Intelligence settings.
## Notes and limitations
* The model can't be selected from Xcode — Devin always runs with your team's
default model.
* When you select an agent in Xcode's coding assistant, it automatically gets
access to Xcode capabilities such as building and testing your app. You can
review and restrict which commands and tools agents may use under
**Agents > Permissions** in Intelligence settings — see Apple's docs on
[extending and customizing agents](https://developer.apple.com/documentation/xcode/extending-and-customizing-agents).
* Devin CLI's terminal/shell output is surfaced through Xcode's ACP rendering,
which differs from the native Devin CLI terminal UI. Some richer interactions
are only available in the standalone CLI.
* The `devin acp` subcommand is intended to be launched by an ACP-aware client
(like Xcode's coding assistant) as a subprocess — it speaks JSON-RPC over stdio
and is not meant to be run interactively. See
[`devin acp`](/cli/reference/commands#devin-acp) in the command reference.
# Zed
Source: https://docs.devin.ai/cli/acp/zed
Run Devin CLI inside the Zed editor as a custom ACP agent in the Agent Panel.
[Zed](https://zed.dev/) has native support for the
[Agent Client Protocol (ACP)](https://agentclientprotocol.com/), so you can run
Devin CLI as a custom external agent directly inside Zed's **Agent Panel** —
with real-time editing, syntax highlighting, and agent following.
This integration uses Zed's built-in support for external ACP agents. For the
upstream reference, see the Zed docs on
[external agents](https://zed.dev/docs/ai/external-agents).
## Setup
Open the ACP registry with `zed: acp registry` from the command palette (Cmd+Shift+P on macOS and Ctrl+Shift+P on Windows). Search for "Devin" and install it.
On the top left corner of the Threads Sidebar, click on the agent dropdown menu and select "Devin".
In the new Devin thread, open the agent menu in the top right corner and select "Authenticate" (or "Reauthenticate"). Then on the bottom of the thread panel, click on "API Key". A browser window will open, where you can log into your Devin Cloud account and authenticate. If you don't have an account you can sign up for free!
You can now start a conversation with Devin! By default, Devin will use Adaptive model selection, automatically choosing the best model for your task. You can also pick a specific model from the menu at the bottom of the thread panel.
## Notes and limitations
* Devin CLI's terminal/shell output is surfaced through Zed's ACP rendering,
which differs from the native Devin CLI terminal UI. Some richer interactions
are only available in the standalone CLI.
* The `devin acp` subcommand is intended to be launched by an ACP-aware client
(like Zed) as a subprocess — it speaks JSON-RPC over stdio and is not meant to
be run interactively. See
[`devin acp`](/cli/reference/commands#devin-acp) in the command reference.
# Adaptive
Source: https://docs.devin.ai/cli/adaptive
Adaptive is Cognition's intelligent model router that automatically selects the best AI model for each task.
## Selecting Adaptive
To select Adaptive, run `/model adaptive` during a session, pass `--model adaptive` when launching, or set it as your default in `~/.config/devin/config.json` (on Windows, `%APPDATA%\devin\config.json`):
```json theme={null}
{
"agent": {
"model": "adaptive"
}
}
```
You can switch away from Adaptive to a specific model at any time with `/model`.
Adaptive is an intelligent model router that automatically selects the best AI model for each task. Instead of manually choosing between dozens of models, Adaptive analyzes your prompt and routes it to the model that will deliver the best result.
## How it works
When you select **Adaptive**, Devin evaluates each request and dynamically chooses the right underlying model. Simple tasks get routed to fast, efficient models. Complex tasks get routed to more capable ones.
This means you get the right level of intelligence for every prompt without overspending on premium models for routine work. Adaptive helps your usage allowance last longer by avoiding unnecessary use of expensive models.
Adaptive is the best default for most users.
## Enterprise availability
For enterprise organizations, Adaptive is disabled by default. An admin must enable the **Adaptive model router** setting from the enterprise settings page before team members can select Adaptive in the model picker.
* **Devin Desktop**: Go to **Settings > Devin Desktop > Models** and toggle **Adaptive model router** on.
* **Windsurf**: Go to **Team Settings > Models** and toggle **Adaptive model router** on.
## Pricing
Adaptive pricing depends on your billing plan.
Adaptive draws down your quota at a **fixed per-token rate**, regardless of which underlying model is selected for a given request.
Currently, the Adaptive model consumes quota and overage at an introductory promotional rate (through July 7, 2026).
| Token type | Cost per 1M tokens |
| :---------------- | :----------------- |
| Input tokens | \$0.50 |
| Output tokens | \$2.00 |
| Cache read tokens | \$0.10 |
These rates also apply to extra usage beyond your included quota.
Because Adaptive routes simpler tasks to lighter models, it typically consumes fewer tokens overall than manually selecting a frontier model for every request. This makes it the most cost-effective option for most users.
For customers on the Cognition platform, Adaptive usage is metered in **ACUs** (Agent Compute Units). ACU consumption scales with the tokens used and the model selected by the router for each request.
For enterprise customers on credit-based billing, Adaptive uses **variable-token credit pricing**. Each request consumes credits based on the actual tokens used and the model that Adaptive selects for that request according to your credit rate.
This means cheaper models cost fewer credits per request, and Adaptive's routing naturally favors cost-efficient choices — so your credit pool lasts longer compared to always selecting a premium model.
## Tips for getting the most out of Adaptive
* **Be specific with your prompts.** Clear, focused instructions help Adaptive route to the right model and reduce unnecessary token usage.
* **Leverage prompt caching.** Staying on the same model across turns in a conversation enables caching, which significantly reduces input token costs. Adaptive takes this into account when routing.
* **Use Adaptive as your default.** For most workflows, Adaptive is the best starting point. Switch to a specific model only when you have a particular reason to — for example, if you need a specific model's reasoning capabilities for a complex task.
# Changelog (Stable)
Source: https://docs.devin.ai/cli/changelog/stable
Release notes for the stable channel
### Fixed
* Fixes issues with diff viewing in autonomous mode.
### Added
* Added an `/mcp` slash command with a live MCP server status panel.
* ACU usage is now shown in the `/usage` command.
* Enterprise login policies are now enforced in the CLI.
* Added a `sandbox.excluded` allow/ask/deny config (user and team settings) to run specific commands outside the sandbox; excluded commands also skip the sandbox proxy environment.
### Changed
* Edits produced in autonomous mode now produce reviewable diffs.
* Skill `permissions:` frontmatter now applies to auto-approvals.
### Fixed
* Fixed command approval parsing for PowerShell `$variable` assignment prefixes.
### Added
* Subagents can now be configured with a default model.
* Added an `attribution` option to the Devin Local [config file](/cli/reference/configuration/config-file); set it to `false` to suppress Devin mentions in commit messages.
### Changed
* The MCP registry cache is now warmed during startup, so MCP servers are ready sooner.
### Fixed
* On Windows, `bash` now resolves to Git Bash instead of the WSL launcher stub.
* Injected context is no longer included in auto-generated session titles.
* Fixed full-width wrapping of CLI question replies.
### Fixed
* Made MCP registry parsing more tolerant of old and inconsistent schemas.
### Fixed
* Fixed a bug with loading skill files that use alternative fields.
### 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 `/:`. 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 ` 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 ` 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 ` 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.
### 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`.
### 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.
### 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.
### 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.
### Added
* Gemini 3.5 Flash model support.
* New `/cloud-attach ` 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 and timing metrics.
* 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.
### 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.
### 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.
### Fixed
* `/usage` command now shows quota % remaining and overage balance for quota-billing users instead of "no credits consumed."
***
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.
### Fixed
* Opt+backspace no longer inserts 'h' on terminals that send BS for backspace.
### 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 ` 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.
### 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 ` 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.
### 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 ` 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 ` 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 `` commands in ``", where `` 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.
### Removed
* In-REPL overage status indicator banner is no longer shown.
### 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.
### 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.
### Fixed
* Wide character (CJK/emoji) display corruption no longer occurs when deleting characters adjacent to them.
### 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.
### 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
### Fixed
* Load skills and agents from `~/.config/devin/` and `.devin/` directories as documented, in addition to the legacy `~/.config/cognition/` and `.cognition/` paths.
### 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 `!` 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.
### Added
* Add `show_path` config option to display the current working directory in the input border
# Controls
Source: https://docs.devin.ai/cli/enterprise/controls
Devin CLI is a local agent like Cascade, but does not yet implement all of the same features and controls.
Devin CLI is a local agent that runs on your machine with access to your local files, tools, and environment — similar to Cascade in Devin Desktop. It shares the same agent harness as the [Devin Local agent](/desktop/devin-local).
Because it is a newer agent, Devin CLI does not yet implement all of the same features and controls as Cascade. Many of Cascade's controls are replaced by more flexible mechanisms — for example, [permissions](/cli/reference/permissions), [hooks](/cli/extensibility/hooks/overview), and [team settings](/cli/enterprise/team-settings).
## Limitations
The following features are not currently supported with the Devin Local agent:
* **Memories** — The Devin Local agent does not persist memories between sessions. Migrate your critical memories to [skills](/desktop/cascade/skills).
* **Workflows** — Workflows are not available with the Devin Local agent. Migrate your workflows to [skills](/desktop/cascade/skills).
* **Codemaps** — The Devin Local agent does not yet read [codemaps](/desktop/codemaps).
* **Code Lenses** - Currently [code lenses](/desktop/command/windsurf-related-features) do not yet trigger the Devin Local agent.
* **Fast Context** - Devin Local uses subagents to explore code, but doesn't have the same fast context UI as Cascade.
* **App Deploys** - The Devin Local agent does not support app deploys.
* **Browser previews** - The Devin Local agent does not yet support in-IDE [browser previews](/desktop/previews), including the DOM element selector tool.
* **Conversation Sharing** - Conversation sharing is not yet available with the Devin Local agent.
The Devin Local agent does support [rules and AGENTS.md files](https://cli.devin.ai/docs/extensibility/rules) as well as [skills](https://cli.devin.ai/docs/extensibility/skills/overview) for providing persistent context and reusable workflows.
### Analytics
The Devin Local agent does not yet report all of the analytics that Cascade collects. The following data is collected for Cascade but **not** for Devin Local:
* **Tool usage** — The [`cascade_tool_usage`](/desktop/accounts/api-reference/cascade-analytics) data source (per-tool call counts such as Code Edit, Run Command, Search Web, and MCP Tool) only includes Cascade sessions. Tool calls made by the Devin Local agent are not reported. To monitor or restrict tool usage with the Devin Local agent, use [hooks](/cli/extensibility/hooks/overview) and [permissions](/cli/reference/permissions) instead.
* **Lines suggested and accepted** — The [`cascade_lines`](/desktop/accounts/api-reference/cascade-analytics) data source (daily lines of code suggested and accepted) does not include code written by the Devin Local agent.
* **Write/Read mode** — The Devin Local agent does not report a Cascade mode, so the `mode` field in the `cascade_runs` data source is not populated for Devin Local activity.
Devin Local activity is still included in the [`cascade_runs`](/desktop/accounts/api-reference/cascade-analytics) data source (model usage, messages sent, and credit consumption) and in the [Cascade Data source](/desktop/accounts/analytics-api#cascade-data) of the Custom Analytics API.
The Devin CLI does not report analytics for [hybrid deployments](https://devin.ai/blog/self-hosted-deployment-maintenance-mode).
### Enterprise controls
Enterprise admins can configure the Devin Local agent through [team settings](https://windsurf.com/team/settings), including [new controls only available with the Devin Local agent](https://cli.devin.ai/docs/enterprise/team-settings):
* **Sandbox enforcement** - Require sandbox mode for all users and configure organization-wide domain filtering rules
* **Granular permissions** - Control which actions the agent can take with more fine-grained permissions
* **Network enforcement** - Control network access with allowed and denied domains
Additionally, the "Enable Cascade" control can be used to disable the legacy Cascade agent entirely to ensure your team follows the new controls available with Devin CLI.
#### Unsupported enterprise controls
The following legacy enterprise controls are not available with the Devin Local agent:
* **Restrict Tool Calls to Workspace** - by default, the Devin Local agent can only read/edit files within the workspace.
Custom [permissions](https://cli.devin.ai/docs/reference/permissions) are a more flexible replacement that can be used to replicate the same rules.
* **App Deploys** - App deploys are not yet supported with the Devin Local agent.
* **Conversation Sharing** - Conversation sharing is not yet supported with the Devin Local agent.
* **Enable or disable Cascade for your team** - This setting only controls the legacy Cascade agent and does not apply to the Devin Local agent or the Devin CLI.
* **Global tool calling disabled** - If you previously disabled tool calling entirely, write an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI instead.
The following legacy controls will still be enforced as a fallback if you haven't yet implemented an enterprise CLI permission config:
* **Auto Run Terminal Commands** - The Devin Local agent uses its own [permissions model](https://cli.devin.ai/docs/reference/permissions) instead of auto-execution levels; we recommend using this instead, but the old control will still be enforced as a fallback.
* **Terminal allow lists** - Implement an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI to allow specific terminal commands.
* **Terminal deny lists** - Implement an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI to deny specific terminal commands.
## Further reading
* [Team settings](/cli/enterprise/team-settings)
* [Permissions](/cli/reference/permissions)
* [Hooks](/cli/extensibility/hooks/overview)
* [Devin Local agent](/desktop/devin-local)
# Devin Auth
Source: https://docs.devin.ai/cli/enterprise/devin-auth
Authenticate to Devin CLI using your existing Devin account
## Overview
You can authenticate to Devin CLI using your existing Devin account. This provides a seamless experience for organizations already using Devin, with billing handled through the standard **Devin billing model**.
User management, team organization, SSO, RBAC, billing, and consumption are all inherited natively through the Devin dashboard. For most of your organizational needs, you should rely on the [Devin dashboard](https://app.devin.ai).
Devin authentication for Devin CLI is available to **Devin Enterprise** customers. Contact your account executive if you have questions about authentication, billing, or access.
## Getting Started
### Prerequisites
Before using Devin authentication, ensure that:
1. Your organization has a Devin enterprise account
2. Your administrator has configured Devin CLI access permissions (see [Configuring Access](#configuring-access) below)
3. You have been assigned a role with the **Use Devin CLI** permission
### Authenticating
To authenticate with your Devin enterprise account:
```bash theme={null}
devin auth login
```
Follow the prompts and be sure to select the **Log in with Devin for Enterprise** button to authenticate through your organization's identity provider.
### Credentials file location
After `devin auth login`, Devin CLI stores your API token in `credentials.toml`. By default, this token is persistent and does not expire. You can copy the credentials file between your own machines to reuse the same authentication, but treat it as sensitive: anyone with this file can authenticate as you. Do not share it or commit it to source control.
| Platform | Location |
| ------------- | ---------------------------------------------------------------------------------------------------------------------- |
| macOS / Linux | `$XDG_DATA_HOME/devin/credentials.toml` when `XDG_DATA_HOME` is set; otherwise `~/.local/share/devin/credentials.toml` |
| Windows | `%APPDATA%\devin\credentials.toml` (typically `C:\Users\\AppData\Roaming\devin\credentials.toml`) |
Run `devin auth logout` to remove stored credentials.
## Configuring Access
Devin CLI access is controlled through Devin's [custom roles and RBAC system](/enterprise/security-access/custom-roles). Administrators must create a custom role with the **Use Devin CLI** role permission and assign it to users who need access.
### Creating an Access Role
1. Navigate to **Enterprise Settings > Roles**
2. Click **Create a custom role**
3. Provide a descriptive name (e.g., "Devin CLI User")
4. Select the **Use Devin CLI** permission
5. Save the role
### Assigning the Role
* **Enterprise admins** or users with the **Manage Account Membership** permission can assign account-level roles via the "Enterprise members" page
* **Organization admins** or users with the **Manage Organization Membership** permission can assign organization-level roles via the "Organization members" page
You can automatically assign roles based on SSO IdP groups. See the [custom roles documentation](/enterprise/security-access/custom-roles) for details.
## Billing
Usage through Devin CLI is billed using the standard **Devin ACU (Agent Compute Unit) model**. All Devin CLI usage counts toward your organization's existing Devin enterprise allocation.
Enterprise admins can view their users' Devin CLI usage by accessing the **Cost** dashboard under the **Enterprise Analytics** tab in the Devin web app. This dashboard contains helpful visualizations of ACU consumption across all of the Cognition products, including Devin CLI.
For details about ACU billing and usage tracking, refer to your enterprise agreement or contact your account executive.
## Further Reading
For more information about Devin enterprise features, see the [Devin Enterprise documentation](/enterprise/getting-started/get-started):
* [Enterprise Setup](/enterprise/getting-started/get-started) — Initial configuration and onboarding
* [SSO Configuration](/enterprise/security-access/sso/guide) — Single sign-on setup
* [Custom Roles & RBAC](/enterprise/security-access/custom-roles) — Fine-grained access control
* [Enterprise Security](/enterprise/security-access/security/enterprise-security) — Security policies and controls
# Team Settings
Source: https://docs.devin.ai/cli/enterprise/team-settings
Configure team-wide settings to control your users' Devin CLI usage
## Overview
Team-wide settings allow enterprise admins to control Devin CLI usage across their organization.
* **Devin Enterprise admins** can manage these settings in the customer-facing Devin dashboard under **Settings → Enterprise → Windsurf** (`app.devin.ai/org/{orgName}/settings/windsurf`). This is self-service for admins with access to enterprise settings.
* **Windsurf Enterprise admins** can manage these settings in the Windsurf dashboard at [https://windsurf.com/team/cli-settings](https://windsurf.com/team/cli-settings).
Only the Devin CLI-specific settings on these pages apply to Devin CLI. General [Windsurf Team Settings](https://windsurf.com/team/settings) apply to Windsurf and do not necessarily apply to Devin CLI unless also listed on the Devin CLI settings page.
## Available Settings
### Models
Control which models your users can access through Devin CLI. You can:
* **Whitelist specific models** — Restrict users to a curated list of approved models
* **Allow all models** — Give users access to all available models
Click **Configure** to manage model access for each category.
#### Default model
You can also pin a **team-wide default model** that Devin CLI will use for new sessions. This is the same setting Windsurf uses for its default model, so configuring it once applies to both surfaces.
* If no team default is set, Devin CLI uses its built-in default model.
* If the pinned default is not present in the **allowed models** list above, Devin CLI falls back to the built-in default — the allowlist always takes precedence.
* Individual users can still switch models during a session; this setting only controls the starting model for new sessions.
Enterprise admins can configure the default model from the [Windsurf Team Settings](https://windsurf.com/team/settings) page, the [Devin CLI Settings](https://windsurf.com/team/cli-settings) page, or the customer-facing Devin Enterprise settings page at `app.devin.ai/org/{orgName}/settings/windsurf`.
### Enable Web Search
Allow the Devin CLI agent to perform web searches on the open Internet. This does not affect the agent's ability to read specific URLs, which is performed locally on the user's machine. This tool is **disabled by default** for enterprise teams.
### MCP Servers
Control whether your users can use MCP (Model Context Protocol) tools.
* **Toggle on/off** — Enable or disable MCP server usage entirely
* **Whitelisted MCP Servers** — Specify which MCP servers users are allowed to connect to. If no servers are added, all servers are whitelisted by default. Click **Add Server** to restrict access to specific servers.
The recommended way to manage approved servers is through an [MCP registry](#mcp-registry) rather than the explicit whitelist.
### MCP Registry
You can use the [official MCP registry](https://modelcontextprotocol.io/registry/about), a downstream registry built on it, or your own registry.
Configure registries in team settings:
* **MCP registry URLs** — Add one or more registry URLs. With multiple registries, a server is allowed if it appears in any of them (the union of all registries).
* **MCP registry enforcement** (toggle) — Choose whether to strictly enforce your registries. When on, users can only connect to servers from your registries; when off, they can also connect to other servers, including custom ones.
### Terminal Permissions
Configure team-enforced permission rules for Devin CLI usage. These rules have the **highest precedence** and cannot be overridden by individual users' local or project configurations.
Click **Configure** to open the permissions editor. The configuration requires a JSON object with three fields:
```json theme={null}
{
"deny": [
"exec"
],
"ask": [],
"allow": [
"Read(~/my-repository/**)"
]
}
```
* **`deny`** — Actions that are blocked entirely (takes highest priority)
* **`ask`** — Actions that always prompt the user for approval
* **`allow`** — Actions that are automatically approved without prompting
Permissions can be **scope-based** or **tool-based**:
| Type | Format | Example |
| ----------------- | -------------- | ------------------------------- |
| File read | `Read(/path)` | `Read(~/sensitive/**)` |
| File write | `Write(/path)` | `Write(.env*)` |
| Command execution | `Exec(cmd)` | `Exec(rm)`, `Exec(sudo)` |
| HTTP fetch | `Fetch(url)` | `Fetch(https://internal.api/*)` |
| Tool-based | Tool name | `read`, `edit`, `exec` |
Use team-enforced deny rules to prevent actions across your entire organization, such as blocking access to sensitive directories or dangerous commands like `rm -rf` or `sudo`.
For detailed information on permission syntax, glob patterns, and configuration examples, see the [Permissions documentation](/cli/reference/permissions).
### Sandbox Enforcement
Control sandbox behavior for your organization: **Enforcement mode** (whether `--sandbox` is **Optional** or **Required** for all CLI sessions), **Domain allowlist** and **Domain denylist** (organization-wide network filtering), and **Excluded allow** / **Excluded ask** / **Excluded deny** (rules for commands that may — or must never — run outside the sandbox). See the [Sandbox documentation](/cli/sandbox) for how the sandbox works, how these settings interact with user-level configuration, and examples.
### Show "Install Devin CLI" in the Devin Desktop Command Palette
Devin CLI is bundled with Devin Desktop but requires explicit activation by an admin. Toggle this setting **on** to allow your users to install Devin CLI directly from the Devin Desktop Command Palette.
Once enabled, users can open the Command Palette (Cmd+Shift+P on macOS or Ctrl+Shift+P on Windows/Linux) and run **Install Devin CLI** to add the `devin` binary to their PATH.
This setting is available on **Legacy Windsurf Enterprise** and **Devin Enterprise** plans and is **off by default**.
## Further Reading
To understand how to configure Devin CLI further, see the [Configuration documentation](/cli/reference/configuration/config-file).
# Legacy Windsurf Auth
Source: https://docs.devin.ai/cli/enterprise/windsurf-auth
Authenticate to Devin CLI using your existing legacy Windsurf enterprise account
## Overview
Enterprise users can authenticate to Devin CLI using their existing legacy Windsurf enterprise accounts. This provides a seamless experience for organizations already using Windsurf, with billing handled through the standard **Windsurf legacy credit model**.
User management, team organization, SSO, RBAC, billing, and consumption are all inherited natively through the Windsurf dashboard. For most of your organizational needs, you should rely on the [Windsurf dashboard](https://windsurf.com).
Legacy Windsurf authentication for Devin CLI is available to **legacy Windsurf Enterprise** customers. Contact your account executive if you have questions about authentication, billing, or access.
## Getting Started
### Prerequisites
Before using legacy Windsurf authentication, ensure that:
1. Your organization has a legacy Windsurf enterprise account
2. You have an active legacy Windsurf user account that can use the agentic tools
No additional permissions are required to access Devin CLI. If your legacy Windsurf enterprise users can use Windsurf, they can use Devin CLI.
### Installation via Devin Desktop
Devin CLI is bundled with Devin Desktop. An admin must first enable the option in [Devin CLI Team Settings](https://windsurf.com/team/cli-settings) — see [Team Settings](/cli/enterprise/team-settings#show-install-devin-cli-in-the-devin-desktop-command-palette) for details.
Once enabled, open the Command Palette (Cmd+Shift+P / Ctrl+Shift+P) and run **Install Devin CLI**.
Alternatively, you can install using the standalone installer — see the [Quickstart](/cli/) for instructions.
### Authenticating
To authenticate with your legacy Windsurf enterprise account:
```bash theme={null}
devin auth login
```
Follow the prompts and be sure to select the **Log in with Windsurf for Enterprise** option to authenticate through your organization's identity provider.
### Credentials file location
After `devin auth login`, Devin CLI stores your API token in `credentials.toml`. By default, this token is persistent and does not expire. You can copy the credentials file between your own machines to reuse the same authentication, but treat it as sensitive: anyone with this file can authenticate as you. Do not share it or commit it to source control.
| Platform | Location |
| ------------- | ---------------------------------------------------------------------------------------------------------------------- |
| macOS / Linux | `$XDG_DATA_HOME/devin/credentials.toml` when `XDG_DATA_HOME` is set; otherwise `~/.local/share/devin/credentials.toml` |
| Windows | `%APPDATA%\devin\credentials.toml` (typically `C:\Users\\AppData\Roaming\devin\credentials.toml`) |
Run `devin auth logout` to remove stored credentials.
## Billing & Analytics
Usage through Devin CLI is billed using the standard **Windsurf legacy credit model**. All Devin CLI usage counts toward your organization's existing legacy Windsurf enterprise allocation.
The analytics and billing systems are shared between Windsurf and Devin CLI. Use the [Team Members dashboard](https://windsurf.com/team/members) to manage team organization or view consumption metrics across both products.
On prompt-based plans, each subagent consumes additional credits, just like a user message does. The number of credits depends on the model the subagent uses, so tasks that spawn multiple subagents (or [nest](/cli/subagents#nesting-depth) them) consume more credits.
Enterprise admins can also access usage analytics programmatically through the [Analytics API](/desktop/accounts/api-reference/api-introduction) to monitor consumption across their organization.
For details about credit billing and usage tracking, refer to your enterprise agreement or contact your account executive.
## Further Reading
For more information about legacy Windsurf enterprise features, see the [Devin Desktop documentation](/desktop/getting-started):
* [Guide for Admins](/desktop/guide-for-admins) — Administration and team management
* [SSO & SCIM](/desktop/accounts/sso-scim) — Single sign-on and user provisioning
* [API Reference](/desktop/accounts/api-reference/api-introduction) — Access analytics and usage data
# Essential Commands
Source: https://docs.devin.ai/cli/essential-commands
If you remember nothing else...
## Starting Devin CLI
By default, sessions happen in a REPL, a graphical terminal interface where you can chat back and forth and observe Devin's actions.
```bash theme={null}
devin # Start interactive REPL (no prompt)
devin -- your prompt here # Start REPL with initial prompt
devin -p "prompt" # Single-turn, no REPL: print response to stdout and exit
devin -p -- prompt words here # Same, using -- separator (still works)
```
Use `--` before your prompt so it is interpreted as a prompt and not a subcommand.
Single-turn mode (`-p`) is great for scripts and automations.
Type `@` in the prompt input to open autocomplete for local files/directories. Selecting one adds it as context for your message.
You can paste images from your clipboard with **Ctrl+V**. Attached images appear in the input area and can be managed with **Left/Right** to navigate and **Backspace** to remove.
## Running shell commands
Devin may run shell commands while working. If a command is still running after the default wait period, Devin moves it to the background and shows how long it waited along with the background shell ID. Devin can then continue working and check the command's output later.
***
## Modes
Devin CLI has 4 built-in permission modes: **Normal**, **Accept Edits**, **Bypass**, and **Autonomous**, and 3 agent-modes: **Normal**, **Plan**, and **Ask**. For plan and ask, use `/plan` and `/ask`.
Auto-approves read-only tools within the current directory, and asks for permission for write/execute operations.
```bash theme={null}
/normal
# or
/mode normal
```
This is the default mode.
Auto-approves file edits within the workspace while still prompting for shell commands and other actions. We expect people to spend most of their time here.
```bash theme={null}
/accept-edits
# or
/mode accept-edits
```
Auto-approves **all** tool calls, including writes and shell commands.
```bash theme={null}
/bypass
# or
/mode bypass
```
You can also start in bypass mode:
```bash theme={null}
devin --permission-mode bypass
```
Aliases: `/yolo`, `/dangerous`
Bypass mode **never** overrides organization-level permissions configured by your admin via [Team Settings](/cli/enterprise/team-settings). Admin-enforced deny and ask rules **always** take priority.
Roughly equivalent to Accept Edits in the current workspace, with the additional ability to run any shell command within an [OS-level sandbox](/cli/reference/configuration/config-file#sandbox) (to contain what those commands can actually touch).
```bash theme={null}
devin --sandbox --permission-mode autonomous
```
Autonomous is the **only** permission mode available when running with `--sandbox`, and it is selected automatically — Normal, Accept Edits, and Bypass are hidden in sandbox sessions.
In Autonomous mode...
* You are prompted for **capabilities rather than commands**.
* Commands respect the `Write` and `Read` scopes via a filesystem sandbox.
* Commands prompt you when they try to connect to network resources.
* Read-only operations within the current directory auto-approve.
Autonomous relies on the sandbox for safety. Without `--sandbox`, the mode is unavailable — use Bypass if you want unattended execution without OS-level isolation. See [Bypass vs Autonomous](#bypass-vs-autonomous) below for a direct comparison.
### Bypass vs Autonomous
Bypass and Autonomous both reduce approval prompts, but they rely on different safety mechanisms:
| | Bypass | Autonomous |
| ------------------------------------------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------- |
| Requires `--sandbox` | No | Yes (only available in sandbox sessions) |
| Shell commands | Auto-approved, unrestricted | Auto-approved, contained by the sandbox |
| File writes via `edit`/`write` tools | Auto-approved anywhere | Still prompt (granting a scope expands the sandbox) |
| Network access | Unrestricted | Filtered by the sandbox's [domain allow/deny lists](/cli/reference/configuration/config-file#sandbox) |
| Respects admin [Team Settings](/cli/enterprise/team-settings) | Yes | Yes |
Pick Bypass when you trust the agent with your whole machine. Pick `--sandbox` (which selects Autonomous) when you want unattended execution with OS-enforced limits on what files and domains the agent can touch. If you like the feel of bypass but want the agent to have its own computer, try cloud Devin!
## Session History
Your conversation history is saved so you can resume a session later.
```bash theme={null}
devin -c # Continue the most recent session in the current directory
devin --continue
devin -r # Pick from recent sessions
devin --resume
devin -r brisk-otter # Resume a specific session by ID
```
***
## Slash Commands
You can use these commands while in an active session.
### Navigation & Control
| Command | Description |
| ------------------ | ---------------------------------------- |
| `/help` | See all available commands |
| `/exit` or `/quit` | Exit the application |
| `/clear` or `/new` | Clear conversation history (start fresh) |
You can also type `exit` or `quit` as plain text (without the `/` prefix) to exit.
### Mode Switching
| Command | Description |
| ----------------- | ------------------------------------------------------------------------------------------ |
| `/mode` | Show current mode |
| `/mode ` | Switch mode (`normal`, `accept-edits`, `plan`, `bypass`; `autonomous` in sandbox sessions) |
| `/normal` | Switch to Normal mode (default) |
| `/plan` | Switch to Plan mode |
| `/ask ` | Ask a question without making code changes (oneshot) |
| `/bypass` | Switch to Bypass mode (aliases: `/yolo`, `/dangerous`) |
### Model Switching
| Command | Description |
| -------- | ------------------- |
| `/model` | Show model selector |
### Session Management
| Command | Description |
| ------------------ | ------------------------------------------------------------------- |
| `/resume` | Open the interactive session picker |
| `/resume ` | Resume session by ID |
| `/ls` | List recent sessions in current directory (alias: `/list-sessions`) |
| `/ls --all` | List all sessions across all directories |
| `/continue` | Resume most recent session |
| `/continue ` | Resume session by ID |
| `/rm-session ` | Irreversibly delete a session by ID |
### Workspace
| Command | Description |
| ---------------------- | ------------------------------------------------- |
| `/workspace` | List workspace directories (alias: `/workspaces`) |
| `/add-dir ` | Add additional workspace directory |
| `/undo-add-dir ` | Remove a workspace directory |
### Automation
| Command | Description |
| ---------------- | ------------------------------------------------------------------------------------ |
| `/loop ` | Run a prompt then auto-review the diff in a loop (requires clean git state to start) |
### Extensibility
| Command | Description |
| -------- | ------------------------------------------------------------------- |
| `/hooks` | List all loaded hooks with their IDs, event types, and source paths |
### Account & System
| Command | Description |
| ---------- | ---------------------------------------- |
| `/login` | Authenticate with Devin |
| `/logout` | Clear stored credentials and exit |
| `/update` | Check for and install updates |
| `/upgrade` | Upgrade your subscription plan |
| `/bug` | Report a bug to the Devin CLI developers |
| `/compact` | Force conversation compaction |
If you installed Devin for Terminal via Homebrew, `/update` will direct you to use `brew upgrade devin` instead of performing a self-update.
***
## Keyboard Shortcuts
Here are the most important keyboard shortcuts. See [Keyboard Shortcuts](/cli/reference/keyboard-shortcuts) for more shortcuts.
| Shortcut | Description |
| -------------------------- | -------------------------------------------------------------------- |
| `Shift+Tab` | Cycle between modes (Normal, Accept Edits, Plan, Bypass, Autonomous) |
| `Ctrl+C` | Clear input text, or cancel the running agent |
| `Esc` | Cancel the running agent |
| `Shift+Enter` | Insert a newline (multi-line input) |
| `Ctrl+V` or `Shift+Insert` | Paste from clipboard |
| `Ctrl+G` | Open external editor |
| `Ctrl+O` | Open full-screen thinking trace viewer |
| `@` | Mention files to add as context |
# Configuration
Source: https://docs.devin.ai/cli/extensibility/configuration
How to configure Devin CLI behavior with config files
Devin CLI is configured through JSON files (with comment support) at the user and project level. These config files control the agent's model, permissions, MCP servers, and more.
***
## Config File Locations
**Path:** `~/.config/devin/config.json`
Your personal defaults that apply across all projects. This is where you set your preferred model, theme, and global permissions.
You can also place an `AGENTS.md` file in this directory (`~/.config/devin/AGENTS.md`) to define [global rules](/cli/extensibility/rules#global-rules) that apply to every project.
On Windows, this path is `%APPDATA%\devin\config.json` (typically `C:\Users\\AppData\Roaming\devin\config.json`).
```json theme={null}
{
"agent": { "model": "claude-sonnet-4.5" },
"permissions": {
"allow": ["Read(**)", "Exec(git)"]
}
}
```
**Path:** `.devin/config.json` (at your project root)
Shared team configuration committed to version control. Use this for project-specific MCP servers, permission policies, and import settings.
```json theme={null}
{
"permissions": {
"allow": ["Exec(npm run)", "Read(src/**)"],
"deny": ["Exec(sudo)"]
},
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
```
**Path:** `.devin/config.local.json`
Personal overrides for this project that aren't committed to git (automatically gitignored). Use this for secrets, API keys, and personal preference overrides.
```json theme={null}
{
"mcpServers": {
"github": {
"env": { "GITHUB_TOKEN": "ghp_your_token" }
}
}
}
```
***
## What You Can Configure
Choose which AI model powers the agent — from Claude Opus to GPT 5.2 to Gemini 3.
Pre-approve safe actions, block dangerous ones, and control what the agent can do without asking.
Connect external tool servers for GitHub, Linear, databases, and any custom APIs.
Import rules, skills, and configuration from Cursor, Windsurf, and Claude Code.
***
## Quick Start
The fastest way to get started is to create a `.devin/config.json` in your project root:
```json theme={null}
{
"permissions": {
"allow": [
"Read(**)",
"Exec(git)",
"Exec(npm run)"
]
}
}
```
This pre-approves file reads and common commands so the agent doesn't prompt you for every action.
You can also configure Devin CLI interactively: when the agent asks for permission, choose to save the decision to your project or user config for next time.
***
## Project vs User Settings
Not all settings are available at every level. Project configs (`.devin/config.json` and `.devin/config.local.json`) support:
* **`permissions`** — allow, deny, and ask rules
* **`mcpServers`** — MCP server definitions
* **`read_config_from`** — import settings from Cursor, Windsurf, and Claude
* **`hooks`** — lifecycle hooks ([see Hooks](/cli/extensibility/hooks/overview))
All other settings — including `agent` (model), `theme_mode`, `unicode_mode`, `show_path`, `sandbox`, and other display/behavior options — are **user-config only** and can only be set in the user config (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows).
***
## Configuration Precedence
For settings that support multiple levels, higher-priority sources win:
| Priority | Source | Shared? |
| ----------- | ------------------------------------------------------------------------------ | ---------------- |
| 1 (highest) | Organization / Team settings | Yes (enterprise) |
| 2 | Session grants (interactive approvals) | No (in-memory) |
| 3 | Project local (`.devin/config.local.json`) | No (gitignored) |
| 4 | Project (`.devin/config.json`) | Yes (committed) |
| 5 (lowest) | User (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows) | No (personal) |
Permissions are merged across levels, while MCP servers are merged by name (higher-priority source wins for same-named servers).
Organization-level (enterprise) settings can **never** be overridden by project or user config. See [Configuration Precedence](/cli/reference/configuration/global-vs-local) for full details on how merging works.
***
## Limitations
Devin CLI does not support `.codeiumignore` files. If you use Codeium's autocomplete and have configured ignore patterns, those patterns will not apply to Devin CLI.
***
## Learn More
Complete list of every configuration option and its format.
How global, project, and local settings interact and merge.
# Lifecycle Hooks
Source: https://docs.devin.ai/cli/extensibility/hooks/lifecycle-hooks
Understanding hook events and the data available at each stage
Each hook event fires at a specific point in the agent's lifecycle. Use the **matcher** field (a regex matched against the hook event's `tool_name`) to filter which tool invocations trigger your hook.
***
## PreToolUse
Fires **before** a tool executes. Use this to block, modify, or add context to tool calls.
**Stdin data:**
| Field | Description | Example |
| ------------ | ----------------------------- | ----------------------------------------------- |
| `tool_name` | Name of the tool being called | `exec`, `edit`, `mcp__github__create_issue` |
| `tool_input` | Arguments passed to the tool | `{ "command": "rm -rf /", "shell_id": "main" }` |
**Example — Block destructive commands:**
```json theme={null}
{
"PreToolUse": [
{
"matcher": "exec",
"hooks": [
{
"type": "command",
"command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); sys.exit(2 if 'rm -rf' in cmd else 0)\""
}
]
}
]
}
```
**Example — Require confirmation for writes outside src/:**
Use a script that inspects the tool input and returns a decision:
```json theme={null}
{
"PreToolUse": [
{
"matcher": "edit",
"hooks": [
{
"type": "command",
"command": "./scripts/check-edit-path.sh",
"timeout": 5
}
]
}
]
}
```
**Example — Rewrite commands before execution:**
A hook can transparently rewrite the tool's input by printing `hookSpecificOutput.updatedInput` to stdout (see [Output format](/cli/extensibility/hooks/overview#output-format)). For example, a hook script that routes shell commands through a wrapper:
```json theme={null}
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "rtk git status"
}
}
}
```
The rewritten arguments are merged into the tool call before it runs — the agent executes the updated command instead of the original.
***
## PostToolUse
Fires **after** a tool finishes executing. Use this for logging, validation, or triggering follow-up actions.
**Stdin data:**
| Field | Description |
| --------------- | -------------------------------------------------------------------------------- |
| `tool_name` | Name of the tool that ran |
| `tool_input` | Arguments that were passed |
| `tool_response` | Object with `success` (boolean), `output` (string), and `error` (string or null) |
**Example — Log all shell commands:**
```json theme={null}
{
"PostToolUse": [
{
"matcher": "exec",
"hooks": [
{
"type": "command",
"command": "sh -c 'cat >> ~/.devin-command-log'"
}
]
}
]
}
```
***
## PermissionRequest
Fires when the agent needs a permission decision. Use this to implement custom approval logic.
**Stdin data:**
| Field | Description |
| ------------ | --------------------------- |
| `tool_name` | Tool requesting permission |
| `tool_input` | Arguments for the tool call |
**Example — Auto-approve git commands:**
```json theme={null}
{
"PermissionRequest": [
{
"matcher": "exec",
"hooks": [
{
"type": "command",
"command": "python3 -c \"import sys, json; data = json.load(sys.stdin); cmd = data.get('tool_input', {}).get('command', ''); print(json.dumps({'decision': 'approve'})) if cmd.startswith('git ') else sys.exit(0)\""
}
]
}
]
}
```
***
## UserPromptSubmit
Fires when the user submits a message. Use this to add context or trigger workflows.
**Stdin data:**
| Field | Description |
| -------- | ----------------------- |
| `prompt` | The user's message text |
**Example — Inject context on every prompt:**
```json theme={null}
{
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "echo '{\"hookSpecificOutput\": {\"hookEventName\": \"UserPromptSubmit\", \"additionalContext\": \"Deploys require an approved change ticket.\"}}'"
}
]
}
]
}
```
The command prints `additionalContext` inside a `hookSpecificOutput` object on stdout, tagged with the event name. That text is injected into the agent's context:
```json theme={null}
{
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": "Deploys require an approved change ticket."
}
}
```
***
## Stop
Fires when the agent decides to stop (finish its turn). Use this to add follow-up instructions or prevent premature stopping.
**Stdin data:**
| Field | Description |
| ------------------ | ------------------------------------- |
| `stop_hook_active` | Whether a stop hook is already active |
**Example — Remind agent to run tests:**
```json theme={null}
{
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "echo '{\"decision\": \"block\", \"reason\": \"Please run the test suite before stopping.\"}'"
}
]
}
]
}
```
Be careful with stop hooks that block — they can cause the agent to loop if the condition isn't eventually satisfied.
***
## PostCompaction
Fires **after** context compaction completes successfully. Use this for logging, triggering follow-up actions, or re-injecting context that may have been lost during compaction.
**Stdin data:**
| Field | Description |
| --------- | -------------------------------------------------------------------------------- |
| `summary` | Summary text produced by the compactor (may be null if no summary was generated) |
**Example — Log compaction events:**
```json theme={null}
{
"PostCompaction": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "sh -c 'cat >> ~/.devin-compaction-log'"
}
]
}
]
}
```
***
## SessionStart
Fires when a new session begins. Use this for initialization, logging, or environment setup.
**Stdin data:**
| Field | Description |
| -------- | --------------------------- |
| `source` | How the session was started |
**Example — Run setup script:**
```json theme={null}
{
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "./scripts/dev-setup.sh",
"timeout": 10
}
]
}
]
}
```
A SessionStart command can also inject context by printing `additionalContext` inside a `hookSpecificOutput` object on stdout:
```json theme={null}
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "Session started. Project uses ESM imports only."
}
}
```
***
## SessionEnd
Fires when a session ends. Use this for cleanup or final logging.
**Stdin data:**
| Field | Description |
| -------- | --------------------- |
| `reason` | Why the session ended |
***
## Matching Multiple Events
A single hooks file can define hooks for multiple events:
```json theme={null}
{
"PreToolUse": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "./scripts/audit.sh" }
]
}
],
"PostToolUse": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "./scripts/audit.sh" }
]
}
]
}
```
## Using the Matcher
The `matcher` field is a **regex** matched against the hook event's `tool_name`. It is available for tool-related events: `PreToolUse`, `PostToolUse`, and `PermissionRequest`.
For non-tool events (`UserPromptSubmit`, `Stop`, `PostCompaction`, `SessionStart`, and `SessionEnd`), there is no `tool_name`; use `""` or omit the matcher to run the hook for every event of that type.
The matcher is not a permission glob. Patterns like `mcp__github__*` are useful in permissions, but hook matchers are regexes. Use `mcp__github__.*` in a hook matcher.
| Matcher | Matches |
| ------------------------------- | ---------------------------------------------------- |
| `""` (empty) or omitted | All tool names for tool events |
| `"exec"` | Tool names containing `exec` |
| `"^exec$"` | Only the `exec` tool |
| `"^(exec\|edit)$"` | Only `exec` or `edit` |
| `"^mcp__.*"` | All MCP tools |
| `"^mcp__github__.*"` | All tools from the `github` MCP server |
| `"^mcp__github__create_issue$"` | The `create_issue` tool from the `github` MCP server |
### Tool names you can match
Hook matchers run against the same externally-visible tool names that hook scripts receive in stdin as `tool_name`. The exact tool names available can vary by CLI mode, model, and enabled integrations.
The most common public core tool names are:
* `read`
* `edit`
* `grep`
* `glob`
* `exec`
MCP server tools appear as `mcp____`. For example, a `github` MCP server tool named `create_issue` appears as `mcp__github__create_issue`.
For other tools, match the exact `tool_name` shown in hook stdin. To confirm the complete set available in your current session, add a temporary `PostToolUse` hook with `matcher: ""` and log the stdin payload.
# Hooks
Source: https://docs.devin.ai/cli/extensibility/hooks/overview
Run custom logic when specific events occur during a session
Hooks let you run custom logic in response to events in the agent's lifecycle. You can use hooks to enforce policies, add context, log actions, modify permissions, or integrate with external systems.
Hooks are configured with a JSON format. Place them in your project's `.devin/` directory (or a user-level config) and Devin CLI runs them at the matching lifecycle events. Existing hooks in `.claude/` directories are also picked up automatically — see [Where Hooks Live](#where-hooks-live).
***
## What Can Hooks Do?
Block dangerous commands, require confirmation for specific actions, or restrict file access.
Inject additional instructions or information when specific tools are called.
Execute scripts, send notifications, or log events when things happen.
Dynamically grant or restrict permissions based on the situation.
***
## Quick Example
Create `.devin/hooks.v1.json` in your project:
```json theme={null}
{
"PreToolUse": [
{
"matcher": "exec",
"hooks": [
{
"type": "command",
"command": "./scripts/check-command.sh"
}
]
}
]
}
```
This runs `./scripts/check-command.sh` before every shell command execution. The script receives event data on stdin and can block the action by returning a non-zero exit code.
***
## Hook Events
Hooks can respond to these lifecycle events:
| Event | When it fires |
| ------------------- | ------------------------------------ |
| `PreToolUse` | Before a tool executes |
| `PostToolUse` | After a tool finishes |
| `PermissionRequest` | When a permission decision is needed |
| `UserPromptSubmit` | When the user submits a message |
| `Stop` | When the agent wants to stop |
| `SessionStart` | When a session begins |
| `SessionEnd` | When a session ends |
See [Lifecycle Hooks](/cli/extensibility/hooks/lifecycle-hooks) for details on each event and its available data.
***
## Hook Format
Each hook has a **type** (`command` or `prompt`), an optional **matcher** (regex on the hook event's `tool_name`), and configuration:
```json theme={null}
{
"PreToolUse": [
{
"matcher": "exec",
"hooks": [
{
"type": "command",
"command": "./scripts/validate.sh",
"timeout": 10
}
]
}
]
}
```
| Field | Description |
| --------- | -------------------------------------------------------------------------------------------------------------- |
| `matcher` | Regex matched against the hook event's `tool_name`. Empty string or an omitted matcher matches all tool names. |
| `type` | `"command"` to run a shell command, or `"prompt"` to evaluate an LLM prompt. |
| `command` | Shell command to run (for `command` type). |
| `prompt` | LLM prompt to evaluate (for `prompt` type). |
| `timeout` | Timeout in seconds (optional). |
### Command Hooks
Command hooks run a shell command. Event data is passed as JSON on **stdin**, and the command can return JSON on **stdout** to control the outcome (see [Output format](#output-format) below).
**Input** (stdin):
```json theme={null}
{
"hook_event_name": "PreToolUse",
"tool_name": "exec",
"tool_input": {
"command": "rm -rf /"
}
}
```
The `DEVIN_PROJECT_DIR` environment variable is automatically set to the project root directory.
See [Using the Matcher](/cli/extensibility/hooks/lifecycle-hooks#using-the-matcher) for the built-in tool names and MCP tool name format you can match.
### Output format
A command hook can print a JSON object to **stdout** to control the outcome.
To approve or block an action, return a top-level `decision` (with an optional `reason`):
```json theme={null}
{
"decision": "block",
"reason": "Destructive command blocked by policy"
}
```
To inject text into the agent's context, return `additionalContext` inside a `hookSpecificOutput` object tagged with the event name:
```json theme={null}
{
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": "Remember: deploys require an approved change ticket."
}
}
```
To transparently rewrite a tool's input before it executes, return `updatedInput` inside a `PreToolUse` `hookSpecificOutput`. Fields in `updatedInput` are merged into the tool's arguments, so you can update a subset (e.g. just `command`):
```json theme={null}
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"updatedInput": {
"command": "rtk git status"
}
}
}
```
| Output field | Description |
| -------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `decision` | `"approve"` to allow the action, or `"block"` to deny it |
| `reason` | Explanation shown to the agent |
| `hookSpecificOutput.hookEventName` | Event the output applies to (e.g. `UserPromptSubmit`, `SessionStart`, `PreToolUse`, `PostToolUse`) |
| `hookSpecificOutput.additionalContext` | Text injected into the agent's context (for `UserPromptSubmit`, `SessionStart`, `PostToolUse`) |
| `hookSpecificOutput.updatedInput` | Object merged into the tool's arguments before execution (for `PreToolUse`) |
### Exit Codes
| Code | Meaning |
| ----- | --------------------------------- |
| 0 | Success — hook continues normally |
| 2 | Block — action is denied |
| Other | Error — logged but doesn't block |
***
## Where Hooks Live
Devin CLI reads hooks from the following locations. All use the same JSON format.
### Project-Level
| Location | Description |
| ----------------------------- | ------------------------------------------ |
| `.devin/hooks.v1.json` | Standalone hooks file (recommended) |
| `.devin/config.json` | `"hooks"` key in the config file |
| `.devin/config.local.json` | `"hooks"` key (local override, gitignored) |
| `.claude/settings.json` | `"hooks"` key (Claude Code format) |
| `.claude/settings.local.json` | `"hooks"` key (Claude Code format) |
### User-Level (Global)
| Location | Description |
| ------------------------------------------------------------------------ | ---------------------------------- |
| `~/.config/devin/config.json` (`%APPDATA%\devin\config.json` on Windows) | `"hooks"` key in user config |
| `~/.claude.json` | `"hooks"` key (Claude Code format) |
| `~/.claude/settings.json` | `"hooks"` key (Claude Code format) |
| `~/.claude/settings.local.json` | `"hooks"` key (Claude Code format) |
In `.devin/hooks.v1.json`, the hooks object is the **entire file** (no wrapper key needed). In all other locations, hooks are nested under the `"hooks"` key in a settings file.
Hooks from `.claude/` paths are loaded when `read_config_from.claude` is enabled (the default). You can disable this in your [user config](/cli/reference/configuration/read-config-from) if needed.
***
## Verifying Hooks
Use the `/hooks` slash command to see all currently loaded hooks and their source files:
```
/hooks
```
***
## Next Steps
Deep dive into each event type and what data is available.
Control which config locations Devin CLI reads hooks from.
# Extensibility Overview
Source: https://docs.devin.ai/cli/extensibility/index
Customize and extend Devin CLI with rules, skills, and MCP servers
Devin CLI is designed to be deeply customizable. You can shape how the agent behaves, what tools it has access to, and how it responds to events — all through configuration files in your project or home directory.
Provide always-on context and instructions that guide the agent's behavior across every session.
Create reusable prompts and workflows the agent can invoke as slash commands or use autonomously.
Install and share bundles of skills across projects.
Define specialized subagent profiles with their own system prompts, tools, and models.
Connect external tool servers to give the agent access to APIs, databases, and more.
Run shell commands or LLM prompts at key points in the agent's lifecycle to enforce policies and automate workflows.
***
## How It All Fits Together
These features work at different layers:
* **Rules** shape the agent's personality and constraints — they're always active.
* **Skills** give the agent new capabilities it can invoke on demand.
* **Custom Subagents** define specialized worker profiles the agent can delegate tasks to.
* **MCP Servers** provide entirely new tools the agent can call.
* **Hooks** run shell commands or LLM prompts at lifecycle events (e.g., before a tool runs) to enforce policies or trigger workflows.
You can combine all of these in a single project. For example, you might have an `AGENTS.md` file with coding standards, a `review` skill for code review, an MCP server for your issue tracker, and hooks to block destructive commands.
***
## Where Configuration Lives
All project-level extensibility configuration lives in the `.devin/` directory at your project root:
```
my-project/
├── .devin/
│ ├── config.json # Project config (MCP, permissions)
│ ├── config.local.json # Personal overrides (gitignored)
│ ├── hooks.v1.json # Lifecycle hooks (Claude Code compatible)
│ ├── skills/
│ │ └── review/
│ │ └── SKILL.md # A custom skill
│ └── agents/
│ └── reviewer/
│ └── AGENT.md # A custom subagent profile
├── AGENTS.md # Project rules
└── src/
```
User-level configuration lives in `~/.config/devin/` and applies to all projects. On Windows, this path is `%APPDATA%\devin\` instead.
Files with `.local.` in the name are automatically excluded from git, so you can have personal overrides without affecting your team.
***
## Importing From Other Tools
Devin CLI can read configuration from other AI coding tools you may already use:
| Source | What's Imported |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| `AGENTS.md` / `AGENT.md` / `CLAUDE.md` | Rules (always-on context) |
| `.cursor/rules/*.md` / `.cursor/rules/*.mdc` | Rules |
| `.windsurf/rules/*.md` | Rules |
| `.claude/` directory | Commands, [custom subagents](/cli/subagents#custom-subagents), [hooks](/cli/extensibility/hooks/overview) |
This means you can start using Devin CLI without rewriting your existing configuration. Import is enabled by default and can be controlled in your config file:
```json theme={null}
{
"read_config_from": {
"cursor": true,
"windsurf": true,
"claude": true
}
}
```
Set any provider to `false` to disable importing from it.
# MCP Configuration
Source: https://docs.devin.ai/cli/extensibility/mcp/configuration
How to add, configure, and manage MCP servers
## Adding MCP Servers
### Via Command Line
The quickest way to add an MCP server:
```bash theme={null}
# stdio server — just pass the command after --
devin mcp add -- [args...]
# HTTP server — pass the URL as a positional argument
devin mcp add
# HTTP server — or use the --url flag
devin mcp add --url
```
The transport type is inferred automatically: a URL implies HTTP (Streamable HTTP), and trailing args (or `--command`) imply stdio.
Remote MCP servers use Streamable HTTP by default. If the server responds with an HTTP 4xx error, the CLI falls back to SSE on the same URL. Set `"transport": "sse"` explicitly if needed — see [Legacy SSE fallback](#legacy-sse-fallback) below.
By default, servers are saved to **local** scope (`.devin/config.local.json`, gitignored). Use `-s`/`--scope` to change:
```bash theme={null}
devin mcp add -s project # shared via .devin/config.json
devin mcp add -s user # global (~/.config/devin/config.json; %APPDATA%\devin\config.json on Windows)
```
You can also manage servers from the command line:
```bash theme={null}
devin mcp list # List all configured servers
devin mcp get # Show details for a specific server
devin mcp remove # Remove a configured server
devin mcp login # Authenticate with a server via OAuth
devin mcp logout # Remove stored OAuth credentials
devin mcp enable # Enable a disabled server
devin mcp disable # Disable a server without removing it
```
### Via Config File
Add servers directly to your config file's `mcpServers` section:
```json theme={null}
// .devin/config.json
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "@company/mcp-server"],
"env": {
"API_KEY": "your-key"
}
}
}
}
```
Project-level servers are shared with your team via version control.
```json theme={null}
// ~/.config/devin/config.json
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["/path/to/my-server.js"],
"env": {}
}
}
}
```
User-level servers apply to all your projects.
```json theme={null}
// .devin/config.local.json
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "@company/mcp-server"],
"env": {
"API_KEY": "my-personal-key"
}
}
}
}
```
Local configs are gitignored — use these for personal API keys.
***
## Server Configuration Options
MCP servers can be configured in two ways: as a **local command** (stdio transport) or as a **remote server** (HTTP transport).
### Local Command (stdio)
| Field | Type | Required | Description |
| ---------- | --------- | -------- | --------------------------------------------------------------------------------------------------------- |
| `command` | string | Yes | The executable to run |
| `args` | string\[] | No | Command-line arguments |
| `env` | object | No | Environment variables to set |
| `disabled` | boolean | No | Set to `true` to skip this server (see [Enabling and disabling servers](#enabling-and-disabling-servers)) |
### Remote Server (Streamable HTTP)
| Field | Type | Required | Description |
| ------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url` | string | Yes | The URL of the MCP server endpoint |
| `transport` | string | No | `"http"` (Streamable HTTP, default for URL-based servers) or `"sse"` (legacy SSE). When set to `"http"` or omitted, the CLI tries Streamable HTTP first and falls back to SSE on 4xx errors ([per spec](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility)). Set `"sse"` explicitly if the server's SSE endpoint is at a different path. |
| `headers` | object | No | Custom HTTP headers to include in requests |
| `oauthClientId` | string | No | Pre-registered OAuth client ID, for servers that don't support dynamic client registration (DCR), e.g. GitHub. See the "Pre-registered OAuth clients" section below. |
| `oauthClientSecret` | string | No | OAuth client secret, for confidential clients. Pair with `oauthClientId`. |
| `disabled` | boolean | No | Set to `true` to skip this server (see [Enabling and disabling servers](#enabling-and-disabling-servers)) |
### Examples
```json theme={null}
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_..."
}
}
}
}
```
```json theme={null}
{
"mcpServers": {
"notion": {
"url": "https://mcp.notion.com/mcp",
"transport": "http"
}
}
}
```
After adding an OAuth-based server, run `devin mcp login notion` to authenticate. See [Authentication](#authentication) below.
```json theme={null}
{
"mcpServers": {
"linear": {
"url": "https://mcp.linear.app/mcp",
"transport": "http"
}
}
}
```
```json theme={null}
{
"mcpServers": {
"atlassian": {
"url": "https://mcp.atlassian.com/v1/mcp",
"transport": "http"
}
}
}
```
After adding, run `devin mcp login atlassian` to authenticate. Each MCP client (Windsurf, Claude Code, Devin CLI) maintains its own OAuth session, so you must log in separately even if you've already authenticated in another tool.
```json theme={null}
{
"mcpServers": {
"my-tools": {
"command": "python",
"args": ["./scripts/mcp-server.py"],
"env": {
"DB_URL": "postgres://localhost/mydb"
}
}
}
}
```
***
## Authentication
Some remote MCP servers require OAuth authentication. After adding an OAuth-based server to your config, authenticate using the `login` command:
```bash theme={null}
devin mcp login
```
For example:
```bash theme={null}
devin mcp login notion # Authenticate with Notion
devin mcp login linear # Authenticate with Linear
```
This opens a browser window where you can authorize access. The OAuth tokens are stored locally and refreshed automatically.
You can optionally request specific OAuth scopes:
```bash theme={null}
devin mcp login notion --scopes read,write
```
To remove stored OAuth credentials for a server:
```bash theme={null}
devin mcp logout
```
If the server supports OAuth, you will also be prompted to authenticate automatically when the server is first used.
### Pre-registered OAuth clients
Most OAuth-based MCP servers support [dynamic client registration](https://datatracker.ietf.org/doc/html/rfc7591) (DCR), so Devin CLI registers itself automatically and you don't need to provide any client credentials.
Some providers (e.g. GitHub) don't support DCR and instead require a **pre-registered** OAuth client. For those, supply the client ID — and a client secret if it's a confidential client — via `oauthClientId` / `oauthClientSecret`:
```json theme={null}
{
"mcpServers": {
"my-server": {
"url": "https://mcp.example.com/mcp",
"transport": "http",
"oauthClientId": "Iv1.abc123def456",
"oauthClientSecret": "${env:MY_MCP_CLIENT_SECRET}"
}
}
}
```
When `oauthClientId` is set, Devin CLI skips dynamic client registration and uses your pre-registered client during the OAuth flow. Run `devin mcp login ` (or trigger first use) to authenticate as usual.
You can also set these from the command line when adding or logging into a server:
```bash theme={null}
devin mcp add my-server --oauth-client-id --oauth-client-secret
devin mcp login my-server --oauth-client-id --oauth-client-secret
```
`oauthClientId` / `oauthClientSecret` are OAuth client credentials used during the authorization flow. They are **not** generic per-request credentials — if a server expects a static token, use `headers` (HTTP) or `env` (stdio) instead.
Don't commit a client secret to a shared config. Reference it from an environment variable (`${env:VAR}`), read it from a file (`${file:/path}`), or put it in `.devin/config.local.json` (gitignored). See the "Managing Secrets" section below.
***
## Enabling and Disabling Servers
You can temporarily disable an MCP server without removing its configuration. A disabled server is skipped during tool discovery — its tools won't appear and the server process won't be started.
```bash theme={null}
devin mcp disable # Disable a server
devin mcp enable # Re-enable it
```
This sets the `"disabled": true` flag on the server entry in the config file. Use `-s`/`--scope` to target a specific scope:
```bash theme={null}
devin mcp disable -s project my-server
devin mcp enable -s user my-server
```
You can also set the flag directly in your config file:
```json theme={null}
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "@company/mcp-server"],
"disabled": true
}
}
}
```
Disabling is useful when you want to keep a server's configuration (including environment variables and OAuth credentials) but temporarily stop using it — for example, to reduce startup time or isolate an issue.
***
## Managing Secrets
Never commit API keys or secrets to version control. Use `.devin/config.local.json` for sensitive values.
For team projects, the recommended pattern is:
1. Define the server in `.devin/config.json` with placeholder or no env vars
2. Each team member adds their personal keys in `.devin/config.local.json`
The local config file is automatically excluded from git.
***
## MCP Permissions
You can pre-approve, deny, or force-ask for specific MCP tools in your permissions config:
```json theme={null}
{
"permissions": {
"allow": [
"mcp__github__list_issues",
"mcp__github__create_issue"
],
"deny": [
"mcp__github__delete_repo"
],
"ask": [
"mcp__linear__*"
]
}
}
```
**Permission matcher patterns:**
| Pattern | Matches |
| ------------------- | ------------------------------------ |
| `mcp__server__tool` | A specific tool on a specific server |
| `mcp__server__*` | All tools on a specific server |
| `mcp__*` | All MCP tools on all servers |
***
## Organization restrictions
If you're on an enterprise team, your admin may restrict which MCP servers you can connect to. A server you've configured can be blocked if MCP is disabled for your team, or if it isn't on your team's allowlist or in an enforced **MCP registry** — in which case it won't connect and its tools won't be available. See [Team Settings — MCP Registry](/cli/enterprise/team-settings#mcp-registry) for details.
***
## Troubleshooting
If you see errors like `Auth required` or `AuthRequired` when connecting to a remote MCP server, the server requires OAuth authentication.
Run:
```bash theme={null}
devin mcp login
```
Each MCP client authenticates independently. Even if you've already authenticated in Windsurf or Claude Code, you need to run `devin mcp login` separately for Devin CLI.
To verify your auth status, try removing and re-adding credentials:
```bash theme={null}
devin mcp logout
devin mcp login
```
Verify the command works outside Devin CLI:
```bash theme={null}
npx -y @modelcontextprotocol/server-github
```
Check that all required environment variables are set.
Ask the agent to list MCP servers and tools. The server may need a moment to initialize.
Check your permissions config. MCP tools default to prompting for approval. Add them to `permissions.allow` to auto-approve.
When connecting to an HTTP server, Devin CLI tries **Streamable HTTP** first. If the server responds with an HTTP 4xx error (e.g. 404 or 405), it automatically falls back to **legacy SSE** on the **same configured URL**. This follows the [MCP spec's backwards-compatibility guidance](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility).
The fallback only triggers on 4xx responses — connection errors, timeouts, and 5xx responses are reported directly without attempting SSE.
If your server's SSE endpoint is at a different path (e.g. `/sse` instead of `/mcp`), set `"transport": "sse"` with the SSE URL to connect directly without the Streamable HTTP attempt.
If both transports fail, the error message includes details from both attempts to help with troubleshooting.
# MCP Overview
Source: https://docs.devin.ai/cli/extensibility/mcp/overview
Extend Devin CLI with external tool servers using the Model Context Protocol
MCP (Model Context Protocol) lets you connect external tool servers to Devin CLI, giving the agent access to APIs, databases, issue trackers, and any other service you can wrap in an MCP server.
When you configure an MCP server, its tools become available to the agent just like built-in tools. The agent can discover what tools are available and call them as needed.
***
## How It Works
You define an MCP server in your config file with a command, arguments, and optional environment variables.
Devin CLI starts the server process when needed. The server connects to the external API (GitHub, Linear, etc.).
The agent discovers what tools the server provides (e.g., `create_issue`, `list_repos`).
When the agent calls an MCP tool, the request flows through the server to the external service and the result is returned.
***
## Quick Example
Add a GitHub MCP server to your project:
```json theme={null}
// .devin/config.local.json (gitignored — keep tokens out of committed config)
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}
```
Now the agent can create issues, read PRs, search repos, and more — all through natural language.
***
## Permission Control
Once configured, MCP tools appear with a namespaced format: `mcp____`. For example, a "github" server with a "create\_issue" tool becomes `mcp__github__create_issue`.
MCP tools are subject to the same permission system as built-in tools. You can control access at multiple levels:
```json theme={null}
{
"permissions": {
"allow": [
"mcp__github__*"
],
"deny": [
"mcp__github__delete_repo"
]
}
}
```
See [Permissions](/cli/reference/permissions) for the full permission syntax.
***
## Authentication
Some remote MCP servers (such as Atlassian, Notion, and Linear) require OAuth authentication. Each MCP client authenticates independently — tokens from Windsurf or Claude Code are **not** shared with Devin CLI.
After adding a remote server, authenticate with:
```bash theme={null}
devin mcp login
```
This opens a browser window for the OAuth flow. See [MCP Configuration — Authentication](/cli/extensibility/mcp/configuration#authentication) for details.
***
## Disabling Servers
You can temporarily disable an MCP server without removing its configuration or credentials:
```bash theme={null}
devin mcp disable
devin mcp enable
```
See [MCP Configuration — Enabling and disabling servers](/cli/extensibility/mcp/configuration#enabling-and-disabling-servers) for details.
***
## Next Steps
Learn how to configure MCP servers in detail
Control which MCP tools the agent can use
# Plugins
Source: https://docs.devin.ai/cli/extensibility/plugins/overview
Install and share bundles of skills from a repo, git URL, or local folder.
Plugins are in **beta**. Behavior and configuration may change in future releases.
A **plugin** is a bundle of [skills](/cli/extensibility/skills/overview) you can
install from a GitHub repo, a git URL, or a local folder and reuse across
projects. Installing a plugin makes its skills available as
`/:` slash commands, and it can pull in other plugins it depends
on automatically.
A plugin is just a source that contains:
```
my-plugin/
├── .devin-plugin/
│ └── plugin.json # The plugin manifest
└── skills/
└── review/
└── SKILL.md # An ordinary skill
```
The `skills/` directory holds ordinary skills — plugins introduce no new skill
format. See [Creating Skills](/cli/extensibility/skills/creating-skills) for the
`SKILL.md` format.
***
## Installing a plugin
A plugin source can be a GitHub `owner/repo`, a git URL, or a local path:
```bash theme={null}
# From GitHub
devin plugins install acme/review-tools
# From any git host
devin plugins install https://gitlab.com/acme/review-tools.git
# From a local folder (great for authoring)
devin plugins install ./my-plugin
```
Before installing, Devin shows what the plugin adds — the skills it provides,
any required plugins that will be auto-installed, and any policy it introduces
(for example, if it forbids other plugins). Pass `-y` / `--yes` to skip the
prompt.
Plugins are installed at the **user** level and are available across all your
projects.
***
## Managing plugins
```bash theme={null}
# List installed plugins, their versions, and whether any are blocked by policy
devin plugins list
# Show a plugin's skills and its required/optional/forbidden lists
devin plugins info review-tools
# Re-fetch a plugin (or all plugins) at the latest version
devin plugins update review-tools
devin plugins update
# Remove a plugin (auto-installed required plugins are left in place)
devin plugins remove review-tools
```
Local plugins are linked directly to their source folder, so edits are live:
`devin plugins install ./my-plugin` → edit `skills//SKILL.md` → changes
apply on the next session, no `update` needed.
***
## The manifest
`.devin-plugin/plugin.json` describes the plugin. Only `name` is required, and
it must be unique among installed plugins (it is the `/:…` namespace).
```jsonc theme={null}
{
"name": "review-tools",
"version": "1.0.0",
"description": "Code-review skills for our team",
"requiredPlugins": [
"acme/secure-base",
{ "source": "github", "repo": "acme/audit-logging" }
],
"optionalPlugins": [
"acme/deploy-tools",
{ "source": "url", "url": "https://gitlab.com/acme/extra.git" }
],
"forbiddenPlugins": ["sketchy-org/bad-plugin", "acme/*", "*"]
}
```
Supported metadata fields: `name`, `version`, `description`, `author`
(`{ name, email }`), `homepage`, `repository`, `license`, and `keywords`.
A dependency entry is a **source** — either a string shorthand or an object:
* `"owner/repo"` → GitHub
* `"https://…"`, `"git@…"`, `"ssh://…"` → git URL
* `{ "source": "github", "repo": "owner/repo" }`
* `{ "source": "url", "url": "https://gitlab.com/team/plugin.git" }`
All GitHub forms for the same repo (`owner/repo`, the HTTPS URL, the `.git`
URL, the SSH form) refer to the same plugin identity.
***
## Dependencies and governance
A plugin can declare three lists, which let a single plugin act as a curated,
governed collection of other plugins.
### `requiredPlugins`
Auto-installed (recursively) when the plugin is installed. If a required plugin
is blocked by policy, the whole install fails — there is no partial install.
### `optionalPlugins`
An **allow-list** of plugins this plugin endorses. They are **not**
auto-installed; the list only matters as a carve-out against a forbidden entry
(see below).
### `forbiddenPlugins`
A **deny-list**. Each entry is one of:
* An exact plugin identity, written as `owner/repo`, a git URL, or a local path.
* A **glob pattern** — any entry containing `*`. The `*` matches any sequence of
characters, including `/`. Patterns are normalized into canonical-identity
space first, so `acme/*` becomes `https://github.com/acme/*` (all of `acme`'s
GitHub repos), `*/secrets` matches a repo named `secrets` under any owner, and
`https://gitlab.com/acme/*` matches any repo under that path.
* The lone `"*"`, which matches every other plugin (an un-defeatable lockdown).
The policy rules are:
* **Deny wins.** A plugin is blocked if any installed plugin forbids it (via its
exact identity, a matching glob, or `"*"`).
* **Self-override.** A plugin's own `requiredPlugins`, `optionalPlugins`, and
itself are exempt from its **own** forbidden list. So
`forbiddenPlugins: ["*"]` together with `optionalPlugins: [B, C]` means "allow
myself, B, and C; forbid everything else."
* **No cross-plugin re-permitting.** One plugin's allow-lists cannot re-permit
what **another** plugin forbids. An installed plugin with
`forbiddenPlugins: ["*"]` is an un-defeatable lockdown.
* **Default open.** If no installed plugin forbids anything, nothing is blocked.
Policy is enforced at two points:
* **Install time** — installing a blocked plugin (or one whose required plugins
can't be satisfied, or whose name collides with an installed plugin) is
refused.
* **Load time** — if a plugin becomes blocked after install (for example, a
forbidding plugin is installed later), it stays on disk but its skills are
skipped at session start, with a warning naming the plugin that forbids it.
# Rules & AGENTS.md
Source: https://docs.devin.ai/cli/extensibility/rules
Provide always-on instructions and context that guide the agent in every session
Rules are persistent instructions that shape how Devin CLI behaves in your project. They're injected into the agent's context at the start of every session, ensuring consistent behavior across your team.
Common uses for rules include coding standards, architectural guidelines, preferred libraries, testing conventions, and project-specific constraints.
**To improve coding ability, speed of completion, and lower cost**, we highly recommend **using Skills instead whenever possible**. Skills are only injected into the context when relevant. **Rules and AGENTS should be kept as small as possible.**
**Our recommended pattern** is to use a rule to reference skills that the model should use in particular scenarios.
***
## AGENTS.md
The simplest way to add rules is with an `AGENTS.md` file at your project root:
```markdown theme={null}
# Project Rules
- Use TypeScript for all new files
- Follow the existing patterns in src/components/
- Always run `npm run lint` before committing
- Use pnpm, not npm or yarn
- Write tests for all new utility functions
```
Devin CLI reads this file automatically.
`AGENTS.md` is the recommended approach for project rules. It's easy to read, version-controlled, and works across multiple AI tools.
***
## Global Rules
You can also create rules that apply to **every project** by placing an `AGENTS.md` file in your user config directory:
```
~/.config/devin/AGENTS.md
```
```
%APPDATA%\devin\AGENTS.md
```
Global rules are loaded at the start of every session, regardless of which project you're working in. Use them for personal preferences that apply everywhere:
```markdown theme={null}
# My Global Rules
- Always write commit messages in conventional commit format
- Prefer functional patterns over imperative code
- Run tests before suggesting a task is complete
```
Global rules work alongside project rules — both are loaded and active at the same time. `AGENT.md` is also supported at this location.
If you use Claude Code, Devin CLI also reads `~/.claude/CLAUDE.md` as a global rule.
***
## Personal Rules with AGENTS.local.md
If you have personal instructions that shouldn't be shared with collaborators — such as preferred working style, testing habits, or review preferences — create an `AGENTS.local.md` file next to your `AGENTS.md`:
```markdown theme={null}
# My Personal Rules
- Always start by writing failing tests before implementing a fix
- Prefer functional patterns over imperative code
- Run the full test suite before marking a task as complete
```
This file is loaded alongside `AGENTS.md` with the same always-on behavior. Add it to your `.gitignore` so it stays local:
```gitignore theme={null}
AGENTS.local.md
```
This follows the same convention as `.devin/config.local.json` — the `.local.` suffix signals a personal override that shouldn't be committed.
***
## Supported File Names
Devin CLI reads rules from any of these files:
| File | Notes |
| ----------------- | ------------------------------- |
| `AGENTS.md` | Recommended |
| `AGENTS.local.md` | Personal rules (gitignored) |
| `AGENT.md` | Singular alternative |
| `.windsurfrules` | Legacy Windsurf workspace rules |
| `CLAUDE.md` | Compatible with Claude Code |
All of these are treated identically — their contents are loaded as always-on rules.
These files can exist at multiple levels in your project (not just the root). Files at the workspace root are loaded at session start. Files in subdirectories are discovered lazily when the agent accesses files in that directory, keeping the context focused on the relevant part of the codebase.
They can also be placed in the [global config directory](#global-rules) to apply across all projects, except `CLAUDE.md` which is read globally from `~/.claude/CLAUDE.md`.
***
## Rules From Other Tools
If you're coming from another AI coding tool, Devin CLI can read your existing rules:
Devin CLI reads from `.cursor/rules/*.md` and `.cursor/rules/*.mdc`.
Cursor rules support frontmatter to control activation:
```markdown theme={null}
---
description: "React component guidelines"
globs: "src/components/**/*.tsx"
alwaysApply: false
---
Use functional components with hooks. Never use class components.
```
**Activation behavior:**
* `alwaysApply: true` — Always active
* `globs` specified — Active when working with matching files
* `description` only — Agent decides when to apply
* None of the above — User must invoke manually
Devin CLI reads from `.windsurf/rules/*.md` and `.windsurf/global_rules.md`.
**Subdirectory support:** `.windsurf/rules/` directories can exist at multiple levels in your project, not just the root. Rules at the workspace root are loaded at session start. Rules in subdirectories are discovered lazily — when the agent accesses files in that directory, any `.windsurf/rules/` found there (and in parent directories up to the workspace root) are automatically loaded. This avoids polluting the agent's context with rules from unrelated parts of the project.
Windsurf rules support frontmatter:
```markdown theme={null}
---
description: "API design rules"
trigger: always_on
---
All API endpoints must return JSON with a consistent envelope format.
```
**Trigger values:** `always_on`, `manual`, `model_decision`, `agent`, `glob`
Devin CLI reads from the `.claude/` directory.
Devin CLI does not support `.codeiumignore` files. If you use Codeium's autocomplete and have configured ignore patterns, those patterns will not apply to Devin CLI.
***
## Controlling Imports
You can enable or disable reading from specific tool formats in your config file (`~/.config/devin/config.json` — or `%APPDATA%\devin\config.json` on Windows — or `.devin/config.json`):
```json theme={null}
{
"read_config_from": {
"agents_standard": true,
"cursor": true,
"windsurf": true,
"claude": true
}
}
```
Standard project rules from `AGENTS.md`, `AGENTS.local.md`, `AGENT.md`, and `.windsurfrules` are read by default. Set `"agents_standard": false` to disable importing them.
***
## Rule Activation Types
Rules loaded from external formats may have different activation behaviors:
| Type | Behavior |
| ------------------ | ----------------------------------------------------------------- |
| **Always-on** | Active in every session, no user action needed |
| **Glob-activated** | Active when the agent works with files matching specific patterns |
| **Agent-decided** | The agent chooses when to apply based on the rule's description |
| **User-invocable** | Only active when explicitly triggered by the user |
Rules from `AGENTS.md` are always "always-on".
***
## Best Practices
Long, verbose rules dilute the agent's attention. Focus on what matters most.
"Use pnpm" is better than "use the right package manager". Concrete instructions are easier to follow.
Show the pattern you want, not just a description of it.
Keep rules in your repo so the whole team benefits from the same guidelines.
For most common types of rules, consider using skills instead. Skills give you more control over when and how they're applied.
# Creating Skills
Source: https://docs.devin.ai/cli/extensibility/skills/creating-skills
Full reference for the SKILL.md format and frontmatter options
Skills are defined as `SKILL.md` files inside a named directory. This page covers everything you need to know to write effective skills.
***
## File Structure
Place skills in the appropriate directory depending on scope:
```
# Project-specific (committed to git)
.devin/skills/
└── my-skill/
└── SKILL.md
# Global — available in all projects (not committed)
# Linux/macOS:
~/.config/devin/skills/
└── my-skill/
└── SKILL.md
# Windows:
%APPDATA%\devin\skills\
└── my-skill\
└── SKILL.md
```
The directory name is the skill's identifier (used for `/my-skill` invocation). The `SKILL.md` file contains optional YAML frontmatter and the skill's prompt content.
On Windows, `%APPDATA%` typically resolves to `C:\Users\\AppData\Roaming`.
***
## Frontmatter Reference
```yaml theme={null}
---
name: my-skill
description: What this skill does (shown in completions)
argument-hint: "[file] [options]"
model: sonnet
subagent: true
allowed-tools:
- read
- grep
- glob
- exec
permissions:
allow:
- Read(src/**)
deny:
- exec
ask:
- Write(**)
triggers:
- user
- model
---
Your prompt content goes here...
```
### All Frontmatter Fields
| Field | Type | Default | Description |
| --------------- | ------- | --------------- | ------------------------------------------------------------------------------------------------------- |
| `name` | string | directory name | Display name of the skill |
| `description` | string | none | Shown in slash command completions |
| `argument-hint` | string | none | Hint shown after the command name (e.g., `[filename]`) |
| `model` | string | current model | Override the model used when running this skill |
| `subagent` | boolean | `false` | Run the skill as a [subagent](/cli/subagents) instead of inline |
| `agent` | string | none | Run the skill as a subagent using a specific [custom subagent](/cli/subagents#custom-subagents) profile |
| `allowed-tools` | list | all tools | Restrict which tools the skill can use |
| `permissions` | object | inherit | Permission overrides for this skill |
| `triggers` | list | `[user, model]` | How the skill can be invoked |
***
## Model Override
Use the `model` field to run a skill with a different model than the one active in the current session. This is useful for using a faster model for simple tasks or a more capable model for complex ones:
```yaml theme={null}
---
name: quick-fix
description: Fast lint fix using a lightweight model
model: swe
---
Fix the lint errors in the current file.
```
The model name uses the same values as the `--model` CLI flag (e.g., `opus`, `sonnet`, `swe`, `codex`). See [Models](/cli/models) for the full list. After the skill completes, the session returns to the previously active model.
***
## Running Skills as Subagents
Running skills as subagents is **experimental**. The `subagent` and `agent` frontmatter fields may change in future releases.
By default, a skill's prompt is injected into the current conversation — the agent processes it inline. You can instead run a skill as a **subagent**, which spawns an independent worker with its own context window. This is useful for skills that perform focused, self-contained tasks where you don't want the output to clutter the main conversation.
There are two ways to run a skill as a subagent:
### `subagent: true`
Set `subagent: true` to run the skill as a subagent using the default `subagent_general` profile:
```yaml theme={null}
---
name: deep-research
description: Thorough codebase research on a topic
subagent: true
model: sonnet
allowed-tools:
- read
- grep
- glob
---
Research the topic the user asked about thoroughly.
Search broadly, follow references, and trace call chains.
Report all findings with specific file paths and line numbers.
```
When invoked, this skill spawns a foreground subagent that runs the skill's prompt as its task. The parent agent waits for the subagent to complete, then reads and summarizes the results.
### `agent: `
Use the `agent` field to run the skill as a subagent with a specific [custom subagent profile](/cli/subagents#custom-subagents):
```yaml theme={null}
---
name: review-pr
description: Review the current PR using the reviewer subagent
agent: reviewer
---
Review the staged changes for correctness, security, and style issues.
```
The `agent` value must match the name of a registered subagent profile (either built-in like `subagent_explore` / `subagent_general`, or a custom profile you've defined). The subagent inherits the profile's system prompt, tool restrictions, and model — while the skill's content becomes the task.
If both `agent` and `subagent` are set, `agent` takes precedence. The `model` field on the skill overrides the subagent profile's model when both are specified.
Skills running as subagents do not spawn nested subagents — if the skill is already executing inside a subagent, it runs inline instead to prevent infinite recursion.
### Orchestrating Subagents Using Skills
Because skills can run as subagents, you can use them to orchestrate multi-step work. Define a set of subagent skills that each handle a focused task, then write a regular skill that invokes them. The outer skill becomes the orchestrator — it calls each subagent, collects the results, and decides what to do next.
For example, here are two subagent skills and an orchestrator that coordinates them:
```markdown theme={null}
---
name: research-changes
description: Research recent code changes and their impact
subagent: true
allowed-tools:
- read
- grep
- glob
- exec
---
Analyze the recent changes in this repository:
1. Run `git log --oneline -20` to see recent commits
2. For each significant commit, examine what changed and why
3. Identify any patterns, risks, or areas that need attention
Report your findings with specific file paths and commit references.
```
```markdown theme={null}
---
name: validate-tests
description: Run tests and validate coverage for recent changes
subagent: true
allowed-tools:
- read
- grep
- glob
- exec
---
Validate the test suite for the project:
1. Identify the test framework and run command
2. Run the full test suite
3. Check for any failing tests
4. Review test coverage for recently changed files
Report which tests pass, which fail, and any coverage gaps.
```
```markdown theme={null}
---
name: health-check
description: Full project health check — research changes then validate tests
---
Perform a full health check on this project:
1. First, use the /research-changes skill to understand recent changes
2. Then, use the /validate-tests skill to verify the test suite
3. Finally, synthesize the findings from both into a summary:
- What changed recently and why
- Whether tests are passing
- Any risks or recommended actions
```
Invoking `/health-check` runs the orchestrator in the main agent. It calls `/research-changes`, which spawns a subagent to explore the repo. Once that finishes, it calls `/validate-tests`, which spawns another subagent to run the tests. The orchestrator then synthesizes both results into a final summary.
A subagent skill will **never** use a subagent when calling other skills, even if those skills have `subagent: true` — they run inline instead. This means you don't need to worry about unbounded nesting. The orchestration pattern is always one level deep: the orchestrator spawns subagents, and those subagents execute everything else inline.
***
## Prompt Content
The body of the SKILL.md file (after the frontmatter) is the prompt that gets injected when the skill is invoked.
***
## Permissions
Skills can define their own permission scope using the same syntax as the main permissions config:
```yaml theme={null}
permissions:
allow:
- Read(src/**)
- Exec(npm run test)
deny:
- Write(/etc/**)
- exec
ask:
- Write(src/**)
```
**How skill permissions work:**
* `allow` — These scopes are auto-approved during skill execution
* `deny` — These scopes are blocked during skill execution
* `ask` — These scopes always prompt the user
Skill permissions are additive to (not replacing) the session's base permissions. A skill cannot grant permissions that are denied at a higher level (project or organization config).
***
## Allowed Tools
Restrict which tools the skill can use:
```yaml theme={null}
allowed-tools:
- read
- grep
- glob
```
Available tool names: `read`, `edit`, `grep`, `glob`, `exec`
You can also allow MCP tools:
```yaml theme={null}
allowed-tools:
- read
- mcp__github__list_issues
- mcp__github__create_issue
```
If `allowed-tools` is not specified, the skill has access to all tools. For safety-critical skills, always restrict to the minimum needed.
***
## Examples
### Code Review Skill
```markdown theme={null}
---
name: review
description: Review staged changes for issues
allowed-tools:
- read
- grep
- glob
- exec
permissions:
allow:
- Exec(git diff)
- Exec(git log)
---
Run `git diff --staged` and review the changes for quality issues.
Evaluate:
1. **Correctness** — Any logic errors or edge cases?
2. **Security** — Any vulnerabilities introduced?
3. **Performance** — Any obvious inefficiencies?
4. **Style** — Consistent with the codebase?
Provide a summary with specific line references.
```
### Component Generator
```markdown theme={null}
---
name: component
description: Generate a React component from a description
argument-hint: ""
allowed-tools:
- read
- edit
- grep
- glob
model: sonnet
permissions:
allow:
- Write(src/components/**)
---
Create a new React component using the name the user provides:
1. Check existing components in src/components/ for style conventions
2. Create the component file at src/components//.tsx
3. Create a barrel export at src/components//index.ts
4. Add basic tests at src/components//.test.tsx
5. Follow the patterns you find in existing components
```
### Deployment Checklist
```markdown theme={null}
---
name: deploy
description: Run through the deployment checklist
triggers:
- user
allowed-tools:
- read
- exec
- grep
permissions:
allow:
- Exec(npm run)
- Exec(git)
---
Run through the deployment checklist:
1. Run the test suite: `npm run test`
2. Run the linter: `npm run lint`
3. Check for uncommitted changes: `git status`
4. Verify the build: `npm run build`
5. Show the current branch and last commit
Report the status of each step. If anything fails, stop and explain the issue.
```
### Search Expert
```markdown theme={null}
---
name: find
description: Find relevant code across the project
argument-hint: ""
allowed-tools:
- read
- grep
- glob
triggers:
- user
- model
---
Search the codebase thoroughly for what the user asked about.
Use grep for content search and glob for file discovery.
Provide relevant file paths and code snippets.
Explain how the pieces connect.
```
***
## Tips
A skill should do one thing well. Create multiple skills rather than one mega-skill.
Show the agent what good output looks like in your prompt.
Restricting tools makes skills safer and more predictable.
Invoke your skill and iterate on the prompt until the output is what you want.
# Skills Overview
Source: https://docs.devin.ai/cli/extensibility/skills/overview
Create reusable prompts and workflows that extend the agent's capabilities
Skills are self-contained units of functionality that you can teach to Devin CLI. They bundle prompts, tool access, permissions, and workflows into a reusable package that can be invoked by either the agent or the human operator.
***
## What Are Skills?
Think of skills as expert knowledge you give the agent. A skill might teach it how to:
* Review code according to your team's standards
* Generate a specific type of component
* Run a deployment workflow
* Perform a security audit
* Set up a new service from a template
Users can invoke skills with `/skill-name` in the chat.
The agent can invoke skills on its own when relevant.
Skills can have their own permission grants and restrictions.
Restrict which tools a skill can use for safety.
Run skills as independent [subagents](/cli/subagents) with their own context window.
Use a different [model](/cli/models) for specific skills.
***
## Quick Example
Create a code review skill at `.devin/skills/review/SKILL.md` (or `.windsurf/skills/review/SKILL.md`):
```markdown theme={null}
---
name: review
description: Review code changes before committing
allowed-tools:
- read
- grep
- glob
- exec
---
Review the current git diff and provide feedback:
1. Run `git diff --staged` (or `git diff` if nothing is staged)
2. Check for:
- Logic errors or bugs
- Missing error handling
- Security issues
- Style inconsistencies
3. Summarize findings and suggest improvements
```
Now you can invoke it with `/review` in any session.
***
## How Skills Work
When a skill is invoked:
1. The skill's prompt is injected into the conversation
2. Tool access is restricted to the skill's `allowed-tools` (if specified)
3. Additional permissions from the skill's config are applied
4. The specified model is used (if different from the current one)
After the skill completes, the session returns to normal configuration.
***
## Skill Triggers
Skills can be invoked in two ways:
| Trigger | Description | Default |
| ------- | ------------------------------------------- | ------- |
| `user` | User can invoke with `/skill-name` | Enabled |
| `model` | Agent can invoke autonomously when relevant | Enabled |
```yaml theme={null}
---
name: security-check
triggers:
- user
- model
---
```
Set `triggers: [user]` to prevent the agent from invoking a skill on its own.
***
## Third-party Skills
We support the `.agents` skills standards, so third-party skill installation tools work with Devin CLI.
Third-party skills can execute arbitrary code, so install them at your own risk.
***
## Where Skills Live
Skills can be scoped to a single project or shared across all projects:
| Location | Scope | Committed to git? |
| --------------------------------------------- | ---------------------------------------- | ----------------- |
| `.agents/skills//SKILL.md` | Project-specific | Yes |
| `.devin/skills//SKILL.md` | Project-specific | Yes |
| `.windsurf/skills//SKILL.md` | Project-specific | Yes |
| `~/.agents/skills//SKILL.md` | Global (all projects) | No |
| `~/.config/devin/skills//SKILL.md` | Global (all projects) | No |
| `~/.codeium//skills//SKILL.md` | Global (all projects, channel-dependent) | No |
**Project skills** live in the `.devin/skills/` or `.windsurf/skills/` directory at your project root and are committed to version control, making them shareable with your team. Both locations use the same `SKILL.md` format.
**Global skills** live in `~/.config/devin/skills/` (following [XDG conventions](https://specifications.freedesktop.org/basedir-spec/latest/)) or `~/.codeium//skills/` (where `` is `windsurf`, `windsurf-next`, or `windsurf-insiders` depending on your CLI channel) and are available in every project on your machine.
**Windows:** The global skills path follows your system's application data directory. On Windows, use `%APPDATA%\devin\skills\\SKILL.md` (typically `C:\Users\\AppData\Roaming\devin\skills\\SKILL.md`) instead of `~/.config/devin/skills/`.
***
## Next Steps
Learn the full skill format including frontmatter options, dynamic content, and examples.
Bundle skills into a plugin you can install and share across projects.
# Hand off to cloud Devins
Source: https://docs.devin.ai/cli/handoff
Hand off a task from the Devin CLI to a cloud Devin session with /handoff.
When a task outgrows your local machine — or you want Devin to keep working while you step away — use the built-in `/handoff` command to transfer the current session to a cloud [Devin session](/get-started/first-run). The cloud session gets its own VM with a shell, browser, and full repo access, so it can keep going after you close your laptop.
```
/handoff fix the flaky integration tests in CI
```
The Devin CLI packages up the conversation context and your current git branch, then creates a cloud session that picks up where you left off. Track its progress from your terminal or in the [Devin web app](https://app.devin.ai).
Run `/handoff` without a task description and the cloud session continues from where you left off automatically.
## When to hand off
Hand a task off when it needs more than your local terminal, or when you want it to run in the background:
* **VM or server** — running a dev server, hitting endpoints, Docker builds
* **Browser** — screenshots, OAuth flows, end-to-end tests, scraping
* **CI/CD** — pipeline debugging, deployments, infrastructure changes
* **Long-running work** — migrations, batch jobs, large refactors
* **Parallel execution** — offload work to the cloud while you keep coding locally
## What carries over
The cloud session starts in a fresh VM, so the CLI includes everything it needs to pick up the thread:
* **Repo and branch** — so the cloud session clones the right repo and checks out the branch you're on.
* **Conversation context** — what you and Devin have been working on in the current session.
* **Uncommitted changes** — your work-in-progress diff carries over. Commit or stash anything you don't want sent.
Not using the Devin CLI? You can hand off from Claude Code, Codex, Cursor, or any coding agent — and from plain shell scripts — with the open-source [Devin Handoff](https://github.com/club-cog/devin-handoff) plugin. See [Hand off to Devin](/work-with-devin/devin-handoff) for setup and usage across every agent.
## Related resources
Hand off from any coding agent, not just the Devin CLI
Source, install guides, and the full script reference
# Quickstart
Source: https://docs.devin.ai/cli/index
Get up and running in 2 minutes with Devin CLI, a local command-line coding agent with deep Devin Cloud integration.
```bash theme={null}
curl -fsSL https://cli.devin.ai/install.sh | bash
```
On macOS, install Devin CLI with [Homebrew](https://brew.sh):
```bash theme={null}
brew install --cask devin-cli
```
To upgrade to the latest version later, run:
```bash theme={null}
brew upgrade --cask devin-cli
```
Download and run the installer:
* [x86\_64 (most Windows PCs)](https://static.devin.ai/cli/devin-updater-x86_64-pc-windows.exe)
* [ARM64 (Windows on ARM)](https://static.devin.ai/cli/devin-updater-aarch64-pc-windows.exe)
Alternatively, open **PowerShell** and run:
```powershell theme={null}
irm https://static.devin.ai/cli/setup.ps1 | iex
```
`irm` and `iex` are PowerShell commands. Do not run this in Git Bash or CMD — it will fail with "command not found". Use PowerShell for installation only.
After installing, you can use Devin CLI from **PowerShell**, **Windows Terminal**, or **Git Bash**.
Devin CLI is bundled with **Devin Desktop**. This installation method is available for **Legacy Windsurf Enterprise** and **Devin Enterprise** plans.
**Admin setup:** For the Devin Desktop-bundled install, an admin must first enable the install option in Devin CLI team settings by toggling on **Show "Install Devin CLI" in the Devin Desktop Command Palette**.
**User installation:**
1. Open Devin Desktop
2. Open the Command Palette with Cmd+Shift+P
(macOS) or Ctrl+Shift+P
(Windows/Linux)
3. Search for and run **Install Devin CLI**
This adds the `devin` binary to your PATH so you can use it from any terminal.
That's it! After you restart your terminal, enter a project directory and type `devin` to activate Devin CLI. Also try preloading the session with a prompt for automation:
```bash theme={null}
devin -- check out this code and suggest a feasible, helpful feature
```
You're ready to go. For must-know tips, see [Essential Commands](/cli/essential-commands).
## What's next?
Devin CLI can implement new features, fix bugs, review code, answer questions, automate tasks, and more.
Must-know commands and slash commands
Choose the right model for your task
Connect MCP servers and skills
Explore all commands and flags
***
## Devin CLI vs. Devin
Devin CLI and [Devin](/get-started/devin-intro) are separate tools designed for different workflows.
**Devin CLI** is a local coding agent that runs directly in your terminal. It works with your local files and environment, giving you fast, interactive assistance right where you code.
**Devin** is our cloud-based AI software engineer that runs in a virtual machine. It includes features like Playbooks, Secrets, Knowledge, and other capabilities that are not available in Devin CLI.
Devin CLI does not yet support Knowledge, Playbooks, or Secrets from your Devin account. We're actively working on adding support for each of these and plan to roll them out soon.
# Models
Source: https://docs.devin.ai/cli/models
Available models and how to configure them
Devin CLI supports multiple AI models. You can choose the best model for your task to optimize for maximum capability, speed, or cost efficiency.
For most users, we recommend **Adaptive** — our intelligent model router that automatically selects the best model for each task, delivering the right level of intelligence for every prompt.
***
## Available Models
Models release frequently. We typically support the latest and greatest models from **Anthropic**, **OpenAI**, **Google**, and **Cognition** within minutes of their launch. We also support a number of **leading open source models** like **DeepSeek**, **Kimi**, and **GLM**.
To stay up-to-date on model releases, consider following the [**Cognition** X account](http://x.com/cognition).
Short names like `opus`, `sonnet`, `swe`, `codex`, and `gemini` always resolve to the latest version in that model family.
### Reasoning / Thinking Levels
Some models support configurable reasoning levels, which control how much compute the model spends "thinking" before responding. You can cycle the thinking level with `Alt+T` (macOS: `Opt+T`) during a session.
***
## Setting the Model
```bash theme={null}
devin --model opus -- refactor this module
devin --model sonnet -- explain this code
```
Switch models during a session:
```text theme={null}
/model opus
/model sonnet
/model codex
```
Run `/model` with no argument to open the model selector.
Set a default in `~/.config/devin/config.json` (on Windows, `%APPDATA%\devin\config.json`):
```json theme={null}
{
"agent": {
"model": "swe-1-6-fast"
}
}
```
***
## Model Selection Tips
The correct choice of language model varies wildly from person-to-person and task-to-task. Many engineers working on the same project are convinced that their model is the best for the task, despite using different models. The fact of the matter is, AI can perform differently depending on your personal usage and writing style!
**As such, we strongly recommend trying multiple models to see which one you prefer.** At minimum we recommend trying `swe`, `gpt`, and `opus`. We find that the vast majority of use-cases can be covered by these three.
Use `opus` or `gpt` for multi-file refactors, architecture changes, and tasks requiring deep reasoning.
Use `swe` (fast) for straightforward edits, bug fixes, and questions. It's both fast and cheap at a reasonable level of intelligence.
Enterprise teams can restrict which models are available through [Team Settings](/cli/enterprise/team-settings).
# Commands & Flags
Source: https://docs.devin.ai/cli/reference/commands
Complete reference for command arguments, subcommands, and interactive slash commands
## Usage
```bash theme={null}
devin [OPTIONS] [prompt]
```
Pass an optional prompt to start a session with an initial message, or launch interactively with no arguments.
You can also read these from your terminal with `man devin`.
***
## Global Flags
| Flag | Short | Description |
| --------------------------- | ----- | ----------------------------------------------------------------------------------------------------- |
| `--model ` | | Set the AI model for this session |
| `--permission-mode ` | | Permission mode (`normal`, `dangerous`, `bypass`) |
| `--continue` | `-c` | Resume the most recent session in the current directory |
| `--resume ` | `-r` | Resume a specific session by ID |
| `--print [PROMPT]` | `-p` | Print response and exit (non-interactive mode). Optionally accepts an inline prompt. |
| `--prompt-file ` | | Load the initial prompt from a file |
| `--config ` | | Configuration file path |
| `--export [PATH]` | | Export conversation to a file after each turn (ATIF format). Uses a default path if none is provided. |
| `--respect-workspace-trust` | | Whether to respect workspace trust settings |
**Examples:**
```bash theme={null}
devin -- add a login page
devin --model opus -- refactor the auth module
devin -c # Resume last session
devin -r abc12345 # Resume specific session
devin -p "list all TODO comments" # Print response and exit
devin -p -- list all TODO comments # Same, using -- separator (still works)
devin --export -- fix the tests # Export conversation to default path
devin --export out.json -- fix tests # Export to a specific file
```
***
## Subcommands
### devin auth
Authentication related commands.
| Command | Description |
| ------------------- | ------------------------------------- |
| `devin auth login` | Log in to your account |
| `devin auth logout` | Log out and remove stored credentials |
| `devin auth status` | Check authentication status |
**Options for `devin auth login`:**
* `--force-manual-token-flow` — Skip browser-based auth and manually paste a token (useful for remote/SSH sessions)
### devin mcp
Connect and log in to Model Context Protocol servers.
| Command | Description |
| -------------------------- | ------------------------------------------------- |
| `devin mcp add ` | Add a new MCP server |
| `devin mcp list` | List all configured MCP servers |
| `devin mcp get ` | Show details for a specific MCP server |
| `devin mcp remove ` | Remove a configured MCP server |
| `devin mcp login ` | Authenticate with an MCP server via OAuth |
| `devin mcp logout ` | Remove stored OAuth credentials for an MCP server |
| `devin mcp enable ` | Enable a disabled MCP server |
| `devin mcp disable ` | Disable an MCP server without removing it |
**Options for `devin mcp add`:**
* `-t, --transport ` — Transport type (optional; inferred from URL → http, trailing args → stdio)
* `-s, --scope ` — Configuration scope (default: `local`)
* `--url ` — URL for HTTP transport (can also be passed as a positional argument after the name)
* `--command ` — Command for stdio transport (optional when trailing args are provided)
* `-e, --env ` — Environment variables (repeatable)
* `-H, --header ` — HTTP headers (repeatable)
* `--scopes ` — OAuth scopes to request (comma-separated)
* `` — Positional URL argument for HTTP (alternative to `--url`)
* `-- [ARGS...]` — Command and arguments for stdio (first arg is the command when `--command` is omitted)
HTTP servers try Streamable HTTP first and fall back to legacy SSE on 4xx errors (per the [MCP spec](https://spec.modelcontextprotocol.io/specification/2025-03-26/basic/transports/#backwards-compatibility)). You can also set `"transport": "sse"` explicitly. See [MCP Configuration → Troubleshooting](/cli/extensibility/mcp/configuration#troubleshooting).
**Examples:**
```bash theme={null}
# stdio server
devin mcp add my-server -- npx @company/mcp-server --port 3000
# HTTP server (positional URL)
devin mcp add notion https://mcp.notion.com/mcp
devin mcp add --transport http datadog-mcp https://mcp.datadoghq.com/api/unstable/mcp-server/mcp
# HTTP server (--url flag, also works)
devin mcp add notion --url https://mcp.notion.com/mcp
# With environment variables and scope
devin mcp add -e GITHUB_TOKEN=ghp_xxx github -- npx -y @modelcontextprotocol/server-github
devin mcp add -s project sentry https://mcp.sentry.dev/mcp
```
**Options for `devin mcp remove`:**
* `-s, --scope ` — Configuration scope (default: `local`)
**Options for `devin mcp login`:**
* `--scopes ` — OAuth scopes to request (comma-separated)
**Options for `devin mcp enable`:**
* `-s, --scope ` — Configuration scope (default: `local`)
**Options for `devin mcp disable`:**
* `-s, --scope ` — Configuration scope (default: `local`)
See [MCP Configuration](/cli/extensibility/mcp/configuration) for details.
### devin rules
Manage agent rules (always-on context blobs).
| Command | Description |
| ------------------------- | -------------------------------- |
| `devin rules list` | List all available rules |
| `devin rules show ` | Show details for a specific rule |
| `devin rules paths` | Show rule directory locations |
**Options for `devin rules list`:**
* `--provider ` — Filter by rule provider
See [Rules](/cli/extensibility/rules) for details.
### devin skills
Manage agent skills (slash commands and agent-triggered context blobs).
| Command | Description |
| -------------------------- | --------------------------------- |
| `devin skills list` | List all available skills |
| `devin skills show ` | Show details for a specific skill |
| `devin skills paths` | Show skill directory locations |
**Options for `devin skills list`:**
* `--trigger ` — Filter by trigger type
See [Skills](/cli/extensibility/skills/overview) for details.
### devin list
List sessions in the current directory. Alias: `devin ls`
| Command | Description |
| -------------------------- | ------------------------------------ |
| `devin list` | Interactive session picker (default) |
| `devin list --format json` | Output sessions as JSON |
| `devin list --format csv` | Output sessions as CSV |
### devin version
Print the current version and exit.
```bash theme={null}
devin version
```
This is equivalent to `devin --version`.
### devin acp
Run Devin as an [Agent Client Protocol (ACP)](https://agentclientprotocol.com/) server over stdio. This subcommand is intended to be invoked by an ACP-aware editor or IDE (such as Windsurf or Zed) as a subprocess — it speaks JSON-RPC over stdin/stdout and is not meant to be run interactively.
```bash theme={null}
devin acp
```
The ACP server reads credentials from `WINDSURF_API_KEY` if set, otherwise from the credentials stored by `devin auth login`. It can also accept credentials at runtime via the ACP `authenticate` request.
### devin update
Check for updates and optionally install them.
```bash theme={null}
devin update
```
Use `--force` to re-install even if already on the latest version:
```bash theme={null}
devin update --force
```
### devin shell
\[Feature Preview] Shell integration commands. See [Shell Integration](/cli/shell-integration) for full details.
| Command | Description |
| --------------------------- | ------------------------------------------------------- |
| `devin shell setup` | Install shell integration into your shell config file |
| `devin shell setup ` | Install for a specific shell (`bash`, `zsh`, or `fish`) |
### devin sandbox
\[Research Preview] Manage OS-level process sandboxing for the exec tool. Pass the global `--sandbox` flag to run a session with the sandbox enforced.
#### devin sandbox setup
Print the sandbox prerequisites for the current platform.
Requirements to run with `--sandbox`:
* **Linux**: requires bubblewrap (`bwrap`) and `socat`. A sandbox session fails to start with install instructions if either is missing — including in a fresh WSL distribution.
* **macOS**: works out of the box via Seatbelt; no extra packages needed.
* **Windows**: native Windows cannot run the sandbox. [Install WSL 2](https://learn.microsoft.com/windows/wsl/install) and run Devin inside your WSL distribution.
```bash theme={null}
devin sandbox setup
```
### devin setup
Interactive setup wizard for authentication and MCP configuration.
```bash theme={null}
devin setup
devin setup --force-manual-token-flow # For remote/SSH sessions
```
### devin uninstall
Uninstall Devin CLI and optionally remove all data.
| Option | Description |
| --------- | ----------------------------------------------------------------- |
| `--clean` | Remove all data including configuration, history, and custom data |
| `--force` | Skip confirmation prompt |
***
## Slash Commands
These commands are available inside an interactive session. Type them at the prompt.
### Mode & Model
| Command | Description |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `/mode [normal\|accept-edits\|plan\|bypass]` | Show or switch the current mode (`autonomous` is available in sandbox sessions) |
| `/normal` | Switch to Normal mode (default) |
| `/accept-edits` | Switch to Accept Edits mode (auto-approve file edits in workspace) |
| `/plan` | Switch to Plan mode (read-only planning) |
| `/ask ` | Ask a question without making code changes (oneshot) |
| `/bypass` | Switch to Bypass mode (auto-approve all actions) |
| `/model [name]` | Show or change the current model |
| `/fast` | Switch to SWE-1.6 Fast |
| `/theme [dark\|light\|terminal-dark\|terminal-light\|no-color]` | Switch between themes (dark, light, terminal dark, terminal light, no color) |
`/bypass` has aliases `/yolo` and `/dangerous`. All three do the same thing.
### Session Management
| Command | Description |
| ----------------------------- | ------------------------------------------------------------------------------------------------- |
| `/clear` | Clear conversation history and start a new session. Alias: `/new` |
| `/continue [session-id]` | Resume a previous session |
| `/fork [step]` | Fork the current session to a new session. Optionally fork from a specific step (see `/steps`). |
| `/steps` | List conversation steps (use with `/fork` and `/revert`) |
| `/revert ` | Revert file changes from a specific step onwards and rewind the conversation to before that step |
| `/resume [session-id]` | Open the interactive session picker, or resume a specific session by ID |
| `/ls [--all]` | List recent sessions (current directory only by default). Alias: `/list-sessions` |
| `/rename-session ` | Rename the current session |
| `/rm-session ` | Irreversibly delete a session and all its data |
| `/export` | Show export info. Use the `--export` CLI flag to enable conversation export. |
| `/exit` | Exit the application (alias: `/quit`). You can also type `exit` or `quit` without the `/` prefix. |
### Workspace
| Command | Description |
| ---------------------- | ------------------------------------------------- |
| `/workspace` | List workspace directories (alias: `/workspaces`) |
| `/add-dir ` | Add an additional workspace directory |
| `/undo-add-dir ` | Remove a workspace directory |
### Automation
| Command | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `/loop ` | Run a prompt then auto-review the diff in a loop |
| `/btw ` | Ask a quick side question. Runs a sidechain using the current conversation context and prints the answer in a box, without adding the question to the main conversation. |
### Extensibility
| Command | Description |
| -------- | ------------------------------------------------------------------- |
| `/hooks` | List all loaded hooks with their IDs, event types, and source paths |
### Utilities
| Command | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------ |
| `/help` | Show available slash commands |
| `/shortcuts` | Browse keyboard shortcuts in an interactive, searchable list grouped by category |
| `/bug [description]` | Report a bug to the Devin CLI developers |
| `/update [--force]` | Check for and install updates. Pass `--force` to re-install even when already on the latest version. |
| `/upgrade` | Upgrade your subscription plan |
| `/login` | Authenticate with your account |
| `/logout` | Clear stored credentials and exit |
| `/context` | Show context window usage |
| `/usage` | Show estimated credit/ACU usage for the session, including usage from previous openings of a resumed session |
| `/compact` | Force conversation compaction |
### Cloud Sessions (insiders only)
| Command | Description |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `/cloud-sessions [--all]` | Open an interactive picker of your recent cloud Devin sessions. Use arrow keys to navigate, type to filter, Enter to attach, Esc to cancel. Pass `--all` for org-wide sessions. |
| `/cloud-attach ` | Attach to a cloud Devin session with full TUI rendering and bidirectional input. |
***
## Modes
Modes control the agent's autonomy level by combining a permission mode with an agent profile.
Full autonomy for complex coding tasks. The agent can read, write, and execute commands with normal permission checks.
* **Permission mode:** Normal
* **Profile:** Normal
* **Use for:** Multi-file refactoring, feature implementation, bug fixes
Planning only — the agent proposes changes without making them. Read-only tool access ensures no code is modified.
* **Permission mode:** Normal
* **Profile:** Plan (read-only tools)
* **Use for:** Architecture design, understanding codebases, planning before implementation
All permission prompts are auto-approved. The agent executes freely without asking for confirmation.
* **Permission mode:** Dangerous
* **Profile:** Normal
* **Use for:** Trusted tasks where interruptions slow you down
Use Bypass mode only for tasks you fully trust. All tool calls (including destructive commands) are auto-approved.
Cycle between modes with `/mode`, or switch directly with `/normal`, `/accept-edits`, `/plan`, or `/bypass`. Use `/ask ` as a oneshot command to ask questions without switching modes.
***
## Profiles
Profiles determine the agent's available tools and behavior. Profiles are automatically set when you switch modes.
| Profile | Description | Tool Access |
| -------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `normal` | Full coding assistant (used by Normal, Accept Edits, and Bypass modes) | All tools |
| `plan` | Structured planning workflow (used by Plan mode) | Read-only tools (grep, glob, read, todo, ask\_user\_question, exit\_plan\_mode) |
| `ask` | Question answering (used by the `/ask` command) | Read-only tools (grep, glob, read, todo, ask\_user\_question) |
# Configuration File
Source: https://docs.devin.ai/cli/reference/configuration/config-file
Complete reference for the Devin CLI config file format
Devin CLI uses JSON files (with comment support) for configuration. This page documents all available options.
***
## File Locations
| File | Purpose |
| ----------------------------- | ------------------------------------ |
| `~/.config/devin/config.json` | User-wide settings |
| `.devin/config.json` | Project settings (committed) |
| `.devin/config.local.json` | Project local overrides (gitignored) |
On Windows, the user config path is `%APPDATA%\devin\config.json` (e.g. `C:\Users\\AppData\Roaming\devin\config.json`), not `~\.config\devin\config.json`.
***
## Full Config Reference
```json theme={null}
// ~/.config/devin/config.json
{
// Agent behavior
"agent": {
"model": "swe-1-6-fast", // Default model
"show_history_on_continue": true // Show messages when resuming
},
// Theme
"theme_mode": null, // "light", "dark", "terminal-dark", "terminal-light", "nocolor", or null (auto)
// Permissions
"permissions": {
"allow": [],
"deny": [],
"ask": []
},
// MCP servers
"mcpServers": {},
// Display
"show_path": false, // Show CWD in input border
"unicode_mode": "auto", // "auto", "unicode", or "ascii"
"show_hints": true, // Show tips between turns
// File completion
"include_gitignored_files": false, // Include gitignored files in @ completions
// File access
"respect_gitignore": false, // Block tool access to gitignored paths
// Commit & PR attribution
"attribution": true, // Add "Generated with Devin" / Co-Authored-By to commits & PRs
// Updates
"auto_update": true, // Install new versions in the background
// Notifications
"notify": "smart", // "never" | "smart" | "always" — terminal notifications
// Proxy settings for CLI HTTP traffic
"proxy": {
"mode": "system", // "system" | "manual" | "off"
"url": null, // Proxy URL (required for manual mode)
"no_proxy": null // Comma-separated bypass list
},
// Sandbox network filtering
"sandbox": {
"allowed_domains": [], // Domain allowlist (empty = no filtering)
"denied_domains": [], // Domain denylist (takes precedence)
"network_mode": "full" // "full" or "limited" (GET/HEAD/OPTIONS only)
},
// Import settings from other tools
"read_config_from": {
"cursor": true,
"windsurf": true,
"claude": true
}
}
```
```json theme={null}
// .devin/config.json
{
// Permissions
"permissions": {
"allow": [],
"deny": [],
"ask": []
},
// MCP servers
"mcpServers": {},
// Import settings from other tools
"read_config_from": {
"cursor": true,
"windsurf": true,
"claude": true
}
}
```
***
## Options Reference
Options marked with **User only** can only be set in the user config (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows). Only `permissions`, `mcpServers`, `read_config_from`, and `hooks` are available in project configs.
### agent (user only)
| Option | Type | Default | Description |
| -------------------------- | ------- | ---------------- | ---------------------------------------------- |
| `model` | string | `"swe-1-6-fast"` | Default AI model |
| `show_history_on_continue` | boolean | `true` | Show previous messages when resuming a session |
### theme\_mode (user only)
| Value | Behavior |
| ------------------ | ------------------------------------------------------------------------ |
| `null` | Auto-detect (asks on first run) |
| `"light"` | Light theme |
| `"dark"` | Dark theme |
| `"terminal-dark"` | Dark theme quantized to 16 ANSI colors (respects terminal color scheme) |
| `"terminal-light"` | Light theme quantized to 16 ANSI colors (respects terminal color scheme) |
| `"nocolor"` | No color output (monochrome, useful for VT100 terminals) |
### permissions
See [Permissions](/cli/reference/permissions) for full documentation.
```json theme={null}
{
"permissions": {
"allow": ["Read(**)", "Exec(git)"],
"deny": ["Exec(sudo)"],
"ask": ["Write(**/.env*)"]
}
}
```
### mcpServers
Map of server name to server configuration. Supports both local command (stdio) and remote HTTP servers. See [MCP Configuration](/cli/extensibility/mcp/configuration).
```json theme={null}
{
"mcpServers": {
"server-name": {
"command": "executable",
"args": ["arg1", "arg2"],
"env": { "KEY": "value" }
},
"remote-server": {
"url": "https://mcp.example.com/mcp",
"transport": "http"
}
}
}
```
### show\_path (user only)
Show the current working directory path in the input border. When enabled, the top border of the input box displays your prettified CWD (e.g. `~/projects/my-app`).
| Value | Behavior |
| ------- | ----------------------------- |
| `false` | Hidden (default) |
| `true` | Show CWD path in input border |
### unicode\_mode (user only)
Controls whether the terminal UI uses Unicode symbols or ASCII-safe fallbacks. Set to `"ascii"` if your terminal or font does not render Unicode glyphs correctly (e.g. the ⏺ symbol appearing as a box).
| Value | Behavior |
| ----------- | ------------------------------------------------- |
| `"auto"` | Detect Unicode support from environment (default) |
| `"unicode"` | Always use Unicode symbols |
| `"ascii"` | Always use ASCII-safe characters |
### show\_hints (user only)
Show occasional tips between turns (e.g. "Did you know: Use /model to switch between available models"). Useful for discovering CLI features; set to `false` to suppress them once you're familiar.
| Value | Behavior |
| ------- | -------------------------------- |
| `true` | Show tips occasionally (default) |
| `false` | Never show tips |
### include\_gitignored\_files (user only)
Include gitignored files in `@` tab completion results. When enabled, files matching `.gitignore` patterns will appear in `@` mention completions. This is useful if you store documentation or other files in gitignored directories that you want to reference.
| Value | Behavior |
| ------- | --------------------------------------------------- |
| `false` | Exclude gitignored files from completions (default) |
| `true` | Include gitignored files in `@` completions |
### respect\_gitignore (user only)
Control whether the agent respects `.gitignore` when reading or writing files via tools. When enabled, tool calls that access gitignored paths are blocked. This is separate from `include_gitignored_files`, which only affects `@` tab completion.
| Value | Behavior |
| ------- | --------------------------------------------------------------- |
| `false` | Agent can access all files regardless of `.gitignore` (default) |
| `true` | Block tool access to gitignored paths |
### attribution (user only)
Control whether the agent adds Devin attribution to the commits and pull requests it creates. When enabled, commit and PR bodies include a `Generated with [Devin]` line and a `Co-Authored-By: Devin` trailer. Set to `false` to omit both so no Devin attribution is added.
| Value | Behavior |
| ------- | ----------------------------------------------------------------------------------------------- |
| `true` | Add the `Generated with [Devin]` line and `Co-Authored-By` trailer to commits and PRs (default) |
| `false` | Omit all Devin attribution from commits and PRs |
### auto\_update (user only)
Control background auto-update on macOS and Linux. When enabled, new releases are downloaded and activated while Devin CLI runs, so the next invocation of `devin` picks up the latest version automatically. The currently running session is unaffected — a swap of the `current` symlink only takes effect on the next launch.
The update is designed to be safe against interruption: every filesystem step is staged to a temp path and promoted with an atomic rename, and concurrent updaters are serialized with a file lock. Quitting mid-update cannot leave the installation in a broken state — you'll just come back up on the old version.
Only applies to self-managed installations (`curl | bash` on macOS/Linux). Installations bundled with another product (e.g. Windsurf) ignore this setting and update through their parent application.
| Value | Behavior |
| ------- | ------------------------------------------------------------- |
| `true` | Download and install new versions in the background (default) |
| `false` | Only check for new versions; install manually via `/update` |
### notify
Control terminal notifications when the agent finishes or needs user input. The CLI writes a BEL character (triggers terminal bell / visual bell), an OSC 9 escape sequence (triggers a system notification in iTerm2 and compatible terminals), and an OSC 777 sequence (desktop notification in rxvt-unicode and other terminals). Terminals that do not recognize these sequences safely ignore them.
| Value | Behavior |
| ---------- | -------------------------------------------------------------------------------------- |
| `"never"` | No notifications |
| `"smart"` | Notify only when the terminal window is unfocused (uses OSC focus reporting) (default) |
| `"always"` | Notify on every qualifying event regardless of focus |
### read\_config\_from
Control importing from other AI tool configurations:
| Option | Type | Default | Description |
| ---------- | ------------ | ------- | ------------------------------ |
| `cursor` | boolean/null | `true` | Import from `.cursor/rules/` |
| `windsurf` | boolean/null | `true` | Import from `.windsurf/rules/` |
| `claude` | boolean/null | `true` | Import from `.claude/` |
Set to `false` to disable a specific import. `null` is treated as `true`.
### proxy (user only)
Configure how the CLI routes its own outbound HTTP/HTTPS traffic (API calls, updates, MCP servers, etc.). This does not affect sandbox child-process networking (see `sandbox` below).
The `mode` field selects the proxy strategy:
| Mode | Behavior |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `"system"` (default) | Respect environment variables (`HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`) and platform-native PAC (Proxy Auto-Configuration) on macOS and Windows |
| `"manual"` | Route all CLI traffic through the explicit `url` |
| `"off"` | Connect directly — no proxy |
| Option | Type | Default | Description |
| ---------- | ----------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `mode` | string | `"system"` | Proxy strategy: `"system"`, `"manual"`, or `"off"` |
| `url` | string/null | `null` | Proxy URL. Required when `mode` is `"manual"`. Supports `http://`, `https://`, and `socks5://` schemes |
| `no_proxy` | string/null | `null` | Comma-separated list of hosts/domains that bypass the proxy. Uses the same syntax as the `NO_PROXY` environment variable (e.g. `"localhost,127.0.0.1,.corp.example.com"`). Applies in any mode |
**Example — corporate proxy:**
```json theme={null}
{
"proxy": {
"mode": "manual",
"url": "http://proxy.corp.example.com:8080",
"no_proxy": "localhost,127.0.0.1,.internal.corp"
}
}
```
**Example — disable proxy:**
```json theme={null}
{
"proxy": {
"mode": "off"
}
}
```
### sandbox (user only)
Sandbox network filtering is currently unstable. If you need this feature, please reach out to your account representative for stability timelines.
Configure domain-level network filtering for the sandbox. When `--sandbox` is active and domain filtering is configured, a managed network proxy starts on loopback and the sandbox restricts all child traffic to route through it.
For a complete overview of how the sandbox works — including enterprise enforcement and how enterprise and user settings interact — see the [Sandbox documentation](/cli/sandbox).
The `--sandbox` flag enforces the active Read and Write permission scopes at the OS level. Writable roots are derived from granted `Write(...)` scopes plus workspace directories; readable roots come from `Read(...)` scopes (with platform defaults always readable). Scopes granted mid-session dynamically expand the sandbox for subsequent commands.
If `--sandbox` is passed but sandbox resolution fails (e.g., sandboxing tools are unavailable on the current platform), the CLI will refuse to start rather than running unsandboxed. This fail-closed behavior ensures the security intent of `--sandbox` is never silently bypassed.
| Option | Type | Default | Description |
| ----------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| `allowed_domains` | string\[] | `[]` | Domain patterns allowed through the proxy. When non-empty, only matching domains are allowed (allowlist mode) |
| `denied_domains` | string\[] | `[]` | Domain patterns always blocked. Deny rules take precedence over allow rules |
| `network_mode` | string | `"full"` | `"full"` allows all HTTP methods; `"limited"` allows only GET/HEAD/OPTIONS |
**Domain pattern syntax:**
| Pattern | Matches |
| ---------------- | ----------------------------- |
| `example.com` | Exact match only |
| `*.example.com` | Any subdomain (not the apex) |
| `**.example.com` | Apex domain and any subdomain |
**Example:**
```json theme={null}
{
"sandbox": {
"allowed_domains": [
"github.com",
"**.npmjs.org",
"**.crates.io",
"**.pypi.org"
],
"denied_domains": ["evil.example.com"],
"network_mode": "full"
}
}
```
Domain filtering applies when the sandbox is active (`--sandbox`). Without `--sandbox`, the sandbox section is ignored.
For enterprise teams, admins can override domain lists via [Team Settings](/cli/enterprise/team-settings#sandbox-enforcement). Enterprise allowlists are authoritative (they replace your local `allowed_domains`), while enterprise denylists are additive (merged with your local `denied_domains`).
***
## JSON with Comments
Config files support JavaScript-style comments:
```json theme={null}
{
// Line comments
"agent": {
"model": "sonnet" // Inline comments
},
/* Block
comments */
"permissions": {}
}
```
# Configuration Precedence
Source: https://docs.devin.ai/cli/reference/configuration/global-vs-local
How global, project, and local settings interact
Devin CLI loads configuration from multiple sources and merges them together. Understanding the precedence order helps you set up the right configuration for your team and personal preferences.
***
## Configuration Layers
From highest to lowest priority:
| Priority | Source | Notes |
| ----------- | ------------------------------------------------------------------------------ | -------------------- |
| 1 (highest) | Organization / Team Settings | Cannot be overridden |
| 2 | Session (interactive approvals) | In-memory only |
| 3 | Project Local (`.devin/config.local.json`) | Personal, gitignored |
| 4 | Project (`.devin/config.json`) | Shared with team |
| 5 (lowest) | User (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows) | Your defaults |
When the same setting is defined at multiple levels, the higher-priority source wins.
***
## When to Use Each Level
**Path:** `~/.config/devin/config.json` (`%APPDATA%\devin\config.json` on Windows)
Use for personal preferences that apply everywhere:
* Default model preference
* Theme preference
* Personal MCP servers (e.g., your own API keys)
* Global permission grants
```json theme={null}
{
"agent": { "model": "opus" },
"permissions": {
"allow": ["Read(**)", "Exec(git)"]
}
}
```
**Path:** `.devin/config.json`
Use for team standards committed to the repository. Only `permissions`, `mcpServers`, `read_config_from`, and `hooks` are available at this level:
* Shared MCP servers (with non-secret config)
* Team permission policies
* Import settings
* Lifecycle hooks
```json theme={null}
{
"permissions": {
"allow": ["Exec(npm run)", "Read(src/**)"],
"deny": ["Exec(sudo)"]
},
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}
```
**Path:** `.devin/config.local.json`
Use for personal overrides that shouldn't be committed:
* API keys and secrets
* Personal tool preferences for this project
* Permission overrides
```json theme={null}
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_my_personal_token"
}
}
}
}
```
Local config files are automatically excluded from git via `.git/info/exclude`.
Managed by your enterprise admin through the team settings dashboard. These settings cannot be overridden by individual users and enforce organization-wide policies like model restrictions and MCP server allowlists.
***
## What's Available at Each Level
Project configs (`.devin/config.json` and `.devin/config.local.json`) only support a subset of settings. The table below shows which settings are available at each level:
| Setting | User config | Project config |
| -------------------------- | :---------: | :------------: |
| `permissions` | ✓ | ✓ |
| `mcpServers` | ✓ | ✓ |
| `read_config_from` | ✓ | ✓ |
| `hooks` | ✓ | ✓ |
| `agent` (model) | ✓ | ✗ |
| `theme_mode` | ✓ | ✗ |
| `unicode_mode` | ✓ | ✗ |
| `show_path` | ✓ | ✗ |
| `show_hints` | ✓ | ✗ |
| `include_gitignored_files` | ✓ | ✗ |
| `sandbox` | ✓ | ✗ |
Settings marked as user-config only can only be set in the user config (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows) and do not participate in the precedence hierarchy above.
***
## How Merging Works
The precedence table above only applies to settings that support multiple levels (`permissions`, `mcpServers`, `read_config_from`, `hooks`).
### Permissions
Permission lists are **merged** (combined) across levels. A denial at a higher level cannot be overridden by an allow at a lower level.
For example, if your organization denies `Exec(sudo)`, adding `Exec(sudo)` to your user allow list has no effect — the organization denial always wins. However, other permissions like `Read(**)` at the project level are applied normally.
### MCP Servers
MCP server configs are **merged by name**. A server defined at a higher level overrides the same-named server at a lower level.
For example, if both your user config and project config define a "github" server, the project config version wins because it has higher priority than user config.
### Hooks
Hooks are **collected** from all sources and all run. A hook defined in the user config runs alongside hooks defined in the project config — they do not override each other.
***
## Project Root Detection
Devin CLI finds your project root by looking for a `.git` or `.jj` directory, walking up from your current working directory. Project config (`.devin/`) is loaded from the project root.
If you have nested `.devin/` directories (e.g., in a monorepo), subdirectory configs take precedence over ancestor configs.
***
## File Discovery Summary
| File | Found by | Shared? |
| ----------------------------------- | ------------------- | --------------- |
| `~/.config/devin/config.json` | XDG path | No |
| `.devin/config.json` | Walking up from cwd | Yes (committed) |
| `.devin/config.local.json` | Walking up from cwd | No (gitignored) |
| `.devin/skills/*/SKILL.md` | Project root | Yes (committed) |
| `~/.config/devin/skills/*/SKILL.md` | XDG path | No |
| `AGENTS.md` | Project root | Yes (committed) |
| `~/.config/devin/AGENTS.md` | XDG path | No |
**Windows:** Paths shown as `~/.config/devin/` use the XDG convention for Linux/macOS. On Windows, these resolve to `%APPDATA%\devin\` (typically `C:\Users\\AppData\Roaming\devin\`).
# Configuration Import
Source: https://docs.devin.ai/cli/reference/configuration/read-config-from
Control how Devin CLI imports settings from Cursor, Windsurf, Claude Code, OpenCode, VS Code, and Zed
Devin CLI can automatically import rules and configuration from other AI coding tools installed in your project. This happens when standard project rule files or configuration files from Cursor, Windsurf, Claude Code, OpenCode, VS Code, or Zed are detected in your workspace.
***
## How It Works
When you start a session, Devin CLI checks for standard project rule files and configuration files from supported tools, then imports what it finds.
### Standard project rules
| What's imported | Source files |
| --------------- | ------------------------------------------------------------ |
| Rules | `AGENTS.md`, `AGENTS.local.md`, `AGENT.md`, `.windsurfrules` |
### Cursor
| What's imported | Source files |
| --------------- | ------------------------------------------- |
| Rules | `.cursor/rules/*.md`, `.cursor/rules/*.mdc` |
| MCP servers | `.cursor/mcp.json` |
### Windsurf
| What's imported | Source files |
| --------------- | ------------------------------------------------------------------------------------------ |
| Rules | `.windsurf/rules/*.md`, `.windsurf/global_rules.md` (at workspace root and subdirectories) |
| Skills | `.windsurf/skills/` (project), `~/.codeium//skills/` (global, channel-dependent) |
| MCP servers | `~/.codeium//mcp_config.json` (channel-dependent) |
Devin CLI reads from the Windsurf config directory matching its own channel: stable reads from `~/.codeium/windsurf/`, next reads from `~/.codeium/windsurf-next/`, insiders reads from `~/.codeium/windsurf-insiders/`. `.windsurf/rules/` directories can exist at multiple levels in your project. Rules at the workspace root are loaded at session start. Rules in subdirectories are discovered lazily when the agent accesses files in that directory.
Windsurf workflows (`.windsurf/workflows/` and `~/.codeium//global_workflows/`) are **not** imported as skills.
### Claude Code
| What's imported | Source files |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Rules | `CLAUDE.md`, `~/.claude/CLAUDE.md` |
| Skills | `.claude/skills/**/SKILL.md` |
| Commands (as skills) | `.claude/commands/**/*.md` |
| MCP servers | `.mcp.json`, `.claude/settings.json`, `.claude/settings.local.json`, `~/.claude.json`, `~/.claude/settings.json`, `~/.claude/settings.local.json`, `~/.claude/mcp_servers.json` |
### OpenCode
| What's imported | Source files |
| --------------- | ---------------------------------------------------------------------- |
| MCP servers | `opencode.json` (project), `~/.config/opencode/opencode.json` (global) |
OpenCode uses a different MCP schema from the standard format. Commands can be arrays or strings, environment variables use the `"environment"` key, and servers use an `"enabled"` flag (inverted from the standard `"disabled"` flag). These are automatically converted during import.
### VS Code
| What's imported | Source files |
| --------------- | --------------------------------- |
| MCP servers | `.vscode/mcp.json` (project only) |
VS Code uses a `"servers"` key instead of the standard `"mcpServers"` key.
### Zed
| What's imported | Source files |
| --------------- | ---------------------------------------------------------------------- |
| MCP servers | `.zed/settings.json` (project), `~/.config/zed/settings.json` (global) |
Zed uses a `"context_servers"` key in its settings file.
***
## Disabling Configuration Import
To stop importing from a specific tool, set it to `false` in your config:
```json theme={null}
// ~/.config/devin/config.json
// (on Windows: %APPDATA%\devin\config.json)
{
"read_config_from": {
"agents_standard": false,
"cursor": false,
"windsurf": false,
"claude": false,
"opencode": false,
"vscode": false,
"zed": false
}
}
```
```json theme={null}
// .devin/config.json
{
"read_config_from": {
"windsurf": false
}
}
```
You can disable imports selectively — for example, import from Cursor but not Windsurf:
```json theme={null}
{
"read_config_from": {
"cursor": true,
"windsurf": false
}
}
```
***
## Options
| Option | Type | Default | Description |
| ----------------- | ------- | ------- | --------------------------------------------------------------------------------------------------- |
| `agents_standard` | boolean | `true` | Import standard project rules from `AGENTS.md`, `AGENTS.local.md`, `AGENT.md`, and `.windsurfrules` |
| `cursor` | boolean | `true` | Import rules and MCP servers from Cursor config files |
| `windsurf` | boolean | `true` | Import rules, skills, and MCP servers from Windsurf |
| `claude` | boolean | `true` | Import rules, skills, commands, and MCP servers from Claude Code |
| `opencode` | boolean | `true` | Import MCP servers from OpenCode config files |
| `vscode` | boolean | `true` | Import MCP servers from VS Code config files |
| `zed` | boolean | `true` | Import MCP servers from Zed settings files |
Setting a value to `true` (or leaving it unset) enables import. Setting it to `false` disables import for that tool.
***
## Default Behavior
If you don't explicitly configure `read_config_from`, all imports are enabled by default. Set any option to `false` to disable imports from that tool.
# Keyboard Shortcuts
Source: https://docs.devin.ai/cli/reference/keyboard-shortcuts
Common keyboard shortcuts in Devin CLI
## Input Shortcuts
These shortcuts work while typing at the prompt.
| Shortcut | Description |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| `Enter` | Submit your message |
| `Shift+Enter`\* or `Alt+Enter` | Insert a newline (for multi-line input) |
| `Shift+Tab` | Cycle between modes (Normal, Accept Edits, Plan, Bypass, Autonomous) |
| `Ctrl+C` | Cancel current input (clears text), or cancel running agent |
| `Ctrl+D` | Exit (when input is empty) |
| `Esc` | Cancel running agent |
| `Ctrl+G` | Open external editor for composing your message |
| `Ctrl+R` | Open fuzzy search over previous prompts and insert the selected prompt |
| `Ctrl+O` | Open full-screen viewer for the thinking trace |
| `Ctrl+L` | Redraw / refresh the screen |
| `Ctrl+V` or `Shift+Insert` | Paste from clipboard (images appear in input area; use Left/Right to navigate, Backspace to remove) |
| `!` | Enter bash mode to run a shell command directly (when input is empty). Press `Backspace` or `Esc` on an empty input to exit bash mode |
| `@` | Open file/directory autocomplete to add context |
On macOS, `Alt` is the `Option` key. Some shortcuts below use `Alt` (Option) as a modifier. We recommend [configuring Option as Meta](/cli/reference/terminal-compatibility#configuring-option-as-meta-on-macos) for the best experience.
\* Requires a [compatible terminal](/cli/reference/terminal-compatibility). Terminals that do not support the Kitty keyboard protocol cannot distinguish `Shift+Enter` from `Enter`. Use `Alt+Enter` or `Ctrl+J` instead.
***
## Mode & Model Shortcuts
| Shortcut | Description |
| ------------------------ | ------------------------------------------------------------------------------------ |
| `Shift+Tab` | Cycle to the next mode (Normal → Accept Edits → Plan → Bypass → Autonomous → Normal) |
| `Alt+T` (macOS: `Opt+T`) | Cycle thinking level for the current model |
You can also switch modes with slash commands: `/normal`, `/plan`, `/bypass`, or `/mode `. Use `/ask ` as a oneshot command to ask questions without switching modes.
***
## Text Editing
The input uses readline-style or Emacs-style keybindings for text editing.
# Permissions
Source: https://docs.devin.ai/cli/reference/permissions
Control what the agent can do with fine-grained permission rules
The permission system controls which actions the agent can perform without asking for your approval. You can pre-approve safe actions, block dangerous ones, and always prompt for sensitive operations.
***
## Default Permission Behavior
Devin CLI uses a tiered permission system to balance power and safety. The default behavior depends on the current [mode](/cli/essential-commands#modes):
Each cell shows whether that tool runs automatically (**Auto**, no prompt) or waits for your approval (**Prompt**) in that mode:
| Tool type | Example | Normal | Accept Edits | Bypass | Autonomous (sandbox) |
| ----------------------------- | ---------------------- | ------ | ------------------- | ------ | -------------------- |
| Read-only | File reads, grep, glob | Auto | Auto | Auto | Auto |
| Fetch | HTTP requests | Prompt | Prompt | Auto | Auto |
| Bash commands | Shell execution | Prompt | Prompt | Auto | Auto |
| File edits via `edit`/`write` | Edit/write files | Prompt | Auto (in workspace) | Auto | Prompt |
In **Normal mode** (the default), read-only operations are auto-approved while writes and shell commands require your explicit approval. Each time you approve an action, you can choose to allow it once, for the session, or permanently for the project.
In **Accept Edits mode**, file edits within the workspace are auto-approved, but shell commands and writes outside the workspace still prompt.
In **Bypass mode**, all tool calls are auto-approved without prompting.
In **Autonomous mode**, shell commands and network fetches auto-approve because the OS-level sandbox enforces what they can touch. Direct file edits via the `edit`/`write` tools still prompt, because those tools operate outside the sandbox. Autonomous is only available when the [OS-level sandbox](#autonomous-mode) is active.
Bypass and Autonomous modes do **not** override organization-level permissions. Admin-enforced deny and ask rules configured via [Team Settings](/cli/enterprise/team-settings) remain active regardless of the user's permission mode. See [Precedence](#precedence) for details.
### Autonomous Mode
Autonomous is the permission mode that pairs with the `--sandbox` flag. Conceptually it is roughly "Accept Edits in the current workspace" plus the ability to run any shell command, with both behaviors contained by the OS-level sandbox. When sandbox is active:
* **It is the only permission mode available.** Normal, Accept Edits, and Bypass are hidden in sandbox sessions. Plan mode remains available.
* **Shell commands and fetches auto-approve** instead of prompting, because the sandbox enforces what they can read, write, and reach over the network.
* **Direct file edits via the `edit` and `write` tools still prompt.** These tools run inside the CLI process rather than inside the sandbox, so they cannot be bounded by it. Granting a `Write(...)` scope at the prompt dynamically expands the sandbox so subsequent shell commands can write there.
* **Scopes granted mid-session dynamically expand the sandbox** for subsequent commands.
```bash theme={null}
devin --sandbox --permission-mode autonomous
```
Use Bypass when you want unrestricted execution without OS-level isolation; use `--sandbox` (which selects Autonomous) when you want unattended execution with OS-enforced limits on filesystem and network access. See the [sandbox configuration reference](/cli/reference/configuration/config-file#sandbox) for details on writable/readable roots and domain filtering, and [Team Settings → Sandbox Enforcement](/cli/enterprise/team-settings#sandbox-enforcement) for enterprise controls.
***
## How Permissions Work
When the agent calls a tool, the permission system checks your rules in priority order:
1. **Deny rules** — Checked first. If matched, the action is blocked immediately.
2. **Ask rules** — Checked second. If matched, you're always prompted (overrides any allow rules).
3. **Allow rules** — Checked last. If matched, the action proceeds without prompting.
4. **Default** — If no rule matches, you're prompted for approval.
Because deny is checked before ask, and ask is checked before allow, a deny rule always wins. If the same scope matches both a deny and an ask rule, the deny takes effect.
***
## Configuration
Add permissions to your config file's `permissions` section:
On Windows, the user config path is `%APPDATA%\devin\config.json` (typically `C:\Users\\AppData\Roaming\devin\config.json`) rather than `~/.config/devin/config.json`. See [Configuration File](/cli/reference/configuration/config-file#file-locations) for details.
```json theme={null}
// .devin/config.json
{
"permissions": {
"allow": [
"Read(src/**)",
"Exec(npm run)"
],
"deny": [
"Exec(rm)"
]
}
}
```
```json theme={null}
// ~/.config/devin/config.json
{
"permissions": {
"allow": [
"Read(**)",
"Exec(git)"
]
}
}
```
```json theme={null}
// .devin/config.local.json
{
"permissions": {
"allow": [
"Exec(docker compose)"
]
}
}
```
***
## Permission Syntax
There are two types of permission matchers: **scope-based** (controlling what paths/commands/URLs are accessible) and **tool-based** (controlling which tools can be used).
### Scope-Based Permissions
Controls file read access. The glob pattern matches file paths.
```json theme={null}
"allow": [
"Read(src/**)", // All files under src/
"Read(~/.config/**)", // Home config files
"Read(/tmp/**)" // Temp directory
]
```
Directory paths automatically match all files within them.
Controls file write/edit access.
```json theme={null}
"allow": [
"Write(src/**)", // Can write anywhere in src/
"Write(tests/**)" // Can write test files
],
"deny": [
"Write(*.lock)", // Can't modify lock files
"Write(.env*)" // Can't modify env files
]
```
Controls shell command execution. Matches commands that start with the given prefix.
```json theme={null}
"allow": [
"Exec(git)", // git, git status, git commit...
"Exec(npm run)", // npm run test, npm run build...
"Exec(python)" // python, python script.py...
],
"deny": [
"Exec(rm)", // Blocks rm, rm -rf, etc.
"Exec(sudo)" // Blocks sudo commands
]
```
`Exec(git)` matches "git", "git status", "git commit -m 'msg'" but NOT "gitk" or "github-cli". The prefix must match as a complete word.
Controls HTTP fetch access using URL patterns.
```json theme={null}
"allow": [
"Fetch(https://api.github.com/*)", // GitHub API
"Fetch(https://*.example.com/*)", // All example.com subdomains
"Fetch(domain:npmjs.org)" // Any URL on npmjs.org
]
```
URL patterns follow the [WHATWG URL Pattern](https://urlpattern.spec.whatwg.org/) standard. The `domain:` shorthand matches any path on the exact domain.
### Tool-Based Permissions
Match by tool name to control entire tools:
```json theme={null}
{
"permissions": {
"deny": [
"edit", // Block all file edits
"exec" // Block all command execution
],
"allow": [
"read", // Allow all file reads
"grep", // Allow all searches
"glob" // Allow all file finding
]
}
}
```
**Available tool names:** `read`, `edit`, `grep`, `glob`, `exec`
### MCP Tool Permissions
Control access to MCP server tools:
```json theme={null}
{
"permissions": {
"allow": [
"mcp__github__list_issues", // Specific tool on specific server
"mcp__github__*", // All tools on github server
"mcp__*" // All MCP tools
],
"deny": [
"mcp__github__delete_repo" // Block specific dangerous tool
]
}
}
```
| Pattern | Matches |
| ------------------- | ------------------------ |
| `mcp__server__tool` | One specific tool |
| `mcp__server__*` | All tools on a server |
| `mcp__*` | All MCP tools everywhere |
***
## Path Patterns
Glob patterns in `Read()` and `Write()` support:
| Pattern | Meaning |
| ------- | ----------------------------------------------- |
| `*` | Any characters in a single path segment |
| `**` | Any characters across path segments (recursive) |
| `~` | Home directory expansion |
**Examples:**
```json theme={null}
"allow": [
"Read(**)", // All files everywhere
"Read(src/**/*.ts)", // All TypeScript in src/
"Write(~/projects/myapp/**)" // Write to specific project
]
```
Use an absolute path prefix (e.g., `Read(/**)`) when you want to match all files on the system. A bare `Read(**)` without a leading `/` is resolved relative to your current working directory, so it only matches files under that directory — not files accessed via absolute paths elsewhere.
***
## Persistence Options
When the agent asks for permission during a session, you can choose how to save your decision:
| Option | Where it's saved | Shared with team? |
| ------------------------- | ------------------------------------------------------------------------ | ----------------- |
| Allow once | Not saved | No |
| Allow for session | In memory only | No |
| Allow for project | `.devin/config.json` | Yes |
| Allow for project (local) | `.devin/config.local.json` | No |
| Allow globally | `~/.config/devin/config.json` (`%APPDATA%\devin\config.json` on Windows) | No |
### MCP Server-Level Grants
When prompted for a specific MCP tool (e.g., `list_issues` on the Figma server), the permission prompt also offers broader server-level options:
| Option | Effect |
| --------------------------------------------- | ---------------------------------------------------------- |
| Allow this tool (this session) | Grants access to the specific tool for the current session |
| Always allow this tool | Persists the specific tool grant to config |
| Allow all tools on this server (this session) | Grants access to every tool on the server for the session |
| Always allow tools on this server | Persists server-wide access to config |
This lets you quickly grant blanket access to a trusted MCP server without approving each tool individually.
***
## Precedence
When multiple permission sources define rules, they're merged with this precedence (highest first):
1. Organization/team settings (if enterprise)
2. Session-level grants (interactive approvals)
3. Project local config (`.devin/config.local.json`)
4. Project config (`.devin/config.json`)
5. User config (`~/.config/devin/config.json`; `%APPDATA%\devin\config.json` on Windows)
Organization-level denials cannot be overridden by project or user config. This ensures enterprise policies are enforced.
***
## Examples
### Minimal Development Setup
Allow common read-only operations, prompt for everything else:
```json theme={null}
{
"permissions": {
"allow": [
"Read(**)",
"Exec(git status)",
"Exec(git diff)",
"Exec(git log)"
]
}
}
```
### Full Trust for a Project
Auto-approve most operations within the project:
```json theme={null}
{
"permissions": {
"allow": [
"Read(**)",
"Write(src/**)",
"Write(tests/**)",
"Exec(npm)",
"Exec(git)",
"Exec(node)"
],
"deny": [
"Exec(rm -rf)",
"Exec(sudo)",
"Write(.env*)"
]
}
}
```
### Locked-Down Enterprise
Restrict to specific safe operations, always prompt for writes:
```json theme={null}
{
"permissions": {
"allow": [
"Read(src/**)",
"Exec(git status)",
"Exec(git diff)",
"Exec(npm run lint)"
],
"deny": [
"Exec(rm)",
"Exec(sudo)",
"Write(.env*)"
],
"ask": [
"Write(**)",
"exec"
]
}
}
```
In this example, writes to `.env*` are denied outright, all other writes always prompt the user, and only a few read-only commands are auto-approved. Since deny is checked before ask, the `.env*` denial takes priority over the `Write(**)` ask rule.
# Terminal Compatibility
Source: https://docs.devin.ai/cli/reference/terminal-compatibility
Supported terminals and recommendations for the best Devin CLI experience
Devin CLI works across a wide range of terminal emulators, but some terminals offer a better experience than others. This page covers compatibility levels, recommendations, and configuration tips.
***
## Compatibility Overview
Terminals are grouped into three tiers based on their feature support:
### Fully Supported (all features work)
These terminals support the [Kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/), which enables reliable detection of key combinations like `Shift+Enter` for multi-line input.
| Terminal | Platform | Notes |
| ------------------------------------------- | ---------------------- | --------------------------------------------------------------------- |
| [Kitty](https://sw.kovidgoyal.net/kitty/) | macOS†, Linux | Recommended for power users. Used by the developers of Devin CLI. |
| [Ghostty](https://ghostty.org/) | macOS†, Linux | Recommended for power users. Used by the developers of Devin CLI. |
| [WezTerm](https://wezfurlong.org/wezterm/) | macOS†, Linux, Windows | Recommended for power users. |
| [iTerm2](https://iterm2.com/) | macOS† | Recommended for most users. Version 3.5+ required for best support. |
| [Windows Terminal](https://aka.ms/terminal) | Windows | Recommended for most users. 1.25 or higher required for best support. |
### Supported (some features limited)
These terminals work with Devin CLI but are not ideal because they do not support the Kitty keyboard protocol. For example, `Shift+Enter` will not insert a newline — use `Alt+Enter` or `Ctrl+J` instead.
| Terminal | Platform | Notes |
| -------------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| [Terminal.app](https://support.apple.com/guide/terminal/welcome/mac) | macOS† | Built-in macOS terminal. Requires [Option-as-Meta configuration](#configuring-option-as-meta-on-macos) for `Alt` shortcuts. |
| Git Bash | Windows | Included with [Git for Windows](https://git-scm.com/download/win). |
| DEC VT100 | Various | Set terminal mode to `legacy` in `/config`. |
| Generic ANSI terminals | Various | Any terminal with basic ANSI escape code support. |
| [Alacritty](https://alacritty.org/) | macOS†, Linux, Windows | Strongly discouraged / not recommended for best performance. |
† On macOS, we recommend [configuring Option as Meta](#configuring-option-as-meta-on-macos) for the best experience with `Alt`-based shortcuts.
On macOS terminals that have not been configured for Option-as-Meta, `Alt` (Option) shortcuts like `Alt+Enter` for multi-line input won't work. See [Configuring Option-as-Meta on macOS](#configuring-option-as-meta-on-macos) below.
### Unsupported
These terminals are not supported and may exhibit significant issues. We highly recommend switching to a supported terminal.
| Terminal | Platform | Notes |
| ----------------- | -------- | --------------------------------------------------------------------------------------- |
| cmd.exe (conhost) | Windows | Legacy Windows command prompt. Use [Windows Terminal](https://aka.ms/terminal) instead. |
***
## Recommendations
| Platform | Recommendation |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Windows** | [Windows Terminal](https://aka.ms/terminal) 1.25 or higher |
| **macOS** (general) | [iTerm2](https://iterm2.com/) |
| **macOS / Linux** (power users) | [Kitty](https://sw.kovidgoyal.net/kitty/), [Ghostty](https://ghostty.org/), or [WezTerm](https://wezfurlong.org/wezterm/) |
***
## Configuring Option-as-Meta on macOS
On macOS, the Option key is used as a compose key by default in most terminals, which means `Alt`-based shortcuts (like `Alt+Enter` for multi-line input or `Alt+T` for cycling thinking level) won't work until you configure the terminal to treat Option as Meta/Alt.
1. Open **iTerm2 > Settings** (or press `Cmd+,`)
2. Go to **Profiles > Keys > General**
3. Set **Left Option Key** to **Esc+**
4. Optionally set **Right Option Key** to **Esc+** as well
[iTerm2 documentation](https://iterm2.com/documentation-preferences-profiles-keys.html)
1. Open **Terminal > Settings** (or press `Cmd+,`)
2. Go to **Profiles** and select your active profile
3. Click the **Keyboard** tab
4. Check **Use Option as Meta Key**
[Apple documentation](https://support.apple.com/guide/terminal/change-profiles-keyboard-settings-trmlkbrd/mac)
Add the following to your `alacritty.toml` configuration file:
```toml theme={null}
[keyboard]
option_as_alt = "Both"
```
[Alacritty configuration reference](https://alacritty.org/config-alacritty.html)
Add the following to your `kitty.conf` configuration file:
```text theme={null}
macos_option_as_alt yes
```
Restart Kitty after making this change.
[Kitty documentation](https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.macos_option_as_alt)
Add the following to your Ghostty configuration file:
```text theme={null}
macos-option-as-alt = true
```
Restart Ghostty after making this change.
[Ghostty documentation](https://ghostty.org/docs/config/reference#macos-option-as-alt)
Add the following to your `~/.wezterm.lua` configuration file:
```lua theme={null}
config.send_composed_key_when_left_alt_is_pressed = false
config.send_composed_key_when_right_alt_is_pressed = false
```
[WezTerm documentation](https://wezfurlong.org/wezterm/config/lua/config/send_composed_key_when_left_alt_is_pressed.html)
# Sandbox
Source: https://docs.devin.ai/cli/sandbox
OS-level isolation for Devin CLI sessions: how the sandbox works, network filtering, and enterprise enforcement.
The `--sandbox` flag runs the CLI with OS-level isolation, enforcing the active Read and Write permission scopes at the operating-system level and optionally restricting network traffic.
## How the sandbox works
When the sandbox is active:
* **Writable paths** are derived from granted `Write(...)` permission scopes plus the workspace directory
* **Readable paths** are derived from granted `Read(...)` scopes (platform defaults like `/usr/bin` are always readable)
* Scopes granted mid-session dynamically expand the sandbox for subsequent commands
If sandbox resolution fails (e.g., the sandboxing tools are unavailable on the user's platform), the CLI will **refuse to start** rather than running unsandboxed. This fail-closed behavior applies whether sandbox was enabled by a [team setting](/cli/enterprise/team-settings#sandbox-enforcement) or by the user passing `--sandbox` directly, ensuring the security intent is never silently bypassed.
Common causes of sandbox resolution failure:
* **Windows**: OS-level sandboxing is not currently supported on Windows. Sessions on Windows will hard-fail when `--sandbox` is passed or when sandbox enforcement is **Required**, including when the CLI runs as an ACP server inside an IDE (e.g., Devin Desktop).
* **Linux**: Sandboxing requires `bubblewrap` (`bwrap`) and `socat` to be installed. Sessions hard-fail with installation instructions when these are missing.
* **Permission scope errors**: Invalid paths in permission scopes that can't be resolved.
## Network filtering
Sandbox network filtering is currently unstable. If you need this feature, please reach out to your account representative for stability timelines.
Configure domain-level network filtering for the sandbox in the [`sandbox` section of your config file](/cli/reference/configuration/config-file#sandbox) (user config only). When `--sandbox` is active and domain filtering is configured, a managed network proxy starts on loopback and the sandbox restricts all child traffic to route through it.
| Option | Type | Default | Description |
| ----------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------- |
| `allowed_domains` | string\[] | `[]` | Domain patterns allowed through the proxy. When non-empty, only matching domains are allowed (allowlist mode) |
| `denied_domains` | string\[] | `[]` | Domain patterns always blocked. Deny rules take precedence over allow rules |
| `network_mode` | string | `"full"` | `"full"` allows all HTTP methods; `"limited"` allows only GET/HEAD/OPTIONS |
**Domain pattern syntax:**
| Pattern | Matches |
| ---------------- | ----------------------------- |
| `example.com` | Exact match only |
| `*.example.com` | Any subdomain (not the apex) |
| `**.example.com` | Apex domain and any subdomain |
**Example:**
```json theme={null}
{
"sandbox": {
"allowed_domains": [
"github.com",
"**.npmjs.org",
"**.crates.io",
"**.pypi.org"
],
"denied_domains": ["evil.example.com"],
"network_mode": "full"
}
}
```
Domain filtering applies when the sandbox is active (`--sandbox`). Without `--sandbox`, the sandbox section is ignored.
## Excluded commands
Sometimes a specific command needs to run *outside* the sandbox — for example `git` commands that must access credentials or hooks the sandbox blocks. The `sandbox.excluded` config section lets you exclude matching commands from sandbox isolation using the same `Exec(...)` rule syntax as [permissions](/cli/reference/permissions):
| Option | Type | Description |
| ---------------- | --------- | -------------------------------------------------------------------------- |
| `excluded.allow` | string\[] | Matching commands run outside the sandbox automatically |
| `excluded.ask` | string\[] | Matching commands run outside the sandbox after the user approves a prompt |
| `excluded.deny` | string\[] | Matching commands are never excluded — they always stay inside the sandbox |
**Example:**
```json theme={null}
{
"sandbox": {
"excluded": {
"allow": ["Exec(git status *)"],
"ask": ["Exec(git push *)"],
"deny": ["Exec(git tag *)"]
}
}
}
```
**Rule resolution:** for each command, the most specific matching rule wins within a source (e.g., `Exec(git push *)` beats `Exec(git *)`), and when both user config and [team settings](#enterprise-excluded-commands) match, the more restrictive verdict wins (`deny` > `ask` > `allow`). Commands with no matching rule — including when `sandbox.excluded` is not configured at all — always run inside the sandbox.
* Only `Exec(...)` rules are supported in `sandbox.excluded`; any other rule type (e.g., `Read(...)`, `Write(...)`) is ignored with a warning.
* Exclusion is fail-closed: if a command can't be safely resolved (e.g., it can't be parsed), it stays inside the sandbox.
* Exclusions apply to the default per-command exec path. Commands run through a persistent PTY shell (interactive sessions, or when `pty_for_noninteractive_exec` is enabled) always stay inside the sandbox.
## Enterprise enforcement
Enterprise admins can control sandbox behavior for their entire organization via [Team Settings](/cli/enterprise/team-settings#sandbox-enforcement).
### Sandbox enforcement mode
Set the enforcement level for the `--sandbox` flag across your organization:
* **Optional** (default) — Users choose whether to pass `--sandbox`. No enforcement.
* **Required** — The `--sandbox` flag is forced on for all users, even if they don't pass it on the command line. All CLI sessions run with OS-level file system sandboxing that enforces Read/Write permission scopes.
A future **Strict** mode may lock down sandbox configuration entirely, preventing users from modifying sandbox settings.
Ensure all target machines are provisioned before setting sandbox enforcement mode to **Required** across your organization. If any users are on Windows, they will be unable to run the CLI until OS-level sandboxing is supported on Windows or the policy is relaxed to **Optional**.
### Enterprise domain filtering
Admins can also configure organization-wide domain allowlists and denylists:
* **Domain allowlist** — When set, **only** the domains in this list are reachable through the sandbox network proxy. This list is **authoritative**: it completely replaces any user-configured `allowed_domains`. Users cannot add additional domains to bypass admin restrictions.
* **Domain denylist** — Domains that are always blocked. Enterprise denied domains are **additive**: they are merged with the user's local `denied_domains`, making the combined list more restrictive.
**How enterprise and user domain lists interact:**
| Scenario | Enterprise config | User config | Effective result |
| -------------------- | --------------------------------- | --------------------------------- | ------------------------------------------------------------ |
| Admin sets allowlist | `allowed_domains: ["github.com"]` | `allowed_domains: ["npmjs.org"]` | Only `github.com` is allowed (enterprise replaces user list) |
| Admin sets denylist | `denied_domains: ["evil.com"]` | `denied_domains: ["risky.io"]` | Both `evil.com` and `risky.io` are blocked (merged) |
| No admin allowlist | `allowed_domains: []` | `allowed_domains: ["github.com"]` | User's allowlist is used |
Because the user's local `denied_domains` are preserved and merged additively, a user could deny a domain that appears in the enterprise allowlist. This is intentional: the combined effect is always more restrictive, never less. If this causes access issues, the user should remove the conflicting entry from their local config.
### Enterprise excluded commands
Admins can also set organization-wide [excluded command](#excluded-commands) rules in team settings:
* **Excluded allow / ask** — `Exec(...)` rules for commands that may run outside the sandbox across the organization, automatically or after a prompt.
* **Excluded deny** — `Exec(...)` rules for commands that must never run outside the sandbox. A team `deny` overrides any user-level `allow` or `ask` for matching commands, so users cannot exclude commands their admins have locked down.
Team and user rules are resolved together: the most specific matching rule wins within each source, and the more restrictive verdict wins across sources (`deny` > `ask` > `allow`).
**Example: lock down all exclusions except `gh`.** A wildcard `deny` with an `allow` carve-out keeps every command inside the sandbox except `gh`, regardless of what users configure locally. These values go into the team-settings excluded-commands configuration (not the user config file, so there is no enclosing `sandbox` key):
```json theme={null}
{
"excluded": {
"deny": ["Exec(**)"],
"allow": ["Exec(gh *)"]
}
}
```
Because the more specific `Exec(gh *)` rule beats the wildcard `Exec(**)`, `gh` commands run outside the sandbox while everything else stays inside — and the team-level wildcard `deny` overrides any user-level `allow` or `ask` rules for other commands.
## Further reading
* [Team Settings](/cli/enterprise/team-settings#sandbox-enforcement) — enterprise sandbox enforcement and domain filtering
* [Config file reference](/cli/reference/configuration/config-file#sandbox) — the user-level `sandbox` config section
* [Permissions](/cli/reference/permissions) — permission scopes that drive sandbox path resolution
# Shell Integration [Feature Preview]
Source: https://docs.devin.ai/cli/shell-integration
Wrap your shell with Devin to invoke it instantly and give Devin visibility into your recent commands.
Shell integration is a **Feature Preview**. It is available on macOS, Linux, and WSL with Bash, Zsh, and Fish. Shell integration is not yet supported on Windows (PowerShell or CMD). You can still run Devin CLI on Windows — this feature just isn't available there yet. It is feature complete but may interact poorly with other shell functionality. If you run into something incompatible please let us know!
Shell integration wraps your existing shell session so that Devin runs alongside it. Once set up, you can:
* Hit **Ctrl+G** (configurable) anywhere in your shell to invoke Devin with your current command line as context
* Type `# ` and press Enter to pass it straight to Devin (Zsh only)
* Give Devin automatic visibility into your recent shell commands and their output
We strongly recommend using `zsh` over `bash` or `fish` for best support.
***
## Setup
Run the setup command to install shell integration into your shell config file:
```bash theme={null}
devin shell setup
```
This adds managed blocks to your shell rc file (`~/.bashrc`, `~/.zshrc`, or `~/.config/fish/config.fish`). Then restart your terminal or source the config:
```bash theme={null}
source ~/.bashrc
```
```bash theme={null}
source ~/.zshrc
```
```fish theme={null}
source ~/.config/fish/config.fish
```
You can also target a specific shell explicitly:
```bash theme={null}
devin shell setup bash
devin shell setup zsh
devin shell setup fish
```
Shell integration is separate from the `devin setup` wizard. Running `devin setup` does **not** install shell integration — you must run `devin shell setup` separately.
***
## Features
### Ctrl+G shortcut (configurable)
Hit **Ctrl+G** anywhere in your shell to invoke Devin. Whatever you've typed on the current line is passed to Devin as context, along with your recent shell history.
```bash theme={null}
$ git status # type this, then hit Ctrl+G instead of Enter
# Devin opens with "git status" as context + your recent shell history
```
This works in Bash, Zsh, and Fish.
### Comment syntax (Zsh only)
In Zsh, start a line with `#`, type a natural-language message, and press Enter. Devin receives your comment as the prompt.
```bash theme={null}
$ # explain what this directory contains
# Devin opens with your comment as the prompt
```
Comment syntax requires Zsh's `INTERACTIVE_COMMENTS` option, which shell integration enables automatically.
### Shell history context
When invoked via Ctrl+G or comment syntax, Devin can see your recent shell commands *including their output*. This gives Devin context about what you've been doing, so it can provide more relevant help without you needing to explain.
***
## Removing shell integration
To remove shell integration, delete the managed blocks from your shell config file (`~/.bashrc`, `~/.zshrc`, or `~/.config/fish/config.fish`). Look for lines between `BEGIN MANAGED` and `END MANAGED` markers and remove that entire block. Then restart your terminal.
***
## Configuration
Configure shell integration behavior in your [config file](/cli/reference/configuration/config-file):
```json theme={null}
// ~/.config/devin/config.json
{
"shell": {
"keybinding_trigger": "C-g",
"enable_comments": true
}
}
```
| Option | Default | Description |
| -------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------- |
| `shell.keybinding_trigger` | `"C-g"` | Keybinding to trigger Devin from the shell. Use `C-` prefix for Ctrl (e.g., `"C-g"` for Ctrl+G). Set to `null` to disable. |
| `shell.enable_comments` | `true` | Enable `# comment` syntax in Zsh to send messages to Devin. |
After changing configuration, run `devin shell setup` again and restart your terminal for changes to take effect.
# Subagents
Source: https://docs.devin.ai/cli/subagents
Delegate tasks to independent subagents that work in the foreground or background
Subagents let the main agent spawn independent workers to handle subtasks. A subagent shares tools and codebase context with the parent, but operates in its own conversation chain -- it does not inherit the parent's conversation history. This is useful for tasks that benefit from focused, independent work -- like exploring a codebase, running tests, or implementing a feature in parallel.
You can ask the agent to use subagents explicitly (e.g. "research how auth works in a subagent"), or the agent may decide to delegate on its own when it determines a task would benefit from independent work.
In our measurements, **subagents** **both** **improve overall coding performance** **and** **reduce cost**.
***
## How Subagents Work
When the agent spawns a subagent, it selects one of the available **subagent profiles** and chooses whether the subagent should run in the foreground or background. Subagents can run in two modes:
Runs inline in your session. The parent agent pauses and waits for the subagent to finish before continuing. You can approve or deny tool calls as they come up.
Runs in parallel while the parent agent continues working. The parent is automatically notified when the subagent completes. Unapproved tools are automatically denied.
You do not see the subagent's raw output directly. When a subagent finishes, the parent agent reads the result and summarizes the key findings and actions for you.
### Subagent Cost
Subagents run as their own agent sessions, each with its own context window and inference calls, so they consume cost independently of the parent. The parent's spend covers its own work; every subagent it spawns adds its own usage on top of that.
On prompt-based plans, each subagent consumes additional credits, just like a user message does. The number of credits depends on the model the subagent uses, so tasks that spawn multiple subagents (or [nest](/cli/subagents#nesting-depth) them) consume more credits.
Because cost scales with the number of subagents, tasks that fan out into many subagents (or [nest](#nesting-depth) them) cost more. Use subagents deliberately when the parallelism or focused context is worth the additional spend.
***
## Which Model Does a Subagent Use?
Subagents do not all run on the model you picked in the model picker. Each profile decides where its model comes from:
| Profile | Model used | Effect on quota / credits |
| ------------------ | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| `subagent_explore` | The **default subagent model** — a fast, cheap model (SWE-1.6 by default) | Cheap: SWE-1.6 usage is billed at SWE rates, not at your primary model's rate |
| `subagent_general` | **The same model as the parent agent** — whatever you selected in the model picker (e.g. Claude Opus, GPT-5) | Same rate as the parent: a general subagent costs like a full extra session on your selected model |
| Custom subagents | The `model` field in `AGENT.md` if set, otherwise the **default subagent model** | Depends on the model you pin |
`subagent_general` inherits the parent's model. If you are running a premium model, every general subagent runs on that premium model too, with its own context window and inference calls — so a task that fans out into several general subagents multiplies your spend. Ask for an explore subagent (or a [custom subagent](#custom-subagents) with a cheaper `model:` pinned) when the work is research rather than code changes.
The **default subagent model** is not a fixed model name — it resolves through a router at spawn time, and an admin can override it (see below). With the default **Subagent router** setting it resolves to SWE-1.6 (a faster or slower SWE-1.6 variant depending on your plan tier).
The CLI does not currently label which model a running subagent is using in the subagent panel.
### Influencing the Model
There is no way to name a model for a subagent in a prompt — the `run_subagent` tool takes a *profile*, not a model. You have two levers:
1. **Ask for a profile in natural language.** Requesting an explore subagent ("research how auth works in an explore subagent") keeps the work on the cheap default subagent model. Asking for code changes gets you `subagent_general`, which runs on your selected model.
2. **Pin a model in a [custom subagent](#custom-subagents) profile.** `model:` in `AGENT.md` is the only way to run a *write-capable* subagent on a model other than the parent's. A [skill](/cli/extensibility/skills) that runs in a subagent can also set `model:` in its frontmatter to override the profile's model.
### Enterprise Controls
Administrators can govern which model subagents use — and whether subagents run at all — through the **Default subagent model** setting in the org/enterprise settings. This setting controls the model for `subagent_explore` and for custom subagents that don't pin a `model:` — it does not change `subagent_general`, which always follows the parent agent's model.
It has three choices:
| Option | Behavior |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Subagent router (default)** | The default subagent model is chosen by a router at spawn time. Today it resolves to SWE-1.6 (the exact variant depends on your plan tier). |
| **A specific model** | Pins the default subagent model to the selected model, for every subagent that doesn't run on the parent's model. |
| **None** | Disables subagents entirely — Devin will not spawn any subagents. |
***
## Subagent Profiles
Each subagent runs with a specific profile that determines its capabilities. There are two built-in profiles:
| Profile | Description | Tool Access | Model |
| ------------------ | -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| `subagent_explore` | Read-only codebase exploration and research | Read-only codebase tools plus web search; cannot edit files or fetch arbitrary URLs (regardless of foreground or background) | Default subagent model (SWE-1.6 by default) |
| `subagent_general` | General-purpose tasks including code changes | Full tool access (foreground) or pre-approved tools only (background) | Same model as the parent agent |
The agent automatically chooses the appropriate profile based on the task. Explore subagents are ideal for research and understanding, while general subagents can make changes. See [Which Model Does a Subagent Use?](#which-model-does-a-subagent-use) for how each profile picks its model — the two profiles do **not** run on the same model.
You can also define your own custom subagent profiles — see [Custom Subagents](#custom-subagents) below.
***
## Tool Permissions
How tool permissions work depends on whether the subagent is running in the foreground or background:
* **Foreground subagents** behave like the main agent -- you are prompted to approve or deny tool calls as usual.
* **Background subagents** inherit any tool permissions you have already granted during the current session. Any tool that has not been pre-approved is automatically denied. Background subagents cannot prompt you for new permissions.
If a background subagent fails because a required tool was denied, you can resume it in the foreground to approve the necessary permissions. See [Resuming Subagents](#resuming-subagents) below.
***
## Monitoring Subagents
### Subagent Indicator
When background subagents are running, an indicator appears below the input area showing their status. You can navigate to the indicator by pressing ↓ from the input area, then press Enter to open the subagent panel.
When a foreground subagent is running, the spinner displays **"Subagent running · Ctrl+B to run in background"**.
### Subagent Panel
The subagent panel lets you view and manage all active and completed subagents. It shows each subagent's profile, title, status, elapsed time, and tool call count.
***
## Foreground / Background Switching
You can move subagents between foreground and background while they're running:
* **Background a foreground subagent:** Press Ctrl+B while a foreground subagent is running. The subagent continues working in the background, and the parent agent resumes.
* **Foreground a background subagent:** Open the subagent panel and press f on a running background subagent. The subagent's output will display inline.
When you move a subagent to the background, the parent agent's tool call has already returned, so the parent continues independently. The subagent's result won't feed back into the parent's current pipeline, but you'll be notified when it completes.
***
## Cancelling Subagents
You can cancel a running subagent in two ways:
1. **From the subagent panel:** Open the panel and press x on a running subagent.
2. **Foreground subagent:** Press Ctrl+C or Esc to cancel the currently running foreground subagent.
***
## Resuming Subagents
Cancelled, failed, or completed subagents can be resumed with a new prompt. You can ask the agent to resume a subagent, and it will continue where it left off. Resumed subagents always run in the **foreground**, so you can approve any tool calls that were previously denied.
This is especially useful when:
* A background subagent failed because a required tool was denied -- resume it in the foreground to grant the necessary permissions.
* A subagent completed but you want it to do additional follow-up work based on its findings.
* A subagent was cancelled prematurely and you want it to continue.
***
## Nesting Depth
By default, subagents cannot spawn their own subagents — only the root agent can. Subagent tools (`run_subagent` and `read_subagent`) are disabled inside a subagent to prevent unbounded nesting.
However, **custom subagent profiles** can opt in to nested spawning by setting the `max-nesting` field in their frontmatter. This value overrides the default maximum depth, allowing subagents to spawn children as long as the tree stays within that limit.
For example, `max-nesting: 3` allows the following chain:
```
Root agent (depth 0)
└── Custom subagent (depth 1) — can spawn children
└── Child subagent (depth 2) — can spawn children
└── Grandchild subagent (depth 3) — cannot spawn (depth limit reached)
```
Nested subagents can increase cost significantly. Each level of nesting spawns additional agents with their own context windows and inference calls. Use this feature deliberately.
***
## Custom Subagents
Custom subagents are **experimental**. The format, behavior, and configuration options may change in future releases.
Beyond the built-in `subagent_explore` and `subagent_general` profiles, you can define your own custom subagent profiles. Custom subagents let you create specialized workers with their own system prompts, tool restrictions, model overrides, and permissions — tailored to specific tasks in your workflow. This is also the way to get a write-capable subagent that does **not** run on your (possibly expensive) primary model: give it a `model:` and the tools it needs.
### Creating a Custom Subagent
Custom subagents are defined as `AGENT.md` files inside a named directory under `agents/`. The directory name becomes the profile's identifier.
```text theme={null}
.devin/agents/
└── reviewer/
└── AGENT.md
```
Also supported:
```text theme={null}
.agents/agents/
└── reviewer/
└── AGENT.md
```
```text theme={null}
# Linux/macOS
~/.config/devin/agents/
└── reviewer/
└── AGENT.md
# Windows
%APPDATA%\devin\agents\
└── reviewer\
└── AGENT.md
```
### AGENT.md Format
An `AGENT.md` file uses the same YAML frontmatter as skills, followed by the subagent's system prompt:
```markdown theme={null}
---
name: reviewer
description: Reviews code changes for correctness and style
model: sonnet
allowed-tools:
- read
- grep
- glob
- exec
permissions:
allow:
- Exec(git diff)
- Exec(git log)
deny:
- write
- edit
---
You are a code review subagent. Your job is to review code changes
thoroughly and report findings back to the parent agent.
Focus on:
1. Correctness — logic errors, edge cases, off-by-one mistakes
2. Security — potential vulnerabilities
3. Style — consistency with the rest of the codebase
4. Performance — obvious inefficiencies
Always cite specific file paths and line numbers in your findings.
```
### Frontmatter Fields
| Field | Type | Default | Description |
| --------------- | ------- | ------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| `name` | string | directory name | Identifier for the profile (must not conflict with built-in profiles) |
| `description` | string | none | Shown to the agent when selecting a profile |
| `model` | string | default subagent model (SWE-1.6 by default) — **not** the parent's model | Override the model used by this subagent |
| `allowed-tools` | list | all tools | Restrict which tools the subagent can use. Cannot grant `ask_user_question`, which is always withheld from subagents. |
| `permissions` | object | inherit | Permission overrides (`allow`, `deny`, `ask`) |
| `max-nesting` | integer | none | Override the maximum nesting depth, allowing this subagent to spawn its own subagents |
### How Custom Subagents Are Used
Once defined, custom subagent profiles appear alongside the built-in ones. The agent sees a description of each available profile and chooses the most appropriate one when spawning a subagent. You can also ask the agent to use a specific profile by name (e.g., "review this code using the reviewer subagent").
Custom subagent profiles that conflict with a built-in profile name (e.g., `subagent_explore`, `subagent_general`) are skipped with a warning.
### Importing From Other Tools
Custom subagents are also imported from Claude Code's agent format:
| Source | File Pattern |
| --------------------- | ------------------------------------------ |
| `.claude/agents/*.md` | Each `.md` file becomes a subagent profile |
Claude Code agent files use `tools` instead of `allowed-tools` in their frontmatter. Both formats are supported automatically.
### Examples
#### Read-Only Research Agent
```markdown theme={null}
---
name: researcher
description: Deep codebase research and architecture analysis
model: sonnet
allowed-tools:
- read
- grep
- glob
---
You are a research subagent specializing in codebase exploration.
Your job is to thoroughly investigate a topic and report back with:
- Relevant files and their purposes
- Architecture patterns and dependencies
- Code flow traces with specific line references
Be exhaustive — search broadly and follow references.
```
#### Test Runner Agent
```markdown theme={null}
---
name: test-runner
description: Runs tests and reports results
allowed-tools:
- read
- grep
- glob
- exec
permissions:
allow:
- Exec(npm run test)
- Exec(cargo nextest)
- Exec(pytest)
---
You are a test runner subagent. Run the relevant test suites and report:
- Which tests passed and failed
- Failure messages and stack traces
- Suggestions for fixing failures
```
# Troubleshooting
Source: https://docs.devin.ai/cli/troubleshooting
Common issues and how to fix them
## Installation Issues
If the install script fails to download:
1. Check your internet connection
2. Verify curl is installed: `which curl`
3. Try with verbose output: `curl -fsSL -v https://cli.devin.ai/install.sh | bash`
If you're behind a corporate proxy, you may need to configure proxy settings:
```bash theme={null}
export https_proxy=http://your-proxy:port
curl -fsSL https://cli.devin.ai/install.sh | bash
```
If the PowerShell install script fails:
1. Check your internet connection
2. Ensure you are running PowerShell as a regular user (not as Administrator unless necessary)
3. If you see an execution policy error, try:
```powershell theme={null}
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
irm https://static.devin.ai/cli/setup.ps1 | iex
```
4. If you're behind a corporate proxy, configure proxy settings in PowerShell before running the install command
As an alternative to the PowerShell script, you can download and run the standalone installer directly:
* [x86\_64](https://static.devin.ai/cli/devin-updater-x86_64-pc-windows.exe)
* [ARM64](https://static.devin.ai/cli/devin-updater-aarch64-pc-windows.exe)
The installer needs write access to install the binary. If you see permission errors:
1. Check the install location has write permissions
2. Do not run the installer with `sudo` — this can cause ownership issues
3. If installing to a system directory, ensure your user has appropriate permissions
If the install completes but `devin` isn't found:
**macOS / Linux / WSL:**
1. Restart your terminal or run `source ~/.bashrc` (or `~/.zshrc`)
2. Check if the binary location is in your PATH: `echo $PATH`
3. Verify the binary exists: `ls -la ~/.local/bin/devin` (or the install location shown during setup)
**Windows:**
1. Restart your PowerShell session
2. Check if the binary location is in your PATH: `$env:PATH -split ';'`
3. Verify the binary exists in the install location shown during setup
`irm` and `iex` are PowerShell aliases. If you see this error, you're running the install command in Git Bash or CMD instead of PowerShell.
**Fix:** Open **PowerShell** and run the install command there:
```powershell theme={null}
irm https://static.devin.ai/cli/setup.ps1 | iex
```
Alternatively, from Git Bash or CMD you can invoke PowerShell explicitly:
```bash theme={null}
powershell -Command "irm https://cli.devin.ai/install.ps1 | iex"
```
After installation, you can use Devin CLI from **PowerShell**, **Windows Terminal**, or **Git Bash**.
***
## Authentication Issues
If browser-based login doesn't work:
1. Try the manual token flow for remote/SSH sessions:
```bash theme={null}
devin auth login --force-manual-token-flow
```
2. Check that your browser can reach the authentication URL
3. Verify your enterprise account has Devin CLI access enabled
If you see authorization errors after logging in:
1. Verify your account has the correct permission needed to access Devin CLI. You may need to ask your admin. For enterprises, see [Devin Auth](/cli/enterprise/devin-auth#configuring-access) or [Legacy Windsurf Auth](/cli/enterprise/windsurf-auth#prerequisites) on how to configure access.
2. Try logging out and back in: `devin auth logout && devin auth login`
3. Check your authentication status: `devin auth status`
Devin CLI API tokens do not expire by default. If a stored token has been revoked or is no longer accepted, remove it before logging in again:
```bash theme={null}
devin auth logout && devin auth login
```
to replace your stored credentials.
***
## Network & Proxy Issues
The CLI routes its own outbound HTTPS traffic (authentication, updates, model API calls, MCP servers) through a proxy when one is configured. There are two ways to set it:
**Environment variables** — the default `system` proxy mode respects these:
```bash theme={null}
export HTTPS_PROXY=http://proxy.corp.example.com:8080
export HTTP_PROXY=http://proxy.corp.example.com:8080
export ALL_PROXY=socks5://proxy.corp.example.com:1080 # optional, SOCKS5
export NO_PROXY=localhost,127.0.0.1,.internal.corp # hosts to bypass
```
**`config.json`** — applies regardless of environment:
```json theme={null}
{
"proxy": {
"mode": "manual",
"url": "http://proxy.corp.example.com:8080",
"no_proxy": "localhost,127.0.0.1,.internal.corp"
}
}
```
See the [`proxy` configuration reference](/cli/reference/configuration/config-file#proxy) for all options. On macOS and Windows, `system` mode also honors platform-native PAC (Proxy Auto-Configuration) settings.
If your proxy performs TLS inspection, the CLI uses your operating system's certificate store, so install the proxy's root CA at the OS level (Keychain on macOS, the Windows certificate store, or your distribution's CA bundle on Linux).
To get full visibility into the request lifecycle (DNS, connection pooling, TLS handshake, headers, redirects, and retries), raise the log level with `RUST_LOG` and mirror logs to your terminal with `CHISEL_LOG_STDOUT`:
```bash theme={null}
RUST_LOG="chisel=trace,windsurf_api_client=trace,connect_rpc=trace,reqwest=trace,hyper=trace,hyper_util=trace,rustls=trace" \
CHISEL_LOG_STDOUT=1 \
devin auth login
```
What each target adds:
* `chisel`, `windsurf_api_client`, `connect_rpc` — the CLI's own request and authentication logging
* `reqwest=trace` — high-level request/response and redirect handling
* `hyper=trace` / `hyper_util=trace` — connection establishment, pooling, and HTTP/1.1 & HTTP/2 framing
* `rustls=trace` — TLS handshake details (useful for proxy and certificate problems)
Use `CHISEL_LOG_STDERR=1` instead of `CHISEL_LOG_STDOUT=1` if you don't want logs interleaved with command output. (Stdout logging is suppressed automatically in the interactive REPL and ACP mode to avoid corrupting their output.)
Logs are also always written to a per-run log file under the CLI's data directory, regardless of these env vars:
* **macOS / Linux:** `~/.local/share/devin/cli/logs/devin__.log`
* **Windows:** `%APPDATA%\devin\cli\logs\devin__.log`
Trace-level logs can include sensitive data such as `Authorization` headers and tokens. Scrub log output before sharing it.
`RUST_LOG` exposes the request lifecycle but not full payloads. To capture complete request and response bodies, route the CLI through an intercepting proxy such as [mitmproxy](https://mitmproxy.org/):
```bash theme={null}
# Terminal 1 — start the intercepting proxy:
mitmproxy --listen-port 8080
# Terminal 2 — point the CLI at it:
export HTTPS_PROXY=http://127.0.0.1:8080
devin auth login
```
Because the CLI trusts the OS certificate store, install mitmproxy's CA certificate (`~/.mitmproxy/mitmproxy-ca-cert.pem`) into your system trust store first — otherwise the TLS connection to the proxy will fail.
***
## Runtime Issues
If you see errors about a model not being available:
1. Check if your enterprise restricts available models in [Team Settings](/cli/enterprise/team-settings)
2. Verify the model name is correct — use `/model` to see available options
3. Try a different model: `devin --model sonnet -- your prompt`
If you hit usage limits:
1. Wait a few minutes before retrying
2. Check your organization's usage dashboard for quota status
3. Contact your admin if you need higher limits
If the agent stops responding:
1. Press `Ctrl+C` to interrupt the current operation
2. Try `/clear` to start a fresh session
3. Check your network connection
4. Restart Devin CLI
***
## MCP Server Issues
If an MCP server fails to start:
1. Verify the command works outside Devin CLI:
```bash theme={null}
npx -y @modelcontextprotocol/server-github
```
2. Check that all required environment variables are set
3. Look for error messages in the server output
If MCP tools don't show up:
1. The server may need a moment to initialize — wait a few seconds
2. Check that the server is configured correctly in your config file
3. Verify your enterprise allows MCP servers in [Team Settings](/cli/enterprise/team-settings)
MCP tools default to prompting for approval. To auto-approve specific tools, add them to your permissions config:
```json theme={null}
{
"permissions": {
"allow": ["mcp__github__list_issues"]
}
}
```
***
## Getting Help
If you're still experiencing issues:
* **Email support:** [support@cognition.ai](mailto:support@cognition.ai)
* **Submit a bug report:** Use the `/bug` command inside Devin CLI to report issues directly to the Devin CLI developers
* **Check for updates:** Run `devin update` to ensure you're on the latest version
# Importing Code Settings
Source: https://docs.devin.ai/collaborate-with-devin/vscode-profiles
Use your local settings and extensions while working in Devin's IDE
Working in VS Code is easier with your familiar Settings, Extensions, and Keyboard Shortcuts. Follow this tutorial to upload your local settings manually.
## Auto-Import Settings
This workflow imports your settings automatically.
1. Open any Devin session that you started
2. You should be greeted by the Welcome page. (If this page does not appear, you can always reopen it with `Cmd+Shift+P` on Mac or `Ctrl+Shift+P` on Windows/Linux and search for "Help: Welcome".)
3. Click the button to start the import flow.
4. Follow the steps on the screen. You will copy paste a Python script to your local computer's terminal to upload your profile. (PowerShell for Windows)
5. The script will prompt you to confirm your settings by visiting the app.devin.ai URL.
6. Once confirmed, your settings will be synced automatically to your Devin session and for all future Devin sessions!
## Exporting Your Local Profile Manually
If the Auto-Import workflow isn't working, follow these steps for manual export and import.
Watch this video to see how to do export your Profile in VS Code (including VS Code forks):
1. Go to VS Code, `Cmd+Shift+P` (Mac) or `Ctrl+Shift+P` (Windows/Linux) -> Preferences: Open Profiles (UI)
2. Right click your profile (usually Default).
3. Click Export and choose File in the quick pick that appears.
4. Save the file to disk. This will get saved to a `.code-profile` file.
## Importing Your `.code-profile` File Manually
Once you have a .code-profile file, you can upload it to any Devin session IDE that you started.
1. Open any Devin session that you started
2. Open the command palette with `Cmd+Shift+P` (Mac) or `Ctrl+Shift+P` (Windows/Linux) and search for "Preferences: Devin: Import Profile (Manual)".
3. Select the file you uploaded. This will upload your profile to the machine. All your extensions and settings should then be auto-installed.
## Verifying that your upload worked
You can check that your Settings, Extensions, and Keyboard Shortcuts were uploaded properly by doing the following in Devin IDE:
* Settings: open the command palette (`Cmd+Shift+P` on Mac / `Ctrl+Shift+P` on Windows/Linux) and search for "Preferences: Open User Settings (JSON)". Check that it matches your local editor's.
* Keyboard Shortcuts: open the command palette and search for "Preferences: Open Keyboard Shortcuts (JSON)". Check that it matches your local editor's.
* Extensions: Click the extensions icon in the sidebar on the right (or press `Cmd+Shift+X` on Mac / `Ctrl+Shift+X` on Windows/Linux). Search for the Extensions you have installed locally.
## Settings Sync
Your settings will automatically be synced across your sessions. Contact support if you encounter any issues with this.
# Good vs. Bad Instructions
Source: https://docs.devin.ai/essential-guidelines/good-vs-bad-instructions
What works and what doesn't
Make sure to read [When to Use Devin](/essential-guidelines/when-to-use-devin) and [Instructing Devin Effectively](/essential-guidelines/instructing-devin-effectively) for more essential tips.
**Good Approach**
"Create a new endpoint `/users/stats` that returns a JSON object with user count and average signup age. Use our existing users table in PostgreSQL. You can reference the `/orders/stats` endpoint in `statsController.js` for how we structure responses. Ensure the new endpoint is covered by the `StatsController.test.js` suite."
**Why This Works:**
* Clearly specifies the route and expected response format
* References existing code as a template
* Defines data source (users table)
* Includes test coverage requirements
***
**Bad Approach**
"Add a user stats endpoint."
**Why This Fails:**
* Unspecific about what stats to include
* No mention of data sources
* No reference to existing patterns
* Missing test requirements
**Good Approach**
"In `UserProfileComponent`, add a dropdown that shows a list of user roles (admin, editor, viewer). Use the styling from `DropdownBase`. When a role is selected, call the existing API to set the user role. Validate by checking that the selection updates the user role in the DB. Refer to your Knowledge for how to test properly."
**Why This Works:**
* Names specific components
* Lists exact roles to include
* References existing styling component
* Defines the user interaction flow
* Includes validation steps
***
**Bad Approach**
"Make the user profile page more user-friendly. Add some way for them to change roles and confirm it's working."
**Why This Fails:**
* "User-friendly" is subjective
* No specific UI components mentioned
* Unclear user interaction flow
* Vague validation criteria
## More Examples
### Good
"Add Jest tests for the AuthService methods: login and logout. Ensure test coverage for these two functions is at least 80%. Use `UserService.test.js` as an example. After implementation, run `npm test -- --coverage` and verify the coverage report shows >80% for both functions. Also confirm that tests pass with both valid and invalid credentials, and that logout properly clears session data."
**Why Good?** Clear success metric (80% coverage), references to guide Devin (`UserService.test.js`), and a well-defined scope with specific verification steps.
"Migrate `logger.js` from JavaScript to TypeScript. We already have a `tsconfig.json` and a `LoggerTest.test.js` suite for validation. Make sure it compiles without errors and make sure not to change the existing config! After migration, verify by: 1) running `tsc` to confirm no type errors, 2) running the test suite with `npm test LoggerTest.test.js` to ensure all tests pass, and 3) checking that all existing logger method calls throughout the codebase still work without type errors."
**Why Good?** There's a clear template (`tsconfig.json`) and test suite for immediate feedback, plus specific compilation and validation steps.
"We're switching from pg to sequelize (read [https://sequelize.org/api/v6/identifiers](https://sequelize.org/api/v6/identifiers)). Please update the UserModel queries to use Sequelize methods. Refer to `OrderModel` for how we do it in this codebase. After implementation, verify by: 1) running `npm run test:integration UserModel.test.js` to check all integration tests pass, 2) confirming query performance hasn't degraded by checking execution time on a test dataset of 1000 users, and 3) validating that all CRUD operations still maintain data integrity by running `npm run test:e2e user-flows.test.js`."
**Why Good?** Devin can mimic a known pattern and there are explicit references (`OrderModel.js`). Provides a link to docs so Devin knows to reference them, and includes specific performance and functionality verification steps with exact test commands.
"Implement the pricing page from this Figma file: [https://figma.com/file/abc123/Pricing-Page](https://figma.com/file/abc123/Pricing-Page). Focus on the 'Pricing Section' frame. Use our Tailwind config in tailwind.config.ts for colors and spacing. Reuse the existing Card and Button components from src/components/ui/. After implementing, spin up the dev server and take screenshots at desktop (1440px) and mobile (375px) widths. Do not open a PR until it matches the design."
**Why Good?** Links the specific Figma file, names the exact frame, references the project's design system and existing components, and tells Devin to visually verify its work before opening a PR. With the [Figma MCP](/work-with-devin/mcp) connected, Devin can read design tokens directly from the file.
"Users are reporting 500 errors on the checkout page. Use the Sentry MCP to pull the latest stack traces for the payments-api project. Check the database for any related data issues. Find the root cause, fix it, and add a regression test. Link the Sentry issue in the PR description."
**Why Good?** Points Devin to the right tools ([MCP integrations](/work-with-devin/mcp)), gives a clear investigation path, and defines the expected deliverable (fix + regression test + PR).
### Bad
"Find issues with our codebase and fix them"
**Why Bad?** The request is too vague and open-ended. There are no success criteria and no way for Devin to know when it's done.
**Instead:** Use [Devin Review](/work-with-devin/devin-review) for automated code review on specific PRs, or give Devin a targeted task like "Find and fix all uses of the deprecated `oldLogger` API in `src/services/`."
"Make the landing page look better"
**Why Bad?** "Better" is subjective and Devin has no criteria to aim for. Devin can build functional UIs and implement designs from specs, but it can't make aesthetic judgment calls on its own.
**Instead:** Provide a Figma design, a reference site, or specific changes: "Increase the hero section font size to 48px, add 32px padding, and use the `indigo-500` color from our Tailwind config."
"Build a new microservices architecture for our app."
**Why Bad?** This is a very large and unstructured task. It requires many architectural decisions, trade-offs, and context that isn't in the prompt.
**Instead, break it down:**
1. Use [Ask Devin](/work-with-devin/ask-devin) to investigate your codebase and map dependencies
2. Ask Devin to propose specific architectures with trade-offs
3. Create separate sessions for implementing each service — run them in parallel with [managed Devins](/work-with-devin/advanced-capabilities#managed-devins)
# Instructing Devin Effectively
Source: https://docs.devin.ai/essential-guidelines/instructing-devin-effectively
How to achieve optimal results.
The most important thing to remember when instructing Devin is to **be as specific as possible**. Just as you would provide a detailed spec when asking a coworker to code something, you should do the same with Devin. This guide will help you structure your instructions/prompts to effectively use Devin. For broader strategies on working with coding agents effectively, also check out our [Coding Agents 101 guide](https://devin.ai/agents101).
## How to Write Effective Prompts
Here is an example prompt that demonstrates effective instruction:
In the Devin repo, I want you to build a tool that monitors the RAM and CPU usage of the remote machines that Devin runs on. To do that, please perform the following tasks:
* Create a background task that launches automatically when devin.rs starts.
* The task should open a connection to all forked remote machines used in this Devin session and monitor their RAM and CPU usage.
* If usage exceeds 80% of the available resource, emit a new type of Devin event to signal this (check how we use Kafka).
* Architect this in a smart way that doesn't block other operations. You should understand how all the containers for the Devin sub-agents interact with each other.
### Why This Works Well
* **Detail:** Specifies the Devin repo and the broader purpose (monitoring resource usage).
* **Benefit:** Devin knows the scope and domain clearly.
* **Detail:** Tasks like "create a background task" and "emit an event at 80% usage."
* **Benefit:** Breaks down the work into logical parts.
* **Detail:** Defines "success" as emitting a specific event upon 80% usage.
* **Benefit:** Devin knows exactly what to achieve.
* **Detail:** Mentions Kafka and container interactions.
* **Benefit:** Encourages reuse of established code or design approaches.
## Best Practices: Do's and Don'ts
**Do: Provide Clear Directives**
* **Why:** Devin can get stuck without a clear path or when faced with too many interpretations.
* **How:**
* Make important decisions and judgment calls for Devin.
* Offer specific design choices and implementation strategies.
* Define clear scope, boundaries, and success criteria.
* **Example:** "Optimize the getOrderDetails query in orderService.js by adding a composite index on the order\_id and product\_id columns in the order\_items table. Refactor the query to replace the existing correlated subquery with a JOIN to the products table for fetching product details."
**Don't: Leave Decisions Open-Ended**
* **Why:** Vague instructions can lead Devin to implement solutions that don't align with your actual needs.
* **How:**
* Avoid statements that require Devin to make significant design or implementation decisions without guidance. This can lead to unexpected results.
* **Example:** Don't: "Improve our database's performance."
**Do: Pick [tasks that Devin is good at](when-to-use-devin#evaluating-tasks-for-devin)**
* **Why:**
* **Maximize Results:** By assigning tasks that align with Devin's capabilities, you get the best results for the least amount of effort and ACUs spent.
* **How:**
* Read this guide: [When to use Devin](when-to-use-devin)
* Provide examples, modules, resources, and templates that Devin can follow.
* Share direct links to docs sites so Devin can read about details like API request bodies and features it might not know about.
* Share specific filenames that you want Devin to look at and learn from.
* Connect [MCP integrations](/work-with-devin/mcp) to give Devin access to Figma designs, databases, monitoring tools, and more.
* **Example:** Do: "Refactor state management in the Header component to use React's useReducer hook for better scalability and maintainability. Ensure that all existing functionality is preserved and add unit tests to cover the new state logic."
* **Example:** Do: "Use authTemplate.rs as a reference to maintain consistency in error handling."
* **Example:** Do: "Check out the official Sequelize docs at [https://sequelize.org/docs/v6/getting-started/](https://sequelize.org/docs/v6/getting-started/) for migration steps."
**Don't: Skip Providing Context for Complex Tasks**
* **Why:** Even though Devin can handle complex work, it performs best when you provide context and clear direction.
* **How:**
* For tasks requiring domain knowledge, provide relevant docs, examples, or references.
* For visual tasks, provide Figma files via the [Figma MCP](/work-with-devin/mcp), reference designs, or detailed specs — Devin can build from these but won't invent aesthetics on its own.
* For Android apps, Devin can build and test on an [Android emulator](/onboard-devin/environment/android-emulation). For iOS apps, Devin doesn't have access to a phone emulator, so provide clear testing criteria.
* **Example:** Don't: "Make the app look better" — instead, provide specific design specs or a Figma file.
* **Example:** Don't: "Improve our database's performance" — instead, specify which queries to optimize and what metrics to target.
**Do: Establish Clear and Frequent Checks**
* **Why:** Frequent feedback (both from you and from tests/checks/linters) ensures Devin corrects mistakes effectively.
* **How:**
* Use tests (unit/integration) to confirm correctness.
* Maintain build validations, lint checks, and static analysis for code quality.
* Enable [Devin Review](/work-with-devin/devin-review) with [Auto-Fix](/work-with-devin/devin-review#auto-fix) so Devin automatically responds to review comments and CI failures — creating a closed loop where PRs iterate toward merge-ready quality without you in the loop.
* **Example:** Do: "Run npm test after each iteration."
* **Example:** Do: "Ensure the pipeline on CircleCI doesn't fail."
* **Example:** Do: "Pass ESLint/Prettier checks before pushing any commits."
**Don't: Neglect Providing Feedback**
* **Why:** Without feedback, Devin won't know if its solutions meet your standards.
* **How:**
* Avoid assigning tasks without defining how you'll evaluate them.
**Do: Set Clear Checkpoints and Sub-Tasks**
* **Why:** Breaking down complex tasks into smaller checkpoints helps Devin stay focused and reduces errors.
* **How:**
* Split tasks into verifiable sub-tasks, and start one Devin session for each sub-task.
* Define what success looks like for each sub-task and optionally set checkpoints within each sub-task.
* Ask Devin to report back after completing each checkpoint or sub-task.
**Examples:**
* **Example:** Do: "When working with the dataset, verify that it has at least 500 rows and contains columns X, Y, Z."
* **Example:** Do: "When modifying the API, confirm the endpoint returns status 200 and includes all required fields."
* **Example:** Do: "When updating UI, check that the component renders without console errors and matches the design spec."
**Don't: Skip Specific Validation Requirements**
* **Why:** Without defined validation steps, Devin cannot confidently complete tasks.
* **How:**
* Avoid vague success criteria.
* Don't leave verification steps implicit or undefined.
* **Example:** Don't: "Make sure it works."
Devin has a full desktop environment — shell, IDE, and browser. Tell Devin to test its own work before opening a PR:
* **Spin up the app:** "Run `npm run dev` and verify the new page renders at `/settings`."
* **Browser testing:** "Open the browser, navigate to the login page, and confirm the OAuth flow completes successfully."
* **Visual verification:** "Take screenshots at desktop (1440px) and mobile (375px) widths and confirm the layout matches the design."
* **Screen recording:** "Record yourself testing the checkout flow end-to-end."
This lets Devin QA its changes the same way you would — before you ever need to look at the PR.
For repetitive or complex tasks, we suggest using and iterating on [Playbooks](/product-guides/creating-playbooks). Learn more about [using playbooks effectively](/product-guides/using-playbooks). Playbooks are reusable and shareable prompts that streamline task delegation. For example, if you want Devin to address ongoing CI build failures, create a playbook that includes the general steps Devin should follow each time.
For persistent context that Devin should remember across all sessions — such as coding standards, common bugs and fixes, deployment workflows, or how to use internal tools — use [Knowledge](/product-guides/knowledge). Knowledge items are automatically recalled when relevant, so you don't need to repeat the same instructions in every prompt. You can pin Knowledge to specific repos or apply it globally.
**Playbooks vs. Knowledge:** Use Playbooks for step-by-step procedures tied to specific tasks. Use Knowledge for general tips, conventions, and context that apply broadly across sessions.
# Prompt Templates Cheat Sheet
Source: https://docs.devin.ai/essential-guidelines/prompt-templates-cheat-sheet
Ready-to-use prompt templates for common tasks
Use these templates as starting points for your prompts. Customize the bracketed sections `[like this]` to fit your specific needs.
## Bug Fixes
### Fix a Specific Bug
```
Fix the bug where `[describe the bug behavior]`.
Steps to reproduce:
1. `[Step 1]`
2. `[Step 2]`
3. `[Step 3]`
Expected behavior: `[what should happen]`
Actual behavior: `[what actually happens]`
Please:
1. Investigate the root cause in `[relevant file/directory]`
2. Implement a fix that addresses the root cause
3. Add a regression test to prevent this issue from recurring
4. Run the existing test suite to ensure no regressions
```
### Investigate Production Issue
```
Users are reporting `[describe the issue]` in production.
Please:
1. Use the `[Sentry/DataDog/Log monitoring tool]` MCP to pull recent error logs and stack traces
2. Identify the root cause of the issue
3. Implement a fix
4. Add appropriate error handling to prevent similar issues
5. Create a regression test
6. Link the monitoring/alert in the PR description
```
## Feature Implementation
### Add a New API Endpoint
```
Create a new API endpoint `[endpoint path]` that `[describe what it does]`.
Requirements:
- Method: `[GET/POST/PUT/DELETE]`
- Request body: `[describe request structure]`
- Response format: `[describe response structure]`
- Authentication: `[describe auth requirements]`
Please:
1. Reference the existing `[similar endpoint file]` for patterns
2. Implement the endpoint following our existing conventions
3. Add input validation and error handling
4. Write unit tests for the new endpoint
5. Update API documentation if applicable
6. Run the test suite to ensure everything passes
```
### Add a New UI Component
```
Add a new `[component type]` component to `[file/location]`.
Requirements:
- Component name: `[ComponentName]`
- Props: `[list props and their types]`
- Functionality: `[describe what it should do]`
- Styling: Use `[existing component/library]` as a reference
Please:
1. Create the component following our existing patterns
2. Implement the required functionality
3. Add proper TypeScript types
4. Style it to match our design system
5. Add unit tests for the component
6. Integrate it into `[parent component/page]`
7. Test it manually by running the dev server
```
### Implement a Feature from Design
```
Implement the `[feature name]` from this design file: `[Figma/link to design]`
Focus on the `[specific frame/section]` frame.
Requirements:
- Use our existing components from `[component library path]`
- Follow the styling in `[design system file]`
- Ensure responsive design at `[breakpoint 1]` and `[breakpoint 2]`
Please:
1. Implement the feature following the design specifications
2. Reuse existing components where possible
3. Test at desktop (1440px) and mobile (375px) widths
4. Take screenshots to verify it matches the design
5. Do not open a PR until it visually matches the design
```
## Code Refactoring
### Refactor a Module
```
Refactor the `[module/file name]` to improve `[specific aspect: maintainability/performance/readability]`.
Current issues:
- `[Issue 1]`
- `[Issue 2]`
- `[Issue 3]`
Requirements:
- Keep all existing functionality intact
- Follow the patterns in `[reference file]`
- Improve `[specific metric: code complexity/performance]`
Please:
1. Analyze the current implementation
2. Refactor following best practices
3. Ensure all existing tests still pass
4. Add tests for any new functions introduced
5. Run the full test suite
6. Measure and report performance improvements if applicable
```
### Convert to New Pattern
```
Convert `[file/directory]` to use `[new pattern/library/framework]`.
Reference: `[link to documentation or example file]`
Requirements:
- Maintain all existing functionality
- Follow the conventions in `[example file]`
- Update any dependent code
Please:
1. Review the documentation and examples
2. Convert the code step by step
3. Update imports and dependencies
4. Ensure all tests pass
5. Run `[build command]` to verify no errors
6. Test the functionality manually
```
## Testing
### Add Test Coverage
```
Add comprehensive test coverage for `[file/module/function]`.
Current coverage: `[current coverage %]`
Target coverage: `[target coverage %]`
Please:
1. Analyze the existing code to identify edge cases
2. Write unit tests for all public methods
3. Add integration tests if applicable
4. Reference `[existing test file]` for testing patterns
5. Run `npm test -- --coverage` and verify coverage meets target
6. Ensure all tests pass
```
### Debug Failing Tests
```
Fix the failing tests in `[test file or directory]`.
Test failures:
- `[Test name 1]`: `[error message]`
- `[Test name 2]`: `[error message]`
Please:
1. Investigate why these tests are failing
2. Determine if the tests or the implementation need fixing
3. Fix the root cause
4. Ensure all tests in the suite pass
5. Run the full test suite to check for regressions
```
## Documentation
### Document a Module
```
Add comprehensive documentation to `[file/module]`.
Please:
1. Add JSDoc/TypeDoc comments to all public functions
2. Document parameters, return values, and exceptions
3. Add usage examples for complex functions
4. Create a README if this is a new module
5. Follow our documentation style guide in `[style guide link]`
6. Update the main API documentation if applicable
```
### Update API Documentation
```
Update the API documentation for `[endpoint/function]`.
Changes made:
- `[Change 1]`
- `[Change 2]`
Please:
1. Update the `[OpenAPI/Swagger]` specification
2. Update any inline code comments
3. Add usage examples if the behavior changed
4. Update the `[documentation file]`
5. Verify the documentation builds successfully
```
## Performance Optimization
### Optimize Database Queries
```
Optimize the database queries in `[file/module]`.
Performance issues:
- `[Specific query]` is slow (takes `[time]`)
- `[Specific operation]` causes N+1 queries
Please:
1. Analyze the query execution plans
2. Add appropriate indexes to `[table/column]`
3. Refactor queries to use joins instead of N+1
4. Benchmark before and after performance
5. Ensure all tests still pass
6. Document the performance improvements
```
### Optimize Frontend Performance
```
Optimize the performance of `[component/page]`.
Performance issues:
- Slow initial load time
- Large bundle size
- Unnecessary re-renders
Please:
1. Analyze the bundle size using `[bundle analyzer]`
2. Implement code splitting for `[large module]`
3. Add memoization where appropriate
4. Optimize images and assets
5. Lazy load components below the fold
6. Measure performance improvements using Lighthouse
7. Ensure functionality remains intact
```
## Security
### Fix Security Vulnerability
```
Fix the security vulnerability identified in `[file/module]`.
Vulnerability type: `[e.g., SQL injection, XSS, CSRF]`
Severity: `[High/Medium/Low]`
Please:
1. Review the security advisory: `[link to advisory]`
2. Implement the recommended fix
3. Add input validation and sanitization
4. Add a security test to prevent regression
5. Run the security audit: `[audit command]`
6. Ensure no other similar vulnerabilities exist
```
### Add Security Headers
```
Add security headers to the `[application/API]`.
Required headers:
- `[Header 1]`: `[value]`
- `[Header 2]`: `[value]`
- `[Header 3]`: `[value]`
Please:
1. Configure the headers in `[config file]`
2. Test that headers are set correctly using `[tool/method]`
3. Ensure existing functionality is not broken
4. Document the security improvements
```
## Migration & Upgrades
### Upgrade Dependency
```
Upgrade `[package/library]` from version `[old version]` to version `[new version]`.
Please:
1. Review the changelog for breaking changes: `[changelog link]`
2. Update the dependency in `[package.json/requirements.txt]`
3. Update any deprecated API usage
4. Run the migration script if applicable: `[migration command]`
5. Run all tests to ensure compatibility
6. Test the application manually
7. Update documentation if APIs changed
```
### Migrate to New Service
```
Migrate from `[old service]` to `[new service]`.
Reference documentation: `[link to new service docs]`
Please:
1. Set up the new service following the documentation
2. Migrate existing data/configuration
3. Update all code to use the new service
4. Reference `[example file]` for implementation patterns
5. Run integration tests to verify functionality
6. Gradually roll out and monitor for issues
7. Decommission the old service after verification
```
## Code Review
### Review a Pull Request
```
Review the pull request: `[PR link or number]`
Focus areas:
- Code quality and maintainability
- Performance implications
- Security considerations
- Test coverage
- Documentation
Please:
1. Review each file changed
2. Leave specific, actionable comments
3. Verify the changes address the PR description
4. Check for edge cases and error handling
5. Ensure tests are adequate
6. Approve or request changes with clear feedback
```
## General Purpose
### Research and Implement
```
I need to implement `[feature/functionality]` using `[technology/library]`.
Please:
1. Research the best practices for `[technology/library]`
2. Find and review documentation: `[expected doc sources]`
3. Look at open-source examples if applicable
4. Propose an approach before implementing
5. Implement the solution following best practices
6. Add tests and documentation
7. Verify it works as expected
```
### Debug and Fix
```
Something is wrong with `[feature/component]`.
Symptoms:
- `[Symptom 1]`
- `[Symptom 2]`
Please:
1. Investigate the issue in `[relevant files]`
2. Add logging/debugging statements as needed
3. Identify the root cause
4. Implement a fix
5. Test the fix thoroughly
6. Remove any temporary debugging code
7. Ensure no regressions
```
**Pro tip**: For recurring tasks, consider creating a [Playbook](/product-guides/creating-playbooks) with these templates so you can reuse them easily.
# How does Devin fit into my existing SDLC?
Source: https://docs.devin.ai/essential-guidelines/sdlc-integration
Understanding how Devin integrates with your software development lifecycle
## Overview
Devin integrates across the entire software development lifecycle—from understanding existing code and planning changes to testing, reviewing, and deploying updates.
## Where Engineers Spend Their Time
Research shows that less than 20% of an engineer's time is spent writing code ([1](https://www.software.com/reports/code-time-report), [2](https://www.microsoft.com/en-us/research/wp-content/uploads/2024/11/Time-Warp-Developer-Productivity-Study.pdf)). The majority of time is dedicated to understanding codebases, planning changes, reviewing work, and testing. Devin helps accelerate each of these phases while keeping human engineers in control.
## Working Within Existing Engineering Processes
Devin contributes to existing codebases by creating Pull Requests containing its suggested code changes. Devin is subject to the exact same branch protections and SDLC policies as any human engineer. Human engineers review PRs created by Devin before choosing whether to merge the code changes.
## SDLC Integration Points
### Understanding Code & Planning
Before writing any code, engineers need to understand existing systems and plan their approach. Devin accelerates this phase significantly:
Use [DeepWiki](/work-with-devin/deepwiki) to navigate architecture and code with auto-generated documentation. DeepWiki provides conversational documentation for your repositories, making it faster to understand complex systems and dependencies.
Use [Ask Devin](/work-with-devin/ask-devin) to query your codebase directly. Ask Devin can answer questions about code structure and dependencies, and help you scope and plan tasks before implementation. With advanced code search capabilities, Ask Devin produces detailed, accurate, and well-cited answers, reducing the time spent reverse-engineering and tracing dependencies.
Devin can scope and plan tasks by analyzing requirements against your codebase. When integrated with [Jira](/integrations/jira) or [Linear](/integrations/linear), Devin automatically analyzes tickets and provides confidence scores to help prioritize work.
Devin can triage alerts and backlog items, categorizing issues and suggesting approaches. This helps engineering teams prioritize effectively and reduces time spent on initial investigation.
### Development
Devin handles development tasks asynchronously, allowing engineers to delegate work while focusing on higher-value activities:
Delegate well-defined tasks to Devin asynchronously. Devin works in its own environment, preparing code changes and submitting PRs for review. This is particularly effective for repetitive tasks that can be parallelized across multiple Devin sessions.
Devin excels at large-scale modernization projects. For example, customers have used Devin to migrate multi-million-line ETL monoliths to modular components, achieving 8x human time savings. Devin can execute end-to-end migrations across hundreds of repositories, including legacy stacks like COBOL.
Devin prepares and submits PRs following your team's conventions. Devin automatically discovers [PR templates](/integrations/pr-templates) in your repository — including Devin-specific templates (`DEVIN_PR_TEMPLATE.md`) and standard GitHub/GitLab templates. You can customize the template Devin uses without changing your human-facing default.
### Testing
Devin runs self-driven test loops in its own environment, improving test coverage and catching issues early:
Devin writes tests from human-provided [playbooks](/product-guides/creating-playbooks), following your team's testing patterns and conventions. When Devin generates tests, coverage typically increases 1.5-2x, often reaching 90%+ coverage.
Devin runs tests in its own environment, iterating on code until tests pass. This includes running your existing test suites, linting, and type checking before submitting PRs.
### Code Review
Devin can provide automated first-pass reviews on pull requests:
[Devin Review](/work-with-devin/devin-review) provides automated first-pass reviews on pull requests, checking for correctness and conformance with organizational best practices. You can enable it on all PRs or only Devin-authored PRs via your organization settings.
With [Auto-Fix](/work-with-devin/devin-review#auto-fix) enabled, Devin automatically responds to code review comments, fixes flagged bugs, and iterates on CI failures — creating a closed loop where PRs iterate toward merge-ready quality without you in the loop.
Devin checks PRs against your coding standards, style guides, and security requirements, flagging potential issues for human reviewers to address.
### Security and Compliance
Devin integrates into CI/CD pipelines to address security findings automatically:
Integrate Devin into your CI/CD pipeline to respond to findings from static analysis tools like SonarQube, Fortify, or Veracode. When these tools flag an issue, Devin can review and fix it automatically.
Customers report approximately 70% of vulnerabilities are resolved automatically—clearing historical backlogs and reducing security risk.
Devin can execute compliance-related changes across your codebase. For example, when new regulations require updates across hundreds of thousands of files, Devin can implement the changes systematically across all affected repositories.
## Getting Started
To integrate Devin into your SDLC:
1. **Connect your repositories** via [GitHub](/integrations/gh), [GitHub Enterprise Server](/enterprise/integrations/github-enterprise-server), [GitLab](/integrations/gitlab), [Bitbucket](/integrations/bitbucket), or [Azure DevOps](/enterprise/integrations/azure-devops)
2. **Configure branch protections** to ensure Devin's PRs go through your standard review process
3. **Set up integrations** with [Jira](/integrations/jira) or [Linear](/integrations/linear) for ticket-based workflows, and [Slack](/integrations/slack) or [Microsoft Teams](/integrations/microsoft-teams) to chat and collaborate with Devin
4. **Create [playbooks](/product-guides/creating-playbooks) and [knowledge](/product-guides/knowledge)** to codify your team's patterns and standards for Devin to follow
5. **Connect MCPs** to extend Devin's capabilities with [custom tools and integrations](/work-with-devin/mcp)
6. **Configure CI/CD integration** to enable automated security remediation and testing
# When to Use Devin
Source: https://docs.devin.ai/essential-guidelines/when-to-use-devin
**TLDR:** Devin can handle the majority of engineering tasks, including medium and hard complexity work. The clearer and more specific your instructions, the higher the success rate — especially for complex tasks. For more comprehensive guidance on working effectively with coding agents, see our [Coding Agents 101 guide](https://devin.ai/agents101).
## Best Practices
**Scope tasks with [Ask Devin](/work-with-devin/ask-devin) before implementation:**
* Explore your codebase with Ask Devin's advanced code search, scope the approach, and let Devin auto-generate a high-context prompt, all before a single line of code is written.
**Run multiple Devins in parallel:**
* Carve out independent tasks and run them simultaneously. [Ask Devin to delegate to managed Devins](/work-with-devin/advanced-capabilities#managed-devins) to launch many sessions at once, or the [Devin API](/api-reference/overview) for programmatic orchestration.
* Return to draft PRs waiting for review.
**Tag Devin on [Slack](/integrations/slack) or [Teams](/integrations/microsoft-teams):**
* Start sessions directly from conversations about bugs, feature requests, or questions. Devin responds in-thread with updates.
**Let Devin close the loop:**
* Enable [Devin Review](/work-with-devin/devin-review) with [Auto-Fix](/work-with-devin/devin-review#auto-fix) so Devin automatically responds to code review comments, fixes flagged bugs, and iterates on CI failures — without you needing to be in the loop. The result: PRs that are ready to merge by the time you look at them.
**Extend Devin's reach with [MCP integrations](/work-with-devin/mcp):**
* Connect Devin to Datadog, Sentry, databases, Figma, Notion, Stripe, and hundreds of other tools via the MCP Marketplace. Devin can investigate production issues, query data, read designs, and more — all within a single session.
**Let Devin test its own work:**
* Devin has a full desktop environment with a shell, IDE, and browser. It can spin up your app locally, click through the UI, take screenshots, record screen recordings, and QA its own changes before opening a PR.
**Automate recurring tasks with [Scheduled Sessions](/product-guides/scheduled-sessions):**
* Set up daily or weekly sessions to triage Sentry errors, update dependencies, generate reports, or any other repeatable work.
**Use [Devin CLI](/cli) for local coding:**
* Work with Devin directly from your terminal without leaving your editor. Perfect for quick fixes, code exploration, and tasks that benefit from your local environment context. Use [`/handoff`](/work-with-devin/devin-cli#handoff-to-cloud-devin) to seamlessly transfer work to a cloud Devin session when needed. Install with `curl -fsSL https://cli.devin.ai/install.sh | bash`.
## Evaluating Tasks for Devin
When deciding if a task suits Devin, ask yourself:
1. **Can I describe clear success criteria?** Tasks with test suites, CI checks, or verifiable outcomes yield the best results.
2. **Is there enough context?** Provide relevant files, patterns, docs, or examples. The more context, the better.
3. **Would breaking this down help?** For very large projects, split the work into focused sessions that build on each other. You can run them in parallel with [managed Devins](/work-with-devin/advanced-capabilities#managed-devins).
As a rule of thumb: if a task would take you three hours or less, Devin can most likely do it. For longer tasks, break them into smaller sessions.
## Pre-Task Checklist
**Task Definition and Scope**
* Good tasks have a clear start and end, plus explicit success criteria (e.g., passing tests, matching an existing pattern, CI green)
* For complex tasks, use [Ask Devin](/work-with-devin/ask-devin) to collaboratively scope the work before starting a session. Ask Devin can help you investigate the codebase and outline your approach.
**Available Context**
* Are there examples or patterns for Devin to follow?
* Can you provide prototypes, partial code, or existing patterns from the codebase or docs?
* Are there links, filenames, or design files for Devin to reference?
* Have you connected relevant [MCP integrations](/work-with-devin/mcp) (databases, monitoring, design tools)?
**Success Validation**
* Tasks with test suites, lint checks, or compilation steps yield better results
* Devin can test its own work by launching your app and verifying behavior in the browser
* Enable [Devin Review](/work-with-devin/devin-review) to catch bugs before you even look at the PR
**Review Effort**
* With [Auto-Fix](/work-with-devin/devin-review#auto-fix) enabled, Devin responds to review comments and CI failures automatically
* Ideally, you just need to see that CI passes and the PR is approved
**Task Size**
* For large tasks, consider breaking them down into sub-tasks or [asking Devin to run them in parallel](/work-with-devin/advanced-capabilities#managed-devins)
* Splitting large requests into smaller, manageable chunks helps Devin stay on track
* Try to keep sessions focused (XS, S, or M as measured by [Session Insights](/product-guides/session-insights))
## Post-Task Review
**Monitor Session Trajectory**
* Leverage [Session Insights](/product-guides/session-insights) to investigate the session timeline and identify actionable feedback for future sessions
* If Devin repeatedly encounters session usage limits, the task assigned to it might be too complex
* If Devin is struggling with its dev environment, revisit the [Workspace setup](/onboard-devin/environment)
**Learning from Devin's Mistakes**
* In your future sessions, provide more context or instructions to help Devin get past previous obstacles
* Consider adding or approving [Knowledge](/product-guides/knowledge) so Devin remembers things it learned from previous sessions
* Use the improved prompt suggested by [Session Insights](/product-guides/session-insights) as a starting point for similar future tasks
# Introducing Devin
Source: https://docs.devin.ai/get-started/devin-intro
Devin is the AI software engineer, built to help ambitious engineering teams crush their backlogs.
Devin is an autonomous AI software engineer that can write, run and test code.
Devin can handle most tasks, excluding extremely difficult tasks. As a rule of thumb, if you can do it in three hours, Devin can most likely do it.
Ask Devin to tackle Linear/Jira tickets, implement entirely new features, repro and fix bugs, build internal tools, and more!
See what's new with Devin in our [release notes](/release-notes/overview)!
In some cases Devin may not function exactly as referenced, or documentation may be out of date.
## Already Signed Up? Get Started Now:
[Set up your first repos with Devin](/onboard-devin/environment)[Install Devin CLI](/cli) — use Devin directly from your command line[Learn best practices](/essential-guidelines/when-to-use-devin)[Deep dive into Devin's capabilities](/product-guides/knowledge)
[Browse use cases](/use-cases/gallery/index)
## What are Devin's strengths?
Here are the types of tasks where Devin excels:
1. **Tackling many tasks in parallel, before they end up in your backlog**
* Linear/Jira tickets
* Entire features from scratch
* Bug reports
* App testing
2. **Code migrations, refactors, and modernization**
* Language migrations (e.g. JavaScript to TypeScript)
* Framework upgrades (e.g. Angular 16 -> 18)
* Monorepo to submodule conversions
* Removing unused feature flags
* Extracting common code into libraries
3. **Common, repetitive engineering tasks**
* PR Review
* Codebase Q\&A
* Reproducing & fixing bugs
* Writing unit tests
* Maintaining documentation
4. **Customer engineering support**
* Building new integrations and working with unfamiliar APIs
* Creating customized demos
* Prototyping solutions
* Building internal tools
**To get the best results from Devin:**
* Write clear prompts with explicit completion criteria — the clearer the task, the higher the success rate, especially for complex work.
* Make tasks easy to verify — e.g. checking that CI passes or testing an automatic deployment.
* For harder tasks, break them into well-scoped steps and provide relevant context or examples.
* Follow our [best practices and pre-task checklist](/essential-guidelines/when-to-use-devin).
**The most successful workflows include:**
* Tagging Devin on a [Slack](/integrations/slack) or [Teams](/integrations/microsoft-teams) thread about a bug you're discussing with coworkers
* Delegating a more complex task via the web application and taking over in Devin's IDE once it gives you a good first draft.
* Running [Devin CLI](/cli) in your local environment for quick fixes, code exploration, and interactive coding right from the command line — then using [`/handoff`](/work-with-devin/devin-cli#handoff-to-cloud-devin) to send longer tasks to cloud Devin.
* Carving out tasks from your todo list at the start of your day and returning to draft PRs waiting for review.
Devin is most effective when it's part of your team and your existing workflow.
## General Product Features
### The Devin Interface
Devin is designed to be a conversational user interface, and allows you to follow and take over Devin's development process in the embedded IDE. Devin is also available via the [Devin API](/api-reference/overview).
In Devin's Workspace, you'll find [developer tools](/work-with-devin/devin-session-tools) that Devin will use to complete your task.
Devin's terminal, where you can watch commands being executed and view output logs. You can also copy the shell output for debugging purposes. To run commands directly, use the IDE's shell.
Devin's embedded code editor equipped with all the IDE tools and shortcuts you're familiar with. Follow Devin's work in real time and take over to run commands, make direct code edits or test Devin's code.
Watch Devin browse through documentation, test web applications it builds,
download/upload information, and more. You can jump in to help Devin navigate
through browsing tasks via the Interactive Browser.
## Getting Access
To access Devin, sign up at [app.devin.ai](https://app.devin.ai). Individual and Teams plans are available.
You can also install [Devin CLI](/cli) to use Devin directly from your command line:
```bash theme={null}
curl -fsSL https://cli.devin.ai/install.sh | bash
```
If your company is already working with Cognition, you can request permissions from your Administrator or Cognition directly and access Devin via the web application at [app.devin.ai](https://app.devin.ai).
## Feedback
We're learning and our customers' input is crucial! You can share your feedback to [support@cognition.ai](mailto:support@cognition.ai), [via Slack Connect](https://app.devin.ai/settings/support) (available to Teams users), or directly via the "Feedback" button on the far right edge of the web app.
We log all feedback provided by customers and use it to make quick improvements to Devin and inform our product priorities and roadmap.
## Demo
To learn more check out our [blog](https://cognition.com/blog/devin-generally-available).
## About Cognition
We are an applied AI lab building end-to-end software agents.
We're building AI software engineers that help ambitious engineering teams crush their backlogs.
# Your First Session
Source: https://docs.devin.ai/get-started/first-run
Start your first session and see what Devin can do
Before you start your first session, make sure you've [indexed](/onboard-devin/index-repo) and [set up](/onboard-devin/environment) your repositories. These are the foundational steps that help Devin understand and work with your codebase.
Now that you're all set up, kick off your first Devin session! This guide will walk you through the new session interface and help you understand the best ways to interact with Devin.
Prefer working from your terminal? [Devin CLI](/cli) lets you start sessions right from the command line. Install in 2 minutes with `curl -fsSL https://cli.devin.ai/install.sh | bash`.
## Understanding the Devin Session Page
When you start a new session, you'll see two primary modes: **Ask** and **Agent**.
Unless you already have a fully scoped plan, we recommend starting with Ask to work with Devin on constructing a plan, then moving to Agent mode to execute it.
### Ask Mode
**Ask Devin** is a lightweight mode for exploring your codebase and planning tasks with Devin, without making changes to the actual code. Ask Devin now supports both asking questions and planning:
* **Ask questions** about how your code works. Uses advanced code search to produce detailed, accurate, and well-cited answers.
* **Plan tasks** by scoping and planning work before implementation. Devin generates context-rich prompts for Agent sessions.
When you start a Devin session from Ask Devin, the session status is visible directly in the conversation.
#### Triggering Ask Mode
You can trigger Ask mode from the main page or from a DeepWiki page.
For Ask mode from the main page, toggle to Ask mode and select the repository/repositories you want to ask about.
For Ask mode from a DeepWiki page, type a query in the chat input at the bottom of the page and click Ask. This will automatically scope Devin's knowledge to that repository specifically.
Learn more in our [Ask Devin guide](/work-with-devin/ask-devin).
Once you've worked with Devin to understand the problem and create a plan, you're ready to move to Agent mode.
### Agent Mode
Agent mode is Devin's full autonomous mode where it can write code, run commands, browse the web, and complete complex tasks end-to-end. Use Agent mode when you're ready to:
* Implement features or fix bugs
* Create pull requests
* Run tests and debug issues
* Perform multi-step tasks that require code changes
#### Triggering Agent Mode
You can trigger Agent mode from the main page or from an Ask Devin session. When a session is started from Ask Devin, its status is displayed in the Ask Devin conversation so you can track progress.
For tasks that are not fully scoped, we recommend:
* Start with **Ask mode** to plan out the task
* **Construct a Devin Prompt**, which will draw from your Ask session to create a scoped plan
* Click **Send to Devin** to move to Agent mode and execute the task
This flow is shown below:
For Agent mode from the main page, toggle to Agent mode and select the repository/repositories you want to work with.
When starting an Agent session, you'll configure a few options: selecting a Repository and selecting an Agent.
#### Selecting a Repository
Select the repository you want Devin to work with. Click the repository selector to see all repositories that have been [added to Devin's machine](/onboard-devin/environment).
Selecting a repository ensures Devin:
* Has access to your codebase and can make changes
* Uses the correct branch as a starting point
* Can create pull requests to the right repository
#### Selecting an Agent
You can choose which agent configuration Devin uses for your session. Different agents may have different capabilities or be optimized for specific types of tasks.
Available agents include:
* **Devin** (default) — A general-purpose AI software engineer for building features, fixing bugs, refactoring code, and most development tasks.
* **Fast Mode** — An optimized mode for quick, well-scoped tasks.
* **[Dana](/work-with-devin/data-analyst)** — A data analyst agent optimized for querying databases, analyzing data, and creating visualizations.
If you're unsure which agent to use, the default Devin agent works well for most tasks.
You don't need to start a new session to change modes. You can switch the agent mid-session using the agent toggle next to the message input on the session page — the change takes effect with your next message. In Slack, you can switch modes mid-session by starting a message with `!ultra`, `!fast`, `!lite`, `!fusion`, `!swe`, or `!normal` (see [Slack mode keywords](/integrations/slack)).
## Using @ Mentions
Use `@` mentions to give Devin specific context about files, repositories, or other resources. When you type `@` in the chat input, you'll see a dropdown of available mentions:
* **@Repos** - Reference a specific repository
* **@Files** - Reference a specific file in your codebase
* **[@Macros](/product-guides/knowledge)** - Reference a macro for a Knowledge entry
* **[@Playbooks](/product-guides/creating-playbooks)** - Reference a team or community playbook, which are detailed prompt templates that can be used to guide Devin's behavior
* **[@Skills](/product-guides/skills)** - Reference a skill defined in your repository (reusable procedures committed as `SKILL.md` files)
* **[@Secrets](/product-guides/secrets)** - Reference a specific secret (e.g. API keys, credentials, etc.) from Devin's session manager
* **@Sessions** - Reference a previous Devin session for context
@ mentions help Devin understand exactly what you're working with and reduce ambiguity in your prompts.
## Scoping Your First Session
Start with tasks that have **clear success criteria** and **provide Devin with the context it needs** — just as you would when handing off work to a teammate. As you get comfortable, try progressively more complex tasks. We've seen users work with Devin on everything from fixing small bugs to targeted refactors to large-scale migrations and building entire features from scratch.
As a rule of thumb: if a task would take you three hours or less, Devin can most likely do it. For larger projects, break them into focused sessions and run them in parallel with [managed Devins](/work-with-devin/advanced-capabilities#managed-devins).
## First-time Prompt Ideas
```Adding a new API endpoint theme={null}
Create a new endpoint /users/stats that returns a JSON object with user count and average signup age.
Use our existing users table in PostgreSQL.
You can reference the /orders/stats endpoint in statsController.js for how we structure responses.
Ensure the new endpoint is covered by the StatsController.test.js suite.
```
```Small frontend features theme={null}
In UserProfileComponent, add a dropdown that shows a list of user roles (admin, editor, viewer).
Use the styling from DropdownBase.
When a role is selected, call the existing API to set the user role.
Validate by checking that the selection updates the user role in the DB. Refer to your Knowledge for how to test properly.
```
```Write unit tests theme={null}
Add Jest tests for the AuthService methods: login and logout.
Ensure test coverage for these two functions is at least 80%.
Use UserService.test.js as an example.
After implementation, run `npm test -- --coverage` and verify the coverage report shows >80% for both functions.
Also confirm that tests pass with both valid and invalid credentials, and that logout properly clears session data.
```
```Migrating or refactoring existing code theme={null}
Migrate logger.js from JavaScript to TypeScript.
We already have a tsconfig.json and a LoggerTest.test.js suite for validation.
Make sure it compiles without errors and make sure not to change the existing config!
After migration, verify by:
1) running `tsc` to confirm no type errors
2) running the test suite with `npm test LoggerTest.test.js` to ensure all tests pass
3) checking that all existing logger method calls throughout the codebase still work without type errors.
```
```Updating APIs or database queries theme={null}
We're switching from pg to sequelize (read https://sequelize.org/api/v6/identifiers).
Please update the UserModel queries to use Sequelize methods.
Refer to OrderModel for how we do it in this codebase.
After implementation, verify by:
1) running `npm run test:integration UserModel.test.js` to check all integration tests pass
2) confirming query performance hasn't degraded by checking execution time on a test dataset of 1000 users
3) validating that all CRUD operations still maintain data integrity by running `npm run test:e2e user-flows.test.js`
```
```txt Quick PR theme={null}
## Overview
The task is to make a quick pull request to a repository.
Since this is a 'quick' PR, you will not need to run any code or test anything; simply make a PR and the user will handle the testing. Your only responsibility is reading and writing code.
## What's Needed From User
- The repository to create a pull request
## Procedure
### Prepare your workspace
1. Navigate to the relevant repository on your machine (clarify with the user if you can't figure it out).
- Check out the main branch and note down the name of the main branch.
- Checkout to a new branch since you'll be making a pull request. The name of the branch has to be of the format `devin/-`. For example `devin/1700000000-fix-popup`. Run `git remote -v && git pull && git checkout -b devin/$(date +%s)-{branch-name}` and replace `{branch-name}` with the name of the branch you want to create.
2. Study the request, codebase, and plan out the changes
- Review the most relevant files and code sections, identifying relevant snippets.
- Inform the user of your plan
### Work on the PR itself
3. Make the code changes
- Don't change anything that wasn't specifically requested by the user
4. Make the PR
- Commit and push the changes and tell the user.
- See advice section for the exact command to make the PR
- Make a pull request & review the pr to make sure it looks OK.
- Ensure all GitHub actions pass successfully & make necessary changes until they do
- Send the PR link to the user and summarize what you changed.
5. Address any feedback from the review; send the PR link again every time you make any changes
- If you need to make updates, just push more commits to the same branch; don't create a new one
## Task Specification
- PR link is included in your messages to the user
- PR was reviewed after creation
- PR does not include any stray changes
- PR does not change anything that wasn't specifically requested by the user
- PR description should include a summary of the changes, formatted as a checklist
- PR description should mention that the code was written without testing, and include - [ ] Test the changes as an item
- PR description should include the following footer: "This PR was written by [Devin](https://devin.ai/) :angel:"
- PR description should include any metadata that the user has provided (e.g. linear ticket tags in the appropriate syntax)
- PR description should not be malformatted (use --body-file instead of --body if the newlines are garbled!)
## Forbidden Actions
- Do NOT try to access github.com through the browser, you will not be authenticated.
- NEVER force push on branches! Prefer merging over rebasing so that you don't lose any work.
- Do NOT push directly to the main branch.
## Advice and Pointers
- Double check the name of the main branch (which could be `main` or `master`) using `git branch`.
- For repos with CI/CD on github actions, you can check build logs using the gh cli. if you're asked to fix a build/fix lint, you should start by looking at recent build logs
- Check `git status` before committing or adding files.
- Use `git diff` to see what changes you have made before committing.
- If you're updating an existing repo, use `gh cli` to make pull requests.
- Send the PR link to the user every time you update & ask them to re-review so that it's convenient for them
- You should already be authorized to access any repositories the user tells you about. If not, ask the user for access.
```
If you'd like to dig in to some more detailed examples of what Devin can do (and how), check out our **use cases**.
Explore practical examples across engineering workflows — each includes prompts you can try immediately.
## After Your Session
Once Devin finishes, open [Session Insights](/product-guides/session-insights) and click **Generate Analysis** — you'll get a timeline of what happened, actionable feedback, and an improved prompt you can use for similar tasks in the future.
## Next Steps
Once you're comfortable with basic sessions, explore these resources to get more out of Devin:
Connect Devin to your existing tools like GitHub, Slack, Jira, and more.
Learn how to use Playbooks to implement tasks.
Add knowledge to help Devin understand your team's practices.
# Bitbucket
Source: https://docs.devin.ai/integrations/bitbucket
Work with Devin directly in your Bitbucket repositories
## Why integrate Devin with Bitbucket?
Integrating Devin with your Bitbucket repositories allows Devin to create pull requests, read and respond to your PR comments, and collaborate effectively with your team. This lets Devin be a true collaborator on your engineering team.
## Prerequisites
Before setting up the Bitbucket integration, we recommend:
* **Dedicated service account** - Create a new Bitbucket account specifically for Devin (e.g., `devin@yourcompany.com`) rather than using an existing user account for cleaner access management and audit trails
Using a dedicated service account makes it easier to track Devin's activity, manage permissions, and maintain security best practices across your organization.
## Setting up the Integration
### Bitbucket Cloud
**The setup is easy!** Here's how to get started:
1. Create a new Bitbucket account specifically for Devin (just like you'd create a personal account). You'll use this account, not your personal one, during the integration process.
2. In your Devin account, go to [Settings > **Connections** > **Bitbucket**](https://app.devin.ai/settings/connections) and click "Connect".
3. You'll be redirected to Bitbucket where you should:
* Log in with the Bitbucket account you created for Devin (not your personal account)
* Grant the necessary permissions for Devin to work with your repositories
4. Once completed, you'll return to the Devin settings page where you can confirm the integration is active.
### Bitbucket Data Center
For organizations using Bitbucket Data Center (self-hosted), follow these steps:
1. Create a dedicated service account in your Bitbucket Data Center instance for Devin.
2. In your Devin account, go to [Settings > **Connections** > **Bitbucket**](https://app.devin.ai/settings/connections) and select "Bitbucket Data Center".
3. Configure the connection by providing:
* Your Bitbucket Data Center URL
* Authentication credentials for the service account
4. Grant the service account appropriate project and repository permissions in your Bitbucket Data Center instance.
5. Once configured, you'll see the integration status confirmed in your Devin settings.
## Using Devin with the Bitbucket Integration
After connecting Bitbucket, set up your repositories on [Devin's Machine](https://app.devin.ai/machine).
While Devin can see and address comments you leave on its pull requests if you ask directly, Devin will not wake up automatically to respond to these comments.
## Best Practices
* Create a dedicated Bitbucket account for Devin
* Enable branch protections on main/master branches
* Grant the service account appropriate workspace and repository permissions
# GitHub
Source: https://docs.devin.ai/integrations/gh
Work with Devin directly in your repos
## Why integrate Devin with GitHub?
Integrating Devin with your GitHub organization enables Devin to create pull requests, respond to PR comments, and collaborate directly within your repositories. This allows Devin to function as a full contributor on your engineering team.
To get started, navigate to [app.devin.ai](http://app.devin.ai) > **Settings** > **Integrations** > **GitHub**, click **Add Connection**, and follow the prompts. You will select which repositories Devin can access and review the required permissions.
**Using GitHub Enterprise Server or GitHub Enterprise Cloud with Data Residency?** See the [GitHub Enterprise Server Integration guide](/enterprise/integrations/github-enterprise-server) for setup instructions.
## Setting up the Integration
You must be an admin of your GitHub organization to create and manage the Devin integration. Having trouble? Check out our [Common Issues](/admin/common-issues#i-m-unable-to-connect-my-github-organization).
1. In your Devin account at [app.devin.ai](http://app.devin.ai), navigate to **Settings** > **Integrations** > **GitHub** and click **Add Connection**.
2. If you are not already logged in to GitHub, you will be prompted to authenticate.
3. Select the GitHub organization you want to connect to Devin.
4. Choose whether to grant Devin access to **All repositories** or **Select repositories** to control which repositories Devin can access.
5. After completing the GitHub authorization, you will be redirected to Devin settings where you can confirm the integration is active.
We recommend enabling branch protection rules on your main branch to ensure all required checks pass before Devin can merge changes.
## Using Devin with the GitHub Integration
### For Core and Teams users
Once the integration is configured, you can @mention repositories directly in your prompts within the Devin web application.
### For Enterprise users
Once the integration is configured, you can delegate repositories to specific organizations from **Enterprise Settings** > **Repository Permissions**.
If you are working with a repository for the first time, we recommend completing the [development environment setup in the onboarding flow](/onboard-devin/environment) to ensure Devin has accurate, up-to-date information about your codebase.
Devin automatically responds to PR comments as long as the session has not been archived.
## Managing Devin’s Permissions in GitHub
During setup, you can grant Devin access to **all repositories** in your organization or limit access to **specific repositories**.
You can adjust repository access at any time through GitHub's settings:
1. Navigate to your GitHub organization's **Settings** > **GitHub Apps** (e.g., `https://github.com/organizations//settings/installations`)
2. Select **Configure** for the Devin.ai integration
3. Under **Repository access**, choose to grant access to all repositories or select specific repositories
4. Click **Save** to apply your changes
Devin requires the following permissions:
**Read** access to:
| Permission | Description |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| `dependabot alerts` | Allow Devin to resolve dependabot alerts on your behalf (i.e. bumping dependency versions) |
| `actions` | Allow Devin to view the actions configured for a repository in order to understand if Devin’s changes pass CI |
| `deployments` | Allow Devin to view which versions of a repository were deployed |
| `metadata` | Allow Devin to view crucial metadata about a repository such as who owns it |
| `packages` | Allow Devin to view which versions of a repository were shipped as a package |
| `pages` | Allow Devin to consult pages associated with a repository, e.g. to view documentation |
| `repository security advisories` | Allow Devin to view security advisories related to a repo in order to help fix security issues |
| `members` | Allow Devin to view members of an organization |
| `webhooks` | Allow Devin to view the hooks configured for a repository, e.g. linting and type checking |
**Read** and **write** access to:
| Permission | Description |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `checks` | Allow Devin to view and report check results for a repository in order to understand and communicate if Devin’s changes pass CI |
| `commit statuses` | Allow Devin to view and set commit statuses to indicate if a commit passes CI |
| `contents` | Allow Devin to contribute to the codebase |
| `discussions` | Allow Devin to contribute to discussions |
| `issues` | Allow Devin to open new issues |
| `pull requests` | Allow Devin to create new PRs |
| `projects` | Allow Devin to view and manage projects associated with a repository, e.g. to retrieve information about a task |
| `workflows` | Allow Devin to set up new workflows, e.g. to help configure CI/CD |
These permissions enable Devin to work in your repositories as a regular contributor—pushing branches, opening pull requests, and participating in PR discussions.
## Pull Request Templates
When Devin creates a pull request, it uses a template from your repository to structure the PR description. If you provide a template, Devin follows its format when submitting PRs to GitHub.
### Devin-specific template (recommended)
You can provide Devin with its own template without modifying your default human-facing template by adding a file named `devin_pr_template.md` in one of the supported `PULL_REQUEST_TEMPLATE` locations below. This is useful if you want Devin to include additional context, such as a reviewer checklist or a Mermaid diagram of modified files.
### Template search order
Devin searches for templates in the following order and uses the first match:
1. PULL\_REQUEST\_TEMPLATE/devin\_pr\_template.md
2. docs/PULL\_REQUEST\_TEMPLATE/devin\_pr\_template.md
3. .github/PULL\_REQUEST\_TEMPLATE/devin\_pr\_template.md
4. pull\_request\_template.md
5. docs/pull\_request\_template.md
6. .github/pull\_request\_template.md
If no template is found, Devin uses its default PR description format.
If you want Devin to use your existing `pull_request_template.md`, copy or symlink it to one of the `devin_pr_template.md` paths listed above.For more on GitHub pull request templates (supported locations, multiple templates, query parameters, etc.), see the GitHub Docs: Creating a pull request template for your repository.
### Commit Signing
To sign Devin's commits with GPG, configure the key in your [environment](/onboard-devin/environment/blueprints) so it persists across sessions. Generating the key in a session terminal will not work — every Devin session boots from a fresh copy of the machine image, so any keys created mid-session are discarded when the session ends.
GPG signing via environment config only produces **Verified** commits when Devin is the *commit author*. GitHub verifies signatures against the author identity, but in any **Commit authoring** mode where the author is the requesting user (e.g., "Co-authored", "User only", "User as author, Devin as committer"), Devin overrides `user.email` per-session with each user's own email — which won't match a single shared GPG key. Set your org's [Commit authoring](https://app.devin.ai/settings/profile) mode to **"Devin only"** or **"Devin as author, user as committer"** before relying on this setup.
Set this up at the **org-wide** layer (or **enterprise** layer, if all of your orgs need it) so that every repo gets a signed-commit configuration:
1. Create (or pick) a dedicated GitHub user account that will own both the commit author identity *and* the credentials Devin pushes with — e.g., `devin@company.com`. Using one account for both makes the signing setup straightforward; using two splits the configuration described below across both.
2. Generate a GPG key locally with that account's email as the UID, following [GitHub's instructions](https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key).
3. Upload the **public** key to the GitHub account whose verified email matches the GPG UID, under [GitHub Settings > SSH and GPG keys](https://github.com/settings/keys). GitHub verifies signatures against the *commit author* identity, not the pushing identity — the public key must live on the account that owns the email in `user.email`. (If that's the same dedicated account you're pushing as, you only need to do this once.)
4. Export the **private** key, base64-encode it, and add it (along with the matching `GIT_USER_NAME` / `GIT_USER_EMAIL`) as secrets in [Settings > Secrets](https://app.devin.ai/settings/secrets).
5. In your [org-wide environment config](https://app.devin.ai/settings/environment), import the key and enable signing on every session start. See the copy-paste [GPG commit signing example](/onboard-devin/environment/templates#gpg-commit-signing) for the full YAML.
The committer email (`user.email`) must match a UID on the GPG key, and that same email must be a verified email on the GitHub account where you uploaded the public key. If any of these three don't match, GitHub will show the commit as **Unverified** even though the signature itself is valid.
### Security Considerations
* **Branch protection:** We recommend enabling branch protection rules on your main branch to ensure all required checks pass before Devin can merge changes.
* **Organization-level permissions:** Devin uses the permissions granted at the organization level, not the permissions of the individual user running a session.
* **Consistent access:** All users with access to both the GitHub and Devin organizations share the same Devin integration permissions.
* **Repository creation:** Devin cannot create new repositories in your GitHub account.
## IP Allowlisting
If your organization requires IP allowlisting for GitHub access, add the following IP addresses:
* 100.20.50.251
* 44.238.19.62
* 52.10.84.81
* 52.183.72.253
* 20.172.46.235
* 52.159.232.99
* 4.204.199.103
* 54.201.200.193
* 54.69.238.189
* 100.23.34.160
These IP addresses may change in future updates. We recommend monitoring our release notes for any changes.
## Troubleshooting: GitHub organization connected to the wrong Devin organization
If your GitHub organization is already connected to a Devin organization you don't have access to, a GitHub org admin can remove the existing installation and reinstall it under a different Devin organization.
We recommend confirming with the owner of the current Devin organization before removing the installation.
1. Go to [github.com/settings/installations](https://github.com/settings/installations) and click **Configure** next to **Devin.ai Integration**.
If needed, switch to the correct GitHub organization context using the **Go to settings page** dropdown in the top right.
2. On the installation page, scroll to the **Danger zone** section and click **Uninstall** to remove the Devin.ai Integration from the GitHub organization.
3. Return to [app.devin.ai](https://app.devin.ai) and refresh the page. You can now reinstall the GitHub integration under your Devin organization.
## GitHub Integration FAQs
Yes, you can connect either a GitHub Organization or a personal GitHub account to your Devin organization. However, we recommend connecting the account that has the appropriate permissions for Devin to access the repositories your team needs.
Only users who are members of the organization that installed the GitHub integration can use it in their Devin sessions. Devin inherits access to the GitHub integration based on the user's organization membership.
Encryption keys are managed by AWS KMS and rotated periodically.
# GitLab
Source: https://docs.devin.ai/integrations/gitlab
Work with Devin directly in your GitLab repositories
## Why integrate Devin with GitLab?
Integrating Devin with your GitLab repositories allows Devin to create merge requests, read and respond to your MR comments, and collaborate effectively with your team. This lets Devin be a true collaborator on your engineering team.
**Using a self-hosted GitLab instance?** We support GitLab Self-Managed for users on our Enterprise plan. Simply click the dropdown on the "Connect" button and select "Self-Hosted". See the [GitLab Self-Managed Integration guide](/enterprise/integrations/gitlab-self-managed) for full setup instructions.
## Setting up the Integration
**The setup is easy!** Here's how to get started:
1. Create a new GitLab account specifically for Devin (just like you'd create a personal account). You'll use this account, not your personal one, during the integration process.
2. In your Devin account, go to [Settings > **Connections** > **Gitlab**](https://app.devin.ai/settings/connections) and click "Connect".
3. You'll be redirected to GitLab where you should:
* Log in with the GitLab account you created for Devin (not your personal account)
* Grant the necessary permissions for Devin to work with your repositories
4. Once completed, you'll return to the Devin settings page where you can confirm the integration is active.
For GitLab on-premise (self-hosted) installations, the sync of MR status (open, merged, closed) to Devin sessions only happens once a day. This can lead to a temporarily misrepresented MR status in your session or session list until the next sync occurs.
***
## Webhook Configuration
Configuring a webhook allows Devin to automatically receive real-time notifications when specific events occur in GitLab (such as opening or updating merge requests and commenting on merge requests).
To configure the webhook:
1. In your Devin account, go to **Settings** > **Connections**
2. Locate the GitLab instance you want to configure
3. Click the **Manage** dropdown
4. Select **Configure Webhook**
5. Follow the provided commands to complete the setup
Once configured, Devin will be able to respond to GitLab events in real time rather than relying on periodic polling.
***
## Repository Permissions
### For Core and Teams users
Once the integration is configured, you can @mention repositories directly in your prompts within the Devin web application.
### For Enterprise users
Once the integration is configured, you can delegate repositories to specific organizations from **Enterprise Settings** > **Repository Permissions**.
1. Go to **Enterprise Repositories**
2. Select the correct organization
3. Open **Manage Permissions**
4. Add the relevant repositories with the appropriate **read/write** permissions
If repositories do not appear immediately after connecting, Devin refreshes the repository list periodically. You can manually refresh the repository list in Devin.
***
## User Linking
For Enterprise users with a self-hosted GitLab instance, individual users can link their personal GitLab accounts to Devin. This allows Devin to act on behalf of individual users for GitLab operations.
To link a personal GitLab account:
1. Ensure you are a member of a Devin organization with GitLab repository permissions
2. Go to **Personal Connections** in your Devin settings
3. Look for the GitLab integration
4. Select the GitLab connection and complete the linking flow
**Personal Connections only shows integrations for organizations the user belongs to.** If the GitLab integration does not appear, confirm that you are a member of a Devin organization with GitLab repository permissions.
***
## Using Devin with the GitLab Integration
After connecting GitLab, set up your repositories on [Devin's Machine](https://app.devin.ai/machine).
While Devin can see and address comments you leave on its merge and pull requests if you ask directly, Devin will not wake up automatically to respond to these comments.
## Best Practices
* Create a dedicated GitLab account for Devin
* Enable branch protections on main/master branches
* Configure the webhook for real-time event notifications
## Support
1. Create a Slack connect channel with our team at [app.devin.ai/settings/support](https://app.devin.ai/settings/support)
2. Share session links when reporting issues and provide screenshots
# Jira
Source: https://docs.devin.ai/integrations/jira
Assign Jira tickets to Devin and turn them into PRs
## Setting up the integration
1. In your Devin account at app.devin.ai, go to [Settings > Connections > Jira](https://app.devin.ai/settings/connections/jira), and click "Connect".
2. You'll be redirected to Jira to review permissions and grant Devin access.
3. Once connected, configure your **playbook labels** and optionally set up **automation triggers** in the settings page.
After connecting, we recommend connecting a **service account** so Devin's comments appear as the bot, not as your personal account. See [Connecting a service account](#connecting-a-service-account) below.
## How to trigger Devin from Jira
There are four ways to start a Devin session from a Jira ticket:
### Assign the ticket to Devin
Assign the ticket to the Devin service account directly in Jira. Devin will use the **default playbook** configured in your [Jira integration settings](https://app.devin.ai/settings/connections/jira) to start working on the ticket.
### Add a playbook label
Add a playbook label (e.g. `!plan`, `!implement`, `!triage`) to the ticket. Devin will start a session using the specific playbook that matches the label. These labels correspond to the **playbook labels** configured in your integration settings. You need to create these labels manually in your Jira project — copy the label name from the integration settings.
### Add the "devin" label
Add the `devin` label to any Jira issue (you may need to create this label in your Jira project first). Devin will use the **default playbook** to start working on the ticket.
The integration uses word-boundary matching (case-insensitive), so any label containing **devin** as a standalone word will trigger it — for example, `devin`, `Devin`, `devin-workshop`, or `devin-task`. Labels where "devin" is part of a larger word, like `devinworkshop` or `devin_workshop`, will not trigger it.
### @mention Devin in a comment
Mention `@Devin` in a ticket comment with specific instructions. Devin will start a session and use your comment as the task instruction, without applying a playbook. If a session already exists for the ticket, your message will be forwarded to the existing session.
## Configuring the integration
### Session mode
The session mode toggle controls how Devin responds to Jira triggers:
* **Direct session creation** (enabled by default): Devin creates a full session and works on the issue, posting updates back to Jira.
* **Scoping only** (disabled): Devin only analyzes the ticket and posts a scoping comment with a summary, implementation plan, and confidence estimate. You can then click the provided link to start a session manually.
### Playbook labels
Playbook labels let you control which Devin [playbooks](/product-guides/using-playbooks) are available as Jira labels. When you add a playbook, its macro (e.g. `!plan`) becomes a label you can assign to Jira issues to trigger Devin with that playbook. Labels must be created manually in your Jira project — copy the label name from the integration settings.
* **Default playbook**: One playbook is marked as the default. When a ticket is triggered without a specific playbook label (e.g. with just the `devin` label or by assigning the ticket to Devin), Devin uses this default playbook.
* **Adding playbooks**: Click "Add playbook" to add additional playbooks. Only playbooks with a macro can be added.
* **Removing playbooks**: Remove a playbook to stop using its label as a trigger.
### Automation triggers
Automation triggers let Devin automatically start working on tickets when they match certain conditions, without manual assignment or labeling. You can configure triggers based on:
* **Projects**: Only trigger for tickets in specific Jira projects.
* **Labels**: Only trigger when a ticket has specific labels.
* **Statuses**: Only trigger when a ticket reaches a specific status (e.g. "To Do", "In Progress").
* **Playbook**: Optionally specify which playbook Devin should use for the triggered session.
Triggers use **edge detection**, meaning they only fire when a ticket transitions from not matching to matching the trigger conditions (e.g. when a label is added or a status changes), not for tickets that already match.
### Enterprise: Jira project mapping
For enterprise deployments with multiple Devin organizations, admins can map Jira projects to specific Devin organizations. This ensures tickets from each Jira project are routed to the correct Devin organization. A mapping is required for the Jira integration to work in enterprise setups.
## Interacting with Devin in Jira
Once Devin starts working on a ticket, it communicates back through Jira:
* **PR links**: When Devin creates a pull request, the PR URL is automatically added as a remote link on the Jira issue and posted as a comment.
* **Session link**: A direct link to the Devin session in the web app is provided so you can follow progress in real time.
* **Follow-up messages**: Mention `@Devin` in a comment to give Devin additional instructions or ask questions.
## Connecting a service account
After connecting Jira with your admin account, you can optionally connect a service account using OAuth 2.0 client credentials. This makes Devin's comments appear under a dedicated bot identity instead of your personal account.
1. In your Atlassian organization's admin settings, create an OAuth 2.0 service account with the following **Classic scopes**:
* `read:me`
* `read:jira-user`
* `read:jira-work`
* `write:jira-work`
2. Ensure the service account has the **User** application role for Jira. In [Atlassian Admin](https://admin.atlassian.com), go to **Directory > Service accounts**, select the service account, click **⋯ > Allow access**, and set the Jira role to **User**. You can also set this when first creating the service account. Without this role, the service account won't be able to access Jira resources.
3. In [Settings > Connections > Jira](https://app.devin.ai/settings/connections/jira), click **Connect service account** and enter the client ID and client secret.
# Linear
Source: https://docs.devin.ai/integrations/linear
Assign Linear tickets to Devin and turn them into PRs
When you connect the Linear integration, Devin automatically has access to native Linear tools using your integration's authentication. You do not need to configure the Linear MCP separately from the [MCP Marketplace](/work-with-devin/mcp).
## Setting up the integration
1. In your Devin account at app.devin.ai, go to [Settings > Connections > Linear](https://app.devin.ai/settings/connections/linear), and click "Connect".
2. You'll be redirected to Linear to review permissions and grant Devin access. You can select which teams in Linear Devin will have access to. You can always change Devin's access directly in the Linear Apps settings later.
3. Once connected, configure your **synced playbook labels** and optionally set up **automation triggers** in the settings page.
## How to trigger Devin from Linear
There are three ways to start a Devin session from a Linear ticket:
### Assign Devin to a ticket
Assign the ticket to Devin directly in Linear. Devin will use the **default playbook** configured in your [Linear integration settings](https://app.devin.ai/settings/connections/linear) to start working on the ticket.
### Add a playbook label
Add a playbook label (e.g. `!plan`, `!implement`, `!triage`, `!review`) to the ticket. Devin will start a session using the specific playbook that matches the label. These labels are synced from your configured **synced playbook labels** in the integration settings.
### @mention Devin in a comment
Mention Devin in a ticket comment with specific instructions. Devin will start a session and use your comment as the task instruction, without applying a playbook.
## Configuring the integration
### Synced playbook labels
Playbook labels let you control which Devin [playbooks](/product-guides/using-playbooks) are available directly from Linear as labels. When you add a playbook to the synced list, its macro (e.g. `!plan`) becomes available as a Linear label in the "Devin Playbooks" label group.
* **Default playbook**: One playbook is marked as the default. When a ticket is assigned to Devin without a specific playbook label, Devin uses this default playbook. The `!plan` playbook is set as the default for new connections.
* **Adding playbooks**: Click "Add playbook" to sync additional playbooks. Only playbooks with a macro can be synced.
* **Removing playbooks**: Remove a playbook to stop syncing its label to Linear.
### Automation triggers
Automation triggers let Devin automatically start working on tickets when they match certain conditions, without manual assignment or labeling. You can configure triggers based on:
* **Teams**: Only trigger for tickets in specific Linear teams.
* **Labels**: Only trigger when a ticket has specific labels.
* **Statuses**: Only trigger when a ticket reaches a specific status (e.g. "Todo", "In Progress").
* **Playbook**: Optionally specify which playbook Devin should use for the triggered session.
Triggers use **edge detection**, meaning they only fire when a ticket transitions from not matching to matching the trigger conditions (e.g. when a label is added or a status changes), not for tickets that already match.
### Enterprise: Linear team mapping
For enterprise deployments with multiple Devin organizations, admins can map Linear teams to specific Devin organizations. This ensures tickets from each Linear team are routed to the correct Devin organization. A mapping is required for the Linear integration to work in enterprise setups.
## Interacting with Devin in Linear
Once Devin starts working on a ticket, it uses Linear's agent session interface to communicate:
* **Activity feed**: Devin posts real-time updates as it works, including commands run, files edited, and progress summaries.
* **Plan tracking**: Devin's todo list syncs to Linear's plan UI so you can see progress at a glance.
* **Follow-up messages**: Send messages in the agent session thread to give Devin additional instructions or ask questions.
* **Stop Devin**: Use the stop signal in Linear to put Devin to sleep on the current task.
* **PR links**: When Devin creates a pull request, the PR URL is automatically added to the agent session for easy access.
* **Session link**: A direct link to the Devin session in the web app is added to the agent session, along with a link to the playbook used (if applicable).
## Connecting your Linear user account
In addition to the organization-level integration, individual team members can link their Linear account to their Devin account. This allows Devin to recognize who triggered a ticket and attribute sessions to the correct user.
To connect your user account, go to [Settings > Connections > Linear](https://app.devin.ai/settings/connections/linear) and link your account in the user connection section.
# Microsoft Teams
Source: https://docs.devin.ai/integrations/microsoft-teams
Chat and collaborate with Devin directly in Microsoft Teams
Tag **@Devin** in Microsoft Teams as soon as bugs, feature requests, and questions come in. Devin responds in-thread with updates and questions when it's tagged.
## Get started
### Installation
1. Go to [Settings > Connections](https://app.devin.ai/settings/connections) and select **Microsoft Teams**
2. Click "Connect"
3. You’ll be prompted to install the Devin app for Microsoft Teams in your tenant and/or target Team
4. Make sure to link your individual user. All users in your organization will need to complete this step to use Devin
5. Mention `@Devin` in a Team channel or chat to start a session
> Note: For Devin to work for each user, every individual must connect their own account in the Devin dashboard (Settings > Connections). This lets Devin associate their Microsoft Teams identity with their Devin user.
### How to use Devin from Microsoft Teams
Once you’ve installed the Microsoft Teams integration, simply trigger Devin with `@Devin` in any Team channel.
Devin will respond in-thread to your session. You can communicate back and forth just like in the regular Devin chat interface.
*Note that Devin may make mistakes. Please double-check responses.*
### Inline Teams Keywords & Functions
| Keyword | Function |
| ------------------- | -------------------------------------------------------------------------------------------- |
| `!ask` | Begin your message with !ask to get a quick codebase answer without starting a full agent |
| `!deep` | Get a deeper research answer using advanced search |
| `mute` | Prevents Devin from seeing further messages in the thread |
| `unmute` | Reverses the above |
| `(aside)`, `!aside` | Causes Devin to ignore the message (useful for commentary on Devin's run directly in-thread) |
| `sleep` | Puts Devin to sleep; to wake Devin up, send any message in the thread |
| `archive` | Puts Devin to sleep + archives the session |
| `EXIT` | Ends the session |
| `help` | Shows help message with available keywords and functions |
### Pricing
If you don't yet have a Devin account, you can learn more about pricing and plans [here](https://devin.ai/pricing).
### Privacy
Our privacy policy is available [here](https://cognition.com/privacy-policy).
### Authentication Flow
The diagram below illustrates the high-level authentication architecture for the Microsoft Teams integration, showing how authentication flows from Teams through various layers to create authenticated Devin sessions.
```mermaid theme={null}
graph TB
subgraph MSTeams ["Microsoft Teams"]
A[Teams User] --> B[Teams Channel]
B --> C[Teams Bot Framework]
C --> D[Microsoft Graph API]
end
subgraph AuthLayer ["Authentication Layer"]
E[Certificate-Based Auth] --> F[JWT Token Validation]
F --> G[Tenant ID Verification]
G --> H[User Identity Claims]
end
subgraph DevinPlat ["Devin Platform"]
I[Chat Manager] --> J[Identity Mapping Service]
J --> K[Organization Resolver]
K --> L[RBAC Authorization]
L --> M[Session Creation]
end
subgraph IdProviders ["Identity Providers"]
N[Microsoft Entra ID] --> O[SAML/SSO Provider]
O --> P[Devin Identity Store]
end
A --> E
D --> F
H --> J
N --> J
P --> L
M --> Q[Devin Session]
```
### Permissions Details
Below is a summary of the Microsoft Teams and Microsoft Graph permissions our integration requires—what each grants, why we need it, and where it's used.
> At a glance
>
> * Graph (Application, tenant-wide): discovery & installation orchestration.
> * Teams bot RSC (per Team/Chat): scoped access to messages/members/settings only where the bot is installed or present.
#### Tenant-wide Microsoft Graph (Application) Permissions
These require Admin Consent in Microsoft Entra ID. They are app-only (no user delegation).
| Permission | What it allows | Why we need it |
| --------------------------------------------------------- | -------------------------------------------- | ------------------------------------------------------------------ |
| `Organization.Read.All` | Read basic org profile | Validate the tenant where the app is being installed |
| `User.ReadBasic.All` | Read basic profiles for all users | Map member identities and resolve mentions in linked Teams |
| `AppCatalog.Read.All` | Read the Teams app catalog | Locate our app and fetch `teamsAppId` required for installation |
| `TeamsAppInstallation.ReadWriteAndConsentSelfForTeam.All` | Install/uninstall our own app; grant app RSC | Install/remove the bot in a selected Team from the Devin dashboard |
> Note: We do not use tenant-wide Graph to read message content. Message access is granted only via RSC and only where the bot is installed/present.
#### Teams Bot Resource-Specific Consent (RSC) Permissions
These are granted per Team/Chat at install time (do not apply tenant-wide).
| Permission | Scope | What it allows | Why we need it |
| --------------------------- | ------------ | --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `ChannelMessage.Read.Group` | Team/Channel | Read channel messages where the app is installed | Process channel conversations (summaries, triggers, syncing) |
| `ChannelMessage.Send.Group` | Team/Channel | Send messages in channels (new posts and threaded replies) where the app is installed | Respond to messages in channel threads and proactively post updates to channels |
| `Member.Read.Group` | Team/Channel | Read team membership | Map identities, permission checks, mention routing |
| `TeamSettings.Read.Group` | Team/Channel | Read Team settings | Respect Team-level policies and tailor behavior |
| `ChatMember.Read.Chat` | Chat | Read chat participants | Address/respond correctly and support audit trails |
| `ChatMessage.Read.Chat` | Chat | Read messages in chats where the bot participates | Process prompts, context, and follow-ups |
| `ChatMessage.Send.Chat` | Chat | Send messages in 1:1 and group chats (DMs) where the bot participates; not for channels | Respond to users in DMs and group chats, post notifications, and interactive replies in chat threads |
| `ChatSettings.Read.Chat` | Chat | Read chat settings (e.g., moderation) | Align behavior with chat policies (rate limits, who can post, etc.) |
> RSC guardrails: Access is limited to the specific Team/Chat where the app is installed or participates. Removing the app from a Team/Chat revokes that access.
#### Example: Certificate-Based Authentication for Teams Discovery
The diagram below illustrates our app-only, certificate-based authentication with Microsoft Graph. Using an X.509 client certificate, the service acquires an access token and then calls Graph to list Teams (GET /v1.0/teams). This example demonstrates how Devin securely performs tenant discovery without user context.
```mermaid theme={null}
sequenceDiagram
participant S as Cognition
participant M as MSAL client
participant K as Certificate private key
participant A as Entra ID token endpoint
participant G as Microsoft Graph
S->>M: Acquire token for Graph (.default scope)
M->>M: Check token cache (tenant, scope, client)
M->>K: Build client_assertion JWT (sign with cert)
K-->M: client_assertion (signed JWT)
M->>A: POST /oauth2/v2.0/token
A-->A: Validate signature & cert thumbprint Verify app roles to Graph
A-->M: 200 access_token (aud=graph)
M-->S: Return access_token (store in cache)
S->>G: GET /v1.0/teams with Authorization: Bearer access_token
G-->S: 200 list of teams (paged via @odata.nextLink)
```
> Credential note: We use an X.509 certificate (client assertion) rather than a client secret for service-to-service authentication. This applies to Microsoft Graph calls, bot communications with the Bot Framework adapter, and any app-only API calls from the integration.
#### Complete Message Processing Flow (Teams → Cognition)
The diagram below shows the complete end-to-end flow when a user sends a message to Devin in Microsoft Teams, including token validation and bot processing.
```mermaid theme={null}
sequenceDiagram
participant U as Teams client
participant T as Teams service
participant W as Bot webhook adapter
participant J as Jwt validator
participant O as OpenID metadata & keys
participant C as Credential provider
participant B as Bot logic
U->>T: @Devin user message
T->>W: HTTP POST activity + Authorization Bearer token
note over W: Extract Authorization header and token
W->>J: Validate token
J->>O: Fetch OpenID config and signing keys
O-->J: Return JWKS keys
J->>J: Verify RS256 signature and parse claims
J-->W: Validated claims
W->>C: Check appId against credentials
C-->W: AppId recognized
W->>W: Add serviceUrl to trusted list
W->>B: Create TurnContext and call bot handler
B->>B: Execute business logic
B-->W: Outgoing activity
W->>T: Send reply via connector service
T->>U: Deliver message to user
```
> Credential note: We use an X.509 certificate (client assertion) rather than a client secret for service-to-service authentication. This applies to Microsoft Graph calls, bot communications with the Bot Framework adapter, and any app-only API calls from the integration.
#### Consent & Installation Flow
1. **Admin Consent (tenant-wide)**
* An Entra ID admin grants the Graph Application permissions listed above.
2. **App Discovery**
* The integration queries the Teams app catalog to locate our app and retrieve `teamsAppId`.
3. **Targeted Installation**
* From our dashboard, we install the bot into a specific Team.
* During installation, the RSC scopes are granted only to that Team (or to the specific Chat when invoked in a chat).
4. **Operation**
* Discovery (org/teams/channels/app catalog) uses Graph Application permissions.
* Reading/sending messages and reading members/settings rely on RSC within installed surfaces.
#### Least-Privilege Notes
* Basic readers only: `User.ReadBasic.All` (no tenant-wide message reading).
* Message content is accessed exclusively via RSC and only where the bot is installed/present.
* No mailbox, files, or calendar permissions are requested.
#### Revocation & Uninstallation
* Revoke Admin Consent: A tenant admin can remove the app’s enterprise app permissions in Entra ID.
* Uninstall from Teams: Remove the app from a Team/Chat to revoke RSC for that resource.
* Data Handling: On uninstall, our integration stops processing events for that Team/Chat and cleans up related subscriptions/links.
# Integrations Overview
Source: https://docs.devin.ai/integrations/overview
Connect Devin to your existing tools and workflows
Devin integrates with the tools you already use, making it easy to incorporate AI-powered development into your existing workflows. From source control to project management to communication, Devin can work alongside your team in the platforms you rely on.
## How Integrations Work
You can connect Devin to your tools in several ways:
* **Native integrations** - Direct connections to platforms like GitHub, Slack, and Jira
* **Secrets Manager** - Store API keys and credentials securely for Devin to use
* **MCP (Model Context Protocol)** - Connect to hundreds of external tools and data sources
## Source Control
Connect Devin to your source control platform to enable repository access, pull request creation, and code contributions.
Connect your GitHub account to allow Devin to access, create pull requests and contribute to your existing repositories.
Connect GitLab to enable Devin to work with your GitLab repositories and merge requests.
Connect Bitbucket to allow Devin to access your Bitbucket repositories and create pull requests.
Connect Azure DevOps to enable Devin to work with your Azure repositories and pipelines.
## Communication
Connect Devin to your team communication platforms to start sessions and receive updates directly in your chat tools.
Connect Devin to your company Slack and kick off runs directly via Slack by tagging @Devin.
Connect Devin to Microsoft Teams and kick off runs directly via Teams by tagging @Devin.
## Project Management
Connect Devin to your project management tools to create sessions from tickets and track work automatically.
Connect Jira to allow Devin to create and update issues, track work, and integrate with your project management workflow.
Connect Linear to enable Devin to work with your Linear issues and projects.
## MCP Marketplace
The [Model Context Protocol (MCP)](/work-with-devin/mcp) allows you to connect Devin to hundreds of external tools and data sources. Browse the MCP Marketplace in Settings to enable integrations with:
* **Monitoring** - Sentry, Datadog, PagerDuty
* **Databases** - PostgreSQL, MySQL, MongoDB
* **Documentation** - Notion, Confluence
* **And many more**
Browse the MCP Marketplace to connect Devin to hundreds of external tools and data sources.
## Additional Configuration
Configure pull request templates for Devin's contributions.
Connect Devin to self-hosted source control and artifact repositories.
## API Integration
For automated workflows and programmatic access, you can use the Devin API to create sessions, retrieve results, and integrate Devin into your CI/CD pipelines.
Learn how to programmatically create sessions and retrieve structured results.
# GitHub Pull Request Templates
Source: https://docs.devin.ai/integrations/pr-templates
How Devin discovers and uses GitHub-style pull request templates, including the custom Devin template filename.
# Pull Request Templates
Devin can use GitHub-style pull request templates. It looks in your repository for the first matching template file and uses it when generating or regenerating a PR description. In addition to the standard GitHub filenames, Devin also supports a Devin‑specific variant so you can give Devin a different template than your human authors use.
## 1. Discovery Order
First match wins (top to bottom):
```text theme={null}
PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
docs/PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
.github/PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
PULL_REQUEST_TEMPLATE/devin_pr_template.md
docs/PULL_REQUEST_TEMPLATE/devin_pr_template.md
.github/PULL_REQUEST_TEMPLATE/devin_pr_template.md
PULL_REQUEST_TEMPLATE.md
pull_request_template.md
docs/PULL_REQUEST_TEMPLATE.md
docs/pull_request_template.md
.github/PULL_REQUEST_TEMPLATE.md
.github/pull_request_template.md
```
The entries with `DEVIN_PR_TEMPLATE.md` and `devin_pr_template.md` are optional Devin‑specific overrides (both uppercase and lowercase variants are supported). If none exist, the standard `PULL_REQUEST_TEMPLATE.md` and `pull_request_template.md` locations are used. If nothing matches, Devin falls back to its built‑in default structure.
## 2. Custom Devin Template (optional)
Add a Devin‑only template by creating one of:
```text theme={null}
.github/PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
.github/PULL_REQUEST_TEMPLATE/devin_pr_template.md
docs/PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
docs/PULL_REQUEST_TEMPLATE/devin_pr_template.md
PULL_REQUEST_TEMPLATE/DEVIN_PR_TEMPLATE.md
PULL_REQUEST_TEMPLATE/devin_pr_template.md
```
Use this if you want Devin to include extra structure (e.g. risk checklist hints) without changing what humans see in their usual `PULL_REQUEST_TEMPLATE.md` or `pull_request_template.md`. Both uppercase and lowercase variants are supported.
If you prefer a single shared template, just keep (or add):
```text theme={null}
.github/pull_request_template.md
```
Placeholders and HTML comments will be cleaned up naturally.
## 3. Built‑in Default (if no file found)
If no template file exists, Devin uses an internal default with sections for:
* Summary
* Review & Testing Checklist
* (Optional) Mermaid diagram
* Notes
You do not need to copy this unless you want to customize it; supplying any of the supported files above completely replaces the default.
## 4. GitHub Reference
Devin follows GitHub’s single‑file template resolution rules. For more about GitHub PR templates (including multi‑template workflows), see [here](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-pull-request-templates).
***
Minimal setup to give Devin its own template:
```bash theme={null}
mkdir -p .github/PULL_REQUEST_TEMPLATE
echo "# [title]\n\n## Summary\n...\n" > .github/PULL_REQUEST_TEMPLATE/devin_pr_template.md
```
That’s it—open or regenerate a PR and Devin will use it.
# Self-Hosted SCM & Artifacts
Source: https://docs.devin.ai/integrations/self-hosted-scm-artifacts
Connect Devin to your self-hosted source code management and artifact repositories
## Why connect Devin to self-hosted systems?
If your organization uses self-hosted source code management systems (like GitLab) or artifact repositories (like Artifactory), you can still take full advantage of Devin. By securely exposing these services to Devin's infrastructure, your team maintains control of your systems while enabling Devin to collaborate effectively with your development workflow.
## Overview
Your team can create a Network Load Balancer (NLB), whitelist Devin's static IPs, and publish a DNS record for it. This approach:
* **Limits access to a small, controlled surface area** - Only Devin's known IPs can connect
* **Takes less than a few hours** of engineering effort to set up
* **Maintains your existing infrastructure** - No need to migrate to cloud-hosted solutions
* **Provides centralized management** - Optional single load balancer for multiple services
## Prerequisites
Before setting up the integration, ensure you have:
* **Self-hosted GitLab** (or other SCM system) accessible within your network
* **Self-hosted artifact repository** (optional) such as Artifactory or Nexus
* **Network administration access** to configure firewalls, load balancers, and DNS
* **Devin's static IP addresses** - Found [here](/admin/common-issues#ip-whitelisting)
This integration is available for Enterprise plan customers. Contact [enterprise@cognition.ai](mailto:enterprise@cognition.ai) if you need assistance.
## Setup Options
You have two primary approaches for exposing your self-hosted services to Devin:
### Option 1: Direct IP Whitelisting (Recommended)
Maintain your existing self-hosted infrastructure and simply whitelist Devin's static IPs at the firewall level.
**For Source Code Management:**
1. Configure your firewall to allow inbound connections from Devin's IPs (listed [here](/admin/common-issues#ip-whitelisting))
2. Ensure your GitLab (or other SCM) instance is accessible via HTTPS
3. Provide the URL to Devin during integration setup
**For Artifact Repositories:**
1. Add Devin's IPs to your Artifactory/Nexus allowlist
2. Ensure the artifact repository is accessible via HTTPS
3. Configure appropriate credentials for Devin to access artifacts
If using a load balancer with your artifact repository, see the [Load Balancer Considerations](#load-balancer-considerations) section below for important details about IP allowlisting.
### Option 2: Centralized Load Balancer
Place multiple services behind a single Application Load Balancer (ALB) or Network Load Balancer (NLB) for centralized IP filtering.
**Benefits:**
* Single point of management for all network filtering
* Support multiple internal services with different domains
* Simplified security auditing and compliance
## Load Balancer Considerations
When choosing between Application Load Balancer (ALB) and Network Load Balancer (NLB), consider how each handles IP allowlisting:
**Application Load Balancer (ALB) - Recommended for most use cases:**
* ALB operates at Layer 7 (HTTP/HTTPS) and provides advanced routing capabilities
* Traffic goes through NAT, so your backend services see the ALB's internal IP addresses, not Devin's source IPs
* **For artifact repositories behind ALB:** You must configure IP allowlisting directly on Artifactory/Nexus since the load balancer's internal IP will be seen by the repository
* Use AWS WAF for IP filtering at the ALB level (see example below)
**Network Load Balancer (NLB) - Suitable for IP whitelisting scenarios:**
* NLB operates at Layer 4 (TCP) and preserves the original source IP addresses
* Your backend services see Devin's actual source IPs
* **For artifact repositories behind NLB:** IP allowlisting at the load balancer level is sufficient since source IPs are maintained
* Requires manual security group configuration for each IP address
While ALB is generally preferred for its flexibility and ease of management, NLB works well when you need IP allowlisting at the load balancer level without additional configuration on backend services.
## AWS Implementation Example
Here are example AWS configurations for both load balancer approaches:
### Application Load Balancer with WAF (Easier)
```bash theme={null}
# Create an IP set with Devin's static IPs
aws wafv2 create-ip-set \
--name devin-allowed-ips \
--scope REGIONAL \
--ip-address-version IPV4 \
--addresses 1.2.3.4/32 5.6.7.8/32 9.10.11.12/32 13.14.15.16/32
# Create a WAF web ACL
aws wafv2 create-web-acl \
--name devin-access-control \
--scope REGIONAL \
--default-action Block={} \
--rules file://waf-rules.json
# Associate the WAF with your ALB
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:region:account:regional/webacl/... \
--resource-arn arn:aws:elasticloadbalancing:region:account:loadbalancer/app/...
```
Replace the IP addresses with the actual IPs from our [IP whitelisting documentation](/admin/common-issues#ip-whitelisting).
### Network Load Balancer (Manual Security Groups)
```bash theme={null}
# Add ingress rules for each Devin IP to your security group
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp \
--port 443 \
--cidr 1.2.3.4/32
# Repeat for each IP address
aws ec2 authorize-security-group-ingress \
--group-id sg-xxxxxxxxx \
--protocol tcp \
--port 443 \
--cidr 5.6.7.8/32
# Continue for all Devin IPs...
```
### DNS Configuration
After setting up your load balancer, create a DNS record that Devin can use:
```bash theme={null}
# Example: Point gitlab.yourcompany.com to your load balancer
# The domain will resolve to the load balancer IP, which filters traffic
# to only allow connections from Devin's whitelisted IPs
# Using AWS Route 53:
aws route53 change-resource-record-sets \
--hosted-zone-id Z1234567890ABC \
--change-batch file://dns-change.json
```
Example `dns-change.json`:
```json theme={null}
{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "gitlab.yourcompany.com",
"Type": "A",
"AliasTarget": {
"HostedZoneId": "Z215JYRZR1TBD5",
"DNSName": "your-alb-name-123456.us-west-2.elb.amazonaws.com",
"EvaluateTargetHealth": false
}
}
}]
}
```
## Integration Steps
Once your network infrastructure is configured:
1. **Test connectivity** - Verify that your services are accessible from outside your network using the configured domain
2. **Contact Devin support** - Reach out to Cognition with:
* Your self-hosted GitLab URL (e.g., `https://gitlab.yourcompany.com`)
* Your artifact repository URL (if applicable)
* Any specific authentication requirements
3. **Complete integration setup** - Work with the Devin team to finalize the connection
4. **Configure repositories** - Add your repositories to [Devin's Machine](https://app.devin.ai/machine)
Test your IP filtering configuration before providing access to Devin by attempting to connect from an IP address that's not on the allowlist. The connection should be blocked.
## Best Practices
* **Use HTTPS** - Always expose services over HTTPS with valid SSL certificates
* **Create a dedicated service account** - Set up a specific account for Devin in your GitLab/SCM system
* **Monitor access logs** - Regularly review connection logs from Devin's IPs
* **Document your setup** - Keep internal documentation of your load balancer and DNS configuration
* **Test failover** - Ensure your setup can handle load balancer or service failures gracefully
* **Regular security audits** - Periodically review which services are exposed and verify IP allowlists
## Troubleshooting
**Devin cannot connect to my self-hosted system:**
* Verify that all [Devin IP addresses](/admin/common-issues#ip-whitelisting) are whitelisted
* Check that your SSL certificate is valid and trusted
* Ensure DNS records are properly configured and propagated
* Verify your firewall rules allow HTTPS (port 443) traffic
**Authentication failures:**
* Confirm the service account credentials are correct
* Verify the service account has appropriate permissions in your SCM/artifact system
* Check for any IP-based authentication restrictions beyond the allowlist
**Performance issues:**
* Monitor your load balancer metrics for bottlenecks
* Ensure your self-hosted services have adequate resources
* Consider geographic proximity between your infrastructure and Devin's systems
## Support
For assistance with self-hosted integrations:
1. Create a Slack Connect channel with our team at [app.devin.ai/settings/support](https://app.devin.ai/settings/support)
2. Email [enterprise@cognition.ai](mailto:enterprise@cognition.ai) with your specific setup details
3. Share relevant configuration files (with sensitive data redacted) when reporting issues
# Slack
Source: https://docs.devin.ai/integrations/slack
Chat and collaborate with Devin directly in your company Slack
Tag **@Devin** in Slack as soon as bugs, feature requests, and questions come in. Devin responds in-thread with updates and questions when it's tagged.
## Get started
### Installation
1. Go to [Settings > Connections > Slack](https://app.devin.ai/settings/connections/slack)
2. Click "Connect"
3. You’ll be prompted to install the Devin app for Slack in your workspace
4. Make sure to link your individual user. All users in your organization will need to complete this step to use Devin.
5. Tag @Devin in Slack to start a session
> Note: If your user account is not properly connecting, ensure that your Slack email is the same as your email in [https://app.devin.ai/settings](https://app.devin.ai/settings). If not, please authenticate the correct email on Slack.
### How to use Devin from Slack
Once you've installed the Devin integration for Slack, simply trigger Devin with @Devin in any channel. You may include attachments to your message.
Devin will respond in-thread to your session. Now, you can communicate back and forth as you would in the regular chat interface.
*Note that Devin may make mistakes. Please double-check responses.*
### Inline Slack Keywords & Functions
| Keyword | Function |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `!ask` | begin your message with !ask to get a quick codebase answer without starting a full agent |
| `!deep` | get a deeper research answer using advanced search |
| `mute`, `@Devin mute` | prevents Devin from seeing further Slack messages in thread |
| `unmute`, `@Devin unmute` | reverses the above |
| `(aside)`, `!aside` | causes Devin to ignore the message (useful for commenting on Devin's run directly in-thread) |
| `sleep` | puts Devin to sleep; to wake Devin up, send any message in the thread |
| `archive`, `@Devin archive` | puts Devin to sleep + archives the session |
| `EXIT` | ends the session |
| `!dana` | starts a [Data Analyst (Dana)](/work-with-devin/data-analyst) session for database queries, data analysis, and visualizations |
| `!fast` | begin your message with !fast to start the session in Fast Mode for quicker responses on simpler tasks |
| `!ultra` | begin your message with !ultra to start the session in Ultra Mode for the most complex tasks |
| `!lite` | begin your message with !lite to start the session in Lite Mode |
| `!fusion` | begin your message with !fusion to start the session in Fusion Mode |
| `!swe` | begin your message with !swe to start the session on SWE-1.7 |
| `!normal` | begin your message with !normal to switch an active session back to the default Devin mode |
| `!new` | begin your message with !new to force the session to start in a new thread |
| `![macro_name]` | Attach a playbook to a Session by referencing its Macro name |
Mode keywords (`!fast`, `!lite`, `!ultra`, `!fusion`, `!swe`, `!normal`) and `!new` are only recognized at the **beginning** of your message, right after the `@Devin` mention. They can be stacked (e.g. `@Devin !ultra !new fix the bug`). A keyword placed elsewhere in the message is ignored. Sending a mode keyword in an active Devin thread switches that session's mode mid-session.
### Turn on Slack Notifications
You can enable Slack notifications for specific runs and Devin will privately message you whenever there’s a status update. To do so, simply click "Enable Slack notifications" in the menu at the top of any run.
### Dedicated Devin channel
Set up a **#devin-runs** channel (or similar) to keep all Devin conversations in one place. This helps your team collaborate on Devin runs together and draw inspiration for different use cases from each other.
### How to Rename Devin
You may change Devin's name in your Slack workspace by going to your Slack Workspace Admin panel -> Configure apps -> Installed Apps -> Devin. Then click on App Details, and go to the Configuration tab of that page. If you scroll down you will find a section called 'Bot User' where you may change Devin's name.
### Pricing
If you don't yet have a Devin account, you can learn more about pricing and plans [here](https://devin.ai/pricing).
The AI assistant sidebar experience (app container) requires a paid Slack plan. All other Devin features — @mentions in channels and threads, `/ask-devin`, `/dana`, and message shortcuts — work on any Slack plan, including free workspaces.
### Privacy
Our privacy policy is available [here](https://cognition.com/privacy-policy).
### Permissions Details
| Permission | Description | Rationale |
| ---------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `chat:write, chat:write.customize` | Send messages as @Devin or using a customized username and avatar | Devin has to be able to respond to user requests |
| `commands` | Add shortcuts and/or slash commands that people can use | Devin might gain more interactive features in the future that will require different commands |
| `files:read, files:write` | Upload, edit, and delete files as Devin | Devin needs to manage files in order to send and receive attachments to/from the user |
| `channels:history, groups:history, im:history` | View messages and other content in channels, groups, and DMs that Devin is in | Devin has to access historical messages when it is launched inside of a message thread in order to retrieve the previous messages in the thread as context |
| `im:read`, `im:write` | Start direct messages with people and view basic information about direct messages that Devin has been added to | Devin needs to be able to initiate DMs in order to send users notifications via Slack |
| `reactions:write` | Add and edit emoji reactions | Devin adds emojis to messages in order to mark runs as completed or failed |
| `remote_files:read, remote_files:write` | View remote files added by the app in a workspace | Devin needs to manage remote files in order to send and receive attachments to/from the user |
| `users:read, users:read.email`, `users.profile:read` | View people in a workspace as well as their emails and profiles | Devin needs to be able to match Slack users with Devin users based on their email address |
# Tutorial Library
Source: https://docs.devin.ai/learn-about-devin/workflows
Videos on how to use Devin by the team
Devin is the biggest single contributor to the Cognition repositories. Whether it's delegating frontend tasks, fixing bugs, or building internal tools, Devin works in all the tools where we collaborate with the rest of the team. Here are some examples of good ways to work with Devin:
* Tag Devin on a [Slack](/integrations/slack) or [Teams](/integrations/microsoft-teams) thread about a bug you're discussing with coworkers
* Delegate a task like a refactor in your IDE to save you from context switching (something you would have normally just added to your backlog)
* Kick off multiple sessions with the long tail of your todo list at the beginning of the day and return to draft PRs waiting for review around lunch
* Tag Devin on feature requests or issues raised by customers in your shared Slack or Teams channels
### Devin 2.0 IDE Walkthrough
### Interactive Planning with Devin
### DeepWiki
### Using Ask Devin for rapid codebase understanding
### Repo Setup
### Devin tackles a bug in Slack with Walden
### Silas delegates a refactor to Devin in the IDE
### Sara sends a task to Devin instead of adding to the growing Linear backlog
# AGENTS.md
Source: https://docs.devin.ai/onboard-devin/agents-md
Add AGENTS.md files to provide context and instructions for Devin
Devin supports [AGENTS.md](https://agents.md/) - a simple, open standard for providing context and instructions to AI agents. Think of AGENTS.md as a README for agents.
## Creating an AGENTS.md File
Just put an `AGENTS.md` file in your project root (or anywhere else). Devin will look for the file before it starts coding.
Here's an example:
```markdown theme={null}
# AGENTS.md
## Setup Commands
- Install dependencies: `npm install`
- Start development server: `npm run dev`
- Run tests: `npm test`
- Build for production: `npm run build`
## Code Style
- Use TypeScript strict mode
- Prefer functional components in React
- Use ESLint and Prettier configurations
- Follow conventional commit format
## Testing Guidelines
- Write unit tests for all new functions
- Use Jest for testing framework
- Aim for >80% code coverage
- Run tests before committing
## Project Structure
- `/src` - Main application code
- `/tests` - Test files
- `/docs` - Documentation
- `/public` - Static assets
## Development Workflow
- Create feature branches from `main`
- Use pull requests for code review
- Squash commits before merging
- Update documentation for new features
```
We also highly recommend doing [repo setup](/onboard-devin/environment) to give Devin context on how to work with your repository.
# Environment configuration
Source: https://docs.devin.ai/onboard-devin/environment
Configure Devin's environment so every session starts with your repos cloned, tools installed, and dependencies ready.
**Devin can configure its own environment for you.** Just start a session and ask. [Learn more →](/onboard-devin/environment/blueprints#getting-started)
## What is Devin's environment?
Devin's environment is the workspace where Devin operates: a Linux-based virtual machine with your repositories cloned, tools installed, dependencies resolved, and configuration applied. It's the equivalent of a developer's laptop: the OS, the terminal, the installed toolchain, the cloned repos.
Your environment configuration is saved as a **snapshot**, a frozen, bootable image that every session starts from. Configure it once, and every session boots into that known-good state.
## Why environment configuration matters
Devin works the same way any developer does: it clones repos, installs dependencies, runs lint, compiles code, and executes tests. To do any of that, it needs a working environment. Without one, Devin can't build your project, can't run your tests, and can't verify its own work. It would be like hiring a developer and not giving them a laptop.
Environment configuration gives Devin the tools, runtimes, credentials, and project knowledge it needs to be productive from the first session. It also makes sessions faster: your snapshot already has repos cloned and dependencies installed, so Devin boots straight into productive work instead of setting up from scratch every time.
**This is the single highest-leverage thing you can do to improve Devin's effectiveness on your codebase.**
## How sessions work
Every session boots from a **snapshot**, a frozen, bootable image of the environment.
1. **Snapshot**: A pre-built image containing your repos, tools, and dependencies. Prepared in advance through configuration.
2. **Session**: Devin boots a fresh copy of the snapshot. Every session starts from the same clean state. Session changes don't persist back to the snapshot.
When your configuration changes, a new snapshot is built automatically. Each organization has exactly one active snapshot. Every session in that org boots from the same snapshot.
## Before you start
Before configuring Devin's environment, make sure Devin can access your repositories:
1. **Connect your SCM provider.** Go to **Settings > Connections** and connect GitHub, GitLab, Bitbucket, or Azure DevOps. Select which repositories Devin can access during setup. See the [integration guides](/integrations/overview) for detailed instructions.
That's it. Once connected, you can proceed to environment configuration.
1. **Connect your SCM provider (enterprise admin).** Go to **Enterprise Settings > Integrations** and connect your SCM provider. See [Git Integrations](/enterprise/integrations/git-integrations) for setup instructions.
2. **Grant each org access to its repos (enterprise admin).** Go to **Enterprise Settings > Repository Permissions** and assign repositories to each organization. Orgs cannot see or use repos until you explicitly grant access. See [Repository Permissions](/enterprise/integrations/git-integrations#repository-permissions).
3. **Configure the environment (org admin).** Once an org has repo access, proceed to environment configuration below.
If you skip these steps, repos won't appear when you try to add them to your environment. Devin needs repository access through your Git integration before it can clone and build.
## Choose your approach
There are two ways to configure Devin's environment:
**Recommended.** Define your environment configuration in YAML format (blueprint). Specify what to install, how to set up dependencies, and what Devin should know about your project. Builds run automatically to produce snapshots.
* Version controlled
* Auto-updating
* Composable across tiers
* Reproducible
Configure Devin's environment through an interactive wizard in the web UI. Step through guided screens (secrets, dependencies, lint, test, run) using an embedded terminal.
* Visual, step-by-step
* No YAML required
* [Migrate to declarative →](/onboard-devin/environment/migration)
## Related pages
Full field specification for blueprints: sections, GitHub Actions support, env vars, file attachments.
Copy-paste blueprints for Python, Node.js, Go, Java, Ruby, Rust, and advanced patterns.
Step-by-step guide to move from the interactive wizard to declarative blueprints.
Enterprise-wide environment management: 3-tier hierarchy, secrets, and cross-org configuration.
# Android emulator support
Source: https://docs.devin.ai/onboard-devin/environment/android-emulation
Build and run Android applications on a full emulator running on Devin's own machine
Devin can build and run Android applications directly on its own machine — giving it the Android equivalent of [Computer Use](/work-with-devin/computer-use) and browser interaction. Devin can open the app, inspect behavior, reproduce issues, and verify changes in the environment where the application actually runs. Combined with [video recordings](/work-with-devin/testing-and-recordings), Devin can send you a recording as proof.
## What You Can Do
With Android emulator support enabled, Devin can handle the full mobile development loop:
Devin builds and runs your app on the emulator, then clicks through critical flows after each PR. You get a video recording that proves the feature works — watch it and merge.
Test complete user flows — login, navigation, form submission, checkout — on a real Android stack, not a mock. Devin follows the flow step-by-step and flags anything that breaks.
Verify layouts, themes, and responsiveness across screen sizes and API levels. Devin takes screenshots at key points and flags visual issues like overlapping elements or clipped text.
Reproduce issues on the emulator, capture `logcat` output, inspect behavior, trace the root cause, and push a fix — all in one session.
Building with React Native, Flutter, or Kotlin Multiplatform? Devin can test the Android side alongside your web or desktop builds in the same session.
Run Espresso or UI Automator test suites on the emulator and get results reported back, without needing a separate CI device farm or physical devices.
Verify your app across different API levels or device profiles by configuring multiple AVDs. Useful for catching compatibility issues before they reach users.
## How It Works
Android emulator support is built on the same [declarative configuration](/onboard-devin/environment/blueprints) system as the rest of Devin's environment. You add the Android SDK and emulator to your blueprint, and Devin's snapshot builds a VM with everything pre-installed. Every session boots from that snapshot with the emulator ready to go.
During a session, Devin interacts with the emulator in two ways:
| Method | What it does | When to use it |
| -------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------ |
| **`adb`** (command line) | Install APKs, run tests, capture logs, take screenshots | Automated builds, instrumented tests, logcat debugging |
| **Computer Use** (desktop) | Tap, swipe, type, and navigate the emulator's screen visually | End-to-end UI testing, visual verification, video recordings |
The emulator window runs on Devin's desktop, so you can watch Devin interact with your app in real time via the **Desktop** tab in the webapp.
## Setting Up the Emulator
The easiest way to get started. Devin analyzes your Android project, installs the right SDK components, and configures the emulator for you.
Open a new session and ask Devin to set up Android emulation. For example: *"Set up an Android emulator for this repo."*
Devin proposes a blueprint with the Android SDK, build tools, and emulator configuration. Review the suggestion cards in your timeline and click **Approve**.
Once the build completes, start a new session. Ask Devin to build and run your app on the emulator to confirm everything works.
If you know exactly what SDK components and emulator configuration you need, you can write the blueprint yourself.
Go to **Settings > Environment > Blueprints** and select your Android repository.
Add the Android SDK, platform tools, emulator, and a system image to `initialize`. Add your dependency install to `maintenance`. See the [blueprint examples](#blueprint-examples) below for copy-paste templates.
Click **Save**. A build starts automatically (typically 5–15 minutes for Android due to SDK downloads). Monitor progress from **Settings > Environment > Snapshots**.
Once the build shows **Success**, start a new session. Ask Devin to launch the emulator and build your app to verify.
### What gets installed
A typical Android emulator support blueprint installs:
| Component | Purpose |
| ------------------------------- | ------------------------------------------- |
| Android SDK command-line tools | Core SDK management (`sdkmanager`) |
| Platform tools | `adb`, `fastboot` for device communication |
| Build tools | `aapt2`, `d8`, `zipalign` for building APKs |
| Android platform (e.g., API 34) | Target API level for your app |
| Emulator + system image | The virtual device itself |
Use an `x86_64` system image for best performance inside Devin's environment. ARM images work but are significantly slower under emulation.
## Using the Emulator
### On-demand testing
Ask Devin to build and run your app at any point during a session — no special syntax needed, just natural language:
* *"Build and run the app on the Android emulator"*
* *"Test the login flow on the emulator and send me a recording"*
* *"Open the settings screen on the emulator and verify the new toggle appears"*
* *"Run the Espresso tests on the emulator and show me the results"*
Devin will launch the emulator (if it isn't already running), build and run your app, and interact with it — using `adb` for programmatic actions and Computer Use for visual interactions.
### Integration with Testing & Recordings
Android emulator support plugs directly into Devin's [Testing & Recordings](/work-with-devin/testing-and-recordings) workflow. After creating a PR:
1. Devin offers to **Test the app** — click the button or ask directly
2. Devin builds and runs the app on the emulator and executes a focused test plan
3. The emulator screen is captured in a **video recording** with annotations
4. The recording is sent to you so you can watch the test and merge with confidence
This works the same way as web app testing — the only difference is that Devin interacts with the emulator window instead of Chrome.
Create a [Skill](/product-guides/skills) that tells Devin exactly how to build, launch, and test your Android app. This saves setup time on repeat sessions and ensures consistent testing. For example, include the Gradle build command, which activity to launch, and which flows to verify.
### Skill suggestions
After testing your Android app, Devin writes down what it learned — how to start the emulator, which Gradle tasks to run, how to navigate to the feature under test — and proposes creating or updating a [Skill](/product-guides/skills) via PR. You can merge the PR as-is or tweak it to refine the instructions.
Over time, this means Devin gets better at testing your Android project. Each session's learnings build on the last — so the second time Devin tests your app, it already knows how to build it, which activity to launch, and which flows matter most.
You can also prompt Devin to do this at any time (e.g., *"create a skill for how to build and test this Android app"*). See the [Skills guide](/product-guides/skills) for full details.
### Interacting via the desktop
The Android emulator runs as a window on Devin's Linux desktop. This means:
* **Devin can interact with it via Computer Use** — tapping buttons, swiping, typing text, navigating between screens
* **You can watch live** via the **Desktop** tab in the Devin webapp
* **Recordings capture the emulator screen** alongside anything else visible on Devin's desktop
For details on how desktop interaction works, see [Computer Use](/work-with-devin/computer-use).
### Using `adb`
Devin can also interact with the emulator programmatically via `adb`, which is useful for:
* **Installing APKs** — `adb install app-debug.apk`
* **Running instrumented tests** — `adb shell am instrument -w com.example.test/androidx.test.runner.AndroidJUnitRunner`
* **Capturing logs** — `adb logcat` to debug crashes or unexpected behavior
* **Taking screenshots** — `adb exec-out screencap -p > screenshot.png`
* **Simulating user input** — `adb shell input tap 500 800` for scripted interactions
Devin chooses between `adb` and Computer Use depending on the task — `adb` for speed and automation, Computer Use for visual verification and complex UI flows.
## Blueprint Examples
Copy-paste blueprints for common Android setups. Each template is self-contained — paste it into your blueprint editor and save.
```yaml theme={null}
initialize:
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
./gradlew assembleDebug
knowledge:
- name: build
contents: ./gradlew assembleDebug
- name: test
contents: ./gradlew test
- name: lint
contents: ./gradlew lint
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Install APK: adb install app/build/outputs/apk/debug/app-debug.apk
```
```yaml theme={null}
initialize:
- name: "Install Node.js"
run: |
nvm install 20
nvm use 20
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
npm install
cd android && ./gradlew assembleDebug
knowledge:
- name: build
contents: cd android && ./gradlew assembleDebug
- name: test
contents: npm test
- name: lint
contents: npm run lint
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Run on device: npx react-native run-android
```
```yaml theme={null}
initialize:
- name: "Install Flutter"
run: |
cd "$HOME"
git clone https://github.com/flutter/flutter.git -b stable --depth 1
echo 'export PATH=$HOME/flutter/bin:$PATH' >> ~/.bashrc
export PATH="$HOME/flutter/bin:$PATH"
flutter precache --android
yes | flutter doctor --android-licenses > /dev/null 2>&1
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
flutter pub get
knowledge:
- name: build
contents: flutter build apk --debug
- name: test
contents: flutter test
- name: lint
contents: flutter analyze
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Run on device: flutter run -d emulator-5554
```
```yaml theme={null}
initialize:
- name: "Install Android SDK"
run: |
export ANDROID_HOME="$HOME/android-sdk"
mkdir -p "$ANDROID_HOME/cmdline-tools"
cd "$ANDROID_HOME/cmdline-tools"
curl -fsSL https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o tools.zip
unzip -q tools.zip -d latest-tmp
mv latest-tmp/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
rm -rf tools.zip latest-tmp
echo "export ANDROID_HOME=$ANDROID_HOME" >> ~/.bashrc
echo 'export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH' >> ~/.bashrc
export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"
yes | sdkmanager --licenses > /dev/null 2>&1
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "emulator" "system-images;android-34;google_apis;x86_64"
echo "no" | avdmanager create avd -n devin -k "system-images;android-34;google_apis;x86_64" --device "pixel_6"
maintenance: |
./gradlew :androidApp:assembleDebug
knowledge:
- name: build
contents: ./gradlew :androidApp:assembleDebug
- name: test
contents: ./gradlew allTests
- name: lint
contents: ./gradlew detekt
- name: emulator
contents: |
Start the emulator: emulator -avd devin -no-window -no-audio -gpu swiftshader_indirect &
Wait for boot: adb wait-for-device && adb shell getprop sys.boot_completed
Install APK: adb install androidApp/build/outputs/apk/debug/androidApp-debug.apk
```
## Troubleshooting
### Emulator won't start
**Common causes:** KVM not available in the VM, insufficient memory, or a missing system image.
**Fix:** Devin can attempt to configure KVM automatically when it detects the emulator needs hardware acceleration — in most cases, this resolves the issue without manual intervention. If KVM still isn't available after Devin's attempt, the emulator can fall back to software rendering mode — add `-no-accel` to the emulator launch command, though performance will be reduced. Also check that your blueprint installs the emulator and a compatible `x86_64` system image.
### Build fails with SDK errors
**Common causes:** Missing SDK components, incorrect `ANDROID_HOME` path, or Gradle can't find the right build tools version.
**Fix:** Verify that `ANDROID_HOME` is set correctly in your blueprint and that `sdkmanager` installs the platform version and build tools version your project requires. Check your project's `build.gradle` for `compileSdk`, `targetSdk`, and `buildToolsVersion` and match them in the blueprint.
### Emulator is slow
The Android emulator runs inside Devin's VM, so performance depends on the system image and rendering mode.
**Tips:**
* Use `x86_64` system images (not ARM) for hardware-accelerated emulation
* Use `-gpu swiftshader_indirect` for software rendering that doesn't require GPU passthrough
* Use `-no-window -no-audio` when Devin doesn't need the visual display (e.g., running instrumented tests via `adb`)
* Consider a lower-resolution device profile if visual fidelity isn't critical
### Devin can't interact with the emulator screen
**Common causes:** Desktop mode is not enabled, the emulator window is not visible, or the emulator is running in headless mode.
**Fix:** Ensure [Desktop mode](/work-with-devin/computer-use#how-to-enable-it) is enabled in your organization's settings. If you need Devin to visually interact with the emulator, launch it *without* the `-no-window` flag so the emulator GUI appears on Devin's desktop. Check that the emulator has fully booted (`adb shell getprop sys.boot_completed` should return `1`) before asking Devin to interact with it.
# Declarative configuration
Source: https://docs.devin.ai/onboard-devin/environment/blueprints
Define your environment in YAML blueprints. Builds run automatically to produce snapshots that every session boots from.
## Getting started
**Prerequisites**: Devin must have access to your repositories before you can configure its environment. If you haven't set up your Git integration yet, see [Before you start](/onboard-devin/environment#before-you-start) for setup steps. Enterprise users also need to grant each org access to its repos in **Enterprise Settings > Repository Permissions**.
**Still on classic configuration?** You can migrate to declarative configuration at any time. Devin can handle most of the migration for you. See [Migrating to declarative configuration](/onboard-devin/environment/migration).
Best for most users. Devin analyzes your project, figures out what tools and dependencies are needed, and generates the blueprint for you. You just review and approve.
Open a new session and ask Devin to configure the repository. For example: *"Set up your environment for this repo."*
Devin proposes a blueprint. You'll see **suggestion cards** in your timeline. Review them and click **Approve**.
Once the build completes, start a new session. Devin boots from the new snapshot with everything pre-configured. Try asking Devin to run your lint or test commands to confirm everything works.
Best when you know exactly what your environment needs, or want full control over every step. Faster if you already have your commands ready.
Go to **Settings > Environment > Blueprints** in your organization's sidebar.
If you don't see this option, your organization may still be on classic setup. See [Migrating to declarative configuration](/onboard-devin/environment/migration) to get started.
Click **Add** in the Repositories section. Select the repositories you want Devin to work with, then confirm.
Repositories added here are cloned into Devin's environment during each build. You can add more at any time.
Click on a repository to open its blueprint editor. Here's a simple example:
```yaml theme={null}
initialize: |
curl -LsSf https://astral.sh/uv/install.sh | sh
maintenance: |
uv sync
knowledge:
- name: lint
contents: uv run ruff check .
- name: test
contents: uv run pytest
```
For more languages and patterns, see the [Template library](/onboard-devin/environment/templates).
Click **Save**. A build starts automatically (typically 2–10 minutes). Monitor progress from **Settings > Environment > Snapshots** under **Current build**.
Once the build shows **Success**, start a new Devin session. Devin boots from the new snapshot with everything pre-configured. Try asking Devin to run your lint or test commands to verify the environment works.
The rest of this guide covers the manual path in detail. It's also useful for understanding what Devin generated if you used the recommended path.
## How it works
Declarative configuration uses three concepts:
| Concept | What it is | Analogy |
| ------------- | ----------------------------------------------------------------------------------------- | -------------- |
| **Blueprint** | A YAML configuration that describes what to install and how to set up Devin's environment | Dockerfile |
| **Build** | The process that runs your blueprint, clones repos, and produces a snapshot | `docker build` |
| **Snapshot** | A frozen, bootable image of the environment that sessions start from | Docker image |
**Blueprints describe what you want.** You author them and edit them in the Settings UI.
**Builds run your blueprints to produce snapshots.** Builds run automatically when you save a blueprint and periodically (\~every 24 hours) to keep dependencies fresh.
**Snapshots are what sessions boot from.** Each organization has one active snapshot. Every session boots a fresh copy. Session changes don't persist back to the snapshot.
### Blueprint sections
A blueprint has three sections, plus an optional `clone` block for repo-level blueprints:
| Section | Purpose | When it runs |
| ------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------- |
| `initialize` | Install tools, runtimes, system packages | During builds only. Results are saved in the snapshot. |
| `maintenance` | Install/update project dependencies, write credential configs | During builds. Surfaced to the agent at session start (not auto-executed). |
| `knowledge` | Reference info for Devin (lint, test, build commands) | Not executed. Loaded into Devin's context at session start. |
| `clone` | Override git-clone defaults for the repository (repo-level only) | Applied during the build's clone step. |
**`initialize`** is for things that only need to happen once: language runtimes, system packages, global CLI tools.
**`maintenance`** is for dependency installation that should stay current. It runs during builds and is surfaced to the agent at session start so it can re-run them if dependencies have changed (e.g. after pulling latest code). Commands are not auto-executed at session start, but should still be fast and incremental (use `npm install`, not `npm ci`).
**`knowledge`** is reference information, not executed. This is how you tell Devin the correct commands for linting, testing, and building. Keep entries lightweight and focused on executable commands.
**`clone`** (repo-level only) overrides defaults Devin uses when cloning the repo into the snapshot — for example, checking out a non-default branch (`ref`), changing the clone destination (`path`), or skipping submodules or LFS objects. Every field is optional. See [Blueprint reference → clone](/onboard-devin/environment/blueprint-reference#clone) for the full field list.
**Knowledge here vs the Knowledge product feature:** The `knowledge` section in your blueprint is for short command references tied to the environment. For architecture docs, conventions, and team workflows, use the standalone [Knowledge](/product-guides/knowledge) feature instead.
**Multi-document YAML:** The blueprint editor supports multi-document YAML using the `---` separator. This lets you organize complex blueprints into logical sections within a single editor.
For the complete field specification (step types, environment variables, secrets, and file attachments), see the [Blueprint reference](/onboard-devin/environment/blueprint-reference).
### Blueprint scope
You can define blueprints at two levels:
| Level | Where to configure | What to put here |
| ---------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------- |
| **Organization** | Settings > Environment > Blueprints > Org-wide setup | Tools shared across all repos: language runtimes, package managers, Docker auth |
| **Repository** | Settings > Environment > Blueprints > \[repo name] | Project-specific setup: `npm install`, lint/test/build commands |
Blueprints are **additive**: repo blueprints build on top of the org blueprint. A repo's `maintenance` can use tools installed by the org's `initialize`. If only one repo needs a tool, put it in that repo's blueprint. If every repo needs it, put it in the org blueprint.
**Enterprise users:** There's a third tier, the enterprise blueprint, that applies across all organizations. See [Enterprise environment overview](/enterprise/environment-management/overview) for details.
## Builds and sessions
### The snapshot
Your organization has **one active snapshot**: a VM image with your tools, repos, and dependencies pre-installed. All configured repos are cloned and set up in that single image. Every session boots from a fresh copy.
### How builds work
A build creates a new snapshot by running your blueprints in sequence:
```
1. Enterprise blueprint, if configured (runs in ~):
a. initialize
b. maintenance
2. Org blueprint (runs in ~):
a. initialize
b. maintenance
3. Clone all repositories (up to 10 concurrent).
Each repo's blueprint may override clone defaults via the
`clone` block (branch/tag, depth, submodules, LFS, etc.).
4. For each configured repo, in the order shown in Settings
(runs in ~/repos/):
a. initialize
b. maintenance
5. Health check, then snapshot is saved
```
Layers are **additive**: repo-specific commands can use tools installed by the org or enterprise blueprint. Lower levels cannot override what a higher level set up. Builds typically take 5–15 minutes. Individual steps time out after 1 hour.
### How sessions work
Each session boots a **fresh copy** of the snapshot. When the session ends, all changes are discarded. At session start:
1. The latest code is pulled for the relevant repo(s).
2. `maintenance` commands (enterprise, org, and repo) are surfaced to the agent as context — **not auto-executed**. The agent may re-run them if it detects dependencies have changed since the last build.
3. That repo's `knowledge` entries are loaded into Devin's context.
**Knowledge is per-repo.** If you have 5 repos configured, Devin only sees the knowledge entries for the one it's working on.
### What triggers a build
| Trigger | Description |
| ------------------------------- | -------------------------------------------------- |
| Saving a blueprint | Creating, updating, or deleting a blueprint |
| Adding or removing a repository | Any change to the repository list |
| Adding a repository secret | New secrets require a rebuild to be available |
| Manual trigger | Clicking **Build snapshot** in the UI |
| Periodic refresh | Automatic, roughly every 24 hours |
| Devin suggestion | Devin proposes a blueprint change during a session |
Only one build runs at a time. New triggers cancel any queued build and start fresh.
### Build statuses
| Status | Meaning |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| **Success** | All steps completed. Snapshot is ready. |
| **Partial** | Some repo-level steps failed, but the snapshot is usable. Repos that succeeded work normally; repos that failed need their blueprints fixed. |
| **Failed** | Critical failure (org or enterprise setup failed). Snapshot is not usable. |
| **Cancelled** | Superseded by a newer build or manually cancelled. |
A **partial** build still produces a working snapshot. If one of five repos has a broken blueprint, the other four are fully functional.
**Build failing?** See [Troubleshooting builds](#troubleshooting-builds) for a step-by-step debugging guide.
## Managing your environment
### Repository states
Repositories appear in three states in the Environment settings:
| State | Meaning |
| -------------- | ------------------------------------------------------------------------------------ |
| **Configured** | Has a blueprint with initialize/maintenance/knowledge. Fully set up in the snapshot. |
| **Included** | Cloned into the snapshot but has no custom blueprint. Devin can access the code. |
| **Available** | Connected to the org but not added to the environment. Not cloned. |
**Included vs. configured:** An "included" repo is cloned so Devin can access the code, but has no custom setup commands. A "configured" repo has explicit initialize/maintenance/knowledge instructions.
### Secrets
Reference secrets with `$VARIABLE_NAME` syntax. Add them in the **Secrets** tab within the blueprint editor.
```yaml theme={null}
maintenance:
- name: Configure private registry
run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
```
Secrets are available as environment variables during builds and sessions. They are removed before the snapshot is saved, but if a command writes a secret value into a config file during `initialize`, that value persists in the snapshot. Place credential-writing steps in `maintenance` so they are refreshed during periodic builds.
For details on secret scopes and behavior, see the [Blueprint reference](/onboard-devin/environment/blueprint-reference#environment-variables-and-secrets).
### Multiple repositories
Each repo gets its own blueprint. During a build, all repos are set up in the same snapshot, cloned into separate directories with dependencies installed independently.
If two repos install different versions of a global tool or modify shared files (like `~/.bashrc`), the last one to run wins. Put shared tool installs in the org-wide blueprint to avoid conflicts.
### GitHub Actions
Instead of writing shell scripts to install tools and runtimes, you can reference GitHub Actions directly in your blueprint. Devin downloads and runs the action during the build, the same way GitHub's CI runners execute action steps.
```yaml theme={null}
initialize:
- name: Install Python 3.12
uses: github.com/actions/setup-python@v5
with:
python-version: "3.12"
```
This is especially useful for language setup actions like `setup-python`, `setup-node`, and `setup-go`, which handle version management and PATH configuration automatically.
For syntax details, examples, and limitations, see [GitHub Actions in blueprints](/onboard-devin/environment/github-actions).
### Monorepos
You can run commands in subdirectories using subshells, or create dedicated workspace-scoped blueprints for individual packages. Devin also supports per-package knowledge entries so each workspace gets its own lint, test, and build commands.
See [Workspaces and monorepos](/onboard-devin/environment/workspaces) for setup instructions and examples.
### Pinning and auto-updates
By default, Devin uses the latest successful build's snapshot. **Pinning** lets you lock to a specific build's snapshot. This is useful when a new build introduces a regression, or when you want to freeze the environment for a batch of sessions.
**To pin:** Go to **Settings > Environment > Snapshots**, find the build in history (must be `success` or `partial`, less than 7 days old), and click **Pin**. While pinned, periodic refreshes are skipped and the UI shows **Auto-updates paused**.
**To unpin:** Click **Resume auto-updates**. Devin switches to the latest successful build.
### Git-backed blueprints
You can store blueprints as `.devin/blueprint.yaml` files directly in your repository. After merging changes, call the sync API (or click Sync in the UI) to update the blueprint, then trigger a build. This gives you the same code-review workflow you use for application code, with sync automated via a CI step.
See [Git-backed blueprints](/onboard-devin/environment/git-backed-blueprints) for setup instructions and details.
## Troubleshooting builds
### Initialize step failed
**Common causes:** typo in a shell command, package not available, network timeout, incorrect GitHub Action reference.
**Fix:** Check build logs for the exact error. Update `initialize` in your blueprint and save. A new build triggers automatically.
### Repository clone failed
**Common causes:** Devin doesn't have access to the repo, repo was renamed/moved/deleted, transient network issue.
**Fix:** Verify repo access in your Git provider settings. Remove and re-add the repo if it was renamed.
### Maintenance step failed
**Common causes:** dependency conflict, missing system library, disk space exhaustion, lock file out of sync.
**Fix:** Check logs for the failing package/command. Update `maintenance` or `initialize` to install missing dependencies, or fix the lock file in your repository.
### Build timeout
Each step has a 1-hour timeout. Common causes: compiling large native dependencies from source (use pre-built binaries), downloading large artifacts, commands that hang waiting for input (all commands must be non-interactive).
### Iterating on fixes
1. Check build logs to identify the failure
2. Update the relevant blueprint
3. Save (a new build triggers automatically)
4. Monitor the new build's logs
5. Repeat until the build succeeds
You don't need to wait for a failed build to finish. Saving a new configuration cancels any queued build and starts fresh.
## Next steps
Speed up builds by only rebuilding workspaces whose blueprints changed.
Use GitHub Actions to install languages, tools, and SDKs without writing shell scripts.
Subshells, workspace scopes, and knowledge entries for multi-package repositories.
Complete field reference: step types, environment variables, secrets, file attachments.
Copy-paste blueprints for Python, Node.js, Go, Java, Ruby, Rust, and advanced patterns.
Store blueprints in your repo as `.devin/blueprint.yaml` and sync via the API or UI.
Step-by-step guide to move from the interactive wizard to declarative blueprints.
Enterprise-wide environment management: 3-tier hierarchy, secrets, and cross-org configuration.
# Git-backed blueprints
Source: https://docs.devin.ai/onboard-devin/environment/git-backed-blueprints
Store blueprints as .devin/blueprint.yaml in your repository and sync them via the API or UI.
## Overview
Git-backed blueprints let you store your environment configuration directly in your repository as a `.devin/blueprint.yaml` file. You sync the file to Devin via the API or the UI, and then trigger a snapshot build to apply the changes.
This gives you the same workflow you use for application code: edit in your IDE, open a pull request, get a review, merge, and then sync + build via a CI step or the UI.
| Approach | Where the blueprint lives | How you edit it | How changes apply |
| ---------------------- | ------------------------------------ | ---------------------------- | ----------------------------------------------------------------- |
| **Database (default)** | Devin's settings UI | Edit in the browser | Saved immediately on click |
| **Git-backed** | `.devin/blueprint.yaml` in your repo | Edit in your IDE, merge a PR | Call the sync API (or click Sync in the UI), then trigger a build |
Git-backed blueprints use the same YAML format as the UI editor. See the [Blueprint reference](/onboard-devin/environment/blueprint-reference) for the complete field specification.
## Getting started
### 1. Create the blueprint file
Add a `.devin/blueprint.yaml` file to the root of your repository:
```
my-repo/
.devin/
blueprint.yaml
src/
package.json
...
```
The file uses the same YAML format as the UI editor:
```yaml theme={null}
initialize:
- name: Install Node.js 22
uses: github.com/actions/setup-node@v4
with:
node-version: "22"
maintenance:
- name: Install dependencies
run: npm install
knowledge:
- name: lint
contents: npm run lint
- name: test
contents: npm test
```
### 2. Push to the default branch
Commit and push `.devin/blueprint.yaml` to your repository's default branch (typically `main` or `master`).
If the repository is already connected to Devin's environment, you need to trigger a sync (via the API or the UI Sync button) for Devin to pick up the file. If you're adding the repo for the first time, the initial discovery reads the blueprint from Git.
### 3. Verify in the UI
Go to **Settings > Environment > Blueprints** and click on the repository. The editor shows the blueprint contents from Git, and the source indicator displays the provider name (e.g., "GitHub") with the synced commit SHA.
## How sync works
Sync is the process of pulling `.devin/blueprint.yaml` from the repo's default branch HEAD and updating Devin's stored blueprint versions. Sync does **not** happen automatically on push — you trigger it explicitly:
1. **API sync** — Call the v3 sync endpoint (see [Sync via the API](#sync-via-the-api) below). This is the recommended approach for CI/CD pipelines.
2. **UI sync** — Click the **Sync** button in the blueprint editor. This also triggers a snapshot build if contents changed.
3. **On adding a repo to the environment** — If `.devin/blueprint.yaml` exists on the default branch, the blueprint is automatically sourced from Git during initial discovery.
Sync is idempotent: if the file contents haven't changed since the last sync, no new version is created.
### Sync vs. build
Sync and build are separate operations:
* **Sync** pulls the latest `.devin/blueprint.yaml` from Git and stores a new blueprint version.
* **Build** creates a new snapshot image from the current blueprint versions.
The UI sync button performs both steps in one action. The v3 API separates them so you have full control — call sync first, then trigger a build.
## Sync via the API
The recommended way to keep blueprints in sync is to call the v3 API after merging changes to `.devin/blueprint.yaml`. This is typically done from a CI/CD pipeline (e.g., a GitHub Actions post-merge step).
### End-to-end flow
```mermaid theme={null}
sequenceDiagram
participant Dev as Developer
participant Git as Git Provider
participant CI as CI/CD Pipeline
participant API as Devin API
Dev->>Git: Push/merge .devin/blueprint.yaml
Git->>CI: Trigger post-merge workflow
CI->>API: POST /v3/organizations/{org_id}/snapshot-setup/sync
API-->>CI: 200 OK (repo_name)
CI->>API: POST /v3/organizations/{org_id}/snapshot-setup/builds
API-->>CI: 201 Created (build_id, status)
CI->>API: GET /v3/organizations/{org_id}/snapshot-setup/builds/{build_id}
API-->>CI: 200 OK (status: succeeded)
```
### Step 1: Sync the blueprint
Pull the latest `.devin/blueprint.yaml` from the default branch:
```bash theme={null}
curl -X POST https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/sync \
-H "Authorization: Bearer $DEVIN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_name": "owner/repo"}'
```
Response:
```json theme={null}
{"repo_name": "owner/repo"}
```
The `repo_name` field accepts `owner/repo` for GitHub, or a full provider URL for other hosts (e.g., `https://gitlab.com/org/repo`).
### Step 2: Trigger a build
After sync, trigger a snapshot build to apply the new blueprint:
```bash theme={null}
curl -X POST https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/builds \
-H "Authorization: Bearer $DEVIN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
```
Response:
```json theme={null}
{
"build_id": "sbj-abc123",
"status": "running",
"trigger": "api",
"created_at": 1718000000,
"updated_at": 1718000000
}
```
### Step 3: Poll build status (optional)
If you want to wait for the build to complete in CI:
```bash theme={null}
curl https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/builds/{build_id} \
-H "Authorization: Bearer $DEVIN_API_TOKEN"
```
The `status` field transitions through: `running` → `succeeded` or `failed`.
### Enterprise-wide sync
For enterprises with multiple organizations sharing the same repository, there's an enterprise-level endpoint that syncs across all orgs with a connection to the repo:
```bash theme={null}
curl -X POST https://api.devin.ai/v3/enterprise/snapshot-setup/sync \
-H "Authorization: Bearer $DEVIN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"repo_name": "owner/repo"}'
```
Response includes the number of orgs synced:
```json theme={null}
{"repo_name": "owner/repo", "org_count": 3}
```
### Example: GitHub Actions workflow
Automate sync + build on every push to the default branch that touches the blueprint file:
```yaml theme={null}
# .github/workflows/sync-blueprint.yml
name: Sync Devin Blueprint
on:
push:
branches: [main]
paths:
- '.devin/blueprint.yaml'
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Sync blueprint
run: |
curl -sf -X POST \
"https://api.devin.ai/v3/organizations/${{ secrets.DEVIN_ORG_ID }}/snapshot-setup/sync" \
-H "Authorization: Bearer ${{ secrets.DEVIN_API_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"repo_name": "${{ github.repository }}"}'
- name: Trigger build
run: |
curl -sf -X POST \
"https://api.devin.ai/v3/organizations/${{ secrets.DEVIN_ORG_ID }}/snapshot-setup/builds" \
-H "Authorization: Bearer ${{ secrets.DEVIN_API_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{}'
```
You need a [service user](/api-reference/overview) or personal access token with environment write permissions. Store the token as `DEVIN_API_TOKEN` and your org ID as `DEVIN_ORG_ID` in your repository secrets.
## Editing git-backed blueprints
When a blueprint is git-backed, the UI editor becomes read-only for direct saves. Instead, you have two options for making changes:
### Create a PR from the editor
1. Open the blueprint editor in **Settings > Environment > Blueprints**
2. Edit the YAML in the editor
3. Click **Create PR**
4. Devin opens a pull request on your repository that updates `.devin/blueprint.yaml`
5. Review, approve, and merge the PR
6. The next sync picks up the change and triggers a build
This is useful for quick edits without leaving the Devin UI.
### Edit directly in your repository
1. Edit `.devin/blueprint.yaml` in your IDE or on your Git provider
2. Commit and push to the default branch (or open a PR and merge it)
3. Trigger a sync via the API or click Sync in the UI
This is the standard workflow for teams that manage infrastructure as code. Pair it with a CI step to automate the sync (see [Sync via the API](#sync-via-the-api)).
### Devin suggestions
When Devin proposes a blueprint change during a session (e.g., after analyzing your project), the suggestion is applied by opening a PR against `.devin/blueprint.yaml` rather than saving directly to the database. You review and merge the PR just like any other code change.
## Monorepos and workspaces
For monorepos with multiple packages, you can use the `includes` directive to define separate blueprints for each workspace. Each workspace gets its own `.devin/blueprint.yaml` file in its subdirectory.
### Root blueprint with includes
The root `.devin/blueprint.yaml` declares which workspaces have their own blueprints:
```yaml theme={null}
# my-repo/.devin/blueprint.yaml
includes:
- packages/frontend
- packages/backend
initialize: |
npm install -g pnpm
maintenance: |
pnpm install
```
### Workspace blueprints
Each included workspace has its own `.devin/blueprint.yaml`:
```yaml theme={null}
# my-repo/packages/frontend/.devin/blueprint.yaml
maintenance: |
pnpm build
knowledge:
- name: lint
contents: pnpm lint
- name: test
contents: pnpm test
```
```yaml theme={null}
# my-repo/packages/backend/.devin/blueprint.yaml
maintenance: |
pip install -r requirements.txt
knowledge:
- name: lint
contents: ruff check .
- name: test
contents: pytest
```
### Include rules
* Each `includes` entry is a subdirectory path (e.g., `packages/frontend`). Devin looks for `.devin/blueprint.yaml` inside that directory.
* You can also use the full path: `packages/frontend/.devin/blueprint.yaml`.
* Only the root blueprint may contain `includes`. Nested includes (an included blueprint that itself declares `includes`) are not allowed.
* Each workspace path may only appear once in `includes`.
* If an included file is missing from the repository, that workspace is treated as removed and its blueprint is cleaned up.
## Switching between Git and database modes
### Switch to Git
If you have an existing database-managed blueprint and want to switch to Git:
1. Create `.devin/blueprint.yaml` in your repository with the desired contents
2. Push to the default branch
3. In the blueprint editor, click the source dropdown and select your Git provider (e.g., "GitHub")
4. Devin syncs the file from Git and switches to git-backed mode
### Switch to database
If you want to stop using git-backed mode and manage the blueprint in the UI:
1. In the blueprint editor, click the source dropdown and select **Database**
2. The current contents are preserved, but future pushes to `.devin/blueprint.yaml` no longer update the blueprint
3. You can now edit and save directly in the UI
Switching the root blueprint to database mode switches all workspace blueprints for that repo to database mode as well, since sync operates at the repo level.
### Detached workspaces
You can detach individual workspace blueprints from Git while keeping the root in git-backed mode. A detached workspace is editable in the UI and skipped during sync. This is useful when one workspace needs a temporary override without affecting the rest of the repo.
To re-attach a detached workspace, switch its source back to Git from the source dropdown.
## Version history
Every sync creates a new version in the blueprint's history, tagged with:
* **Source**: `git_sync` for versions created by sync, `manual` for versions created in the UI
* **Commit SHA**: the default-branch commit the sync ran against (links to the commit on your Git provider)
You can view the full version history and diffs in the **Version history** tab of the blueprint editor.
## Multi-document YAML
Like the UI editor, `.devin/blueprint.yaml` supports multi-document YAML using the `---` separator. This lets you define platform-specific configurations in a single file:
```yaml theme={null}
# Linux configuration (default)
initialize: |
curl -LsSf https://astral.sh/uv/install.sh | sh
maintenance: |
uv sync
---
runs-on: windows
initialize: |
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
maintenance: |
uv sync
```
See [Windows support](/onboard-devin/environment/windows-support) for details on multi-platform blueprints.
## Troubleshooting
### Blueprint not syncing
* **Is the file at the right path?** It must be `.devin/blueprint.yaml` at the repository root (or `/.devin/blueprint.yaml` for included workspaces).
* **Did you trigger a sync?** Sync does not happen automatically on push. Call the sync API endpoint or click the **Sync** button in the UI.
* **Is the repository in Devin's environment?** The repo must be added in **Settings > Environment > Blueprints** for sync to run.
* **Is git-backed mode enabled?** The blueprint must be in git-backed mode (not database mode) for sync to update it.
### Invalid YAML errors
If `.devin/blueprint.yaml` contains invalid YAML or doesn't conform to the blueprint schema, the sync fails with an error. Fix the file on the default branch and sync again. The blueprint editor in the UI validates the schema and shows errors before you create a PR, which helps catch issues before they reach the default branch.
### Blueprint shows "Database" after pushing
If you pushed a `.devin/blueprint.yaml` but the editor still shows "Database" as the source, the blueprint may not have been switched to git-backed mode yet. Use the source dropdown to switch to your Git provider, which triggers the initial sync.
# Windows support
Source: https://docs.devin.ai/onboard-devin/environment/windows-support
Run Devin on Windows with blueprints and sessions.
Devin supports Windows as a build and session platform. Windows environments use the same bash shell (Git Bash) as Linux, so most blueprint commands work across both platforms without modification.
Windows support is currently available on a limited basis. If you're interested in trying out Windows with Devin, please [contact us](https://cognition.com/contact) to learn more and get access.
## How it works
Windows support is built on the same [declarative configuration](/onboard-devin/environment/blueprints) system as Linux. The key difference is the `runs-on` field in your blueprint, which tells Devin which platform to build and run on.
Since both platforms use bash, you can write the same shell commands on Linux and Windows. The main differences are the file system layout and available package managers:
| Aspect | Linux (default) | Windows |
| --------------- | --------------------- | ------------------------------------------ |
| Home directory | `/home/ubuntu` | `/c/Users/Administrator` |
| Repo directory | `~/repos/` | `/c/Users/Administrator/repos/` |
| Package manager | `apt-get` | `choco` or direct installers |
## Writing Windows blueprints
### Single-platform blueprint
If your repository only targets Windows, use `runs-on: windows` at the top level:
```yaml theme={null}
runs-on: windows
initialize:
- name: "Install Node.js"
uses: github.com/actions/setup-node@v4
with:
node-version: "20"
- name: "Install build tools"
run: |
choco install visualstudio2022buildtools -y
choco install python --version=3.12 -y
maintenance: |
npm install
knowledge:
- name: lint
contents: npm run lint
- name: test
contents: npm test
- name: build
contents: npm run build
```
### Multi-platform blueprint
To build the same repository for both Linux and Windows, write each platform as a separate YAML document separated by `---`. Each document declares its own `runs-on` label. See the [Multi-document YAML](/onboard-devin/environment/blueprints#blueprint-sections) callout in the blueprint guide for background on this format.
```yaml theme={null}
runs-on: default
initialize: |
curl -LsSf https://astral.sh/uv/install.sh | sh
apt-get update && apt-get install -y build-essential
maintenance: |
uv sync
knowledge:
- name: test
contents: uv run pytest
---
runs-on: windows
initialize: |
choco install python --version=3.12 -y
maintenance: |
uv sync
knowledge:
- name: test
contents: uv run pytest
```
Each document produces a separate snapshot build for its platform. Sessions boot from the platform-specific snapshot.
The top-level YAML must be a mapping, not a sequence. Writing the example above as a single list (`- runs-on: default` / `- runs-on: windows`) is rejected by the backend with `Invalid YAML: each YAML document must be a mapping, not a sequence; use '---' to separate multiple blocks`. Use the `---` separator shown above.
## The `runs-on` field
The `runs-on` field maps to a registered machine config on your account:
| Value | Platform |
| -------------------- | ------------------------ |
| `default` or `linux` | Linux (default platform) |
| `windows` | Windows |
You can specify `runs-on` as a string or a list:
```yaml theme={null}
# Single platform
runs-on: windows
# Multiple platforms in one block (same commands run on each)
runs-on: [default, windows]
```
When a block lists multiple platforms, the build system creates one snapshot per platform using the same commands.
The list syntax runs identical commands on every platform in the list. Only use it when commands are truly cross-platform (e.g., `npm install`, `uv sync`). For platform-specific commands (like `apt-get` on Linux or `choco` on Windows), use the [multi-document format](#multi-platform-blueprint) instead — one document per platform, separated by `---`.
## Usage and cost
Windows sessions consume approximately **9% more** usage (ACUs or quota) compared to equivalent Linux sessions. For details on how usage is metered, see [Usage](/admin/billing/usage#windows-sessions).
## Windows session behavior
### Shell
Windows sessions use **Git Bash** as the default shell — the same bash shell used on Linux. Standard bash syntax works on both platforms:
```yaml theme={null}
- run: |
export MY_VAR="hello"
echo $MY_VAR
```
### Paths
Windows uses Git Bash path format (`/c/...` instead of `C:\...`):
```yaml theme={null}
# Linux paths
- run: cp config.json ~/.config/myapp/config.json
# Windows paths (Git Bash format)
- run: cp config.json /c/Users/Administrator/.config/myapp/config.json
```
### Secrets
Secrets are available as environment variables during sessions using standard bash syntax (`$SECRET_NAME`):
```yaml theme={null}
maintenance:
- name: "Configure registry"
run: |
npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
```
### File attachments
On Windows, uploaded files are written to `/c/Users/Administrator/.files/` instead of `/home/ubuntu/.files/`.
### Computer Use
[Computer Use](/work-with-devin/computer-use) is fully supported on Windows sessions. Devin gets a Windows desktop environment with Chrome, mouse, and keyboard access, so it can test web apps as well as Windows-native desktop applications (e.g. WPF and WinForms apps) and record its testing sessions.
## Blueprint tips for Windows
### Installing tools
Use `choco` (Chocolatey) or direct download scripts:
```yaml theme={null}
initialize:
- name: "Install Chocolatey packages"
run: |
choco install git -y
choco install nodejs-lts -y
choco install python --version=3.12 -y
choco install dotnet-sdk -y
```
### Common patterns
**.NET project:**
```yaml theme={null}
runs-on: windows
initialize:
- name: "Install .NET SDK"
run: |
choco install dotnet-sdk -y
maintenance: |
dotnet restore
knowledge:
- name: build
contents: dotnet build
- name: test
contents: dotnet test
- name: lint
contents: dotnet format --verify-no-changes
```
**Visual Studio / C++ project:**
```yaml theme={null}
runs-on: windows
initialize:
- name: "Install Visual Studio Build Tools"
run: |
choco install visualstudio2022buildtools -y
choco install visualstudio2022-workload-vctools -y
maintenance: |
msbuild /t:Restore MySolution.sln
knowledge:
- name: build
contents: msbuild MySolution.sln /p:Configuration=Release
- name: test
contents: vstest.console.exe bin/Release/Tests.dll
```
# Index a Repository
Source: https://docs.devin.ai/onboard-devin/index-repo
Enable Ask Devin and DeepWiki by indexing your repositories
Indexing your repositories allows Devin to understand your codebase and enables powerful features like [Ask Devin](/work-with-devin/ask-devin) and [DeepWiki](/work-with-devin/deepwiki). This quick guide walks you through the indexing process.
Repository indexing is separate from [environment configuration](/onboard-devin/environment). Indexing enables code search and understanding features, while environment configuration sets up Devin's development environment.
## Index Your Repository
1. Go to [app.devin.ai](https://app.devin.ai) and ensure you're logged into your organization
2. Click on **Settings** in the sidebar to access your organization settings
3. Select the **Repositories** tab to view all connected repositories
4. Click **Index repo** on the repository you want to index
5. Select the branch(es) you want Devin to analyze
6. Wait for indexing to complete — this may take a few minutes depending on repository size
To index additional branches later, click **Manage** on any indexed repository, select a new branch, and click **Add branch**.
Once complete, you'll have access to:
* **[Ask Devin](/work-with-devin/ask-devin)** - Ask questions about your codebase and get detailed, accurate answers powered by advanced code search. You can also use Ask Devin to scope and plan tasks.
* **[DeepWiki](/work-with-devin/deepwiki)** - Explore auto-generated documentation for your repositories
For best results, index the branches your team actively develops on. This ensures Ask Devin and DeepWiki have the most up-to-date understanding of your code.
# Knowledge Onboarding
Source: https://docs.devin.ai/onboard-devin/knowledge-onboarding
Knowledge is a collection of instructions and advice that Devin can reference in all sessions. Think of it as onboarding a new employee with the relevant organizational context.
## Knowledge 101
Knowledge is the best way to share codebase-level (vs. task-level) context that can help Devin when working in your codebase. A few examples of what information to put in Devin's Knowledge include code conformance practices, deployment workflows, PR naming conventions, testing workflows, how to interact with proprietary tools and more.
A few FYIs about Knowledge:
* Devin will automatically generate repo knowledge based on the existing READMEs, file structure and contents of the connected repositories. Note that if you don't give Devin access to the repo, it won't generate any associated Knowledge.
* Knowledge is retrieved based on the Trigger you set. The more specific the trigger (e.g. which file, repo or type of task the Knowledge applies to), the better the retrieval. You can find more details [here](/product-guides/knowledge#how-do-i-create-knowledge%3F).
* Devin will tell you in a session what Knowledge it used; you can see this under "Accessed Knowledge" in the session chat.
* Devin will automatically pull and update Knowledge based on specialized files in your codebase including `.rules`, `.mdc`, `.cursorrules`, `.windsurf`, `CLAUDE.md`, and `AGENTS.md`. Note that Devin won't automatically pull in more general file types like `.md`.
## Knowledge Onboarding Best Practices
It's helpful to spend a little time upfront investing in getting Devin up to speed. Much like a new hire, sharing relevant context on the codebase and workflows the engineering team follows will go a long way in making Devin more effective. Here are some recommended steps to take when you first set up Devin's Knowledge:
1. Review any auto-generated Knowledge and verify for (a) completeness and (b) accuracy.
2. If you want Devin to retrieve the Knowledge note anytime it's working on a session, make sure to pin it to all repositories. Otherwise, you can pin it to a specific repo if the information is only relevant in that context. If Knowledge isn't pinned, it will only be used when triggered so make sure your Trigger Description is clear.
3. If you don't have a centralized specialized documentation file in your codebase, we definitely recommend setting one up with a specialized file extension.
Visit the [Knowledge product guide](/product-guides/knowledge) for more details.
# Classic configuration
Source: https://docs.devin.ai/onboard-devin/repo-setup
Configure Devin's environment through the classic interactive wizard.
Looking for declarative configuration? See [Declarative configuration (blueprints)](/onboard-devin/environment/blueprints) for the recommended approach for new setups.
Devin operates by loading a snapshot of a virtual machine at the start of each session. For Devin to be most effective, this snapshot should include all the repositories you want Devin to work on, as well as any tools or dependencies Devin might need to work on your codebase. This way, Devin can focus on writing code instead of having to set up its environment every time!
In this guide, we'll go over how to onboard Devin onto one of your repositories and configure Devin's environment (the virtual machine snapshot). You can think of this as setting up Devin's laptop on the first day of work.
Setting up Devin's environment correctly will significantly improve Devin's
performance on your codebase. Imagine if every time you started a task, your
laptop and part of your memory were wiped--that's what happens to Devin with
an incorrect or incomplete setup!
## Add a repository
First, make sure Devin has access to your repositories. Repositories can be added at any point by configuring Devin's access in:
* **Teams**: [Settings > Connections](https://app.devin.ai/settings/connections)
* **Enterprise**: [Enterprise Settings > Integrations](https://app.devin.ai/settings/connected-accounts)
Now, within an Organization, go to [Devin's Machine](https://app.devin.ai/machine) and click **Add repository**. Select the repositories you want to add to Devin's environment, then click **Start** to begin configuring them.
Devin's machine is running Ubuntu 22.04 (x86\_64). Try pressing Ctrl+K in the terminal to automatically generate an installation command.
## Set Up the Repository and Development Environment
Once in Repo Setup, you will see three panels:
1. **Repository Setup Steps**: Displays all 8 setup steps in order, along with the resulting commands that will be saved to your configuration.
2. **Devin AI Setup Agent**: Devin can suggest what to do for each step based on your specific repository and iterate on the setup until it's ready to be saved.
3. **VSCode Terminal**: Gives you the ability to run any commands or browse the file system directly in the embedded VSCode environment.
### AI-Generated Suggestions
When you add a repository, Devin automatically generates setup suggestions for each step based on analysis of your codebase. You can accept or reject each suggestion individually, or iterate on them with the Devin AI Setup Agent.
### Repository Setup Steps
The command Devin runs at the start of each session to pull the latest changes from the repository. In most cases, you should keep the default command. Make sure that Devin has access to any submodules in the repository.
Set up any secrets or environment variables Devin needs to work with your repository. See [Configuring Secrets](#configuring-secrets) for more details.
Commands to install the initial dependencies for your repository. This runs once during setup to prepare Devin's environment.
Commands Devin runs after git pull during session startup in case new dependencies were added. This should typically be the same command you use to install dependencies (e.g. `npm install`, `pip install -r requirements.txt`, etc.).
Commands Devin should use to run lint or check for syntax errors. Devin will look at the output of these commands before committing changes.
Commands Devin should use to run tests. Like with the lint commands, Devin will look at the output of these commands before committing changes.
Let Devin know how to run your code locally. This is useful if Devin needs to run your code to test or debug changes. You can use Devin's browser to log in to websites you want Devin to use. Add login credentials to [secrets](/product-guides/secrets) if the login times out.
Add any additional instructions for Devin when working on this repository.
### Finish or Save Setup
Once you are satisfied with the setup, click **Finish Setup** to save the setup. This will then replay all the commands in the setup steps to prepare Devin's environment.
If you are not finished with your changes, click **Finish Later** to save the setup. This will keep the setup in progress and allow you to come back to it later. However, note that **only one setup can be in progress at a time**, so we do not suggest using this option unless absolutely necessary.
**Tips for setting up commands:**
* Run commands in the VS Code terminal first to induce caching before verifying.
* If a command needs to run in a specific directory, use `cd` like so: `cd && `.
* If your project doesn't have a lint command, you can include your build command so Devin checks for compilation errors.
* If the lint or test procedure for your project is complex, you can skip those steps and explain them to Devin in the Additional Notes step.
* Check out the [troubleshooting section](#troubleshooting) if you encounter issues with verifying your commands.
## Configure Previously Added Repositories
You can always edit or add a new repo in [Settings > Devin's Machine](https://app.devin.ai/machine).
To edit an existing repo, click **Configure** on the top right of the page, Add/Modify/Remove repo, select the repo you want to edit, and click submit
Alternatively, you can select the existing repo you want to edit from the list and click **Modify repo setup** to edit the setup steps.
### Machine Version History
If during setup you accidentally introduce a breaking change, you can revert to a previous environment snapshot. Go to [Settings > Devin's Machine](https://app.devin.ai/machine), switch to the **Version History** tab, and restore a previous snapshot that you know worked correctly.
## Configuring Secrets
Secrets such as API keys, passwords, and tokens can be added in the [secrets](/product-guides/secrets) dashboard. When possible, we recommend using a `.env` file in Devin's environment with [`direnv`](https://direnv.net/) to manage environment variables automatically. See the [configuring environment variables example](#configuring-environment-variables) below for details.
## Examples
Below are some examples of how to set up Devin's environment for different use cases.
Since Devin runs all commands using bash, one common pattern is to edit the `~/.bashrc` file to automatically set up Devin's shell. You can run `devin ~/.bashrc` in the terminal to edit the file in VS Code.
### Configuring Environments Automatically for Different Repositories
After Apr 24 2025, teams who sign up for Devin should see the `custom_cd`
section already in their `~/.bashrc`. You will then just need to update the
section for your own repos.
Say you have two repositories that require different versions of Node, and you want Devin to automatically use the right version for each repository. We'll use [`nvm`](https://github.com/nvm-sh/nvm) to install and manage the Node versions. `nvm` should already be installed in Devin's machine.
First, we'll install the two versions of Node by running the following commands in the VS Code terminal:
```bash theme={null}
nvm install 18
nvm install 20
```
Next, open up `~/.bashrc` by running `devin ~/.bashrc` in the terminal. Append the following to `~/.bashrc`.
```bash theme={null}
function custom_cd() {
builtin cd "$@"
if [[ "$PWD" == "$HOME/repos/node18"* ]]; then
nvm use 18 >/dev/null 2>&1
elif [[ "$PWD" == "$HOME/repos/node20"* ]]; then
nvm use 20 >/dev/null 2>&1
fi
}
alias cd='custom_cd'
cd $PWD
```
This will run `nvm use 18` whenever Devin is in the `node18` repo and `nvm use 20` whenever Devin is in the `node20` repo.
### Configuring Environment Variables
[`direnv`](https://direnv.net/) is pre-installed on Devin's machine and can be used to manage environment variables per repository. The direnv hook is already configured in `~/.bashrc`.
To set up environment variables for a repository, create a `.envrc` file in the root of the repository. For example:
```bash theme={null}
export ENV_VAR=1
export ANOTHER_ENV_VAR=2
```
Finally, we'll run `direnv allow` in the terminal to load the environment variables.
Devin will now have the environment variables in our `.envrc` file added to its environment when working in our repository in future sessions.
We recommend adding `.envrc` to your `.gitignore` file so that Devin doesn't
accidentally commit it to the repository.
### Adding Directories to the System PATH
We can edit `~/.bashrc` to add directories to the system PATH. This will make it easier for Devin to run the executables in those directories. For example, we can append the following to `~/.bashrc` which will add the `~/bin` directory to the system PATH.
```bash theme={null}
export PATH="$HOME/bin:$PATH"
```
Now, Devin will be able to run the executables in the `~/bin` directory without having to specify the full path.
## Logging In to Websites
During environment setup, you can use the Browser tab to log in to any website that you want Devin to interact with. These session cookies will be stored in Devin's environment and will be available to Devin in future sessions. If you are using a website that times out your login frequently, you will also want to set Devin up with credentials in your [Secrets](/product-guides/secrets) dashboard.
### Scripted Browser Use via Playwright
For apps that require browser-based authentication (SSO, OAuth, etc.) or systematic data entry, Devin can write and run Playwright scripts to automate these flows against its own running browser. You can also write these scripts yourself and check them into your repo. Devin's Chrome browser exposes a **Chrome DevTools Protocol (CDP)** endpoint at `http://localhost:29229` that Playwright can connect to.
```python theme={null}
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp("http://localhost:29229")
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
# Automate your login flow here
page.goto("https://your-app.com/login")
page.fill('input[name="email"]', "user@example.com")
page.fill('input[name="password"]', "password")
page.click('button[type="submit"]')
page.wait_for_url("**/dashboard")
```
After the script runs, the authenticated session (cookies, localStorage, auth tokens) persists in Devin's browser. Devin can then refresh pages, navigate, and interact with the app normally — the login carries over.
Store login scripts in your repo's `.agents/skills/` directory and reference credentials via [Secrets](/product-guides/secrets) so that Devin can re-authenticate automatically in every session. See [Computer Use — Scripted Browser Use](/work-with-devin/computer-use#scripted-browser-use-via-playwright) for more details.
## Troubleshooting
### Why aren't my commands being verified?
If you run into an error when verifying one of the commands, try to inspect its output and also try to run the command yourself in a fresh terminal.
1. Check the path of the executable you are running. We strongly recommend either using absolute paths or [adding executables to the system PATH](#adding-directories-to-the-system-path).
2. Make sure you've installed the necessary tools and dependencies to run the command. If you haven't, use the Setup Agent or VSCode Terminal to install them, then verify again.
3. Check that the commands are being run in the right directory. If the commands need to run in a specific directory, you can use `cd` like so: `cd && `.
4. Check that you are using the **right language versions** (e.g. right versions of Node, Python, etc.).
5. You might want to **modify your `~/.bashrc`** to automatically use the right environment.
Check out our guide for an example of [how to use the right language version for different repositories](#configuring-environments-automatically-for-different-repositories).
### My commands work when I run them manually
Check that you've setup your bashrc so that a fresh bash shell has access to the necessary tools. Try running your commands in a fresh terminal. If they don't work, you will likely need to edit your bashrc, for example by running certain setup commands or editing the system PATH.
Check out our guide for an example of [how to use the right language version for different repositories](#configuring-environments-automatically-for-different-repositories).
Commands will timeout after 5 minutes. You can induce caching by running the commands in the VS Code terminal before verifying. We do not recommend giving Devin commands that take longer than 5 minutes to run, as it will significantly slow it down.
### Devin can't run my lint/test commands in sessions
Take a look at the output of Devin's terminal to see if you can spot any errors. You can also try running the commands yourself in a fresh terminal to see if they work. If needed, you can revisit the repository setup process to make changes to Devin's environment.
### The git pull step isn't working
Double check that Devin has access to the repository and submodules of the repository. Also check out the [GitHub Integration Documentation](/integrations/gh) if you run into any permission issues.
## All Done!
Congrats! You've onboarded Devin and can start building together. It's time to start [your first session](/get-started/first-run). Keep in mind that Devin works best when you:
* Tell Devin how to check its progress
* Break down big tasks
* Share detailed requirements upfront
* Run multiple sessions in parallel
If you need support please don't hesitate to drop us an email at [support@cognition.ai](mailto:support@cognition.ai).
# VPN Configuration
Source: https://docs.devin.ai/onboard-devin/vpn
Configure VPN access for Devin to connect to your internal network
Devin operates in its own VM workspace and sometimes needs to access resources within your internal network (e.g., internal package registry, staging services, self-hosted services). Like your developers, Devin can use a client VPN to connect to your internal network.
## Prerequisites Checklist
Before setting up VPN access, verify the following:
1. **Public Access Verification**
* Confirm these services are **not** accessible via the public internet.
* For cloud-hosted services (e.g., Gitlab Cloud Package Registry, JFrog Artifactory Cloud), an access token is typically sufficient.
2. **Authentication Method:**
Using a service account to authenticate is recommended. Credentials can be securely stored via Devin's [Secrets](/product-guides/secrets) functionality.
## Setting up OpenVPN
OpenVPN comes pre-installed in Devin's workspace. To configure:
1. Upload your `config.ovpn` configuration file to Devin's workspace by dragging and dropping it into the VSCode instance
2. Set up OpenVPN as a system service by creating the file `/etc/systemd/system/openvpn.service`:
```
[Unit]
Description=OpenVPN Client Service
After=network.target
[Service]
ExecStart=/usr/sbin/openvpn --config /path/to/config.ovpn
Restart=always
[Install]
WantedBy=multi-user.target
```
Then reload systemd, enable and start the service.
```bash theme={null}
sudo systemctl daemon-reload
sudo systemctl enable openvpn
sudo systemctl start openvpn
```
This ensures the VPN connection is managed by the system and automatically restarts if it fails.
## Alternative VPN Clients
If your organization uses a different VPN solution:
### Publicly Available VPN Clients
For clients like Fortinet that can be installed via a package manager:
1. Install the client during setup using the appropriate package manager commands:
```bash theme={null}
sudo apt install forticlient
```
2. Configure the startup command to establish connection
### Private VPN Clients
For clients like Palo Alto GlobalProtect that require a binary installation:
1. Upload the client binary and certificate to Devin's workspace by dragging and dropping it into the VSCode instance
2. Install using:
```bash theme={null}
sudo dpkg -i /path/to/GlobalProtect_deb.deb
```
3. Configure the startup command:
```bash theme={null}
globalprotect import-certificate --location /path/to/cert
```
# Auto-triage
Source: https://docs.devin.ai/product-guides/auto-triage
A persistent Devin that monitors your Slack channel and automatically triages incoming bugs
Auto-triage is a special type of [automation](/product-guides/automations) where a persistent Devin monitors a Slack channel and automatically investigates bugs, regressions, and incidents as they come in. Instead of manually assigning someone to look at every report, Devin watches the channel 24/7, decides what needs attention, and spawns focused sub-sessions to diagnose each issue.
Auto-triage has **long-term memory** — it accumulates context over time and learns from you via its [scratchpad](#the-scratchpad). It **intelligently deduplicates** repeated reports and **automatically routes** issues to the right code owner.
## How it works
A long-running parent Devin monitors your Slack channel and listens to every new message. It filters out noise, detects duplicates, and spawns focused child sub-devins to investigate actionable bugs. Each child reads the relevant code, traces the root cause, posts a diagnosis in the Slack thread, and tags the right code owner.
## Setting up auto-triage
1. Invite Devin to the Slack channel you want monitored (e.g. `#bugs`, `#incidents`)
2. Go to **Automations** and create a new automation using the **Triage bug reports on Slack** template
3. Select the channel and save
That's it — Devin will start watching the channel and triaging incoming messages.
Your personal Slack account must be connected in **Settings > Connections > Slack**.
## Customizing behavior
### Setup prompt
The setup prompt lets you customize how the triage Devin behaves. This is injected into the agent's instructions and influences how it handles incoming messages. Examples:
* "Focus on regressions in the payments service. For frontend bugs, tag the UI team."
* "Only investigate issues that include error logs or stack traces. Ask for more details if the report is vague."
* "When you find a root cause, always include a link to the relevant source file."
### MCP integrations
Connecting MCP integrations is highly recommended — they dramatically improve triage quality by giving Devin access to runtime data like logs, metrics, and error details.
Connect [MCP integrations](/work-with-devin/mcp) to give the triage Devin access to external tools. For example:
* **Datadog MCP** — Pull metrics, logs, and traces to correlate issues with runtime behavior
* **Sentry MCP** — Look up error details, stack traces, and affected users
* **Linear MCP** — Check for related tickets or create new ones
Enable MCP servers in **Settings > Connections > MCP servers** before setting up the automation.
## The scratchpad
The parent monitor and all child sub-devins share a persistent scratchpad. This is used to:
* Track recently triaged items (channel ID, message timestamp, reporter)
* Maintain a routing table mapping code areas to owners
* Record duplicate items so future reports can be linked to existing threads
* Store context that persists across session restarts
The scratchpad is the automation's long-term memory. The parent is primarily responsible for maintaining it, but children can read it for context and update it when they discover new information (e.g. someone says "that's not my area").
## Security
Since incoming Slack messages can contain untrusted user input (e.g. from support tickets), consider enabling a [network policy](/product-guides/automations#network-policy) to restrict outbound access for your auto-triage automation.
## Limits
Like all automations, auto-triage supports [ACU limits and invocation limits](/product-guides/automations#limits-and-safeguards) to control resource usage. Each child sub-devin spawned by the parent counts as a session against your ACU budget.
## Tips for effective auto-triage
* **Start with a focused channel.** Pick a channel dedicated to bug reports rather than a general engineering channel. Less noise means better signal.
* **Set clear expectations in the setup prompt.** Tell Devin what kinds of issues to prioritize and what to ignore.
* **Connect relevant MCP integrations.** Datadog, Sentry, and other observability tools dramatically improve triage quality by giving Devin access to runtime data.
* **Correct routing mistakes.** When Devin tags the wrong person, reply in the thread with a correction. The parent updates its routing table and gets it right next time.
# Automations
Source: https://docs.devin.ai/product-guides/automations
Set up event-driven workflows that trigger Devin sessions automatically
Automations let you wire external events — Slack messages, GitHub webhooks, Linear ticket updates, schedules, and custom webhooks — to Devin sessions that start automatically. Instead of manually tagging Devin every time a bug is reported or a CI check fails, you define the trigger once and Devin handles each event as it arrives.
## Core concepts
An automation has three parts:
| Part | What it does |
| -------------- | --------------------------------------------------------------------------------------------------------------------- |
| **Trigger** | The event that fires the automation (e.g. a Slack message in `#bugs`, a GitHub CI failure, a Linear label change) |
| **Conditions** | Optional filters that narrow the trigger (e.g. only fire when the label is `bug`, only for a specific repo) |
| **Action** | What Devin does when the trigger fires — start a new session, message an existing session, or act as a triage monitor |
### Action types
| Action | Description |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Start session** | Creates a new Devin session with the prompt you define. The event payload is automatically included as context. |
| **Message session** | Sends a message to an existing, long-running Devin session — useful for feeding events into a session that maintains state. |
| **Triage Devin** | A persistent Devin that monitors a Slack channel. It watches every incoming message, decides what needs attention, and spawns child sub-devins for items that require investigation. See [Auto-triage](/product-guides/auto-triage) for details. |
| **Email notification** | Sends you an email when the automation runs — on every run, only on failures, or only on successes. |
### Trigger sources
| Source | Event types | Example use case |
| ------------ | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Slack** | New message, reaction added | Triage bug reports in `#incidents`, react with 🚨 to start an investigation |
| **GitHub** | Issue comment, PR opened/updated, PR review, check run (CI), push | Auto-fix CI failures, respond to `/devin` comments on issues |
| **Linear** | Issue created, label added, status changed, priority changed, assigned | Triage bugs when labeled, implement tickets when assigned to Devin |
| **Schedule** | Recurring (cron-based) or one-time (run once) | Daily Sentry error sweeps, weekly dependency updates, nightly smoke tests, or a one-off task that runs at a specific future time |
| **Webhook** | Incoming HTTP request | Wire any external system (PagerDuty, Datadog, Sentry, custom tools) to Devin via a webhook URL |
A single automation can have **multiple triggers** — they act as an OR, so the automation fires when any of its triggers match. For example, you can have one automation that fires on both a GitHub CI failure and a Slack reaction.
## Creating an automation
### From the automations page
1. Navigate to **Automations** in the sidebar
2. Click **Create automation** (or use the chat input to describe what you want in natural language — Devin will generate the automation config for you)
3. Configure the trigger, conditions, and action
4. Click **Save**
### From a template
1. Navigate to **Automations** in the sidebar
2. Click **View all examples** in the top-right of the **Featured automations** box
3. Browse the template gallery — each template is a pre-configured automation for a common workflow
4. Click a template to pre-fill the editor with its trigger, action, and suggested limits
5. Customize the configuration (e.g. select your Slack channel or repo) and save
### Using natural language
On the automations page, you can describe what you want in the chat input at the bottom — for example, "When a CI check fails on my-org/my-repo, have Devin fix it and push to the same branch." Devin will generate the automation configuration for you, which you can review and save.
## Configuring triggers
### Slack triggers
Slack triggers fire when a message is posted or a reaction is added in a channel where Devin has been invited.
* **Slack message**: Fires on new messages in a specific channel. You must select the channel when configuring the trigger.
* **Slack reaction**: Fires when a specific emoji reaction is added to a message (e.g. 🚨 for incidents). You can filter by the reaction name and the channel.
Devin must be invited to the Slack channel for the trigger to work. You must also have your personal Slack account connected in **Settings > Connections > Slack**.
### GitHub triggers
GitHub triggers fire on repository events. You must select a specific repository for each trigger.
* **Issue comment**: Fires when a comment is posted on a GitHub issue. Commonly used with a `starts_with "/devin"` condition so users can type `/devin` on any issue to trigger Devin.
* **Pull request**: Fires on PR events (opened, synchronized, etc.).
* **Pull request review**: Fires when a review is submitted on a PR.
* **Pull request review comment**: Fires on individual review comments.
* **Check run (CI)**: Fires when a CI check completes. Filter by `conclusion = failure` to auto-fix broken builds.
* **Push**: Fires on pushes to a branch.
GitHub automations only work with private repositories for security reasons.
### Linear triggers
Linear triggers fire on issue events in your connected Linear workspace. You must select a team for each trigger.
* **Issue created**: Fires when a new issue is created in the selected team.
* **Label added**: Fires when a label is applied to an issue (e.g. `bug`, `devin`).
* **Status changed**: Fires when an issue's status changes (e.g. moved to "In Progress").
* **Priority changed**: Fires when an issue's priority changes.
* **Assigned**: Fires when an issue is assigned to someone.
### Schedule triggers
Schedule triggers fire on a time-based schedule — either recurring or as a single one-time run. In the trigger dropdown, expand **Schedule** and choose **Every hour**, **Every day**, **Every week**, **Run once**, or **Custom schedule**.
* **Recurring**: Set the frequency (hourly, daily, weekly) and time. Under the hood, schedules use the iCalendar RRULE format. Choose **Custom schedule** to build a custom recurrence (repeat every N minutes/hours/days/weeks/months) or enter a raw RRULE string directly (e.g. `FREQ=WEEKLY;BYDAY=MO;BYHOUR=9;BYMINUTE=0`) for more complex cadences.
* **Run once**: Fires a single time at a specific future date and time, then automatically disables itself. Useful for one-off delayed work — e.g. "wake Devin up in 12 hours to run a task." Pick the date and time (defaults to one hour from now); it must be in the future.
Times are displayed in your local timezone but stored as UTC internally.
### Webhook triggers
Webhook triggers let you connect any external system to Devin via a unique HTTPS endpoint.
1. Create an automation with a **Webhook** trigger
2. After saving, copy the webhook URL and secret from the automation detail page
3. Configure your external system (PagerDuty, Datadog, Sentry, or any custom tool) to send HTTP POST requests to this URL
4. Optionally add a **payload filter** — a regex pattern that the request body must match for the automation to fire
The webhook payload is included in the Devin session prompt as context. Payloads larger than 200 KB are automatically truncated.
## Configuring actions
### Start session
The most common action. When the trigger fires, Devin starts a new session with your prompt. The event payload (e.g. the Slack message text, GitHub webhook body, or Linear ticket details) is automatically appended to the prompt so Devin has full context.
Options:
* **Prompt**: The instructions Devin follows. Write this like you would a normal Devin prompt.
* **Playbook** (optional): Use `@playbook-name` in your prompt to include a [playbook](/product-guides/using-playbooks) for additional instructions.
* **Tags** (optional): Add tags to sessions created by this automation for easy filtering.
### Message session
Sends a message to an existing, long-running Devin session. Useful when you want a single persistent session to process events over time instead of spawning a new session for each event.
You must select the target session when configuring this action.
### Triage Devin (monitor)
Creates a persistent Devin session that monitors a Slack channel. See the [Auto-triage guide](/product-guides/auto-triage) for full details on this action type.
### Email notification
Sends an email notification when the automation runs. Choose when to notify:
* **Always** — on every invocation
* **On failure** — only when the session fails or errors
* **On success** — only when the session completes successfully
## Limits and safeguards
Automations include built-in controls to prevent runaway usage:
### ACU limit
Set a maximum ACU (Agent Compute Unit) budget per session started by this automation. If Devin hits the limit, the session stops. This prevents any single invocation from consuming excessive resources.
### Invocation limit
Set a cap on how many times the automation can fire within a time window. For example, "at most 10 invocations per hour" prevents a noisy Slack channel or a flurry of CI failures from spawning dozens of sessions.
Both fields are optional — if unset, the automation runs without limits.
### Network policy
You can enable a network policy to restrict which external hosts the automation's sessions can access. This is especially important for automations that process untrusted user input (e.g. Slack messages, webhook payloads). You can add specific domains to the allowlist if Devin needs to reach external services.
## MCP integrations
Connecting MCP integrations is highly recommended — they dramatically improve automation quality by giving Devin access to runtime data like logs, metrics, and error details.
Automations work with [MCP integrations](/work-with-devin/mcp) to give Devin access to external tools. When creating an automation, the **Connections** section shows which MCP servers are recommended and their connection status.
For example, the "Daily Sentry Error Fixes" template recommends the Sentry MCP so Devin can query Sentry for unresolved errors. The "Datadog Alert Investigation" template recommends the Datadog MCP for pulling metrics and traces.
Enable MCP servers in **Settings > Connections > MCP servers** before creating automations that need them.
## Slack tool access
By default, automation sessions can read and write to the Slack channels involved in the trigger. You can grant access to additional Slack channels in the **Slack tools** section of the automation editor. This is useful when Devin needs to read from multiple channels beyond the one that triggered the automation.
## Activity and monitoring
Each automation tracks its invocation history. On the automation detail page, the **Activity** tab shows:
* Recent invocations with timestamps
* Whether each invocation succeeded or was skipped
* Links to the Devin sessions that were created
* Error messages for failed invocations
The automations list page shows a sparkline for each automation, giving you a visual overview of activity over the past 30 days.
## Enabling and disabling
Toggle an automation on or off at any time from the automations list or detail page. Disabled automations stop processing events but retain their configuration. Re-enabling an automation resumes event processing immediately.
## Templates
Devin includes a library of pre-built automation templates for common workflows:
| Template | Category | What it does |
| ----------------------------------- | ------------------ | ---------------------------------------------------------------------------------- |
| Triage Bug Reports on Slack | Monitoring | Monitors a Slack channel and auto-triages incoming bug reports |
| Daily Sentry Error Fixes | Monitoring | Pulls top unresolved Sentry errors daily and opens fix PRs |
| Datadog Alert Investigation | Monitoring | Investigates Datadog alerts posted to Slack and replies with a root-cause analysis |
| Daily Health Digest | Monitoring | Scans Datadog daily and posts a health summary to Slack |
| Stripe Failed Payment Investigation | Monitoring | Investigates failed payment alerts in Slack via the Stripe MCP |
| Weekly Analytics Health Check | Monitoring | Checks Metabase dashboards weekly for broken queries and anomalies |
| CI Failure Fixer | CI/CD | Auto-fixes failing CI checks on PRs |
| /devin Issue Fix | CI/CD | Responds to `/devin` comments on GitHub issues with a fix PR |
| CircleCI Failure Fix | CI/CD | Pulls CircleCI build logs on failure and pushes a fix |
| Customer Support Triage | Triage | Drafts responses to support messages in Slack |
| Jira Ticket to PR | Triage | Implements Jira tickets posted in Slack and opens a PR |
| Jam Bug Report Investigation | Triage | Investigates Jam recordings shared in Slack |
| Nightly QA & Smoke Tests | Maintenance | Runs E2E tests nightly and files tickets for regressions |
| Weekly Dependency Updates | Maintenance | Scans for outdated packages and opens update PRs |
| Weekly Changelog | Maintenance | Compiles merged PRs into a categorized changelog |
| Stale PR Cleanup | Maintenance | Flags PRs with no recent activity and checks for merge conflicts |
| Security Vulnerability Scan | Maintenance | Weekly CVE scan with fix PRs for critical vulnerabilities |
| Cloudflare Security Audit | Maintenance | Weekly review of Cloudflare audit logs for suspicious activity |
| Weekly Status Digest to Notion | Project Management | Compiles weekly progress into a Notion status update |
| Asana Sprint Progress Report | Project Management | Posts a daily standup summary from Asana to Slack |
| Figma Design Review on PR | Code Quality | Compares UI changes against Figma designs on PRs |
| SonarQube Quality Gate Fix | Code Quality | Fixes SonarQube quality gate violations on failing CI checks |
| Dependency Vulnerability Scanner | Security | Daily CVE scan with severity-prioritized fix PRs |
| Secret Scanner | Security | Daily scan for leaked credentials and hardcoded secrets, with fix PRs |
| Code Pattern Enforcer | Security | Compares your repo against a golden reference repo and opens alignment PRs |
| SRE Health Checker | Security | Weekly scan for deprecated APIs, missing error handling, and reliability gaps |
| OWASP Security Hardening | Security | Weekly scan for OWASP Top 10 vulnerabilities with fix PRs |
To browse all templates, open the **Automations** page in the Devin app and click **View all examples** next to "Featured automations" above the chat input (or go directly to `/automations/templates`).
# Autofix Settings - Bot Comments
Source: https://docs.devin.ai/product-guides/bot-comment-settings
Control which bots Devin responds to on pull requests
## Overview
When Devin is tracking a pull request, it monitors incoming comments and responds to them automatically. By default, Devin ignores comments from bot users (such as `github-actions[bot]`, `dependabot[bot]`, or code review bots) to prevent infinite feedback loops. The **Autofix settings - bot comments** feature lets you control this behavior so Devin can automatically respond to comments from bots you trust.
This is an organization-level setting that applies to all Devin sessions within your org.
## Where to find it
Navigate to [**Settings** > **Customization**](https://app.devin.ai/customization) > **Pull request settings** > **Autofix settings - bot comments**.
Only organization admins can modify this setting.
## Available modes
### Don't respond to bot comments (default)
Devin ignores all comments from bot users on PRs. This is the safest option and prevents any risk of infinite loops between Devin and other automated tools.
### Respond to all bot comments
Devin treats bot comments exactly like human comments and processes all of them.
This mode may cause infinite loops with automated code review bots. For example, if a code review bot comments on Devin's PR, Devin responds with a code change, and the bot comments again, the cycle can repeat indefinitely. Use this mode only if you are confident your bots will not create feedback loops.
### Respond to specific bots only
You provide an allowlist of bot usernames that Devin should respond to. Devin processes comments from those bots and ignores all others. This is the recommended option for most teams because it gives you precise control.
To add a bot to the allowlist:
1. Select **Respond to specific bots only** from the dropdown.
2. Enter the bot's GitHub username in the input field (e.g., `github-actions[bot]`).
3. Click **Add**.
Bot usernames typically end in `[bot]`. You can find a bot's username by looking at who authored the comment on your pull request.
To remove a bot, click the **×** button next to its name in the allowlist.
Bot username matching is case-insensitive, so `GitHub-Actions[bot]` and `github-actions[bot]` are treated the same.
## How it works at runtime
When a bot leaves a comment on a PR that Devin is tracking, Devin checks your organization's bot comment settings:
1. **Mode is "none"** — the comment is ignored.
2. **Mode is "allowlist"** — the bot's username is checked against your allowlist. If it matches, Devin processes the comment. Otherwise, it is ignored.
3. **Mode is "all"** — the comment is processed.
If the comment passes the bot filter, it still goes through Devin's other comment processing checks (such as the [mention-only setting](#interaction-with-mention-only-mode) and the comment monitoring checkbox on the PR).
Lint failure comments from bots (containing "lint check failed") are always processed regardless of this setting, so Devin can always respond to CI failures.
## Common use cases
* **CI bots**: Allow your CI bot so Devin can automatically fix lint errors, test failures, or build issues flagged by your pipeline.
* **Security scanners**: Allow your security scanning bot so Devin can address vulnerability reports directly.
* **Code quality tools**: Allow bots like SonarQube or Codacy so Devin can respond to code quality feedback.
## Interaction with Devin Review
[Devin Review](/work-with-devin/devin-review) posts comments on PRs as `devin-ai-integration[bot]`. Because this is a bot account, its comments are subject to your bot comment settings. Under the default mode ("Don't respond to bot comments"), Devin sessions will **not** automatically act on findings from Devin Review.
If you want Devin to automatically address issues flagged by Devin Review, either:
* Set the mode to **"Respond to specific bots only"** and add `devin-ai-integration[bot]` to the allowlist.
* Set the mode to **"Respond to all bot comments"**.
Devin Review's "No Issues Found" summary comments are always ignored regardless of this setting — only comments that report actual findings are affected.
## Interaction with mention-only mode
If you have the **"Only respond to PR comments that mention Devin"** setting enabled, bot comments must also mention Devin (starting with `DevinAI` or `@devin`) to be processed. The bot comment filter runs first, and then the mention-only filter is applied.
## Tips
* Start with **"Respond to specific bots only"** and add bots one at a time. This lets you verify that each bot interacts well with Devin before adding more.
* If you notice unexpected loops, switch back to **"Don't respond to bot comments"** to stop them immediately.
* Bot users are identified by their GitHub user type (`Bot`), not by their username. Human users with `[bot]` in their name are not affected by this setting.
# Creating Playbooks
Source: https://docs.devin.ai/product-guides/creating-playbooks
Build a library of reusable prompts for your organization
## What are Playbooks?
### Playbooks are easily shareable, reusable prompts for repeated tasks
A playbook is like a custom system prompt for a repeated task. For example, if you need to have many different Devin sessions that each integrate the same third-party library but in different parts of your application, you might want a Playbook.
Playbooks are also easily shareable and reusable, so once anyone succeeds with Devin, others can more easily replicate that success!
Most best practices, style guides, or other project-specific instructions should be shared with Devin by using [Knowledge](/product-guides/knowledge). We recommend reading the docs on Knowledge before creating Playbooks, to understand which method better fits your needs.
We recommend using Playbooks when:
* You or your teammates will reuse the prompt on multiple sessions.
* You find yourself repeating the same reminders to Devin
* The use case may be relevant to others — in your organization or within the Devin user community.
## Getting Started with Playbooks
Playbooks can immediately unlock Devin’s ability to contribute in a wide range of areas, but today require skill to write. Similar to prompt engineering, writing playbooks requires trial and error. The fruit of this labor, though, is a document which unlocks Devin’s ability to independently tackle complex work, from ingesting data into Redshift and performing database migrations to using diverse software and APIs: e.g. Together, Plaid, Stripe, Modal, Springboot, Odoo, and Storybook.
Consider writing your first playbook with a simple multi-step task you want Devin to tackle.
1. Create a document that outlines...
1. The outcome you want Devin to achieve
2. The steps required to get there
2. **Optional**: Add sections like **Procedure**, **Specifications**, **Advice**, **Forbidden Actions** or **Required from User**
1. **Procedure**: Outline the entire scope of the task. Include at least one step for setup, the actual task, and delivery.
2. **Specifications**: Describe postconditions - what should be true after Devin is done?
3. **Advice**: Include tips to correct Devin’s priors
4. **Forbidden Actions**: Include any action Devin should absolutely not take
5. **Required from User**: Describe any input or information required from the user
3. Create the playbook directly in the web app by clicking [Create a new Playbook](https://app.devin.ai/settings/playbooks/create). Alternatively, save a file with the file extension `.devin.md` and drag-and-drop it in the web app when starting a Devin session
You’ve successfully attached a playbook to a session if you see a blue pill appear, along with an inline component for editing the playbook before starting your session.
## Writing a Great Playbook
### Procedure
The Procedure section should...
* Have **one step per line**, each line written imperatively
* Cover the entire scope of the task
* Include at least one step for setup, the actual task, and delivery
* Aim to make the steps **Mutually Exclusive** and **Collectively Exhaustive**
* **Additional Tips**
* Procedures should help you define the order of Devin's action - like if/else/loops/goto in code
* Don’t make tasks too specific unless you really need to, this can reduce Devin’s ability to problem-solve
* Each procedure step should contain an action verb - e.g. Write, Navigate to, etc.
### Advice and Pointers
Share advice and pointers with Devin if...
* You have a preferred way of completing the tasks
* The advice applies to the entire task, or multiple steps. Advice specific to one step should be written next to that step (e.g. as a sub-bullet)
* You are correcting Devin’s priors. Advice can function like comments on pseudocode that influence its execution.
If the advice only applies to one Procedure step, write the advice under the procedure step using nested bullet points
### Specifications
The **Specifications** section can be helpful to describe the postconditions of the playbook — what should be true once Devin is done?
### What's Needed From User
Think through anything necessary but outside of Devin’s control. For example, if the user needs to provide a token or information that is not publicly available to Devin.
### Other Tips + Tactics
* Run 2+ Devins in parallel with the same playbook to quickly identify possible errors.
* If Devin needs help, chat with it to help it along. Then add to your playbook so Devin succeeds without intervention next time.
Be explicit about what the deliverable is & how Devin should communicate the fact that it’s done (e.g. what files to attach or links to share, if any)
Explore the different decisions Devin can make, and guide Devin down the most efficient path in the playbook.
* They can be the difference maker between a working playbook and a broken one.
* For example, the following can be a very good detail to include because alloy and tts-1 are probably not things Devin would've picked otherwise, and this guides Devin in a direction that is more likely to succeed!
```
3. Create request dict with model: "tts-1", voice: "alloy"
```
## Example Playbook
View example sessions using the playbook below [here](https://app.devin.ai/sessions/93f381206f44492e9fc8b236ee022877) and [here](https://app.devin.ai/sessions/eed1a18b9ce348f69e6bac84bb42d992).
## Macros
You can assign a **macro** to any playbook — a short identifier starting with `!` (e.g., `!data-tutorial`). Macros let you quickly attach a playbook to a session by typing its macro name in the prompt input. Macros can only contain letters, numbers, and hyphens, and must be unique within your organization.
## Version History
Playbooks maintain a **version history** so you can track changes over time. Each time you edit and save a playbook, a new version is created. You can view previous versions and revert to an earlier version if a recent change didn't work out as expected.
## Enterprise Playbooks
For enterprise customers, playbooks can be managed at the **enterprise level** in addition to the organization level. Enterprise playbooks are shared across all organizations in your enterprise, making it easy to standardize workflows across teams. Enterprise admins can create and manage enterprise-level playbooks from the enterprise settings.
```txt R Data Science Tutorial theme={null}
Playbook: R Data Science Tutorial
## Overview
Create a data science tutorial using an R markdown notebook.
## What’s Needed From User
- Link to a dataset (csv file attachment or kaggle link)
- Specific task to create a data science tutorial for
## Procedure
1. Download the dataset provided by the user.
- If needed, download the dataset using the Kaggle CLI - you don't need any credentials for this
2. Create an R markdown notebook titled `data_science_tutorial.Rmd`.
3. Create a `tmp.Rmd` file for writing and saving intermediate code.
4. Create 5 main sections inside the `data_science_tutorial.Rmd` file and add code from the `tmp.Rmd` file containing the following:
- Dataset Statistics. Generate a statistical summary of the dataset.
- EDA (Exploratory Data Analysis). Create a bar chart and a scatter plot for the provided data.
- Train-test split. Split the data in an 80:20 ratio. Save the training and testing data.
- Training the machine learning model. Save the model once trained.
- Inference with the saved model. Load the saved model and evaluate its performance on the test set using the metric specified by the user.
5. Once the code is written, add a short explanation for each section.
6. Convert the R markdown notebook to HTML format
7. Send the final R markdown notebook, HTML file, saved model and testing data to the user.
## Specifications
1. Send the R markdown notebook and HTML file to the user.
2. Send the saved model and testing data to the user.
## Advice and Pointers
1. Do not re-install packages if already installed.
2. Sign in to RStudio is not required to complete this task.
3. Run the entire notebook after you add code for each section.
## Forbidden Actions
1. Do not overwrite the `data_science_tutorial.Rmd` file.
```
# Deployments
Source: https://docs.devin.ai/product-guides/deployment-capabilities
Devin's abilities and limitations in deploying frontend and backend applications.
## Overview
Devin is able to deploy small applications that it builds from scratch. However, Devin has limitations when it comes to deploying pre-existing applications.
| Component | New Applications | Existing Applications |
| ------------ | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Frontend** | Supported out of the box (using pre-configured template) | Requires custom access and instructions via [Secrets](/product-guides/secrets) and [Knowledge](/product-guides/knowledge) |
| **Backend** | Supported out of the box (using FastAPI template) | Requires custom access and instructions via [Secrets](/product-guides/secrets) and [Knowledge](/product-guides/knowledge) |
## Frontend Deployment
Devin can deploy frontend applications using a pre-configured template that uses Vite, TypeScript, Tailwind CSS, and Shadcn.
When a user asks Devin to create a frontend app from scratch, it will use the template as a starting point unless specified otherwise. If the user provides explicit approval, Devin can deploy these frontend apps through an internal service.
## Backend Deployment
For backend applications, Devin uses a FastAPI template. Similar to frontend apps, Devin can deploy backend apps created from this template to Fly.io, given user approval.
## Limitations
* **Pre-existing Apps**: Devin is not equipped to deploy pre-existing applications. While frontend apps might work, backend apps will not in 99% of cases.
* **Custom Deployment**: For apps not created with Devin's templates, users should choose their own deployment method and provide Devin with the necessary credentials and instructions via [Secrets](/product-guides/secrets) and [Knowledge](/product-guides/knowledge).
# Invite your Team
Source: https://docs.devin.ai/product-guides/invite-team
Only available for Team and Enterprise plans
Add members to your Devin organization so you can collaborate with your team and create sessions within the same org.
## Roles
Your organization has two roles:
* **Member** — Can start Devin sessions and view and contribute to your organization's knowledge, playbooks, environment snapshots, and more.
* **Admin** — Has all member permissions, plus the ability to set up and manage billing, organization integrations, secrets, and other organization-level settings.
## Inviting members
To invite new members to your organization:
1. Navigate to **Settings > Members** in the sidebar, or go to [app.devin.ai/settings/members](https://app.devin.ai/settings/members).
2. Click **Invite members**.
3. Enter the email addresses of the people you want to invite.
4. Select a role (**Member** or **Admin**) for the invited users.
5. Click **Send invites**.
Invited users will receive an email with a link to join your organization. Once they accept the invitation, they will appear in the members list.
## Managing members
From the **Members** settings page, admins can:
* View all current members and their roles
* Change a member's role between **Member** and **Admin**
* Remove members from the organization
Only admins can invite new members, change roles, or remove members from the organization.
# Knowledge
Source: https://docs.devin.ai/product-guides/knowledge
Share important context and knowledge to help Devin get onboarded
## What is Knowledge?
Just like onboarding a new engineer, onboarding Devin requires an initial investment in **knowledge transfer**.
Knowledge is a collection of tips, advice, and instructions that Devin can reference in all sessions. You can continually add to Devin’s bank of Knowledge over time, and Devin will **automatically recall relevant Knowledge** as necessary.
Use the Knowledge feature to share documentation, tips, custom internal libraries, and other materials that Devin may need.
## How do I create Knowledge?
Navigate to the **Knowledge** tab in the **Settings & Library** page, and click “Create knowledge" in the top right.
Your **Trigger Description** will help Devin recall relevant Knowledge at the right times. This can be a simple phrase or sentence. Devin will retrieve a Knowledge item when its current work is related to the specified triggers, and all Knowledge requires a trigger description.
**Content** should be a handful of sentences with relevant information.
### Macros
You can assign a **macro** to any knowledge item — a short identifier starting with `!` (e.g., `!deploy-checklist`). Macros let you quickly reference knowledge in your prompts by typing the macro name. Macros can only contain letters, numbers, and hyphens, and must be unique within your organization.
### Enabling and disabling Knowledge
Each knowledge item can be individually **enabled or disabled** per user. Disabling a knowledge item prevents Devin from retrieving it in your sessions, without deleting it from the organization. This is useful when a knowledge item is temporarily irrelevant to your work but may be useful to teammates or in the future.
## Knowledge Suggestions
Devin will automatically suggest Knowledge to remember based on your feedback in chat. Edit the suggested Knowledge before saving, or dismiss the Knowledge if it's not helpful.
You can also request Devin to regenerate a Knowledge Suggestion based on your feedback. This can make it easier to iterate on suggested knowledge rather than manually editing. Devin can also suggest updates to existing knowledge items in addition to suggesting new knowledge items.
## What belongs in Knowledge?
We recommend including the aspects of your prompts or playbooks you find yourself repeating regularly. Examples include common bugs and their associated solutions, code conformance practices, deployment workflows, testing workflows, how to interact with proprietary tools, etc.
## Organizing Knowledge with Folders
You can organize knowledge items into **folders** for easier management. Folders support:
* **Nested hierarchy** — Create sub-folders to build a structured knowledge tree.
* **Bulk enable/disable** — Toggle an entire folder on or off. When a folder is disabled, all knowledge items inside it are disabled for your sessions.
* **Move items** — Drag knowledge items between folders, or use the move action to reorganize.
* **Auto-organize** — Select multiple knowledge items and let Devin automatically sort them into logical folders.
Folders are particularly helpful when your organization has a large number of knowledge items spanning different teams, projects, or workflows.
## Tips and tricks
1. Create specific Knowledge that is targeted at one workflow or action. Devin will read the entire Knowledge contents, so keep it all relevant and up-to-date!
* Split up your Knowledge into smaller ones where possible. Devin is capable of accessing multiple Knowledge “items” at once.
2. Make a habit of adding and updating Knowledge. These are shared across your organization, and will continually improve Devin for your team over time.
3. Devin retrieves Knowledge when relevant, not all at once or all at the beginning. Be sure to make your retrieval trigger highly relevant to the contents.
4. Use folders to group related knowledge (e.g., by project, team, or workflow) so you can quickly enable or disable sets of knowledge as your focus changes.
## Organization and Enterprise Knowledge
For enterprise customers, the Knowledge page is split into separate tabs to help you manage knowledge at different scopes:
* **Organization Knowledge** — Knowledge items scoped to your current organization. These are visible to all members of the organization and are the default scope for new knowledge items.
* **Suggestions** — AI-generated knowledge suggestions based on your session interactions (shown for non-primary organizations).
* **Enterprise Knowledge** — Knowledge items that apply across all organizations in your enterprise. Only visible when you belong to an enterprise account. Enterprise admins can create and manage enterprise-level knowledge from this tab.
Primary organization users see a single **Enterprise Knowledge** tab. Non-primary organization users with an enterprise account see all three tabs, with Organization Knowledge as the default. Non-primary organization users without an enterprise account see only Organization Knowledge and Suggestions.
Enterprise knowledge items are particularly useful for sharing company-wide coding standards, architectural guidelines, deployment procedures, and other context that should apply uniformly across all teams and organizations.
### Promoting Organization Knowledge to Enterprise
If an organization-level knowledge item proves useful enough to share across your entire enterprise, you can promote it directly from the knowledge editor. Open the item, then click **Promote to Enterprise** in the Details tab. The item is moved from organization scope to enterprise scope and becomes available to all organizations in your enterprise.
Promotion requires enterprise knowledge management permissions, and is only available for user-created knowledge items in organizations that belong to an enterprise.
## Pinning Knowledge to Repos
You can choose whether Knowledge applies to no repo, a specific repo, or all repos:
* Pinning to **no repo**: The Knowledge is only retrieved when Devin decides it's relevant to your current context.
* Pinning to **a specific repo**: The Knowledge is always used whenever Devin is working in that specific repo.
* Pinning to **all repos**: The Knowledge automatically applies to every repo that Devin is working on in any session.
# Scheduled Sessions
Source: https://docs.devin.ai/product-guides/scheduled-sessions
Automate recurring or one-time Devin sessions that run on a schedule
**Automations are now the recommended way to run Devin on a schedule.** [Automations](/product-guides/automations) support schedule triggers along with event-driven triggers (Slack, GitHub, Linear, webhooks), conditions, invocation limits, and more. If you're setting up a new scheduled workflow, use an automation with a **Schedule trigger** instead. Existing scheduled sessions will continue to work.
Scheduled Sessions let you create Devin sessions that run automatically — either on a recurring schedule or as a one-time run at a specific date and time. Use them to automate repetitive tasks like daily reports, periodic code maintenance, routine data analysis, and more.
## Creating a Scheduled Session
There are two ways to create a scheduled session:
### From the input box
1. Type your prompt in the Devin input box
2. Click the **three-dot menu** (⋯) on the right side of the input box
3. Select **Schedule Devin**
4. You'll be taken to the schedule creation page with your prompt pre-filled
### From the Schedules settings page
1. Navigate to **Settings > Schedules** in the sidebar
2. Click **Create schedule**
3. Fill in the schedule details
## Configuring a Schedule
When creating or editing a schedule, you can configure the following options:
### Name
Give your schedule a descriptive name so you can easily identify it in the list (e.g., "Daily CI Report" or "Weekly Dependency Updates").
### Schedule type
Choose between two schedule types:
* **Recurring** — Runs repeatedly on a cron-based frequency (default)
* **One-time** — Runs once at a specific date and time, then automatically disables itself
### Agent
Choose which agent type should run the scheduled session:
* **Devin** — Standard AI software engineer (default)
* **Data Analyst** — Optimized for data analysis and queries
* **Advanced** — For playbooks and session analysis
### Playbook (optional)
Attach a [playbook](/product-guides/using-playbooks) to the scheduled session. The playbook will be applied every time the schedule runs, ensuring consistent behavior across executions.
### Repositories (optional)
Select one or more repositories for the scheduled session to work in. When repositories are selected, they are included as a hint in the session prompt so Devin knows which repos to focus on. Leave empty to let Devin determine the relevant repositories from the prompt.
### Frequency (recurring schedules)
For recurring schedules, set how often the schedule should run. The frequency editor supports two modes:
**Visual mode** provides preset options:
* **Hourly** — Run every N hours
* **Daily** — Run at a specific time every day
* **Weekly** — Run at a specific time on selected days of the week
Times are displayed in your local timezone but stored as UTC internally. The editor handles the conversion automatically.
**Custom mode** lets you enter a standard cron expression directly (e.g., `0 9 * * 1-5` for weekdays at 9 AM UTC). This gives you full flexibility for complex schedules.
### Run at (one-time schedules)
For one-time schedules, pick the date and time when the session should run. The time is entered in your local timezone and converted to UTC automatically. One-time schedules must be set to a time in the future.
After a one-time schedule executes, it is automatically disabled. The schedule and its past sessions are preserved for audit purposes.
### Email notifications
Control when you receive email notifications about scheduled session runs:
* **Always** — Get notified after every run
* **On failure only** — Only get notified when a scheduled session fails (default)
* **Never** — No notifications
### Slack notifications
You can optionally send notifications about scheduled session runs to a **Slack channel**. When configured, Devin posts updates to the selected channel when the schedule runs. This requires a connected Slack integration in your organization settings.
### Run as
By default, sessions created by a schedule are attributed to the user who originally created the schedule. When editing a schedule, you can update this so that future runs are attributed to you instead. This is useful when schedule ownership changes hands — the new owner receives notifications and the sessions appear under their account.
### Prompt
Write the instructions that Devin will follow each time the schedule runs. This is the same as the prompt you would type when starting a regular Devin session.
## Managing Schedules
Navigate to **Settings > Schedules** to see all your scheduled sessions. The list shows each schedule's name, frequency, last run time, and status.
### Status
Each schedule has one of three statuses:
* **Active** — The schedule is enabled and will run at its next scheduled time
* **Paused** — The schedule is disabled and will not run until re-enabled. One-time schedules are automatically paused after execution.
* **Error** — The schedule encountered consecutive failures
### Editing a schedule
Click on any schedule in the list to view its details. Click **Edit** to modify its configuration, including the name, prompt, agent, playbook, repositories, frequency, notification settings, run-as user, and whether it is enabled or paused.
### Pausing and resuming
You can pause a schedule by editing it and toggling the **Status** switch to **Paused**. Paused schedules will not create new sessions until re-enabled. Toggle it back to **Active** to resume.
### Deleting a schedule
Click the **three-dot menu** on a schedule's detail page and select **Delete**. This permanently removes the schedule. Past sessions created by the schedule are not affected.
## Viewing Past Sessions
Each schedule detail page has a **Past Sessions** tab that lists all Devin sessions created by that schedule. Click on any session to navigate to its full session view. This is useful for reviewing outcomes, debugging failures, or auditing what the schedule has been doing over time.
## Use Cases
Here are some common ways to use Scheduled Sessions:
* **Daily standup reports** — Summarize recent PRs, issues, or commits every morning
* **Periodic dependency updates** — Check for and apply dependency updates on a weekly basis
* **Recurring data analysis** — Generate reports or dashboards from your data at regular intervals
* **Routine code maintenance** — Run lint fixes, dead code removal, or test coverage checks on a schedule
* **Monitoring and alerting** — Periodically check system health or review logs for anomalies
# Secrets & Site Cookies
Source: https://docs.devin.ai/product-guides/secrets
Securely share credentials with Devin so it can access any tool
## Giving Devin Credentials
Devin can use its own login credentials to access platforms that require authentication, either in its Browser or via the command line. We recommend setting up a dedicated account for Devin to use (e.g. [devin@company.com](mailto:devin@company.com)) on each service that it needs access to. You may then save Devin's username and password as Secrets on your account, so that it can log in as part of your future sessions.
Adding secrets is primarily done via the [Secrets page](http://app.devin.ai/secrets). This page is particularly relevant for Organization-level secrets. For repo-specific or session-specific secrets, see the below sections.
When adding a secret, you may add a Note that explains additional context or instructions for using the secret. Use this field to convey useful information to both Devin and your fellow organization members. Example notes could include:
* This API key should only be used in our production env but never in staging or dev.
* Used for our AWS RDS Database in us-west-2
* These credentials are scheduled to be deprecated after Q3 2025
* Auto-expires every 30 days - ping the SecOps team for rotation if this starts failing
* This API key is attached to the [devin@company.com](mailto:devin@company.com) user account
## Persisted Global Secrets
Secrets added in the [Settings & Library > Secrets](http://app.devin.ai/secrets) are **persisted** to future sessions and apply to the entire organization. Note that any secrets you share here will be usable by Devin in all future Devin sessions within your organization. All secrets are encrypted at rest. **New secrets are only available to Devin in sessions created *after* you added the secret.**
Please note that all members of your organization will be able to use Global Secrets, but only admins will be able to view or edit existing secrets. Take care to only add secrets that are specifically scoped to your organization and usable by all its members.
### Personal Secrets
In addition to organization-wide secrets, you can create **personal secrets** that are scoped to your own sessions only. Personal secrets are not shared with other members of your organization. This is useful for credentials tied to your personal accounts or for testing secrets that should not be exposed to the broader team.
To create a personal secret, select the **Personal** scope when adding a new secret on the [Secrets page](https://app.devin.ai/secrets). Personal secrets are only accessible in sessions you create and are not visible to other organization members or admins.
There are a few types of secrets available:
This is most suitable for most generic secrets with a single value. Each Secret Name (also known as a Secret Key) is associated with a single Secret Value. Examples of secrets stored here could be:
* API Keys
* SSH Keys
* Usernames or Passwords
* Tokens
If a single secret requires multiple values, please make a distinct secret for each value. For example, you could store GITHUB\_USERNAME and GITHUB\_PASSWORD as two Raw Secrets.
**Cookies “hold” your authenticated state**; if you are logged into some site, then giving Devin your cookies for that site will make it so that Devin is automatically logged in for the same site.
Please note that sometimes cookies can be insufficient by themselves and may require additional Username or Password secrets. For example, on Amazon, Devin may be logged into the site while shopping or adding to cart, but Amazon might require an additional layer of password confirmation when it comes time to check out.
Cookies are stored as a base64 encoded string of `;` delimited JSON array in the standard chromium cookie format. This is important to know if you need to manually encode cookies rather than exporting them directly from Chrome. For details of how to add a Cookie secret, please see [Adding a New Site Cookie](/product-guides/secrets#adding-a-new-site-cookie)
Time-based one-time passwords are used for two-factor authentication (2FA). Devin can store TOTP secrets that act similarly to those in Google Authenticator or Authy. For details of how to add a TOTP secret, please see [Adding a New TOTP](/product-guides/secrets#adding-a-new-totp)
Devin used to support creating Key-Value secrets that would handle multiple keys per secret. However, this feature is no longer available.
Instead of making key-value secrets, we recommend simply creating multiple raw secrets for each distinct field. For example, instead of creating a key-value secret for JIRA\_LOGIN, you could create two raw secrets: JIRA\_USERNAME and JIRA\_PASSWORD.
## Repo-Specific Secrets
To scope secrets to a specific repository, you can add them as environment variables (or in a .env file) during [environment configuration](/onboard-devin/environment).

Sessions using the same Snapshot in the future will be able to access those environment variables, but other unrelated sessions will not.
## Session-Specific Secrets
While Devin is working, it may ask you to provide credentials (API keys, logins, etc.) within the current conversation, like so:
When Devin asks for secrets in this fashion, these secrets are scoped purely to the current session and are not saved for any future sessions.
Alternatively, you can set session-specific secrets yourself:
## Working With Secrets
Once a secret has been configured in Devin, your application may access it like a normal ENV variable (as long as the session was started after your secret was configured). This applies to global organization-wide secrets, repo-specific secrets, and session-specific secrets.
Devin performs some text conversion to ensure that your Secrets are valid ENV variables:
* It removes invalid characters by replacing anything other than a letter, digit, or underscore with another underscore. For example, the secret named Abc%123 would become the ENV variable Abc\_123
* If your secret name does not begin with a letter, Devin adds an underscore to the beginning of the name. For example, the secret 123MYVAR would become the ENV variable \_123MYVAR
* If you have two secrets with the same name, Devin will add a counter to the end. For example, if you have two secrets named MY\_SECRET you would end up with two ENV variables named MY\_SECRET and MY\_SECRET\_2 and so on.
You may then access your secrets using your application's preferred method of reading ENV variables. For example, you may prepend a dollar sign to refer to a secret like \$API\_KEY.
## Adding a New Site Cookie
To add a Site Cookie, please follow the steps below:
1. Log in as you normally would to the account you'd like to share with Devin. This will generate cookie(s).
2. In order to get the cookie(s) from the browser store, download the browser extension [Share your cookies](https://chromewebstore.google.com/detail/share-your-cookies/poijkganimmndbhghgkmnfgpiejmlpke) and follow the steps on that Extension to extract your cookies. You may want to test that importing the cookie in another Chrome Profile successfully authenticates you to the site.
3. Add the exported cookie to Devin via the [Secrets page.](https://app.devin.ai/secrets)
4. When using the cookie for a site, Devin should find that it’s already logged in when it navigates to that site. Tell Devin to give it a try!
If you're not using Chrome or need to manually encode cookies, note that Devin expects cookies in a base64 encoded string of `;` delimited JSON objects in the standard chromium cookie format.
## One-Time Password
Devin can now handle two-factor authentication (2FA) using a time-based one-time password (TOTP). To do this, you’ll need to give Devin the information provided at the time 2FA is set up on Devin's account for the specific application:
1. Access Devin's account for the service that requires 2FA.
2. Go to the account security settings and look for an option to regenerate or view the QR code. This may be called Set up or Replace Authenticator.
3. If the application allows, select the option to view the QR code.
4. Once the QR code is displayed on your screen, take a screenshot.
5. Go to [Devin's Secrets](https://app.devin.ai/secrets), click on the "Add Secret" button, and change the Secret type to "One-time Password". Put a descriptive name. Click the small QR code icon in the top right of the Value input box and upload your QR code screenshot.
Only provide 2FA codes associated with accounts that were specifically set up for Devin's use only. We do not recommend giving Devin any 2FA codes to your personal accounts.
### Tips for TOTPs
* Some applications may not allow you to view the existing QR code once 2FA is enabled. In such cases, regenerating the QR code is the only option.
* Always save any new backup codes provided during the process in a secure location.
# Session Insights
Source: https://docs.devin.ai/product-guides/session-insights
Analyze your Devin sessions and get actionable feedback to improve future interactions
## What is Session Insights?
Session Insights is an analysis feature that helps you understand what happened in your Devin sessions and provides actionable recommendations for improvement. When you trigger an analysis, Session Insights examines the session to identify patterns, issues, and opportunities for better collaboration.
Session Insights is available for all completed Devin sessions at no additional cost. When a session ends, Devin automatically generates a lightweight classification (category, languages, and tools). For large sessions (L or XL), a full analysis is also generated automatically at teardown. For smaller sessions, you can trigger a full analysis manually through the UI or via the [API](/api-reference/v3/sessions/post-organizations-session-insights-generate).
## How to Access Session Insights
### Step 1: Complete a Session
Run a Devin session and let it complete. Session Insights works best with sessions that have clear outcomes, whether successful or not. Sessions that are too short (fewer than one Devin message) will not generate insights.
### Step 2: Open the Insights Modal
After your session completes, look for the **Session Insights** button in the top bar of your session.
### Step 3: Generate or View Analysis
Click the button to open the Session Insights modal. If an analysis has not yet been generated, click **Generate Analysis** to start one. Generation typically takes about a minute. If an analysis already exists, you can click **Regenerate** to create a fresh analysis.
## Session Overview Metrics
At the top of the Session Insights modal, four key metrics give you a quick snapshot of the session:
### ACU Usage
ACU (Agent Compute Unit) usage reflects how much compute Devin consumed during the session. Lower ACU usage for a given task generally indicates a more efficient session. Use this metric to compare similar tasks and identify sessions where Devin may have spent excessive compute on retries or dead ends.
### User Messages
The total number of messages you sent during the session. A high message count can indicate that Devin needed frequent course corrections, suggesting that the initial prompt could be more detailed. Ideally, provide all important context upfront to minimize back-and-forth.
### Session Size
Session size is a composite classification (XS, S, M, L, XL) based on both ACU usage and user message count. Either higher ACU usage or a higher number of user messages can increase the session size.
The thresholds for each size category are:
| Size | ACU threshold | User message threshold |
| ------ | ------------- | ---------------------- |
| **XS** | ≤ 2 ACUs | ≤ 2 messages |
| **S** | ≤ 5 ACUs | ≤ 5 messages |
| **M** | ≤ 10 ACUs | ≤ 10 messages |
| **L** | ≤ 20 ACUs | ≤ 20 messages |
| **XL** | > 20 ACUs | > 20 messages |
For enterprise customers, ACU thresholds are scaled by a factor of 10 (e.g., XS ≤ 20 ACUs, S ≤ 50, M ≤ 100, L ≤ 200, XL > 200). User message thresholds remain the same.
The overall session size is the **larger** of the ACU-based size and the message-based size. Sessions classified as **L** or **XL** are flagged as unhealthy, meaning Devin likely encountered significant issues or the task scope was too broad for a single session. Consider breaking large tasks into smaller, focused sessions.
To keep sessions small and efficient, provide all important information upfront in the initial prompt.
### Category
Devin automatically classifies sessions into task categories based on the work performed. Classification also includes metadata such as the **tools and frameworks** used and the **programming languages** involved.
The available task categories are:
* **Feature Development** — building new features, components, services, or implementing new functionality
* **Bug Fixing** — investigating and resolving bugs, errors, or unexpected behavior
* **Code Review** — reviewing, explaining, or analyzing existing code and architecture
* **Refactoring & Optimization** — improving code structure, performance, or readability without changing behavior
* **Test Generation** — writing, fixing, or improving tests (unit, integration, e2e, QA) and test infrastructure
* **Migrations & Upgrades** — upgrading dependencies, migrating between frameworks or versions
* **CI/CD & DevOps** — CI/CD pipeline work, deployment, monitoring, alerting, and infrastructure tasks
* **Security** — fixing security vulnerabilities, addressing CVEs, and improving security posture
* **Data & Automation** — data analysis, pipelines, scripting, dashboards, and automation tasks
* **Documentation & Content** — writing or updating documentation, READMEs, changelogs, API docs, and translations
* **Research & Exploration** — exploring feasibility, researching solutions, designing architecture, writing RFCs, and prototyping
This classification helps you understand how Devin interpreted your task and can reveal misalignment between what you intended and what Devin worked on.
## Analysis Tabs
The Session Insights modal contains three tabs, each focused on a different aspect of the analysis.
### Issue Timeline
The Issue Timeline tab contains two sections:
**Issues Detected** lists problems Devin encountered during the session. Each issue includes:
* A **label** describing the issue category
* An **impact** rating (high, medium, or low)
* A **description** explaining what went wrong
Issues are grouped by label and impact level, making it easy to see patterns. Common issue types include build failures, environment configuration problems, incorrect assumptions about the codebase, and scope ambiguity.
**Timeline** provides a chronological, color-coded view of key events during the session:
| Color | Meaning |
| ---------- | ------------------- |
| Red | High impact issue |
| Yellow | Medium impact issue |
| White/Gray | Significant event |
| Green | Value provided |
Each timeline event has a title and description. Events linked to specific issues appear in bold. Use the timeline to understand the flow of the session — where Devin made progress, where it hit obstacles, and how it recovered.
### Actionable Feedback
The Actionable Feedback tab helps you improve future sessions in two ways:
**Improved Prompt** shows a rewritten version of your original prompt with specific improvements. The suggested prompt is displayed with interactive highlighting — hover over an underlined section to see what changed and why. A numbered list of **Changes Made** below the prompt explains each modification:
* Added context or constraints that were missing from the original
* Clarified ambiguous instructions
* Included success criteria or specific requirements
* Frontloaded important information that Devin needed earlier
Click **Start new session** to launch a new Devin session pre-filled with the improved prompt.
**Action Items** lists recommended configuration changes to improve future sessions. These are concrete steps you can take in your [environment configuration](/onboard-devin/environment) or [Knowledge](/product-guides/knowledge) setup:
* **Machine setup** — environment or tooling changes (e.g., installing missing dependencies, configuring access)
* **Repo config** — repository-level changes (e.g., adding build scripts, updating configuration files)
Click **Go to machine** to navigate directly to your machine configuration and apply the suggested changes.
### Knowledge Usage
The Knowledge Usage tab shows how your [Knowledge](/product-guides/knowledge) items were used during the session:
**Useful Knowledge** lists knowledge items that helped Devin complete the task successfully, with an explanation of how each piece of knowledge was applied.
**Misleading Knowledge** lists knowledge items that led Devin astray or contained outdated or incorrect information. Each entry explains why the knowledge was harmful, helping you identify items that need updating or removal.
Click on any knowledge item to navigate directly to it and make edits. Regularly reviewing this tab helps you maintain a high-quality knowledge base.
## Interpreting Common Insight Patterns
### High ACU Usage with Few User Messages
This typically means Devin worked autonomously but struggled with the task. Check the Issue Timeline for recurring errors or retries. Common causes:
* Missing environment setup (dependencies, API keys, access credentials)
* Ambiguous requirements that led to trial-and-error approaches
* Complex tasks that would benefit from being broken into subtasks
**What to do:** Review the Improved Prompt for suggestions on adding context. Check Action Items for machine or repo configuration changes.
### Many User Messages with Low ACU Usage
This suggests frequent interruptions or course corrections. Devin spent little compute but needed constant guidance. Common causes:
* Underspecified initial prompt
* Devin misunderstood the task scope or requirements
* The task required domain-specific knowledge not available to Devin
**What to do:** Use the Improved Prompt as a template for future similar tasks. Add relevant details to your [Knowledge](/product-guides/knowledge) so Devin can access them automatically.
### Misleading Knowledge Flagged
When the Knowledge Usage tab shows misleading knowledge items, those items may contain outdated instructions or overly broad advice that conflicts with your current codebase. Common causes:
* Knowledge was written for a previous version of your codebase
* Knowledge is too general and gets retrieved in irrelevant contexts
* Knowledge conflicts with other knowledge items
**What to do:** Update or delete the flagged knowledge items. Make knowledge trigger descriptions more specific to avoid irrelevant retrieval.
### Session Classified as Wrong Category
If the category shown in the overview does not match what you intended, it likely means Devin interpreted your request differently. Common causes:
* The prompt was ambiguous about the goal
* The task description focused on one aspect but the intent was different (e.g., describing a bug when you wanted a feature)
**What to do:** Compare the category with your intent. Use the Improved Prompt to see how the analysis recommends clarifying the task objective.
### Timeline Shows Repeated Issues
When the same issue type appears multiple times in the timeline, Devin likely got stuck in a retry loop. Common causes:
* A persistent build or test failure that Devin could not resolve
* An environment issue (missing tool, wrong version, permission error)
* A fundamental misunderstanding of the approach needed
**What to do:** Check Action Items for environment fixes. Consider adding a [Knowledge](/product-guides/knowledge) item that explains the correct approach for this type of task.
## Best Practices
### Review Insights After Complex Sessions
Make it a habit to check Session Insights after important or complex sessions. The patterns you identify will help you become more effective over time.
### Apply Prompt Improvements Iteratively
Use the suggested improved prompts as starting points for similar future tasks. Over time, you will develop a library of effective prompt patterns. Save your best prompts as [Playbooks](/product-guides/creating-playbooks) for repeatable workflows.
### Maintain Your Knowledge Base
Regularly review the Knowledge Usage tab to keep your knowledge items accurate and relevant. Remove or update misleading knowledge promptly — a single outdated knowledge item can degrade session quality across your entire team.
### Address Recurring Issues via Machine Setup
If Action Items consistently recommend the same environment or configuration changes, address them proactively. Setting up your [environment configuration](/onboard-devin/environment) correctly prevents repeated issues across all future sessions.
### Share Insights with Your Team
Session Insights can reveal patterns that benefit your entire organization. Add key learnings as [Knowledge](/product-guides/knowledge) so your teammates can benefit from them.
### Keep Sessions Focused
If your sessions consistently classify as L or XL, break large tasks into smaller, more focused sessions. Smaller sessions tend to produce better results and are easier to analyze and iterate on.
## Troubleshooting
### No Insights Available
If Session Insights is not available for a session, it may be because:
* Analysis has not been triggered yet — click **Generate Analysis** in the Session Insights modal or use the [generate API endpoint](/api-reference/v3/sessions/post-organizations-session-insights-generate)
* The session is still in progress
* The session was too short to generate meaningful analysis (fewer than one Devin message)
* There was an error during the analysis process — try clicking **Regenerate**
### Analysis Takes Too Long
Analysis generation typically completes within a minute. If it has been generating for more than five minutes, the process may have timed out. Close and reopen the Session Insights modal, then click **Regenerate**.
### Investigate with Devin
The **Investigate with Devin** button in the Session Insights modal opens a new Devin session pre-configured to analyze the original session in depth. Use this for sessions where the automated analysis alone does not fully explain what happened.
# Skills
Source: https://docs.devin.ai/product-guides/skills
Teach Devin reusable procedures by committing SKILL.md files to your repos
## What are Skills?
Skills are `SKILL.md` files you commit to your repositories that teach Devin **reusable procedures** — any repeatable workflow you want Devin to follow consistently. Testing your app before opening a PR, deploying to an environment, investigating a codebase, scaffolding a new service — if you can write it as step-by-step instructions, you can turn it into a skill.
They follow the open [Agent Skills standard](https://agentskills.io/specification), so the same skill files work across multiple AI coding tools.
Place skill files at `.agents/skills//SKILL.md` in your repository. Devin automatically discovers them across all your connected repositories. See the [Agent Skills specification](https://agentskills.io/specification) for the full file format reference.
## Why Skills Matter
Without skills, Devin has to figure out workflows from scratch every session. With skills, you define a procedure once and Devin follows it reliably every time. Skills are useful whenever you have a workflow that:
* **Should be done the same way every time** — testing checklists, deployment steps, review procedures
* **Requires repo-specific knowledge** — which services to start, what ports to use, which commands to run
* **Benefits from dynamic context** — pulling in git diffs, branch names, or environment info at invocation time
## Devin Suggests Skills Automatically
Devin can automatically suggest skills for you. After Devin tests your application or learns something new about your setup during a session, it will suggest creating or updating a skill to capture that knowledge. You'll see a suggestion in your session timeline with:
* A summary of what was learned (e.g. "how to start the backend with Docker")
* The proposed `SKILL.md` file contents
* A **"Create PR"** button to commit the skill to your repo
Over time, Devin builds up a library of skills in your repo about how to run, test, and deploy your application.
## Examples
### Testing before opening a PR
A skill that tells Devin how to verify a Next.js app before creating a pull request:
```markdown theme={null}
---
name: test-before-pr
description: Run the local dev server and verify pages before opening any PR that touches frontend code.
---
## Setup
1. Install dependencies: `npm install`
2. Start the database: `docker-compose up -d postgres`
3. Run migrations: `npx prisma migrate dev`
4. Start the dev server: `npm run dev`
5. Wait for "Ready on http://localhost:3000"
## Verify
1. Read the git diff to identify which pages changed
2. Open each affected page in the browser
3. Check for: console errors, layout issues, broken links
4. Screenshot each page at desktop (1280px) and mobile (375px) widths
## Before Opening the PR
1. Run `npm run lint` and fix any issues
2. Run `npm test` and confirm all tests pass
3. Include screenshots in the PR description
```
### Deploying to an environment
A skill that deploys the app using arguments for the target environment, with dynamic content injection:
```markdown theme={null}
---
name: deploy
description: Deploy the app to a target environment and run smoke tests.
argument-hint:
triggers: ["user"]
---
## Deploy
1. Make sure you are on the correct branch for this deploy
2. Run `./scripts/deploy.sh $0`
3. Wait for the deploy script to complete successfully
## Verify
1. Curl `https://$0.example.com/health` and confirm a 200 response
2. Run the smoke test suite: `npm run test:smoke -- --env=$0`
3. Report the deployment URL and test results
## Current context
- Branch: !`git branch --show-current`
- Last commit: !`git log --oneline -1`
```
Invoking with `@skills:deploy staging` substitutes `staging` for `$ARGUMENTS` and `$0`, and the `` !`command` `` blocks inject live git info. The `triggers: ["user"]` field ensures Devin only runs this skill when you explicitly ask for it — it won't auto-activate.
### Investigating a part of the codebase
A skill for guided code exploration that restricts Devin to read-only tools:
```markdown theme={null}
---
name: investigate
description: Research a part of the codebase and produce a written summary with file references.
allowed-tools: Read, Grep, ListDir
argument-hint:
---
## Research
1. Search the codebase for files related to: $ARGUMENTS
2. Read the most relevant files thoroughly
3. Trace the call chain and data flow
## Summarize
1. Write a summary of how $ARGUMENTS works
2. Include specific file paths and line numbers for every claim
3. Note any concerns, edge cases, or areas that need attention
```
The `allowed-tools` field restricts Devin to read-only operations — no editing, no shell commands. This is useful for exploration tasks where you want analysis without side effects.
## Skill Discovery
Devin discovers skills from **two sources**, merged together at the start of every session:
1. **Indexed repos** — Devin's backend indexes `SKILL.md` files across all repositories connected to your organization. These are available immediately when a session starts, before any repos are cloned.
2. **Cloned repos** — As repositories are cloned onto the session's machine, Devin scans them for `SKILL.md` files on disk. Disk-scanned skills update or override any matching indexed skill from the same repo, ensuring Devin always uses the latest version on the branch being worked on.
When a repo clone completes mid-session, Devin automatically re-scans that repo so newly added or modified skills are picked up without restarting.
### Supported Skill File Locations
Devin searches for `SKILL.md` files in all of the following directories:
* `.agents/skills//SKILL.md` **(recommended)**
* `.devin/skills//SKILL.md`
* `.github/skills//SKILL.md`
* `.claude/skills//SKILL.md`
* `.cursor/skills//SKILL.md`
* `.codex/skills//SKILL.md`
* `.cognition/skills//SKILL.md`
* `.windsurf/skills//SKILL.md`
All eight paths are scanned in every repo.
### What Devin Loads from a Skill File
When a skill is discovered, Devin parses the YAML **frontmatter** (the `---` block at the top) and extracts:
| Field | Purpose |
| --------------- | ---------------------------------------------------------------------------------- |
| `name` | Identifies the skill. Falls back to the parent directory name if omitted. |
| `description` | Short summary shown in the skill list so Devin (and you) know what the skill does. |
| `allowed-tools` | Restricts which tools Devin can use while the skill is active. |
Devin also supports these additional frontmatter fields beyond the standard spec:
| Field | Purpose |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `argument-hint` | Hint text shown alongside the skill name describing expected arguments. |
| `triggers` | Controls who can invoke the skill — `["user", "model"]` by default. Set to `["user"]` to prevent Devin from auto-activating it. |
Everything **after** the frontmatter is the skill body — the step-by-step instructions Devin is prompted to follow when the skill is invoked.
See the [Agent Skills specification](https://agentskills.io/specification) for the full file format reference.
## How Devin Uses Skills
At the start of every session, Devin sees a list of all available skills (name + description). When a skill is **invoked**, Devin reads the full `SKILL.md` file and injects its body into its current context as a system-level instruction. This means Devin actively follows the skill's steps for the remainder of the task — it's not just a reference, it directly guides Devin's behavior.
Devin can use skills in several ways:
### Automatic invocation
When Devin determines a skill is relevant to the current task, it invokes it automatically. For example, if you ask Devin to fix a bug in frontend code and there's a `test-before-pr` skill, Devin will activate it before opening the PR. Set `triggers: ["user"]` in the frontmatter to prevent auto-invocation for skills you only want triggered explicitly.
### Mention a skill in your prompt
You can tell Devin to use a specific skill by including `@skills:skill-name` in your message:
```
Fix the login bug on the /auth page @skills:test-before-pr
```
You can also pass arguments:
```
@skills:deploy staging
```
The arguments are substituted into the skill body wherever `$ARGUMENTS`, `$ARGUMENTS[0]`, `$1`, etc. appear.
### One active skill at a time
Devin can only have one skill active at a time. Invoking a new skill replaces the previous one. When active, Devin is prompted to follow the skill's steps in order and complete each one before moving on.
### Searching and listing
Devin can search for skills by keyword or directory if it needs to find the right one mid-session. You can also ask Devin to list available skills or reload them after you've pushed changes to a skill file.
## Limitations
* **Global / org-level skills** — Today, skills live inside repositories. For org-wide skills, you can create a dedicated "skills" repo as a workaround. We're exploring first-class support for org-level skills that apply across all repos.
* **Composing multiple skills** — Currently only one skill can be active at a time. We're working on support for chaining and composing workflows.
## Skills vs. Playbooks
Both skills and [playbooks](/product-guides/creating-playbooks) give Devin reusable instructions, but they work differently:
| | Skills | Playbooks |
| ------------------------- | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| **Where they live** | In your repo as `SKILL.md` files — version-controlled alongside your code | In the Devin web app — managed through the UI |
| **How they're triggered** | Devin discovers and invokes them automatically, or you reference them with `@skills:name` in any prompt | Manually attached to a session when you start it |
| **Scope** | Scoped to a repo — Devin picks up the right skills based on which repos are relevant to the task | Org-wide — any team member can attach any playbook to any session |
| **Auto-suggestion** | Devin suggests new skills after testing your app or learning something new | Created manually by team members |
| **Best for** | Testing procedures, local dev setup, deployment checklists, repo-specific workflows | Reusable prompt templates, cross-repo task patterns, onboarding guides |
**Which should I use?** If your instructions are tied to a specific repo — how to run it, test it, or deploy it — use a skill. If your instructions are general-purpose prompts that apply across repos or teams, use a playbook.
## Learn More
* [Agent Skills specification](https://agentskills.io/specification) — the open standard for `SKILL.md` file format, frontmatter fields, and directory structure
* [Knowledge](/product-guides/knowledge) — for contextual tips and facts (not step-by-step procedures)
* [Playbooks](/product-guides/creating-playbooks) — for reusable prompt templates attached to sessions
# Using Playbooks
Source: https://docs.devin.ai/product-guides/using-playbooks
## How to use Playbooks
To use playbooks simply select one from your Team or the Community library. You've successfully attached a playbook if you see a blue pill appear, along with an inline component for editing the playbook before starting your session.
Alternatively, you can attach a `.devin.md` file when you start your Devin session.
### Using macros
If a playbook has a **macro** assigned (e.g., `!data-tutorial`), you can quickly attach it by typing the macro name in the prompt input box. This is a convenient shortcut when you know the macro identifier for the playbook you want to use.
Once you start the session, you should see your playbook show up with a grey background in the chat with Devin!
## Refining Playbooks
As you run a new playbook with Devin, you'll identify opportunities to improve the instructions so that Devin can complete the task more reliably. Here are some helpful features for **iterating on playbooks live**:
## Example Gallery
Check out the Community Gallery at [https://app.devin.ai/settings/playbooks](https://app.devin.ai/settings/playbooks):
# 2024
Source: https://docs.devin.ai/release-notes/2024
**Devin is now generally available!**:
Check out our [announcement on X](https://x.com/cognition_labs/status/1866535303911182771). All engineering teams can now tag Devin to fix frontend bugs, create first-draft PRs for backlog tasks, make refactors, and more. Subscriptions start at \$500/month and include:
* Unlimited seats - Devin is built for engineering teams
* Access to Devin's API, integration for Slack, and IDE extension
* Onboarding session & direct support from the Cognition engineering team
**Devin is now faster and more cost-efficient**:
Over the last 2 weeks, we've made Devin \~10% faster and \~10% more cost-efficient, especially for tasks that require Devin to make many code edits. This means the same task will require fewer Agent Compute Units (ACUs).
**Fixes for crashing, stuck, and hanging Devins**:
If you've noticed Devin stuck on the same action or unable to sleep/wake up, please let us know via Slack Connect or [support@cognition.ai](mailto:support@cognition.ai). These issues should not happen again, and we're happy to refund your ACUs if they do!
**More options to customize Devin**:
By default, sessions in your sidebar are filtered to non-archived sessions that you started. Change your default filters by clicking on the filter icon next to "Search sessions" > "Save as Default" at the bottom of your filters list.
By default, Devin automatically responds to PR comments and CI failures. Change this using the "Control Options" section in Devin's PR comment.
Always receive Slack notifications from Devin, even when you start sessions from the web app. Turn on Slack notifications in Settings > Profile.
Customize whether Devin sessions start in existing or new Slack threads, whether Devin waits for you to approve its plan, and more in Settings > Customization.
Devin can send Slack updates on its GitHub activity. Configure the channel these updates are sent to in Settings > Integrations.
Share Devin sessions you start in the web app to Slack. You can now change the default channel.
**Configure + monitor Devin's machine**:
If you need to increase Devin's machine size (disk space, RAM, CPU), we've added additional options in Settings > Devin's Workspace > Danger Zone.
You can always monitor Devin's machine utilization during a session, in the top right corner of the session page.
**Pinned and auto-updated Knowledge**:
Knowledge Devin should always remember when working in a repository can now be pinned.
Devin also auto-generates and auto-updates its own Knowledge on repo structure and components. Find auto-generated notes under Knowledge > Repo Knowledge.
**Bring Devin into conversations just as you would with human teammates**:
Tag @Devin on bug reports and feature requests directly on Slack:
* Devin pulls in context automatically
* Message Devin from your phone
* All Slack sessions also link to a webapp session
Recent improvements to our integration for Slack:
* Say "sleep" to put Devin to sleep. Devin only wakes up again when you tag @Devin in thread
* Say "archive" to put Devin to sleep + archive the session
* Turn on Slack notifications in sessions started from the webapp, you're now able to (1) interact with Devin in Slack (2) receive updates in the Threads section of Slack
**Devin responds to PR comments and lint errors automatically**:
Ask Devin to create a PR! Recent improvements to our PR workflow:
* When the PR receives comments or fails lint, Devin will automatically wake up to address it if it's sleeping
* Click "PR Preview" under the session title to see the changes Devin has made before a PR has been created. If Devin makes edits, you'll see a "Jump to Latest" button appear in the top right
**Use Devin as your todo list**:
Try sending tasks to Devin as they come up, instead of adding them to your todo list. Hide completed sessions with the new archive button next to the session title.
Archived sessions show up under Folder > Archived in the left sidebar.
**Configure Devin's Behaviors**:
[Configure Behavior in Settings](https://app.devin.ai/customization) to customize Devin's behavior to your needs. These settings are user-specific and will not affect other users in your organization.
The first behavior you can now configure is Agency.
When Devin detects a task that requires codebase information, it will begin by investigating the repo and creating a plan. When Agency is turned on, Devin will proceed with its plan without waiting for your approval. Devin will always ask you whether you want to override this per-session.
**Configure Devin's Workspace**:
Devin's Workspace resets to a saved machine state at the start of every session. By default this machine state includes all the repositories you've added and set up at app.devin.ai/workspace.
> Tip: Setting up Devin's Workspace significantly improves Devin's performance on your codebase. Imagine if every time you started a task, your laptop and part of your memory were wiped - that's what happens to Devin without setup!
Behind the scenes, all repositories you set up co-exist on the same (default) machine state at the start of every session.
**Bulk import secrets**:
If your repo requires many secrets, share them with Devin in bulk [in the Secrets section of settings](https://app.devin.ai/secrets) -- coming soon to the repo onboarding workflow.
**Faster navigation with cmd-k**:
Use cmd-k to quickly start a new session and navigate the web applications
**Talk to Devin from your IDE (Beta Access)**:
Handoff async work to Devin while you focus on your primary task. Review when convenient.
* Works in conjunction with Copilot and Cursor
* Devin's just a shortcut away (Cmd+G)
* Keep track of your active Devins
* Review and accept code directly in your local IDE
[Install the Devin Extension](https://marketplace.visualstudio.com/items?itemName=cognition.devin) to get started.
**Use macros to easily attach [Playbooks](/product-guides/creating-playbooks) (from Slack, Devin IDE, or webapp)**:
A macro is a shortcut (e.g. !macro) that can be used to quickly attach a Playbook to your initial prompt to Devin. [Navigate to your Playbook in your Library](https://app.devin.ai/playbooks) and click "Edit" to set the macro for each Playbook.
**Planning mode**:
For certain tasks, much of the work needed is figuring out what should be done and aligning on the approach. Devin will now automatically detect more complex tasks and spend time proposing a plan before beginning execution.
You can always auto-approve the plan if you don't want Devin to wait for your approval.
**Programmatically create Devin sessions and retrieve results (including structured output) using our new REST API**:
Our new RESTful API allows you to integrate Devin into your own applications, write scripts to kick off multiple sessions in parallel, and build powerful automation workflows on top of Devin.
You'll be able to specify a structured output format in your prompt, for example:
```txt theme={null}
Devin, we're using auth0 instead of clerk - can you remove clerk support from the provided file? Output format: {lines_edited: int, success: bool}
```
View structured output in the web app on any session page with CMD+i, or click "Show structured IO" in the dropdown menu in the top right corner of your chat.
You can obtain an API key from your [settings page](https://app.devin.ai/settings/api-keys).
Read our [API documentation](/api-reference/overview) to learn more and view an example of how to use the API.
**It's now easier to understand what Devin's been up to with the "Follow Devin" tab**:
The "Follow Devin" tab is designed to make it faster to understand what Devin's been up to - it highlights Devin's actions (file edits, shell commands, etc) as Devin works. Click on the magnifying glass icon to jump to the associated tool (editor, shell, browser, planner) for more information.
**To be successful with Devin, upfront investment is usually required - our new Onboarding Flow walks you through the required steps**:
Onboarding steps include:
* Connecting your GitHub organization - this enables Devin to **scan your codebase** and generate [Repo Knowledge](/product-guides/knowledge). GitHub also enables Devin create PRs and **respond to your PR comments automatically**!
* Connecting your Slack organization allows you to kick off sessions and respond to Devin in the same place where you interact with your human teammates! Next time someone reports a frontend bug, try tagging @Devin in the channel to address it!
* Manually [setting up Devin's machine](/onboard-devin/environment). If your repository requires developers to have environment variables or dependencies installed, it's important to set up Devin's machine. Otherwise, Devin will spend its limited resources figuring out setup before it's able to tackle the task you give it.
**You'll receive warnings if Devin is about to sleep**:
Previously, users on our Personal and Team plans might've noticed that Devin may sleep unexpectedly.
This is now fixed, and if Devin is about to sleep because it's low on ACUs or close to per-session ACU limits (which reset with each new instruction and can be configured in [Settings > Usage](https://app.devin.ai/settings/usage)), you'll receive a toast notification in the web app!
**Repo knowledge**:
Devin will now automatically **scan your repositories** and generate [Repo Knowledge](/product-guides/knowledge). This allows Devin to more quickly and successfully do real work for you in your repo. You can always add and edit your own Knowledge manually in [Settings > Knowledge](https://app.devin.ai/knowledge)
**Increased options for Enterprise users**:
Enterprise users now have more options to configure Devin to meet your organization's needs, including:
* **Single sign-on with Okta**
* **Auto-Join for Company Domains:** Allow any user with a company email to join Devin without individual invites
* **Customized Onboarding:** Tailor example sessions and suggested prompts to guide your organization's users to Devin's most valuable use cases
* **Usage Insights:** Automated email alerts to track your usage over time
**A new home page, designed for longer prompts and smaller screens**:
Devin often works best when you share detailed context and requirements upfront. With our redesigned home page, the input box expands as you type and feels more like a file editor:
* press Enter for new lines
* use Cmd + Enter (or Ctrl + Enter) to send your message
* paste example code snippets or lists of requirements to try our rich text features
**\[Beta] Devin API**:
The Devin API allows you to spin up Devin sessions programmatically. Use cases range from automatic PR reviews and lint error resolution to providing internal services for migrations. Currently available for our Enterprise users - contact us at [support@cognition.ai](mailto:support@cognition.ai) to learn more!
**Faster session and workspace navigation**:
It's now much faster to scrub Devin's workspace, switch sessions, and start new sessions in the Devin web app.
**We've migrated our authentication system to Auth0**:
You'll notice a new design on our login page, but you'll be able to log in as normal using your email, Google, or GitHub credentials.
**Introducing Devin for Teams**:
With our Team plan, your entire team can create, share and collaborate together in Devin sessions. The Team plan includes everything in the Personal plan, plus:
* Unlimited seats
* Access to our integration for Slack
* A larger ACU (Agent Compute Unit) capacity included with your monthly subscription
* A dedicated workspace for your team to create, share, and collaborate in Devin sessions together
Contact us at [support@cognition.ai](mailto:support@cognition.ai) to learn more!
**Devin responds to comments on PRs**:
Try reviewing Devin's code via GitHub or GitHub Mobile - Devin will automatically respond as long as the session hasn't ended and Devin isn't sleeping.
**Devin suggests Knowledge**:
Try giving Devin feedback in chat! Devin will automatically suggest new additions to Knowledge if something seems useful for future sessions.
Knowledge is a collection of tips, documentation, and instructions that Devin "knows" across all future sessions. Devin will automatically recall relevant Knowledge as necessary, and you can always manually add or review Knowledge in **Settings & Library** > **Knowledge.**
**Let Devin create Devins with MultiDevin**:
Tackle large backlogs of tasks by delegating to a team of Devins that work in parallel. MultiDevin consists of 1 "manager" Devin and up to 10 "worker" Devins.
The manager Devin distributes a task to each worker Devin, then merges the changes from all *successful* worker Devins into one branch or pull request. MultiDevin is great for repeated, isolated tasks like lint errors, code clean-ups, migrations, refactors, and more!
**Enterprise VPC Deployment**:
Devin offers an enterprise deployment option tailored for organizations with stringent security and compliance requirements. Our cloud-agnostic solution allows Devin to deploy DevBoxes within your own Virtual Private Cloud (VPC) and to store data within your cloud, ensuring your data remains exclusively within your controlled environment.
**"Wake up" old Devin sessions**:
Previously, Devin sessions ended after long periods of inactivity. Now, most sessions will "sleep" instead, meaning that you can wake Devin up and resume the session at any point.
You can still end sessions manually with the "stop" button at the top right corner of the chat.
**Send Devin code reviews in product**:
Ask Devin questions or ask for edits to specific lines of code. The code you comment on will be sent to Devin in one chat message.
Simply highlight any text in Devin's editor and click "Add to chat" or "Add a comment".
**Universal Planner**:
With Universal Planner, Devin can now more reliably perform long, multi-step tasks that require **looping** - in other words, tasks that require performing the same action multiple times - without needing to use Playbooks.
Playbooks are still recommended for tasks and prompts that will be run multiple times or prompts that are helpful to share with your team.
**Devin got smarter!**:
Many of our improvements this week have been behind the scenes **improvements to Devin's instruction following, editing, planning, and speed:**
📚 Playbooks **no longer expect or require a rigid structure** (e.g. ## Procedure section is no longer needed)
💬 Devin is a better **communicator!** When Devin makes notable deviations from the initial plan, it will inform you more reliably.
🔢 Devin is less reliant on playbooks and can follow ad-hoc plans more effectively
**Add secrets to library mid-session**:
Convenience improvement for secrets management:
**General UI Improvements**:
We've done some cleanup to our **mobile UI, settings page, and session controls.**
**Devin is now faster!**:
You'll notice that Devin has a faster time to the first message, and is quicker at completing some actions. Expect more improvements in the coming days!
**Devin's Work Log**:
Devin now maintains a work log in its planner. More quickly grok what Devin's accomplished with the work log!
Open the accordions to read Devin's retro of its work at each step. 🟢/ 🟠 / 🔴 correspond to A/B/C grades. You'll also find timestamps and how long Devin spent at each step.
**Devin Mobile Improvements**:
Try Devin while on the go - Devin mobile is now more usable, although we have a couple other improvements in the works!
**Integration for Slack 2.0**:
**Create sessions directly from Slack, attach Playbooks and Snapshots using Slack's convenient modal interface!**:
Look for the **"Create a new session"** option in the message menu (you may need to click **"More message shortcuts"** the first time you try this)
Also try the **/devin shortcut** or open Slack's shortcut launcher
**Use "send to channel" to mirror sessions started via the web app on Slack**:
This enables anyone in the channel (with Devin access) to quickly follow along and collaborate with Devin!
**Seamless communication across Slack channels and web app**:
Messages sent via the web app are now mirrored in Slack threads and vice versa
**Turn on Slack notifications mid-session**:
Slack notifications are now more informative, containing message contents and session title.
**Use Devin's Editor and Shell**:
It can sometimes be more convenient to directly take actions for Devin, rather than providing instructions for Devin to follow.
We're excited to share that you can now directly use Devin's machine. The new "Use Devin's Machine" button in the web interface opens VSCode in a new tab. Using VSCode, you can directly read and edit Devin's files, as well as open up a terminal in Devin's machine.
**Playbook Editing**:
Quick edit a playbook before sending it to Devin. Selected playbooks show up inside of the input box and the input box can be expanded, enabling fast and convenient edits to a Playbook before sending it to Devin.
Inline and in-session playbook edits won't be reflected in the Playbook Library unless you click the **"Update Playbook in library"** button. Alternatively, save your edits as new Playbook with the **"Create new Playbook in library"** button.
**Forbidden Actions Reliability**:
Devin now abides by forbidden actions more reliably when it's told what not to do via user messages or Playbooks.
```jsx theme={null}
## Forbidden Actions
- Do NOT touch any Kotlin code
- Do NOT push directly to the main branch.
- Do NOT work on the main branch
- Do NOT commit changes to the yarn.lock or package-lock.json files unless asked to explicitly.
```
**Playbooks Library & Past Runs**:
Explore how your teammates are using Playbooks in the new "Past runs" tab, and directly select Playbooks from library
**Ask Devin about Devin**:
Devin is now aware of its own product features and improvements! Try asking Devin what it knows about the Devin web app, and it'll explain its features and where to find them.
**Start Duplicate Sessions**:
Quickly kick off 2+ similar sessions with the new **"Start duplicate session"** button in the sidebar. You'll be redirected to the Devin home page with your initial message pre-populated along with any attachments, playbooks, and snapshots.
We recommend kicking off 2+ Devin sessions for some tasks, to give Devin more chances to succeed!
**Home Screen Upgrades & Shortcuts**:
The new Devin home screen makes it faster to explore and select Playbooks and Snapshots. We also introduced **Shortcuts.** Select a snapshot and/or playbook and save them as a shortcut so that they're quick to reuse!
**PR Metrics Dashboard**:
The PR metrics view aggregates all PRs made by Devin. The PR metrics view is available at [https://app.devin.ai/metrics](https://app.devin.ai/metrics)!
**Session Filtering**:
Quickly filter all of your sessions by creator, status, playbook, date, etc.
**Playbooks Library**:
You can now easily create, view and use playbooks by going to the **Devin app > Library > Playbooks.** You'll be able to create playbooks for your personal use cases, and explore playbooks from the community. Any playbooks you create will be shared with your team.
You can click in any of your Team or Community Playbooks to see example runs as inspiration for how to use a given playbook.
**Playbook Compiler**:
With the playbook compiler, you can now quickly iterate on your playbook to make sure the format, structure and content are optimized for the best playbook session results.
Tip:
* Write your playbook in the **Content** on the left hand side
* Click compile and review the newly formatted Playbook
* You can always edit and update the compiled Playbook. When it's ready, click create!
**Interactive Browser**:
Interactive Browser allows users to directly use Devin's browser. This feature is especially helpful for browser tasks where Devin may require assistance, such as completing CAPTCHAs, multifactor authentication steps and more.
**Knowledge**:
Knowledge is a collection of tips, instructions, and organizational context for Devin. You can continually add to Devin's bank of knowledge over time, and Devin will automatically recall relevant knowledge as necessary.
You can easily add knowledge to Devin's "knowledge bank", or disable it if needed.
View when and how Devin is using Knowledge in any run's progress updates.
**View Code Updates**:
During a session, you can now click into Devin's progress updates to view specific code edits Devin made while working through the sub-tasks. You can also view these directly from the Editor.
Progress Updates View
Editor Updates View
Code updates will open a modal where you can track new code written by Devin up to that specific point in time in the session.
**View Shell Updates**:
During a session, you can now click into Devin's progress updates to view specific shell commands Devin used while working through the sub-tasks. You can also view the Command History from the Shell.
Progress View Shell Updates
**Shell Command History**:
Shell updates will show you the full Command History and related outputs. You can easily copy a command and output by clicking on the three-dots icon.
Any commands that are italicized are commands run at a future point in time in the session, you can jump to different points in time in the session by clicking on different commands in the Command History section.
**Machine Snapshot Startup Commands**:
For a given machine snapshot, you can now **set a list of startup commands that will be run at the beginning of every run**. Some details:
* The commands are run from `~`
* The commands run in sequence (so having `cd dir` and then `ls` will do `ls` from `dir`)
* Each command is given a 2 minute timeout (so you can't run long-running servers with these commands)
**Command History**:
With command history, you can easily see a list of all the commands that Devin ran, along with a preview of their outputs.
Tip:
* Click on a command to jump to the timestamp where Devin used the command.
* Click the menu icon (appears when you hover over a command) to copy the full output.
**Keep Alive**:
> Deprecation Warning: This is no longer a supported feature. Devin can be woken up again any time after going to sleep now. It is recommended that hosted services be deployed elsewhere with Devin's help.
Keep Alive will keep a session alive indefinitely, and will count against Technical Preview users' daily quota. Manually terminating a session will override Keep Alive.
Note that Keep Alive is useful for keeping any hosted services (devinapps.com links) alive, but is **not necessary** if Devin helps you deploy apps using third party services like Netlify, Firebase, Vercel, etc.
**Browser Notifications**:
Get notified when Devin sends you a message. You can find this under Settings > Profile.
**Pause Devin**:
The new pause button is a shortcut and alternative to telling Devin to pause.
**Open VS Code: Access Devin's machine**:
Open VS Code lets you read and edit files on Devin's machine just like if you were working with Devin in VSCode. You can also open up a terminal in Devin's machine, which means you have **full access** to Devin's machine.
💡 Tip:
Use VSCode with [environment configuration](/onboard-devin/environment) to set up everything Devin needs to be productive moving forward:
* Tell Devin **"Run `pwd` and then pause. Do not do anything else."**
* **Open VSCode and open up a terminal** once Devin is paused
* **Do any machine setup yourself** (install packages, configure repos, etc.)
* **Create a snapshot.** Moving forward start sessions with this snapshot - all your future Devins will benefit from the setup you prepared!
**Cookies + Persisted Secrets**:
With Persisted Secrets, any secrets that you add in the Settings page will be usable by Devin in all future Devin sessions.
Additionally, with site cookies, Devin will find that it's already logged in to sites you provide valid cookies for (no login required by Devin!).
* Note that **this is a beta feature** and may not work for some sites, but we've found that it works for Amazon and Resy, and are excited to explore together what else this enables!
* Additionally, Devin may still ask for credentials. You'll need to remind Devin to first check using its browser whether it's already logged in!
Learn more here: [Persisted Secrets + Site Cookies](/product-guides/secrets)
**\[Organizations] Unlist Sessions**:
> This feature is only available to Organizations, not Technical Preview or Personal accounts
My default, all new sessions are visible to your Team (aka Organization). To make a session private to you, click the menu icon (which appears on hover) next to your session name in the sidebar to find the Unlist session option.
**\[Organizations] Integration for Slack**:
> This feature is only available to Organizations, not Technical Preview or Personal accounts
Once you've connected Slack to your organization, you'll be able to initialize Devin directly just by tagging @Devin in Slack. Devin responds in-thread with updates and questions, just as in the regular chat interface.
You can also enable Slack notifications for specific runs and Devin will privately message you whenever there's a status update. To do so, simply click the Slack icon at the top of any run you'd like to be notified for.
💡 Tip: Use these inline Slack commands to manage your Devin session:
* "mute" → prevents Devin from sending further Slack messages.
* "unmute" → reverses the above.
* "(aside)" or "!aside" → causes Devin to ignore the message (useful for commenting on Devin's run in-thread).
* "EXIT" → ends the session.
* snapshot:\[snapshot-name] → Use a particular snapshot with your run
* playbook:\[playbook-name] → Use a particular playbook with your run
Learn more here: [Integration for Slack Guide](/integrations/slack)
# 2025
Source: https://docs.devin.ai/release-notes/2025
**New Agent Upgrade**
All enterprise customers have now been upgraded to the newest version of Devin, powered by the latest architectural and model improvements. The legacy "Agent (old)" option has been removed from the Agent dropdown menu in the input box, ensuring all users benefit from the most advanced capabilities.
**Enterprise API v3 Metrics Endpoints**
New API v3 endpoints for tracking usage metrics and active users across your enterprise. Includes endpoints for sessions, searches, PRs, and daily/weekly/monthly active user metrics with time-series data. See [API Release Notes](/api-reference/release-notes) for details.
**Jira Project Mapping Search**
Added a search filter to the Jira project mapping modal.
**Child Session Indentation**
Batch sessions now appear visually indented under their parent session in the sidebar, making it easier to understand session hierarchies and navigate complex multi-session workflows at a glance.
**Repository Connection Warnings**
The repository side panel now displays a warning banner when a repository has a connection issue.
**Consumption Analytics Improvements**
Enhanced analytics dashboard with extended historical data:
* Historical cycles chart now displays 12 months of data (up from 5 months)
* New export functionality for previous billing cycles, enabling better cost analysis and reporting
**Computer Use Setting Update**
Removed the "Only available on the new agent" disclaimer from the computer use setting; this feature is now available across all agent versions.
**Copy PR Context Button**
New convenience feature allowing users to quickly copy PR context summaries to clipboard with a single click, streamlining code review workflows and external communication.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Custom Slash Commands**
Organizations can now create and manage custom slash commands that expand into predefined text prompts when used in chat. Features include:
* Support for modifying default commands like /plan and /review
* Ability to create entirely new custom commands tailored to your team's workflows
* Command management interface for enterprise administrators
**Microsoft Teams Integration**
Users can now interact with Devin directly in Microsoft Teams channels by mentioning @Devin. The integration provides:
* In-thread responses with updates and questions to help with software engineering tasks
* Support for mapping Teams channels to specific Devin organizations
**Enterprise API v3 Enhancements**
New v3 API endpoints for advanced sessions, organization searches, and improved audit logs. See [API Release Notes](/api-reference/release-notes) for details.
**Service Users Created Date**
The service users page now displays the creation date for each service user.
**Minor bug fixes and improvements**
* The "Connected accounts" section in organization settings has been renamed to "Integrations".
**Data Analyst Devin (Dana)**
Dana, which is a version of Devin optimized for data analysis tasks, is now available for all users. To use Dana, simply connect a data source via MCP then start asking questions.
**Enterprise API v3 Updates**
New v3 beta endpoints and improvements for service users. See [API Release Notes](/api-reference/release-notes) for details.
**Service Users Page Improvements**
Unified role filter combining enterprise and organization roles into a single grouped dropdown for easier filtering on the service users page.
**Consumption Analytics**
New backend support for detailed consumption analytics and reporting, providing better visibility into resource usage across organizations.
**Enterprise Hypervisors Capacity Utilization**
The hypervisor monitoring page now shows usage as a percentage instead of max slots and available slots.
**Azure DevOps Webhook Support**
Automated PR comments and status updates for Azure DevOps repositories.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the webapp UI, Slack integration, and DeepWiki.
**Enterprise API v3 Git Permissions Bulk Create Improvements**
The Enterprise API v3 Git Permissions bulk create endpoint now accepts up to 200 permissions per request, increased from the previous limit of 100. Additionally, the endpoint now validates requests to prevent common configuration errors:
* **Duplicate detection**: Requests containing identical permissions (same connection, repository path, and group prefix) are now rejected with a clear error message listing the duplicates.
* **Overlap detection**: Requests containing a repository-specific permission that conflicts with a group prefix permission are now rejected. For example, adding both `group_prefix: "myorg"` and `repo_path: "myorg/repo1"` for the same connection will fail, since the group prefix already covers that repository.
These validations help maintain a clean and unambiguous permission model, preventing confusion about which permissions are active and avoiding unexpected behavior when managing permissions.
**Enterprise API v2 Pagination Limit Update:**
* The maximum pagination limit for Enterprise API v2 query parameters has been reduced from 1000 to 200 for improved performance and reliability.
* This change affects all v2 Enterprise API endpoints with pagination, including sessions, members, organizations, groups, and user usage endpoints.
* The default limit remains 100, with a minimum of 1 and a new maximum of 200.
* Note: This change does NOT affect the v1 External API.
**Advanced Mode**
Released Advanced Mode under the "Advanced Features" section, which allows for advanced usage of Devin. Includes features like session analysis, playbook creation and optimization, and bulk knowledge management. The Advanced Mode features respect RBAC; playbook and knowledge modifying features are only available to users with the appropriate permissions.
**Multi-branch Repository Indexing**
You can now index and manage multiple branches per repository, not just the default branch. A new "Manage branches" side panel in the repositories page lets you add or remove branches for indexing, making it easier to keep documentation up-to-date across different development branches.
**Wiki Branch Selection**
Repository wikis now support viewing documentation for different branches. When multiple branches are indexed, a branch selector dropdown appears in the wiki interface, allowing you to switch between branches to view the appropriate documentation for your work.
**Hebrew Language Support for DeepWiki**
DeepWiki now supports generating documentation in Hebrew, expanding multi-language documentation capabilities for international teams.
**Interactive Mermaid Diagrams**
Mermaid diagrams in wikis now support pan and zoom functionality, making it easier to explore complex diagrams. The zoom is limited to prevent over-zooming, and clicking to drag no longer accidentally opens the diagram modal.
**Steerable Wiki Now Default**
The steerable wiki feature is now enabled by default for all users. You can customize repository documentation by uploading configuration files to adjust content detail, fix inaccuracies, and match team standards.
**MCP Usage Tracking for Enterprises**
MCP (Model Context Protocol) usage tracking is now available for all enterprise organizations, providing better visibility into how teams are using MCP integrations across the enterprise.
**Session Insights Improvements**
Added an "Investigate with Devin" button in the session insights modal, making it easier to dive deeper into session analysis and create follow-up tasks based on insights.
**Prefix-based Git Permissions**
Enterprise administrators can now create git permissions using prefix matching, allowing access to all repositories that start with a specific prefix (e.g., "myorg/frontend-" matches all frontend repositories).
**Mobile Wiki Improvements**
Improved mobile layout for wiki search bars and other wiki components.
**Minor Bug Fixes & Quality of Life Improvements**
Various bug fixes and performance improvements across the platform.
**Breadcrumb Navigation Redesign**
Redesigned breadcrumb navigation system with improved organization selector, enterprise organization management with favorites, and enhanced mobile responsiveness.
**New Devin Agent**
Added New Devin agent mode for Enterprise customers, which is a faster, more intelligent version of Devin. See [Devin Sonnet 4.5: Lessons and Challenges](https://cognition.com/blog/devin-sonnet-4-5-lessons-and-challenges) for more details.
**Document Titles**
Added descriptive document titles to all webapp pages for easier browser tab identification, including dynamic titles that show search queries.
**Repository Setup Steering Knowledge**
Added the ability to provide enterprise-wide knowledge for the synchronous repository setup agent at [https://app.devin.ai/settings/snapshots](https://app.devin.ai/settings/snapshots).
**Agentic Knowledge Management**
Improved agentic knowledge management, allowing Devin to contribute knowledge base entries within the folder hierarchy during sessions.
**Snapshots Organization**
Reorganized snapshots pages under /settings and improved snapshot management with bulk editing capabilities for better organization.
**Ada Renamed to Ask Devin**
Renamed Ada assistant to Ask Devin for clearer branding throughout the interface.
**Playbook Usage Visibility**
Added analytics for when playbooks are retrieved during sessions.
**Git Commit Authoring**
Added new git commit authoring option in customization settings to control commit attribution.
**Redshift MCP Production Ready**
Removed beta tag from AWS Redshift MCP integration.
**Slack Notification Safety**
Sanitized @everyone, @channel, and @here mentions in Slack notifications to prevent accidental mass mentions.
**Direct Attachment Download**
Improved attachment download functionality with direct download support for better performance.
**Wiki Edit Button Improvements**
Improved wiki edit button to work consistently across all git providers including GitHub, GitLab, Bitbucket, and Azure DevOps.
**Minor Bug Fixes & Quality of Life Improvements**
Various bug fixes and performance improvements across the platform.
**Unified Agent Selection Experience**
Consolidated agent selection into a streamlined experience with an improved agent switcher on the home page, making it easier to choose the right agent for your task.
**Clone Repository via API**
New V2 Enterprise Organizations API endpoint for enterprise admins to programmatically clone repositories and create snapshots with custom setup steps and startup commands.
**Enterprise Knowledge Folder Management**
Updated enterprise knowledge folder management with improved UI and restrictions on folder movement.
**Minor Bug Fixes & Quality of Life Improvements**
Various bug fixes and performance improvements across the platform.
**DeepWiki Codemaps**
Interactive code visualization is now available in DeepWiki, allowing you to explore codebases visually with an intuitive mode switcher that helps you navigate between different views of your repository documentation.
**Multi-language Wiki Support**
DeepWiki now supports generating documentation in multiple languages.
**Slash Command Improvements**
Enhanced slash command interface with visual badges and keyboard shortcut hints, making it easier to discover and use quick-start commands.
**GitLab PR Comments**
Devin can now read and respond to comments on GitLab pull requests.
**Searchable Channel Dropdown**
Channel selection dropdowns are now searchable for Slack and Teams integrations.
**Pre-selected User Roles**
When inviting new users to your organization, the most appropriate role is now pre-selected based on context.
**Minor Bug Fixes & Quality of Life Improvements**
Various bug fixes and improvements including better computer use event display, knowledge page filtering, and repository setup banner persistence.
**Steerable Wiki for GitHub and Gitlab**
Users now have the ability to upload .json files to adjust the contents of a DeepWiki to add more detail, edit any inaccuracies, and customize documentation to match team standards.
**Enterprise Playbooks API v2**
Updated Enterprise Playbooks API with improved functionality for programmatic playbook management.
**Slack Enterprise Grid Support**
Full support for Slack Enterprise Grid deployments, enabling larger enterprises to use Devin with their Slack infrastructure.
**GitLab CI/CD Integration**
Enhanced GitLab integration with support for viewing CI job logs and pipeline metrics directly within Devin, providing better visibility into build and deployment processes.
**Session Analytics Enhancements**
Added external link icons to the session analytics table, making it easier to open sessions directly from the analytics view.
**Minor Bug Fixes & Quality of Life Improvements**
* Product polish and design system migration for playbooks and settings pages
* Repository page improvements with better filtering and pagination
* Ongoing bug bashing and quality of life improvements
**Slash Commands in Input Box**
Quick-start your sessions with slash commands. Type `/plan`, `/review`, `/test`, or `/think-hard` in the input box to insert predefined task templates that help you structure your requests more effectively.
**Enterprise Knowledge Management**
Enterprise administrators can now create and manage organization-wide knowledge that's shared across all teams, making it easier to maintain consistent context and best practices throughout your enterprise.
**Enterprise Playbooks**
Playbooks are now available at the enterprise level, allowing administrators to create and manage reusable task templates that can be shared across all organizations within the enterprise.
**Repository Mentions as Attachments**
When you mention repositories in messages, they now appear as clean attachment badges with repository icons instead of inline text, providing a clearer visual distinction between message content and repository references.
**Knowledge Sharing by Default**
Knowledge entries now default to being shared within your organization.
**Minor Bug Fixes & Quality of Life Improvements**
Various bug fixes including improvements to steerable DeepWiki configuration, repository pagination, and general performance enhancements.
**Steerable DeepWiki**
Customize and guide your repository documentation with Steerable DeepWiki. Enterprise administrators can now add custom instructions and context to shape how wikis are generated for their repositories.
**Create Organization Page**
Redesigned UI of /settings/organizations/create for enterprise organization creation.
**Agent Dropdown Improvements**
When viewing an existing session, the agent dropdown now displays only the specific agent used for that session, making it clearer which agent version was used for each run.
**Agent Default Setting Hints**
The agent dropdown now includes helpful hint text explaining that starring an agent sets it as your default across all integrations, including Slack, VS Code, and the web interface.
**Slack Default Agent Tips**
Users receive a one-time ephemeral message in Slack with guidance on setting their default agent preference, helping teams adopt the latest agent versions more easily.
**Minor Bug Fixes & Quality of Life Improvements**
* Fixed bug preventing proper display of secrets page for organization members
* Fixed bug around gh CLI auth failing in certain circumstances on Devin's machine
* Enterprise API v2 git permissions endpoint now returns permission\_names dict mapping permission IDs to repo/group paths
* Enhanced member page tabs and navigation
* Ongoing stability improvements and bug fixes
**New Agent Preview using Sonnet 4.5**
A new version of Devin, built around the new capabilities and behaviors of Claude Sonnet 4.5, is now available. This agent is about twice as fast as the previous version of Devin, and can be enabled on a per-run basis or defaulted for all of a user's runs using the star in the dropdown. This agent is in beta, so not all functionality is supported at this time; it will not suggest knowledge, use cloud IDEs, or respect macros starting with ! (such as playbooks).
**Enterprise Opt-In for Agent Previews**
Enterprise customers can now opt-in to preview the new agent by enabling the "Use Sonnet 4.5" toggle in their enterprise settings.
**Inline Plan Display for Ask Devin**
When transitioning from an Ask Devin session into creating a prompt for the Devin agent to write code, the UX now displays generated plans inline with streaming content instead of in a modal.
**Session Analytics Consolidation**
The dedicated PR-only view has been consolidated with the "All Sessions" page for a unified view of session data and insights.
**MCP Observability for Enterprises**
Enhanced Model Context Protocol (MCP) observability tools are now available for enterprise customers, providing better visibility into MCP usage patterns and performance across your organization.
**Bitbucket Integration (Beta)**
Cloud Bitbucket integration is now rolling out in beta, providing improved git provider parity alongside existing GitHub, GitLab, and Azure DevOps support.
**GitHub PR Comment Improvements**
GitHub PR comments now support both `@devin` and `DevinAI` prefixes for triggering Devin, making it more intuitive to mention Devin in pull request discussions.
**Minor Bug Fixes & Quality of Life Improvements**
Fixed bug causing session URLs to not always work for enterprise administrators, as well as ongoing stability improvements.
**Session Analysis & Knowledge Management**
Enhanced session tracking and analysis capabilities with improved knowledge base management, curation tools, and prompt improvement system that preserves user context and @ mentions in the input box.
**Git permissions performance improvements**
Optimized git permissions page to support 200k+ elements with improved query performance, indexing, and pagination for GitHub repository listings.
**Minor Bug Fixes & Quality of Life Improvements**
* Fixed positioning of "Learn more" tooltip and link in message components by moving it inside a div container for better layout structure
* Removed login\_hint in new user authentication flow due to inconsistent behavior, preventing email from pre-filling during a user's first visit.
* Fixed a bug where you could not add more than one set of session-scoped secrets.
**API v2 knowledge sharing**
The `shared_in_org` field now controls knowledge visibility: true applies knowledge to the entire organization, false applies only to the creator of the knowledge.
**DeepWiki.com Thread Export Feature**
Added a "Copy Thread" button to the external deepwiki.com site for exporting Q\&A threads as markdown with citations. This feature is only available on the public deepwiki.com, not internal Devin wikis.
**Integrations page access**
All Devin users can now access integrations pages, expanding from previous restrictions that required specific management permissions to basic Devin usage permissions. Users still need admin in order to manage the specific integrations, but this enables all users to see which integrations are enabled.
**Enterprise Settings reorganization**
Reorganized Enterprise Settings sidebar into logical sections: Membership, Governance, Infrastructure, Integrations, and Analytics for improved navigation.
**UI text consistency**
Converted Title Case UI strings to sentence case throughout the application for improved consistency and readability.
**Slack UX improvements**
Enhanced integration for Slack with PR and webapp viewing buttons, more concise thread formatting, and improved overall user experience for Slack workflows.
**Enhanced MCP Configuration**
Improved MCP marketplace configuration page with inline raw secrets form, making it easier to configure MCP integrations by allowing users to create and link secrets directly within the configuration interface.
**API Secret Management**
Added new POST /v1/secrets endpoint for creating secrets via API.
**Enterprise Dashboard Enhancements**
Added sorting functionality to User Metrics table in enterprise consumption dashboard.
**Enterprise Infrastructure Management**
Added UI for updating hypervisor settings in enterprise configurations, providing administrators with better control over infrastructure management.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**Wiki Sidebar Improvements**
The wiki sidebar now displays cleaner repository names without full paths, making it easier to navigate through your indexed repositories.
**Settings Navigation Enhancement**
Standardized breadcrumb styling across Settings > Integrations pages for more consistent navigation experience throughout the application.
**Self-Hosted GitLab Access**
Added query parameter support to enable self-hosted GitLab connection modal for enterprise users who need this integration option.
**Figma MCP OAuth Support**
Enhanced the Figma integration in the MCP marketplace with OAuth authentication support for secure access to Figma files and resources.
**Enterprise API Key Management**
Improved error handling and user experience for service API key provisioning, including better messaging for organizations with existing keys.
**Mobile Sidebar Improvements**
Fixed sidebar display issues on mobile devices for better navigation experience across all screen sizes.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**Referral Information Alert**
Added informational alert to Settings → Referrals page explaining referral rewards and success criteria for better user guidance.
**Enhanced Linear Integration**
Improved Linear integration with per-team/organization trigger conditions and status-based Devin triggering for more granular control.
**GitHub Connection Management**
Added "Manage Connection" button for GitHub PAT connections and improved token display by removing @ prefix for non-individual tokens.
**Azure DevOps Display**
Enhanced Azure DevOps connection display by removing @ prefix and properly handling null connection names.
**JAM MCP Integration**
Added JAM integration to the MCP marketplace, expanding available tools and services for enhanced development workflows.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**Repository Counters Display**
The repositories page now shows total repository count and indexed repository count in the format 'X/Y repos indexed' for better visibility into indexing status.
**Enhanced MCP Marketplace**
Fixed text overflow issues in MCP marketplace cards so long integration names now wrap properly instead of being truncated.
**Improved Integration for Slack**
Enhanced Slack thread functionality with better macro extraction and moved thread mode settings to the dedicated Slack panel for improved organization.
**Enterprise Logout Access**
Added logout button visibility for enterprise sub-organizations in the sidebar, improving navigation consistency across different organization types.
**Enhanced Enterprise Consumption Dashboard**
Added sorting functionality to the User Metrics table in the enterprise consumption dashboard, allowing administrators to sort by session count and ACU consumption.
**Text Wrapping Improvements**
Fixed text wrapping issues in ADA search and DeepWiki to ensure long content displays properly without overflow.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**VPC Repo Indexing**
For Enterprise customers using a VPC installation, added support for indexing repositories inside of the VPC which enhances security.
**GPT-5 Preview Access**
Core and Teams users now have access to a preview version of Devin that includes GPT-5, available through Agent Preview while we conduct further reliability and safety testing.
**Enhanced Enterprise Members Management**
The Enterprise Members page now displays organization groups and roles, giving administrators better visibility into member permissions and organizational structure.
**Jira Integration for Enterprises**
Jira integration is now available in enterprise connected accounts settings, enabling better project management workflows for enterprise customers.
**Perplexity MCP Server**
Added Perplexity to the MCP marketplace, expanding research and information gathering capabilities through the Model Context Protocol.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**IdP Groups Settings Page**
View and search your identity provider groups directly in Settings > IdP Groups to quickly reference group names and membership context within Devin.
**Enterprise Members Overhaul**
A refreshed Enterprise Members page adds improved filters, enterprise-wide stats, and streamlined bulk actions; admins can also add groups from this page where enabled.
**Enterprise API Key Governance**
Manage enterprise API keys with a new governance experience, including provisioning and revoking service keys for tighter control.
**Diff File Header Copy**
Session diff file headers now include a one-click copy button and tooltip with the full path, making it faster to share or navigate to files.
**Linear Org Auto-Switch**
When opening a Devin scope link from a Linear ticket, Devin automatically switches to the ticket’s organization to ensure correct context.
**Bug fixes and improvements**
Various reliability, performance, and usability improvements across the app.
**Organization Selector Improvements**
Fixed overflow issues in the organization selector dropdown for better navigation when managing multiple organizations.
**Linear Integration Enhancements**
Improved Linear settings page to hide unnecessary configuration options for non-enterprise users, providing a cleaner interface.
**Enhanced Sleep State Messaging**
Improved messaging when Devin goes to sleep, providing clearer status updates even when Devin is already in sleep mode.
**Linear Knowledge Management**
Enhanced Linear knowledge editing capabilities, allowing all users to modify organization-specific Linear knowledge for better ticket scoping.
**Performance Optimizations**
Various backend improvements including better database query optimization and enhanced retry mechanisms for repository information retrieval.
**Organization Switcher Search**
Superusers can now search organizations directly from the switcher, and the menu is wider for faster navigation across large org lists.
**Primary Org Session Sidebar**
While working inside a session, the primary organization sidebar now remains visible to speed up navigation and access to settings.
**Linear Mapping UX Improvements**
The Linear integration modal has clearer toggles and button layouts, warns before closing with unsaved mappings, and uses the updated integrations webhook path for a more reliable setup.
**Automatic Linear Notes**
Saving Linear project mappings now generates structured Linear notes to help Devin scope issues and plan work more effectively.
**Input Dropdown Cleanup**
We removed the Deep Agent option from the input box dropdown to simplify task kickoff choices.
**PR Merge Notifications**
You’ll receive notifications when PRs are merged so session status stays up to date without manual refresh.
**Knowledge Title Editing**
You can now edit knowledge entry titles while in edit mode for cleaner organization.
**Dictionary Secrets No Longer Supported**
Dictionary-type secrets are no longer supported; use individual string secrets per key instead.
**Bug fixes and polish**
Various minor UI polish and non-user-facing improvements.
**MCP (Model Context Protocol) Marketplace**
Access 1000s of tools and integrations from a dedicated marketplace at `/settings/mcp-marketplace`. Connect to services like Linear, Notion, AWS services, and many more with a single click.
**Inline Secrets Management for MCP Configurations**
Create and reference secrets directly when configuring MCP servers. Simply define secrets inline and reference them using `$SECRETNAME` syntax for secure credential management.
**Slack Thread Mode Preference**
Control how Devin responds in Slack conversations. Choose whether Devin should reply in threads to keep conversations organized when integrated with your Slack workspace.
**Session UI**
We updated the Session UI to streamline the interface and better highlight key decision points in each session: the Task, the Plan, the PR, and the Summary. You’ll still have full access to Devin’s session progress, now presented more clearly and intuitively.
**Enterprise Connected Accounts UI**
We’ve redesigned the Enterprise Connected Accounts UI to make it cleaner and more focused. Connecting accounts is now simpler, with less clutter and clearer navigation.
**Git Permissions UI**
For Enterprise users, Git Permissions has been moved out of the Connected Accounts section and into its own dedicated tab. This makes it much easier to view repo permissions on a per-org basis and assign or remove repos and groups with better clarity.
**Devin can now open PRs using your GitHub username.**
This feature is off by default. To turn it on, select "Open PRs as Devin" on the [Integrations page](https://app.devin.ai/settings/integrations). This setting applies to all org members and can be changed by the admin.
**Session Insights**
Session Insights is a new free feature that analyzes your Devin sessions and breaks down what happened and gives you actionable tips for next time. It also generates a new, improved prompt that you can use to kick off a new session.
To use Session Insights, click the "View Session Insights" button in the top bar of your completed Devin session (located next to the lightbulb icon), then click **Generate Analysis** to trigger the analysis. You can also trigger analysis programmatically via the [API](/api-reference/v3/sessions/post-organizations-session-insights-generate).
**DeepWiki MCP Server:**
* We've launched the [DeepWiki MCP server](/work-with-devin/deepwiki-mcp), providing programmatic access to DeepWiki's repository documentation and search capabilities.
* Connect your AI applications to DeepWiki using the Model Context Protocol (MCP) standard.
* Free, no authentication required.
**Devin 2.1**: Confidence Scores 🟢 🟡 🔴 and enhanced codebase intelligence
It's true: coding agents can be overconfident. That's why Devin 2.1 now provides **Confidence Scores** to indicate its likelihood of completing tasks. Answer Devin's questions to help it reach 🟢.
* At multiple points in each session, Devin will express its confidence:
* At the start of the session
* After creating a plan
* Whenever it answers a question about the code
* When Devin doesn't have 🟢 confidence (i.e., 🟡 or 🔴), it will now wait for user approval before proceeding with its plan. If it's 🟢, it proceeds automatically.
* You can still send feedback and adjust Devin's plan even after it has started working.
* Our data shows that Confidence Scores are highly correlated with success.
**Upgrades to Linear & Jira Integrations:**
* Easily get Confidence Scores for multiple issues at once directly through our [Linear integration](/integrations/linear) and [Jira integration](/integrations/jira).
* This occurs without starting actual Devin sessions, allowing you to score as many issues as you'd like and prioritize having Devin work on the highest-confidence tasks.
**Enhanced Codebase Intelligence (DeepWiki Built-in):**
* The codebase understanding and intelligence features from DeepWiki are now directly integrated into Devin.
* At any point during a session, ask a question, and Devin will provide a DeepWiki-like answer, complete with code citations.
* Devin auto-detects when it should scan your codebase, but you can also trigger this manually using `!ask`.
We shipped [Deep Wiki](http://www.deepwiki.com): Up-to-date documentation you can talk to.
Turn on Deep Research for agent-powered, in-depth answers.
Share wikis and answers to keep everyone on the same page.
[Watch the walkthrough](https://x.com/cognition_labs/status/1915816544480989288) and check it for your favorite open source repos out at [www.deepwiki.com](http://www.deepwiki.com)! It's free for open-source repos, with 30k+ repos already available!
We now support **Jira**, in addition to Linear! The best workflow:
* Add the "Devin" label to a Jira issue, or bulk add to multiple issues to begin issue scoping in parallel.
* Devin knows your codebase and will comment on each ticket in minutes with a summary of relevant code, implementation plan and open questions.
* Use Devin's analysis to get up to speed. Devin has the self-awareness to report 🔴/🟠/🟢 confidence estimates too.
We also shipped **Devin Spaces**, an interactive playground to refine your tasks before having Devin work on them (in early preview):
* Devin will now link to Devin Spaces in its comment on Jira and Linear - use Spaces to ask follow up questions and further plan out the task.
* Start a Devin session directly from the plan you create in Devin Spaces!
To get started, check out our [Jira documentation](/integrations/jira) or [Linear documentation](/integrations/linear). We're excited to hear your feedback!
Our native **Linear integration** is now available! Turn tickets into PRs by launching Devins directly from Linear.
Our Devin x Linear workflow 👇
* Use Cmd+A to multi-select Linear tickets. Then, add the Devin label to start ticket scoping in parallel.
* Devin knows your codebase and will comment on each ticket in minutes with:
* A summary of the current code
* An implementation plan
* Any edge cases or questions that need your attention
* Use Devin's analysis to get up to speed, or just click the provided link to have Devin take a first pass at the PR. Devin has the self-awareness to report 🔴/🟠/🟢 confidence estimates too.
To start assigning tickets, go to [Devin's integrations](https://app.devin.ai/settings/integrations) and connect to Linear.
**Introducing Devin 2.0:** an agent-native IDE experience. Generally available today starting at \$20.
Check out our [launch announcement on X](https://x.com/cognition_labs/status/1907836719061451067) to learn more!
**Devin 1.5 is live!** We've shipped an end-to-end revamp of the Devin experience that makes it much easier to collaborate with Devin.
### Devin IDE
**Devin now does its work in an interactive VSCode environment loaded with your repos.** Check in on Devin's edits in real time, then touch up the changes or test Devin's code directly using the IDE tools and shortcuts you're familiar with.
* Click "Review Changes" for a diff view of file edits so far. You're in a fully featured IDE, so you can open files in new tabs, jump to definition, etc.
* Devin may send citations or references to code. Clicking on these will deep link into VSCode!
* Click "Follow Devin" to follow Devin's edits in real time. Click stop to take over and use the IDE yourself.
* Use `⌘K` to generate terminal commands from natural language.
* Use `⌘I` for rapid responses to questions or rapid file edits.
* All of Devin's terminals, commands, and their outputs are available in VSCode. Toggle from **read-only to writable** to run your own commands.
* Test and fix changes end to end without leaving the Devin webapp. Ask Devin to run your app locally, or take over and run commands yourself. Then use Devin's browser to test the local build yourself!
### Interactive Planner
Each time you kick off a new session, **Devin responds in seconds with relevant files, findings, and an initial plan**. Scope out your changes and give feedback on Devin's plan before letting Devin work autonomously.
* Devin rapidly scans relevant files and code snippets to generate an initial plan. This initial plan and subsequent messages may now cite code snippets and files, and **clicking on these citations now deep links into the Devin IDE!**
* For more complex tasks, click "Wait for my approval" so that Devin waits for your feedback on its full plan. Brainstorm and explore the codebase together in VSCode to refine the plan.
* By default, if you don't click "Wait for my approval", Devin waits 30 seconds for your input before proceeding. You can always change the default behavior in [Settings > Customization.](https://app.devin.ai/customization)
### Ask Devin
[Ask Devin](https://app.devin.ai/search) is a **new tool built to rapidly answer questions about your codebase**. Use Ask Devin for one-off questions like "Figure out where the auth backend endpoint is defined" or "Find the commit that introduced the new support functionality," or use it to map out the initial spec for a task you want Devin to execute.
* 🔎 **Ask Devin -> Devin:** Ask Devin to make code changes after using Ask Devin to find the relevant code. Use **Cmd + Enter** to quickly construct a high quality Devin prompt using your search context.
* 🔬 **Deep Mode:** Toggle on deep mode for complex questions that require extended research.
* 📓 **DeepWiki** is used by Ask Devin to better understand your codebase, and may help you as well! It contains architecture diagrams, links to sources, and more. Check it out [at the bottom of your sidebar.](https://app.devin.ai/wiki)
* 💬 **Ask follow up questions** - you can scroll up/down or use the component on the right (appears on hover) to navigate your history
* 🔗 **Share your Ask Devin results:** Try sharing a link to your search results when discussing code with your co-workers
* 💡 Tip: For now, we recommend setting up a [Site Search Shortcut in Chrome](https://support.google.com/chrome/answer/95426?hl=en\&co=GENIE.Platform%3DDesktop) so you can more quickly start Ask Devin queries from your browser address bar. Just go to chrome://settings/searchEngines and add a site search with url [http://app.devin.ai/search?prompt=%s](http://app.devin.ai/search?prompt=%s)
* Connect **multiple GitHub orgs** to the same Devin account - you can easily set this up in [Settings > Organization Integrations](https://app.devin.ai/settings/integrations). Let us know if you'd like this enabled for your team.
* Manage all of Devin's tasks in the new [Session Manager](https://app.devin.ai/sessions). Easily filter for sessions by PR status, users, playbooks and export session data.
* Tag sessions with **custom tags** that you can filter by in the Session Manager. Click on the 3 dots icon of the session page to "Edit Tags".
* Customize when Devin auto-closes PRs due to inactivity under [Settings > Customizations](https://app.devin.ai/customization).
* Easily tag `@file_name` to reference files in Devin's input box so Devin can quickly find the right place in your codebase to review and/or edit. Note that this only works for files in repos that have been set up in Devin's Workspace.
* **Speed**: Devin is \~2x faster vs in October 2024 and takes \~7.8 minutes on average to complete junior developer tasks in our internal evaluations.
* **Copy/paste in Devin's browser**: You can now copy text from your browser and paste it into Devin's browser! This was a highly requested feature that removes a major friction with providing Devin access to accounts (you no longer need to type in your passwords)!
* **Helping users with their prompts**: Devin proactively gives you feedback on suboptimal prompts & proposes breaking tasks down when they're too complex.
* **Gitlab (beta)**: Connect both Gitlab and GitHub repos to Devin! Devin can now push, pull, and view/create Gitlab MRs. Contact us via [app.devin.ai/settings/support](https://app.devin.ai/settings/support) to set this up.
* **Batch edits**: Tell Devin to "find and edit" code to encourage Devin to "fan out" and edit an arbitrary number of files in parallel. This greatly improves speed, especially for repetitive refactors.
* **Multi-action**: Devin can choose to perform any set of diverse batch of actions optimistically (e.g. viewing the browser, while running a shell command, while reading 10 code files), improving speed.
* **Browser improvements**: We've shipped browser changes that allow Devin to:
* deal with auto-opening tabs (required for some complex auth flows)
* use multiple tabs (helpful for iteratively comparing 2+ webpages)
* **Local UI Testing**: Devin can better test + visually understand UI changes locally.
* **Customize chat vs workspace width**: Drag to make the chat as narrow or wide as you'd like! The editor in the workspace is also easier to navigate now, with file tree on the left.
* **Repo setup (in [Devin's Workspace](https://app.devin.ai/workspace))**: We verify that all the commands you provide Devin (to run lint, install dependencies, and run tests) run successfully, and Devin will surface in chat if any of these commands don't succeed.
* **Sonnet 3.7 in Devin**: We incorporated Sonnet 3.7 in Devin on 2/24, with optimizations to our use rolling out starting 2/26. In our testing, the new model is the best we have seen to-date on a variety of tasks including debugging, codebase search, and agentic planning.
* **Keyboard shortcuts**: Use **→ ←** or **↑ ↓** anywhere on the session page to step through Devin's workspace progress over time.
* **Devin PR Metrics**: [app.devin.ai/metrics](https://app.devin.ai/metrics) now shows all PRs opened by Devin, even when 2+ PRs were opened in the same session.
* **Faster startup**: Devin only installs dependencies for the repositories needed in a session.
* **Addressing your PR review feedback**: Devin is more reliable at remembering to address *all the review comments you left on its PR.*
* **Misc brain improvements**: Devin is less likely to loop while trying to fix CI/lint failures, is better at planning, is better with git, and many more improvements!
**Devin's thoughts and editor diagnostics are now visible**: In the Follow Devin tab, you'll now see:
* each action Devin took (e.g. "Edited github.py")
* Devin's thoughts explaining *why* the action was taken (e.g. "There was a type error….the fix involves XYZ")
* any editor diagnostics errors present after the action was taken (in red)
This information helps you debug why Devin is stuck or taking a long time. Use it to learn how to best work with Devin, and as you're getting started to make sure issues aren't caused by the way [Devin's Workspace (i.e. machine snapshot)](/onboard-devin/environment) was set up.
**The new Detailed View**:
There's a new "Detailed View" button in the top right corner of the session page!
Use up/down arrow keys to quickly navigate through Devin's actions. Actions are grouped under the plan step (e.g. 009 investigate\_existing\_pattern) they aim to achieve.
Devin's thoughts, action details, and editor diagnostics are shown on the right.
Use this view to dive even deeper into debugging why Devin is stuck or taking a long time.
**Prompt improvement button + customer education via docs.devin.ai**:
Improvements to your instructions to Devin and/or use cases can greatly improve your success with Devin.
Try our in-product "instruction improvement" button immediately improve your instructions to Devin, and receive personalize suggestions on how your instructions could be improved:
We've also revamped our docs at [our documentation](/) to include example good/bad instruction examples, recommended ways of working with Devin, and other Essential Guidelines!
**Improved support for non-English speakers**: Devin is now more reliable with using the user's preferred language.
We also added a translate feature which shows up when non-English languages are detected. We currently support Japanese, Chinese, Korean, Russian, Arabic, and Thai.
**Improved Repo Context**: We've made major improvements to Devin's ability to reason in context in a repository
Devin is now more likely to find all relevant files to edit, will notice and re-use existing code and patterns, and will make more accurate PRs overall. These changes will be gradually rolled out to all users by 1/17/25.
**Introducing Devin enterprise accounts**:
Enterprise accounts enable centralized management of multiple Devin organizations. Admins of enterprise accounts can:
* Manage members and access controls for all organizations
* Centrally manage billing across all organizations
Enterprise accounts are currently available to Devin Enterprise customers.
**Introducing usage based billing**:
Starting January 9, you can now pay-as-you-go to keep building without limits, up to the pay-as-you-go usage limit you set.
Your subscription includes a monthly ACU capacity. Once these ACUs are used, you can pay-as-you-go. You will be billed at the end of your billing cycle or whenever your usage exceeds \$2,000 — whichever comes first.
Set your pay-as-you-go usage limit in Settings > Plans > Manage Pay-as-You-Go Usage Limit or Settings > Usage & Limits > Manage Pay-as-You-Go Usage Limit.
**Solution for Docker storage & performance issues**:
If you use Docker, there's now a solution for storage and performance issues with Docker on Devin's machine. A new version of our VM infra is now enabled by default for new teams. Existing teams can enable it:
* Navigate to Settings > Devin's Workspace > Danger Zone
* Switch to `Large Performant (Beta)` - this will require resetting your machine setup. If you want to opt in to experimental auto-migration, reach out to [support@cognition.ai](mailto:support@cognition.ai) or via [Slack Connect](https://app.devin.ai/settings/support)
**Devin usage best practices**:
We've added nudges throughout our product towards some best practices, including:
* Keeping sessions under 10 ACUs (Devin's performance degrades in long sessions)
* Providing details in your very first instruction to Devin, including (1) specific requirements (2) high level description of the task (3) what Devin should do after making the requested changes - e.g. testing instructions, PR guidelines, or tell Devin to wait for CI to pass without testing locally
* If you find yourself often re-using instructions, add them to Devin's knowledge in Settings > Devin's Settings > Knowledge
**Use Devin's Browser when setting up Devin's workspace (i.e. machine snapshot)**:
It's now easier to get Devin started with testing websites that require login. If you log in for Devin during onboarding with Devin's browser, we'll save the cookie for future sessions (if the cookie expires, you'll need to provide credentials for Devin in Secrets as well).
This also unblocks authentication processes that require visiting a URL on Devin's machine.
**Talk to Devin in Slack - Devin can now respond to audio messages**:
Try verbally explaining your tasks and feedback for Devin! You can now send Devin audio clips via Slack.
# 2026
Source: https://docs.devin.ai/release-notes/2026
**Diff Line Permalinks**
You can now share direct links to specific lines in a Devin Review diff via the URL hash — useful for pointing teammates to exact code locations.
**Slack !agent Renamed to !normal**
The `!agent` Slack bang-command has been renamed to `!normal` for consistency with the standard Devin mode naming.
**Slack Sync Toast Improvements**
The Slack sync notification toast now has clearer copy, can be dismissed per-tab, and includes a "don't remind me" opt-out.
**Service User Automations**
Service users can now create and manage automations via the API, enabling programmatic automation workflows.
**Snapshot Build Trigger**
`snapshot_build:completed` is now available as an automation event trigger, letting you kick off workflows when a new environment snapshot finishes building.
**MCP Run-As-Creator Warning**
Automations now display a warning when a user-scoped MCP server is selected but run-as-creator is turned off, helping avoid permission mismatches at runtime.
**Code-Snippet Telemetry Audit Log**
Changes to code-snippet telemetry settings are now recorded in the customer-facing audit log.
**Security Scan Remediation API**
The v3 API now supports endpoints for remediating security scan findings.
**API Default Devin Version**
API-created sessions can now specify a default Devin version, giving teams programmatic control over which Devin version runs their workloads.
**Git-Backed Blueprints**
Blueprints can now be backed by a Git repository, letting you version-control and collaborate on environment configurations alongside your code.
**Blueprint Permission Descriptions**
Blueprint permission names and descriptions now clearly indicate their scope, making it easier to understand what each permission controls.
**Hover Copy for Tables**
Markdown tables in sessions now display a copy button on hover, letting you quickly copy table contents to your clipboard.
**Bug Fixes**
This release also includes fixes for virtualized Review comments hijacking scroll, diff-viewer partial-expand into file boundaries, collapsed worklog diff-stat clipping in WebKit, desktop VNC reconnection after session wake, terminal LF-to-CRLF conversion on non-PTY flush, PAT-authenticated webhook error comments now being allowed, and various other UI polish improvements throughout the app.
**No-Access Permission Popover**
When your connected account lacks write permission on a repository, Devin Review now shows a clear "no access" popover explaining what's needed instead of silently failing.
**Auto-Review Scoped to Your PRs**
The auto-review user preference now applies only to PRs you author, so enabling it won't trigger automatic reviews on other people's pull requests.
**PR-Link Preference**
Users can now control whether in-session PR links open in the Devin tab, in GitHub, or in Devin Review.
**Persist Model Selection**
Your chosen default model is now remembered when you select it in the agent picker, persisting across page reloads.
**Network Access Requests**
In network-restricted sessions, Devin can now request access to specific domains. The request surfaces to you for approval, removing the need to preconfigure every domain.
**GitLab Mention-Only Comments**
Devin now respects mention-only PR comment settings for GitLab merge requests, reducing notification noise for teams that prefer targeted mentions.
**Slack Thread Sync**
Sessions can now sync messages bidirectionally with Slack threads. A confirmation prompt appears for busy threads, and global sync is enabled by default for new sessions.
**Unarchive on Mention**
Mentioning @Devin in a Slack thread for an archived session now automatically unarchives it so you can continue the conversation.
**Slack Commands Anywhere**
Slack bang-command macros (like `!ultra` or `!fast`) are now recognized anywhere in your message, not just at the beginning.
**Inline Mute Reminder**
The mute/quiet-mode reminder now appears inline in the session footnote instead of as a separate message, reducing clutter.
**MCP Read-Only Mode**
The secure-mode profile UI now includes a toggle for restricting MCP servers to read-only access.
**Improved Webhook Trigger Setup**
The automation editor now shows the webhook URL and secret inline before you save, so you can configure the external service first.
**Usage Analytics: PR Ratio Chart**
A new weekly Devin PR ratio chart with repository filtering is available on the Repositories analytics tab, along with CSV export and improved number formatting across all analytics tables.
**Skills Analytics**
A new enterprise-level skills analytics page shows skill usage patterns, adoption rates, and performance across your organization.
**ACU Limit Audit Trail**
Organization ACU limit changes are now recorded in the customer-facing audit log, giving enterprise admins full visibility into limit adjustments.
**Read-Only Scan Profiles**
Enterprise-managed scan profiles now render as read-only in child organizations, preventing accidental modifications to centrally managed security policies.
**Analytics Page Improvements**
Analytics time-range and filter selections now persist in the URL for easy sharing, and the organization picker in productivity dashboards supports pagination for enterprises with many organizations.
**Redesigned Environment Page**
The environment page is redesigned with platform filters, an active snapshot grid layout, and platform-specific icons for better discoverability of your build configurations.
**Cross-Platform Repository Cloning**
Organizations can now clone configured repositories on every available build platform, not just the default — enabling consistent environments across Linux, macOS, and other platforms.
**Bug Fixes**
This release also includes numerous bug fixes across the platform — including fixes for the Slate editor crash on mobile, voice recording button visibility on narrow screens, Review header alignment, IDE frame layering over dialogs, MCP OAuth redirect handling, mentions preserving spaces correctly, false "Installation out of date" banners on fresh MCP installs, blueprint drawer state preservation, unsubscribe link routing for enterprise emails, and various UI polish improvements throughout the app.
**Archive/Unarchive Sessions from Command Palette**
Sessions can now be archived or unarchived directly from the Cmd+K command palette on session pages, without navigating to session settings.
**Run-Once Automation Schedules**
Automations now support a run-once schedule option for one-time executions, in addition to recurring schedules.
**MCP "Installation Out of Date" Banner**
Installed MCP integrations now surface an "Installation out of date" banner with one-click marketplace refresh when an update is available.
**Post-Build Section for Blueprints**
The blueprint editor now includes a Post Build guide item for organization and enterprise blueprints.
**Readable PR Review Label Colors**
PR Review labels now render with readable text in both light and dark themes.
**Usage Analytics Improvements**
The Consumption Dashboard now uses bar charts for the session activity chart, combines active and review users into a single chart with a metric selector, adds a counts/percentages toggle, and normalizes the per-tab export buttons to a consistent "Export" control.
**Pin/Unpin Sessions from Command Palette**
Sessions can now be pinned or unpinned directly from the Cmd+K command palette for faster access to important sessions.
**Start Session in Background**
A new "Start session in background" button on the home page lets you kick off a session without navigating away from your current view.
**View Latest Version for File Tabs**
File tabs in sessions now include a "View latest version" affordance, making it easy to jump to the most recent version of a file Devin has edited.
**Security Findings in Ask Devin**
When using Ask Devin within PR Review, the AI context now includes security findings, enabling more security-aware assistance during code review conversations.
**"Repo Rule" Badge on Lifeguard Findings**
Lifeguard bugs that were flagged from repository rule files now display a "Repo rule" badge, helping reviewers distinguish rule-sourced findings from general analysis.
**Split View Auto-Disable on Narrow Panels**
The Split view option in PR Review is now automatically disabled when the panel is too narrow to display it usefully, preventing layout issues on smaller screens.
**Usage Analytics — Top 10 Rankings**
Consumption analytics now includes Top 10 ranking charts for repositories (in Reviews usage) and for users and service users (in the Consumption tab), giving admins quick visibility into where usage is concentrated.
**Enterprise Wide Snapshot Build Schedule**
Enterprises can now configure a snapshot build schedule, controlling when environment builds run. Blueprint settings also display drift warnings when the environment is out of sync, with actionable buttons to trigger a re-sync.
**Add Enterprise Members When SSO Is Required**
Org admins can now add existing enterprise members to their organization even when SSO is required for enterprise membership.
**ACU Billing Schedule Warning**
Enterprises consuming ACUs without an active billing schedule now see a warning, helping admins avoid unexpected usage without payment coverage.
**MCP Marketplace Expansion**
48+ new engineering MCP connectors are now available, including Miro, Mixpanel, Honeycomb, Postman, monday.com, Klaviyo, and many more. 42 previously-beta MCPs have graduated to general availability. New additions include LaunchDarkly (with hosted OAuth), Fathom, Attio, and Calendly. Google Drive MCP is now available to all users.
**Dedicated MCP Management Page**
Enterprise admins now have a dedicated MCP management page with per-server detail views showing organization-wide and per-session usage, replacing the previous side panel.
**GitLab User Identity Linking**
Link your personal GitLab account so Devin creates Merge Requests under your GitLab user instead of the Devin identity. For enterprises with self-hosted GitLab instances, admins can register a GitLab OAuth Application under Advanced settings to enable user linking for self-hosted instances.
**Devin Review for GitLab**
Devin Review now supports GitLab Merge Requests. Intelligent diffs, inline comments, and AI chat all work on GitLab MRs. Your GitLab MRs appear in the sidebar organized by status (Needs your review, Returned to you, Approved, Waiting for reviewers, Drafts). GitLab repos can be added to auto-review in Review settings.
**File Path Visible During Streaming Edits**
The full file path is now shown while the edit tool is actively streaming changes, so you always know which file Devin is modifying.
**Deduplicated File Tabs with Version Switcher**
When multiple versions of the same file exist, they are consolidated into a single tab with a version dropdown instead of cluttering the tab bar.
**Slack Formatting in Webapp Comments**
Bold, links, code, and other Slack formatting now renders correctly in webapp thread comments forwarded from Slack.
**PR Context Visible While Waiting for CI**
PR-ready context is now shown while CI checks are still running, so you can start reviewing before checks complete.
**Improved Feedback Controls**
Both thumbs-up and thumbs-down buttons are now always visible on messages. Session-level feedback and a qualitative feedback modal make it easier to share detailed feedback.
**Incremental Generation Steps in Automation Input**
The AI-assisted automation input now shows incremental generating steps as it builds your automation configuration.
**Public Repos Shown as Disabled in Repo Picker**
Public repositories now appear greyed out in the repo picker instead of being hidden, making it clear they exist but are not selectable.
**"User Only" PR Author Enforcement**
A new "User only" option is available in the "Open PRs as" setting. When selected, Devin will only create PRs under the user's identity and will fail if their Git account is not connected. Automations and service users fall back to the Devin identity. Enterprise admins can enforce this setting across all organizations.
**Cmd+K: Switch Organization & Copy Org ID**
The command palette (Cmd+K / Ctrl+K) now supports switching between organizations and copying your org ID without navigating to settings.
**Sidebar: Unpin & Remove-from-Folder Quick Actions**
The sidebar archive button has been replaced with context-aware quick actions: pinned sessions show an "Unpin" button, and sessions in a folder show "Remove from folder." Archive remains accessible via the context menu.
**Wiki: Clean Page URLs**
Wiki pages now use cleaner `/page/` routes instead of the previous longer format, making links easier to share and bookmark.
**Automations Sidebar**
Automations now appear in the main navigation sidebar for quicker access to your configured automation rules.
**Japanese Translations: 100% Coverage**
All remaining Japanese translation keys have been filled across the platform, bringing Japanese language coverage to 100%.
**Ask Devin: @repos Picker Scoped to Search Repos**
The @repos file picker in Ask Devin now only shows repositories from your selected search scope, reducing noise when referencing files.
**Suggested Knowledge Visible in Session Worklog**
When Devin suggests a knowledge item during a session, it now appears as a standalone event in the worklog for easier visibility and review.
**Devin Review: Comment Language Selector**
When reviewing PRs in Devin Review, you can now select the language for AI-generated review comments (e.g., English, Japanese, Spanish).
**Devin Review: Security Findings**
All Devin reviews now include a security findings section. The security reviewer respects your repository's SECURITY.md file to tailor its analysis to your project's security policies.
**Devin Review: Code Owner Review Block**
The merge bar now shows when a PR is blocked waiting for code owner approval, making it clear which reviews are still required before merging.
**Devin Review: GitHub Alert Callouts**
GitHub-style alert callouts (note, warning, caution, etc.) in markdown files now render with proper styling in Devin Review.
**Slack: Preceding Thread Messages as Context**
When Devin is mentioned in a Slack thread, it now receives the preceding thread messages as context, enabling more informed responses without needing to repeat background information.
**Slack: !agent Bang Command**
Use `!agent` in Slack messages to Devin to explicitly route your request to a full Agent session instead of Ask mode.
**Default Sync with Slack Per Session**
New sessions can now default to syncing messages with Slack, configurable at the organization level so teams stay in the loop automatically.
**Automations: Slack Channel Updates**
Automation run results can now be posted to a designated Slack channel, keeping your team informed of automated session outcomes.
**Linear: Projects Filter for Triggers**
When configuring Linear-triggered automations, you can now filter by Linear project to scope which issues trigger Devin sessions.
**MCP Server: View Logs on Error**
MCP plugin error cards now include a "View logs" button linking directly to the MCP output channel, plus detailed error information surfaced in the plugin status card for faster debugging.
**Axiom MCP Server**
A new official Axiom MCP integration is available, allowing Devin to query your Axiom logs and observability data during sessions.
**Structured Output Schema for Playbooks**
Playbooks now support a structured output schema, enabling Devin to return results in a defined JSON format for easier programmatic consumption.
**Enterprise Knowledge Limit Increased to 300**
The maximum number of enterprise knowledge items has been increased from 200 to 300.
**Session Folders**
Group sessions into named folders in the sidebar. Move sessions via drag-and-drop or the three-dot menu. Folders are personal, so each user defines their own layout.
**!ultra and !fast Mid-Session Toggles**
You can now start sessions on Devin Ultra directly from Slack with the `!ultra` command. You can also switch between Ultra and Fast modes mid-session by typing `!ultra` or `!fast` in the Slack thread.
**Smarter Emoji Reactions**
Devin now only adds sleep/archive emoji reactions to messages that are explicit sleep or archive commands, reducing noise on other status messages.
**Custom OAuth for Marketplace MCP Servers**
Marketplace MCP servers that require organization-specific OAuth client credentials can now be configured directly from the integrations page.
**Markdown File Preview in Worklog**
Markdown files created during a session now render with a preview toggle, letting you see the formatted output alongside the raw content.
**Web Search Enterprise Setting**
Enterprise admins can now enable or disable Devin's web search capability via a new toggle in enterprise settings.
**"Users" Tab Renamed to "Members"**
The org membership page tab now reads "Members" for clarity.
**Devin Review: Pending PR Reviews Canceled on New Commits**
When new commits are pushed to a PR, any in-progress Devin reviews are now automatically canceled. The PR Review API also reflects this with a new `cancelled` status on review objects.
**Large Pastes Automatically Attached as Files**
Pasting large content (10k+ characters) into the composer now automatically attaches it as a file, regardless of existing message length. This keeps your prompt clean and avoids hitting size limits.
**User Mentions Rendered as Styled Links**
@mentions in session messages are now displayed as styled deeplinks instead of the raw "@Name (ID)" format.
**"Sent from Slack/Teams/Linear" Indicator**
Follow-up messages that originated from an integration now show a small badge indicating their source (e.g., "Sent from Slack").
**Echo Message to Slack Toggle**
A new toggle lets you bypass Slack message suppression and echo your webapp messages into the Slack thread, even in quiet-mode sessions.
**Improved Slack Message Rendering**
HTML entities in Slack messages are now properly decoded outside of code blocks, fixing garbled characters in forwarded content.
**Official Figma MCP Integration**
The official Figma MCP server is now available with suggestions enabled. The previous unofficial integration has been deactivated.
**IdP Group Role as First Assignment**
Org-scoped IdP groups can now use a group role as their very first role assignment, removing the previous requirement to set an individual role first.
**Success Confirmation After Org Creation**
Creating a new organization within an enterprise now shows a clear success state, confirming the operation completed.
**Start a New Session with This Prompt**
The first message in a session now shows a "Start a new session with this prompt" button, replacing the previous "Start duplicate session" menu action. Reuse any prompt for a fresh session in one click.
**Playbook Devin Mode**
Playbooks can now specify a Devin mode (e.g., Fast or Normal). When launching a session from a playbook, the agent picker reflects the playbook's configured mode.
**Configurable Auto-Reload Threshold**
You can now customize the balance threshold that triggers auto-reload in the billing usage modal.
**Jira Webhook Failure Recovery**
When a Jira webhook connection fails, a banner now appears in your Jira integration settings with a one-click reconnect action to restore the connection.
**Devin Review: Action-Required Flags on PRs by Default**
Devin Review now posts orange action-required flags to your GitHub pull requests by default when issues are found that need investigation.
**Webhook URL in Automation Editor**
The automation editor now displays the webhook URL directly under the webhook trigger, so you can copy it without navigating away.
**Improved Slack Message Formatting**
Devin's messages in Slack now use full markdown formatting for all users, providing richer text rendering with proper links, code blocks, and lists.
**Send Messages While Session Is Queued**
You can now send messages to a session that is waiting for capacity. Your messages will be delivered as soon as the session starts.
**Persist Chat Draft Across Panel Close**
Draft messages in the session composer are now preserved when the panel is closed and reopened, so you won't lose work in progress.
**Session Counts on Collapsed Sidebar**
Session counts are now visible on collapsed sidebar section headers, giving you a quick overview without expanding each section.
**Devin Review: Connect Personal Account from Blocked Controls**
In Devin Review, when Review, Merge, or comment actions are blocked because your personal identity isn't linked, you can now connect your GitHub or GitLab account directly from the blocked control without navigating to settings.
**Active Todo in Slack Plan Header**
The collapsed plan header in Slack threads now shows the currently active todo item, so you can see what Devin is working on at a glance.
**Detect @Devin Mentions After Inviting the Bot**
When you tag @Devin in a channel where the bot isn't present and then invite it, Devin now detects and responds to your original mention.
**Lower Minimum Per-Session Limit for Automations**
The minimum per-session limit for automations has been lowered from 3 to 1, giving you finer-grained control over automation budgets.
**Scratchpad Moved Under MCPs in Automations**
The scratchpad section in the automation editor has been moved to the top level under MCPs for easier discoverability.
**Prompt to Reconnect Linear**
When creating a Linear automation with an expired personal token, you'll now be prompted to reconnect before proceeding.
**Personal Automations**
You can now create personal automations that run under your own identity. Personal automations include a dedicated toggle, permission model, and badge in automation lists. The legacy Schedules page now shows migration guidance to help you transition to the new Automations system.
**Devin Review: Enrolled Users, Spend Limits, and GHES/GitLab Support**
Devin Review now includes an enrolled users management table in settings, a redesigned per-PR spend limit that acts as a soft block (you can re-enable if needed), and pinned section titles above file headers in the embedded review view. "Open in Devin Review" is now available for GitHub Enterprise Server and GitLab PRs.
**Pre-Approve Testing**
A new user preference lets you always approve testing for future sessions, so Devin can test changes without prompting each time. Access it from your profile settings or via the split-button on the "Test the app" action.
**V3 API: Organization Members and Automations**
New org-scoped `GET /v3beta1/organizations/{org_id}/members` endpoint for listing organization members. A full automations CRUD API is also now available via v3.
**SSO/SCIM: JIT Provisioning and Enterprise Redirect**
SSO just-in-time provisioning can now be toggled on or off, with group sync gated separately. SSO-only enterprise users are now automatically redirected to their enterprise webapp host on login.
**Settings Improvements**
The Repositories page now supports pagination. Search results in the settings sidebar are deduplicated with indent guides. A permission-gated "Add repositories" button and empty state have been added to Skills & Rules. Terminology has been updated from "org" to "organization" throughout.
**Child Sessions: Tree Connector**
Child sessions now display with a tree connector in the sidebar, making parent-child relationships visually clear.
**Bug Fixes**
Persisted orange sidebar indicator for quota-suspended sessions. Made question answer submission optimistic, removing click lag. Fixed send button centering at fractional zoom levels. Added email fallback for IdP users without a name in the session list. Fixed cross-org router links dropping query string and hash. Added cost column to scheduled sessions past sessions list. Cleared "Approve session" attention dot once the session is read. Restored question selections when an optimistic submit fails. Pinned bulk-edit bar to viewport bottom centered over content column. Included enterprise members in the session creator filter.
**New Command Palette**
The redesigned command palette is now available with improved search, keyboard navigation, and settings integration. Access it with Cmd+K (Mac) or Ctrl+K (Windows/Linux) to quickly navigate pages, settings, and actions.
**Automations: Files-Changed Trigger**
The automation builder now supports file-change triggers for GitHub push events. You can configure automations to run only when specific files or directories are modified in a push. Pull request triggers also automatically add the appropriate action filter.
**PR Review Sidebar Restructure**
The in-session PR review sidebar has been redesigned with collapsible sections, portalized toolbar actions, and a new diff settings menu replacing the previous split/unified toggle.
**Raindrop.ai MCP in Marketplace**
The Raindrop.ai MCP server is now available in the MCP marketplace.
**Disable Review/Analysis for Merged and Closed PRs**
The review and analysis trigger is now disabled for already-merged and closed pull requests, preventing unnecessary processing.
**Wake Sleeping Sessions on Retrigger**
Sleeping sessions now automatically wake up when a PR comment retrigger is posted, so you no longer need to manually restart them.
**Devin Review: Respect CI Monitoring Setting**
Devin Review now correctly honors the "Disable automatic comment and CI monitoring" checkbox for merge-conflict notifications.
**Bug Fixes**
Fixed intermittent Recent repos display issue. Fixed diff view flashing two-column layout before snapping to unified view. Added DeepWiki button to repo indexing header. Fixed infinite page spinner when a user is not a member of the resolved organization.
**Platform Default Settings**
Org admins can now set a default platform (Linux or Windows) for all new sessions, and individual users can star their personal preference. The default platform is honored across all session creation methods, including Slack, Linear, Jira, API, and automations.
**Slack Channel Override**
Type `!channel #channel-name` in Slack to override which channel Devin spawns its response thread in for that session.
**MCP OAuth Resource Parameter**
MCP OAuth flows now forward the RFC 8707 resource parameter, fixing authentication for MCP servers that require resource indicators (such as Snowflake and Runlayer).
**Custom RRULE Schedule Input**
Automation schedules now support pasting raw RFC 5545 recurrence rule strings directly, with validation and auto-detection, for schedules that go beyond the visual editor.
**GitLab Interactive PR Review**
GitLab repositories now support interactive PR review — Devin can post review comments and resolve threads as you — when the read-write GitLab connection is enabled.
**PR Review Status API**
A new `GET /v3/enterprise/pr-reviews` endpoint lets you poll Devin Review status programmatically, with optional commit SHA filtering.
**In-App Support Dialog**
"Contact support" now opens an in-app dialog where you can submit a ticket directly, replacing the previous email link.
**Inline Repo Permission Toggle**
You can now toggle repository permissions between "Read only" and "Read & write" directly from the permissions table, without needing to remove and re-add the repository.
**Enterprise Max Concurrent Snapshot Builds**
Enterprise admins can now set a maximum concurrent snapshot builds limit in enterprise settings, with backend enforcement to prevent build queue overload.
**GitLab OAuth Scope and Token Refresh**
GitLab user OAuth now requests the broader `api` scope for better compatibility, and tokens are automatically refreshed before they expire.
**Network Config Editor Redesign**
The network policy editor has been redesigned as an inline-editable list with multi-line paste support and duplicate detection, fixing the issue where domains typed but not submitted were silently lost on save.
**GitHub Connection No Longer Required for Automations**
GitHub-triggered automations no longer require a personal GitHub connection, allowing teams to rely on the org-level connection exclusively.
**PostHog MCP**
The PostHog MCP server is now available in the MCP marketplace, enabling product analytics integration directly from Devin sessions.
**Other Improvements**
Automation sessions now appear in a dedicated "Automations involving you" sidebar folder instead of being auto-pinned. Session @-mentions in chat are clickable links. A new Cmd+K action copies the session URL to clipboard. Archive undo now restores cascade-archived child sessions. MCP connection errors are surfaced instead of silently swallowed, and a new disconnect action removes stored OAuth tokens. Integration mappings for Linear, Slack, Teams, and Jira are validated at save time. The repo selector shows a Recent section and org labels. Tool calls in Watch Devin Work display timing. Automation-spawned sessions can be renamed by any org member. Integration page actions are permission-gated. File URLs in the timeline link to the correct git provider. GHES installations resolve bot identity per-config and scope webhook processing to the owning account.
**Collapsible Session Folders**
Sessions in the left sidebar can now be organized into collapsible folders. Click the chevron to expand or collapse a folder, and your preference is persisted per organization.
**Archive All Sessions**
A new "Archive all" option in the sidebar menu lets you archive all sessions or asks at once, with a confirmation dialog and undo support. Child sessions skip the confirmation step for faster cleanup.
**Sub-Devin Session Filter**
The sessions page now includes a "Sub-Devin" filter that lets you view child sessions independently, with support for combined parent and child filtering.
**Default Member Roles**
Enterprise admins can now configure default roles that are automatically assigned to new organization members on join, with badge display in the members list and safeguards against accidental deletion of roles in use.
**GHES App Registration Restriction**
GitHub Enterprise Server app registration is now restricted to one app per account and host combination, preventing duplicate registrations with a clear error message when a conflict is detected.
**Copyable Organization ID**
Your Organization ID is now displayed with a one-click copy button on both the Settings → General and Settings → Devin API pages, making it easy to share with support or use in API calls.
**Admin-Enforced Settings Lock Icon**
Settings that have been locked by an admin now display a lock icon with an explanatory tooltip, replacing the previous banner-style callout for a cleaner interface.
**MCP OAuth Client Credentials**
When installing MCP integrations that don't support Dynamic Client Registration (such as Salesforce), you can now supply your own OAuth client credentials directly in the configuration flow.
**Tavily MCP in Marketplace**
Tavily web search is now available in the MCP marketplace, providing AI-optimized real-time web search and content extraction capabilities for your Devin sessions.
**PR Actions & Auto-Review Settings**
The PR actions menu in Devin Review has been restored with an auto-review toggle and personal settings popover, giving you quick access to review preferences without leaving the review interface.
**Checks Tab Always Visible**
The Checks tab is now always visible in the embedded PR review experience, and the merge-status popover properly restores the checks UI so you can always see CI status at a glance.
**Improved @-Mention Search**
The @-mention search in the chat input now uses fuzzy bag-of-words matching, so queries like "setup-dev" will find "setup-devin-dev". Repositories are also ranked first in the dropdown for faster access.
**Slack Improvements**
This release includes several Slack integration improvements: channel names now resolve correctly even for channels you haven't joined, mentions display as styled blue pill badges, unmapped channel messaging is clearer, the Watch channel option appears at the top of the trigger submenu, stale channel lists are fixed, and duplicate webapp-to-Slack thread posts are suppressed.
**Slack Security Hardening**
Enterprise channel isolation for Slack thread-attach has been hardened with runtime authorization that validates channels against enterprise channel preferences, preventing cross-organization channel access.
**Video Recording Download**
You can now download session recording videos directly from the video player controls.
**Miscellaneous Improvements**
This release also includes: file re-upload fix, archived chip now clickable for non-owners with unarchive permission, network config available for finished sessions, test recording viewer close button visibility fix, settings search improvements, back buttons on MCP marketplace and knowledge detail pages, deep mode callout hidden when disabled, repo name truncation so filter stays visible, mobile agent selection single-tap fix, Devin Review file scroll and merge status fixes, skills link fix, Slack support channel in help popover, and wait tool rendered as standalone worklog event.
**Snapshot Build Delete**
You can now delete snapshot builds directly from the build history menu or detail page, with a confirmation dialog to prevent accidental removal. This makes it easier to clean up old or failed builds without navigating away from your environment settings.
**MCP Multiline Environment Variables**
When configuring MCP server connections in the marketplace, you can now enter multiline values for environment variables — such as PEM private keys, JSON service account credentials, and Snowflake key passphrases — without needing to escape or flatten them first.
**Sub-Devin Sidebar Improvements**
Sub-Devin sessions spawned by automations can now be pinned and reordered independently in the sidebar, and they appear expanded by default so you can see their status at a glance without clicking to expand.
**Voice Recording While Devin Is Working**
The microphone button now appears alongside the stop button while Devin is actively working, allowing you to record and send voice follow-ups without waiting for Devin to finish its current task.
**Settings Redesign**
Settings pages have been redesigned with a hub-style layout, improved search across all settings, and a streamlined navigation structure. An announcement dialog introduces the new experience on first visit, and legacy settings URLs automatically redirect to their new locations.
**Archive Active Session Warning**
When you archive a session that is still actively working, a warning dialog now informs you that archiving will put both the session and any child sessions to sleep before proceeding.
**Share Session on Mobile**
A new "Share session" action is available in the sidebar session menu on mobile devices, making it easy to share session links directly from your phone.
**Devin Review Mobile Improvements**
On mobile, tapping "Ask Devin" on a comment now opens the chat panel directly, pull-to-refresh is available on the review scroll container, and bug/flag tap targets have been fixed so they open on the first tap and reveal the associated comment.
**V3 API Enhancements**
The V3 API now supports filtering sessions by repository name via the `repo_names` parameter, filtering by archive status via `is_archived`, specifying `devin_mode` when creating sessions, and setting `folder_id` and `is_enabled` when creating or updating knowledge notes.
**Enterprise Member Invite Acknowledgement**
When inviting new members to an enterprise organization from the admin panel, an acknowledgement modal now confirms the invitation details before it is sent.
**Rename Context to Skills & Rules**
The "Context" section in settings has been renamed to "Skills & Rules" to better describe its purpose of managing Devin's skill definitions and behavioral rules for your organization.
**Blueprint Migration Improvements**
The blueprint migration page now displays per-repo session counts, supports filtering by repository, and shows a completed state when all migrations are finished, making it easier to track progress across large organizations.
**Miscellaneous Improvements**
This release also includes: autofocus on confirmation buttons in archive dialogs, plan artifact button polish, configurable CI status in search results, debounced enterprise snapshot builds, server-side event deduplication to prevent duplicate delivery, pinned sessions remaining visible when automations are hidden in the sidebar, removal of the misleading "Action required" label for Python sessions awaiting instructions, schedule list cap raised from 50 to 200, monitor trigger cleanup when adding new Slack triggers, repo setup status fix for Dynamic Repo Setup organizations, "Approve session" visibility in the sidebar even after all PRs are merged, inline image deduplication by URL, streaming scroll stability fix, high-resolution home screen icon for Android, beta Vite mode build fix, fast mode loading indicator reset on session switch, and sidebar hover cards on expanded non-active sections.
**Devin Review API**
You can now trigger Devin Review programmatically via the REST API. Use `POST /v3/organizations/{org_id}/pr-reviews` with a service user token or PAT to initiate reviews from CI pipelines, scripts, or custom integrations.
**Mermaid Diagram Rendering**
Mermaid code blocks in session messages now render as interactive SVG diagrams with zoom and pan controls, making it easier to explore flowcharts, sequence diagrams, and architecture diagrams that Devin produces.
**Close PRs on Session Archive**
When archiving a Devin session, a dialog now appears where you can optionally close any linked GitHub pull requests, keeping your repository tidy without manual cleanup.
**Per-PR Auto-Review Toggle**
You can now enable or disable automatic Devin Review on a per-PR basis from the PR actions menu, giving you granular control over which pull requests receive automated review without changing your organization-wide settings.
**Sidebar Session Notifications**
The session sidebar now shows persistent status labels, such as "PR created," "Awaiting instructions," or "Approve session," alongside timestamps so you can quickly see what each session needs. Sessions also display read/unread indicators: an orange dot marks sessions with unread updates, and the dot clears once you open the session.
**Service User Permission Management**
Enterprise administrators can now assign the `ManageAccountServiceUsers` permission in custom roles, providing granular control over who can create and manage service users and API keys within the organization.
**Ask Devin in PR Discussions**
The "Ask Devin" button is now available on discussion tab thread comments in Devin Review, making it easy to ask follow-up questions or request changes directly within review conversation threads.
**MCP Secret Scoping**
When adding secrets for custom MCP server connections, you can now choose between personal scope, visible only to you, or organization scope, shared with your team, via a new scope selector in the creation dialog.
**Clickable Diff Stats in Worklog**
Clicking the +N/-M diff stats in worklog group headers now opens a scoped diff tab showing only the file changes from that specific group, making it faster to review exactly what changed at each step.
**Repo Selector Fix**
The select-all checkbox in the repository selector now correctly toggles only the repositories matching your current search filter, rather than selecting all repositories regardless of the filter.
**Slack Tool Use in Worklog**
When Devin interacts with Slack during a session (sending messages, adding reactions, reading channels), these actions now appear in the worklog and progress UI with a dedicated Slack icon and action details.
**Settings Search Improvements**
Settings pages now use a centralized item registry with keyword-driven search, delivering more accurate and comprehensive results when searching across all settings pages.
**Command Palette Search**
Fixed search ordering in the command palette so results rank correctly, and resolved a scroll view issue in the search results window.
**Review Commit Links**
Fixed commit links in Devin Review to point to the correct URL path, and improved status indicators for review progress.
**Default Branch Detection**
Fixed an issue where repository indexing could use the wrong branch as the primary branch instead of the actual GitHub or GitLab default branch, which could affect DeepWiki and search results.
**Stacked Review Permissions**
Enterprise admins can now assign tiered PR Review access levels to their organization members: manual-only review, automatic review on PR creation, or automatic review on every push. This gives administrators granular control over how and when Devin Review engages with pull requests across their organization.
**Skill Slash Commands**
You can now invoke skills by typing `/name` in the prompt input, in addition to the existing @mention syntax. Skills are grouped by repository in the dropdown for easier discovery.
**Auto-Attach Large Paste**
Pasting a large block of text into the prompt input now automatically attaches it as a file instead of filling the text box, preserving any message you've already typed.
**Jira Project Mapping Redesign**
The Jira project mapping modal has been redesigned with a fixed header and scrollable content area, making it easier to configure mappings for organizations with many Jira projects.
**Auto-Fix Includes CI Checks**
The "Auto-fix with Devin" button on pull requests now includes failing CI check names in the prompt alongside review findings, giving Devin more context to resolve issues in a single pass.
**Linear Team Mapping Improvements**
The default organization is now optional when configuring enterprise Linear team mappings, and unmapped teams can be explicitly cleared to "None" instead of requiring a catch-all mapping.
**Session Origin in API**
The v3 API session response now includes an `origin` field indicating how the session was created (webapp, Slack, API, or CLI), making it easier for API consumers to categorize and filter sessions programmatically.
**Deleted Orgs in Enterprise Sessions API**
Enterprise session endpoints now support an `include_deleted_orgs` parameter, giving enterprise admins visibility into sessions from organizations that have been removed.
**Snapshot Revert for Declarative Setup**
Users with the ManageOrgSnapshots permission can now revert an organization from declarative environment configuration back to classic configuration, without needing the broader ManageOrgSettings permission.
**Revamped Blueprint Authoring Experience**
The blueprint editor has been redesigned with a shared layout, per-section play buttons, and a bottom terminal drawer. You can now deep-link directly into a repo's blueprint editor, making it faster to author and test environment setups.
**Enterprise Commit Email Lock**
Enterprise admins can now require all member commits to use the user's primary email. The lock is enforced across snapshot setup, session creation, and PR digest commits, helping enterprises keep commit attribution consistent for audit and compliance.
**PR Auto-Close Removed**
Devin sessions no longer automatically close their pull requests when the session ends. Open PRs now stay open by default so you can manage their lifecycle yourself, with no surprise closures.
**Hybrid Comment Mode in Devin Review**
When Devin Review is opened alongside a Devin session, review comments now default to hybrid mode — anchored to specific lines where possible and falling back to file-level comments otherwise — instead of forcing one or the other.
**Auth-Type Badges in Git Connections**
The git connection filter dropdown on the repository permissions page now shows a PAT, App, or OAuth badge next to each connection, making it easier to disambiguate connections that share a name.
**Slack Trigger Message in Sessions List**
Sessions started from Slack now display the user's triggering Slack message in the sessions list instead of the system prompt, making it easier to identify Slack-launched sessions at a glance.
**PR Digest List Redesign**
The PR digest list has been redesigned with a cleaner layout that matches the sessions list view, making it easier to scan and navigate through pull requests.
**Double-Click File Attachment Picker**
Double-click the plus button in the prompt input to directly open the file attachment picker, skipping the intermediate menu.
**Sensitive Toggle for Secrets**
When Devin requests a secret, you can now toggle whether the value should be masked (sensitive) or visible, instead of it always defaulting to masked.
**Merged Multi-Edits in Progress Tab**
Consecutive file edits to the same file are now merged into a single entry in the progress tab, showing a combined diff from the original to the final version instead of individual per-edit diffs.
**Session Category and Subcategory in API**
The v3 API session response now includes category and subcategory fields. A new category filter is available on session list endpoints, and session exports also include these fields.
**Wide Markdown Tables in Chat**
Markdown tables in Devin's chat messages can now extend beyond the chat column width, preventing cramped multi-column tables from being unreadable.
**SSO Connection Picker**
Organizations with multiple SSO connections for the same email domain now see a picker on the login page instead of being auto-redirected to the first match, letting users choose the correct identity provider.
**MCP OAuth Token Expiry Warnings**
Invalid or expired MCP OAuth tokens are now flagged with warning banners in the integrations UI. A reconnect button lets you re-authorize without navigating away from the page.
**Repository Permissions Decoupled from Git Integrations**
Repository permissions are now managed separately from git integration settings with a view/manage split, giving admins finer-grained control over who can modify repository access versus who can manage the underlying git connection.
**View Consumption Permission**
A new ViewAccountConsumption permission separates read access to usage and consumption data from billing write access, allowing admins to grant visibility without full billing control.
**Attachments in Question Answers**
File attachments are now included when you answer Devin's prompts. Previously, attached files were silently dropped.
**MCP Auth Status Feedback**
MCP authentication requests now show success or error status in both the webapp and Slack after completion, so you know immediately whether authorization succeeded.
**Merge Time Reduction in Review**
The Devin Review page now displays the merge time reduction percentage, showing how much faster PRs are merged with Devin Review enabled.
**PR Digest for Disconnected Users**
The Review page now shows a read-only digest of PRs from your Devin sessions — including open, draft, merged, and closed PRs — even if you haven't connected GitHub yet.
**GitHub Enterprise Server in Review**
GitHub Enterprise Server instances can now be selected in the Review page's Link GitHub flow, and GHES organizations appear in the Devin Review org selector.
**Review Permissions Enforcement**
Repository-level review permissions are now enforced, giving admins control over which repositories Devin Review can access.
**IDP Groups Management**
Enterprise settings now include a management UI for Identity Provider (Okta) groups, letting admins map groups to roles, view group members, and detect user conflicts with existing role assignments.
**Secure Mode Description**
The Secure mode description in enterprise settings has been rewritten to more clearly explain what Secure mode does and when to use it.
**WikiGenerationItem Card**
A new card is now displayed in sessions when the generate\_wiki MCP tool is invoked, giving better visibility into wiki generation progress.
**GHES Links in Integrations**
GitHub Enterprise Server user account links have been moved to the Integrations section of your profile for easier access.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish: sessions now indicate which are in an "Action Required" state, fixed the playback speed dropdown not opening on click, resolved invisible text in chat inputs on light backgrounds, fixed sidebar glyph flickering, corrected the Context Growth chart x-axis to use continuous datetime, removed checkboxes from combobox options, fixed seat type dropdown clipping, improved seat invitation copy for proper singular/plural phrasing, clarified the "available full seats" invite warning, updated flex seats to show as unlimited on the members page, and hid the Connect GitHub banner for GitLab MRs and during the Review intro overlay.
**Close PR or Convert to Draft in Review UI**
The PR review merge bar now includes options to close a PR or convert it to a draft directly from the review page.
**Inline Session Rename**
Sessions can now be renamed inline directly in the sidebar without opening a dialog.
**Smart Table Column Sizing**
Tables throughout the app now use content-aware column width sizing for better readability.
**Faster Sidebar Session Loading**
The sidebar now lists sessions faster and more reliably, with improved rendering performance and optimistic updates when creating new sessions.
**Datadog Remote MCP Server**
Datadog is now available in the MCP marketplace as a remote MCP server with OAuth-based authentication, so Devin can query your Datadog dashboards and metrics directly.
**ACP Summarizer**
Agent Client Protocol now supports a summarizer method for generating session summaries programmatically, useful for integrations that need a concise recap of what Devin accomplished.
**Granola MCP Server**
The Granola MCP server is now promoted out of beta, letting Devin access your Granola meeting notes during a session.
**Pagination and Search for Review Settings**
Enterprise review settings now support pagination and search for repository and user lists, making it easier to manage large configurations.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish, including a proper 404 error page for invalid URLs, frontend performance optimizations, and assorted stability improvements across the webapp.
**Theme Selector Generally Available**
The theme selector is now generally available, with system theme as the default so Devin automatically matches your OS light or dark mode.
**Wiki Effort Level Descriptions**
When choosing a DeepWiki effort level, each option now shows its expected ACU range so you can pick the right trade-off between cost and depth with confidence.
**DeepWiki Cost Breakdown Modal**
The DeepWiki cost breakdown modal is back, giving you an ACU-level view of where a wiki generation spent its budget.
**Cancel In-Progress Snapshot Builds**
You can now cancel an in-progress snapshot build directly from the snapshot list without waiting for it to finish or fail.
**Snapshot Blueprint Ordering**
Snapshot detail rails and repository-level blueprints now respect your configured blueprint ordering, so the list you see matches the order you set.
**Scheduled Session Failure Email Rate Limiting**
Failure email notifications for scheduled sessions are now rate limited, so a scheduled run hitting the same problem repeatedly will no longer flood your inbox.
**Knowledge Search Auto-Expand**
When you search your knowledge base, any folder containing a matching note now automatically expands so you can see the result in context without hunting for it.
**Profile Integrations Filter**
Your profile page now only shows integrations that are actually connected for your organization, cutting the clutter from services you do not use.
**Browser Tool Parity Improvements**
Devin's browser tool now handles native browser dialogs, intercepts file chooser prompts, respects navigation guards, and restores focus correctly, bringing its behavior much closer to a real user browsing the web.
**Amplitude MCP Server**
Amplitude is now available in the MCP marketplace, so Devin can pull product analytics directly into a session without a custom integration.
**One-Click MCP OAuth Install**
Installing an MCP server that uses OAuth now returns the authorization URL directly, skipping an extra click and getting you connected faster.
**Personal MCP Servers**
You can now connect personal MCP servers, which enable Devin to use MCPs with authorization provided by an individual user rather than shared across an organization.
**Richer ACP Methods and @-Mentions**
Agent Client Protocol now carries @-mentions as structured resource blocks and adds new methods for listing repositories, saving secrets, archiving sessions, approving deploys, and attaching to the interactive browser, giving ACP clients a much richer surface area to work with.
**Devin CLI Polish**
The Devin CLI now preserves streamed shell output alongside exit codes, supports a `/resume` alias, renders plan-mode exits more clearly, and uses focus pings to keep a session from sleeping while you are actively watching it.
**Reconnecting VNC Screen**
The interactive browser now shows a reconnecting screen while its VNC stream is recovering, so you get clear feedback instead of a frozen view when the connection briefly drops.
**Unlink GitHub Enterprise Server OAuth**
You can now unlink a GitHub Enterprise Server OAuth connection from your account, making it easy to rotate credentials or clean up stale integrations.
**Total ACUs Column in Usage Table**
The Users table in Usage analytics now includes a Total ACUs column, so enterprise admins can rank and compare per-user consumption at a glance.
**Bulk Repository Secrets Import**
Enterprise admins can now import multiple repository secrets at once through a new bulk import flow on the repository configuration page, replacing the old one-at-a-time workflow.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish across the webapp, including repository branch dropdowns that now size correctly, the DeepWiki section hidden when no branches are indexed, a fix for Linear OAuth cancellations returning errors, correct starting numbers on streamed ordered lists, a copy-message button that now copies only the selected message, and assorted other stability and layout improvements.
**Auto-merge from Devin Review**
You can now enable or disable GitHub auto-merge directly from the Devin Review merge button, so approved pull requests land as soon as checks pass without an extra trip to GitHub.
**Enterprise Review Consumption by Repository**
The Reviews tab on the Enterprise Consumption page now groups Devin Review spend by repository with current-cycle vs previous-cycle columns, a search box, and CSV export, making it much easier for enterprise admins to see where their review spend is going.
**Devin Review Breakdown in v3 Consumption API**
The v3 consumption API now reports Devin Review as its own line item in the product breakdown alongside sessions and indexing.
**Categorization and Subcategories**
Session categorization and subcategories are now generally available for every workspace, giving you a consistent way to organize and filter your Devin sessions.
**Pinned Organizations Sync Across Devices**
Your pinned organizations are now stored server-side and follow you across every device and browser you sign in from.
**Session Message Permalinks**
Every message in a session now has its own shareable link, so you can point teammates directly at the exact moment you want them to see.
**Larger Attachment Uploads**
Session attachments now support files up to 75 MB, up from the previous 20 MB limit.
**Higher-Quality Wiki v2**
Wiki v2 now uses stronger reasoning, subagents, and agentic page writers to produce noticeably better documentation, and shows the ACU cost of the last generation so you can see exactly what each refresh costs.
**Guardrails V3**
Our new pattern-based guardrail prompts significantly reduce false positives while keeping the same level of protection.
**Ask Sub-mode Renamed to Q\&A**
The Ask sub-mode is now simply labeled "Q\&A" to better reflect what it does.
**Consolidated Session Header Menu**
Session header links are now grouped into a single hyperlink menu for a cleaner, less crowded header.
**Faster Syntax Highlighting**
Code blocks across the app now render with an incremental, worker-based syntax highlighter for noticeably faster and smoother highlighting on large files.
**Scroll Restoration**
Navigating back through the app now restores your previous scroll position so you land where you left off.
**Japanese Localization Refresh**
Japanese localization strings have been refreshed across the webapp.
**MCP Marketplace Upgrades**
The MCP marketplace now includes a Recommended section, smarter Figma discovery, and a shared interactive OAuth flow that shows connection status and errors directly in chat as you install servers.
**MCP Audit Logs**
Enterprise audit logs now cover MCP server updates and secret link and unlink events for better visibility into integration changes.
**Session ACU Hard Caps**
Enterprises can now set a hard upper limit on total ACUs per session, with an acknowledgement modal and real-time validation so users always know when a session is approaching the cap.
**Cerebras Now Enterprise-Ready**
Cerebras is now available as an enterprise-ready inference provider for organizations that want to use it for their Devin workloads.
**US Privacy Controls**
Devin now honors Global Privacy Control signals and supports CCPA and CPRA opt-out requests for customers in the United States.
**Refreshed Settings Layout**
Insights, identity provider, and several other enterprise settings pages have been migrated to the new settings layout and design system for a more consistent look and faster navigation.
**Enterprise Secrets Table Polish**
The enterprise secrets table now includes an environment variable column and a build-only toggle, with a simplified layout that removes the Name column and type selector.
**Minor Bug Fixes and Improvements**
Numerous smaller fixes and polish, including sidebar collapse state persistence, sidebar pull requests loading without a GitHub connection, better multi-PR session isolation, deduplicated Slack file forwarding, quota reset on plan upgrade, billing cycle short-month correction, snapshots sorted alphabetically, an auto-organize tooltip explaining when it is disabled, and the Category beta label and Review beta badge retired for paying organizations.
**Classic Environment Setup Deprecation**
Classic environment setup is being deprecated on June 30, 2026, when all organizations move to declarative configuration (blueprints). Your classic machine configuration stays available as a read-only reference until July 31, 2026. See [Migrating to declarative configuration](/onboard-devin/environment/migration).
**Enterprise-Scoped Secrets**
Enterprise admins can manage secrets at the enterprise level, automatically shared across all organizations. Initially only available to users of declarative environment configuration.
**Enterprise ACU Visibility Control**
Enterprise admins can control whether users see ACU usage info.
**Enterprise MCP Registry Enforcement**
Enterprise admins can enforce an MCP server allowlist across their organization.
**Enterprise Build Pinning**
Enterprise admins can pin specific Devin builds and roll back to previous versions. Initially only available to users of declarative environment configuration.
**Devin Review Auto-Fix**
When Devin Review detects bugs in a PR, a new "Auto-fix with Devin" button launches a session to fix them in one click.
**PR Review Chat CI Tools**
Check CI status and view CI job logs directly within the PR review chat.
**Pin Sessions**
Pin important sessions from the three-dot menu for quick access.
**Organization Terminology**
All "team" references updated to "organization" across the product. No functional change.
**Improved Questions UI**
Navigation between questions, inline "Something else" input, cleaner design.
**Auto-Skip Pending Questions**
Devin auto-skips pending questions when you send a new message.
**Cleaner File Paths**
Relative paths with structured format instead of full absolute paths.
**PR Review Polish**
Sticky tabs, bug navigation, copy buttons, chat CTA at end of diffs, empty state for PRs without descriptions.
**Structured Output for Child Sessions**
Child sessions can return structured JSON via schema for automated workflows.
**Smarter Codebase Search**
Recency-based repository ordering for faster, more accurate results.
**/new Slash Command**
Alias for /clear to start a fresh conversation.
**Azure DevOps Service Principal**
Connect Azure DevOps via service principal instead of personal OAuth.
**Linear Assignee Filter**
Rich picker for Linear assignee filtering in automations.
**Linear Token Refresh**
Linear connections now auto-refresh OAuth tokens, preventing disconnection on expiry.
**Minor Bug Fixes and Improvements**
GitLab PAT rotation fix, responsive mobile layouts, startup command display improvements, build log scroll-to-bottom, Ctrl+O expand hint, shell security improvements, automations UI fixes.
**PR Resuming**
Devin can now take over and work on existing pull requests that weren't created in the current session, enabling continuation of work across sessions.
**Devin Review Improvements**
Added a "lines left to review" counter in the PR review diff viewer, and significantly faster page load times via parallel queries.
**Streaming Terminals**
Terminal output in the session view now streams in real time.
**Connected Accounts Pagination**
GitHub and GitLab connected accounts pages now support pagination and search for organizations with many connections.
**GHES Improvements**
Support for org-level GitHub App registration on GitHub Enterprise Server, with pre-filled app name in the manifest flow.
**Settings Page Redesign**
Multiple settings pages (Schedules, Playbooks, Knowledge, Secrets) have been redesigned with a new unified layout, along with consolidated dialog styles across the product.
**Sticky Sidebar Headers**
Sidebar section headers now stick to the top while scrolling for easier navigation.
**Light Mode Polish**
Multiple fixes for theme-aware colors across modals, dialogs, and components.
**Add or Create Team**
New button in the account dropdown to create a team without going through the GitHub integration flow.
**Auto-open Agents Tab**
The Agents tab auto-opens when child sessions are detected.
**Tab Title Simplification**
Browser tab title simplified to "Devin" with contextual page titles.
**Slack Thread Permissions**
Users without Devin accounts are now blocked from messaging in Devin Slack threads.
**Improved PR Comment Formatting**
Devin's PR comments now include line info and outside-diff context.
**IME Composition Fix**
Fixed an issue where pressing Enter during IME composition (e.g., Japanese input) in Safari would prematurely submit text.
**Ignore Comment Info**
More helpful information shown when Devin Review comments are ignored.
**Environment Setup Cleanup**
Clarified environment description copy and removed redundant buttons.
**Bash Syntax Highlighting**
Terminal output now has syntax highlighting for bash commands.
**Scheduled Session Pill**
Visual indicator for scheduled sessions in the sessions list.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**Preview Agent Toggle**
A new "Preview upcoming features" toggle is available in the agent selector, enabling streaming thoughts and faster execution. Stability may be limited as these features are still in development.
**Inline File Previews**
HTML, PDF, and SVG attachments can now be securely rendered inline in the session sidebar, with a code/render toggle and download button in the file toolbar.
**Focus Mode**
A new focus mode hides the sidebar, header, and right panel for a distraction-free chat experience. Access it from the session menu or with the keyboard shortcut Cmd+Shift+F.
**Agents Tab for Child Sessions**
A new "Agents" tab automatically appears when a session creates child sessions, showing their status, todos, and PRs in one place.
**Test Recording Viewer**
Devin's test recordings now display as rich cards with pass/fail summaries, playback speed controls, and loop functionality.
**Jira Integration Enhancements**
Jira now supports direct session creation from issues, service account connections, and per-project trigger options for controlling when Devin is activated.
**Redesigned Integration Settings**
The Linear, Jira, and Slack integration settings pages have been redesigned with cleaner layouts for team mapping, playbook management, bot allowlists, and automation rules.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Light Mode (Beta)**
Devin now supports a light mode theme. You can switch between dark, light, and system themes from your profile settings.
**Streaming Shell Output in Worklog**
Background shell process output now streams inline within worklog items, so you can monitor long-running processes without switching to the terminal.
**Cookie JSON Builder for Secrets**
A new tabbed interface for cookie secrets lets users paste raw JSON (auto-encoded to base64) with validation, parsed previews, and expiration warnings.
**Org-Level Metrics API**
New organization-scoped API endpoints for metrics and consumption data.
**Session Insights UI Redesign**
The session insights modal has been redesigned with a refreshed layout, improved empty states, and updated copy.
**Secrets on Initial Prompt**
Users can now attach secrets when creating a new session from the home page, matching existing functionality for follow-up messages.
**Devin Reviews Analytics**
A new Devin Reviews section has been added to the usage analytics page showing review metrics.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Devin Manages Devins**
Devin can now orchestrate Devins and manage your Devin setup directly from any session. This will replace the current Advanced Devin features.
Devin can delegate to a team of managed Devins that work in parallel. Each managed Devin is a full Devin with its own isolated virtual machine. The main Devin session acts as a coordinator — scoping the work, monitoring progress, resolving conflicts, and compiling the results.
New capabilities include:
* Session management – Create child sessions with structured output schemas and playbooks. Search and filter past sessions by tags, playbook, origin, or time range. Analyze past sessions with full search across shell, file, browser, git, and MCP activity.
* Knowledge management – Create, update, delete, and organize knowledge notes into folders. Review knowledge suggestions.
* Playbook management – Create, edit, and delete playbooks.
* Schedule management – Create and manage scheduled sessions including recurring or one-time runs, agent selection, and notification preferences.
**Redesigned Integration Pages**
The integration settings pages have been redesigned with a new layout including connection cards, support sections, and pagination.
**Improved Playbook Page**
The playbooks page now shows a table layout. Each playbook page now shows session count, unique users, and merged PRs per playbook, with a weekly activity chart. Playbooks now include a version history.
**Parent/Child Session Grouping**
Parent and child sessions are now grouped together in the sidebar, so child sessions stay nested under their parent regardless of sorting or filtering.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**On-Demand Session Insights**
Session insights are now generated on demand rather than automatically. You can trigger analysis from the Session Insights button in the UI or programmatically via the new [generate insights API endpoint](/api-reference/v3/sessions/post-organizations-session-insights-generate). Insights will continue to be automatically generated for L and XL sessions.
**New Session Inputs**
* An inline voice recording button is now available for hands-free messaging.
* Devin sessions can be @ mentioned to reference them directly in another session.
**Session List Improvements**
* Important sessions can be pinned to the top of the sidebar for quick access.
* A new sidebar filter hides scheduled sessions from the session list.
**Structured Output Modal**
The structured output from sessions created with the API with this parameter set can now be viewed and downloaded from the "Structured output" option in the session menu.
**Markdown Preview**
Markdown files can now be natively displayed in the right panel.
**Datadog MCP Integration**
Datadog is now available as an official integration in the MCP marketplace.
**Default Branch Management**
Users can set and manage the default branch for repository indexing from the repositories management page.
**Schedule: Run as User**
Schedules can now be reassigned to run as the current user via a "Run as me" button in the schedule detail view, also available via the v3 API.
**IdP Groups in Enterprise Settings**
The enterprise members table now shows IdP group memberships for each user.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**Install Devin as an App**
Devin can now be installed as a Progressive Web App on desktop and mobile. On Chrome or Edge, open app.devin.ai and click the install icon in the address bar (or Menu → Install Devin); on iOS Safari, tap Share → Add to Home Screen. Once installed, Devin links open directly in the app.
**Session Status in Browser Tab**
The browser tab favicon now shows a colored status dot on session pages (green when Devin is working, orange when it's waiting for you) so you can spot sessions that need attention without switching tabs.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**AskDevin Upgrade**
Expanded to support Ask and Plan modes. Now has more advanced code search capabilities which produce more detailed and accurate answers. The status of Devin sessions created from AskDevin can now be seen in the conversation.
**Devin Review: GitHub Commit Status Checks**
Status checks now displayed directly on pull request commits, giving visibility into review progress without leaving GitHub. The status links to the full Devin Review analysis.
To enable this, the Devin GitHub App will request the Commit Statuses and Checks permissions. If these permissions are not granted, all existing functionality is unaffected.
**Repository Selection for Schedules**
Schedules can now be configured with specific repositories that the session will be run with each time the schedule executes.
**Devin 2.2 Launch**
Devin 2.2 is the culmination of hundreds of improvements both big and small over the last few weeks including:
* 3x faster startup time to immediately see Devin's output and build trust that it's on the right track
* A new UI that connects every step of the dev lifecycle: start sessions from anywhere, review agent output directly in Devin, and jump back into sessions from code review.
* Smoother and faster Slack and Linear integrations to start sessions without having to switch context
See past release notes for the full list of the improvements.
**Full Desktop Testing**
Devin now supports end-to-end testing using computer use and can test any desktop app that can run on Linux. Devin will request to QA its PR, if you approve it, it will run your app, use its desktop to click around, and send you an edited recording of the testing for your review.
Existing users can enable Desktop mode in [Settings > Customization](https://app.devin.ai/customization).
**Devin v3 API Officially Released**
The v3 API is coming out of beta and is now the primary API for all Devin functionality. The new API provides all of the legacy API functionality and additionally provides role-based access control, session attribution, and new capabilities.
The legacy APIs (v1 and v2) will be deprecated in the future. The exact date will be announced in the product and in release notes. We commit to providing at least 30 days notice. During the deprecation period, the legacy APIs will continue to work but all new features will only be available in the v3 API.
**Sessions List Redesign**
The sessions list page has been redesigned with an updated layout featuring inline PR previews, message snippets, and status indicators. Sessions can now also be sorted by creation date.
**Merge Conflict Detection**
Devin will automatically notify users when a PR created in a Devin session has merge conflicts. Available on GitHub.com only.
**New Devin Scheduling Options**
Scheduled Devins can now be created as a one-time scheduled event, and existing schedules can be triggered on demand with the "Run now" button.
**Devin Review for GitHub Enterprise Server**
Devin Review now supports GitHub Enterprise Server (GHES) repositories. You can view PR diffs, run analysis, and use the Devin Review chat agent to propose and apply code changes. Some interactions with GitHub such as posting comments, submitting reviews, and merging are not yet supported on GHES.
**Repo Selector Enhancements**
The repository selector now features an "Only" button to quickly isolate a single repository and displays setup and indexed repo counts.
**Session Messages API**
A new `GET /messages` endpoint allows programmatic access to session message history.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Visual Refresh and Polish**
The overall design has been improved and polished across the product. Some button locations have been minorly adjusted, but these changes do not impact the product functionality.
**Devin Fast Mode**
A new "Fast Mode" option is now available in the agent picker, delivering \~2x faster responses with the same intelligence at 4x ACU per session.
**Devin Review: Batch Comments**
When replying to PR review threads, you can now check "Start a review" to batch multiple review comments before submitting them all at once.
**Devin Review: Code Changes from Chat**
The Devin Review chat agent can now propose code edits directly in the conversation. You can review the suggested changes, then apply them as a commit to the PR branch without leaving Devin Review.
**Secure Mode for All Organizations**
Secure mode is now available for non-enterprise organizations. When enabled, Devin loses native internet deployment capabilities. You can find this setting under "Security settings" on the Customization page.
**Skills Support**
Devin now recognizes and uses skills defined in your codebase. Skills provide reusable instructions that Devin can activate, search, and invoke during sessions to follow your team's preferred workflows.
**Settings Search**
A search bar has been added to the settings sidebar, making it easy to quickly find any settings page by name or keyword.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Schedule from the Input Box**
You can now quickly create a scheduled Devin session directly from the input box. Use the "Schedule Devin" option in the context menu or switch to the "Create schedule" tab in Advanced mode to set up recurring sessions without leaving the home page.
**Enterprise Organization Selection**
The enterprise landing page has been redesigned with a cleaner organization list, member counts, and sorting options for easier navigation across your enterprise.
**Devin Review: Auto-Review Settings**
Auto-review configuration is now accessible as a settings popover directly in the PR header, making it faster to enable or disable auto-reviews per repository.
**Devin Review: Hide Comment Highlights**
A new setting in the code diff viewer lets you hide comment highlight boxes for a cleaner reading experience when reviewing code.
**Git Permissions Update**
Removed the ability to index repos in the primary organization for enterprises.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Scheduled Devins**
You can now create recurring Devin sessions that run automatically on a schedule. Configure frequency, prompt, and playbook from the new Schedules page in settings, and receive email notifications for schedule events.
**Devin Review: Draft PR Support**
Draft PRs now show a "Ready for review" button, allowing you to mark PRs as ready for review directly from Devin Review.
**Devin Review: File Comments and @Mentions**
You can now add file-level comments from the file header menu and use @mentions when editing existing comments in Devin Review.
**Settings Sidebar Reorganization**
The organization settings sidebar has been reorganized with clearer section headers including "Devin's resources," "Membership," "Settings," and "Integrations" for easier navigation.
**Per-Product Consumption Analytics API**
The v3 analytics API now includes a per-product breakdown of Agent Compute Unit consumption alongside existing totals. See [API Release Notes](/api-reference/release-notes) for details.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**[Devin Review Launch](/work-with-devin/devin-review)**
Devin Review is a reimagined interface for understanding complex PRs. Devin review groups related changes together logically, detects copied code, detects bugs and security issues, and an embedded PR chat interface.
**Repo Setup AI Suggestions**
The repository setup flow now provides inline AI-powered suggestions for setup commands, helping you configure repositories faster with less manual effort.
**Sessions API Enhancements**
New API endpoints allow you to retrieve session details by ID, send messages to active sessions, and filter sessions by origin (webapp, Slack, Teams, API, Linear, Jira). See [API Release Notes](/api-reference/release-notes) for details.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Session Secrets via API**
You can now provide session-scoped secrets when creating sessions via the API, enabling secure credential management for automated workflows without manual intervention.
**Native Linear Integration**
Devin now has a built-in Linear tool for organizations with the Linear integration installed. This means you no longer need to install the Linear MCP separately to interact with Linear issues and projects.
**API Session Filters**
Added new filtering options to the sessions API endpoint, including the ability to filter sessions by user email for better session management and reporting.
**Syntax Highlighting for Kotlin and Protocol Buffers**
Code blocks now support syntax highlighting for Kotlin and Protocol Buffers (.proto files), improving readability when working with these languages.
**Git Settings Reorganization**
Personal git settings have been moved from the "Customization" section to the "Profile" tab in user settings for better organization and discoverability.
**Playbook Visual Distinction**
Playbooks now have a visual badge in the dropdown menu, making it easier to distinguish between playbooks and other options when starting a session.
**Machine Setup UX Improvements**
Small usability improvements to the machine setup flow for a smoother onboarding experience.
**Copy Context Button**
Each PR now has a "Copy Context" button that provides an AI-generated summary of the agent's work, context it found, and decisions it made, which is particularly useful when handing off work to other agents.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
# Recent Updates
Source: https://docs.devin.ai/release-notes/overview
**Diff Line Permalinks**
You can now share direct links to specific lines in a Devin Review diff via the URL hash — useful for pointing teammates to exact code locations.
**Slack !agent Renamed to !normal**
The `!agent` Slack bang-command has been renamed to `!normal` for consistency with the standard Devin mode naming.
**Slack Sync Toast Improvements**
The Slack sync notification toast now has clearer copy, can be dismissed per-tab, and includes a "don't remind me" opt-out.
**Service User Automations**
Service users can now create and manage automations via the API, enabling programmatic automation workflows.
**Snapshot Build Trigger**
`snapshot_build:completed` is now available as an automation event trigger, letting you kick off workflows when a new environment snapshot finishes building.
**MCP Run-As-Creator Warning**
Automations now display a warning when a user-scoped MCP server is selected but run-as-creator is turned off, helping avoid permission mismatches at runtime.
**Code-Snippet Telemetry Audit Log**
Changes to code-snippet telemetry settings are now recorded in the customer-facing audit log.
**Security Scan Remediation API**
The v3 API now supports endpoints for remediating security scan findings.
**API Default Devin Version**
API-created sessions can now specify a default Devin version, giving teams programmatic control over which Devin version runs their workloads.
**Git-Backed Blueprints**
Blueprints can now be backed by a Git repository, letting you version-control and collaborate on environment configurations alongside your code.
**Blueprint Permission Descriptions**
Blueprint permission names and descriptions now clearly indicate their scope, making it easier to understand what each permission controls.
**Hover Copy for Tables**
Markdown tables in sessions now display a copy button on hover, letting you quickly copy table contents to your clipboard.
**Bug Fixes**
This release also includes fixes for virtualized Review comments hijacking scroll, diff-viewer partial-expand into file boundaries, collapsed worklog diff-stat clipping in WebKit, desktop VNC reconnection after session wake, terminal LF-to-CRLF conversion on non-PTY flush, PAT-authenticated webhook error comments now being allowed, and various other UI polish improvements throughout the app.
**No-Access Permission Popover**
When your connected account lacks write permission on a repository, Devin Review now shows a clear "no access" popover explaining what's needed instead of silently failing.
**Auto-Review Scoped to Your PRs**
The auto-review user preference now applies only to PRs you author, so enabling it won't trigger automatic reviews on other people's pull requests.
**PR-Link Preference**
Users can now control whether in-session PR links open in the Devin tab, in GitHub, or in Devin Review.
**Persist Model Selection**
Your chosen default model is now remembered when you select it in the agent picker, persisting across page reloads.
**Network Access Requests**
In network-restricted sessions, Devin can now request access to specific domains. The request surfaces to you for approval, removing the need to preconfigure every domain.
**GitLab Mention-Only Comments**
Devin now respects mention-only PR comment settings for GitLab merge requests, reducing notification noise for teams that prefer targeted mentions.
**Slack Thread Sync**
Sessions can now sync messages bidirectionally with Slack threads. A confirmation prompt appears for busy threads, and global sync is enabled by default for new sessions.
**Unarchive on Mention**
Mentioning @Devin in a Slack thread for an archived session now automatically unarchives it so you can continue the conversation.
**Slack Commands Anywhere**
Slack bang-command macros (like `!ultra` or `!fast`) are now recognized anywhere in your message, not just at the beginning.
**Inline Mute Reminder**
The mute/quiet-mode reminder now appears inline in the session footnote instead of as a separate message, reducing clutter.
**MCP Read-Only Mode**
The secure-mode profile UI now includes a toggle for restricting MCP servers to read-only access.
**Improved Webhook Trigger Setup**
The automation editor now shows the webhook URL and secret inline before you save, so you can configure the external service first.
**Usage Analytics: PR Ratio Chart**
A new weekly Devin PR ratio chart with repository filtering is available on the Repositories analytics tab, along with CSV export and improved number formatting across all analytics tables.
**Skills Analytics**
A new enterprise-level skills analytics page shows skill usage patterns, adoption rates, and performance across your organization.
**ACU Limit Audit Trail**
Organization ACU limit changes are now recorded in the customer-facing audit log, giving enterprise admins full visibility into limit adjustments.
**Read-Only Scan Profiles**
Enterprise-managed scan profiles now render as read-only in child organizations, preventing accidental modifications to centrally managed security policies.
**Analytics Page Improvements**
Analytics time-range and filter selections now persist in the URL for easy sharing, and the organization picker in productivity dashboards supports pagination for enterprises with many organizations.
**Redesigned Environment Page**
The environment page is redesigned with platform filters, an active snapshot grid layout, and platform-specific icons for better discoverability of your build configurations.
**Cross-Platform Repository Cloning**
Organizations can now clone configured repositories on every available build platform, not just the default — enabling consistent environments across Linux, macOS, and other platforms.
**Bug Fixes**
This release also includes numerous bug fixes across the platform — including fixes for the Slate editor crash on mobile, voice recording button visibility on narrow screens, Review header alignment, IDE frame layering over dialogs, MCP OAuth redirect handling, mentions preserving spaces correctly, false "Installation out of date" banners on fresh MCP installs, blueprint drawer state preservation, unsubscribe link routing for enterprise emails, and various UI polish improvements throughout the app.
**Archive/Unarchive Sessions from Command Palette**
Sessions can now be archived or unarchived directly from the Cmd+K command palette on session pages, without navigating to session settings.
**Run-Once Automation Schedules**
Automations now support a run-once schedule option for one-time executions, in addition to recurring schedules.
**MCP "Installation Out of Date" Banner**
Installed MCP integrations now surface an "Installation out of date" banner with one-click marketplace refresh when an update is available.
**Post-Build Section for Blueprints**
The blueprint editor now includes a Post Build guide item for organization and enterprise blueprints.
**Readable PR Review Label Colors**
PR Review labels now render with readable text in both light and dark themes.
**Usage Analytics Improvements**
The Consumption Dashboard now uses bar charts for the session activity chart, combines active and review users into a single chart with a metric selector, adds a counts/percentages toggle, and normalizes the per-tab export buttons to a consistent "Export" control.
**Pin/Unpin Sessions from Command Palette**
Sessions can now be pinned or unpinned directly from the Cmd+K command palette for faster access to important sessions.
**Start Session in Background**
A new "Start session in background" button on the home page lets you kick off a session without navigating away from your current view.
**View Latest Version for File Tabs**
File tabs in sessions now include a "View latest version" affordance, making it easy to jump to the most recent version of a file Devin has edited.
**Security Findings in Ask Devin**
When using Ask Devin within PR Review, the AI context now includes security findings, enabling more security-aware assistance during code review conversations.
**"Repo Rule" Badge on Lifeguard Findings**
Lifeguard bugs that were flagged from repository rule files now display a "Repo rule" badge, helping reviewers distinguish rule-sourced findings from general analysis.
**Split View Auto-Disable on Narrow Panels**
The Split view option in PR Review is now automatically disabled when the panel is too narrow to display it usefully, preventing layout issues on smaller screens.
**Usage Analytics — Top 10 Rankings**
Consumption analytics now includes Top 10 ranking charts for repositories (in Reviews usage) and for users and service users (in the Consumption tab), giving admins quick visibility into where usage is concentrated.
**Enterprise Wide Snapshot Build Schedule**
Enterprises can now configure a snapshot build schedule, controlling when environment builds run. Blueprint settings also display drift warnings when the environment is out of sync, with actionable buttons to trigger a re-sync.
**Add Enterprise Members When SSO Is Required**
Org admins can now add existing enterprise members to their organization even when SSO is required for enterprise membership.
**ACU Billing Schedule Warning**
Enterprises consuming ACUs without an active billing schedule now see a warning, helping admins avoid unexpected usage without payment coverage.
**MCP Marketplace Expansion**
48+ new engineering MCP connectors are now available, including Miro, Mixpanel, Honeycomb, Postman, monday.com, Klaviyo, and many more. 42 previously-beta MCPs have graduated to general availability. New additions include LaunchDarkly (with hosted OAuth), Fathom, Attio, and Calendly. Google Drive MCP is now available to all users.
**Dedicated MCP Management Page**
Enterprise admins now have a dedicated MCP management page with per-server detail views showing organization-wide and per-session usage, replacing the previous side panel.
**GitLab User Identity Linking**
Link your personal GitLab account so Devin creates Merge Requests under your GitLab user instead of the Devin identity. For enterprises with self-hosted GitLab instances, admins can register a GitLab OAuth Application under Advanced settings to enable user linking for self-hosted instances.
**Devin Review for GitLab**
Devin Review now supports GitLab Merge Requests. Intelligent diffs, inline comments, and AI chat all work on GitLab MRs. Your GitLab MRs appear in the sidebar organized by status (Needs your review, Returned to you, Approved, Waiting for reviewers, Drafts). GitLab repos can be added to auto-review in Review settings.
**File Path Visible During Streaming Edits**
The full file path is now shown while the edit tool is actively streaming changes, so you always know which file Devin is modifying.
**Deduplicated File Tabs with Version Switcher**
When multiple versions of the same file exist, they are consolidated into a single tab with a version dropdown instead of cluttering the tab bar.
**Slack Formatting in Webapp Comments**
Bold, links, code, and other Slack formatting now renders correctly in webapp thread comments forwarded from Slack.
**PR Context Visible While Waiting for CI**
PR-ready context is now shown while CI checks are still running, so you can start reviewing before checks complete.
**Improved Feedback Controls**
Both thumbs-up and thumbs-down buttons are now always visible on messages. Session-level feedback and a qualitative feedback modal make it easier to share detailed feedback.
**Incremental Generation Steps in Automation Input**
The AI-assisted automation input now shows incremental generating steps as it builds your automation configuration.
**Public Repos Shown as Disabled in Repo Picker**
Public repositories now appear greyed out in the repo picker instead of being hidden, making it clear they exist but are not selectable.
**"User Only" PR Author Enforcement**
A new "User only" option is available in the "Open PRs as" setting. When selected, Devin will only create PRs under the user's identity and will fail if their Git account is not connected. Automations and service users fall back to the Devin identity. Enterprise admins can enforce this setting across all organizations.
**Cmd+K: Switch Organization & Copy Org ID**
The command palette (Cmd+K / Ctrl+K) now supports switching between organizations and copying your org ID without navigating to settings.
**Sidebar: Unpin & Remove-from-Folder Quick Actions**
The sidebar archive button has been replaced with context-aware quick actions: pinned sessions show an "Unpin" button, and sessions in a folder show "Remove from folder." Archive remains accessible via the context menu.
**Wiki: Clean Page URLs**
Wiki pages now use cleaner `/page/` routes instead of the previous longer format, making links easier to share and bookmark.
**Automations Sidebar**
Automations now appear in the main navigation sidebar for quicker access to your configured automation rules.
**Japanese Translations: 100% Coverage**
All remaining Japanese translation keys have been filled across the platform, bringing Japanese language coverage to 100%.
**Ask Devin: @repos Picker Scoped to Search Repos**
The @repos file picker in Ask Devin now only shows repositories from your selected search scope, reducing noise when referencing files.
**Suggested Knowledge Visible in Session Worklog**
When Devin suggests a knowledge item during a session, it now appears as a standalone event in the worklog for easier visibility and review.
**Devin Review: Comment Language Selector**
When reviewing PRs in Devin Review, you can now select the language for AI-generated review comments (e.g., English, Japanese, Spanish).
**Devin Review: Security Findings**
All Devin reviews now include a security findings section. The security reviewer respects your repository's SECURITY.md file to tailor its analysis to your project's security policies.
**Devin Review: Code Owner Review Block**
The merge bar now shows when a PR is blocked waiting for code owner approval, making it clear which reviews are still required before merging.
**Devin Review: GitHub Alert Callouts**
GitHub-style alert callouts (note, warning, caution, etc.) in markdown files now render with proper styling in Devin Review.
**Slack: Preceding Thread Messages as Context**
When Devin is mentioned in a Slack thread, it now receives the preceding thread messages as context, enabling more informed responses without needing to repeat background information.
**Slack: !agent Bang Command**
Use `!agent` in Slack messages to Devin to explicitly route your request to a full Agent session instead of Ask mode.
**Default Sync with Slack Per Session**
New sessions can now default to syncing messages with Slack, configurable at the organization level so teams stay in the loop automatically.
**Automations: Slack Channel Updates**
Automation run results can now be posted to a designated Slack channel, keeping your team informed of automated session outcomes.
**Linear: Projects Filter for Triggers**
When configuring Linear-triggered automations, you can now filter by Linear project to scope which issues trigger Devin sessions.
**MCP Server: View Logs on Error**
MCP plugin error cards now include a "View logs" button linking directly to the MCP output channel, plus detailed error information surfaced in the plugin status card for faster debugging.
**Axiom MCP Server**
A new official Axiom MCP integration is available, allowing Devin to query your Axiom logs and observability data during sessions.
**Structured Output Schema for Playbooks**
Playbooks now support a structured output schema, enabling Devin to return results in a defined JSON format for easier programmatic consumption.
**Enterprise Knowledge Limit Increased to 300**
The maximum number of enterprise knowledge items has been increased from 200 to 300.
**Session Folders**
Group sessions into named folders in the sidebar. Move sessions via drag-and-drop or the three-dot menu. Folders are personal, so each user defines their own layout.
**!ultra and !fast Mid-Session Toggles**
You can now start sessions on Devin Ultra directly from Slack with the `!ultra` command. You can also switch between Ultra and Fast modes mid-session by typing `!ultra` or `!fast` in the Slack thread.
**Smarter Emoji Reactions**
Devin now only adds sleep/archive emoji reactions to messages that are explicit sleep or archive commands, reducing noise on other status messages.
**Custom OAuth for Marketplace MCP Servers**
Marketplace MCP servers that require organization-specific OAuth client credentials can now be configured directly from the integrations page.
**Markdown File Preview in Worklog**
Markdown files created during a session now render with a preview toggle, letting you see the formatted output alongside the raw content.
**Web Search Enterprise Setting**
Enterprise admins can now enable or disable Devin's web search capability via a new toggle in enterprise settings.
**"Users" Tab Renamed to "Members"**
The org membership page tab now reads "Members" for clarity.
**Devin Review: Pending PR Reviews Canceled on New Commits**
When new commits are pushed to a PR, any in-progress Devin reviews are now automatically canceled. The PR Review API also reflects this with a new `cancelled` status on review objects.
**Large Pastes Automatically Attached as Files**
Pasting large content (10k+ characters) into the composer now automatically attaches it as a file, regardless of existing message length. This keeps your prompt clean and avoids hitting size limits.
**User Mentions Rendered as Styled Links**
@mentions in session messages are now displayed as styled deeplinks instead of the raw "@Name (ID)" format.
**"Sent from Slack/Teams/Linear" Indicator**
Follow-up messages that originated from an integration now show a small badge indicating their source (e.g., "Sent from Slack").
**Echo Message to Slack Toggle**
A new toggle lets you bypass Slack message suppression and echo your webapp messages into the Slack thread, even in quiet-mode sessions.
**Improved Slack Message Rendering**
HTML entities in Slack messages are now properly decoded outside of code blocks, fixing garbled characters in forwarded content.
**Official Figma MCP Integration**
The official Figma MCP server is now available with suggestions enabled. The previous unofficial integration has been deactivated.
**IdP Group Role as First Assignment**
Org-scoped IdP groups can now use a group role as their very first role assignment, removing the previous requirement to set an individual role first.
**Success Confirmation After Org Creation**
Creating a new organization within an enterprise now shows a clear success state, confirming the operation completed.
**Start a New Session with This Prompt**
The first message in a session now shows a "Start a new session with this prompt" button, replacing the previous "Start duplicate session" menu action. Reuse any prompt for a fresh session in one click.
**Playbook Devin Mode**
Playbooks can now specify a Devin mode (e.g., Fast or Normal). When launching a session from a playbook, the agent picker reflects the playbook's configured mode.
**Configurable Auto-Reload Threshold**
You can now customize the balance threshold that triggers auto-reload in the billing usage modal.
**Jira Webhook Failure Recovery**
When a Jira webhook connection fails, a banner now appears in your Jira integration settings with a one-click reconnect action to restore the connection.
**Devin Review: Action-Required Flags on PRs by Default**
Devin Review now posts orange action-required flags to your GitHub pull requests by default when issues are found that need investigation.
**Webhook URL in Automation Editor**
The automation editor now displays the webhook URL directly under the webhook trigger, so you can copy it without navigating away.
**Improved Slack Message Formatting**
Devin's messages in Slack now use full markdown formatting for all users, providing richer text rendering with proper links, code blocks, and lists.
**Send Messages While Session Is Queued**
You can now send messages to a session that is waiting for capacity. Your messages will be delivered as soon as the session starts.
**Persist Chat Draft Across Panel Close**
Draft messages in the session composer are now preserved when the panel is closed and reopened, so you won't lose work in progress.
**Session Counts on Collapsed Sidebar**
Session counts are now visible on collapsed sidebar section headers, giving you a quick overview without expanding each section.
**Devin Review: Connect Personal Account from Blocked Controls**
In Devin Review, when Review, Merge, or comment actions are blocked because your personal identity isn't linked, you can now connect your GitHub or GitLab account directly from the blocked control without navigating to settings.
**Active Todo in Slack Plan Header**
The collapsed plan header in Slack threads now shows the currently active todo item, so you can see what Devin is working on at a glance.
**Detect @Devin Mentions After Inviting the Bot**
When you tag @Devin in a channel where the bot isn't present and then invite it, Devin now detects and responds to your original mention.
**Lower Minimum Per-Session Limit for Automations**
The minimum per-session limit for automations has been lowered from 3 to 1, giving you finer-grained control over automation budgets.
**Scratchpad Moved Under MCPs in Automations**
The scratchpad section in the automation editor has been moved to the top level under MCPs for easier discoverability.
**Prompt to Reconnect Linear**
When creating a Linear automation with an expired personal token, you'll now be prompted to reconnect before proceeding.
**Personal Automations**
You can now create personal automations that run under your own identity. Personal automations include a dedicated toggle, permission model, and badge in automation lists. The legacy Schedules page now shows migration guidance to help you transition to the new Automations system.
**Devin Review: Enrolled Users, Spend Limits, and GHES/GitLab Support**
Devin Review now includes an enrolled users management table in settings, a redesigned per-PR spend limit that acts as a soft block (you can re-enable if needed), and pinned section titles above file headers in the embedded review view. "Open in Devin Review" is now available for GitHub Enterprise Server and GitLab PRs.
**Pre-Approve Testing**
A new user preference lets you always approve testing for future sessions, so Devin can test changes without prompting each time. Access it from your profile settings or via the split-button on the "Test the app" action.
**V3 API: Organization Members and Automations**
New org-scoped `GET /v3beta1/organizations/{org_id}/members` endpoint for listing organization members. A full automations CRUD API is also now available via v3.
**SSO/SCIM: JIT Provisioning and Enterprise Redirect**
SSO just-in-time provisioning can now be toggled on or off, with group sync gated separately. SSO-only enterprise users are now automatically redirected to their enterprise webapp host on login.
**Settings Improvements**
The Repositories page now supports pagination. Search results in the settings sidebar are deduplicated with indent guides. A permission-gated "Add repositories" button and empty state have been added to Skills & Rules. Terminology has been updated from "org" to "organization" throughout.
**Child Sessions: Tree Connector**
Child sessions now display with a tree connector in the sidebar, making parent-child relationships visually clear.
**Bug Fixes**
Persisted orange sidebar indicator for quota-suspended sessions. Made question answer submission optimistic, removing click lag. Fixed send button centering at fractional zoom levels. Added email fallback for IdP users without a name in the session list. Fixed cross-org router links dropping query string and hash. Added cost column to scheduled sessions past sessions list. Cleared "Approve session" attention dot once the session is read. Restored question selections when an optimistic submit fails. Pinned bulk-edit bar to viewport bottom centered over content column. Included enterprise members in the session creator filter.
**New Command Palette**
The redesigned command palette is now available with improved search, keyboard navigation, and settings integration. Access it with Cmd+K (Mac) or Ctrl+K (Windows/Linux) to quickly navigate pages, settings, and actions.
**Automations: Files-Changed Trigger**
The automation builder now supports file-change triggers for GitHub push events. You can configure automations to run only when specific files or directories are modified in a push. Pull request triggers also automatically add the appropriate action filter.
**PR Review Sidebar Restructure**
The in-session PR review sidebar has been redesigned with collapsible sections, portalized toolbar actions, and a new diff settings menu replacing the previous split/unified toggle.
**Raindrop.ai MCP in Marketplace**
The Raindrop.ai MCP server is now available in the MCP marketplace.
**Disable Review/Analysis for Merged and Closed PRs**
The review and analysis trigger is now disabled for already-merged and closed pull requests, preventing unnecessary processing.
**Wake Sleeping Sessions on Retrigger**
Sleeping sessions now automatically wake up when a PR comment retrigger is posted, so you no longer need to manually restart them.
**Devin Review: Respect CI Monitoring Setting**
Devin Review now correctly honors the "Disable automatic comment and CI monitoring" checkbox for merge-conflict notifications.
**Bug Fixes**
Fixed intermittent Recent repos display issue. Fixed diff view flashing two-column layout before snapping to unified view. Added DeepWiki button to repo indexing header. Fixed infinite page spinner when a user is not a member of the resolved organization.
**Platform Default Settings**
Org admins can now set a default platform (Linux or Windows) for all new sessions, and individual users can star their personal preference. The default platform is honored across all session creation methods, including Slack, Linear, Jira, API, and automations.
**Slack Channel Override**
Type `!channel #channel-name` in Slack to override which channel Devin spawns its response thread in for that session.
**MCP OAuth Resource Parameter**
MCP OAuth flows now forward the RFC 8707 resource parameter, fixing authentication for MCP servers that require resource indicators (such as Snowflake and Runlayer).
**Custom RRULE Schedule Input**
Automation schedules now support pasting raw RFC 5545 recurrence rule strings directly, with validation and auto-detection, for schedules that go beyond the visual editor.
**GitLab Interactive PR Review**
GitLab repositories now support interactive PR review — Devin can post review comments and resolve threads as you — when the read-write GitLab connection is enabled.
**PR Review Status API**
A new `GET /v3/enterprise/pr-reviews` endpoint lets you poll Devin Review status programmatically, with optional commit SHA filtering.
**In-App Support Dialog**
"Contact support" now opens an in-app dialog where you can submit a ticket directly, replacing the previous email link.
**Inline Repo Permission Toggle**
You can now toggle repository permissions between "Read only" and "Read & write" directly from the permissions table, without needing to remove and re-add the repository.
**Enterprise Max Concurrent Snapshot Builds**
Enterprise admins can now set a maximum concurrent snapshot builds limit in enterprise settings, with backend enforcement to prevent build queue overload.
**GitLab OAuth Scope and Token Refresh**
GitLab user OAuth now requests the broader `api` scope for better compatibility, and tokens are automatically refreshed before they expire.
**Network Config Editor Redesign**
The network policy editor has been redesigned as an inline-editable list with multi-line paste support and duplicate detection, fixing the issue where domains typed but not submitted were silently lost on save.
**GitHub Connection No Longer Required for Automations**
GitHub-triggered automations no longer require a personal GitHub connection, allowing teams to rely on the org-level connection exclusively.
**PostHog MCP**
The PostHog MCP server is now available in the MCP marketplace, enabling product analytics integration directly from Devin sessions.
**Other Improvements**
Automation sessions now appear in a dedicated "Automations involving you" sidebar folder instead of being auto-pinned. Session @-mentions in chat are clickable links. A new Cmd+K action copies the session URL to clipboard. Archive undo now restores cascade-archived child sessions. MCP connection errors are surfaced instead of silently swallowed, and a new disconnect action removes stored OAuth tokens. Integration mappings for Linear, Slack, Teams, and Jira are validated at save time. The repo selector shows a Recent section and org labels. Tool calls in Watch Devin Work display timing. Automation-spawned sessions can be renamed by any org member. Integration page actions are permission-gated. File URLs in the timeline link to the correct git provider. GHES installations resolve bot identity per-config and scope webhook processing to the owning account.
**Collapsible Session Folders**
Sessions in the left sidebar can now be organized into collapsible folders. Click the chevron to expand or collapse a folder, and your preference is persisted per organization.
**Archive All Sessions**
A new "Archive all" option in the sidebar menu lets you archive all sessions or asks at once, with a confirmation dialog and undo support. Child sessions skip the confirmation step for faster cleanup.
**Sub-Devin Session Filter**
The sessions page now includes a "Sub-Devin" filter that lets you view child sessions independently, with support for combined parent and child filtering.
**Default Member Roles**
Enterprise admins can now configure default roles that are automatically assigned to new organization members on join, with badge display in the members list and safeguards against accidental deletion of roles in use.
**GHES App Registration Restriction**
GitHub Enterprise Server app registration is now restricted to one app per account and host combination, preventing duplicate registrations with a clear error message when a conflict is detected.
**Copyable Organization ID**
Your Organization ID is now displayed with a one-click copy button on both the Settings → General and Settings → Devin API pages, making it easy to share with support or use in API calls.
**Admin-Enforced Settings Lock Icon**
Settings that have been locked by an admin now display a lock icon with an explanatory tooltip, replacing the previous banner-style callout for a cleaner interface.
**MCP OAuth Client Credentials**
When installing MCP integrations that don't support Dynamic Client Registration (such as Salesforce), you can now supply your own OAuth client credentials directly in the configuration flow.
**Tavily MCP in Marketplace**
Tavily web search is now available in the MCP marketplace, providing AI-optimized real-time web search and content extraction capabilities for your Devin sessions.
**PR Actions & Auto-Review Settings**
The PR actions menu in Devin Review has been restored with an auto-review toggle and personal settings popover, giving you quick access to review preferences without leaving the review interface.
**Checks Tab Always Visible**
The Checks tab is now always visible in the embedded PR review experience, and the merge-status popover properly restores the checks UI so you can always see CI status at a glance.
**Improved @-Mention Search**
The @-mention search in the chat input now uses fuzzy bag-of-words matching, so queries like "setup-dev" will find "setup-devin-dev". Repositories are also ranked first in the dropdown for faster access.
**Slack Improvements**
This release includes several Slack integration improvements: channel names now resolve correctly even for channels you haven't joined, mentions display as styled blue pill badges, unmapped channel messaging is clearer, the Watch channel option appears at the top of the trigger submenu, stale channel lists are fixed, and duplicate webapp-to-Slack thread posts are suppressed.
**Slack Security Hardening**
Enterprise channel isolation for Slack thread-attach has been hardened with runtime authorization that validates channels against enterprise channel preferences, preventing cross-organization channel access.
**Video Recording Download**
You can now download session recording videos directly from the video player controls.
**Miscellaneous Improvements**
This release also includes: file re-upload fix, archived chip now clickable for non-owners with unarchive permission, network config available for finished sessions, test recording viewer close button visibility fix, settings search improvements, back buttons on MCP marketplace and knowledge detail pages, deep mode callout hidden when disabled, repo name truncation so filter stays visible, mobile agent selection single-tap fix, Devin Review file scroll and merge status fixes, skills link fix, Slack support channel in help popover, and wait tool rendered as standalone worklog event.
**Snapshot Build Delete**
You can now delete snapshot builds directly from the build history menu or detail page, with a confirmation dialog to prevent accidental removal. This makes it easier to clean up old or failed builds without navigating away from your environment settings.
**MCP Multiline Environment Variables**
When configuring MCP server connections in the marketplace, you can now enter multiline values for environment variables — such as PEM private keys, JSON service account credentials, and Snowflake key passphrases — without needing to escape or flatten them first.
**Sub-Devin Sidebar Improvements**
Sub-Devin sessions spawned by automations can now be pinned and reordered independently in the sidebar, and they appear expanded by default so you can see their status at a glance without clicking to expand.
**Voice Recording While Devin Is Working**
The microphone button now appears alongside the stop button while Devin is actively working, allowing you to record and send voice follow-ups without waiting for Devin to finish its current task.
**Settings Redesign**
Settings pages have been redesigned with a hub-style layout, improved search across all settings, and a streamlined navigation structure. An announcement dialog introduces the new experience on first visit, and legacy settings URLs automatically redirect to their new locations.
**Archive Active Session Warning**
When you archive a session that is still actively working, a warning dialog now informs you that archiving will put both the session and any child sessions to sleep before proceeding.
**Share Session on Mobile**
A new "Share session" action is available in the sidebar session menu on mobile devices, making it easy to share session links directly from your phone.
**Devin Review Mobile Improvements**
On mobile, tapping "Ask Devin" on a comment now opens the chat panel directly, pull-to-refresh is available on the review scroll container, and bug/flag tap targets have been fixed so they open on the first tap and reveal the associated comment.
**V3 API Enhancements**
The V3 API now supports filtering sessions by repository name via the `repo_names` parameter, filtering by archive status via `is_archived`, specifying `devin_mode` when creating sessions, and setting `folder_id` and `is_enabled` when creating or updating knowledge notes.
**Enterprise Member Invite Acknowledgement**
When inviting new members to an enterprise organization from the admin panel, an acknowledgement modal now confirms the invitation details before it is sent.
**Rename Context to Skills & Rules**
The "Context" section in settings has been renamed to "Skills & Rules" to better describe its purpose of managing Devin's skill definitions and behavioral rules for your organization.
**Blueprint Migration Improvements**
The blueprint migration page now displays per-repo session counts, supports filtering by repository, and shows a completed state when all migrations are finished, making it easier to track progress across large organizations.
**Miscellaneous Improvements**
This release also includes: autofocus on confirmation buttons in archive dialogs, plan artifact button polish, configurable CI status in search results, debounced enterprise snapshot builds, server-side event deduplication to prevent duplicate delivery, pinned sessions remaining visible when automations are hidden in the sidebar, removal of the misleading "Action required" label for Python sessions awaiting instructions, schedule list cap raised from 50 to 200, monitor trigger cleanup when adding new Slack triggers, repo setup status fix for Dynamic Repo Setup organizations, "Approve session" visibility in the sidebar even after all PRs are merged, inline image deduplication by URL, streaming scroll stability fix, high-resolution home screen icon for Android, beta Vite mode build fix, fast mode loading indicator reset on session switch, and sidebar hover cards on expanded non-active sections.
**Devin Review API**
You can now trigger Devin Review programmatically via the REST API. Use `POST /v3/organizations/{org_id}/pr-reviews` with a service user token or PAT to initiate reviews from CI pipelines, scripts, or custom integrations.
**Mermaid Diagram Rendering**
Mermaid code blocks in session messages now render as interactive SVG diagrams with zoom and pan controls, making it easier to explore flowcharts, sequence diagrams, and architecture diagrams that Devin produces.
**Close PRs on Session Archive**
When archiving a Devin session, a dialog now appears where you can optionally close any linked GitHub pull requests, keeping your repository tidy without manual cleanup.
**Per-PR Auto-Review Toggle**
You can now enable or disable automatic Devin Review on a per-PR basis from the PR actions menu, giving you granular control over which pull requests receive automated review without changing your organization-wide settings.
**Sidebar Session Notifications**
The session sidebar now shows persistent status labels, such as "PR created," "Awaiting instructions," or "Approve session," alongside timestamps so you can quickly see what each session needs. Sessions also display read/unread indicators: an orange dot marks sessions with unread updates, and the dot clears once you open the session.
**Service User Permission Management**
Enterprise administrators can now assign the `ManageAccountServiceUsers` permission in custom roles, providing granular control over who can create and manage service users and API keys within the organization.
**Ask Devin in PR Discussions**
The "Ask Devin" button is now available on discussion tab thread comments in Devin Review, making it easy to ask follow-up questions or request changes directly within review conversation threads.
**MCP Secret Scoping**
When adding secrets for custom MCP server connections, you can now choose between personal scope, visible only to you, or organization scope, shared with your team, via a new scope selector in the creation dialog.
**Clickable Diff Stats in Worklog**
Clicking the +N/-M diff stats in worklog group headers now opens a scoped diff tab showing only the file changes from that specific group, making it faster to review exactly what changed at each step.
**Repo Selector Fix**
The select-all checkbox in the repository selector now correctly toggles only the repositories matching your current search filter, rather than selecting all repositories regardless of the filter.
**Slack Tool Use in Worklog**
When Devin interacts with Slack during a session (sending messages, adding reactions, reading channels), these actions now appear in the worklog and progress UI with a dedicated Slack icon and action details.
**Settings Search Improvements**
Settings pages now use a centralized item registry with keyword-driven search, delivering more accurate and comprehensive results when searching across all settings pages.
**Command Palette Search**
Fixed search ordering in the command palette so results rank correctly, and resolved a scroll view issue in the search results window.
**Review Commit Links**
Fixed commit links in Devin Review to point to the correct URL path, and improved status indicators for review progress.
**Default Branch Detection**
Fixed an issue where repository indexing could use the wrong branch as the primary branch instead of the actual GitHub or GitLab default branch, which could affect DeepWiki and search results.
**Stacked Review Permissions**
Enterprise admins can now assign tiered PR Review access levels to their organization members: manual-only review, automatic review on PR creation, or automatic review on every push. This gives administrators granular control over how and when Devin Review engages with pull requests across their organization.
**Skill Slash Commands**
You can now invoke skills by typing `/name` in the prompt input, in addition to the existing @mention syntax. Skills are grouped by repository in the dropdown for easier discovery.
**Auto-Attach Large Paste**
Pasting a large block of text into the prompt input now automatically attaches it as a file instead of filling the text box, preserving any message you've already typed.
**Jira Project Mapping Redesign**
The Jira project mapping modal has been redesigned with a fixed header and scrollable content area, making it easier to configure mappings for organizations with many Jira projects.
**Auto-Fix Includes CI Checks**
The "Auto-fix with Devin" button on pull requests now includes failing CI check names in the prompt alongside review findings, giving Devin more context to resolve issues in a single pass.
**Linear Team Mapping Improvements**
The default organization is now optional when configuring enterprise Linear team mappings, and unmapped teams can be explicitly cleared to "None" instead of requiring a catch-all mapping.
**Session Origin in API**
The v3 API session response now includes an `origin` field indicating how the session was created (webapp, Slack, API, or CLI), making it easier for API consumers to categorize and filter sessions programmatically.
**Deleted Orgs in Enterprise Sessions API**
Enterprise session endpoints now support an `include_deleted_orgs` parameter, giving enterprise admins visibility into sessions from organizations that have been removed.
**Snapshot Revert for Declarative Setup**
Users with the ManageOrgSnapshots permission can now revert an organization from declarative environment configuration back to classic configuration, without needing the broader ManageOrgSettings permission.
**Revamped Blueprint Authoring Experience**
The blueprint editor has been redesigned with a shared layout, per-section play buttons, and a bottom terminal drawer. You can now deep-link directly into a repo's blueprint editor, making it faster to author and test environment setups.
**Enterprise Commit Email Lock**
Enterprise admins can now require all member commits to use the user's primary email. The lock is enforced across snapshot setup, session creation, and PR digest commits, helping enterprises keep commit attribution consistent for audit and compliance.
**PR Auto-Close Removed**
Devin sessions no longer automatically close their pull requests when the session ends. Open PRs now stay open by default so you can manage their lifecycle yourself, with no surprise closures.
**Hybrid Comment Mode in Devin Review**
When Devin Review is opened alongside a Devin session, review comments now default to hybrid mode — anchored to specific lines where possible and falling back to file-level comments otherwise — instead of forcing one or the other.
**Auth-Type Badges in Git Connections**
The git connection filter dropdown on the repository permissions page now shows a PAT, App, or OAuth badge next to each connection, making it easier to disambiguate connections that share a name.
**Slack Trigger Message in Sessions List**
Sessions started from Slack now display the user's triggering Slack message in the sessions list instead of the system prompt, making it easier to identify Slack-launched sessions at a glance.
**PR Digest List Redesign**
The PR digest list has been redesigned with a cleaner layout that matches the sessions list view, making it easier to scan and navigate through pull requests.
**Double-Click File Attachment Picker**
Double-click the plus button in the prompt input to directly open the file attachment picker, skipping the intermediate menu.
**Sensitive Toggle for Secrets**
When Devin requests a secret, you can now toggle whether the value should be masked (sensitive) or visible, instead of it always defaulting to masked.
**Merged Multi-Edits in Progress Tab**
Consecutive file edits to the same file are now merged into a single entry in the progress tab, showing a combined diff from the original to the final version instead of individual per-edit diffs.
**Session Category and Subcategory in API**
The v3 API session response now includes category and subcategory fields. A new category filter is available on session list endpoints, and session exports also include these fields.
**Wide Markdown Tables in Chat**
Markdown tables in Devin's chat messages can now extend beyond the chat column width, preventing cramped multi-column tables from being unreadable.
**SSO Connection Picker**
Organizations with multiple SSO connections for the same email domain now see a picker on the login page instead of being auto-redirected to the first match, letting users choose the correct identity provider.
**MCP OAuth Token Expiry Warnings**
Invalid or expired MCP OAuth tokens are now flagged with warning banners in the integrations UI. A reconnect button lets you re-authorize without navigating away from the page.
**Repository Permissions Decoupled from Git Integrations**
Repository permissions are now managed separately from git integration settings with a view/manage split, giving admins finer-grained control over who can modify repository access versus who can manage the underlying git connection.
**View Consumption Permission**
A new ViewAccountConsumption permission separates read access to usage and consumption data from billing write access, allowing admins to grant visibility without full billing control.
**Attachments in Question Answers**
File attachments are now included when you answer Devin's prompts. Previously, attached files were silently dropped.
**MCP Auth Status Feedback**
MCP authentication requests now show success or error status in both the webapp and Slack after completion, so you know immediately whether authorization succeeded.
**Merge Time Reduction in Review**
The Devin Review page now displays the merge time reduction percentage, showing how much faster PRs are merged with Devin Review enabled.
**PR Digest for Disconnected Users**
The Review page now shows a read-only digest of PRs from your Devin sessions — including open, draft, merged, and closed PRs — even if you haven't connected GitHub yet.
**GitHub Enterprise Server in Review**
GitHub Enterprise Server instances can now be selected in the Review page's Link GitHub flow, and GHES organizations appear in the Devin Review org selector.
**Review Permissions Enforcement**
Repository-level review permissions are now enforced, giving admins control over which repositories Devin Review can access.
**IDP Groups Management**
Enterprise settings now include a management UI for Identity Provider (Okta) groups, letting admins map groups to roles, view group members, and detect user conflicts with existing role assignments.
**Secure Mode Description**
The Secure mode description in enterprise settings has been rewritten to more clearly explain what Secure mode does and when to use it.
**WikiGenerationItem Card**
A new card is now displayed in sessions when the generate\_wiki MCP tool is invoked, giving better visibility into wiki generation progress.
**GHES Links in Integrations**
GitHub Enterprise Server user account links have been moved to the Integrations section of your profile for easier access.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish: sessions now indicate which are in an "Action Required" state, fixed the playback speed dropdown not opening on click, resolved invisible text in chat inputs on light backgrounds, fixed sidebar glyph flickering, corrected the Context Growth chart x-axis to use continuous datetime, removed checkboxes from combobox options, fixed seat type dropdown clipping, improved seat invitation copy for proper singular/plural phrasing, clarified the "available full seats" invite warning, updated flex seats to show as unlimited on the members page, and hid the Connect GitHub banner for GitLab MRs and during the Review intro overlay.
**Close PR or Convert to Draft in Review UI**
The PR review merge bar now includes options to close a PR or convert it to a draft directly from the review page.
**Inline Session Rename**
Sessions can now be renamed inline directly in the sidebar without opening a dialog.
**Smart Table Column Sizing**
Tables throughout the app now use content-aware column width sizing for better readability.
**Faster Sidebar Session Loading**
The sidebar now lists sessions faster and more reliably, with improved rendering performance and optimistic updates when creating new sessions.
**Datadog Remote MCP Server**
Datadog is now available in the MCP marketplace as a remote MCP server with OAuth-based authentication, so Devin can query your Datadog dashboards and metrics directly.
**ACP Summarizer**
Agent Client Protocol now supports a summarizer method for generating session summaries programmatically, useful for integrations that need a concise recap of what Devin accomplished.
**Granola MCP Server**
The Granola MCP server is now promoted out of beta, letting Devin access your Granola meeting notes during a session.
**Pagination and Search for Review Settings**
Enterprise review settings now support pagination and search for repository and user lists, making it easier to manage large configurations.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish, including a proper 404 error page for invalid URLs, frontend performance optimizations, and assorted stability improvements across the webapp.
**Theme Selector Generally Available**
The theme selector is now generally available, with system theme as the default so Devin automatically matches your OS light or dark mode.
**Wiki Effort Level Descriptions**
When choosing a DeepWiki effort level, each option now shows its expected ACU range so you can pick the right trade-off between cost and depth with confidence.
**DeepWiki Cost Breakdown Modal**
The DeepWiki cost breakdown modal is back, giving you an ACU-level view of where a wiki generation spent its budget.
**Cancel In-Progress Snapshot Builds**
You can now cancel an in-progress snapshot build directly from the snapshot list without waiting for it to finish or fail.
**Snapshot Blueprint Ordering**
Snapshot detail rails and repository-level blueprints now respect your configured blueprint ordering, so the list you see matches the order you set.
**Scheduled Session Failure Email Rate Limiting**
Failure email notifications for scheduled sessions are now rate limited, so a scheduled run hitting the same problem repeatedly will no longer flood your inbox.
**Knowledge Search Auto-Expand**
When you search your knowledge base, any folder containing a matching note now automatically expands so you can see the result in context without hunting for it.
**Profile Integrations Filter**
Your profile page now only shows integrations that are actually connected for your organization, cutting the clutter from services you do not use.
**Browser Tool Parity Improvements**
Devin's browser tool now handles native browser dialogs, intercepts file chooser prompts, respects navigation guards, and restores focus correctly, bringing its behavior much closer to a real user browsing the web.
**Amplitude MCP Server**
Amplitude is now available in the MCP marketplace, so Devin can pull product analytics directly into a session without a custom integration.
**One-Click MCP OAuth Install**
Installing an MCP server that uses OAuth now returns the authorization URL directly, skipping an extra click and getting you connected faster.
**Personal MCP Servers**
You can now connect personal MCP servers, which enable Devin to use MCPs with authorization provided by an individual user rather than shared across an organization.
**Richer ACP Methods and @-Mentions**
Agent Client Protocol now carries @-mentions as structured resource blocks and adds new methods for listing repositories, saving secrets, archiving sessions, approving deploys, and attaching to the interactive browser, giving ACP clients a much richer surface area to work with.
**Devin CLI Polish**
The Devin CLI now preserves streamed shell output alongside exit codes, supports a `/resume` alias, renders plan-mode exits more clearly, and uses focus pings to keep a session from sleeping while you are actively watching it.
**Reconnecting VNC Screen**
The interactive browser now shows a reconnecting screen while its VNC stream is recovering, so you get clear feedback instead of a frozen view when the connection briefly drops.
**Unlink GitHub Enterprise Server OAuth**
You can now unlink a GitHub Enterprise Server OAuth connection from your account, making it easy to rotate credentials or clean up stale integrations.
**Total ACUs Column in Usage Table**
The Users table in Usage analytics now includes a Total ACUs column, so enterprise admins can rank and compare per-user consumption at a glance.
**Bulk Repository Secrets Import**
Enterprise admins can now import multiple repository secrets at once through a new bulk import flow on the repository configuration page, replacing the old one-at-a-time workflow.
**Minor Bug Fixes and Improvements**
This release also includes a range of smaller fixes and polish across the webapp, including repository branch dropdowns that now size correctly, the DeepWiki section hidden when no branches are indexed, a fix for Linear OAuth cancellations returning errors, correct starting numbers on streamed ordered lists, a copy-message button that now copies only the selected message, and assorted other stability and layout improvements.
**Auto-merge from Devin Review**
You can now enable or disable GitHub auto-merge directly from the Devin Review merge button, so approved pull requests land as soon as checks pass without an extra trip to GitHub.
**Enterprise Review Consumption by Repository**
The Reviews tab on the Enterprise Consumption page now groups Devin Review spend by repository with current-cycle vs previous-cycle columns, a search box, and CSV export, making it much easier for enterprise admins to see where their review spend is going.
**Devin Review Breakdown in v3 Consumption API**
The v3 consumption API now reports Devin Review as its own line item in the product breakdown alongside sessions and indexing.
**Categorization and Subcategories**
Session categorization and subcategories are now generally available for every workspace, giving you a consistent way to organize and filter your Devin sessions.
**Pinned Organizations Sync Across Devices**
Your pinned organizations are now stored server-side and follow you across every device and browser you sign in from.
**Session Message Permalinks**
Every message in a session now has its own shareable link, so you can point teammates directly at the exact moment you want them to see.
**Larger Attachment Uploads**
Session attachments now support files up to 75 MB, up from the previous 20 MB limit.
**Higher-Quality Wiki v2**
Wiki v2 now uses stronger reasoning, subagents, and agentic page writers to produce noticeably better documentation, and shows the ACU cost of the last generation so you can see exactly what each refresh costs.
**Guardrails V3**
Our new pattern-based guardrail prompts significantly reduce false positives while keeping the same level of protection.
**Ask Sub-mode Renamed to Q\&A**
The Ask sub-mode is now simply labeled "Q\&A" to better reflect what it does.
**Consolidated Session Header Menu**
Session header links are now grouped into a single hyperlink menu for a cleaner, less crowded header.
**Faster Syntax Highlighting**
Code blocks across the app now render with an incremental, worker-based syntax highlighter for noticeably faster and smoother highlighting on large files.
**Scroll Restoration**
Navigating back through the app now restores your previous scroll position so you land where you left off.
**Japanese Localization Refresh**
Japanese localization strings have been refreshed across the webapp.
**MCP Marketplace Upgrades**
The MCP marketplace now includes a Recommended section, smarter Figma discovery, and a shared interactive OAuth flow that shows connection status and errors directly in chat as you install servers.
**MCP Audit Logs**
Enterprise audit logs now cover MCP server updates and secret link and unlink events for better visibility into integration changes.
**Session ACU Hard Caps**
Enterprises can now set a hard upper limit on total ACUs per session, with an acknowledgement modal and real-time validation so users always know when a session is approaching the cap.
**Cerebras Now Enterprise-Ready**
Cerebras is now available as an enterprise-ready inference provider for organizations that want to use it for their Devin workloads.
**US Privacy Controls**
Devin now honors Global Privacy Control signals and supports CCPA and CPRA opt-out requests for customers in the United States.
**Refreshed Settings Layout**
Insights, identity provider, and several other enterprise settings pages have been migrated to the new settings layout and design system for a more consistent look and faster navigation.
**Enterprise Secrets Table Polish**
The enterprise secrets table now includes an environment variable column and a build-only toggle, with a simplified layout that removes the Name column and type selector.
**Minor Bug Fixes and Improvements**
Numerous smaller fixes and polish, including sidebar collapse state persistence, sidebar pull requests loading without a GitHub connection, better multi-PR session isolation, deduplicated Slack file forwarding, quota reset on plan upgrade, billing cycle short-month correction, snapshots sorted alphabetically, an auto-organize tooltip explaining when it is disabled, and the Category beta label and Review beta badge retired for paying organizations.
**Classic Environment Setup Deprecation**
Classic environment setup is being deprecated on June 30, 2026, when all organizations move to declarative configuration (blueprints). Your classic machine configuration stays available as a read-only reference until July 31, 2026. See [Migrating to declarative configuration](/onboard-devin/environment/migration).
**Enterprise-Scoped Secrets**
Enterprise admins can manage secrets at the enterprise level, automatically shared across all organizations. Initially only available to users of declarative environment configuration.
**Enterprise ACU Visibility Control**
Enterprise admins can control whether users see ACU usage info.
**Enterprise MCP Registry Enforcement**
Enterprise admins can enforce an MCP server allowlist across their organization.
**Enterprise Build Pinning**
Enterprise admins can pin specific Devin builds and roll back to previous versions. Initially only available to users of declarative environment configuration.
**Devin Review Auto-Fix**
When Devin Review detects bugs in a PR, a new "Auto-fix with Devin" button launches a session to fix them in one click.
**PR Review Chat CI Tools**
Check CI status and view CI job logs directly within the PR review chat.
**Pin Sessions**
Pin important sessions from the three-dot menu for quick access.
**Organization Terminology**
All "team" references updated to "organization" across the product. No functional change.
**Improved Questions UI**
Navigation between questions, inline "Something else" input, cleaner design.
**Auto-Skip Pending Questions**
Devin auto-skips pending questions when you send a new message.
**Cleaner File Paths**
Relative paths with structured format instead of full absolute paths.
**PR Review Polish**
Sticky tabs, bug navigation, copy buttons, chat CTA at end of diffs, empty state for PRs without descriptions.
**Structured Output for Child Sessions**
Child sessions can return structured JSON via schema for automated workflows.
**Smarter Codebase Search**
Recency-based repository ordering for faster, more accurate results.
**/new Slash Command**
Alias for /clear to start a fresh conversation.
**Azure DevOps Service Principal**
Connect Azure DevOps via service principal instead of personal OAuth.
**Linear Assignee Filter**
Rich picker for Linear assignee filtering in automations.
**Linear Token Refresh**
Linear connections now auto-refresh OAuth tokens, preventing disconnection on expiry.
**Minor Bug Fixes and Improvements**
GitLab PAT rotation fix, responsive mobile layouts, startup command display improvements, build log scroll-to-bottom, Ctrl+O expand hint, shell security improvements, automations UI fixes.
**PR Resuming**
Devin can now take over and work on existing pull requests that weren't created in the current session, enabling continuation of work across sessions.
**Devin Review Improvements**
Added a "lines left to review" counter in the PR review diff viewer, and significantly faster page load times via parallel queries.
**Streaming Terminals**
Terminal output in the session view now streams in real time.
**Connected Accounts Pagination**
GitHub and GitLab connected accounts pages now support pagination and search for organizations with many connections.
**GHES Improvements**
Support for org-level GitHub App registration on GitHub Enterprise Server, with pre-filled app name in the manifest flow.
**Settings Page Redesign**
Multiple settings pages (Schedules, Playbooks, Knowledge, Secrets) have been redesigned with a new unified layout, along with consolidated dialog styles across the product.
**Sticky Sidebar Headers**
Sidebar section headers now stick to the top while scrolling for easier navigation.
**Light Mode Polish**
Multiple fixes for theme-aware colors across modals, dialogs, and components.
**Add or Create Team**
New button in the account dropdown to create a team without going through the GitHub integration flow.
**Auto-open Agents Tab**
The Agents tab auto-opens when child sessions are detected.
**Tab Title Simplification**
Browser tab title simplified to "Devin" with contextual page titles.
**Slack Thread Permissions**
Users without Devin accounts are now blocked from messaging in Devin Slack threads.
**Improved PR Comment Formatting**
Devin's PR comments now include line info and outside-diff context.
**IME Composition Fix**
Fixed an issue where pressing Enter during IME composition (e.g., Japanese input) in Safari would prematurely submit text.
**Ignore Comment Info**
More helpful information shown when Devin Review comments are ignored.
**Environment Setup Cleanup**
Clarified environment description copy and removed redundant buttons.
**Bash Syntax Highlighting**
Terminal output now has syntax highlighting for bash commands.
**Scheduled Session Pill**
Visual indicator for scheduled sessions in the sessions list.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**Preview Agent Toggle**
A new "Preview upcoming features" toggle is available in the agent selector, enabling streaming thoughts and faster execution. Stability may be limited as these features are still in development.
**Inline File Previews**
HTML, PDF, and SVG attachments can now be securely rendered inline in the session sidebar, with a code/render toggle and download button in the file toolbar.
**Focus Mode**
A new focus mode hides the sidebar, header, and right panel for a distraction-free chat experience. Access it from the session menu or with the keyboard shortcut Cmd+Shift+F.
**Agents Tab for Child Sessions**
A new "Agents" tab automatically appears when a session creates child sessions, showing their status, todos, and PRs in one place.
**Test Recording Viewer**
Devin's test recordings now display as rich cards with pass/fail summaries, playback speed controls, and loop functionality.
**Jira Integration Enhancements**
Jira now supports direct session creation from issues, service account connections, and per-project trigger options for controlling when Devin is activated.
**Redesigned Integration Settings**
The Linear, Jira, and Slack integration settings pages have been redesigned with cleaner layouts for team mapping, playbook management, bot allowlists, and automation rules.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Light Mode (Beta)**
Devin now supports a light mode theme. You can switch between dark, light, and system themes from your profile settings.
**Streaming Shell Output in Worklog**
Background shell process output now streams inline within worklog items, so you can monitor long-running processes without switching to the terminal.
**Cookie JSON Builder for Secrets**
A new tabbed interface for cookie secrets lets users paste raw JSON (auto-encoded to base64) with validation, parsed previews, and expiration warnings.
**Org-Level Metrics API**
New organization-scoped API endpoints for metrics and consumption data.
**Session Insights UI Redesign**
The session insights modal has been redesigned with a refreshed layout, improved empty states, and updated copy.
**Secrets on Initial Prompt**
Users can now attach secrets when creating a new session from the home page, matching existing functionality for follow-up messages.
**Devin Reviews Analytics**
A new Devin Reviews section has been added to the usage analytics page showing review metrics.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Devin Manages Devins**
Devin can now orchestrate Devins and manage your Devin setup directly from any session. This will replace the current Advanced Devin features.
Devin can delegate to a team of managed Devins that work in parallel. Each managed Devin is a full Devin with its own isolated virtual machine. The main Devin session acts as a coordinator — scoping the work, monitoring progress, resolving conflicts, and compiling the results.
New capabilities include:
* Session management – Create child sessions with structured output schemas and playbooks. Search and filter past sessions by tags, playbook, origin, or time range. Analyze past sessions with full search across shell, file, browser, git, and MCP activity.
* Knowledge management – Create, update, delete, and organize knowledge notes into folders. Review knowledge suggestions.
* Playbook management – Create, edit, and delete playbooks.
* Schedule management – Create and manage scheduled sessions including recurring or one-time runs, agent selection, and notification preferences.
**Redesigned Integration Pages**
The integration settings pages have been redesigned with a new layout including connection cards, support sections, and pagination.
**Improved Playbook Page**
The playbooks page now shows a table layout. Each playbook page now shows session count, unique users, and merged PRs per playbook, with a weekly activity chart. Playbooks now include a version history.
**Parent/Child Session Grouping**
Parent and child sessions are now grouped together in the sidebar, so child sessions stay nested under their parent regardless of sorting or filtering.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**On-Demand Session Insights**
Session insights are now generated on demand rather than automatically. You can trigger analysis from the Session Insights button in the UI or programmatically via the new [generate insights API endpoint](/api-reference/v3/sessions/post-organizations-session-insights-generate).
**New Session Inputs**
* An inline voice recording button is now available for hands-free messaging.
* Devin sessions can be @ mentioned to reference them directly in another session.
**Session List Improvements**
* Important sessions can be pinned to the top of the sidebar for quick access.
* A new sidebar filter hides scheduled sessions from the session list.
**Structured Output Modal**
The structured output from sessions created with the API with this parameter set can now be viewed and downloaded from the "Structured output" option in the session menu.
**Markdown Preview**
Markdown files can now be natively displayed in the right panel.
**Datadog MCP Integration**
Datadog is now available as an official integration in the MCP marketplace.
**Default Branch Management**
Users can set and manage the default branch for repository indexing from the repositories management page.
**Schedule: Run as User**
Schedules can now be reassigned to run as the current user via a "Run as me" button in the schedule detail view, also available via the v3 API.
**IdP Groups in Enterprise Settings**
The enterprise members table now shows IdP group memberships for each user.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**Install Devin as an App**
Devin can now be installed as a Progressive Web App on desktop and mobile. On Chrome or Edge, open app.devin.ai and click the install icon in the address bar (or Menu → Install Devin); on iOS Safari, tap Share → Add to Home Screen. Once installed, Devin links open directly in the app.
**Session Status in Browser Tab**
The browser tab favicon now shows a colored status dot on session pages (green when Devin is working, orange when it's waiting for you) so you can spot sessions that need attention without switching tabs.
**Minor bug fixes and improvements**
Various bug fixes, performance improvements, and visual polish across the platform.
**AskDevin Upgrade**
Expanded to support Ask and Plan modes. Now has more advanced code search capabilities which produce more detailed and accurate answers. The status of Devin sessions created from AskDevin can now be seen in the conversation.
**Devin Review: GitHub Commit Status Checks**
Status checks now displayed directly on pull request commits, giving visibility into review progress without leaving GitHub. The status links to the full Devin Review analysis.
To enable this, the Devin GitHub App will request the Commit Statuses and Checks permissions. If these permissions are not granted, all existing functionality is unaffected.
**Repository Selection for Schedules**
Schedules can now be configured with specific repositories that the session will be run with each time the schedule executes.
**Devin 2.2 Launch**
Devin 2.2 is the culmination of hundreds of improvements both big and small over the last few weeks including:
* 3x faster startup time to immediately see Devin's output and build trust that it's on the right track
* A new UI that connects every step of the dev lifecycle: start sessions from anywhere, review agent output directly in Devin, and jump back into sessions from code review.
* Smoother and faster Slack and Linear integrations to start sessions without having to switch context
See past release notes for the full list of the improvements.
**Full Desktop Testing**
Devin now supports end-to-end testing using computer use and can test any desktop app that can run on Linux. Devin will request to QA its PR, if you approve it, it will run your app, use its desktop to click around, and send you an edited recording of the testing for your review.
Existing users can enable Desktop mode in [Settings > Customization](https://app.devin.ai/customization).
**Devin v3 API Officially Released**
The v3 API is coming out of beta and is now the primary API for all Devin functionality. The new API provides all of the legacy API functionality and additionally provides role-based access control, session attribution, and new capabilities.
The legacy APIs (v1 and v2) will be deprecated in the future. The exact date will be announced in the product and in release notes. We commit to providing at least 30 days notice. During the deprecation period, the legacy APIs will continue to work but all new features will only be available in the v3 API.
**Sessions List Redesign**
The sessions list page has been redesigned with an updated layout featuring inline PR previews, message snippets, and status indicators. Sessions can now also be sorted by creation date.
**Merge Conflict Detection**
Devin will automatically notify users when a PR created in a Devin session has merge conflicts. Available on GitHub.com only.
**New Devin Scheduling Options**
Scheduled Devins can now be created as a one-time scheduled event, and existing schedules can be triggered on demand with the "Run now" button.
**Devin Review for GitHub Enterprise Server**
Devin Review now supports GitHub Enterprise Server (GHES) repositories. You can view PR diffs, run analysis, and use the Devin Review chat agent to propose and apply code changes. Some interactions with GitHub such as posting comments, submitting reviews, and merging are not yet supported on GHES.
**Repo Selector Enhancements**
The repository selector now features an "Only" button to quickly isolate a single repository and displays setup and indexed repo counts.
**Session Messages API**
A new `GET /messages` endpoint allows programmatic access to session message history.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Visual Refresh and Polish**
The overall design has been improved and polished across the product. Some button locations have been minorly adjusted, but these changes do not impact the product functionality.
**Devin Fast Mode**
A new "Fast Mode" option is now available in the agent picker, delivering \~2x faster responses with the same intelligence at 4x ACU per session.
**Devin Review: Batch Comments**
When replying to PR review threads, you can now check "Start a review" to batch multiple review comments before submitting them all at once.
**Devin Review: Code Changes from Chat**
The Devin Review chat agent can now propose code edits directly in the conversation. You can review the suggested changes, then apply them as a commit to the PR branch without leaving Devin Review.
**Secure Mode for All Organizations**
Secure mode is now available for non-enterprise organizations. When enabled, Devin loses native internet deployment capabilities. You can find this setting under "Security settings" on the Customization page.
**Skills Support**
Devin now recognizes and uses skills defined in your codebase. Skills provide reusable instructions that Devin can activate, search, and invoke during sessions to follow your team's preferred workflows.
**Settings Search**
A search bar has been added to the settings sidebar, making it easy to quickly find any settings page by name or keyword.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
**Schedule from the Input Box**
You can now quickly create a scheduled Devin session directly from the input box. Use the "Schedule Devin" option in the context menu or switch to the "Create schedule" tab in Advanced mode to set up recurring sessions without leaving the home page.
**Enterprise Organization Selection**
The enterprise landing page has been redesigned with a cleaner organization list, member counts, and sorting options for easier navigation across your enterprise.
**Devin Review: Auto-Review Settings**
Auto-review configuration is now accessible as a settings popover directly in the PR header, making it faster to enable or disable auto-reviews per repository.
**Devin Review: Hide Comment Highlights**
A new setting in the code diff viewer lets you hide comment highlight boxes for a cleaner reading experience when reviewing code.
**Git Permissions Update**
Removed the ability to index repos in the primary organization for enterprises.
**Minor bug fixes and improvements**
Various bug fixes and performance improvements across the platform.
***
## All Release Notes
* [2026 Release Notes](/release-notes/2026)
* [2025 Release Notes](/release-notes/2025)
* [2024 Release Notes](/release-notes/2024)
# Advanced Capabilities
Source: https://docs.devin.ai/work-with-devin/advanced-capabilities
Devin can orchestrate managed sessions, analyze past work, create playbooks, and manage your knowledge base
**These capabilities are available in every Devin session — just ask.** You can also access prompt templates for each capability from the **Explore Advanced Capabilities** page on the Devin home page.
Devin goes beyond writing code. It can break large tasks into parallel workstreams, learn from past sessions, build reusable playbooks, and keep your organization's knowledge base current — all from any session.
## What Devin can do for you
* **Orchestrate managed Devins in parallel**: Break down a large task and delegate pieces to a team of managed Devin sessions, each running in its own isolated VM
* **Analyze session outcomes**: Understand why a session succeeded or failed, identify patterns, and extract learnings
* **Create and improve playbooks**: Turn successful sessions into reusable playbooks, or refine existing ones based on feedback
* **Manage knowledge**: Deduplicate, consolidate, or create new knowledge entries from your codebase
* **Manage schedules**: Set up recurring or one-time automated Devin sessions
These features work in any Devin session — just describe what you need. The **Explore Advanced Capabilities** page on the Devin home page provides ready-made prompt templates for common workflows.
## Managed Devins
Devin can break down large tasks and delegate them to a team of managed Devins working in parallel, each running in its own isolated VM. The coordinator session scopes the work, monitors progress, resolves conflicts, and compiles results.
Devin automatically breaks down large tasks and delegates to managed Devins when it makes sense. You can also explicitly ask Devin to parallelize work — for example, "spin up a managed Devin for each module" or "run this playbook across all services in parallel." Either way, Devin acts as the coordinator: scoping work, monitoring progress, resolving conflicts, and compiling results.
This is the most powerful way to tackle work that spans many files, modules, or repositories — migrations, bulk test coverage, parallel research, and more.
**What the coordinator can do:**
* **Spin up managed Devins** — launch child sessions with specific prompts, playbooks, tags, and ACU limits
* **Message child sessions** — send follow-up instructions or clarifications to running sessions
* **Monitor ACU consumption** — track how much compute each child session is using
* **Put child sessions to sleep or terminate them** — pause or stop sessions that are stuck or no longer needed
* **Schedule messages to itself** — set reminders to check back on long-running child sessions
**Example: Parallelize a 50-file migration**
Ask Devin to analyze your codebase, group files into independent work packages, and launch one session per package — all running simultaneously:
```
Analyze our codebase for all files using the legacy REST client.
Group them into independent work packages that won't conflict,
then start a parallel Devin session for each package to migrate
to the new GraphQL client. Use the "REST to GraphQL Migration"
playbook for each session.
```
See [Migrate 50 Files from REST to GraphQL](/use-cases/gallery/parallelize-migration) for a full walkthrough.
**Example: Run the same task across multiple modules**
Launch multiple Devin sessions at once for repetitive tasks — each session runs independently on its own machine:
```
Run the test coverage report, find the 8 modules below 50%
coverage, and start a parallel Devin session for each module
using our test-writing playbook. Open a separate PR for each.
```
Devin analyzes your request and proposes the sessions for your approval before launching them. See [Batch Test Coverage](/use-cases/gallery/batch-test-coverage) for a full walkthrough.
## Analyzing sessions
Have Devin examine one or more past sessions to understand what happened and why. This is useful for:
* Understanding why a session didn't complete as expected
* Identifying what worked well in a successful session
* Extracting patterns and insights from multiple sessions
To analyze a session, share the session link and describe what you want to learn:
```
This session used 42 ACUs to add pagination to GET /api/users.
I expected ~12. Break down where Devin spent the most time,
what dead ends it tried, and give me a revised prompt that
would avoid these issues.
```
Devin examines the session history, identifies key events, and provides actionable insights.
## Creating and improving playbooks
Turn a successful session into a reusable playbook, or refine an existing one based on real-world feedback.
**Creating a playbook from a session:**
Share one or more session links and describe the playbook you want. Devin analyzes the sessions and produces a structured playbook with procedures, specifications, and advice.
```
This session diagnosed and fixed a memory leak in our payments
service. Create a reusable hotfix playbook for memory-leak
incidents that any on-call engineer can attach to a new session.
```
**Improving an existing playbook:**
Reference the playbook and share sessions where it fell short. Devin compares successes and failures to propose targeted improvements.
```
Our !db-migration playbook keeps failing on foreign key
constraints. Here are 4 recent sessions — analyze the failures,
compare them to the successes, and update the playbook to handle
FK dependencies.
```
## Managing knowledge
Maintain and improve your organization's knowledge base:
* Find and merge duplicate knowledge entries
* Resolve conflicting guidance
* Create new knowledge from codebase patterns
```
Review all knowledge entries and identify duplicates or highly
similar entries. For each set of duplicates, propose a
consolidated version.
```
## Managing schedules
Set up recurring or one-time scheduled Devin sessions for automated workflows like nightly test runs, weekly knowledge maintenance, or daily health checks.
```
Create a schedule that runs every Monday at 8 AM to review
pending knowledge suggestions, deduplicate entries, and resolve
conflicting guidance.
```
See [Scheduled Sessions](/product-guides/scheduled-sessions) for more details.
## Best practices
### Analyzing sessions effectively
When analyzing sessions, be specific about what you want to learn. Instead of asking "What happened?", try:
* "Why did Devin choose this approach instead of the alternative?"
* "What caused the test failures in this session?"
* "What patterns can we extract to create a playbook?"
### Creating useful playbooks
When creating playbooks from sessions:
* Provide multiple successful sessions if available to help Devin identify common patterns
* Describe the intended audience and use case for the playbook
* Specify any constraints or requirements that should be included
### Managing knowledge at scale
For large knowledge bases:
* Start with deduplication to reduce noise
* Then resolve conflicts to ensure consistency
* Finally, fill gaps by creating knowledge from codebase analysis
## Using these features via the Devin MCP
All of the capabilities described above — and more — are available through the [Devin MCP server](/work-with-devin/devin-mcp). Any Devin session or MCP-compatible AI agent can access them directly.
### Session management
Create one or more Devin sessions programmatically, each with its own prompt, playbook, tags, and ACU limit. Search and filter across your organization's sessions by tags, playbook, origin, user, or time range. Inspect any session's full event timeline — list event summaries, fetch detailed event contents, or search across events by text. Send messages to running sessions, terminate or archive them, and manage session tags. After launching parallel sessions, wait for all of them to finish in a single call instead of polling individually.
### Playbook management
List, create, update, and delete playbooks. Attach automation macros to playbooks for trigger-based workflows. Use this to build playbooks from scratch, iterate on existing ones, or clean up unused playbooks.
### Knowledge management
Full control over your organization's knowledge base: create, read, update, and delete knowledge notes. Browse the folder structure, filter notes by repo or folder, and search across note names, triggers, and content. Review, view, and dismiss pending knowledge suggestions that Devin generates from sessions.
### Schedule management
Create and manage scheduled Devin sessions — both recurring (via cron expressions) and one-time. Update schedule frequency, toggle schedules on and off, choose notification preferences, and select which agent to run. This lets you set up automated workflows like nightly test runs, weekly knowledge maintenance, or daily health checks.
### Integration management
View all native integrations (such as GitHub, Jira, and Slack) and MCP servers configured for your organization. Check which integrations are installed, find setup URLs for ones that aren't, and get configuration links for ones that are — letting Devin help you manage your integration landscape.
### Repository documentation
Query and search documentation for any GitHub repository your account has access to. Get a structured list of documentation topics, read full wiki contents, or ask natural-language questions and receive AI-powered, context-grounded answers. List all repositories available to your Devin account.
See the [Devin MCP documentation](/work-with-devin/devin-mcp) for setup instructions and the full tool reference.
## Permissions
These advanced capabilities require the `UseDevinExpert` permission, which is included in the default `org_member` and `org_admin` roles, so all organization members have access by default.
If you need to restrict access, you can create a custom role without this permission and assign it to specific users.
# Ask Devin
Source: https://docs.devin.ai/work-with-devin/ask-devin
Use Ask Devin to ask questions about your codebase, plan tasks, and generate high-context sessions
## Overview
**Ask Devin** is your AI assistant's window into your codebase. Once you've added a repository to Devin, it is automatically indexed so Devin can understand and reason about your code. With Ask Devin, you can:
* **Ask questions** about how your code works, explore architecture, dependencies, and key functions. Ask Devin uses advanced code search capabilities to produce detailed, accurate, and well-cited answers grounded in your codebase.
* **Plan tasks** by working with Devin to scope and plan implementation before writing code. Devin generates a context-rich prompt based on what it learns, ready to hand off to an Agent session.
Whether you're onboarding to a new repo, planning a feature, or exploring unfamiliar parts of the codebase, Ask Devin gives you a fast and reliable way to work with your code using natural language.
When you start a Devin session from Ask Devin, the **status of that session is visible directly in the Ask Devin conversation**, so you can track progress without switching context.
## Recommended Workflow
To get the most out of Devin, follow this workflow:
### 1. Index Your Repository
After connecting your GitHub, GitLab, or other source code provider, [index your repository](/onboard-devin/index-repo). Devin automatically indexes your codebase in the background, enabling powerful tools like **DeepWiki** and **Ask Devin**.
Index any repo after git permissions have been granted
### 2. Use Ask Devin to Explore and Plan
Go to [Ask Devin](https://app.devin.ai/search) to:
* Ask technical questions about your code and get detailed, accurately cited answers powered by advanced code search
* Plan and scope projects, break down tasks, and generate context-aware prompts for Agent sessions
Ask Devin any question about your repo, or use Plan mode to scope tasks Devin answers in natural language with code citations, always grounded in your codebase
### 3. Start a Session from Ask Devin
Once you have used Ask Devin to understand the code and clarify your goal, you can start a session directly from the conversation. This is the best way to initiate work with Devin because:
* Devin starts with clear context from your Ask Devin conversation
* The prompt is automatically tailored to your task and codebase
* You are more likely to get successful, relevant results
* The **session status is displayed directly in the Ask Devin conversation**, letting you monitor progress without leaving the page
Devin writes a context-rich prompt from your sessionTrack session progress in the conversationView completed results and PRs
# Computer Use
Source: https://docs.devin.ai/work-with-devin/computer-use
How Devin uses a full desktop environment to interact with GUIs, test applications, and visually verify changes
Devin has access to a full desktop environment — not just a browser. It can move the mouse, click on UI elements, type on the keyboard, take screenshots, and interact with any application that runs on the desktop. This capability is called **Computer Use**, and it allows Devin to test and interact with your software the same way a human would.
Computer Use works on both **Linux** (the default session platform) and **Windows** sessions. See [Supported platforms](#supported-platforms) for details.
## What Is Computer Use?
Computer Use gives Devin direct access to a graphical desktop environment with a mouse and keyboard. This goes beyond browser automation — Devin can interact with **any application** that renders on screen, including:
* **Web applications** in Chrome (clicking buttons, filling forms, navigating pages)
* **Desktop applications** that run on the session's platform (Linux or Windows), including Electron apps, IDEs, and platform-native GUIs
* **Terminal-based UIs** (TUI programs, interactive CLIs)
* **Any visual interface** that can be displayed on the desktop
Devin sees the screen as a 1024×768 pixel display and can perform actions like clicking, typing, scrolling, dragging, and taking screenshots — just like a human sitting at the computer.
## Supported Platforms
| Platform | Computer Use support |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| Linux (default) | Supported — sessions run a full Linux desktop environment |
| Windows | Supported — sessions on [Windows environments](/onboard-devin/environment/windows-support) run a full Windows desktop environment |
| macOS | Not supported |
The Computer Use experience is the same on both platforms: Devin uses the mouse and keyboard, takes screenshots, runs Chrome for web apps, and can record its testing sessions. On Windows, Devin can additionally test Windows-native desktop applications (e.g. WPF, WinForms, and other apps that only run on Windows). To run sessions on Windows, configure a Windows blueprint as described in [Windows support](/onboard-devin/environment/windows-support).
## How to Enable It
Computer Use is controlled by the **Enable desktop mode** toggle in your organization's customization options.
1. Go to [**Settings > Customization**](https://app.devin.ai/customization)
2. Under the **Browser interaction** section, toggle **Enable desktop mode** on
3. Devin will now use its desktop environment during sessions
Desktop mode is available on all plans. Only organization admins can change this setting.
## When Computer Use Runs
Once Desktop mode is enabled, Computer Use is available in every session. There are three ways it gets used:
### After creating a PR
When Devin creates a PR, it offers a **Test the app** button. Clicking it triggers the full [testing workflow](/work-with-devin/testing-and-recordings) — Devin starts your app, uses Computer Use to interact with the desktop, tests the changes, and sends you a recording.
### On request during a session
You can ask Devin to test at any point during a session — no special syntax needed, just natural language. For example:
* "Test the changes you just made and send me a recording"
* "Open the app in the browser and verify the login page works"
* "Launch the desktop app and check that the new menu item appears"
### Autonomously when appropriate
Devin decides on its own when desktop interaction is the right tool for the job. If a task involves clicking UI elements, navigating an app, filling out forms, or visually verifying something, Devin will use Computer Use without being explicitly asked. You don't need to tell Devin *how* to interact with the screen — just tell it *what* to accomplish.
## What Devin Can Do with Computer Use
### Test web applications end-to-end
Devin can start your app locally, open it in Chrome, and click through entire user flows — login, navigation, form submission, checkout — verifying that everything works as expected.
### Test desktop applications
Any application that runs on Devin's session platform can be tested. On Linux sessions this includes Electron apps, Java Swing/AWT applications, GTK/Qt apps, and more. On [Windows sessions](/onboard-devin/environment/windows-support), Devin can also test Windows-native applications such as WPF and WinForms apps. Devin launches the app, interacts with its GUI, and verifies behavior.
### Visual verification
Devin can take screenshots at specific points during testing to verify that layouts, styling, and UI elements look correct. It can compare what it sees on screen against expected behavior and flag visual issues.
### Interact with complex UI flows
Some testing scenarios require multi-step GUI interactions that go beyond simple API calls or browser automation — things like drag-and-drop, context menus, keyboard shortcuts, or navigating between multiple windows. Computer Use handles all of these.
### Record testing sessions
Devin can record its screen while testing, annotating key moments in the video. The recording is then processed and sent to you so you can watch Devin interact with your app and confirm the changes work. See [Testing & Video Recordings](/work-with-devin/testing-and-recordings) for full details on the recording workflow.
## How Computer Use Works
When Devin uses Computer Use during a session, it follows this process:
1. **Takes a screenshot** of the current screen to understand what's visible
2. **Identifies interactive elements** — buttons, text fields, menus, links — and decides what to interact with
3. **Performs an action** — clicks, types, scrolls, or uses keyboard shortcuts
4. **Waits and observes** — takes another screenshot to see the result of the action
5. **Repeats** until the task is complete
This screenshot-action loop allows Devin to adapt to whatever is on screen, handling dynamic content, loading states, pop-ups, and unexpected dialogs just like a human would.
## Computer Use and Testing
Computer Use is the foundation of Devin's [testing and recording](/work-with-devin/testing-and-recordings) workflow. When Devin tests your application after creating a PR:
1. **Setup** — Devin installs dependencies, starts your app, and prepares the environment
2. **Test planning** — Devin reads the diff and creates a focused test plan
3. **Execution via Computer Use** — Devin uses its desktop to interact with your app, following the test plan step by step
4. **Recording** — The entire process is captured on video with annotations, then sent to you for review
The key difference between Computer Use and the Testing & Recordings workflow is scope: **Computer Use** is the underlying capability (desktop interaction), while **Testing & Recordings** is the structured workflow that uses Computer Use to test your PRs and deliver video proof.
## Tips for Getting the Best Results
* "Open the app, click the Settings button in the top-right, toggle dark mode, and verify all text remains readable"
* "Launch the Electron app, create a new document, type some text, and verify it saves when you close the window"
* "The dashboard should show three charts with no error messages"
* "After submitting the form, a green success banner should appear at the top of the page"
### Pre-configure access
If your app requires authentication, set up [secrets](/product-guides/secrets) ahead of time so Devin can log in without asking you during the session. Complete [environment configuration](/onboard-devin/environment) to ensure Devin can install dependencies and start your app without issues.
### Create testing skills
For apps you test frequently, create a [Skill](/product-guides/skills) that tells Devin exactly how to set up and test your application. This saves time on repeated sessions and ensures consistent testing. See [Testing & Video Recordings — Skill Suggestions](/work-with-devin/testing-and-recordings#skill-suggestions) for examples.
## Scripted Browser Use via Playwright
Devin's Chrome browser exposes a **Chrome DevTools Protocol (CDP)** endpoint that Playwright can connect to. Devin can write and run Playwright scripts to automate browser interactions — such as login flows or systematic data entry — against its own running browser. You can also write these scripts yourself and check them into your repo. For most other browser actions, Devin's native Computer Use or browser tools are recommended.
### How it works
Devin's Chrome instance listens for CDP connections on port **29229**. A Playwright script can attach to this browser, perform actions (fill forms, click buttons, handle redirects), and then disconnect. Because the script connects to the *existing* browser rather than launching a new one, all state changes — cookies, localStorage, auth tokens — persist after the script exits.
This means Devin can immediately use the authenticated session: refresh pages, navigate, and interact with the app normally.
### Example: connecting to Devin's browser
```python theme={null}
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp("http://localhost:29229")
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
# Example: navigate and log in
page.goto("https://example.com/login")
page.fill('input[name="email"]', "user@example.com")
page.fill('input[name="password"]', "password")
page.click('button[type="submit"]')
page.wait_for_url("**/dashboard")
print("Login successful!")
```
After this script runs, Devin's browser is logged in and ready to use — no manual interaction required.
### When to use this
Automate multi-step login flows (e.g., Okta, Auth0, Google SSO) that would be tedious to click through manually every session.
Include a login script in your [environment setup](/onboard-devin/environment) so Devin starts every session already authenticated.
Store login or data entry scripts in a [Skill](/product-guides/skills) so Devin can invoke them automatically when needed.
Script repetitive form submissions or bulk data entry that would be slow and error-prone via point-and-click.
### Tips
* Store login scripts in your repo's `.agents/skills/` directory so they persist across sessions
* Use [Secrets](/product-guides/secrets) to store credentials — reference them via environment variables in your scripts
* The CDP endpoint is always `http://localhost:29229` — this is the same port whether Desktop mode is enabled or not
* After the script runs, Devin can use either Computer Use or browser tools to interact with the authenticated session
## Troubleshooting
### Devin can't find a UI element
If Devin is unable to locate a button or element on screen, try being more specific in your instructions — describe the element's location, label, or surrounding context. For example, "click the blue **Save** button at the bottom-right of the modal" is better than "click Save."
### The app doesn't render on Devin's desktop
By default, Devin runs a Linux environment. If your application only runs on Windows, run your sessions on a [Windows environment](/onboard-devin/environment/windows-support) so Devin can test it there. macOS-only applications are not supported. Web applications work regardless of platform since they run in Chrome. For desktop apps, ensure they have a build for the platform your sessions run on.
### Devin is clicking the wrong things
If Devin is misinteracting with your UI, provide a [Skill](/product-guides/skills) or [Knowledge](/product-guides/knowledge) entry with specific navigation instructions for your app. Describing the exact steps ("click the hamburger menu in the top-left, then click **Settings** in the dropdown") reduces ambiguity.
# Data Analyst Agent
Source: https://docs.devin.ai/work-with-devin/data-analyst
Use the Data Analyst agent for fast database queries, data analysis, and visualizations
The **Data Analyst Agent**, also known as **DANA** (Data ANAlyst), is a specialized version of Devin optimized for querying databases, analyzing data, and creating visualizations. It's designed to be fast, concise, and tuned specifically for data analytics workflows.
## When to use the Data Analyst Agent
The Data Analyst Agent is ideal when you need to:
* **Query databases**: Write and execute SQL queries against your connected data sources
* **Analyze data**: Explore patterns, calculate metrics, and investigate trends in your data
* **Create visualizations**: Generate professional charts and graphs using seaborn
* **Answer data questions**: Get quick, accurate answers to questions about your data
* **Generate insights**: Discover patterns, anomalies, and actionable findings
## Accessing the Data Analyst Agent
### From the web app
1. Go to the Devin home page
2. Click the agent picker dropdown
3. Select **Data Analyst** from the dropdown menu
4. Start your session with a data-related question or task
### From Slack
You can start a Data Analyst session directly from Slack using either method:
**Using the slash command:**
```
/dana What were our top 10 customers by revenue last month?
```
**Using a mention with the `!dana` macro:**
```
@Devin !dana What were our top 10 customers by revenue last month?
```
Both methods will create a Data Analyst session and respond in-thread with the results.
## Prerequisites
Before using the Data Analyst Agent, you'll need to connect at least one data source via MCP (Model Context Protocol). Common integrations include:
* **Database MCPs**: Redshift, PostgreSQL, Snowflake, BigQuery, and other SQL databases
* **Analytics MCPs**: Datadog, Metabase, and other observability platforms
Without a connected data source, the agent will notify you and ask you to connect one before proceeding.
Learn how to connect databases and other data sources via MCP
## How it works
### Database Knowledge
The Data Analyst Agent maintains a **Database Knowledge** note that contains schema documentation for your connected databases. This knowledge is automatically referenced before running queries, allowing the agent to quickly identify the right tables and columns.
## Example prompts
Here are some effective ways to use the Data Analyst Agent across different query types:
### Simple lookups
* "How many active users did we have last week?"
* "What's our daily revenue trend for the past month?"
* "Which customers have the highest usage?"
### Aggregations and metrics
* "What's the average session duration by plan tier for the past 30 days?"
* "Show me total revenue grouped by region and product line for Q4"
* "Calculate the 95th percentile response time for each API endpoint this week"
### Joins and cross-table analysis
* "Join our users table with the orders table and show the top 20 customers by lifetime value"
* "Correlate signup source with 30-day retention — which acquisition channels have the best retention rates?"
* "Combine session data with billing records to find accounts with high usage but low spend"
### Filtering and segmentation
* "Show me only enterprise customers who signed up after January 2025 and have more than 100 sessions"
* "Filter error logs to 5xx errors from the payments service in the last 48 hours"
* "Break down consumption by enterprise vs. self-serve customers, excluding trial accounts"
### Time-series analysis
* "Plot weekly active users over the past 6 months — highlight any weeks with more than 10% change"
* "Show me a month-over-month comparison of signup rates for 2025 vs. 2024"
* "What's the daily trend for API calls over the past 90 days? Overlay a 7-day moving average"
### Investigations and anomaly detection
* "Why did signups drop last Tuesday? Check if there were any related incidents or deployments"
* "Are there any anomalies in our error rates this week?"
* "Compare this month's metrics to the same period last year and flag significant deviations"
### Multi-step analysis
* "Analyze user retention by cohort for Q4, then identify which cohorts have the steepest drop-off and suggest possible causes"
* "Find the top 10 users by session count, show their activity over time, and flag any that look like potential churns"
## Supported data sources
The Data Analyst Agent connects to your data through MCP (Model Context Protocol) integrations. You can connect multiple data sources and query across them. Below are some of the most common data sources available in the [MCP Marketplace](https://app.devin.ai/settings/connections?tab=mcps) — this is not an exhaustive list.
### SQL databases
| Data source | MCP name | Setup |
| ----------------------------------------- | ---------- | ------------------------------- |
| Amazon Redshift | Redshift | Connection string + credentials |
| PostgreSQL | PostgreSQL | Connection string |
| Snowflake | Snowflake | Account + credentials |
| Google BigQuery | BigQuery | OAuth or service account |
| MySQL | MySQL | Connection string |
| SQL Server | SQL Server | Connection string |
| Neon | Neon | OAuth |
| Supabase | Supabase | Personal access token |
| Cloud SQL (PostgreSQL, MySQL, SQL Server) | Cloud SQL | OAuth |
### Analytics and observability platforms
| Data source | MCP name | Setup |
| ----------- | -------- | --------------------------- |
| Datadog | Datadog | API key + app key |
| Metabase | Metabase | OAuth |
| Grafana | Grafana | URL + service account token |
| Sentry | Sentry | OAuth |
### Connecting a data source
1. Navigate to [Settings > Connections > MCP servers](https://app.devin.ai/settings/connections?tab=mcps)
2. Find your data source and click **Enable**
3. Provide any required credentials (connection strings, API keys, or OAuth)
4. Start a Data Analyst session — the agent will automatically discover your connected data sources
Need a data source that isn't in the Marketplace? Use **Add Your Own** to connect any MCP server by providing its configuration directly.
Full setup instructions for each data source
You can connect multiple data sources simultaneously. The Data Analyst Agent will use the appropriate MCP tools based on your query context.
## Best practices
### Be specific about metrics
Instead of asking vague questions, define exactly what you want to measure:
```text Good theme={null}
"What's our 7-day active user count, defined as users who started at least one session?"
```
```text Less effective theme={null}
"How are our users doing?"
```
### Specify time periods
Always include the time range you're interested in. The agent defaults to UTC when interpreting relative dates.
```text Good theme={null}
"Show me daily revenue for the past 30 days"
```
```text Less effective theme={null}
"Show me revenue"
```
### Request specific output formats
Tell the agent how you want to see results — as a table, chart, or summary:
```text Good theme={null}
"Plot a line chart of weekly signups for the past quarter, with a table of the raw numbers below"
```
```text Less effective theme={null}
"Get signup numbers"
```
### Define business logic upfront
If your metrics have specific definitions, state them in your prompt to avoid ambiguity:
```text Good theme={null}
"Show monthly churn rate, where churn is defined as accounts with zero sessions in the past 30 days that had at least one session in the prior 30 days"
```
```text Less effective theme={null}
"What's our churn rate?"
```
### Ask for comparisons and context
Adding comparison periods or benchmarks makes results more actionable:
```text Good theme={null}
"Show this week's daily active users compared to the same week last month, and highlight any days with more than 15% deviation"
```
```text Less effective theme={null}
"Show daily active users"
```
### Iterate on results
You can ask follow-up questions in the same session to drill deeper:
1. Start broad: *"What are our top 10 customers by revenue this quarter?"*
2. Drill down: *"For the top 3, show me their monthly revenue trend over the past year"*
3. Investigate: *"Customer X had a revenue spike in March — what drove that?"*
### Validate the SQL
The agent always includes the SQL query it used. Review it to ensure the logic matches your expectations, especially for complex analyses involving joins, filters, or aggregations.
## Output formats
The Data Analyst Agent returns results in several formats depending on the type of analysis:
### Tables
For data lookups and aggregations, results are returned as formatted tables:
```
| Customer | Revenue | Sessions | Avg Duration |
|----------------|-----------|----------|--------------|
| Acme Corp | $125,400 | 1,247 | 34 min |
| Globex Inc | $98,200 | 983 | 28 min |
| Initech | $87,600 | 876 | 41 min |
```
### Charts and visualizations
When you request visual analysis or the data is best understood graphically, the agent generates charts using seaborn. Common chart types include:
* **Line charts** — time-series trends, comparisons over time
* **Bar charts** — categorical comparisons, rankings
* **Heatmaps** — correlation matrices, activity patterns
* **Scatter plots** — relationship analysis between two metrics
Request a specific chart type if you have a preference, or let the agent choose the most appropriate visualization for your data.
### Summaries and insights
For investigation-style prompts, the agent provides a structured response that includes:
* **Analysis summary** — a plain-language answer to your question
* **SQL query** — the exact query used, so you can verify the logic
* **Key numbers** — the most important metrics highlighted
* **Data insights** — patterns, anomalies, or notable findings
* **Metabase link** — if your organization has Metabase connected via MCP, the agent may include a link to an interactive dashboard for further exploration
## Knowledge management
The Data Analyst Agent can persist learnings across sessions using the knowledge system. When it discovers:
* New schema information or table relationships
* Business logic or metric definitions
* Data quality patterns or caveats
It will save these to knowledge notes so future sessions benefit from what was learned.
Understand how Devin's knowledge system works
## Differences from standard Devin
| Capability | Data Analyst Agent | Standard Devin |
| ------------------------- | ------------------------ | --------------------- |
| SQL query execution | Optimized | Supported |
| Data visualizations | Built-in seaborn support | Manual setup |
| Database schema awareness | Pre-loaded knowledge | On-demand exploration |
| Response style | Concise, metrics-focused | Detailed explanations |
| Code changes | Not primary focus | Full support |
| MCP integrations | Required | Optional |
The Data Analyst Agent is purpose-built for data work. For tasks involving code changes, deployments, or general software engineering, use standard Devin instead.
# DeepWiki
Source: https://docs.devin.ai/work-with-devin/deepwiki
Architecture diagrams, documentation, links to sources, and more for all your repos
## Overview
Devin now automatically indexes your repos and produces wikis with architecture diagrams, links to sources, and summaries of your codebase.
Use it to get up to speed on unfamiliar parts of your codebase - check it out [in your sidebar](https://app.devin.ai/wiki).
[Ask Devin](/work-with-devin/ask-devin) will use information in the Wiki to better understand and find the relevant context in your codebase. Ask Devin's advanced code search capabilities, combined with DeepWiki, produce detailed and accurate answers grounded in your code.
DeepWiki will be autogenerated when connecting repositories during onboarding.
## For Public Repos
A free version of **DeepWiki** and [Ask Devin](/work-with-devin/ask-devin) that works with public GitHub repositories is now available. It automatically generates architecture diagrams, documentation, and links to source code to help you understand unfamiliar codebases quickly. You can also ask complex questions about the codebase to get context-grounded specific answers.
The full Ask Devin experience, including advanced code search, planning, and session creation, is available in the [Devin app](https://app.devin.ai). Public DeepWiki and the DeepWiki MCP provide basic documentation and Q\&A capabilities.
Visit [deepwiki.com](https://deepwiki.com/) to start exploring popular open-source repositories like React, TensorFlow, LangChain, and many more. You can also submit your own public GitHub repository URL for indexing.
[Try DeepWiki Now →](https://deepwiki.com/)
## Steering DeepWiki
The `.devin/wiki.json` file allows you to steer Devin's default wiki generation behavior, which is especially important for large repositories that may hit built-in limits.
If a `.devin/wiki.json` file is found in your repository's root directory during wiki generation, we'll use the provided `repo_notes` and `pages` to steer wiki generation. If `pages` is provided, we'll bypass the default cluster-based planning and create exactly the pages you specify. This ensures that the important parts of your codebase are documented even when the automatic system would otherwise skip them.
## Configuration Format
Create a `.devin/wiki.json` file in your repository root with the following structure:
```json theme={null}
{
"repo_notes": [
{
"content": "This repository contains the main UI components in the cui/ folder, which should be prioritized in documentation",
"author": "Team Lead"
}
],
"pages": [
{
"title": "CUI Components Overview",
"purpose": "Document the cui/ folder structure and main UI components",
"parent": null
},
{
"title": "Authentication System",
"purpose": "Document the authentication flow and related components",
"parent": null
},
{
"title": "Login Components",
"purpose": "Detailed documentation of login-related UI components",
"parent": "Authentication System"
}
]
}
```
## Configuration Options
### repo\_notes (Array)
Provides context and guidance to help the documentation system understand your repository better.
* **content** (string, required): The note content (max 10,000 characters)
* **author** (string, optional): Who wrote the note
### pages (Array, optional)
Specifies exactly which pages should be created in your wiki.
This field is optional. If you only include repo\_notes, the system will still generate a wiki, using your notes to guide the structure and focus without requiring you to outline every page.
When you do provide pages, they are treated as explicit instructions. Only the pages you define in the JSON will be generated, no more, no less.
* **title** (string, required): The page title (must be unique and non-empty)
* **purpose** (string, required): What this page should document
* **parent** (string, optional): Title of the parent page for hierarchical organization
* **page\_notes** (array, optional): Additional notes specific to this page
### Validation Limits
* Maximum 30 pages (80 for enterprise)
* Maximum 100 total notes (repo\_notes + all page\_notes combined)
* Maximum 10,000 characters per note
* Page titles must be unique and non-empty
## Practical Examples
### Example 1: Repo Notes to Guide Wiki Generation
If you prefer not to define specific pages, you can provide only repo\_notes to help guide the wiki generation. This allows Devin to create the documentation structure automatically while still taking into account your priorities and areas of focus. This is useful when you want better coverage and emphasis without having to explicitly outline every page yourself.
```json theme={null}
{
"repo_notes": [
{
"content": "The repository contains three main areas: the frontend/ folder with React components, the backend/ folder with API services, and the infra/ folder with deployment scripts. Documentation should emphasize how these parts interact and highlight the backend API layer as the highest priority."
}
]
}
```
### Example 2: Ensuring Specific Folders Are Documented
If your large repository has important folders that aren't being included in the wiki, explicitly specify them:
```json theme={null}
{
"repo_notes": [
{
"content": "The cui/ folder contains critical UI components that must be documented. The backend/ folder contains the main API logic. The utils/ folder has shared utilities used throughout the codebase."
}
]
}
```
### Example 3: Addressing Missing Components
If you notice certain parts of your codebase aren't being documented:
```json theme={null}
{
"repo_notes": [
{
"content": "The testing/ directory contains important test utilities and patterns that developers need to understand. The scripts/ directory has deployment and maintenance scripts that are crucial for operations."
}
]
}
```
### Example 4: Hierarchical Documentation Structure
For complex repositories, organize pages hierarchically:
```json theme={null}
{
"repo_notes": [
{
"content": "This is a full-stack application with distinct frontend, backend, and shared components that should be documented separately but with clear relationships."
}
],
"pages": [
{
"title": "Architecture Overview",
"purpose": "High-level overview of the application architecture and how components interact"
},
{
"title": "Frontend",
"purpose": "Frontend application structure and components",
"parent": "Architecture Overview"
},
{
"title": "React Components",
"purpose": "Detailed documentation of React components, their props, and usage",
"parent": "Frontend"
},
{
"title": "State Management",
"purpose": "How application state is managed, including stores and data flow",
"parent": "Frontend"
},
{
"title": "Backend",
"purpose": "Backend services, APIs, and data layer",
"parent": "Architecture Overview"
},
{
"title": "API Endpoints",
"purpose": "REST API documentation including endpoints, request/response formats",
"parent": "Backend"
}
]
}
```
## Best Practices
### 1. Use Repo Notes Strategically
* Provide context about which parts of your codebase are most important
* Mention specific folders or components that should be prioritized
* Explain relationships between different parts of your system
### 2. Organize Pages Logically
* Start with high-level overview pages
* Use parent-child relationships to create clear hierarchies
* Group related functionality together
### 3. Be Specific in Page Purposes
* Clearly state what each page should document
* Mention specific directories, files, or concepts to focus on
* Provide enough detail for the system to understand your intent
### 4. Address Known Gaps
* If you know certain parts of your codebase are being missed, explicitly include them
* Use descriptive titles that make it clear what should be covered
## Troubleshooting Common Issues
### "Only certain folders are being documented"
This is the classic large repository problem.
**Solution:** Use `.devin/wiki.json` to explicitly specify which parts of your codebase should be documented.
Start with updating only repo\_notes, and regenerate the wiki with that additional context to see if the updated wiki will include the missing folders. Only add the pages array if necessary.
### "Important components are missing from the wiki"
Add specific pages for these components and use repo\_notes to emphasize their importance.
Remember: The DeepWiki will generate only the pages included in this array, so ensure all pages are present, not just the missing page.
```json theme={null}
{
"repo_notes": [
{
"content": "The [missing-component] directory is critical to the application and must be documented thoroughly."
}
],
"pages": [
{
"title": "Critical Component Name",
"purpose": "Document the [missing-component] directory and its functionality"
}
]
}
```
## Getting Started
1. Create `.devin/wiki.json` in your repository root
2. Add repo\_notes explaining your codebase structure and priorities
3. If necessary, specify **all** pages you want created with clear titles and purposes
4. Commit the file and regenerate your wiki
The system will now create documentation based on your explicit instructions rather than fully automatic analysis, ensuring comprehensive and more accurate coverage of large repositories.
# DeepWiki MCP
Source: https://docs.devin.ai/work-with-devin/deepwiki-mcp
How to use the official DeepWiki MCP server
The DeepWiki MCP server provides programmatic access to DeepWiki's public repository documentation and search capabilities (Ask Devin).
## What is MCP?
The [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is an open standard that enables AI apps to securely connect to MCP-compatible data sources and tools. You can think of MCP like a USB-C port for AI applications - a standardized way to connect AI apps to different services.
## DeepWiki MCP Server
The DeepWiki MCP server is a free, remote, no-authentication-required service that provides access to public repositories.
**Base Server URL:** `https://mcp.deepwiki.com/`
### Available Tools
The DeepWiki MCP server offers three main tools:
1. **`read_wiki_structure`** - Get a list of documentation topics for a GitHub repository
2. **`read_wiki_contents`** - View documentation about a GitHub repository
3. **`ask_question`** - Ask any question about a GitHub repository and get an AI-powered, context-grounded response
### Wire Protocols
The DeepWiki MCP server supports two wire protocols:
#### Streamable HTTP - `/mcp`
* **URL:** `https://mcp.deepwiki.com/mcp`
* Works with Cloudflare, OpenAI, and Claude
* **Recommended for most integrations**
#### SSE (Server-Sent Events) - `/sse`
* **URL:** `https://mcp.deepwiki.com/sse`
* Legacy protocol, being deprecated
The `/mcp` endpoint is recommended as SSE is being deprecated.
## Setup Instructions
The field name for the server URL depends on the client: Devin Desktop uses `serverUrl`, while most other clients use the standard `url` field. Using the wrong field name causes the MCP server to be silently ignored.
### For Devin Desktop:
```json theme={null}
{
"mcpServers": {
"deepwiki": {
"serverUrl": "https://mcp.deepwiki.com/mcp"
}
}
}
```
### For most other clients (e.g. Cursor):
```json theme={null}
{
"mcpServers": {
"deepwiki": {
"url": "https://mcp.deepwiki.com/mcp"
}
}
}
```
### For Claude Code:
```bash theme={null}
claude mcp add -s user -t http deepwiki https://mcp.deepwiki.com/mcp
```
## Related Resources
* **[Devin's MCP Marketplace](/work-with-devin/mcp)**
* **[Connecting remote MCP servers to Claude](https://support.anthropic.com/en/articles/11175166-about-custom-integrations-using-remote-mcp)**
* **[OpenAI's docs for using the DeepWiki MCP server](https://platform.openai.com/docs/guides/tools-remote-mcp)**
* **[DeepWiki](/work-with-devin/deepwiki)**
* **[Ask Devin](/work-with-devin/ask-devin)**
Want DeepWiki capabilities for private repositories? Sign up for a Devin account at [Devin.ai](https://devin.ai/) and use the [Devin MCP server](/work-with-devin/devin-mcp) with your Devin API key.
# Devin CLI
Source: https://docs.devin.ai/work-with-devin/devin-cli
Use Devin as a local coding agent directly from your command line, with the ability to hand off tasks to cloud Devin.
[Devin CLI](/cli) is a local coding agent that runs directly in your terminal. It works with your local files and environment, giving you fast, interactive assistance right where you code.
For full documentation — including installation, commands, configuration, and extensibility — see the **[Devin CLI docs](/cli)**.
## Handoff to cloud Devin
When a task outgrows your local machine — or you want Devin to keep working while you step away — use the `/handoff` command to seamlessly transfer work to a cloud [Devin session](/get-started/first-run).
```
/handoff fix the flaky integration tests in CI
```
Devin CLI will package up the conversation context and current git branch, then create a cloud Devin session that picks up where you left off. You can track the session's progress directly from the terminal or in the Devin web app.
If you run `/handoff` without a task description, the cloud session continues from where you left off automatically.
Install and start coding in 2 minutes
Must-know commands and keyboard shortcuts
# Hand off to cloud Devins
Source: https://docs.devin.ai/work-with-devin/devin-handoff
Hand off tasks to a cloud Devin session from the Devin CLI, Claude Code, Codex, or any coding agent.
Hand a task off to a cloud [Devin session](/get-started/first-run) and keep working locally. The cloud session gets its own VM with a shell, browser, and full repo access, so it can keep going after you close your laptop.
There are two ways to hand off:
* **From the [Devin CLI](/cli)** — the built-in `/handoff` command, no setup required.
* **From any other coding agent** — Claude Code, Codex, Cursor, and more, using the open-source [Devin Handoff](https://github.com/club-cog/devin-handoff) plugin.
## When to hand off
Hand a task off when it needs more than your local machine, or when you want it to run in the background:
* **VM or server** — running a dev server, hitting endpoints, Docker builds
* **Browser** — screenshots, OAuth flows, end-to-end tests, scraping
* **CI/CD** — pipeline debugging, deployments, infrastructure changes
* **Long-running work** — migrations, batch jobs, large refactors
* **Parallel execution** — offload work to the cloud while you keep coding locally
## From the Devin CLI
The [Devin CLI](/cli) is a local coding agent that runs in your terminal. It has a built-in [`/handoff`](/work-with-devin/devin-cli#handoff-to-cloud-devin) command — nothing to install.
```
/handoff fix the flaky integration tests in CI
```
Devin CLI packages up the conversation context and current git branch, then creates a cloud Devin session that picks up where you left off. Track the session's progress from your terminal or in the [Devin web app](https://app.devin.ai).
Run `/handoff` without a task description and the cloud session continues from where you left off automatically.
## From other coding agents
[Devin Handoff](https://github.com/club-cog/devin-handoff) is an open-source plugin and skill that brings the same handoff workflow to any coding agent — Claude Code, Codex, Cursor, and more. Install it once, then just say *"hand this off to Devin"* and your agent gathers the current repo, branch, and uncommitted changes, creates a session, and hands you back a URL.
You'll need a Devin API key — generate one on the [API keys page](https://app.devin.ai/settings/api-keys) and export it as `DEVIN_API_KEY`. For install and usage instructions across every agent, follow the [repository README](https://github.com/club-cog/devin-handoff), which stays current as the plugin evolves.
### How context reaches the cloud session
A cloud session starts in a fresh VM, so the skill packages up what your local agent already knows and includes it in the session prompt:
* **Repo and branch** — detected from `git remote` and `git rev-parse`, so Devin clones the right repo and checks out the branch you're on.
* **Uncommitted changes** — the output of `git diff HEAD` (truncated to 100KB) is included, so your work-in-progress carries over. If you have local edits you don't want sent, commit or stash them first.
* **Extra context** — whatever the calling agent has learned so far: files it examined, root-cause hypotheses, partial fixes.
## Related resources
The local coding agent with the built-in `/handoff` command
Source, install guides, and the full script reference
The Sessions API that powers the handoff
Manage sessions, playbooks, and knowledge from any MCP client
# Devin MCP
Source: https://docs.devin.ai/work-with-devin/devin-mcp
How to use the official Devin MCP server for private and public repositories
The Devin MCP server provides programmatic access to Devin's platform capabilities for both private and public repositories. Beyond repository documentation and search, it gives any MCP-compatible AI agent or IDE full access to session management, playbooks, knowledge, and scheduling.
Any Devin session or MCP-compatible client can create sessions, manage playbooks and knowledge, set up schedules, and more. See [Advanced Capabilities](/work-with-devin/advanced-capabilities) for details on what Devin can do.
## What is MCP?
The [Model Context Protocol](https://modelcontextprotocol.io/introduction) (MCP) is an open standard that enables AI apps to securely connect to MCP-compatible data sources and tools. You can think of MCP like a USB-C port for AI applications — a standardized way to connect AI apps to different services.
## Devin MCP Server
The Devin MCP server is an authenticated service that provides access to both public and private repositories, plus full platform management capabilities.
**Base Server URL:** `https://mcp.devin.ai/`
### Authentication Required
To use the Devin MCP server, you need a Devin API key:
1. Sign up for a Devin account at [Devin.ai](https://devin.ai/)
2. Generate an API key from your [account settings](/api-reference/authentication)
3. Include the API key in your MCP client configuration
The MCP server supports the same authentication methods as the [Devin API](/api-reference/authentication):
| Token type | Prefix | Org resolution |
| ------------------------------- | ------ | ----------------------------------------------------- |
| **Org-scoped service user key** | `cog_` | Automatic — org\_id is resolved from the service user |
| **Enterprise service user key** | `cog_` | Requires `X-Org-Id` header (see below) |
| **Personal access token** | `cog_` | Requires `X-Org-Id` header (see below) |
Legacy API keys (`apk_` / `apk_user_` prefix) are **not supported** by the Devin MCP server. Use a [service user API key](/api-reference/authentication#service-users-recommended-for-automation) instead.
#### Enterprise accounts: `X-Org-Id` header
Enterprise service user keys and PATs are scoped to the account level, not a specific organization. Since the MCP tools operate on organization-level resources (sessions, playbooks, knowledge, etc.), you must tell the server which organization to target by passing the `X-Org-Id` header:
```json theme={null}
{
"mcpServers": {
"devin": {
"serverUrl": "https://mcp.devin.ai/mcp",
"headers": {
"Authorization": "Bearer ",
"X-Org-Id": ""
}
}
}
}
```
Find your organization ID on the **Settings > Service users** page, or call the [GET /v3/self](/api-reference/v3/self/self) endpoint with your API key.
Org-scoped service user keys do not need this header — the organization is resolved automatically.
## Available Tools
### Repository Documentation
These tools let you explore and query documentation for any GitHub repository (public or private with authentication):
| Tool | Description |
| -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| **`read_wiki_structure`** | Get a list of documentation topics for a GitHub repository |
| **`read_wiki_contents`** | View full documentation about a GitHub repository |
| **`ask_question`** | Ask any question about one or more repositories (up to 10) and get an AI-powered, context-grounded response |
| **`list_available_repos`** | List all repositories available to query with your Devin account |
### Session Management
Create, search, inspect, and control Devin sessions programmatically:
| Tool | Description |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **`devin_session_create`** | Create one or more Devin sessions. Each session can have a prompt, title, playbook, tags, and ACU limit |
| **`devin_session_search`** | Search and filter sessions by tags, playbook, origin, schedule, user, or creation/update time |
| **`devin_session_interact`** | Interact with a session — get status, send messages, sleep, terminate, archive, read messages and attachments, or manage tags |
| **`devin_session_events`** | Inspect events within a session — list summaries, fetch full event details, or search event contents by text |
| **`devin_session_gather`** | Wait for multiple sessions to reach a settled state (finished, errored, sleeping, or waiting) before returning. Useful after creating parallel sessions instead of polling in a loop |
### Playbook Management
Create and manage playbooks that standardize how Devin performs tasks:
| Tool | Description |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| **`devin_playbook_manage`** | List, get, create, update, or delete playbooks. Supports automation macros (e.g. `!my_macro`) |
### Knowledge Management
Maintain your organization's knowledge base that Devin uses for context:
| Tool | Description |
| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`devin_knowledge_manage`** | Full CRUD for knowledge notes — list, get, create, update, delete, browse folder structure. Also manage knowledge suggestions — list, view, and dismiss pending suggestions. Supports filtering by repo, folder, and search queries |
### Schedule Management
Set up recurring or one-time scheduled Devin sessions:
| Tool | Description |
| --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`devin_schedule_manage`** | List, get, create, update, or delete schedules. Supports cron expressions for recurring schedules, one-time scheduling, notification preferences, and agent selection |
### Integration Management
View and manage your organization's native integrations and MCP servers:
| Tool | Description |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **`list_integrations`** | List all native integrations (e.g. GitHub, Jira, Slack) and MCP servers with their install status and settings URLs. Filter by installed, not installed, or all |
## Wire Protocols
The Devin MCP server supports Streamable HTTP:
* **URL:** `https://mcp.devin.ai/mcp`
* Works with HTTP-compatible clients
* **Recommended for all integrations**
The legacy SSE (`/sse`) endpoint has been deprecated. Use the `/mcp` endpoint instead.
## Key Differences from DeepWiki MCP
| Feature | DeepWiki MCP | Devin MCP |
| ----------------------- | --------------------------- | ------------------------------------------------------- |
| **Authentication** | None required | API key required |
| **Repository Access** | Public repositories only | Public and private repositories |
| **Platform Management** | Not available | Sessions, playbooks, knowledge, schedules, integrations |
| **Base URL** | `https://mcp.deepwiki.com/` | `https://mcp.devin.ai/` |
| **Cost** | Free | Requires Devin account |
## Setup Instructions
The field name for the server URL depends on the client: Devin Desktop uses `serverUrl`, while most other clients use the standard `url` field. Using the wrong field name causes the MCP server to be silently ignored.
### For Devin Desktop:
```json theme={null}
{
"mcpServers": {
"devin": {
"serverUrl": "https://mcp.devin.ai/mcp",
"headers": {
"Authorization": "Bearer "
}
}
}
}
```
### For most other clients (e.g. Cursor):
```json theme={null}
{
"mcpServers": {
"devin": {
"url": "https://mcp.devin.ai/mcp",
"headers": {
"Authorization": "Bearer "
}
}
}
}
```
### For Claude Code:
```bash theme={null}
claude mcp add -s user -t http devin https://mcp.devin.ai/mcp -H "Authorization: Bearer "
```
## Related Resources
* **[Advanced Capabilities](/work-with-devin/advanced-capabilities)** — Overview of Devin's advanced features
* **[Devin's MCP Marketplace](/work-with-devin/mcp)**
* **[Connecting remote MCP servers to Claude](https://support.anthropic.com/en/articles/11175166-about-custom-integrations-using-remote-mcp)**
* **[OpenAI's docs for using MCP servers](https://platform.openai.com/docs/guides/tools-remote-mcp)**
* **[DeepWiki MCP](/work-with-devin/deepwiki-mcp)** — For public repositories only
* **[DeepWiki](/work-with-devin/deepwiki)**
* **[Ask Devin](/work-with-devin/ask-devin)**
# Devin Review
Source: https://docs.devin.ai/work-with-devin/devin-review
A new way to quickly review and understand complex PRs.
As coding agents become more prevalent, the bottleneck shifts from writing code to reviewing it.
Devin Review is a full-service code review platform within the Devin webapp that turns large, complex PRs into intuitively organized diffs and precise explanations. It supports GitHub (including GitHub Enterprise Server and Enterprise Cloud) and GitLab (including Self-Managed GitLab).
Devin Review is available for PRs on GitHub repositories
(including GitHub Enterprise Server and Enterprise Cloud)
and merge requests on GitLab repositories (including Self-Managed GitLab).
Public PRs don't require a Devin account. Private PRs
can be viewed with a Devin account or via the [CLI](#cli).
## Features
Groups changes logically, putting related edits together instead of
alphabetical order.
Detects when code has been copied or moved and displays changes cleanly,
instead of full deletes and inserts.
Checks for bugs and labels them by confidence level. Severe bugs require
immediate attention.
Detects security vulnerabilities and suggests hardening improvements,
with CWE classification and severity levels.
Leave comments, approve PRs, request changes—all within Devin Review, synced
to GitHub.
Ask questions about the PR and get answers with relevant context from the
rest of the codebase. You can also ask Devin directly from any comment,
bug, or flag in the diff view.
Merge, close, convert to draft, mark ready for review, and toggle auto-merge
directly from Devin Review without leaving the page.
Ask the chat agent to make code edits. Review the suggested changes, then
apply them as a commit to the PR branch without leaving Devin Review.
## Getting Started
* **Devin webapp** — Head to [app.devin.ai/review](https://app.devin.ai/review) to see your open PRs organized by category (assigned to you, authored by you, review requested). When Devin makes PRs, you'll see an orange "Review" button in the chat.
* **URL shortcut** — For any GitHub.com PR link, replace `github.com` with `devinreview.com` in the URL. For private PRs, sign in to Devin first or use the CLI.
* **GitHub Enterprise** — Paste the full PR URL into the Devin Review page at [app.devin.ai/review](https://app.devin.ai/review). All GitHub offerings (GitHub.com, Enterprise Server, Enterprise Cloud) have the same capabilities.
* **CLI** — Run `npx devin-review {pr-url}` from within a local clone. See [CLI](#cli) below for details.
## Supported Git Providers
| Capability | GitHub | GitLab | Bitbucket | Azure DevOps |
| ----------------------------- | ------ | ------- | --------- | ------------ |
| View diffs and analysis | Yes | Yes | No | No |
| Bug catcher | Yes | Yes | No | No |
| Codebase-aware chat | Yes | Yes | No | No |
| Code changes from chat | Yes | Yes | No | No |
| Comments and reviews | Yes | Yes | No | No |
| Merge / close / draft actions | Yes | Partial | No | No |
| Auto-merge | Yes | Partial | No | No |
| Auto-review | Yes | Yes | No | No |
**GitHub** includes GitHub.com, GitHub Enterprise Server, and GitHub Enterprise Cloud — all have the same capabilities. Write features (comments, reviews, merge actions, code changes from chat) require a [GitHub App](/integrations/gh) connection installed on your GitHub organization. PAT-based connections are read-only and cannot post comments, submit reviews, or perform merge actions. To set up the GitHub App, see the [GitHub integration guide](/integrations/gh).
**GitLab** includes GitLab.com and Self-Managed GitLab. Write features for Self-Managed GitLab (comments, reviews, merge actions, code changes from chat) require a GitLab App connection. To set up the GitLab App, see the [GitLab Self-Managed integration guide](/enterprise/integrations/gitlab-self-managed).
## Permissions
Devin Review access is controlled by account-level permissions configured in the role editor under **Devin Review permissions**. By default, all members and admins receive full auto-review access, and admins additionally receive **Manage Devin Review**.
Enterprise admins can use [Custom Roles](/enterprise/security-access/custom-roles#account-level-roles-enterprise-roles) to restrict access to a lower usage tier (manual-only or on-PR-creation only), remove access entirely, or grant admin capabilities. Self-enrollment for auto-review does not require **Manage Devin Review** — any user with a usage tier and a connected GitHub account can enroll themselves.
See [Account-level roles](/enterprise/security-access/custom-roles#account-level-roles-enterprise-roles) for the full list of Devin Review permission tiers and what each one grants.
**Enterprise accounts:** Only users in the primary organization with **Manage Devin Review** can manage review settings. Users in non-primary organizations can self-enroll but cannot change admin settings.
## Governance
Enterprise admins can control who uses Devin Review, what level of automation they have, and how much it costs — all from the Devin webapp.
The features in this section require a **Devin Enterprise** account. For
details on enterprise plans, [contact sales](https://cognition.com/contact).
### Cost control
Devin Review consumes [ACUs](/admin/billing/usage) (Agent Compute Units) from your enterprise's ACU pool, the same pool used by Devin sessions and other Devin products. Enterprise admins have several tools to monitor and control review costs.
#### Consumption dashboard
The enterprise consumption dashboard at [Settings > Consumption](https://app.devin.ai/settings/consumption) breaks down ACU usage by product, including a dedicated **Review** line in the daily consumption chart. Organization admins can view their org's review consumption from [Settings > Consumption Analytics](https://app.devin.ai/settings/analytics?tab=consumption).
The dashboard includes:
* **Per-user breakdown** — See how many review ACUs each user consumed in the current and previous billing cycle.
* **Per-repository breakdown** — See review ACU consumption, review count, and the number of bugs caught by repository for the current and previous billing cycle, helping identify which repos drive the most review cost and where reviews catch the most issues.
**Devin Review ACUs do not count against per-organization ACU limits.** Per-org ACU limits configured in [Settings > Organizations](https://app.devin.ai/settings/organizations) apply to Devin sessions only — Review consumption is tracked at the enterprise level and is not capped by org limits. Reviews continue to run even after an organization reaches its session ACU limit.
#### Review size indicator
Each PR in Devin Review displays a consumption pill showing the review's t-shirt size based on total ACU usage across all review jobs on that PR:
| Size | ACU range |
| ------ | --------------- |
| **XS** | ≤ 2.25 ACUs |
| **S** | 2.25 – 4.5 ACUs |
| **M** | 4.5 – 9 ACUs |
| **L** | 9 – 18 ACUs |
| **XL** | > 18 ACUs |
Hover over the size pill to see the exact ACU total, the number of review jobs run, and the cost of the currently viewed review. This helps reviewers understand the cost impact of re-running reviews or enabling auto-review on high-churn PRs.
#### Per-PR auto-review spend limit
Admins can cap how much Devin Review spends on automatic reviews of a single PR from [Settings > Review](https://app.devin.ai/settings/review) under the **Auto-review limits** section. The limit is measured in ACUs on Enterprise plans, or in dollars of on-demand spend for Individual and Teams plans. Leave the field empty for no limit (the default).
Once a PR's total review spend across all of its review jobs reaches the limit, auto-review is turned off for that PR and future auto-reviews are skipped. Reaching the limit is a soft block:
* **Manual reviews still work** — the limit only pauses automatic reviews. You can always trigger a review yourself from the PR review page.
* **Re-enable per PR** — Turning auto-review back on for the PR from the actions menu (three dots in the header) resumes auto-reviews and exempts that PR from the limit.
When a limit is configured, the consumption pill's hover card shows the limit alongside the PR's usage and indicates when the limit has been reached. If [PR description updates](#admin-configuration) are enabled, the Devin Review status row in the PR description also notes when auto-review was paused by the spend limit, with a link to re-enable it.
## PR Workflow Actions
Devin Review lets you take action on PRs directly from the review page, without switching to GitHub.
* **Merge** — Merge the PR using the repository's configured merge strategy (merge commit, squash, or rebase). The merge button reflects the PR's current mergeability status and required checks.
* **Close** — Close the PR without merging. Available from the dropdown menu next to the merge button.
* **Convert to draft** — Convert an open PR to draft status. Available from the dropdown menu when the PR is open and not already a draft.
* **Mark ready for review** — Mark a draft PR as ready for review. A "Ready for review" button appears in the merge bar for draft PRs.
* **Auto-merge** — Enable or disable GitHub auto-merge from the merge button dropdown. When enabled, the PR will merge automatically once all required checks pass. The merge bar shows the current auto-merge status, including who enabled it.
All workflow actions require a [GitHub App](/integrations/gh) connection and are disabled when viewing in read-only mode (e.g., public repos without a connected account, or PAT-based connections).
## Auto-Review
Devin can automatically review PRs without you having to manually trigger it. Configure auto-review in [Settings > Review](https://app.devin.ai/settings/review). On any PR review page, the actions menu (three dots in the header) lets you toggle auto-review for that specific PR and links to the review settings pages.
### When Does Auto-Review Run?
Auto-review triggers when:
* A PR is opened (non-draft)
* New commits are pushed to a PR
* A draft PR is marked as ready for review
* An enrolled user is added as a reviewer or assignee
Draft PRs are skipped until marked ready.
### Trigger Modes
Repositories and individual users can each be configured with a trigger mode that controls when auto-review runs:
* **Auto review** (default) — Reviews trigger on all events: PR opened, new commits pushed, draft marked ready, and reviewer/assignee added.
* **On PR creation** — Reviews only trigger when a PR is first opened or a draft PR is marked as ready for review. Subsequent pushes to the PR do not trigger a new review.
* **Manual** — No reviews run automatically. You trigger a review yourself from the PR review page whenever you want one. This is the base tier for personal enrollment.
Repository trigger modes are limited to **Auto review** and **On PR creation**. Personal enrollment additionally supports **Manual** for users who only want to trigger reviews on demand.
When a PR matches both an enrolled repository and an enrolled user, the most permissive trigger mode applies.
Admins can set the trigger mode per repository from [Settings > Review](https://app.devin.ai/settings/review), and each user can set their personal trigger mode from [Settings > Preferences](https://app.devin.ai/settings/preferences).
### Self-Enrollment (All Users)
Any user with a connected GitHub account can enroll themselves for auto-reviews—no admin permissions needed.
1. Go to [Settings > Preferences](https://app.devin.ai/settings/preferences)
2. Under **Devin Review**, set your **Review trigger** to **On PR creation** or **Auto-review** (leave it on **Manual** if you only want to trigger reviews yourself)
Once enrolled with **Auto-review**, Devin will automatically review any PR you create, are added to as a reviewer, or are assigned to, on any repository. With **On PR creation**, Devin reviews only when the PR is first opened or marked ready for review.
You can also turn auto-review on or off for a specific PR from the actions menu (three dots in the header) on its review page, which also links to your personal review settings.
### Review Comment Language
You can choose the language Devin Review uses for its comments and analysis from [Settings > Preferences](https://app.devin.ai/settings/preferences) under the **Devin Review** section.
* **Use your display language** (default) — Review comments follow your display language setting.
* **Specific language** — Choose from English, Spanish, Portuguese, Japanese, Chinese, Korean, French, German, Russian, Arabic, Hebrew, or Indonesian.
Language instructions in your [REVIEW.md](#reviewmd) take precedence over this setting. If your `REVIEW.md` specifies a language for review comments, Devin will use that language regardless of your personal preference.
### Admin Configuration
Admins have additional options in [Settings > Review](https://app.devin.ai/settings/review):
* **Repositories** — Add repositories to auto-review ALL PRs on that repo. Use the **Add repo** button to search and select from connected repositories, and set each repository's trigger mode from the list.
* **Users** — View all enrolled users across the organization along with each user's trigger mode. Users enroll themselves through [self-enrollment](#self-enrollment-all-users); admins cannot enroll other users directly.
* **Add "Devin Review" link in PR description** — When enabled (default), Devin adds a link to the review in the PR description.
### Posting to GitHub
Admins can configure what Devin Review posts back to GitHub from [Settings > Review](https://app.devin.ai/settings/review) under the **Post as PR comments** section:
* **Post GitHub CI checks** — When enabled (default), Devin creates a commit status check on the PR for each review. This lets you see review results directly in your PR's checks list.
* **Bugs** — Post bugs (likely errors or incorrect behavior) as PR comments.
* **Security** — Post security vulnerabilities and hardening suggestions as PR comments. Only visible when [security scanning](#security) is enabled.
* **Flags (investigate)** — Post investigate flags (potential issues worth a closer look) as PR comments.
* **Flags (note)** — Post informational flags (observations that may not require action) as PR comments.
By default, bugs and "investigate" flags are posted as PR comments. Admins can toggle each finding type independently.
**Enterprise accounts:** Settings apply across all organizations in the
enterprise. Only users in the primary organization with enterprise admin
permissions can manage settings. Users in non-primary orgs can only
self-enroll.
Auto-review is not available for public repos that aren't connected to your
organization.
## Bug Catcher
The Bug Catcher automatically analyzes your PR for potential issues and displays findings in the Analysis sidebar. Findings are organized into **Bugs**, **Flags**, and **[Security](#security)**.
### Bugs
Bugs are actionable errors that should be fixed in the code. These represent issues the Bug Catcher has high confidence are actual problems.
Bugs are displayed with two severity levels:
* **Severe** — High-confidence
issues that require immediate attention
*
**Non-severe** — Lower severity issues that should still be reviewed
When you see a bug, you should investigate and fix it in your code.
### Flags
Flags are informational code annotations that may or may not require action. They come in two classes:
* **Investigate** — Flags that warrant further investigation. You should review the flagged code yourself and verify whether there is an actual bug or issue.
* **Informational** — The Bug
Catcher has either concluded correctness or is explaining how something works.
These help you understand the code changes without requiring action.
### Security
Devin Review scans for security vulnerabilities and displays them in a dedicated **Security** section of the Analysis sidebar, alongside Bugs and Flags. Security scanning is enabled by default and can be toggled from [Settings > Review](https://app.devin.ai/settings/review) under the **Security scan** section.
The scanner checks for the following vulnerability categories:
* Injection (SQL, XSS, command, template)
* Auth flaws (missing/broken access control, privilege escalation, auth bypass)
* Secrets exposure (hardcoded keys, tokens in logs, credentials in source)
* SSRF and path traversal
* Insecure deserialization, prototype pollution
* Missing input validation on untrusted data
* Weak cryptography (algorithms, key management)
* Transport/cookie security (missing HTTPS enforcement, permissive CORS, insecure cookie flags)
* Insecure defaults or misconfigurations introduced by the PR
Findings are displayed with two severity levels:
* **Critical** — High-confidence
vulnerabilities that should be fixed before merging
* **Warning** — Potential
security weaknesses worth investigating
Each finding includes a description of the issue, a recommendation for how to fix it, and where applicable a [CWE](https://cwe.mitre.org/) identifier classifying the vulnerability type.
The security scan also respects any security-related instructions in your [instruction files](#agentsmd-instruction-files) — for example, you can add security policies, sensitive areas, or threat models to your `REVIEW.md` to guide what the scanner looks for.
### Resolving Findings
You can mark bugs, flags, and security findings as resolved once you've addressed them or determined they don't require action. Resolved items are dimmed in the sidebar and sorted to the bottom of each section.
## Review Actions
### Starting a Review
When creating a new inline comment or replying to an existing thread, you can check the **Start a review** checkbox to batch your comments into a pending review instead of posting them individually. This mirrors the GitHub review workflow, letting you collect all your feedback before submitting. Once a review is in progress, subsequent comments are automatically added to it and the checkbox is hidden.
### Resolving Comments
You can resolve review threads to indicate they've been addressed. When all threads in a bot-authored review are resolved, Devin automatically minimizes that review on GitHub to keep the PR conversation clean. If a thread is later unresolved, the review is automatically unminimized.
In the diff view, you can expand or collapse individual comment threads using the caret toggle to focus on outstanding feedback.
### Code Owner Indicators
When a code owner has been requested as a reviewer, Devin Review displays a shield icon next to their name in the reviewer sidebar with a "Requested as code owner" tooltip. This makes it easy to identify which pending reviewers have code ownership over the changed files.
## Auto-Fix
Devin Review can automatically suggest and apply fixes for bugs it detects in your PRs. When Auto-Fix is enabled, Devin will propose code changes directly alongside its bug findings.
### How to Enable It
There are two ways to enable Auto-Fix:
1. **From the review sidebar** — On any Devin-authored PR, the Analysis sidebar shows an **Auto-fix** section with an **Enable auto-fix** button. Clicking it enables Auto-Fix for all Devin PRs in your organization. This requires organization admin permissions.
2. **From global Customization settings** — Go to [Settings > Customization](https://app.devin.ai/customization) > **Pull requests** > **Responding to bots**, then either:
* Set the mode to **Selected only** and add `devin-ai-integration[bot]` to the allowlist, or
* Set the mode to **All bots**.
When Devin Review finds bugs and Auto-Fix is enabled, it will generate suggested fixes that you can review and apply directly from the diff view.
### Permissions & Constraints
* Only organization admins can change this setting.
* If the bot mode is set to **All bots**, Auto-Fix shows as enabled and cannot be changed from the review sidebar. Use Customization settings to modify the bot mode.
* Devin Review's **No Issues Found** summary comments are always ignored. Only comments with actual findings trigger Auto-Fix.
If Devin Review feedback is currently ignored in your repository, you'll see a prompt in the session timeline to enable it.
## CLI
The Devin Review CLI lets you run code reviews directly from your terminal. This is especially useful for private repositories or when you want a streamlined local workflow.
### Installation & Usage
Run the CLI from within a local clone of the repository, no authentication required:
```bash theme={null}
cd path/to/repo
npx devin-review https://github.com/owner/repo/pull/123
```
You must run this command from within the repository being reviewed.
How it works:
1. **Git-based diff extraction** — The CLI uses your local git access to fetch the PR branch and compute the diff. This means you need read access to the repository on your machine.
2. **Isolated worktree checkout** — The CLI creates a [git worktree](https://git-scm.com/docs/git-worktree) in a cached directory to check out the PR branch. This keeps your working directory untouched -- no stashing, no branch switching. The worktree is automatically cleaned up after the review completes.
3. **Diff sent to Devin servers** — The computed diff and file contents are sent to Devin's servers for analysis.
### Privacy & Access Control
The CLI uses a **localhost server** to authenticate your review session:
* **Local-only access by default** — When you run `devin-review`, it starts a localhost server on your machine that serves a secure token. Only processes on your local machine can access this token, meaning **only you can view the review page** while logged out.
* **Transfer to your Devin account** — If you log in to a Devin account that has access to the GitHub organization, the review session is transferred to your account. This lets you access the review from other devices and share it with teammates.
When you run the CLI, `devin-review` can execute commands locally on your machine to gather additional context for finding bugs. This enables deeper analysis than diff-only review.
The Bug Catcher can execute a limited set of **read-only** operations scoped to the worktree directory:
* **File reading** — Read file contents within the repository
* **Search** — Grep for patterns and glob for file names
* **Bash commands** — Only read-only commands like `ls`, `cat`, `pwd`, `file`, `head`, `tail`, `wc`, `find`, `tree`, `stat`, and `du`
## Commit & Comment Attribution
* Bug findings, flags, and automated annotations always appear as the **Devin bot**.
* When a user writes a comment or review through Devin Review, it appears under the **user's** GitHub identity.
* When a user asks the chat agent to make a code change, the resulting commit is made as the **Devin bot**.
* **GitHub Suggested Changes** follow standard GitHub behavior: any reviewer (including Devin) can leave a suggested edit in a review comment. When a user clicks "Apply suggestion," the commit is authored by that user, in the same way as GitHub.
* Devin will **never** create commits or comments on behalf of a user without the user explicitly initiating the action.
## AGENTS.md / Instruction Files
Devin Review respects instruction files in your repository. If any of these files exist, they'll be used as context when analyzing your PR:
* `**/REVIEW.md`
* `**/AGENTS.md`
* `**/CLAUDE.md` (case-insensitive)
* `**/CONTRIBUTING.md` (case-insensitive)
* `.cursorrules`
* `.windsurfrules`
* `.cursor/rules`
* `*.rules`
* `*.mdc`
* `.coderabbit.yaml` / `.coderabbit.yml`
* `greptile.json`
Files inside agent-like subdirectories (`.agents/`, `.devin/`, `.cursor/`, `.github/`) are treated as belonging to the parent directory for scoping purposes. For example, `src/.agents/REVIEW.md` applies to files under `src/`.
These files can contain coding standards, project conventions, or other guidelines that help provide more relevant feedback.
### Custom Review Rules
You can configure additional files to be ingested as review context from [Settings > Review](https://app.devin.ai/settings/review) under the **Review Rules** section. This lets you add custom file glob patterns beyond the defaults listed above.
To add a custom rule:
1. Go to [Settings > Review](https://app.devin.ai/settings/review)
2. Under **Review Rules**, type a file glob pattern (e.g. `docs/**/*.md`)
3. Click **Add**
Custom rules appear in the list alongside the default `**/REVIEW.md` rule. You can remove any custom rule by clicking the trash icon next to it.
This is useful when your project has review-relevant documentation in non-standard locations, such as architecture decision records, style guides, or team-specific conventions stored in custom paths.
### REVIEW\.md
`REVIEW.md` is a dedicated instruction file for Devin Review. Place it anywhere in your repository to customize how Devin reviews PRs in your project. Devin automatically picks up `REVIEW.md` files at any directory level (`**/REVIEW.md`), so you can scope review guidelines to specific subdirectories if needed.
Use `REVIEW.md` to define review-specific guidelines such as:
* Areas of the codebase that need extra scrutiny
* Common pitfalls or anti-patterns to watch for
* Project-specific conventions that reviewers should enforce
* Files or directories that can be safely ignored during review
* Security or performance considerations unique to your project
**Example `REVIEW.md`:**
```markdown theme={null}
# Review Guidelines
## Critical Areas
- All changes to `src/auth/` must be reviewed for security implications.
- Database migration files should be checked for backward compatibility.
## Conventions
- API endpoints must include input validation and proper error handling.
- All public functions require TypeScript return types — do not use `any`.
- React components should use functional components with hooks, not class components.
## Ignore
- Auto-generated files in `src/generated/` do not need review.
- Lock files (package-lock.json, yarn.lock) can be skipped unless dependencies changed.
## Performance
- Flag any database queries inside loops.
- Watch for N+1 query patterns in API resolvers.
```
# Devin Session Tools
Source: https://docs.devin.ai/work-with-devin/devin-session-tools
Complete guide to Devin's IDE, Browser, and Shell tools
Devin provides three powerful tools during sessions that allow you to monitor, interact with, and take over Devin's work: the Shell, IDE, and Browser. These tools work together to give you full visibility and control over Devin's development environment. The Progress tab brings these tools together in one unified view, giving you clear visibility into Devin’s ongoing work.
## Progress Tab
You can click on any of the steps within a Devin session or click the Progress tab to view the details of that step. All shell commands, code edits, and browser activity will be logged in one unified view.
## Shell & Terminal
Devin's shell provides full command-line access to the development environment. You can monitor Devin's commands, view outputs, and run your own commands when needed.
### Command history features
With command history, you can easily see a list of all the commands that Devin ran, along with a preview of their outputs. Key features include:
* **Full command list**: View every command Devin has executed during the session
* **Output preview**: See the output of each command without switching contexts
* **Copy functionality**: Quickly copy commands and outputs to your clipboard
* **Time navigation**: Jump to different points in the session by clicking on commands
* **Integration with progress updates**: Shell commands are linked to Devin's progress updates for context
### View shell updates
During a session, you can click into Devin's progress updates to view specific shell commands Devin used while working through sub-tasks. The progress view shows shell updates in context with the work being performed.
### Shell command history
Shell updates show you the full command history and related outputs. You can easily copy a command and its output by clicking on the three-dots icon.
Commands that are greyed out are commands run at a future point in time in the session. You can jump to different points in time in the session by clicking on different commands in the Command History section.
### Running your own commands
When you take over Devin's machine, you have full terminal access. You can:
* Open a terminal in VSCode to run commands directly
* Toggle terminals from read-only to writable mode
* Run any commands you need to debug, test, or configure the environment
## Devin IDE
Devin works in an interactive VSCode environment loaded with your repos. You can check in on Devin's edits in real time, then touch up the changes or test Devin's code directly using the IDE tools and shortcuts you're familiar with.
### Reviewing Devin's work in real-time
You can watch Devin make edits in real-time. You're in a fully featured IDE complete with all your favorite shortcuts, so you can open files in new tabs, jump to definition, and more.
### Taking over Devin's task
Devin's IDE allows you to take over Devin's work when necessary, test and fix changes end-to-end without leaving the Devin webapp. Click to stop the session to take over and start using the IDE yourself. Many favorite commands are available in the IDE including:
* **Cmd/Ctrl+K** to generate terminal commands from natural language
* **Cmd/Ctrl+I** for rapid responses to questions or rapid file edits
* **Tab autocomplete** for code completion
All of Devin's terminals, commands, and their outputs are available in VSCode. Toggle from read-only to writable to run your own commands.
### IDE best practices
When taking over Devin's work, keep these tips in mind:
* Let Devin know about the changes you've made when you resume the session
* Make sure that Devin is paused before taking over the IDE to avoid simultaneous, conflicting changes
* Use Devin's browser to test the local build yourself, without leaving the webapp
## Interactive Browser
The Interactive Browser is located under the **Desktop** tab in the session UI. It allows you to directly view and interact with Devin's browser and desktop environment. This feature is especially helpful for browser tasks where Devin may require assistance, such as completing CAPTCHAs, completing multi-factor authentication steps, navigating complex websites, and more.
The tab was previously called "Browser" and has been renamed to "Desktop" to reflect Devin's full desktop environment capabilities.
### Browser use cases
The Interactive Browser is particularly useful for:
* **Testing local applications**: Test your application running on Devin's machine directly in the browser
* **Visual verification**: Verify that UI changes look correct in the browser
* **Screenshots and recordings**: Devin can capture screenshots and videos of the browser and submit them back to you as proof of testing or to show results
* **Authentication flows**: Complete login steps, MFA challenges, or OAuth flows that Devin cannot handle automatically
* **CAPTCHA solving**: Manually solve CAPTCHAs when Devin encounters them
* **Complex navigation**: Help Devin navigate through complex web interfaces or multi-step forms
### Cookie persistence
When you interact with the browser during a session, cookies and session data persist throughout the session. This means you can log into services once and Devin will maintain that authenticated state for the remainder of the session.
## Integration & Workflow
The IDE, Browser, and Shell tools work together seamlessly to provide a complete development experience.
Devin can perform diverse batches of actions concurrently, such as viewing the browser while running a shell command while reading multiple code files. This parallel execution improves speed and efficiency.
### Typical workflow
A typical workflow using these tools might look like:
1. **Start a session** and let Devin begin working
2. **Monitor progress** using progress updates
3. **Check shell commands** to understand what Devin is executing
4. **Review quick code changes** in the IDE using the diff view
5. **Functional testing** prototypes (for frontend development)
6. **Take over if needed** by stopping Devin and using the IDE directly
7. **Resume Devin** after making your changes and informing Devin what you did
## Best Practices
### When to use each tool
| Tool | Best for |
| --------------------------------- | ----------------------------------------------------- |
| **IDE** | Reviewing code changes, making quick edits, debugging |
| **Desktop** (Interactive Browser) | Frontend prototyping, visual testing, authentication |
| **Shell** | Monitoring commands, running tests, debugging issues |
### Tips for effective collaboration
* **Intervene early**: If you see Devin going in the wrong direction, stop and redirect early
* **Leverage command history**: Use shell command history to understand what Devin has tried and what worked
* **Communicate changes**: If resuming the session, always tell Devin about any changes you made when taking over
# MCP (Model Context Protocol) Marketplace
Source: https://docs.devin.ai/work-with-devin/mcp
MCP is an open protocol that enables Devin to use hundreds of external tools and data sources. Devin supports 3 transport methods (stdio, SSE, and HTTP).
## Why use MCP?
With MCP, Devin can help you:
* dig through Sentry, Datadog and Vercel logs
* [use Devin as a data analyst](https://devin.ai/ai-data-analyst-1) in Slack with database MCPs
* dig into SonarQube, CircleCI, and Jam issues
* bulk create Linear tickets, Notion docs, Google Docs (through Zapier) and more
* pull in context from and interact with Airtable, Stripe, and Hubspot
* a lot more!
## Get started with MCPs
Navigate to [Settings > Connections > MCP servers](https://app.devin.ai/settings/connections?tab=mcps) to browse and enable MCPs.
Check out our step-by-step guide!
Explore practical examples of Devin with MCPs like Datadog, Sentry, Linear, Figma, and more.
## Configuration tips
For MCPs that authenticate with OAuth, Devin will prompt you to visit a URL to connect your account. How the connection is shared depends on the server's **Access** setting:
* **Organization**: all members share a single authenticated connection. **We strongly recommend connecting a service account**, not your personal account, since every member's sessions will use it.
* **Personal**: each organization member authenticates individually with their own account, so connecting your personal account is fine. Note that other users can still interact with your sessions, so this should not be treated as a security boundary.
Don't see the MCP you're looking for? Organization admins can add any MCP server using the **Add a custom MCP** button. If you don't have admin permissions, use **Suggest MCP Integration** to request one.
Having trouble? Contact us via our [support page](https://app.devin.ai/settings/support) or via [support@cognition.ai](mailto:support@cognition.ai).
## Setting up a custom MCP server
If the MCP you need isn't in the marketplace, organization admins can add any MCP server using the **Add a custom MCP** button. Devin supports three transport types for custom servers:
Adding custom MCP servers requires the **Manage MCP Servers** permission. If you don't see the **Add a custom MCP** button, contact your organization admin or use the **Suggest MCP Integration** option to request a new server.
| Transport | Best for | Required fields |
| --------- | ---------------------------------------------------- | ---------------------------- |
| **STDIO** | Local CLI-based servers (e.g., `npx`, `uvx`, Docker) | Command, args, env variables |
| **SSE** | Remote servers using Server-Sent Events | Server URL, headers |
| **HTTP** | Remote servers using Streamable HTTP | Server URL, headers |
### Step-by-step: Adding a custom MCP server
1. Navigate to [Settings > Connections > MCP servers](https://app.devin.ai/settings/connections?tab=mcps).
2. Click **Add a custom MCP** at the top of the page.
3. Fill in the server details:
* **Server Name**: A descriptive name for the server (e.g., "Internal API Gateway").
* **Icon** (optional): An emoji or URL to use as the server's icon.
* **Short Description**: A brief summary of what the server does.
4. Select the **transport type** (STDIO, SSE, or HTTP).
5. Fill in the transport-specific configuration fields (see [Configuration format](#configuration-format) below).
6. Click **Save** to create the server.
7. Click **Test listing tools** to verify the connection. Devin will spin up an isolated test environment, connect to your server, and attempt to discover its available tools.
The **Test listing tools** button is disabled until you save your configuration. If validation fails, check the error message displayed — it will indicate whether the issue is with connectivity, authentication, or a timeout.
### Configuration format
The examples below show JSON representations of each transport's configuration fields. In practice, you fill these in through the web form — you do not need to write or paste JSON. The JSON format is shown here for clarity and as a reference for API-based or programmatic setups.
#### STDIO transport
Use STDIO for servers that run as local processes. You provide the command to launch the server, along with any arguments and environment variables.
**Fields:**
* **Command** (required): The executable to run (e.g., `npx`, `uvx`, `docker`).
* **Arguments**: Command-line arguments passed to the server.
* **Environment Variables**: Key-value pairs set in the server's process environment. Use these to pass API keys, tokens, or configuration values.
**Example — a custom STDIO server using `npx`:**
```json theme={null}
{
"transport": "STDIO",
"command": "npx",
"args": ["-y", "@example/my-mcp-server"],
"env_variables": {
"API_KEY": "your-api-key",
"API_BASE_URL": "https://internal-api.example.com"
}
}
```
**Example — a custom STDIO server using Docker:**
```json theme={null}
{
"transport": "STDIO",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "DB_CONNECTION_STRING", "my-org/my-mcp-server:latest"],
"env_variables": {
"DB_CONNECTION_STRING": "postgresql://user:pass@host:5432/mydb"
}
}
```
#### SSE and HTTP transports
Use SSE or HTTP for remote servers accessible over the network. HTTP (Streamable HTTP) is recommended for new integrations; SSE is supported for legacy servers.
**Fields:**
* **Server URL** (required): The endpoint URL of the MCP server.
* **Authentication method**: Choose between `None`, `Auth Header`, or `OAuth`.
* For **Auth Header**: Provide the header key (defaults to `Authorization`) and the header value (e.g., `Bearer your-token`).
* For **OAuth**: Devin will prompt you to complete an OAuth flow during your first session. If your provider requires pre-registered OAuth applications (no dynamic client registration), supply your own client ID and secret under **OAuth credentials**, and add Devin's callback URL `https://api.devin.ai/mcp/oauth/callback` to the redirect URI allowlist in your OAuth application's settings.
* **Access** (OAuth only): Choose who uses the authenticated connection.
* **Organization**: All members share a single connection. Connect a service account rather than a personal account.
* **Personal**: Each organization member authenticates individually with their own account.
**Example — a remote HTTP server with bearer token auth:**
```json theme={null}
{
"transport": "HTTP",
"url": "https://mcp.internal-service.example.com/mcp",
"auth_method": "auth_header",
"headers": {
"Authorization": "Bearer your-api-token"
}
}
```
**Example — a remote SSE server with no auth:**
```json theme={null}
{
"transport": "SSE",
"url": "https://mcp.example.com/sse"
}
```
When choosing between SSE and HTTP, prefer **HTTP** (Streamable HTTP). SSE is a legacy protocol and is being deprecated across the MCP ecosystem.
## Common patterns
### Connecting to an internal API
Expose your internal API as an MCP server so Devin can query it directly. Use the STDIO transport with a wrapper that translates MCP tool calls into API requests.
```json theme={null}
{
"transport": "STDIO",
"command": "npx",
"args": ["-y", "@example/api-mcp-bridge"],
"env_variables": {
"API_BASE_URL": "https://api.internal.example.com",
"API_TOKEN": "your-internal-api-token"
}
}
```
Alternatively, if your internal API is reachable over the network, use the HTTP transport:
```json theme={null}
{
"transport": "HTTP",
"url": "https://api.internal.example.com/mcp",
"headers": {
"Authorization": "Bearer your-internal-api-token"
}
}
```
### Connecting to a database
Use a database MCP server to give Devin read or write access to your data. Many community-maintained servers exist for common databases.
```json theme={null}
{
"transport": "STDIO",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://user:password@host:5432/database"]
}
```
For production databases, use a **read-only** connection string or a database user with restricted permissions. Devin executes queries based on user instructions, so scoping access appropriately is important.
### Connecting to a custom tool or script
Wrap any CLI tool or script as an MCP server. For example, a Python-based server using `uvx`:
```json theme={null}
{
"transport": "STDIO",
"command": "uvx",
"args": ["my-custom-mcp-server"],
"env_variables": {
"CONFIG_PATH": "/path/to/config.json"
}
}
```
Or a Docker-based server for isolated execution:
```json theme={null}
{
"transport": "STDIO",
"command": "docker",
"args": ["run", "-i", "--rm", "my-org/custom-mcp-server:latest"]
}
```
### Using environment variables for secrets
Pass sensitive values through environment variables rather than hardcoding them in arguments. Devin's [Secrets](/product-guides/secrets) feature can manage these values — store your API keys or tokens as secrets, then reference them in your MCP server configuration.
## Troubleshooting custom MCP servers
### "Test listing tools" fails
| Symptom | Likely cause | Fix |
| ------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| "Verify server URL and network connectivity" | The server URL is unreachable | Check that the URL is correct and accessible from the internet (or from Devin's network if using VPN) |
| "Check authentication credentials and permissions" | Invalid or missing auth credentials | Verify your API key, token, or OAuth configuration |
| "Server took too long to respond - check server status" | The server didn't respond within the timeout | Ensure the server is running and responsive; check for firewall rules blocking the connection |
| "MCP server validation failed" (generic) | Command not found, missing dependencies, or server crash | For STDIO servers, verify the command exists and runs locally; check that all required env variables are set |
### Server connects but tools aren't available
* Verify the server correctly implements the MCP protocol's `tools/list` method.
* For STDIO servers, ensure the process writes valid JSON-RPC messages to stdout and reads from stdin — logging or debug output to stdout will break the protocol.
* Check that environment variables are set correctly. Missing values (e.g., a blank API key) can cause the server to start but fail to register tools.
### OAuth authentication issues
* When prompted to authenticate, complete the OAuth flow in the browser window that opens. Devin will wait for the callback.
* If authentication fails, check that the OAuth redirect URI is configured correctly on the provider side. When using your own OAuth client credentials, the provider must allow Devin's callback URL `https://api.devin.ai/mcp/oauth/callback` as a redirect URI — many providers reject the OAuth flow if this URL isn't whitelisted.
* Only users with the **Manage MCP Servers** permission can authenticate OAuth-based MCP servers. If you see a permissions error, contact your org admin.
For OAuth-based MCPs with **Organization** access, **use a service account** rather than your personal account — all members' sessions will use the same authenticated connection. With **Personal** access, each member authenticates with their own account, so a personal account is fine.
### General debugging tips
* **Check the server locally first.** Before adding a custom server to Devin, verify it works by running the command or hitting the URL from your own machine.
* **Review Devin's session logs.** If a server fails during a session, Devin will log the error. Look for MCP-related messages in the session output.
* **Simplify and iterate.** Start with the minimal configuration (e.g., no auth, default settings) and add complexity once the basic connection works.
* **Verify environment variables.** A common issue is missing or misnamed env variables. Double-check that every required variable is set in the configuration.
If you're building your own MCP server, the [Model Context Protocol specification](https://modelcontextprotocol.io/introduction) has detailed documentation on the protocol, transport types, and tool definitions.
***
## Marketplace MCPs
Below are configuration details for specific MCPs available in the marketplace.
### Vercel, Atlassian, Notion, Sentry, Neon, Asana, Jam and many more
Many MCPs in our marketplace can be enabled without configuration with 1 click!
Just click "Enable". You'll be prompted to connect a service account during your Devin session, or when you click "Test listing tools".
Available MCPs include:
* AlloyDB
* Asana
* Atlassian
* BigQuery
* Cloud SQL (MySQL)
* Cloud SQL (PostgreSQL)
* Cloud SQL (SQL Server)
* Cloudflare
* Cortex
* Dataplex
* Figma
* Fireflies
* Firestore
* Jam
* Linear
* Looker
* Metabase
* MySQL
* Neon
* Notion
* PostgreSQL
* Prisma
* Sentry
* Spanner
* SQL Server
* Vercel
* More below!
**Linear**: If you have the [Linear integration](/integrations/linear) connected, Devin already has native Linear tools and you do not need to configure the Linear MCP separately.
### Datadog
This is the official Datadog remote MCP server. When you enable it from the marketplace, you'll be prompted to authenticate with your Datadog account via OAuth.
You'll also need to select your Datadog site/region (e.g. US1, US3, US5, EU, AP1, AP2, US1-FED) when enabling the MCP.
[Documentation](https://docs.datadoghq.com/bits_ai/mcp_server/)
### Slack
This is the official Slack remote MCP server. When you enable it from the marketplace, you'll be prompted to authenticate with your Slack account via OAuth.
Note that it uses user-level OAuth: if connected with organization-wide access, all org members share the same user identity, so we recommend using personal access.
[Documentation](https://docs.slack.dev/ai/slack-mcp-server)
### Supabase
You'll need to provide a personal access token, which you can find and create at [https://supabase.com/dashboard/account/tokens](https://supabase.com/dashboard/account/tokens)
[Documentation](https://mcpservers.org/servers/supabase-community/supabase-mcp)
### Figma
This is the official Figma remote MCP server. When you enable the MCP from the marketplace, you'll be prompted to authenticate with your Figma account via OAuth.
When using this MCP, make sure to send Devin a link to your Figma file.
[Documentation](https://developers.figma.com/docs/figma-mcp-server/remote-server-installation/)
### Stripe
You'll need to provide an authorization header which follows the format `Bearer `, where `` is your Stripe API key. More info at: [https://docs.stripe.com/mcp#bearer-token](https://docs.stripe.com/mcp#bearer-token)
[Documentation](https://docs.stripe.com/mcp)
### Zapier
You'll need to provide an authorization header which follows the format `Bearer `.
You'll need to extract your Bearer token from the Server URL provided at [https://mcp.zapier.com/mcp/servers](https://mcp.zapier.com/mcp/servers) > Connect
Your Server URL will look like: [https://mcp.zapier.com/api/mcp/s/\*\*\*\*\*/mcp](https://mcp.zapier.com/api/mcp/s/*****/mcp)
Extract the starred section (\*\*\*\*\*) and use it in the authorization header you provide: `Bearer *****`
[Documentation](https://zapier.com/mcp)
### Airtable
You'll need to provide an Airtable API key. You can find your API keys at: [https://airtable.com/create/tokens](https://airtable.com/create/tokens)
[Documentation](https://www.npmjs.com/package/airtable-mcp-server)
### Docker Hub
Credentials required:
* Docker Hub username: This can be obtained from My Hub
* Personal Access Token: Go to Account settings > Personal access tokens and create a token
[Documentation](https://hub.docker.com/r/mcp/dockerhub)
### SonarQube
To get the required credentials:
* Sonarqube token: Go to my Account > Security and generate your API token
* Sonarqube org: This is your username, example shown in the below image
* Sonarqube URL:
* For self hosted: format is [http://localhost:9000](http://localhost:9000/) OR [https://sonarqube.mycompany.com](https://sonarqube.mycompany.com/)
* For SonarCloud: use [https://sonarcloud.io](https://sonarcloud.io/)
[Documentation](https://github.com/SonarSource/sonarqube-mcp-server)
### Netlify
You’ll need to provide a Personal Access Token, which you can view and create at [https://app.netlify.com/user/applications#personal-access-tokens](https://app.netlify.com/user/applications#personal-access-tokens). Make sure to copy the PAT as soon as it is created. You won't be able to see it again!
[Documentation](https://docs.netlify.com/welcome/build-with-ai/netlify-mcp-server/)
### Pulumi
A Pulumi access token can be obtained from the Access tokens section in the sidebar of the Pulumi dashboard.
[Documentation](https://www.pulumi.com/docs/iac/using-pulumi/mcp-server/)
### Parallel
You'll need to provide an API key, which you can generate at [https://platform.parallel.ai/](https://platform.parallel.ai/)
[Documentation](https://docs.parallel.ai/features/remote-mcp)
### Heroku
You’ll need to provide an API Key, which you can find at [https://dashboard.heroku.com/account](https://dashboard.heroku.com/account)
[Documentation](https://www.heroku.com/blog/introducing-official-heroku-mcp-server/)
### CircleCI
You'll need to provide 2 environment variables:
* `CIRCLECI_TOKEN` - CircleCI API Token, which can be created at [https://app.circleci.com/settings/user/tokens](https://app.circleci.com/settings/user/tokens). Make sure to copy the API token as soon as it is created. You won't be able to see it again!
* `CIRCLECI_BASE_URL` \[Optional] - This is optional and is required for on-prem customers only. The default value is `"https://circleci.com"`
[Documentation](https://hub.docker.com/r/mcp/circleci)
### Cortex
You'll need to provide a Cortex personal access token to enable this MCP:
1. Log in to your Cortex instance.
2. From the left-hand menu, go to *Settings → My access tokens*.
3. Click *Create new token*.
4. Enter a name for the token and description.
5. Click *Create token* and copy the token.
When using this MCP, make sure Devin is configured with the correct Cortex API URL (defaults to `https://api.getcortexapp.com`).
[Documentation](https://docs.cortex.io/get-started/mcp)
### Square
You'll need to provide an authorization header which follows the format `Bearer `, where `` is your Square access token. More info at: [https://developer.squareup.com/docs/build-basics/access-tokens](https://developer.squareup.com/docs/build-basics/access-tokens)
[Documentation](https://developer.squareup.com/docs/mcp)
### Hubspot
You'll need to provide an access token as an environment variable. To get your access token:
1. Create a private app in HubSpot:
2. Go to Settings > Integrations > Private Apps
3. Click "Create private app"
4. Name your app and set required scopes
5. Click "Create app"
6. Copy the generated access token from the "Auth" tab
[Documentation](https://www.npmjs.com/package/@hubspot/mcp-server)
### Redis
Required credentials:
* Redis host
* Redis port
* Redis username
* Redis password
[Documentation](https://redis.io/docs/latest/integrate/redis-mcp/client-conf/)
### Google Maps
You'll need to (1) provide an API key (2) enable the individual APIs you'd like Devin to have access to.
To get your API key, navigate to [https://console.cloud.google.com/apis/credentials](https://console.cloud.google.com/apis/credentials) and open the sidebar > APIs and services > Credentials.
To enable an individual API, search for the API and click enable.
[Documentation](https://www.npmjs.com/package/@modelcontextprotocol/server-google-maps)
### Playwright
No environment variables needed for this! Simply enable the integration.
[Documentation](https://hub.docker.com/r/mcp/playwright)
### Firecrawl
You’ll need to provide an API Key (`FIRECRAWL_API_KEY`), which you can view and create at [https://www.firecrawl.dev/app/api-keys](https://www.firecrawl.dev/app/api-keys).
[Documentation](https://hub.docker.com/r/mcp/firecrawl#use-this-mcp-server)
### ElasticSearch
You’ll need to provide 2 environment variables:
* `ES_URL` - ElasticSearch URL or endpoint, which can be found on the /overview page in Elasticsearch.
* `ES_API_KEY` - ElasticSearch API key, which can be created on the `/indices/index_details//data` page in Elasticsearch.
`ES_SSL_SKIP_VERIFY` is an optional environment variable. When set to `true` , it skips SSL/TLS certificate verification when connecting to Elasticsearch.
[Documentation](https://hub.docker.com/r/mcp/elasticsearch)
### Postgres
The only credential needed is the Postgres connection string.
[Documentation](https://www.npmjs.com/package/@modelcontextprotocol/server-postgres?activeTab=readme)
### Plaid
The only credential required is an OAuth bearer access token that can be obtained by running the following code:
```jsx theme={null}
curl -X POST https://production.plaid.com/oauth/token \
-H 'Content-Type: application/json' \
-d '{
"client_id": "YOUR_PLAID_CLIENT_ID",
"client_secret": "YOUR_PRODUCTION_SECRET",
"grant_type": "client_credentials",
"scope": "mcp:dashboard"
}'
```
To obtain the client ID and client production secret, go to [https://dashboard.plaid.com/developers/keys](https://dashboard.plaid.com/developers/keys)
[Documentation](https://plaid.com/docs/resources/mcp/)
### Replicate
The only required credential is the API token which can be found at [https://replicate.com/account/api-tokens](https://replicate.com/account/api-tokens)
[Documentation](https://replicate.com/docs/reference/mcp)
### Grafana
You'll need to provide 2 environment variables:
* Grafana URL
* Grafana service account token: To obtain the token, in the sidebar, go to Administration > Users and access > Service accounts > Add service account (if you don’t already have one added) > Add service account token
### Pinecone
NOTE: The Pinecone MCP supports only indexes with integrated embedding. Indexes for vectors you create with external embedding models are not yet supported as of 7/16/25.
The only credential required is the Pinecone API key, which can be obtained via the API keys page in the Pinecone dashboard as seen below:
### Snyk
1. First, configure the MCP server. Documentation is available [here](https://docs.snyk.io/integrations/developer-guardrails-for-agentic-workflows/quickstart-guides-for-mcp/devin-guide). Note: Make sure to add a env variable at the bottom (not listed in documentation guide).
2. Install the Snyk CLI on Devin's machine. Documentation is available [here](https://docs.snyk.io/developer-tools/snyk-cli/install-or-update-the-snyk-cli)
```jsx theme={null}
brew tap snyk/tap
brew install snyk-cli
snyk --disable-trust
```
Note: some Snyk tests require trust to operate - install on machine after homebrew is installed. Documentation is available [here](https://docs.snyk.io/integrations/developer-guardrails-for-agentic-workflows/troubleshooting-for-the-snyk-mcp-server#folder-trust).
**Tip**:
If configured correctly - the full list of Snyk scans should run on the first pass. However, depending on Framework, some scans require an “unmanaged: true” flag (ex: C++) to be passed. Currently you can set this in knowledge or during your Devin session - here’s an example:
**Tip**: We've written an [example playbook](https://app.devin.ai/settings/playbooks/163db5ecab7e47e6a82c71bf8d338678) to help you get started.
[Documentation](https://docs.snyk.io/integrations/developer-guardrails-for-agentic-workflows/quickstart-guides-for-mcp/devin-guide)
# Security Swarm
Source: https://docs.devin.ai/work-with-devin/security-swarm
Find, triage, and remediate security vulnerabilities across your repositories
Security Swarm is Devin's security scanning and remediation product. It builds a threat model tailored to your code, investigates and validates potential vulnerabilities, and helps you fix findings through pull requests. It can identify vulnerabilities like remote code execution (RCE), SQL injection, path traversal, server-side request forgery (SSRF), authorization bypasses, memory-safety bugs, denial-of-service vulnerabilities, and more. It can even identify chained exploits spanning multiple files.
Security Swarm is a custom orchestration of Devins we are calling [Agentic MapReduce](https://devin.ai/blog/agentic-mapreduce). It divides your repo among parallel Devins, providing broad coverage and deep investigation while bounding cost, making it cost-effective to scan large codebases. We also [benchmarked Security Swarm](https://devin.ai/blog/security-eval) against a ground-truth set of published vulnerabilities from the GitHub Advisory Database.
To run a scan:
* Your organization must have access to the repository you want to scan.
* You need to be authorized to use Devin sessions.
* You need the **Use code scans** permission.
* To configure an Auto Scan schedule, you also need **Manage code scans** and permission to manage automations.
If you do not see **Security** in the sidebar or cannot start a scan, ask an administrator to review your role. See [Access and permissions](#access-and-permissions) for details.
## Run your first scan
1. Open **Security** in the left sidebar and click **Start scan**.
2. Under **Single repo**, choose a repository to scan.
3. Make sure **Interactive mode** is enabled.
4. Click **Run Scan**.
5. When the proposed [threat model](#interactive-mode) is ready, review it and either click **Looks good, start scanning** or provide feedback.
6. As findings appear, review the evidence and [act on the findings](#act-on-a-finding) that need attention.
For repeatable scans, create a profile that captures your scope, threat model, severity criteria, validation steps, and remediation constraints.
## Review and act on findings
Open a scan to see its findings. The page displays a list of findings on the left, grouped by severity, and the selected finding's details on the right.
The status tabs show a live count:
* **Open** — needs attention.
* **Reviewed** — has been reviewed and no longer requires action.
* **Dismissed** — was determined as a false positive or duplicate.
While a scan is running, the page updates automatically as findings arrive.
**Reviewed** is a workflow status, not confirmation that a fix was merged. A finding can be marked Reviewed manually or when a later scan determines that it is no longer present.
### What's in a finding
A finding includes:
* **Severity, status, exploitability, confidence, and category**.
* The affected **file path and code snippets**.
* A **description** of the issue and a **remediation recommendation**.
* A **runtime validation result**, supporting evidence, and validation artifacts.
* Associated **pull requests** and their open, merged, or closed state.
* **Code owners** and notes, when available.
Treat a risky code pattern as a lead, not proof of a vulnerability. Check that the finding traces a reachable path from attacker-controlled input, accounts for validation and authorization controls, and explains a concrete security impact.
### Act on a finding
Starts a Devin session to remediate the issue and open a pull request. The session and resulting pull request are tracked on the finding.
Sends context to a feedback session that refines the scan profile for future scans. For example, explain that a reported data flow is protected by an internal gateway so future scans can account for that control.
Overrides the finding's severity, with optional context for Devin. For example, lower the severity when exploitation requires privileged internal access, and include that constraint as context.
Marks the finding as Open, Reviewed, or Dismissed. Keep a finding Open while it needs action, mark it Reviewed after triage, or dismiss it when it is a false positive or duplicate.
## Scan profiles
A scan profile controls the scan's scope and provides guidance for each stage of the scan. Every scan can use one profile. To evaluate a repository against multiple attacker personas or threat categories, run separate scans with different profiles.
A specific threat model is one of the most effective ways to keep coverage consistent across scans. Define the attacker, sensitive assets, trust boundaries, important entry points, and explicit exclusions.
Manage profiles from the **Profiles** tab on the Security page.
### Create a profile
You can create a profile in two ways:
* **Generate with Devin** — describe the application, threats, scope, exclusions, and severity standards in natural language. Devin drafts the profile for you.
* **Create manually** — fill in each profile input yourself.
Generating with Devin is a useful starting point, but review every generated field before using the profile. Leaving an optional guidance field blank applies Security Swarm's built-in behavior for that stage.
### Basic information
* **Profile name** — name the application surface or threat category, rather than the team running the scan. Example: `Multi-tenant API authorization`.
* **Description** — summarize the profile's scope and security objective. Example: `Find authentication, authorization, and tenant-isolation vulnerabilities in the public API.`
The examples below combine into a single profile for a multi-tenant API. Adapt the boundaries, commands, and severity standards to your application.
### Threat model
Describe the attacker, sensitive assets, trust boundaries, important entry points, and anything explicitly out of scope. This guidance shapes the rules Devin generates before investigation begins.
```text theme={null}
Assume an unauthenticated internet attacker or an authenticated user in one tenant.
Focus on public HTTP handlers, OAuth callbacks, API tokens, administrative actions,
and accesses to tenant-owned data. Treat internal development scripts and local-only
tools as out of scope. Prioritize authentication bypasses, cross-tenant access, token
leakage, injection, and SSRF.
```
### Investigation guidance
Define how Devin should investigate a potential issue and what evidence it should collect. Ask it to account for existing mitigations and to distinguish reachable vulnerabilities from theoretical concerns.
```text theme={null}
Trace untrusted input from the route through middleware and service layers to the
sensitive operation. Check authentication, authorization, tenant scoping, validation,
and escaping at every boundary. Identify the exact reachable path and cite the relevant
files and lines. Do not report a theoretical issue when an effective mitigation blocks
the path.
```
### Triage guidance
Define how Devin should deduplicate and prioritize findings. Include your severity criteria so results match your organization's standards.
```text theme={null}
Group findings that share the same root cause. Treat unauthenticated remote code
execution and cross-tenant write access as critical. Treat cross-tenant read access and
credential disclosure as high. Treat single-user availability issues as medium unless
they can affect shared infrastructure. Label defense-in-depth recommendations as low.
```
### Runtime validation
Enable runtime validation when Devin can safely build and exercise the application. Explain how to start the application, create test data, authenticate, and demonstrate the expected security boundary.
```text theme={null}
Use the repository's documented development setup. Start the API and create two
non-production tenants with one test user in each. Attempt the suspected request as a
user from the other tenant, then verify both the HTTP response and persisted data.
Do not call production services or modify production data.
```
An unsuccessful validation does not always disprove a finding. Review the validation result and artifacts to determine whether an effective mitigation blocked the exploit or the configured environment prevented Devin from completing the test.
Runtime validation starts a separate Devin session for each finding. See [Configure runtime validation](#configure-runtime-validation) for environment guidance.
### Report
Enable reports when you need a summary artifact after the scan. Specify the intended audience and the information the report should emphasize.
```text theme={null}
Write an executive summary for security and engineering leads. List confirmed critical
and high findings first, followed by unvalidated findings. Include affected components,
validation status, pull request status, and a prioritized remediation plan.
```
### Remediation guidance
Specify constraints that Devin should follow when you assign a finding for remediation. Include testing expectations, compatibility requirements, and practices to avoid.
```text theme={null}
Prefer the smallest safe change and preserve existing public API behavior. Add a
regression test that fails before the fix and passes afterward. Run the affected package's
lint and test commands. Avoid major dependency upgrades unless the vulnerability cannot
be fixed safely without one.
```
### Advanced inputs
Open **Advanced** to control file scope and investigation batches:
* **Include globs** — restrict the scan to matching files. For example, `apps/api/**` and `packages/auth/**`.
* **Exclude globs** — remove irrelevant files from the selected scope. For example, `**/generated/**`, `**/vendor/**`, and `**/fixtures/**`.
* **Batch size** — control how many files with signals are grouped into each investigation batch. Leave this at its default unless you are deliberately tuning scan behavior. The accepted range is 1–500; the default is 5.
Overly broad exclusions can hide vulnerable code or remove context needed to understand a data flow. Exclude only files you are confident are irrelevant to the profile.
### Organization and enterprise profiles
New profiles are organization-scoped. Enterprise admins can later change a profile's visibility to **Enterprise**, making it available across the enterprise.
Enterprise profiles can only be edited or archived by enterprise admins. Other users with access to Security can view and use them but cannot modify them.
### Interactive mode
With **Interactive mode** enabled, Devin builds a proposed threat model and pauses before investigation. The scan page displays the proposed rules and lets you:
* **Looks good, start scanning** — accept the threat model and begin investigation.
* **Provide feedback on the threat model** — describe what to add, remove, or emphasize, then review the revised model.
Use interactive mode for the first scan of a repository and whenever its risk surface or profile changes significantly. Once the profile captures the approved guidance, routine scans can run without the pause.
### Configure runtime validation
Runtime validation runs only when the selected profile has runtime validation enabled and contains validation guidance. Give Devin enough information to build, run, seed, and authenticate the application in its sandbox.
If the repository has [declarative configuration](/onboard-devin/environment/blueprints), Devin can reuse its build and installation setup. Otherwise, add the required setup commands to the profile's validation guidance.
Do not put production credentials or secret values directly in profile guidance. Use non-production test accounts and credentials already provided through your organization's environment configuration.
## Scale scanning
### Scan multiple repositories
Use the **All repos** tab in the New Scan dialog to queue scans across an organization:
1. Optionally enter a **Repository name filter**.
2. Optionally select a scan profile.
3. Keep **Skip already-scanned repos** enabled to exclude repositories already scanned with the selected profile.
4. Click **Preview**.
5. Review the matching repositories, deselect any you do not want to scan, and confirm.
The preview is a dry run. Changing the filter, profile, or skip setting invalidates the preview so you cannot confirm a stale list.
### Auto Scan
Auto Scan periodically scans commits added since the last completed scan. You can configure it:
* While starting a single-repository scan by selecting a daily, weekly, monthly, or custom schedule.
* From an existing scan by adding, editing, disabling, or immediately running its schedule.
Schedule times are shown in your local timezone.
Auto Scan is only available when [automations](/product-guides/automations) are enabled for your organization. Configuring it requires both **Manage code scans** and permission to manage automations.Auto Scans are incremental: each run only investigates the commits added since the last completed scan. Clicking **Start scan** instead defaults to a full scan of the repository scope.
### Scan new commits
Click **Scan new commits** on a completed scan to investigate commits added since its last scanned commit. Auto Scan uses the same incremental behavior, making subsequent scans less expensive than repeatedly scanning the full repository scope.
## Manage and monitor scans
Depending on the scan and its profile, the scan header can include:
* **Reports** — download reports generated for the scan.
* **Usage** — view ACUs consumed, session count, scan duration, and pull request statistics.
* **Session** — open the main Devin session that performed the scan.
* **Export as CSV** — export the scan's findings.
* **Archive** or **Unarchive** — hide the scan from or restore it to the default list.
* **Scan new commits** — start an incremental scan.
Scans run as Devin sessions and consume [ACUs](/admin/billing/usage).
### Security dashboard
After the organization completes its first scan, the Security page displays an organization-wide dashboard for the last 7, 30, or 90 days:
* **Pull request statistics** — created, merged, open, and closed pull requests, plus merge rate.
* **Findings over time** — findings grouped by severity across the selected period.
## Access and permissions
Security access is controlled through code scan permissions in the role editor:
| Permission | What it unlocks | Default roles |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| **View code scans** | View scans, profiles, findings, and associated scan sessions. | Admin |
| **Use code scans** | Start scans, create organization profiles, submit finding feedback, adjust findings, change finding statuses, and assign findings to Devin. | Admin |
| **Manage code scans** | Archive or unarchive scans and configure Auto Scan schedules. | Admin |
| **Manage account code scans** | Promote organization profiles to enterprise scope and edit or archive enterprise profiles. | Enterprise admin |
Starting scans, submitting feedback, and assigning findings to Devin also require permission to use Devin sessions. Auto Scan additionally requires permission to manage automations.
By default, members do not receive code scan permissions. Owners have every permission, and administrators can grant permissions to members through [custom roles](/enterprise/security-access/custom-roles).
## Compare Security Swarm with another scanner
For a useful comparison, give both scanners the same scope, threat model, severity criteria, and validation expectations. Differences in configuration can otherwise obscure differences in underlying capability.
Use profiles to encode the comparison criteria, interactive mode to confirm the generated threat model, and runtime validation to apply the same standard of evidence to reported findings.
## FAQ
Security Swarm investigates potential vulnerabilities in the context of your repository rather than reporting risky patterns in isolation. Devin traces relevant data flows, checks for validation and authorization controls, and evaluates whether the issue has a concrete security impact.
Each finding includes a confidence level and supporting evidence. Review that evidence before acting, especially when a finding has not been validated at runtime.
Check the affected code, entry point, data flow, existing mitigations, stated impact, confidence, and exploitability. When runtime validation is enabled, also review the validation result and its supporting artifacts.
If the evidence overlooks a control or claims an unsupported impact, use [Feedback](#act-on-a-finding) to provide the missing context for future scans.
Runtime validation attempts to reproduce a finding by building and exercising the application in an isolated environment. A successful validation provides stronger evidence of exploitability, while an unsuccessful validation can identify assumptions or environment limitations that require further review.
Runtime validation is optional and requires enough [validation guidance](#configure-runtime-validation) for Devin to build, run, seed, and authenticate the application safely.
Security Swarm analyzes parts of the repository in parallel and combines the results into a repository-wide view. This allows it to identify relationships between components, such as one endpoint exposing an identifier required to exploit another endpoint.
Any resulting chained finding should still identify the relevant code paths and explain how the individual conditions combine into a concrete impact.
Security Swarm uses agentic analysis, so separate scans may not produce identical findings or wording. A focused scope, explicit threat model, clear severity criteria, and specific investigation guidance help keep coverage consistent.
Capture those requirements in a reusable [scan profile](#scan-profiles), use [interactive mode](#interactive-mode) to review the proposed threat model, and provide feedback when a result misses important context.
No security scanner can guarantee complete coverage. Results depend on the selected scope, profile guidance, available repository context, and whether findings can be validated in the configured environment.
Run separate scans for distinct attacker models or threat categories, keep profiles current as the application changes, and use Security Swarm alongside your existing security review and testing practices.
# Slash Commands
Source: https://docs.devin.ai/work-with-devin/slash-commands
Use slash commands to quickly insert predefined text prompt templates and streamline your workflow with Devin
## Overview
Slash commands are shortcuts that expand into predefined text prompts when used in Devin's chat interface. They help you quickly start common workflows without typing out full instructions each time.
The interface includes visual badges and keyboard shortcut hints to make discovering and using slash commands easier.
## Built-in Slash Commands
Devin comes with several built-in slash commands designed for common development workflows:
### /plan
Use this command when you want Devin to help you scope and plan a task before implementation. The planning template guides Devin to analyze your codebase, identify relevant files, and propose a detailed approach.
### /review
Use this command to set up a thorough code review workflow where Devin examines code changes and provides feedback on code quality, best practices, and potential bugs.
### /test
Use this command when you want Devin to help create tests, run existing test suites, or analyze test coverage for your codebase.
### /think-hard
Use this command when you want Devin to think more carefully and thoroughly before providing a solution for complex problems.
### /implement
Use this command when you have a specific feature or change you want Devin to implement in your codebase.
## How Slash Commands Work
When you start typing `/` in Devin's chat input, a menu appears showing available slash commands. You can:
1. Continue typing to filter the list of commands
2. Use arrow keys to navigate through options
3. Click on a command or press Enter to select it
Once selected, the slash command appears as a chip in the input field. An example for `/plan` will look like the below:
/plan ×
Clicking on the chip will expand it into the full prompt template. You can then customize the template with your specific requirements before sending it to Devin.
## Custom Slash Commands
Organizations can create custom slash commands tailored to their team's unique workflows. For example, you might create:
* A `/deploy` command with your team's deployment checklist
* A `/security-review` command with your organization's security review guidelines
* A `/onboard` command to help new team members understand your codebase
### Managing Custom Commands
Organization administrators can manage slash commands through [Settings > Customization](https://app.devin.ai/customization). This interface allows you to:
* View all available commands (both default and custom)
* Create new custom commands with specific prompt templates
* Edit existing custom command templates
* Delete custom commands
* Restore default commands to their original templates
Creating, editing, and deleting slash commands requires organization admin permissions (`ManageOrgSettings`). All organization members can use both default and custom commands.
# Testing & Video Recordings
Source: https://docs.devin.ai/work-with-devin/testing-and-recordings
How Devin tests your changes end-to-end and sends you video recordings as proof
Devin can test your application end-to-end after creating a PR — running the app locally, interacting with it through the browser, and recording a video of the entire process. The recording is sent directly to you as an attachment so you can verify the changes work without pulling the branch yourself.
## How It Works
After Devin creates a PR, it can enter **testing mode** — a structured workflow where Devin:
1. **Sets up the environment** — installs dependencies, starts services, logs into required accounts
2. **Plans the test** — reads the diff and codebase to create a minimal, focused test plan
3. **Records a video** — starts a screen recording, executes the test plan in the desktop, and annotates key moments
4. **Sends you the result** — stops the recording, processes the video, and sends it to you as a message attachment
The goal is a short recording that a code reviewer watches and immediately thinks "yep, it works" — then merges the PR.
## Triggering a Test
After creating a PR, Devin will offer to test the app for you. Click **Test the app** to have Devin start the testing workflow.
A setting to automatically run testing after PR creation — without needing to click the button — is coming soon.
You can also ask Devin to test at any point during a session — for example, "test the changes you just made and send me a recording" or "verify the login page works and send me a video."
## The Testing Workflow
When Devin enters testing mode, it follows a structured three-phase process:
### Phase 1: Setup
Before any testing begins, Devin prepares the environment:
* **Reads the PR and codebase** to understand what needs testing
* **Checks for relevant skills** in the repo (under `.agents/skills/`) and follows them if found
* **Logs into required services** and resolves access issues
* **Checks available environments** (staging, dev, local) and verifies connectivity
* **Requests missing secrets** from you if needed — Devin will ask for credentials up front and save them for future sessions
Completing [environment configuration](/onboard-devin/environment) ahead of time makes testing much faster — Devin can skip installing dependencies, configuring services, and logging in at the start of each session.When Devin asks for credentials during testing, it saves them as [secrets](/product-guides/secrets) for future sessions so you only need to provide them once.
### Phase 2: Test planning
Once setup is complete, Devin writes a short test plan:
* Identifies the **single most important end-to-end flow** that proves the feature works
* Writes concrete, unambiguous steps (e.g., "click the button labeled Save at the top right" — not "find the save option")
* Grounds the plan in actual code — traces through the frontend to find the exact UI path to the feature
* Only adds additional test flows if there's a genuinely critical edge case
Devin sends you the plan as a short message before executing, so you can course-correct if needed.
### Phase 3: Recording and execution
After CI is green and any review comments are addressed, Devin executes the test:
1. **Starts recording** — captures the full screen
2. **Annotates key moments** — adds text labels at important points (e.g., "Testing login flow", "Feature confirmed working") that appear in the final video
3. **Executes the test plan** — interacts with the app through the browser, following each step
4. **Stops recording** — the video is automatically processed with annotations and speed adjustments around key moments
5. **Sends the video** — attaches the recording to a message so you can watch it directly
## Video Recording Details
Devin's screen recordings have several features that make them useful for review:
* **Annotations** — Text labels appear at key moments in the video, marking what Devin is testing. The video slows down around annotated points so you can see the details.
* **Auto-zoom** — The video automatically zooms into where Devin clicks and interacts, smoothly panning to follow the cursor and easing back out during idle moments.
* **Automatic processing** — Raw recordings are processed to highlight important actions and compress idle time
* **Sent as attachments** — Videos are attached to messages in your session, viewable directly in the Devin webapp or Slack
Recordings are designed to be short and focused — a **quick sanity check** with one primary end-to-end flow that proves the feature works. If you need more exhaustive coverage, use your existing test suites and CI rather than visual recording.
## Skill Suggestions
After testing your app, Devin writes down what it tried and what worked — setup steps, environment configuration, how to start the app — and proposes creating or updating a [Skill](/product-guides/skills) via PR. You can merge the PR as-is or tweak it to refine the instructions. Over time, this means Devin gets better at testing your project — each session's learnings build on the last.
You can also prompt Devin to do this at any time (e.g., "create a skill for how to test this app"). See the [Skills guide](/product-guides/skills) for full details on creating and managing skills.
Here's an example of a testing skill:
```markdown theme={null}
---
name: test-before-pr
description: Run the local dev server and verify pages before opening any PR that touches frontend code.
---
## Setup
1. Install dependencies: `npm install`
2. Start the database: `docker-compose up -d postgres`
3. Run migrations: `npx prisma migrate dev`
4. Start the dev server: `npm run dev`
5. Wait for "Ready on http://localhost:3000"
## Verify
1. Read the git diff to identify which pages changed
2. Open each affected page in the browser
3. Check for: console errors, layout issues, broken links
4. Screenshot each page at desktop (1280px) and mobile (375px) widths
## Before Opening the PR
1. Run `npm run lint` and fix any issues
2. Run `npm test` and confirm all tests pass
3. Include screenshots in the PR description
```
When writing or refining skills, be specific about what to verify:
* "Test the checkout flow: add an item to cart, go to checkout, fill in the form, and verify the order confirmation page shows the correct total"
* "Verify the dark mode toggle works on the settings page — text should be readable and no elements should disappear"
* "Test that the CSV export downloads a file with the correct headers"
* "Test everything"
* "Make sure the app works"
* "Check that nothing is broken"
## Troubleshooting
### Devin didn't offer to test
Testing mode is available on sessions where Devin creates a PR with code changes. If Devin didn't offer, you can always ask directly: "Can you test these changes and record a video?"
### Recording failed
If the recording fails to process, Devin will let you know. Common causes include the app crashing during testing or the video processing timing out. Devin can retry — just ask "Try recording again." Recording files are stored on Devin's machine, and Devin can send them to you at any time if you ask.
### Devin can't access the app
If Devin can't reach your app during testing (e.g., login walls, VPN requirements), it will ask you for help. Provide credentials using [secrets](/product-guides/secrets), use the [Interactive Browser](/work-with-devin/devin-session-tools#interactive-browser) to complete authentication steps manually, or complete [environment configuration](/onboard-devin/environment) to pre-configure access so Devin doesn't run into these issues.
# Analytics
Source: https://docs.devin.ai/desktop/accounts/analytics
View individual user analytics, team analytics, usage patterns, and metrics for your Devin Desktop usage including code completion stats and AI-written code percentage.
## Individuals
User analytics are available for viewing and sharing on your [analytics page](/enterprise/security-access/personal-analytics).
See your completion stats, look into your language breakdown, and unlock achievement badges by using Devin Desktop in your daily workflow.
## Teams
Devin Desktop makes managing your team easy from one dashboard.
You will need team admin privileges in order to view the following team links.
Team leads and managers can also see an aggregate of their team members' usage patterns and analytics, including Percent of Code Written (PCW) by AI, total lines of code written, total tool calls, credit consumption, and more.
## Personal Analytics
Enterprise users can also view their own Devin ACU consumption across every organization from the **My analytics** page. See [Personal Analytics](/enterprise/security-access/personal-analytics) for details.
# Analytics API
Source: https://docs.devin.ai/desktop/accounts/api-reference/analytics-api-introduction
Enterprise analytics API for querying Devin Desktop usage data including autocomplete, chat, command, and Cascade metrics.
## Overview
The Devin Desktop Analytics API enables enterprise customers to programmatically access detailed usage analytics for their teams. Query data from autocomplete, chat, command features, and Cascade with flexible filtering, grouping, and aggregation options.
API data is refreshed every 3 hours
## Common Parameters
Most Analytics API endpoints support these common parameters:
| Parameter | Type | Required | Description |
| ----------------- | ------ | -------- | ------------------------------------------------------------ |
| `service_key` | string | Yes | Your service key for authentication |
| `group_name` | string | No | Filter results to a specific group |
| `start_timestamp` | string | Varies | Start time in RFC 3339 format (e.g., `2023-01-01T00:00:00Z`) |
| `end_timestamp` | string | Varies | End time in RFC 3339 format (e.g., `2023-12-31T23:59:59Z`) |
## Available Endpoints
The Analytics API provides three main endpoints:
1. **[User Page Analytics](/desktop/accounts/api-reference/user-page-analytics)** - Get user activity data from the teams page
2. **[Cascade Analytics](/desktop/accounts/api-reference/cascade-analytics)** - Query Cascade-specific usage metrics
3. **[Custom Analytics](/desktop/accounts/api-reference/custom-analytics)** - Flexible querying with custom selections, filters, and aggregations
# Analytics API v2
Source: https://docs.devin.ai/desktop/accounts/api-reference/analytics-v2-introduction
Next-generation analytics API for querying consumption data with Bearer-token authentication, flexible grouping, and cursor-based pagination.
The v2 APIs are in **alpha** and subject to change at any time.
## Overview
Analytics API v2 is the next generation of the Devin Desktop Analytics API. It exposes consumption
analytics (credits and ACUs) through clean REST endpoints with query-parameter filtering, flexible
grouping, cursor-based pagination, and response caching.
v2 endpoints are currently served under the **`/api/v2alpha`** prefix while the API surface is
finalized. The base URL is `https://server.codeium.com`.
## What's new in v2
The biggest change from [v1](/desktop/accounts/api-reference/analytics-api-introduction) is **authentication**.
| | v1 Analytics API | v2 Analytics API |
| ---------- | ------------------------------------------- | ------------------------------------------------- |
| Transport | `POST` with a JSON request body | `GET` with query parameters |
| Auth | `service_key` field **in the request body** | **`Authorization: Bearer ` header** |
| Permission | Varies per endpoint | **Analytics Read** |
| Pagination | None | Cursor-based (`next_page_cursor` / `page_cursor`) |
| Caching | None | `ETag` + `If-None-Match` (`304 Not Modified`) |
## Authentication
v2 uses **Bearer token** authentication. Pass your service key in the `Authorization` header instead
of in the request body:
```
Authorization: Bearer
```
The service key must have the **Analytics Read** permission.
### Creating a service key
1. Navigate to your [team settings page](https://windsurf.com/team/settings)
2. Go to the "Service Keys" section
3. Create a new service key with the **Analytics Read** permission
4. Use the key as a Bearer token in the `Authorization` header
Keep your service keys secure and never expose them in client-side code or public repositories.
Group-scoped service keys are supported — when a key is scoped to a group, results are automatically
limited to that group.
## Available endpoints
| Endpoint | Description |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| [Get Consumption](/desktop/accounts/api-reference/get-consumption) (`GET /api/v2alpha/analytics/consumption`) | Query credit or ACU consumption with filtering, grouping, granularity, and pagination |
| [Get Active Users](/desktop/accounts/api-reference/get-active-users) (`GET /api/v2alpha/analytics/active-users`) | Count distinct active users, optionally by day/month or per user |
## Billing strategy
Responses adapt to your team's billing strategy, reported in `metadata.billing_strategy`:
* **`CREDITS`** — rows include `prompt_credits` and `flex_credits`
* **`ACU`** — rows include `billed_acus`
The `message_count` field is always returned regardless of strategy.
## Pagination
List responses are paginated. When more data is available, the response includes a
`pagination.next_page_cursor`; pass it back as the `page_cursor` query parameter to fetch the next
page. Cursors expire after 24 hours.
## Caching
Responses include an `ETag` header. Send it back in the `If-None-Match` header on subsequent requests
to receive a `304 Not Modified` when the data is unchanged.
## Rate limits
These endpoints are **not** intended for real-time usage monitoring. Data is hourly-aggregated and
the rate limit is low (10 requests per hour per team). Use them for periodic reporting and bulk
export, not live dashboards or per-request tracking.
v2 endpoints are rate-limited to **10 requests per hour per team**. Exceeding the limit returns
`429 Too Many Requests` with a `Retry-After` header.
Paginating an earlier query (following a `next_page_cursor`) does **not** count against the rate
limit — only the initial query for each report does. The low limit reflects that these endpoints are
for periodic reporting, not real-time monitoring.
# API Reference
Source: https://docs.devin.ai/desktop/accounts/api-reference/api-introduction
Enterprise API for querying Devin Desktop usage data and managing configurations with service key authentication.
## Overview
The Devin Desktop API enables enterprise customers to programmatically access detailed usage analytics and manage usage configurations for their teams.
The API is available for Enterprise plans only
## Base URL
All API requests should be made to:
```
https://server.codeium.com/api/v1/
```
## Authentication
The Devin Desktop API uses service keys for authentication. Service keys must be included in the request body of all API calls.
### Creating a Service Key
1. Navigate to your [team settings page](https://windsurf.com/team/settings)
2. Go to the "Service Keys" section
3. Create a new service key with appropriate permissions
4. Copy the generated service key for use in API requests
### Required Permissions
Different API endpoints require different permissions. Refer to the individual endpoint documentation for the specific permission required:
| Endpoint | Required Permission |
| ------------------------------------------------------------------------------------------------------------ | ------------------- |
| [Custom Analytics](/desktop/accounts/api-reference/custom-analytics) (`/Analytics`) | Analytics Read |
| [User Page Analytics](/desktop/accounts/api-reference/user-page-analytics) (`/UserPageAnalytics`) | Teams Read-Only |
| [Cascade Analytics](/desktop/accounts/api-reference/cascade-analytics) (`/CascadeAnalytics`) | Teams Read-Only |
| [Set Usage Configuration](/desktop/accounts/api-reference/usage-config) (`/UsageConfig`) | Billing Write |
| [Get Usage Configuration](/desktop/accounts/api-reference/get-usage-config) (`/GetUsageConfig`) | Billing Read |
| [Get Team Credit Balance](/desktop/accounts/api-reference/get-team-credit-balance) (`/GetTeamCreditBalance`) | Billing Read |
### Using Service Keys
Include your service key in the request body of all API calls:
```json theme={null}
{
"service_key": "your_service_key_here",
// ... other parameters
}
```
Keep your service keys secure and never expose them in client-side code or public repositories
## Rate Limits
API requests are subject to rate limiting to ensure service stability. If you exceed the rate limit, you'll receive a `429 Too Many Requests` response.
## Support
For API support and questions, please contact [Devin Desktop Support](https://windsurf.com/support).
# Get Cascade Analytics
Source: https://docs.devin.ai/desktop/accounts/api-reference/cascade-analytics
POST https://server.codeium.com/api/v1/CascadeAnalytics
Query Cascade-specific usage metrics including lines suggested/accepted, model usage, credit consumption, and tool usage statistics.
## Overview
Retrieve Cascade-specific analytics data including lines suggested/accepted, model usage, credit consumption, and tool usage statistics.
## Request
Your service key with "Teams Read-only" permissions
Filter results to users in a specific group. Cannot be used with `emails` parameter.
Start time in RFC 3339 format (e.g., `2023-01-01T00:00:00Z`)
End time in RFC 3339 format (e.g., `2023-12-31T23:59:59Z`)
Array of email addresses to filter results. Cannot be used with `group_name` parameter.
Filter by IDE type. Available options:
* `"editor"` - Devin Desktop Editor
* `"jetbrains"` - JetBrains Plugin
* `"cli"` - Devin CLI
If omitted, returns data for all IDEs.
When filtering by Devin CLI (`"cli"`), only `cascade_runs` returns data. The `cascade_lines` and `cascade_tool_usage` data sources are not supported for Devin CLI and will return empty results.
Array of data source queries to execute. Each object should contain one of the supported data sources.
## Data Sources
### cascade\_lines
Query for daily Cascade lines suggested and accepted.
```json theme={null}
{
"cascade_lines": {}
}
```
**Response Fields:**
* `day` - Date in RFC 3339 format
* `linesSuggested` - Number of lines suggested
* `linesAccepted` - Number of lines accepted
### cascade\_runs
Query for model usage, credit consumption, and mode data.
```json theme={null}
{
"cascade_runs": {}
}
```
**Response Fields:**
* `day` - Date in RFC 3339 format
* `model` - Model name used
* `mode` - Cascade mode (see modes below)
* `messagesSent` - Number of messages sent
* `cascadeId` - Unique conversation ID
* `promptsUsed` - Credits consumed (in cents)
**Cascade Modes:**
* `CONVERSATIONAL_PLANNER_MODE_DEFAULT` - Write mode
* `CONVERSATIONAL_PLANNER_MODE_READ_ONLY` - Read mode
* `CONVERSATIONAL_PLANNER_MODE_NO_TOOL` - Legacy mode
* `UNKNOWN` - Unknown mode
### cascade\_tool\_usage
Query for tool usage statistics (aggregate counts).
```json theme={null}
{
"cascade_tool_usage": {}
}
```
**Response Fields:**
* `tool` - Tool identifier (see tool mappings below)
* `count` - Number of times tool was used
## Tool Usage Mappings
| Tool Identifier | Display Name |
| ------------------- | ----------------- |
| `CODE_ACTION` | Code Edit |
| `VIEW_FILE` | View File |
| `RUN_COMMAND` | Run Command |
| `FIND` | Find tool |
| `GREP_SEARCH` | Grep Search |
| `VIEW_FILE_OUTLINE` | View File Outline |
| `MQUERY` | Riptide |
| `WORKFLOWS_USED` | Workflows Used |
| `LIST_DIRECTORY` | List Directory |
| `MCP_TOOL` | MCP Tool |
| `PROPOSE_CODE` | Propose Code |
| `SEARCH_WEB` | Search Web |
| `MEMORY` | Memory |
| `PROXY_WEB_SERVER` | Browser Preview |
| `DEPLOY_WEB_APP` | Deploy Web App |
## Example Request
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"group_name": "engineering_team",
"start_timestamp": "2025-01-01T00:00:00Z",
"end_timestamp": "2025-01-02T00:00:00Z",
"emails": ["user1@cognition.ai", "user2@cognition.ai"],
"ide_types": ["editor"],
"query_requests": [
{
"cascade_lines": {}
},
{
"cascade_runs": {}
},
{
"cascade_tool_usage": {}
}
]
}' \
https://server.codeium.com/api/v1/CascadeAnalytics
```
## Response
Array of query results, one for each query request
Array of daily line statistics
Date in RFC 3339 format
Number of lines suggested on this day
Number of lines accepted on this day
Array of model usage statistics
Date in RFC 3339 format
Model name used for the run
Cascade mode identifier
Number of messages sent
Unique conversation identifier
Credits consumed in cents (e.g., "100" = 1 credit)
Array of tool usage statistics
Tool identifier
Number of times tool was used
### Example Response
```json theme={null}
{
"queryResults": [
{
"cascadeLines": {
"cascadeLines": [
{
"day": "2025-05-01T00:00:00Z",
"linesSuggested": "206",
"linesAccepted": "157"
},
{
"day": "2025-05-02T00:00:00Z",
"linesSuggested": "16"
}
]
}
},
{
"cascadeRuns": {
"cascadeRuns": [
{
"day": "2025-05-01T00:00:00Z",
"model": "Claude 3.7 Sonnet (Thinking)",
"mode": "CONVERSATIONAL_PLANNER_MODE_DEFAULT",
"messagesSent": "1",
"cascadeId": "0d35c1f7-0a85-41d0-ac96-a04cd2d64444"
}
]
}
},
{
"cascadeToolUsage": {
"cascadeToolUsage": [
{
"tool": "CODE_ACTION",
"count": "15"
},
{
"tool": "LIST_DIRECTORY",
"count": "20"
}
]
}
}
]
}
```
## Notes
* The API returns raw data which may contain "UNKNOWN" values
* For metrics analysis, aggregate by specific fields of interest (e.g., sum `promptsUsed` for usage patterns)
* Mode and prompt data may be split across multiple entries
* Credit consumption (`promptsUsed`) is returned in cents (100 = 1 credit)
# Custom Analytics Query
Source: https://docs.devin.ai/desktop/accounts/api-reference/custom-analytics
POST https://server.codeium.com/api/v1/Analytics
Flexible analytics querying with custom selections, filters, and aggregations for autocomplete, chat, command, and PCW data.
## Overview
The Custom Analytics API provides flexible querying capabilities for autocomplete, chat, and command data with customizable selections, filters, aggregations, and orderings.
## Request
Your service key with "Analytics Read" permissions
Filter results to users in a specific group (optional)
Array of query request objects defining the data to retrieve
Data source to query. Options:
* `QUERY_DATA_SOURCE_USER_DATA` - Autocomplete data
* `QUERY_DATA_SOURCE_CHAT_DATA` - Chat data
* `QUERY_DATA_SOURCE_COMMAND_DATA` - Command data
* `QUERY_DATA_SOURCE_PCW_DATA` - Percent Code Written data
Array of field selections to retrieve
Field name to select (see Available Fields section)
Alias for the field. If not specified, defaults to `{aggregation_function}_{field_name}` (lowercase)
Aggregation function to apply:
* `QUERY_AGGREGATION_UNSPECIFIED` (default)
* `QUERY_AGGREGATION_COUNT`
* `QUERY_AGGREGATION_SUM`
* `QUERY_AGGREGATION_AVG`
* `QUERY_AGGREGATION_MAX`
* `QUERY_AGGREGATION_MIN`
Array of filters to apply
Field name to filter on
Filter operation:
* `QUERY_FILTER_EQUAL`
* `QUERY_FILTER_NOT_EQUAL`
* `QUERY_FILTER_GREATER_THAN`
* `QUERY_FILTER_LESS_THAN`
* `QUERY_FILTER_GE` (greater than or equal)
* `QUERY_FILTER_LE` (less than or equal)
Value to compare against
Array of aggregations to group by
Field name to group by
Alias for the aggregation field
## Query Request Structure
Each query request object contains:
* **data\_source** (required): Data source to query
* **selections** (required): Array of field selections to retrieve
* **filters** (optional): Array of filters to apply
* **aggregations** (optional): Array of aggregations to group by
## Selections
Selections define which fields to retrieve and how to aggregate them.
* **field** (required): Field name to select
* **name** (optional): Alias for the field
* **aggregation\_function** (optional): Aggregation function to apply
### Selection Example
```json theme={null}
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
```
## Filters
Filters narrow down data to elements meeting specific criteria.
* **name** (required): Field name to filter on
* **filter** (required): Filter operation
* **value** (required): Value to compare against
### Filter Example
```json theme={null}
{
"name": "language",
"filter": "QUERY_FILTER_EQUAL",
"value": "PYTHON"
}
```
## Aggregations
Aggregations group data by specified criteria.
* **field** (required): Field name to group by
* **name** (required): Alias for the aggregation field
### Aggregation Example
```json theme={null}
{
"field": "ide",
"name": "ide_type"
}
```
## Available Fields
### User Data
All User Data is aggregated per user, per hour.
| Field Name | Description | Valid Aggregations |
| -------------------------- | --------------------------------------------------------- | ------------------ |
| `api_key` | Hash of user API key | UNSPECIFIED, COUNT |
| `date` | UTC date of autocompletion | UNSPECIFIED, COUNT |
| `date UTC-x` | Date with timezone offset (e.g., "date UTC-8" for PST) | UNSPECIFIED, COUNT |
| `hour` | UTC hour of autocompletion | UNSPECIFIED, COUNT |
| `language` | Programming language | UNSPECIFIED, COUNT |
| `ide` | IDE being used | UNSPECIFIED, COUNT |
| `version` | Extension/plugin (language-server) version, e.g. `1.48.x` | UNSPECIFIED, COUNT |
| `num_acceptances` | Number of autocomplete acceptances | SUM, MAX, MIN, AVG |
| `num_lines_accepted` | Lines of code accepted | SUM, MAX, MIN, AVG |
| `num_bytes_accepted` | Bytes accepted | SUM, MAX, MIN, AVG |
| `distinct_users` | Distinct users | UNSPECIFIED, COUNT |
| `distinct_developer_days` | Distinct (user, day) tuples | UNSPECIFIED, COUNT |
| `distinct_developer_hours` | Distinct (user, hour) tuples | UNSPECIFIED, COUNT |
### Chat Data
Chat data is separate from Cascade data and represents usage of our legacy, non-agentic plugins
All Chat Data represents chat model responses, not user questions.
| Field Name | Description | Valid Aggregations |
| ------------------------- | --------------------------------------------------------- | ------------------ |
| `api_key` | Hash of user API key | UNSPECIFIED, COUNT |
| `model_id` | Chat model ID | UNSPECIFIED, COUNT |
| `date` | UTC date of chat response | UNSPECIFIED, COUNT |
| `date UTC-x` | Date with timezone offset | UNSPECIFIED, COUNT |
| `ide` | IDE being used | UNSPECIFIED, COUNT |
| `version` | Extension/plugin (language-server) version, e.g. `1.48.x` | UNSPECIFIED, COUNT |
| `latest_intent_type` | Chat intent type (see Intent Types below) | UNSPECIFIED, COUNT |
| `num_chats_received` | Number of chat messages received | SUM, MAX, MIN, AVG |
| `chat_accepted` | Whether chat was accepted (thumbs up) | SUM, COUNT |
| `chat_inserted_at_cursor` | Whether "Insert" button was clicked | SUM, COUNT |
| `chat_applied` | Whether "Apply Diff" button was clicked | SUM, COUNT |
| `chat_loc_used` | Lines of code used from chat | SUM, MAX, MIN, AVG |
#### Chat Intent Types
* `CHAT_INTENT_GENERIC` - Regular chat
* `CHAT_INTENT_FUNCTION_EXPLAIN` - Function explanation code lens
* `CHAT_INTENT_FUNCTION_DOCSTRING` - Function docstring code lens
* `CHAT_INTENT_FUNCTION_REFACTOR` - Function refactor code lens
* `CHAT_INTENT_CODE_BLOCK_EXPLAIN` - Code block explanation code lens
* `CHAT_INTENT_CODE_BLOCK_REFACTOR` - Code block refactor code lens
* `CHAT_INTENT_PROBLEM_EXPLAIN` - Problem explanation code lens
* `CHAT_INTENT_FUNCTION_UNIT_TESTS` - Function unit tests code lens
### Command Data
Command Data includes all commands, including declined ones. Use the `accepted` field to filter for accepted commands only.
| Field Name | Description | Valid Aggregations |
| ----------------- | --------------------------------------------------------- | ------------------ |
| `api_key` | Hash of user API key | UNSPECIFIED, COUNT |
| `date` | UTC date of command | UNSPECIFIED, COUNT |
| `timestamp` | UTC timestamp of command | UNSPECIFIED, COUNT |
| `language` | Programming language | UNSPECIFIED, COUNT |
| `ide` | IDE being used | UNSPECIFIED, COUNT |
| `version` | Extension/plugin (language-server) version, e.g. `1.48.x` | UNSPECIFIED, COUNT |
| `command_source` | Command trigger source (see Command Sources below) | UNSPECIFIED, COUNT |
| `provider_source` | Generation or edit mode | UNSPECIFIED, COUNT |
| `lines_added` | Lines of code added | SUM, MAX, MIN, AVG |
| `lines_removed` | Lines of code removed | SUM, MAX, MIN, AVG |
| `bytes_added` | Bytes added | SUM, MAX, MIN, AVG |
| `bytes_removed` | Bytes removed | SUM, MAX, MIN, AVG |
| `selection_lines` | Lines selected (zero for generations) | SUM, MAX, MIN, AVG |
| `selection_bytes` | Bytes selected (zero for generations) | SUM, MAX, MIN, AVG |
| `accepted` | Whether command was accepted | SUM, COUNT |
#### Command Sources
* `COMMAND_REQUEST_SOURCE_LINE_HINT_CODE_LENS`
* `COMMAND_REQUEST_SOURCE_DEFAULT` - Typical command usage
* `COMMAND_REQUEST_SOURCE_RIGHT_CLICK_REFACTOR`
* `COMMAND_REQUEST_SOURCE_FUNCTION_CODE_LENS`
* `COMMAND_REQUEST_SOURCE_FOLLOWUP`
* `COMMAND_REQUEST_SOURCE_CLASS_CODE_LENS`
* `COMMAND_REQUEST_SOURCE_PLAN`
* `COMMAND_REQUEST_SOURCE_SELECTION_HINT_CODE_LENS`
#### Provider Sources
* `PROVIDER_SOURCE_COMMAND_GENERATE` - Generation mode
* `PROVIDER_SOURCE_COMMAND_EDIT` - Edit mode
### PCW Data
Percent Code Written data with separate tracking for autocomplete and command contributions.
| Field Name | Description | Valid Aggregations |
| ------------------------------- | ------------------------------------------------------------- | ------------------ |
| `percent_code_written` | Calculated as codeium\_bytes / (codeium\_bytes + user\_bytes) | UNSPECIFIED |
| `codeium_bytes` | Total Codeium-generated bytes | UNSPECIFIED |
| `user_bytes` | Total user-written bytes | UNSPECIFIED |
| `total_bytes` | codeium\_bytes + user\_bytes | UNSPECIFIED |
| `codeium_bytes_by_autocomplete` | Codeium bytes from autocomplete | UNSPECIFIED |
| `codeium_bytes_by_command` | Codeium bytes from command | UNSPECIFIED |
#### PCW Filters
| Field Name | Description | Examples |
| ---------- | --------------------------------------------------------- | ----------------- |
| `language` | Programming language | KOTLIN, GO, JAVA |
| `ide` | IDE being used | jetbrains, vscode |
| `version` | Extension/plugin (language-server) version, e.g. `1.48.x` | 1.28.0, 130.0 |
For date filtering in PCW queries, use `start_timestamp` and `end_timestamp` in the main request body.
## Example Requests
### User Data Example
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"name": "total_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"name": "total_lines",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "date",
"filter": "QUERY_FILTER_GE",
"value": "2024-01-01"
},
{
"name": "date",
"filter": "QUERY_FILTER_LE",
"value": "2024-02-01"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
```
### Chat Data Example
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_CHAT_DATA",
"selections": [
{
"field": "chat_loc_used",
"name": "lines_used",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "latest_intent_type",
"filter": "QUERY_FILTER_EQUAL",
"value": "CHAT_INTENT_FUNCTION_DOCSTRING"
}
],
"aggregations": [
{
"field": "ide",
"name": "ide_type"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
```
### Command Data Example
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_COMMAND_DATA",
"selections": [
{
"field": "lines_added",
"name": "total_lines_added",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "lines_removed",
"name": "total_lines_removed",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
],
"filters": [
{
"name": "provider_source",
"filter": "QUERY_FILTER_EQUAL",
"value": "PROVIDER_SOURCE_COMMAND_EDIT"
},
{
"name": "accepted",
"filter": "QUERY_FILTER_EQUAL",
"value": "true"
}
],
"aggregations": [
{
"field": "language",
"name": "programming_language"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
```
### PCW Data Example
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-22T00:00:00Z",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_PCW_DATA",
"selections": [
{
"field": "percent_code_written",
"name": "pcw"
},
{
"field": "codeium_bytes",
"name": "ai_bytes"
},
{
"field": "total_bytes",
"name": "total"
},
{
"field": "codeium_bytes_by_autocomplete",
"name": "autocomplete_bytes"
},
{
"field": "codeium_bytes_by_command",
"name": "command_bytes"
}
],
"filters": [
{
"filter": "QUERY_FILTER_EQUAL",
"name": "language",
"value": "GO"
}
]
}
]
}' \
https://server.codeium.com/api/v1/Analytics
```
## Response
Array of query results, one for each query request
Array of result items
Object containing the selected fields and their values
### Example Responses
#### User Data Response
```json theme={null}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"total_acceptances": "125",
"total_lines": "863"
}
}
]
}
]
}
```
#### Chat Data Response
```json theme={null}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"lines_used": "74",
"ide_type": "jetbrains"
}
},
{
"item": {
"lines_used": "41",
"ide_type": "vscode"
}
}
]
}
]
}
```
#### Command Data Response
```json theme={null}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"programming_language": "PYTHON",
"total_lines_added": "21",
"total_lines_removed": "5"
}
},
{
"item": {
"programming_language": "GO",
"total_lines_added": "31",
"total_lines_removed": "27"
}
}
]
}
]
}
```
#### PCW Data Response
```json theme={null}
{
"queryResults": [
{
"responseItems": [
{
"item": {
"ai_bytes": "6018",
"autocomplete_bytes": "4593",
"command_bytes": "1425",
"pcw": "0.61",
"total": "9900"
}
}
]
}
]
}
```
## Important Notes
* PCW (Percent Code Written) has high variance within single days or users - aggregate over weeks for better insights
* All selection fields must either have aggregation functions or none should (cannot mix)
* Fields with "distinct\_\*" pattern cannot be used in aggregations
* Field aliases must be unique across all selections and aggregations
* If no aggregation function is specified, it defaults to UNSPECIFIED
# Error Handling
Source: https://docs.devin.ai/desktop/accounts/api-reference/errors
Common error messages and debugging tips for the Analytics API including authentication, query structure, and rate limiting errors.
## Overview
The Analytics API returns detailed error messages to help debug invalid queries. This page covers common error scenarios and how to resolve them.
## Error Response Format
When an error occurs, the API returns an error response with a descriptive message:
```json theme={null}
{
"error": "Error message describing what went wrong"
}
```
## Common Errors
### Authentication Errors
**Error:** `Invalid service key`
**Cause:** The provided service key is not valid or has been revoked.
**Solution:**
* Verify your service key is correct
* Check that the service key hasn't been revoked
* Generate a new service key if needed
**Error:** `Insufficient permissions`
**Cause:** The service key doesn't have the required permissions for the endpoint you're calling.
**Solution:**
* Update the service key permissions in team settings
* Refer to the [API introduction](/desktop/accounts/api-reference/api-introduction#required-permissions) for the specific permission required by each endpoint
### Query Structure Errors
**Error:** `at least one field or aggregation is required`
**Cause:** The query request doesn't contain any selections or aggregations.
**Solution:** Add at least one selection to your query request:
```json theme={null}
"selections": [
{
"field": "num_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
]
```
**Error:** `invalid query table: QUERY_DATA_SOURCE_UNSPECIFIED`
**Cause:** There's likely a typo in the `data_source` field.
**Solution:** Double-check the spelling of your data source. Valid options:
* `QUERY_DATA_SOURCE_USER_DATA`
* `QUERY_DATA_SOURCE_CHAT_DATA`
* `QUERY_DATA_SOURCE_COMMAND_DATA`
* `QUERY_DATA_SOURCE_PCW_DATA`
**Error:** `all selection fields should have an aggregation function, or none of them should`
**Cause:** Some selections have aggregation functions while others don't.
**Solution:** Either add aggregation functions to all selections or remove them from all:
**Invalid:**
```json theme={null}
"selections": [
{
"field": "num_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"aggregation_function": "QUERY_AGGREGATION_UNSPECIFIED"
}
]
```
**Valid:**
```json theme={null}
"selections": [
{
"field": "num_acceptances",
"aggregation_function": "QUERY_AGGREGATION_SUM"
},
{
"field": "num_lines_accepted",
"aggregation_function": "QUERY_AGGREGATION_SUM"
}
]
```
### Field and Aggregation Errors
**Error:** `invalid aggregation function for string type field ide: QUERY_AGGREGATION_SUM`
**Cause:** The aggregation function is not supported for the specified field type.
**Solution:** Check the [Available Fields](/desktop/accounts/api-reference/custom-analytics#available-fields) section to see which aggregation functions are valid for each field. String fields typically only support `COUNT` and `UNSPECIFIED`.
**Error:** `tried to aggregate on a distinct field: distinct_developer_days. Consider aggregating on the non-distinct fields instead: [api_key date]`
**Cause:** Fields with the "distinct\_\*" pattern cannot be used in the aggregations section.
**Solution:** Use the suggested alternative fields for aggregation:
**Invalid:**
```json theme={null}
"aggregations": [
{
"field": "distinct_developer_days",
"name": "distinct_developer_days"
}
]
```
**Valid:**
```json theme={null}
"aggregations": [
{
"field": "api_key",
"name": "api_key"
},
{
"field": "date",
"name": "date"
}
]
```
**Error:** `duplicate field alias for selection/aggregation: num_acceptances`
**Cause:** Multiple selections or aggregations have the same name.
**Solution:** Ensure all field aliases are unique. Remember that if no name is specified, it defaults to `{aggregation_function}_{field_name}`.
### Data Filtering Errors
**Error:** `invalid group name: GroupName`
**Cause:** The specified group name doesn't exist in your organization.
**Solution:**
* Double-check the group name spelling
* Verify the group exists in your team settings
* Use the exact group name as it appears in your team dashboard
**Error:** `invalid timestamp format`
**Cause:** The timestamp is not in the correct RFC 3339 format.
**Solution:** Use the correct timestamp format:
```
2023-01-01T00:00:00Z
```
**Valid examples:**
* `2024-01-01T00:00:00Z`
* `2024-12-31T23:59:59Z`
* `2024-06-15T12:30:45Z`
**Error:** `Cannot use both group_name and emails parameters`
**Cause:** Both `group_name` and `emails` parameters were provided in a Cascade Analytics request.
**Solution:** Use either `group_name` OR `emails`, but not both:
**Invalid:**
```json theme={null}
{
"group_name": "engineering",
"emails": ["user@example.com"]
}
```
**Valid:**
```json theme={null}
{
"group_name": "engineering"
}
```
**Or:**
```json theme={null}
{
"emails": ["user@example.com", "user2@example.com"]
}
```
## Rate Limiting
**Error:** `429 Too Many Requests`
**Cause:** You've exceeded the API rate limit.
**Solution:**
* Wait before making additional requests
* Implement exponential backoff in your client
* Consider batching multiple queries into single requests where possible
* Contact support if you need higher rate limits
## Debugging Tips
### 1. Start Simple
Begin with basic queries and gradually add complexity:
```json theme={null}
{
"service_key": "your_key",
"query_requests": [
{
"data_source": "QUERY_DATA_SOURCE_USER_DATA",
"selections": [
{
"field": "num_acceptances",
"aggregation_function": "QUERY_AGGREGATION_COUNT"
}
]
}
]
}
```
### 2. Validate Field Names
Double-check field names against the [Available Fields](/desktop/accounts/api-reference/custom-analytics#available-fields) documentation.
### 3. Check Aggregation Compatibility
Ensure your aggregation functions are compatible with the field types you're selecting.
### 4. Test Filters Separately
If your query isn't returning expected results, try removing filters one by one to isolate the issue.
### 5. Use Proper JSON Formatting
Ensure your JSON is properly formatted and all strings are quoted correctly.
## Getting Help
If you continue to experience issues:
1. **Check the error message carefully** - Most errors include specific guidance on how to fix the issue
2. **Review the examples** - Compare your query structure to the working examples in the documentation
3. **Contact support** - Reach out to [Devin Desktop Support](https://windsurf.com/support) with your specific error message and query
## API Version Notes
Error handling and validation have been improved in API version 1.10.0 and later. If you're using an older version, consider updating to get more detailed error messages.
# Get Active Users
Source: https://docs.devin.ai/desktop/accounts/api-reference/get-active-users
desktop/accounts/api-reference/analytics-v2-openapi.yaml GET /api/v2alpha/analytics/active-users
Query the number of distinct active users for your team, with optional time granularity and per-user grouping.
This is a **v2 endpoint** that uses Bearer token authentication and query parameters, unlike the v1 Analytics API which uses service keys in the request body. See [Authentication](#authentication) below.
This endpoint is **not** intended for real-time usage monitoring. Data is hourly-aggregated and the
rate limit is low (10 requests per hour per team). Use it for periodic reporting and bulk export.
## Authentication
This endpoint uses **Bearer token** authentication. Include your service key in the `Authorization` header:
```
Authorization: Bearer
```
The service key must have the **Analytics Read** permission. Create one in your [team settings](https://windsurf.com/team/settings) under "Service Keys".
## What counts as an active user
A user is counted as **active** for a given time bucket if they have any billing event in it. The
`active_users` field reports the count of distinct users.
Active user counts include usage from **both the Devin CLI and Devin Desktop**. A user who is
active in either (or both) is counted, and they are only counted once per time bucket.
## Grouping and Granularity
Use `granularity` and `group_by` to control the shape of returned data:
* **No granularity or grouping** — returns a single row with the total active user count for the entire date range
* **`granularity=daily`** — each row includes a `timestamp` in `YYYY-MM-DD` format (daily active users)
* **`granularity=monthly`** — each row includes a `timestamp` in `YYYY-MM` format (monthly active users)
* **`group_by=user`** — returns one row per active user with a `user_id`; each row's `active_users` is `1`
Unlike [Get Consumption](/desktop/accounts/api-reference/get-consumption), the active users endpoint
only supports `user` for `group_by`. Other dimensions (`model_uid`, `ide`) are not valid here.
## Pagination
Results are paginated with a default page size of 1,000 rows (max 10,000). When more results are available,
the response includes a `next_page_cursor` in the `pagination` object. Pass it as the `page_cursor` query
parameter to fetch the next page.
Page cursors expire after 24 hours. A follow-up page request does not count as a new query against your rate limit.
## Caching
Responses include an `ETag` header. To avoid redundant data transfer, include the `If-None-Match` header
with the previous `ETag` value — the server will return `304 Not Modified` if the data has not changed.
## Rate Limits
This endpoint is rate-limited to **10 requests per hour** per team. If you exceed this limit, the
server returns `429 Too Many Requests` with a `Retry-After` header.
Paginating an earlier query (following a `next_page_cursor`) does **not** count against this limit —
only the initial query for each report does. The low limit reflects that this endpoint is for
periodic reporting, not real-time usage monitoring.
# Get Consumption
Source: https://docs.devin.ai/desktop/accounts/api-reference/get-consumption
desktop/accounts/api-reference/analytics-v2-openapi.yaml GET /api/v2alpha/analytics/consumption
Query credit or ACU consumption analytics with flexible filtering, grouping, and pagination.
This is a **v2 endpoint** that uses Bearer token authentication and query parameters, unlike the v1 Analytics API which uses service keys in the request body. See [Authentication](#authentication) below.
This endpoint is **not** intended for real-time usage monitoring. Data is hourly-aggregated and the
rate limit is low (10 requests per hour per team). Use it for periodic reporting and bulk export.
## Authentication
This endpoint uses **Bearer token** authentication. Include your service key in the `Authorization` header:
```
Authorization: Bearer
```
The service key must have the **Analytics Read** permission. Create one in your [team settings](https://windsurf.com/team/settings) under "Service Keys".
## Billing Strategy
The response shape depends on your team's billing strategy:
| Strategy | Populated fields | Description |
| --------- | -------------------------------- | ----------------------------------- |
| `CREDITS` | `prompt_credits`, `flex_credits` | Standard Enterprise SaaS teams |
| `ACU` | `billed_acus` | Teams billed by Agent Compute Units |
The `message_count` field (inside `consumption`) is always populated regardless of billing strategy.
## Grouping and Granularity
Use `granularity` and `group_by` to control the shape of returned data:
* **No granularity or grouping** — returns a single aggregated row for the entire date range
* **`granularity=daily`** — each row includes a `timestamp` in `YYYY-MM-DD` format
* **`granularity=monthly`** — each row includes a `timestamp` in `YYYY-MM` format
* **`group_by=user`** — each row includes a `user_id` and `user_email`
* **`group_by=user,model_uid`** — each row includes `user_id`, `user_email`, and `model_uid`
* **`group_by=ide`** — each row includes an `ide`
* **`group_by=ide,ide_version`** — each row includes `ide` and `ide_version` (grouping by `ide_version` requires `ide` to also be included)
## Pagination
Results are paginated with a default page size of 1,000 rows (max 10,000). When more results are available,
the response includes a `next_page_cursor` in the `pagination` object. Pass it as the `page_cursor` query
parameter to fetch the next page.
Page cursors expire after 24 hours. A follow-up page request does not count as a new query against your rate limit.
## Caching
Responses include an `ETag` header. To avoid redundant data transfer, include the `If-None-Match` header
with the previous `ETag` value — the server will return `304 Not Modified` if the data has not changed.
## Rate Limits
This endpoint is rate-limited to **10 requests per hour** per team. If you exceed this limit, the
server returns `429 Too Many Requests` with a `Retry-After` header.
Paginating an earlier query (following a `next_page_cursor`) does **not** count against this limit —
only the initial query for each report does. The low limit reflects that this endpoint is for
periodic reporting, not real-time usage monitoring.
# Get Team Credit Balance
Source: https://docs.devin.ai/desktop/accounts/api-reference/get-team-credit-balance
POST https://server.codeium.com/api/v1/GetTeamCreditBalance
Retrieve the current credit balance for your team, including prompt credits per seat, add-on credits, and billing cycle information.
## Overview
Retrieve the current credit balance information for your team. This includes prompt credits allocated per seat, the number of seats, add-on credit usage, and billing cycle dates.
**This endpoint only reflects the current billing cycle.** It does not return historical usage from previous cycles.
In particular, `addOnCreditsAvailable` is **not** a lifetime total — it is recomputed at the start of every billing cycle based on what was consumed in the previous cycle, so the value you see will change month over month. If your team used add-on credits last cycle, `addOnCreditsAvailable` at the start of this cycle will be lower than the amount you originally purchased.
## Request
Your service key with "Billing Read" permissions
### Example Request
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here"
}' \
https://server.codeium.com/api/v1/GetTeamCreditBalance
```
## Response
Number of prompt credits allocated per seat for the current billing cycle
Number of seats on the team
Add-on credits available to the team for the **current billing cycle only**. This value is recomputed at the start of each billing cycle based on usage from the previous cycle, so it changes month over month and is not a lifetime total of purchased add-on credits.
Add-on credits consumed so far in the **current billing cycle only**. This counter resets at the start of each new cycle and does not include usage from previous cycles.
Start of the current billing cycle (ISO 8601 timestamp)
End of the current billing cycle (ISO 8601 timestamp)
### Example Response
```json theme={null}
{
"promptCreditsPerSeat": 500,
"numSeats": 50,
"addOnCreditsAvailable": 10000,
"addOnCreditsUsed": 3500,
"billingCycleStart": "2026-01-01T00:00:00Z",
"billingCycleEnd": "2026-02-01T00:00:00Z"
}
```
## Error Responses
Common error scenarios:
* Invalid service key or insufficient permissions
* Feature not available for your plan (requires enterprise tier)
* Rate limit exceeded
# Get Usage Configuration
Source: https://docs.devin.ai/desktop/accounts/api-reference/get-usage-config
POST https://server.codeium.com/api/v1/GetUsageConfig
Retrieve per-user add-on credit cap configuration, queried by team, group, or individual user scope for enterprise billing management.
## Overview
Retrieve the current per-user add-on credit cap configuration for your organization. Caps are always per-user. When you query by team or group scope, the response returns the per-user cap that has been applied to users within that team or group.
## Request
Your service key with "Billing Read" permissions
### Scope Configuration (Choose One)
Set to `true` to retrieve the per-user cap applied to all users on the team
Retrieve the per-user cap applied to all users in a specific group by providing the group ID
Retrieve the configuration for a specific user by providing their email address
You must provide one of `team_level`, `group_id`, or `user_email` to define the scope.
### Example Request - Get Per-User Cap for All Users on Team
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"team_level": true
}' \
https://server.codeium.com/api/v1/GetUsageConfig
```
### Example Request - Get Per-User Cap for All Users in a Group
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"group_id": "engineering_team"
}' \
https://server.codeium.com/api/v1/GetUsageConfig
```
### Example Request - Get User Configuration
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"user_email": "user@example.com"
}' \
https://server.codeium.com/api/v1/GetUsageConfig
```
## Response
The configured add-on credit cap value. If this field is not present in the response, there is no cap configured at the requested scope level.
### Example Response - With Cap Configured
```json theme={null}
{
"addOnCreditCap": 10000
}
```
### Example Response - No Cap Configured
```json theme={null}
{}
```
## Error Responses
Common error scenarios:
* Invalid service key or insufficient permissions
* Multiple scope parameters provided
* No scope parameter provided
* Invalid group ID or user email
* Rate limit exceeded
# Set Usage Configuration
Source: https://docs.devin.ai/desktop/accounts/api-reference/usage-config
POST https://server.codeium.com/api/v1/UsageConfig
Set or clear per-user add-on credit caps, with the ability to apply them across a team, group, or individual user for enterprise billing management.
## Overview
Set or clear per-user usage caps on add-on credits for your organization. Caps are always applied on a per-user basis. When you specify a team or group scope, the cap is applied individually to each user within that team or group—it does not set a shared cap for the entire team or group.
## Request
Your service key with "Billing Write" permissions
### Credit Cap Configuration (Choose One)
Set to `true` to clear the existing add-on credit cap
Set a new add-on credit cap (integer value)
You must provide either `clear_add_on_credit_cap` or `set_add_on_credit_cap`, but not both.
### Scope Configuration (Choose One)
Set to `true` to apply the per-user cap to every user on the team
Apply the per-user cap to every user in a specific group by providing the group ID
Apply the configuration to a specific user by providing their email address
You must provide one of `team_level`, `group_id`, or `user_email` to define the scope.
### Example Request - Set Per-User Credit Cap for All Users on Team
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"set_add_on_credit_cap": 10000,
"team_level": true
}' \
https://server.codeium.com/api/v1/UsageConfig
```
### Example Request - Set Per-User Credit Cap for All Users in a Group
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"set_add_on_credit_cap": 5000,
"group_id": "engineering_team"
}' \
https://server.codeium.com/api/v1/UsageConfig
```
### Example Request - Set Credit Cap for User
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"set_add_on_credit_cap": 1000,
"user_email": "user@example.com"
}' \
https://server.codeium.com/api/v1/UsageConfig
```
### Example Request - Clear Credit Cap
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"clear_add_on_credit_cap": true,
"team_level": true
}' \
https://server.codeium.com/api/v1/UsageConfig
```
## Response
The response body is empty. A `200` status code indicates the operation was successful.
## Error Responses
Common error scenarios:
* Invalid service key or insufficient permissions
* Both `clear_add_on_credit_cap` and `set_add_on_credit_cap` provided
* Neither `clear_add_on_credit_cap` nor `set_add_on_credit_cap` provided
* Multiple scope parameters provided
* No scope parameter provided
* Invalid group ID or user email
* Rate limit exceeded
# Get User Page Analytics
Source: https://docs.devin.ai/desktop/accounts/api-reference/user-page-analytics
POST https://server.codeium.com/api/v1/UserPageAnalytics
Retrieve user activity statistics including names, emails, last activity times, active days, and prompt credits used from the teams page.
## Overview
Get user activity statistics that appear on the teams page, including user names, emails, last activity times, active days, and prompt credits used.
## Request
Your service key with "Teams Read-only" permissions
Filter results to users in a specific group (optional)
Start time in RFC 3339 format (e.g., `2023-01-01T00:00:00Z`). **Only affects the `activeDays` calculation.** If not provided, defaults to 1 year ago.
End time in RFC 3339 format (e.g., `2023-12-31T23:59:59Z`). **Only affects the `activeDays` calculation.** If not provided, defaults to the current time.
### Example Request
```bash theme={null}
curl -X POST --header "Content-Type: application/json" \
--data '{
"service_key": "your_service_key_here",
"group_name": "engineering_team",
"start_timestamp": "2024-01-01T00:00:00Z",
"end_timestamp": "2024-12-31T23:59:59Z"
}' \
https://server.codeium.com/api/v1/UserPageAnalytics
```
## Response
Array of user statistics objects
User's display name
User's email address
Timestamp of user's last activity in RFC 3339 format
Hashed version of the user's API key
The number of days the user was active within the queried time range (defined by `start_timestamp` and `end_timestamp`). A day is counted as active if the user had any autocomplete acceptances, Cascade usage, or command usage on that day.
Indicates whether Devin Desktop access has been disabled for the user by an admin. This field is only present if access has been explicitly disabled, and will always be set to true in that case.
The user's role within the team (e.g., admin, member)
Timestamp of when the user signed up, in RFC 3339 format
The most recent timestamp the Tab/Autocomplete modality was used, in RFC 3339 format
The most recent timestamp the Cascade modality was used, in RFC 3339 format
The most recent timestamp the Command modality was used, in RFC 3339 format
The total number of prompt credits used by this user during the **current billing cycle**, returned in **cents** (1 credit = 100 cents). To get the actual credit usage, divide this value by 100. This value is **not** affected by the `start_timestamp` or `end_timestamp` request parameters. The billing cycle window is indicated by the top-level `billingCycleStart` and `billingCycleEnd` fields.
The user's team membership status. Possible values: `USER_TEAM_STATUS_UNSPECIFIED`, `USER_TEAM_STATUS_PENDING`, `USER_TEAM_STATUS_APPROVED`, `USER_TEAM_STATUS_REJECTED`. Note that the API returns all users regardless of team status, while the Manage Members UI only shows approved users.
The start of the current billing cycle in RFC 3339 format. The `promptCreditsUsed` values in `userTableStats` correspond to usage within this billing cycle.
The end of the current billing cycle in RFC 3339 format. The `promptCreditsUsed` values in `userTableStats` correspond to usage within this billing cycle.
### Example Response
```json theme={null}
{
"userTableStats": [
{
"name": "Alice",
"email": "alice@cognition.ai",
"lastUpdateTime": "2024-10-10T22:56:10.771591Z",
"apiKey": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"activeDays": 178,
"role": "admin",
"signupTime": "2024-01-15T08:30:00Z",
"lastAutocompleteUsageTime": "2024-10-10T22:56:10Z",
"lastChatUsageTime": "2024-10-10T20:30:00Z",
"promptCreditsUsed": 12500,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
},
{
"name": "Bob",
"email": "bob@cognition.ai",
"lastUpdateTime": "2024-10-10T18:11:23.980237Z",
"apiKey": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"activeDays": 210,
"role": "member",
"signupTime": "2024-02-01T10:00:00Z",
"lastAutocompleteUsageTime": "2024-10-10T18:11:23Z",
"lastChatUsageTime": "2024-10-09T14:22:00Z",
"lastCommandUsageTime": "2024-10-08T09:15:00Z",
"promptCreditsUsed": 8300,
"teamStatus": "USER_TEAM_STATUS_APPROVED"
}
],
"billingCycleStart": "2024-10-01T00:00:00Z",
"billingCycleEnd": "2024-11-01T00:00:00Z"
}
```
## Error Responses
Error message describing what went wrong
Common error scenarios:
* Invalid service key or insufficient permissions
* Invalid timestamp format
* Group not found
* Rate limit exceeded
# Domain Verification
Source: https://docs.devin.ai/desktop/accounts/domain-verification
Verify your organization's domain ownership with DNS TXT records to enable SSO, user management, and automatic team invitations in Devin Desktop.
Domain verification is the process of proving that your organization owns or controls a specific domain. This prevents spoofing or unauthorized use of your domain and enables secure organization-level features in Devin Desktop, such as SSO and user management.
In Devin Desktop, verifying your domain is required so that users with emails from your organization can be recognized and managed. The domain you need to verify should be the top-level domain of your users’ email addresses (for example, if your users log in with [name@company.com](mailto:name@company.com), you must verify company.com).
## How to verify your domain in Devin Desktop
Enter the domain you want to verify (e.g., company.com). Devin Desktop will generate a unique verification token and TXT record.
⚠️ This token will only be shown once. Be sure to copy it before closing the window.
In your DNS provider’s management console, create a new TXT record with the value provided. For example:
windsurf-verification=\
* Name/Host: as specified in the Devin Desktop portal (often @ or left blank).
* Value/Content: the exact token string shown in the portal.
After adding the record, return to the Devin Desktop portal and click the Verify button to complete the process.
If the TXT record is detected, your domain will be marked as verified.
DNS changes can take up to 24–48 hours to propagate. If verification does not succeed immediately, wait a bit longer and try again.
## What happens after domain verification
Once your domain is verified, the following behavior will occur:
### For teams with SSO enabled
Any user with an email that ends in your verified domain will only be able to sign up for an account through your SSO integration. Other sign-up attempts (such as username + password or Google OAuth) will be redirected to your SSO portal. Users will be automatically added to your team without an additional approval process.
### For teams without SSO enabled
Users with an email that ends in your verified domain will still be able to sign up for an account using any available method. These users will be automatically invited to your team, but will need to be accepted by a team admin before gaining access.
# Quota-Based Usage
Source: https://docs.devin.ai/desktop/accounts/quota
Learn how Devin Desktop's quota-based usage system works, including daily and weekly allowances, extra usage, and migration details for existing subscribers.
In March 2026, Devin Desktop replaced the credit-based system with a **quota-based usage system**. Instead of buying and spending credits, your plan now includes a daily and weekly usage allowance that refreshes automatically.
## How quotas work
Your plan includes a usage allowance measured as a **daily and weekly budget**.
Your budget is based on how many tokens the model uses for each request. The cost per token varies by model, and free models don't count against your quota at all.
Short requests, with only a few files in context, will use fewer tokens than longer requests with larger codebases.
This system is different from the previous credit-based system, but better reflects the underlying costs of using different models.
### When you hit your limit
* **Free**: Wait until your next daily or weekly reset.
* **Pro, Teams, or Max**: Purchase extra usage to keep working without interruption.
Your quota resets on a daily and weekly basis, based on the calendar date.
Your daily quota is more than 1/7 of your weekly quota, enabling users who work on weekends to fully use their weekly allowance.
### Checking your remaining quota
You can check your remaining quota and when it resets from the usage meter in Devin Desktop, or on your [plan page](https://windsurf.com/subscription/manage-plan).
### Making your quota last longer
* Be precise with your instructions and remove unnecessary context.
* Switch to models that don't count against your quota, like SWE-1.7 (free through August 8, 2026) or SWE-1.6, for routine tasks.
* Avoid unnecessarily long sessions when a quick prompt will do.
* Try to choose a single frontier model for your tasks—requests to the same model leverage caching and reduce overall token usage.
## Extra usage
Extra usage lets you continue using Devin Desktop **after hitting your included quota**.
Usage is billed at API list prices for the model you're using, based on how many tokens the model uses for each request.
Priority and speed configurations (e.g., SWE-1.5 Fast, fast Opus variants) will increase the cost.
Quota limits **never** limit your extra usage, just the built-in allowance from your plan.
## Migration for existing subscribers
Your price is grandfathered in at \$15/mo indefinitely. You are moved to the new quota system, but you keep your current price.
Your per-seat price is grandfathered in at \$30/mo per Developer seat indefinitely.
Every existing paid subscriber gets a free extra week added to their current plan. This means your next renewal date was extended by 7 days.
Use that week to try the new quota system and see how it maps to your actual workflow.
Your annual subscription renewal date will be extended by 7 days for the trial week. If you decide to cancel, you can request a refund for all remaining months on your subscription.
Enterprise Self-Serve customers continue under their existing billing agreements. These changes do not affect you at this point.
Enterprise customers continue under their existing billing agreements. Reach out to your account team with any questions.
## Add-on credits & extra usage conversion
Quotas replace the built-in prompt credits that were part of the previous credit-based system.
All add-on credits are converted into a dollar amount of extra usage at the rate you paid for them.
Since prompt credits were sold for \$0.04/credit, for every 250 add-on credits you had remaining on your account you received \$10 in extra usage balance.
Yes. After conversion, you can request a refund of your unspent extra usage balance at any time through [support](https://windsurf.com/support). You'll receive the equivalent dollar amount back.
No. Credits are converted at exactly the rate you paid. You can either use that balance as extra usage going forward, or request a refund.
## Other questions
If you previously purchased SSO as an add-on, you keep SSO access under your grandfathered plan. New Teams plans do not include SSO — it is now an Enterprise-only feature.
## Token pricing example
To show how token pricing works in practice, let us walk through an example conversation with Cascade using Claude Opus 4.6:
| Role | Message | Tokens | Note |
| :------------ | :------------------------------------------------------------------------------------------- | :------- | :------------------------------------------------------------------------------------- |
| User | Refactor @my\_function | 20k | Input (cache write). Note: Incl. full shared timeline, editor context & system prompt. |
| Devin Desktop | Let me first analyze my\_function to come up with a plan to refactor it. | 1k | Output tokens. |
| `tool_call` | Analyze my\_function | 23k | Input (cache read) + Input (cache write). |
| Devin Desktop | Here is a plan to refactor my\_function \[...] do you want me to continue with implementing? | 2k | Output tokens. |
| User | Yes, continue. | 46k | Input (cache read) + Input (cache write). |
| `tool_call` | Edit foo.py | 50k | Input (cache read) + Output tokens. |
| `tool_call` | Add bar.py | 56k | Input (cache read) + Output tokens. |
| Devin Desktop | I am done refactoring my\_function. Here is a summary of my changes: \[...] | 2k | Output tokens. |
| **Total** | | **200k** | |
The actual per-token cost can be calculated based on the model [pricing table](/desktop/models) page.
# Role Based Access & Management
Source: https://docs.devin.ai/desktop/accounts/rbac-role-management
Configure RBAC permissions, create custom roles, and manage user access for Devin Desktop Enterprise plans.
Devin Desktop's Role-Based Access Control system provides granular, role-based access to enterprise resources, enabling administrators to assign permissions and roles dynamically for secure and efficient access management.
Role-based access features are available for Enterprise plans only.
## Role Based Access Controls
Devin Desktop's role-based access system allows enterprise organizations to implement fine-grained access controls across all team resources. The system enables:
* **Granular Permission Management**: Control access to specific features and data based on user roles
* **Dynamic Role Assignment**: Administrators can assign and modify roles for individual users or user groups
* **Secure Resource Access**: Ensure users only have access to the resources they need for their responsibilities
* **Audit and Compliance**: Track user permissions and access patterns for security and compliance requirements
The role-based access system integrates seamlessly with Devin Desktop's existing authentication mechanisms, including SSO and SCIM, to provide a comprehensive security framework for enterprise deployments.
## Role Management
We are continually working to improve role management features and functionality.
Roles can be created and managed in the Devin Desktop admin console via the Settings tab. For Devin Desktop's SaaS offering, access the Settings tab at:
Manage roles, permissions, and team settings from the admin console.
### Creating a New Role
Go to [windsurf.com/team/settings](https://windsurf.com/team/settings) and locate the Role Management section.
Click the **"Create Role"** button to start creating a new role.
Enter a descriptive name for the role and select the appropriate permissions from the checkbox list.
Review your selections and save the new role. It will now be available for assignment to users.
## Role Permissions
Devin Desktop provides two default roles out of the box:
* **Admin Role**: Includes all available permissions for complete system access
* **User Role**: Includes no permissions by default, providing a minimal access baseline
### Modifying Role Permissions
To modify permissions for custom roles, click the permissions dropdown next to the role name in the Role Management section. This allows you to add or remove specific permissions as needed.
### Available Permissions
Devin Desktop offers a comprehensive set of permissions organized into the following categories:
#### Attribution
* **Attribution Read**: Read access to the attribution page
#### Analytics
* **Analytics Read**: Read access to the analytics page
#### Teams
* **Teams Read-Only**: Read-only access to the teams page
* **Teams Update**: Allows updating user roles in the teams page
* **Teams Delete**: Allows deleting users from the teams page
* **Teams Invite**: Allows inviting users to the teams page
#### Indexing
* **Indexing Read**: Read access to the indexing page
* **Indexing Create**: Create access to the indexing page
* **Indexing Update**: Allows updating indexed repos
* **Indexing Delete**: Allows deleting indexes
* **Indexing Management**: Allows index database management and pruning
#### SSO
* **SSO Read**: Read access to the SSO page
* **SSO Write**: Write access to the SSO page
#### Service Key
* **Service Key Read**: Read access to the service keys page
* **Service Key Create**: Allows creating service keys
* **Service Key Update**: Allows updating service keys
* **Service Key Delete**: Allows deleting service keys
#### Billing
* **Billing Read**: Read access to the billing page
* **Billing Write**: Write access to the billing page
#### Role Management
* **Role Read**: Read access to the roles tab in settings
* **Role Create**: Able to create new roles
* **Role Update**: Allows updating roles
* **Role Delete**: Allows deleting roles
#### Team Settings
* **Team Settings Read**: Allows read access to team settings
* **Team Settings Update**: Allows updating team settings
### Disable Devin Desktop Access Feature
For administrators who need access to team analytics and audit/attribution logging but do not wish to consume a license, Devin Desktop provides a "disable Devin Desktop access" feature.
To access this feature:
Go to the **"Manage Team"** tab in your team settings.
Find the user you want to modify and click **"Edit"** next to their name.
In the user edit dialog, you can disable their Devin Desktop access while maintaining their administrative permissions for analytics and logging.
## User Groups
User Groups are available for Enterprise organizations with SCIM integration enabled.
For enterprise organizations, Devin Desktop offers the ability to split users into multiple user groups via SCIM (System for Cross-domain Identity Management) integration. This feature enables:
* **Organizational Structure**: Mirror your company's organizational structure within Devin Desktop
* **Group-Based Analytics**: View analytics and usage data filtered by specific user groups
* **Delegated Administration**: Assign group administrators who can manage specific user groups
* **Scalable Management**: Efficiently manage large numbers of users through group-based operations
User groups are automatically synchronized with your identity provider through SCIM, ensuring that organizational changes are reflected in Devin Desktop's access controls.
## User Management
Devin Desktop's role-based access functionality allows administrators to assign roles to individual users or user groups, providing flexible access control management.
### Assigning Roles to Users
User role management is performed in the Devin Desktop admin console at [windsurf.com/team/settings](https://windsurf.com/team/settings).
Go to the team settings page and locate the user management section.
Scroll through the user list or use the search functionality to find the user you want to modify. Users can be sorted alphabetically by name, email, sign-up time, or last login.
Click **"Edit"** next to the user's name to open the user management dialog.
In the pop-out window, select the appropriate role from the dropdown menu.
Confirm your selection and save the changes. The new role will be applied immediately.
### Administrative Hierarchy
Devin Desktop's role-based access system recognizes different levels of administrative access:
* **Super Admin**: Users with the admin role in the "all users" group have complete system access and can modify any role or permission
* **Group Admins**: Administrators of specific user groups can only make role and permission changes within their assigned groups
This hierarchical structure ensures that administrative responsibilities can be delegated appropriately while maintaining security boundaries.
### User Sorting and Management
The user management interface provides several sorting options to help administrators efficiently manage large teams:
* **Alphabetical by Name**: Sort users by their display names
* **Email Address**: Sort users by their email addresses
* **Sign-up Time**: View users in order of when they joined the team
* **Last Login**: Sort by most recent activity to identify active users
These sorting options make it easier to find specific users and understand team engagement patterns.
# Setting up SSO & SCIM
Source: https://docs.devin.ai/desktop/accounts/sso-scim
Configure Single Sign-On (SSO) and SCIM provisioning for your organization using Google Workspace, Microsoft Entra ID, Okta, or other SAML identity providers.
This feature is only available to Enterprise users.This feature is not applicable to Cognition Platform plans. For Cognition Platform, SSO should be configured and managed in your Cognition Platform settings instead.
Devin Desktop now supports sign in with Single Sign-On (SSO) via SAML. If your organization uses Microsoft Entra, Okta, Google Workspaces, or some other identity provider that supports SAML, you will be able to use SSO with Devin Desktop.
Devin Desktop only supports SP-initiated SSO; IDP-initiated SSO is NOT currently supported.
### Configure IDP Application
On the google admin console (admin.google.com) click **Apps -> Web and mobile apps** on the left.
Click on **Add app**, and then **Add custom SAML app**.
Fill out **App name** with `Windsurf`, and click **Next**.
The next screen (Google Identity Provider details) on Google’s console page has data you’ll need to copy to Devin Desktop’s SSO settings on [https://windsurf.com/team/settings](https://windsurf.com/team/settings).
* Copy **SSO URL** from Google’s console page to Devin Desktop’s settings under **SSO URL**
* Copy **Entity ID** from Google’s console page to Devin Desktop’s settings under **Idp Entity ID**
* Copy **Certificate** from Google’s console page to Devin Desktop’s settings under **X509 Certificate**
* Click **Continue** on Google’s console page
The next screen on Google’s console page requires you to copy data from Codeium’s settings page
* Copy **Callback URL** from Codeium’s settings page to Google’s console page under **ACS URL**
* Copy **SP Entity ID** from Codeium’s settings page to Google’s console page under **SP Entity ID**
* Change **Name ID** format to **EMAIL**
* Click **Continue** on Google’s console page
The next screen on Google’s console page requires some configuration
* Click on **Add Mapping**, select **First name** and set the **App attributes** to **firstName**
* Click on **Add Mapping**, select **Last name** and set the **App attributes** to **lastName**
* Click **Finish**
On Codeium’s settings page, click **Enable Login with SAML**, and then click **Save**. Make sure to click on **Test Login** to make sure login works as expected. All users now will have SSO login enforced.
Devin Desktop Enterprise now supports sign in with Single Sign-On (SSO) via SAML. If your organization uses Microsoft Entra ID (formerly Azure AD), you will be able to use SSO with Devin Desktop.
Devin Desktop only supports SP-initiated SSO; IDP-initiated SSO is NOT currently supported.
## Part 1: Create Enterprise Application in Microsoft Entra ID
All steps in this section are performed in the **Microsoft Entra ID admin center**.
1. In Microsoft Entra ID, click on **Add**, and then **Enterprise Application**.
2. Click on **Create your own application**.
3. Name your application **Devin Desktop**, select *Integrate any other application you don't find in the gallery*, and then click **Create**.
## Part 2: Configure SAML and User Attributes in Microsoft Entra ID
All steps in this section are performed in the **Microsoft Entra ID admin center**.
4. In your new Devin Desktop application, click on **Set up single sign on**, then click **SAML**.
5. Click on **Edit** under **Basic SAML Configuration**.
6. **Keep this Entra ID tab open** and open a new tab to navigate to the **Devin Desktop Teams SSO settings** at [https://windsurf.com/team/settings](https://windsurf.com/team/settings).
7. In the **Microsoft Entra ID** SAML configuration form:
* **Identifier (Entity ID)**: Copy the **SP Entity ID** value from the **Devin Desktop SSO settings page**
* **Reply URL (Assertion Consumer Service URL)**: Copy the **Callback URL** value from the **Devin Desktop SSO settings page**
* Click **Save** at the top
8. Configure user attributes for proper name display. In **Microsoft Entra ID**, under **Attributes & Claims**, click **Edit**.
9. Create 2 new claims by clicking **Add new claim** for each:
* **First claim**: Name = `firstName`, Source attribute = `user.givenname`
* **Second claim**: Name = `lastName`, Source attribute = `user.surname`
## Part 3: Configure SSO Settings in Devin Desktop Portal
Complete the configuration in the **Devin Desktop portal** ([https://windsurf.com/team/settings](https://windsurf.com/team/settings)).
10. In the **Devin Desktop SSO settings page**:
* **Pick your SSO ID**: Choose a unique identifier for your team's login portal (this cannot be changed later)
* **IdP Entity ID**: Copy the value from **Microsoft Entra ID** under **Set up Devin Desktop** → **Microsoft Entra Identifier**
The IdP Entity ID URL must end with a trailing `/` (e.g., `https://sts.windows.net/{tenant-id}/`). If the URL does not include the trailing slash, add it manually.
* **SSO URL**: Copy the **Login URL** value from **Microsoft Entra ID**
* **X509 Certificate**: Download the **SAML certificate (Base64)** from **Microsoft Entra ID**, open the file, and paste the text content here
11. In the **Devin Desktop portal**, click **Enable Login with SAML**, then click **Save**.
12. **Test the configuration**: Click **Test Login** to verify the SSO configuration works as expected.
**Important**: Do not log out or close the Devin Desktop settings page until you've successfully tested the login. If the test fails, you may need to troubleshoot your configuration before proceeding.
Devin Desktop Enterprise now supports sign in with Single Sign-On (SSO) via SAML. If your organization uses Microsoft Entra, Okta, Google Workspaces, or some other identity provider that supports SAML, you will be able to use SSO with Devin Desktop.
Devin Desktop only supports SP-initiated SSO; IDP-initiated SSO is NOT currently supported.
### Configure IDP Application
Click on Applications on the left sidebar, and then Create App Integration
Select SAML 2.0 as the sign-in method
Set the app name as Devin Desktop (or to any other name), and click Next
Configure the SAML settings as
* Single sign-on URL to [https://auth.windsurf.com/\_\_/auth/handler](https://auth.windsurf.com/__/auth/handler)
* Audience URI (SP Entity ID) to [www.codeium.com](http://www.codeium.com)
* NameID format to EmailAddress
* Application username to Email
Configure the attribute statements as following, and then click **Next**.
In the feedback section, select “This is an internal app that we have created”, and click **Finish**.
### Register Okta as a SAML provider
You should be redirected to the Sign on tab under your custom SAML application. Now you’ll want to take the info in this page and fill it out in Devin Desktop’s SSO settings.
* Open [https://windsurf.com/team/settings](https://windsurf.com/team/settings), and click on Configure SAML
* Copy the text after ‘Issuer’ in Okta’s application page and paste it under Idp Entity ID
* Copy the text after ‘Sign on URL’ in Okta’s application page and paste it under SSO URL
* Download the Signing Certificate and paste it under X509 certificate
* Check Enable Login with SAML and then click Save
* Test the login with the Test Login button. You should see a success message:
At this point everything should have been configured, and can now add users to the new Devin Desktop Okta application.
You should share your organization's custom Login Portal URL with your users and ask them to sign in via that link.
Users who login to Devin Desktop via SSO will be auto-approved into the team.
### Caveats
Note that Devin Desktop does not currently support IDP-initiated login flows.
We also do not yet support OIDC.
# Troubleshooting
### Login with SAML config failed: Firebase: Error (auth/operation-not-allowed)
This points to your an invalid SSO ID, or your SSO URL being incorrect, make sure it is alphanumeric and has no extra spaces or invalid characters. Please go over the steps in the guide again and make sure you use the correct values.
### Login with SAML config failed: Firebase: SAML Response \ mismatch. (auth/invalid-credential)
This points to your IdP entity ID being invalid, please make sure you copy it correctly from the Okta portal, without any extra characters or spaces before or after the string.
### Failed to verify the signature in samlresponse
This points to an incorrect value of your X509 certificate, please make sure you copy the correct key, and that it is formatted as:
```
-----BEGIN CERTIFICATE-----
value
------END CERTIFICATE------
```
Devin Desktop supports SCIM synchronization for users and groups with Microsoft Entra ID. It isn't necessary to setup SSO to use SCIM synchronization, but it is highly recommended.
You'll need:
* Admin access to Microsoft Entra ID
* Admin access to Devin Desktop
* An existing Devin Desktop Application on Entra ID (normally from your existing SSO application)
**Service Key Permissions Required**
The service key used for SCIM provisioning must have the following permissions:
* **Team User Read** - Required to read user and group information
* **Team User Update** - Required to create and update users and groups
* **Team User Delete** - Required to deactivate/delete users and groups
You can create a custom role with these permissions or use an existing admin role that includes them.
## Step 1: Create a Role with SCIM Permissions
Before setting up SCIM provisioning, you need to create a role with the required permissions.
1. Go to [Windsurf Team Settings](https://windsurf.com/team/settings)
2. Under "Other Settings", click **Configure** next to **Role Management**
3. Click **Add Role** and name it "SCIM Provisioning"
4. Add the following permissions:
* Team User Read
* Team User Update
* Team User Delete
5. Click **Save**
## Step 2: Navigate to the existing Devin Desktop Application
Go to Microsoft Entra ID on Azure, click on Enterprise applications on the left sidebar, and then click on the existing Devin Desktop application in the list.
## Step 3: Setup SCIM provisioning
Click on Get started under Provision User Accounts in the middle (step 3), and then click on Get started again.
Under the Provisioning setup page, select the following options.
Provisioning Mode: Automatic
Admin Credentials > Tenant URL: [https://server.codeium.com/scim/v2](https://server.codeium.com/scim/v2)
Leave the Azure provisioning page open, now go to the Devin Desktop web portal, and click on the profile icon in the NavBar on the top of the page.Under Team Settings, select Service Key and click on Add Service Key. Enter any key name (such as 'Azure SCIM Provisioning'), **select the "SCIM Provisioning" role you created earlier**, and click Create Service Key. Copy the output key, go back to the Azure page, paste it to Secret Token.
(What you should see after creating the key on Devin Desktop)
On the Provisioning page, click on Test Connection and that should have verified the SCIM connection.
Now above the Provisioning form click on Save.
## Step 4: Configure SCIM Provisioning
After clicking on Save, a new option Mappings should have appeared in the Provisioning page. Expand Mappings, and click on Provision Microsoft Entra ID Users
Under attribute Mappings, delete all fields under displayName, leaving only the fields userName, active, and displayName.
For active, now click on Edit. Under Expression, modify the field to
```
NOT([IsSoftDeleted])
```
Then click Ok.
Your user attributes should look like
In the Attribute Mapping page, click on Save on top, and navigate back to the Provisioning page.
Now click on the same page, under Mappings click on Provision Microsoft Entra ID Groups. Now only click delete for externalId, and click Save on top. Navigate back to the Provisioning page.
On the Provisioning page at the bottom, there should also be a Provisioning Status toggle. Set that to On to enable SCIM syncing. Now every 40 minutes your users and groups for the Entra ID application will be synced to Devin Desktop.
Click on Save to finish, you have now enabled user and group syncing for SCIM. Only users and groups assigned to the application will be synced to Devin Desktop. Note that removing users only disables them access to Devin Desktop (and stops them from taking up a seat) rather than deleting users due to Azure's SCIM design.
Devin Desktop supports SCIM synchronization for users and groups with Okta. It isn't necessary to setup SSO to use SCIM synchronization, but it is highly recommended.
You'll need:
* Admin access to Okta
* Admin access to Devin Desktop
* An existing Devin Desktop Application on Okta (normally from your existing SSO application)
## Step 1: Navigate to the existing Devin Desktop Application
Go to Okta, click on Applications, Applications on the left sidebar, and then click on the existing Devin Desktop application in the application list.
## Step 2: Enable SCIM Provisioning
Under the general tab, App Settings click on Edit on the top right. Then tick the 'Enable SCIM Provisioning' checkbox, then click Save. A new provisioning tab should have showed up on the top.
Now go to provisioning, click Edit and input in the following fields:
SCIM connector base URL: [https://server.codeium.com/scim/v2](https://server.codeium.com/scim/v2)
Unique identifier field for users: email
Supported provisioning actions: Push New Users, Push Profile Updates, Push Groups
Authentication Mode: HTTP Header
For HTTP Header - Authorization, you can generate the token from
* [https://windsurf.com/team/settings](https://windsurf.com/team/settings) and go to the Service Key Configuration
* Click on Configure, then Add Service Key, and give your API key a name
* Copy the API key, go back to Okta and paste it to HTTP Header - Authorization
Click on Save after filling out Provisioning Integration.
## Step 3: Setup Provisioning
Under the provisioning tab, on the left there should be two new tabs. Click on To App, and Edit Provisioning to App. Tick the checkbox for Create Users, Update User Attributes, and Deactivate Users, and click Save.
After this step, all users assigned to the group will now be synced to Devin Desktop.
## Step 4: Setup Group Provisioning (Optional)
In order to sync groups to Devin Desktop, you will have to specify which groups to push. Under the application, click on the Push Groups tab on top. Now click on + Push Groups -> Find Groups by name. Filter for the group you would like to add, make sure Push group memberships immediately is checked, and then click Save. The group will be created and group members will be synced to Devin Desktop. Groups can then be used to filter for group analytics in the analytics page.
This guide shows how to create and maintain groups in Devin Desktop with the SCIM API.
There are reasons one may want to provision groups manually rather than with their Identity Provider (Azure/Okta). Companies may want Groups provisioned from a different internal source (HR website, Sourcecode Management Tool etc.) that Devin Desktop doesn't have access to, or companies may finer control to Groups than what their Idendity Provider provides. Groups can thus be created with an API via HTTP request instead. The following provides examples on the HTTP request via CURL.
There are 5 main APIs here, Create Group, Add group members, Replace group members, Delete Group, and List Users in a Group.
### Create Group
```
curl -k -X POST https://server.codeium.com/scim/v2/Groups -d '{
"displayName": "",
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"]
}' -H "Authorization: Bearer " -H "Content-Type: application/scim+json"
```
### Add Group Members
```
curl -X PATCH https://server.codeium.com/scim/v2/Groups/ -d '{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":[
{
"op": "add",
"path":"members",
"value": [{"value": ""}, {"value": ""}]
}]}' -H "Authorization: Bearer " -H "Content-Type: application/scim+json"
```
### Replace Group Members
```
curl -X PATCH https://server.codeium.com/scim/v2/Groups/ -d '{"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations":[
{
"op": "replace",
"path":"members",
"value": [{"value": ""}, {"value": ""}]
}]}' -H "Authorization: Bearer " -H "Content-Type: application/scim+json"
```
### Delete Group
```
curl -X DELETE https://server.codeium.com/scim/v2/Groups/ -H "Authorization: Bearer " -H "Content-Type: application/scim+json"
```
### List Group
```
curl -X GET -H "Authorization: Bearer " "https://server.codeium.com/scim/v2/Groups"
```
### List Users in a Group
```
curl -X GET -H "Authorization: Bearer " "https://server.codeium.com/scim/v2/Groups/"
```
You'll have to at least create the group first, and then replace group to create a group with members in them. You'll also need to URL encode the group names if your group name has a special character like space, so a Group name such as 'Engineering Group' will have to be 'Engineering%20Group' in the URL.
Note that users need to be created in Devin Desktop (through SCIM or manually creating the account) before they can be added to a group.
## User APIs
There are also APIs for users as well. The following are some of the common SCIM APIs that Devin Desktop supports.
Disable a user (Enable by replacing false to true):
```
curl -X PATCH \
https://server.codeium.com/scim/v2/Users/ \
-H 'Content-Type: application/scim+json' \
-H 'Authorization: Bearer ' \
-d '{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "active",
"value": false
}
]
}'
```
Disable CLI access for a user (set `cliActive` to `true` to re-enable):
```
curl -X PATCH \
https://server.codeium.com/scim/v2/Users/ \
-H 'Content-Type: application/scim+json' \
-H 'Authorization: Bearer ' \
-d '{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "replace",
"path": "cliActive",
"value": false
}
]
}'
```
The `cliActive` attribute controls whether a user can access Devin CLI. It is independent of the `active` attribute — disabling CLI access does not affect the user's seat or their access to other Devin Desktop products. If `cliActive` is not set for a user, they follow the team's default CLI access policy.
Create a user:
```
curl -X POST \
https://server.codeium.com/scim/v2/Users \
-H 'Content-Type: application/scim+json' \
-H 'Authorization: Bearer ' \
-d '{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "",
"displayName": "",
"active": true
}'
```
Update name:
```
curl -X PATCH \
'https:///_route/api_server/scim/v2/Users/' \
-H 'Authorization: Bearer ' \
-H 'Content-Type: application/scim+json' \
-d '{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
{
"op": "Replace",
"path": "displayName",
"value": ""
}
]
}'
```
## Creating Api Secret Key
Go to [https://windsurf.com/team/settings](https://windsurf.com/team/settings). Under Service Key Configuration, click on Add Service Key. Enter any key name (such as 'Azure Provisioning Key') and click Create Service Key. Copy the output key and save it, you can now use the key to authorize the above APIs.
## Prerequisites
This guide assumes that you have Duo configured and acts as your organizational IDP, or has external IDP configured.
You will need administrator access to both Duo and Devin Desktop accounts.
## Configure Duo for Devin Desktop
1. Navigate to Applications, and add a Generic SAML service provider
2. Navigate to SSO in Team Settings
3. When enabling SAML for the first time, you will be required to set up your SSO ID. **You will not be able to change it later.**
It is advised to set this to your organization or team name with alphanumeric characters only.
4. Copy the `Entity ID` value from the Duo portal and paste it into the `IdP Entity ID` field in the Devin Desktop portal.
5. Copy the `Single Sign-On URL` value from the Duo portal and paste it into the `SSO URL` field in the Devin Desktop portal.
6. Copy the certificate value from the Duo portal and paste it in the `X509 Certificate` field in the Devin Desktop portal
7. Copy the `SP Identity ID` value from the Devin Desktop portal and paste it into the `Entity ID` field in the Duo portal.
8. Copy the `Callback URL (Assertion Consumer Service URL)` from the Devin Desktop portal and paste it into the `Assertion Consumer Service (ACS) URL` field in the Duo portal.
9. In the Duo portal, configure the attribute statements as following:
10. Enable the SAML login in the Devin Desktop portal so you can test it.
**NOTE: DO NOT LOGOUT OR CLOSE THE WINDOW AT THIS POINT.**
If you get an error or it times out, troubleshoot your settings, otherwise you have to disable your SAML Settings in the Devin Desktop portal.
**If you logout or close the window without confirming a successful test - you may get locked out.**
11. Once your test was successfully completed, you may logout. You can now use SSO sign in when browsing to your team/organization page with the SSO ID you have configured in step 3.
[https://www.codeium.com/yourssoid/login](https://www.codeium.com/yourssoid/login)
## Prerequisites
This guide assumes that you have PingID configured and acts as your organizational IDP, or has external IDP configured.
You will need administrator access to both PingID and Devin Desktop accounts.
## Configure PingID for Devin Desktop
1. Navigate to Applications and add Devin Desktop as a SAML Application
2. Navigate to SSO in Team Settings
3. When enabling SAML for the first time, you will be required to set up your SSO ID. **You will not be able to change it later.**
It is advised to set this to your organization or team name with alphanumeric characters only.
4. In PingID - choose to manually enter the configuration and fill out the fields with the following values:
* ACS URLs - this is the `Callback URL (Assertion Consumer Service URL)` from the Devin Desktop portal.
* Entity ID - this is the `SP Entity ID` from the Devin Desktop portal.
5. Copy the `Issuer ID` from PingID to the `IdP Entity ID` value in the Devin Desktop portal.
6. Copy the `Single Signon Service` value from PingID to the `SSO URL` value in the Devin Desktop portal.
7. Download the Signing Certificate from PingID as X509 PEM (.crt), open the file and copy its contents to the `X509 Certificate` value in the Devin Desktop portal.
**Note**: make sure you have the fill begin and end lines with 5 dashes (-) and no other characters are copied!
8. In attribute mappings, make sure to map:
* `saml_subject` - Email Address
* `firstName` - Given Name
* `lastName` - Family Name
9. Add/edit any other policies and access as required by your setup/organization
10. Enable the SAML login in the Devin Desktop portal so you can test it.
**NOTE: DO NOT LOGOUT OR CLOSE THE WINDOW AT THIS POINT.**
If you get an error or it times out, troubleshoot your settings, otherwise you have to disable your SAML Settings in the Devin Desktop portal.
**If you logout or close the window without confirming a successful test - you may get locked out.**
11. Once your test was successfully completed, you may logout. You can now use SSO sign in when browsing to your team/organization page with the SSO ID you have configured in step 3.
[https://www.codeium.com/yourssoid/login](https://www.codeium.com/yourssoid/login)
# Getting started with Teams and Enterprise
Source: https://docs.devin.ai/desktop/accounts/teams-getting-started
Set up Devin Desktop Teams and Enterprise plans with team management, SSO, analytics, user groups, and priority support for your organization.
Devin Desktop scales from solo projects to large-scale enterprise codebases. Our Teams and Enterprise plans unlock collaboration features such as team management, Single Sign-On (SSO), advanced analytics, and priority support.
If your organisation requires extra security or compliance, please [contact our sales team](https://windsurf.com/contact/enterprise).
## Setup
Visit [windsurf.com/pricing](https://windsurf.com/pricing) and select the `Teams` or `Enterprise` tier.
Enter the number of users you want to include in the subscription.
Devin Desktop makes managing your team easy from one dashboard.
To add members to your team, first navigate to the [invite page](https://windsurf.com/team/members).
Simply click on the "invite" button and then either add via email or share a unique invite link.
Configurable settings for your team.
Select and approve models, MCP servers, SSO configurations, service keys, role management, and more.
Set up SSO, SCIM, Duo, or PingID for your team.
For Teams plans, SSO must be purchased as an add-on [here](https://windsurf.com/team/members), which also comes with access controls and subteam analytics.
## Manage Team
You must be a team admin to make changes to the team.
To add or remove members from your team, navigate to the [Manage team page](https://windsurf.com/team/members).
From here, you can invite and view your team, add SSO, update the number of seats in your team, or even cancel or switch your plan.
## User Groups
This feature is only available in Enterprise plans and for teams with SSO enabled.
Devin Desktop now supports creating user groups. For each group you can now view analytics per group. You can also configure group administrators who can view analytics for the specific groups they manage.
### Existing Subscription
Already subscribed on Pro and want to upgrade? Head to your [Plan Management](https://windsurf.com/subscription/plan-management), click `Switch Plan`, and select the appropriate Teams or Enterprise plan.
# Plans and Usage
Source: https://docs.devin.ai/desktop/accounts/usage
Understand Devin Desktop pricing plans, usage tracking, and how to upgrade from Free to Pro, Teams, or Enterprise.
Windsurf is available as **Free**, **Pro**, **Max**, **Teams**, and **Enterprise** plans. Plans vary in the models available, usage limits, and additional features like centralized billing, admin dashboards, SSO, and RBAC.
For a full comparison of what's included in each plan, see [windsurf.com/pricing](https://windsurf.com/pricing).
Windsurf introduced new usage-based plans for self-serve customers in March 2026. You can learn more about these plans [here](/desktop/accounts/quota).
## Upgrading to a paid plan
To learn more about paid features or to upgrade to a paid plan, [click here](https://windsurf.com/subscription/manage-plan). Paid plans include Pro/Max for individuals, Teams for organizations, and Enterprise for larger companies.
We accept all major credit cards, Apple Pay, Cash App Pay, Google Pay, Link, WeChat Pay, and Alipay. If you have a payment method not listed, please reach out to us at [support](https://windsurf.com/support). You may need to disable your VPN to view the relevant payment methods for your region.
## Trials
From time to time, Windsurf offers free trials of paid plans to eligible customers. Trials are a promotional offer, not an entitlement, and are only made available to a subset of customers.
Trials are generally not offered to:
* Customers who have previously used Windsurf, Devin, or Codeium (including under a different account or plan).
* Customers who our systems predict are unlikely to purchase a Pro subscription.
* Customers flagged for suspected abuse, fraud, or other violations of our [terms of service](https://windsurf.com/terms-of-service).
Eligibility is determined automatically by our systems and is not subject to appeal. If a trial is not offered to you at checkout, you are not eligible for one, and Windsurf support will not be able to apply one retroactively. You are welcome to subscribe directly to a paid plan, and you can request a refund before using the subscription if you change your mind.
## Viewing your usage
There are a few ways to view your usage.
View the settings panel by clicking on "Windsurf Settings" on the status bar, followed by selecting the "Plan Info" tab.
You can also view it on your plan page at [windsurf.com/subscription/manage-plan](https://windsurf.com/subscription/manage-plan) after you're authenticated.
## Viewing or updating your payment & billing information
You can now update your payment method, billing details, tax ID, and view past invoices directly from your Windsurf account. Follow the steps below to make changes securely via Stripe.
Visit [windsurf.com/subscription/manage-plan](https://windsurf.com/subscription/manage-plan) and log into your account if prompted.
You can view and download your previous invoices and receipts.
* On the billing page, select the Update Payment button.
* A secure Stripe pop-up will appear. This will redirect you to your customer portal on Stripe. From the Stripe portal, you can:
* Add or change your payment method
* Update your billing and shipping information (name or company name, tax identification, and address)
* Once you've made the updates, save your changes and close the window.
To change the email associated with your account, update your email in your
[Windsurf profile settings](https://windsurf.com/settings). If you need
further assistance, please [open a support
ticket](https://windsurf.com/support).
## Canceling your paid plan
As a paid individual user, you can cancel your plan at any time by browsing to the [windsurf.com/subscription/manage-plan](https://windsurf.com/subscription/manage-plan) page.
Upon canceling, you'll still have access to your plan's features until the end of the current billing period. After that, you'll be downgraded to the Free plan.
If you change your mind before the end of the billing period, you can renew your plan by visiting the billing page.
For Teams plans, only the admin can cancel the plan, delete the team and remove users.
### Agent Compute Units (ACUs)
Enterprise plans are billed in **Agent Compute Units (ACUs)**. An ACU reflects the amount of agent effort required to complete a given task. ACU consumption scales with the inference used and the model selected.
The exact number of ACUs included depends on your contract. Contact your account team or [sales](https://windsurf.com/contact/sales) for details on pricing and allocation.
### How ACUs work
For local agents — Cascade, Devin CLI, Devin Local, and similar products — ACUs are based on inference. The tokens consumed by the selected model are converted into ACUs at the per-token rates listed on the [models page](/desktop/models). For cloud agents, code review, and other platform capabilities, ACUs reflect a mix of tokens, compute, VMs, and other infrastructure costs. See the [Devin billing page](https://docs.devin.ai/admin/billing) for more details on how ACUs are metered across different products.
### Viewing your usage
There are a few ways to view your usage.
View the settings panel by clicking on "Windsurf Settings" on the status bar, followed by selecting the "Plan Info" tab.
You can also view it on your plan page at [windsurf.com/subscription/manage-plan](https://windsurf.com/subscription/manage-plan) after you're authenticated.
This only applies to credit-based enterprise customers. Newer enterprise plans are billed in ACUs — see the **Enterprise (ACUs)** tab.
### Enterprise Credits
Enterprise plans on the legacy billing model use a **credit-based usage system**. Prompt credits are consumed whenever a message is sent to Cascade with a premium model. Every model has its own credit multiplier, with the default message costing 1 credit. You can view all available models and their associated costs on the [models page](/desktop/models).
### How credits work
When you send a message to Cascade with a premium model, 1 prompt credit is consumed. It doesn't matter how many actions Cascade takes to fulfill your request—whether it searches your codebase, analyzes files, or makes edits—you only pay for the initial prompt.
Prompt credits are issued monthly according to your plan. They do not roll over to the next month—whether or not you've used them, your credit balance will reset at the start of each new billing cycle. Once your monthly prompt credits run out, if you have add-on credits, those will automatically be used instead. Unlike prompt credits, add-on credits do not expire and can be carried over until they're fully used.
If a message is unsuccessful, prompt credits will not be consumed. For example, if Cascade attempts to write to a file but that file has unsaved changes, the operation will fail and it will not consume a credit.
### Purchasing additional credits
Additional credits are purchased within and treated as a pool amongst all members of the team at a rate of \$120 for 1000 pooled credits. Please contact your Teams admin to purchase more credits if you're on a team plan.
Add-on credits require an active subscription to be used. If your subscription expires, any remaining add-on credits cannot be used until you resubscribe. Your add-on credits will not be removed and will remain available once you resubscribe.
### Automatic Credit Refills
Under your plan settings page on the Windsurf website, you can specify a maximum amount of credits and other refill settings. The system will automatically "top-up" your credits as you start running low (below 15 credits).
Automatic Credit Refills are purchased in configurable increments (multiples of \$120 for Teams/Enterprise) and subject to maximum monthly budget caps (\$160 by default). This ensures you won't lose access to Cascade during critical work.
### Seat-Based Credit Allocation
On Enterprise plans, prompt credits are allocated on a per-seat basis. Each seat receives a fixed number of credits at the start of each billing cycle. These credits are tied to the seat itself, not the specific user occupying it.
If a team member leaves mid-billing cycle and a new member joins to fill that seat, the new member inherits the seat's existing credit usage. For example, if your plan has 50 seats and all are in use, and one member departs after using 300 of their 1000 credits, the person who takes that seat will start with only 700 credits remaining for the rest of the billing period.
When this happens, you may see a notice on your usage page indicating that you joined a seat that was previously used during the current billing period. This is expected behavior and does not indicate any error with your account. Your credits will fully reset to the plan's standard allocation at the start of the next billing cycle.
If you are an admin managing a team where members frequently rotate, keep in
mind that adding new members to recently vacated seats may result in those
members starting with fewer credits for the remainder of the billing period.
All seats reset to their full credit allocation at the beginning of each new
billing cycle.
### Viewing your usage
There are a few ways to view your usage.
View the settings panel by clicking on "Windsurf Settings" on the status bar, followed by selecting the "Plan Info" tab.
You can also view it on your plan page at [windsurf.com/subscription/manage-plan](https://windsurf.com/subscription/manage-plan) after you're authenticated.
# Agent Client Protocol
Source: https://docs.devin.ai/desktop/acp
Run third-party agents inside the Devin Desktop Agent Command Center via ACP.
ACP agents are available for Pro, Max, and Teams users. Enterprise admins should contact their account team about enabling third-party agents.
Devin Desktop includes support for running third-party agents inside the [Agent Command Center](/desktop/agent-command-center). We use the [Agent Client Protocol (ACP)](https://agentclientprotocol.com/) to do so.
ACP is an open protocol that standardizes communication between code editors and coding agents — similar to how the Language Server Protocol (LSP) standardized language server integration. Any agent that implements ACP can be plugged into Devin Desktop, and Devin Desktop can talk to any ACP-compatible agent.
When using an external ACP agent, all agent operations are delegated to the agent. Devin Desktop's privacy policy and legal terms do not apply, and billing is directly between you and the third-party agent provider.
## Example agents
Any agent that speaks ACP can be run inside Devin Desktop. Some popular ACP-compatible agents you can plug in include:
* [Codex CLI](https://github.com/openai/codex) — OpenAI's coding agent
* [Claude Agent](https://www.anthropic.com/claude-code) — Anthropic's coding agent
* [OpenCode](https://opencode.ai) — open source coding agent
* [Junie](https://www.jetbrains.com/junie/) — JetBrains' coding agent
* [Gemini CLI](https://github.com/google-gemini/gemini-cli) — Google's coding agent
In addition to third-party agents like these, you can use ACP to integrate a [custom agent](/desktop/acp-custom) with Devin Desktop.
## Enabling custom agents
Once an agent is added to your [local](#local-registry-config) or [team](#team-registry-config) registry, it can be enabled from `Devin Settings`:
1. Open the Command Palette with `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows/Linux)
2. Open `Devin User Settings`
3. Click the "Agents" tab
4. Toggle on the ACP agents you want to use
5. Restart Devin Desktop
Once enabled, the agent appears in the agent selector in the bottom right corner of Devin Desktop when starting *new* conversations, alongside built-in agents like [Cascade](/desktop/cascade/cascade) and [Devin Local](/desktop/devin-local).
## Local registry config
Individual users can configure their own ACP agents by editing a local registry file:
* **Devin Desktop:** `~/.windsurf/acp/registry.json`
* **Devin Desktop Next:** `~/.windsurf-next/acp/registry.json`
You can also open the file directly from the Command Palette by running `Open Local ACP Registry Config`.
The file follows the [ACP registry spec](https://agentclientprotocol.com/get-started/registry).
### Sample config for Devin Local
If you would like to test out [Devin Local](/desktop/devin-local) on your machine without enabling it for your entire team, you can configure a local registry pointing to the Devin CLI.
This assumes the `devin` CLI is already installed and available on your `PATH`. Devin Desktop launches it with `devin acp`.
```json theme={null}
{
"version": "1.0.0",
"agents": [
{
"id": "devin-cli",
"name": "Devin Local",
"version": "1.0.0",
"description": "Devin AI coding agent via Devin CLI",
"authors": [
"Cognition AI"
],
"license": "proprietary",
"distribution": {
"binary": {
"darwin-aarch64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
},
"darwin-x86_64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
},
"linux-aarch64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
},
"linux-x86_64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
},
"windows-aarch64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
},
"windows-x86_64": {
"archive": "",
"cmd": "devin",
"args": [
"acp"
]
}
}
}
}
],
"extensions": []
}
```
## Team registry configuration
Team administrators can push out a custom ACP config to their team via the "ACP Registry Config" setting in [Devin Settings](https://windsurf.com/team/settings).
This lets you maintain a static registry of approved ACP agents that all members of your team can use, without each user having to configure them individually.
For security reasons, Devin Desktop does not currently download agent distributions directly from the registry. The agent binary is expected to already be installed on the user's machine — the registry config tells Devin Desktop how to launch it. The `distribution.binary..archive` URLs in the sample below are part of the ACP registry schema for compatibility with the wider ecosystem, but Devin Desktop does not fetch them today.
### Sample config for OpenCode
```json theme={null}
{
"version": "1.0.0",
"agents": [
{
"id": "opencode",
"name": "OpenCode",
"version": "1.15.7",
"description": "The open source coding agent",
"repository": "https://github.com/anomalyco/opencode",
"website": "https://opencode.ai",
"authors": [
"Anomaly"
],
"license": "MIT",
"icon": "https://cdn.agentclientprotocol.com/registry/v1/latest/opencode.svg",
"distribution": {
"binary": {
"darwin-aarch64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-darwin-arm64.zip",
"cmd": "./opencode",
"args": [
"acp"
]
},
"darwin-x86_64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-darwin-x64.zip",
"cmd": "./opencode",
"args": [
"acp"
]
},
"linux-aarch64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-linux-arm64.tar.gz",
"cmd": "./opencode",
"args": [
"acp"
]
},
"linux-x86_64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-linux-x64.tar.gz",
"cmd": "./opencode",
"args": [
"acp"
]
},
"windows-aarch64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-windows-arm64.zip",
"cmd": "./opencode.exe",
"args": [
"acp"
]
},
"windows-x86_64": {
"archive": "https://github.com/anomalyco/opencode/releases/download/v1.15.7/opencode-windows-x64.zip",
"cmd": "./opencode.exe",
"args": [
"acp"
]
}
}
}
}
],
"extensions": []
}
```
## Troubleshooting
### My existing agent setup isn't working
Third-party agents read their own config files for most settings, but authentication is usually handled separately. Specifically, you typically need to:
* Authenticate via a `/login` slash command in the agent.
* Configure environment variables using the "..." button in the Agents tab of Devin User Settings.
* Set environment variables via the `devin.acp.agentEnv.` setting in your `settings.json` file.
# Building a custom ACP agent
Source: https://docs.devin.ai/desktop/acp-custom
Build a custom agent that runs inside Devin Desktop via the Agent Client Protocol.
This page covers what you need to implement to build a custom [ACP](/desktop/acp) agent that works with Devin Desktop.
For the full protocol specification, see [agentclientprotocol.com](https://agentclientprotocol.com/). Official client libraries are available in [Rust](https://agentclientprotocol.com/libraries/rust), [TypeScript](https://agentclientprotocol.com/libraries/typescript), [Python](https://agentclientprotocol.com/libraries/python), [Kotlin](https://agentclientprotocol.com/libraries/kotlin), and [Java](https://agentclientprotocol.com/libraries/java).
## Basics
ACP agents run as local sub-processes that Devin Desktop launches on demand. All communication happens over JSON-RPC on stdio.
### Methods you must implement
At minimum, your agent needs to handle these methods from Devin Desktop:
* [`initialize`](https://agentclientprotocol.com/protocol/initialization) — Negotiate the protocol version, advertise your agent's capabilities, and return agent info (name, version).
* [`session/new`](https://agentclientprotocol.com/protocol/session-setup) — Create a new session for a working directory and return a session ID. Devin Desktop passes the cwd and any configured MCP servers.
* [`session/prompt`](https://agentclientprotocol.com/protocol/prompt-turn) — Receive a user message, drive the prompt turn, and return a `stopReason` when finished.
* [`session/cancel`](https://agentclientprotocol.com/protocol/prompt-turn) — Abort any in-flight work for a session when the user cancels.
### Prompt turn lifecycle
During a `session/prompt` turn, your agent streams updates back to Devin Desktop as JSON-RPC notifications:
* `session/update` with `agent_message_chunk` for streaming assistant text.
* `session/update` with `tool_call` and `tool_call_update` to show tool calls and their status in the Devin Desktop UI.
* `session/request_permission` to ask the user before running a sensitive tool call.
* `session/update` with `plan` if your agent maintains an [agent plan](https://agentclientprotocol.com/protocol/agent-plan).
The turn ends when your agent returns a `session/prompt` response with a `stopReason` (e.g. `end_turn`, `cancelled`, `max_tokens`).
## Testing
To test your agent against Devin Desktop:
1. Add an entry for your agent in your [local registry config](/desktop/acp#local-registry-config), pointing `cmd` at the path of your local agent binary (or a wrapper script).
2. Make changes to your agent and rebuild as needed.
3. Run `Reload ACP Connections` from the Command Palette to pick up the latest version — no need to restart Devin Desktop between iterations.
## Limitations
Devin Desktop does not currently support every part of the ACP spec. The following are the main differences to be aware of when building an agent targeting Devin Desktop:
* **Session modes are not supported.** [Session modes](https://agentclientprotocol.com/protocol/session-modes) are not exposed in the Devin Desktop UI. If your agent needs to let users pick between modes (e.g. plan / build / review), expose them as a [session config option](https://agentclientprotocol.com/protocol/session-config-options) with the `"mode"` category instead.
* **Terminal capabilities are not exposed.** Devin Desktop does not advertise [terminal capabilities](https://agentclientprotocol.com/protocol/terminals), so agents cannot create terminals in the Devin Desktop UI. Agents should run commands in their own subprocess and stream output back via `tool_call` updates.
# Adaptive
Source: https://docs.devin.ai/desktop/adaptive
Adaptive is Cognition's intelligent model router that automatically selects the best AI model for each task.
## Selecting Adaptive
To use Adaptive, open the model picker below the Cascade input box and select **Adaptive** at the top of the list. Once selected, Adaptive will be used for all subsequent messages in the conversation.
You can switch away from Adaptive to a specific model at any time.
Adaptive is an intelligent model router that automatically selects the best AI model for each task. Instead of manually choosing between dozens of models, Adaptive analyzes your prompt and routes it to the model that will deliver the best result.
## How it works
When you select **Adaptive**, Devin evaluates each request and dynamically chooses the right underlying model. Simple tasks get routed to fast, efficient models. Complex tasks get routed to more capable ones.
This means you get the right level of intelligence for every prompt without overspending on premium models for routine work. Adaptive helps your usage allowance last longer by avoiding unnecessary use of expensive models.
Adaptive is the best default for most users.
## Enterprise availability
For enterprise organizations, Adaptive is disabled by default. An admin must enable the **Adaptive model router** setting from the enterprise settings page before team members can select Adaptive in the model picker.
* **Devin Desktop**: Go to **Settings > Devin Desktop > Models** and toggle **Adaptive model router** on.
* **Windsurf**: Go to **Team Settings > Models** and toggle **Adaptive model router** on.
## Pricing
Adaptive pricing depends on your billing plan.
Adaptive draws down your quota at a **fixed per-token rate**, regardless of which underlying model is selected for a given request.
Currently, the Adaptive model consumes quota and overage at an introductory promotional rate (through July 7, 2026).
| Token type | Cost per 1M tokens |
| :---------------- | :----------------- |
| Input tokens | \$0.50 |
| Output tokens | \$2.00 |
| Cache read tokens | \$0.10 |
These rates also apply to extra usage beyond your included quota.
Because Adaptive routes simpler tasks to lighter models, it typically consumes fewer tokens overall than manually selecting a frontier model for every request. This makes it the most cost-effective option for most users.
For customers on the Cognition platform, Adaptive usage is metered in **ACUs** (Agent Compute Units). ACU consumption scales with the tokens used and the model selected by the router for each request.
For enterprise customers on credit-based billing, Adaptive uses **variable-token credit pricing**. Each request consumes credits based on the actual tokens used and the model that Adaptive selects for that request according to your credit rate.
This means cheaper models cost fewer credits per request, and Adaptive's routing naturally favors cost-efficient choices — so your credit pool lasts longer compared to always selecting a premium model.
## Tips for getting the most out of Adaptive
* **Be specific with your prompts.** Clear, focused instructions help Adaptive route to the right model and reduce unnecessary token usage.
* **Leverage prompt caching.** Staying on the same model across turns in a conversation enables caching, which significantly reduces input token costs. Adaptive takes this into account when routing.
* **Use Adaptive as your default.** For most workflows, Adaptive is the best starting point. Switch to a specific model only when you have a particular reason to — for example, if you need a specific model's reasoning capabilities for a complex task.
# Advanced Configuration
Source: https://docs.devin.ai/desktop/advanced
Advanced Devin Desktop configurations including SSH support, Dev Containers, WSL, extension marketplace settings, diff zones, and gitignore access for Cascade.
All advanced configurations can be found in Devin Settings which can be accessed by the top right dropdown → Devin Settings or Command Palette (Ctrl/⌘+Shift+P) → Open Devin User Settings.
# Enabling Cascade access to .gitignore files
To provide Cascade with access to files that match patterns in your project's .gitignore, go to your Devin Settings and go to "Cascade Gitignore Access". By default, it is turned off. To provide access, turn it on by clicking the toggle.
# Agent diff zones
When an agent edits files, Devin Desktop displays **diff zones** — inline highlighted regions in the editor that show exactly what changed, with accept and reject controls for each hunk. All agents use diff zones by default.
You can turn off diff zones for non-Cascade agents in Devin Settings → User Interface → **Agent Diff Zones**. When disabled, non-Cascade agent edits are applied directly to the file and the toolbar shows a simple dismiss button instead of accept/reject controls.
# SSH Support
The usual SSH support in VSCode is licensed by Microsoft, so we have implemented our own just for Devin Desktop. It does require you to have [OpenSSH](https://www.openssh.com/) installed, but otherwise has minimal dependencies, and should "just work" like you're used to. You can access SSH under `Remote-SSH` in the Command Palette, or via the `Open a Remote Window` button in the bottom left.
This extension has worked great for our internal development, but there are some known caveats and bugs:
* We currently only support SSHing into Linux-based remote hosts.
* The usual Microsoft "Remote - SSH" extension (and the [open-remote-ssh](https://github.com/jeanp413/open-remote-ssh) extension) will not work—please do not install them, as they conflict with our support.
* We don't have all the features of the Microsoft SSH extension right now. We mostly just support the important thing: connecting to a host. If you have feature requests, let us know!
* To access a devcontainer on a remote host after connecting via SSH, use the Command Palette (Ctrl/Cmd+Shift+P) and choose one of the following options:
* SSH agent-forwarding is on by default, and will use Devin Desktop's latest connection to that host. If you're having trouble with it, try reloading the window to refresh the connection.
* On Windows, you'll see some `cmd.exe` windows when it asks for your password. This is expected—we'll get rid of them soon.
* If you have issues, please first make sure that you can ssh into your remote host using regular `ssh` in a terminal. If the problem persists, include the output from the `Output > Remote SSH (Devin)` tab in any bug reports!
# Dev Containers
Devin Desktop supports Development Containers on Mac, Windows, and Linux for both local and remote (via SSH) workflows.
Prerequisites:
* Local: Docker must be installed on your machine and accessible from the Devin Desktop terminal.
* Remote over SSH: Connect to a remote host using Devin Desktop Remote-SSH. Docker must be installed and accessible on the remote host (from the remote shell). Your project should include a `devcontainer.json` or equivalent config.
Available commands (in both local and remote windows):
1. `Dev Containers: Open Folder in Container`
* Open a new workspace using a specified `devcontainer.json`.
2. `Dev Containers: Reopen in Container`
* Reopen the current workspace in a new container defined by your `devcontainer.json`.
3. `Dev Containers: Attach to Running Container`
* Attach to an existing Docker container and connect your current workspace to it. If the container does not follow the [Development Container Specification](https://containers.dev/implementors/spec/), Devin Desktop will attempt best-effort detection of the remote user and environment.
4. `Dev Containers: Reopen Folder Locally`
* When connected to a development container, disconnect and reopen the workspace on the local filesystem.
5. `Dev Containers: Show Devin Desktop Dev Containers Log`
* Open the Dev Containers log output for troubleshooting.
These commands are available from the Command Palette and will also appear when you click the `Open a Remote Window` button in the bottom left (including when you are connected to a remote host via SSH).
Related:
* `Remote Explorer: Focus on Dev Containers (Devin Desktop) View` — quickly open the Dev Containers view.
### Known Limitations
Devin Desktop does not currently execute [Dev Container Specification lifecycle commands](https://containers.dev/implementors/json_reference/#lifecycle-scripts):
* `onCreateCommand`
* `updateContentCommand`
* `postCreateCommand`
* `postStartCommand`
* `postAttachCommand`
This applies to both container-level lifecycle commands (defined in `devcontainer.json`) and feature-level lifecycle commands (defined in `devcontainer-feature.json`). Dotfiles installation is also not performed.
**What does work:**
* Feature `install.sh` scripts (these run at image-build time)
* Feature `mounts` (volumes are attached at container runtime)
* Feature `entrypoint` field (executes on every container start)
* All other image-build-time operations (Dockerfile, docker-compose, features)
### Workaround: Using a Feature Entrypoint for Runtime Setup
If you are authoring a Dev Container feature that needs to run setup at container start (for example, to configure files from a mounted volume), use the feature's `entrypoint` field instead of a lifecycle command. The entrypoint executes on every container start after mounts are attached, and is fully self-contained — consumers of your feature do not need to modify their `devcontainer.json`.
In your `devcontainer-feature.json`, declare the entrypoint:
```json theme={null}
{
"name": "my-feature",
"id": "my-feature",
"version": "1.0.0",
"mounts": [
{ "type": "volume", "source": "my-volume", "target": "/data/my-dir" }
],
"entrypoint": "/usr/local/share/my-feature/entrypoint.sh"
}
```
In your `install.sh` (runs at image-build time), write the entrypoint script:
```bash theme={null}
#!/usr/bin/env bash
set -e
mkdir -p /usr/local/share/my-feature
cat > /usr/local/share/my-feature/entrypoint.sh << 'EOF'
#!/bin/sh
# Mount-dependent setup (runs on every container start, volume is mounted)
if [ -d /data/my-dir ]; then
mkdir -p /etc/myapp
cp /data/my-dir/config /etc/myapp/config
fi
exit 0
EOF
chmod +x /usr/local/share/my-feature/entrypoint.sh
```
The entrypoint script should perform its setup and exit normally. Do not end it with `exec "$@"` — the CLI's own entrypoint wrapper handles passing control to the container command. Keep the script lightweight since it runs synchronously before the IDE connects.
# WSL (Beta)
As of version 1.1.0, Devin Desktop has beta support for Windows Subsystem for Linux. You must already have WSL set up and configured on your Windows machine.
You can access WSL by clicking on the `Open a Remote Window` button in the bottom left, or under `Remote-WSL` in the Command Palette.
# Extension Marketplace
You can change the marketplace you use to download extensions from. To do this, go to `Devin Settings` and modify the Marketplace URL settings under the `General` section.
## Devin Desktop Plugins
Search "Devin Pyright" or paste in `@id:codeium.windsurfPyright` in the extensions search bar.
# Agent Command Center
Source: https://docs.devin.ai/desktop/agent-command-center
Manage all of your Devin Desktop agents — local and cloud — from a single Kanban-style view inside Devin Desktop.
The Agent Command Center is a new surface inside Devin Desktop 2.0 for managing every agent you have running, both local and cloud, in one place.
It is organized as a Kanban board grouped by status, so you can see at a glance what each agent is working on, what is blocked, and what is ready for review.
## Opening the Agent Command Center
You can switch to the Agent Command Center directly from Devin Desktop without leaving the editor.
## Kanban view
Agents are organized into columns by status so you can quickly tell what is in flight, what needs your attention, and what is finished.
The board includes both:
* **Local agents** — Cascade sessions running in your editor.
* **Cloud agents** — [Devin](/desktop/devin) sessions running on their own VMs.
## Working with the editor
The Agent Command Center does not replace the editor. It is integrated with the existing Devin Desktop editor features so you can always jump back into a session and make last-mile edits manually. You can always go back to the Devin Desktop you know and love.
## Organizing work with Spaces
Work in the Agent Command Center is organized into [Spaces](/desktop/spaces). A Space groups all of the agent sessions, PRs, files, and context for a specific task or project into a single view.
Group agent sessions, PRs, files, and context for a project into a single view.
# AI Commit Messages
Source: https://docs.devin.ai/desktop/ai-commit-message
Generate meaningful git commit messages automatically with AI by analyzing your code changes with a single click in Devin Desktop.
Generate git commit messages with a single click. This feature analyzes your code changes and creates meaningful commit messages that describe what you've done.
Available with no limits to all paid users!
# How It Works
When you're ready to commit changes:
1. Stage your files in the Git panel
2. Click the sparkle (✨) icon next to the commit message field
3. Review the generated message and edit if needed
4. Complete your commit
The AI analyzes your recent code changes and creates a meaningful commit message that describes what you've done.
# Best Practices
For better results:
* Apply general best practices for commit scope: group together small, meaningful units of changes
* Review the message before committing
# Limitations
* Large or complex commits may result in more generic messages
* Specialized terminology might not always be captured perfectly
* Generated messages are suggestions and may need editing
# Privacy
Your code and commit messages remain private. We don't store your code changes or use them for training our models.
# Autocomplete Overview
Source: https://docs.devin.ai/desktop/autocomplete/overview
AI-powered code autocomplete with single-line and multi-line suggestions, keyboard shortcuts, and customizable speed settings.
**Devin Desktop Autocomplete** is powered by our own models, trained in-house from scratch to optimize for speed and accuracy.
Our autocomplete makes in-line and multi-line suggestions based on the context of your code.
Suggestions appear in grey text as you type. You can press `esc` to cancel a suggestion.
Suggestions will also disappear if you continue typing or navigating without accepting them.
## Keyboard Shortcuts
### General Shortcuts
Here are the general shortcuts that apply for macOS.
Replace `⌘` with `Ctrl` and `⌥` with `Alt` to get the corresponding shortcuts on Windows/Linux.
* **Accept suggestion**: `⇥`
* **Cancel suggestion**: `esc`
* **Accept suggestion word-by-word**: `⌘+→` (VS Code), `⌥+⇧+\` (JetBrains)
* **Next/previous suggestion**: `⌥+]`/`⌥+[`
* **Trigger suggestion**: `⌥+\`
### JetBrains Shortcuts - 2.2.2 (stable) and 2.3.5 (pre-release) and later
* **Accept suggestion**: `⇥`
* **Accept next word**: `⌥→`
* **Accept current line**: `⌘→`
* **Trigger suggestion**: `⌥\`
* **Accept suggestion**: `Tab`
* **Accept next word**: `Ctrl+Right Arrow`
* **Accept current line**: `End`
* **Trigger suggestion**: `Alt+\`
You can customize these keyboard shortcuts by
* Hover over any completion text and select "Custom" from the dropdown.
* Navigate to Settings > Keymap > Main Menu > Code > Code Completion.
## Autocomplete Speeds
You can set the speed of the Autocomplete in your settings.
Fast Autocomplete is currently only available to our Pro, Teams, and Enterprise Users.
# Autocomplete Tips
Source: https://docs.devin.ai/desktop/autocomplete/tips
Tips for getting the most out of Devin Desktop Autocomplete including inline comments, Fill In The Middle (FIM), and snooze functionality.
## Inline Comments
You can instruct autocomplete with the use of comments in your code.
Devin Desktop will read these comments and suggest the code to bring the comment to life.
This method can get you good mileage, but if you're finding value in writing natural-language instructions and having the AI execute them,
consider using [Devin Desktop Command](/desktop/command/plugins-overview).
## Fill In The Middle (FIM)
Devin Desktop's Autocomplete can Fill In The Middle (FIM).
Read more about in-line FIM on our blog [here](https://windsurf.com/blog/inline-fim-code-suggestions).
## Snooze
Click the Devin Desktop widget in the status bar towards the bottom right of your editor to see the option to switch Autocomplete off,
either temporarily or until you reenable it.
# Prompt Engineering
Source: https://docs.devin.ai/desktop/best-practices/prompt-engineering
Best practices for crafting effective prompts to get high-quality code from Devin Desktop, including clear objectives, context, and constraints.
If you're reading this, you're probably someone that already understands some of the use cases and limitations of LLMs. The better prompt and context that you provide to the model, the better the outcome will be.
Similarly with Devin Desktop, there are best practices for crafting more effective prompts to get the most out of the tool, and get the best quality code possible to help you accelerate your workflows.
For more complex tasks that may require you to [@-Mention](/desktop/chat/overview#mentions) specific code blocks, use [Chat](/desktop/chat/overview) instead of [Command](/desktop/command/plugins-overview).
## Components of a high quality prompt
* ***Clear objective or outcome***
* What are you asking the model to produce?
* Are you asking the model for a plan? For new code? Is it a refactor?
* ***All relevant context to perform the task(s)***
* Have you properly used @-Mentions to ensure that the proper context is included?
* Is there any context that is customer specific that may be unclear to Devin Desktop?
* ***Necessary constraints***
* Are there any specific frameworks, libraries, or languages that must be utilized?
* Are there any space or time complexity constraints?
* Are there any security considerations?
## Examples
***Example #1:***
* **Bad**: Write unit tests for all test cases for an Order Book object.
* **Good**: Using `@class:unit-testing-module` write unit tests for `@func:src-order-book-add` testing for exceptions thrown when above or below stop loss
***Example #2***:
* **Bad**: Refactor rawDataTransform.
* **Good**: Refactor `@func:rawDataTransform` by turning the while loop into a for loop and using the same data structure output as `@func:otherDataTransformer`
***Example #3***:
* **Bad**: Create a new Button for the Contact Form.
* **Good**: Create a new Button component for the `@class:ContactForm` using the style guide in `@repo:frontend-components` that says “Continue”
# Common Use Cases
Source: https://docs.devin.ai/desktop/best-practices/use-cases
Common use cases for Devin Desktop including code generation, unit test generation, code documentation, API integration, and code refactoring.
Devin Desktop serves a variety of use cases at a high level. However, we see certain use cases to be more common than others, especially among our enterprise customers within their production codebases.
## Code generation
**Guidance:** Devin Desktop should work well for this use case. Devin Desktop features including single-line suggestions, multi-line suggestions, and fill-in-the-middle (FIM) completions.
**Best Practices:** Ensuring usage of Next Completion (`⌥ + ]`), Context Pinning, @ Mentions, and Custom Context will provide best results.
**Guidance:** Devin Desktop should work well for this use case. Devin Desktop features including single-line suggestions, multi-line suggestions, and fill-in-the-middle (FIM) completions.
**Best Practices:** Ensuring usage of Next Completion (`⌥ + ]`), Context Pinning, @ Mentions, and Custom Context will provide best results.
**Guidance:** Devin Desktop should work well for this use case. Devin Desktop features including single-line suggestions, multi-line suggestions, and fill-in-the-middle (FIM) completions.
**Best Practices:** Ensuring usage of Next Completion (`⌥ + ]`), Context Pinning, @ Mentions, and Custom Context will provide best results.
## Unit Test generation
**Guidance:** Basic usage of Devin Desktop for generating unit tests should reliably generate 60-70% of unit tests. Edge case coverage will only be as good as the user prompting the model is.
**Best Practices:** Use @ Mentions. Prompt Engineering best practices. Examples include:
Write unit test for `@function-name` that tests all edge cases for X and for Y (e.g. email domain).
Use `@testing-utility-class` to write a unit test for `@function-name`.
**Guidance:** Good for low-hanging fruit use cases. For very specific API specs or in-house libraries, Devin Desktop will not know the intricacies well enough to ensure the quality of generated sample data.
**Best Practices:** Be very specific about the interface you expect. Think about the complexity of the task (and if a single-shot LLM call will be sufficient to address).
## Internal Code Commentary
**Guidance:** Devin Desktop should work well for this use case. Use Devin Desktop Command or Devin Desktop Chat to generate in-line comments and code descriptions.
**Best Practices:** Use @ Mentions and use Code Lenses as much as possible to ensure the scope of the LLM call is correct.
**Guidance:** Generally the Refactor button / Devin Desktop Command would be the best ways to prompt for improvements. Devin Desktop Chat is the best place to ask for explanations or clarifications. This is a little vague but Devin Desktop should be good at doing both.
Devin Desktop Chat is the best place to ask for explanations or clarifications.
This is a little vague but Devin Desktop should be good at doing both.
**Best Practices**: Use the dropdown prompts (aka Devin Desktop's Refactor button) - we have custom prompts that are better engineered to deliver the answer you'd more likely expect.
**Guidance**: The best way to do this would be to create the header file, open chat, @ mention the function in the cpp file, and ask it to write the header function. Then do this iteratively for each in the cpp file. This is the best way to ensure no hallucinations along the way.
**Best Practices**: Generally avoid trying to write a whole header file with one LLM call. Breaking down the granularity of the work makes the quality of the generated code significantly higher.
## API Documentation and Integration
**Guidance**: This is similar to test coverage where parts of the API spec that are common across many libraries Devin Desktop would be able to accurately decorate. However, things that are built special for your in-house use case Devin Desktop might struggle to do at the quality that you expect.
**Best Practices**: Similar to test coverage, as much as possible, walk Devin Desktop's model through the best way to think about what the API is doing and it will be able to decorate better.
**Guidance**: Devin Desktop's context length for a single LLM call is 16,000 tokens. Thus, depending on the scope of your search, Devin Desktop's repo-wide search capability may not be sufficient. Repo-wide, multi-step, multi-edit tasks will be supported in upcoming Devin Desktop products.
This is fundamentally a multi-step problem that single-shot LLM calls (i.e. current functionality of all AI code assistants) are not well equipped to address. Additionally, accuracy of result must be much higher than other use cases as integrations are especially fragile.
**Best Practices**: Devin Desktop is not well-equipped to solve this problem today. If you'd like to test the extent of Devin Desktop's existing functionality, build out a step-by-step plan and prompt Devin Desktop individually with each step and high level of details to guide the AI.
## Code Refactoring
**Guidance**: Ensure proper scoping using Devin Desktop Code Lenses or @ Mentions to make sure all of the necessary context is passed to the LLM.
Context lengths for a single LLM call are finite. Thus, depending on the scope of your refactor, this finite context length may be an issue (and for that matter, any single-shot LLM paradigm). Repo-wide, multi-step, multi-edit tasks are now supported in Devin Desktop's [Cascade](/desktop/cascade).
**Best Practices**: Try to break down the prompt as much as possible. The simpler and shorter the command for refactoring the better.
**Guidance**: Ensure proper scoping using Devin Desktop Code Lenses or @ Mentions to make sure all of the necessary context is passed to the LLM.
Devin Desktop's context length for a single LLM call is 16,000 tokens. Thus, depending on the scope of your refactor, Devin Desktop's context length may be an issue (and for that matter, any single-shot LLM paradigm). Repo-wide, multi-step, multi-edit tasks will be supported in upcoming Devin Desktop products.
**Best Practices**: Try to break down the prompt as much as possible. The simpler and shorter the command for refactoring the better.
# AGENTS.md
Source: https://docs.devin.ai/desktop/cascade/agents-md
Create AGENTS.md files to provide directory-scoped instructions to Cascade. Instructions automatically apply based on file location in your project.
`AGENTS.md` files provide a simple way to give Cascade context-aware instructions that automatically apply based on where the file is located in your project. This is particularly useful for providing directory-specific coding guidelines, architectural decisions, or project conventions.
## How It Works
When you create an `AGENTS.md` file (or `agents.md`), Devin Desktop automatically discovers it and feeds it into the same [Rules](/desktop/cascade/memories#rules) engine that powers `.devin/rules/` (and the legacy `.windsurf/rules/`) — just with the activation mode inferred from the file's location instead of frontmatter:
* **Root directory**: Treated as an **always-on** rule — the full content is included in Cascade's system prompt on every message.
* **Subdirectories**: Treated as a **glob** rule with an auto-generated pattern of `/**` — the content is applied only when Cascade reads or edits files inside that directory.
This location-based scoping makes `AGENTS.md` ideal for providing targeted guidance without cluttering a single global configuration file.
## Creating an AGENTS.md File
Simply create a file named `AGENTS.md` or `agents.md` in the desired directory. The file uses plain markdown with no special frontmatter required.
### Example Structure
```
my-project/
├── AGENTS.md # Global instructions for the entire project
├── frontend/
│ ├── AGENTS.md # Instructions specific to frontend code
│ └── src/
│ └── components/
│ └── AGENTS.md # Instructions specific to components
├── backend/
│ └── AGENTS.md # Instructions specific to backend code
└── docs/
└── AGENTS.md # Instructions for documentation
```
### Example Content
Here's an example `AGENTS.md` file for a React components directory:
```markdown theme={null}
# Component Guidelines
When working with components in this directory:
- Use functional components with hooks
- Follow the naming convention: ComponentName.tsx for components, useHookName.ts for hooks
- Each component should have a corresponding test file: ComponentName.test.tsx
- Use CSS modules for styling: ComponentName.module.css
- Export components as named exports, not default exports
## File Structure
Each component folder should contain:
- The main component file
- A test file
- A styles file (if needed)
- An index.ts for re-exports
```
## Discovery and Scoping
Devin Desktop automatically discovers `AGENTS.md` files throughout your workspace:
* **Workspace scanning**: All `AGENTS.md` files within your workspace and its subdirectories are discovered
* **Git repository support**: For git repositories, Devin Desktop also searches parent directories up to the git root
* **Case insensitive**: Both `AGENTS.md` and `agents.md` are recognized
### Automatic Scoping
The key benefit of `AGENTS.md` is automatic scoping based on file location:
| File Location | Scope |
| ----------------------- | ------------------------------------------------------------ |
| Workspace root | Applies to all files (always on) |
| `/frontend/` | Applies when working with files in `/frontend/**` |
| `/frontend/components/` | Applies when working with files in `/frontend/components/**` |
This means you can have multiple `AGENTS.md` files at different levels, each providing increasingly specific guidance for their respective directories.
## Best Practices
To get the most out of `AGENTS.md` files:
* **Keep instructions focused**: Each `AGENTS.md` should contain instructions relevant to its directory's purpose
* **Use clear formatting**: Bullet points, headers, and code blocks make instructions easier for Cascade to follow
* **Be specific**: Concrete examples and explicit conventions work better than vague guidelines
* **Avoid redundancy**: Don't repeat global instructions in subdirectory files; they inherit from parent directories
### Content Guidelines
```markdown theme={null}
# Good Example
- Use TypeScript strict mode
- All API responses must include error handling
- Follow REST naming conventions for endpoints
# Less Effective Example
- Write good code
- Be careful with errors
- Use best practices
```
## Comparison with Rules
While both `AGENTS.md` and [Rules](/desktop/cascade/memories#rules) provide instructions to Cascade, they serve different purposes:
| Feature | AGENTS.md | Rules |
| -------- | -------------------------------- | -------------------------------------------------------- |
| Location | In project directories | `.devin/rules/` (or legacy `.windsurf/rules/`) or global |
| Scoping | Automatic based on file location | Manual (glob, always on, model decision, manual) |
| Format | Plain markdown | Markdown with frontmatter |
| Best for | Directory-specific conventions | Cross-cutting concerns, complex activation logic |
Use `AGENTS.md` when you want simple, location-based instructions. Use Rules when you need more control over when and how instructions are applied.
# App Deploys
Source: https://docs.devin.ai/desktop/cascade/app-deploys
Deploy web applications directly from Devin Desktop to Netlify with public URLs, automatic builds, and project claiming for Next.js, React, Vue, and Svelte.
App Deploys lets you deploy web applications and sites directly within Devin Desktop through Cascade tool calls. This feature helps you share your work through public URLs, update your deployments, and claim projects for further customization. This feature is in beta and support for additional frameworks, more robust builds, etc. are coming soon.
## Overview
With App Deploys, you can:
* Deploy a website or JS web app to a public domain
* Re-deploy to the same URL after making changes
* Claim the project to your personal account
App Deploys are intended primarily for preview purposes. For production
applications with sensitive data, we recommend claiming your deployment and
following security best practices.
## Supported Providers
We currently support the following deployment provider:
* **Netlify** - For static sites and web applications
Support for additional providers is planned for future releases.
## How It Works
When you use App Deploys, your code is uploaded to our server and deployed to the provider under our umbrella account. The deployed site will be available at a public URL formatted as:
```
.windsurf.build
```
### Deployment Process
1. Cascade analyzes your project to determine the appropriate framework
2. Your project files are securely uploaded to our server
3. The deployment is created on the provider's platform
4. You receive a public URL and a claim link
### Project Configuration
To facilitate redeployment, we create a `windsurf_deployment.yaml` file at the root of your project. This file contains information for future deployments, such as a project ID and framework.
## Using App Deploys
To deploy your application, simply ask Cascade something like:
```
"Deploy this project to Netlify"
"Update my deployment"
```
Cascade will guide you through the process and help troubleshoot common issues.
## Team Deploys
You will need Team admin privileges to toggle this feature.
Users on Teams and Enterprise plans can connect their Netlify accounts with their Devin Desktop accounts and deploy to their Netlify Team.
This can be toggled in Team Settings, which you can access via the Profile page or by clicking [here](https://windsurf.com/team/settings).
## Security Considerations
Your code will be uploaded to our servers for deployment. Only deploy code
that you're comfortable sharing publicly.
We take several precautions to ensure security:
* File size limits and validation
* Rate limiting based on your account tier
* Secure handling of project files
For added privacy, visit [clear-cookies.windsurf.build](https://clear-cookies.windsurf.build) to check for and clear any cookies set by sites under `windsurf.build`. If any cookies show up, they shouldn't be there, and clearing them helps prevent cross-site cookie issues and keeps your experience clean.
Devin Desktop sites are built by humans and AI, and while we encourage the AI to make best practice decisions, it's smart to stay cautious. Devin Desktop isn't responsible for issues caused by sites deployed by our users.
## Claiming Your Deployment
After deploying, you'll receive a claim URL. By following this link, you can claim the project on your personal provider account, giving you:
* Full control over the deployment
* Access to provider-specific features
* Ability to modify the domain name
* Direct access to logs and build information
Unclaimed deployments may be deleted after a certain period. We recommend
claiming important projects promptly.
## Rate Limits
To prevent abuse, we apply these tier-based rate limits:
| Plan | Deployments per day | Max unclaimed sites |
| ---- | ------------------- | ------------------- |
| Free | 1 | 1 |
| Pro | 10 | 5 |
## Supported Frameworks
App Deploys works with most popular JavaScript frameworks, including:
* Next.js
* React
* Vue
* Svelte
* Static HTML/CSS/JS sites
## Troubleshooting
### Failed Deployment Build
If your deployment fails:
1. Check the build logs provided by Cascade
2. Ensure your project can build locally (run `npm run build` to test)
3. Verify that your project follows the framework's recommended structure
4. View the documentation for how to deploy [your framework to Netlify via `netlify.toml`](https://docs.netlify.com/configure-builds/file-based-configuration/)
5. Consider claiming the project to access detailed logs on the provider's dashboard
We cannot provide direct support for framework-specific build errors. If your
deployment fails due to code issues, debug locally or claim the project to
work with the provider's support team.
### Netlify Site Not Found
This likely means that your build failed. Please claim your site (you can find it on your [deploy history](https://windsurf.com/deploy)) and check the build logs for more details. Oftentimes you can paste your build logs into Cascade and ask for help.
### Changing Your Subdomain / URL
#### Updating `netlify.app` domain
You can change your subdomain by claiming your deployment and updating the Netlify site settings. This will update your `.netlify.app` domain.
#### Updating custom `.windsurf.build` subdomain
You cannot change your custom `.windsurf.build` subdomain after you've
deployed. Instead, you'll need to deploy a new site with a new subdomain.
To update your custom `.windsurf.build` subdomain, you'll need to deploy a new site with a new subdomain:
1. Delete the `windsurf_config.yaml` file from your project
2. Ask Cascade to deploy a new site with a new subdomain and tell it which one you want
3. It can help to start a new conversation or clear your auto-generated memories so that Cascade doesn't try to re-deploy to the old subdomain
4. When you create a new deployment, you'll be able to press the "Edit" button on the subdomain UI to update it prior to pressing "Deploy"
### Error: `Unable to get project name for project ID`
This error occurs when your project ID is not found in our system of records or if Cascade is using the subdomain as the project ID incorrectly. To fix this:
1. Check that the project still exists in your Netlify account (assuming it is claimed).
2. Check that the project ID is in the `windsurf_deployment.yaml` file. If it is not in the file, you can download your config file from your [deploy history](https://windsurf.com/deploy) dropdown.
3. Try redeploying and telling Cascade to use the `project_id` from the `windsurf_deployment.yaml` file more explicitly
# Arena Mode
Source: https://docs.devin.ai/desktop/cascade/arena
Run multiple Cascade instances in parallel using arena mode to explore different approaches simultaneously.
Cascade supports **arena mode** to allow you to easily compare responses from different models on the same prompt.
| Mode | Use Case |
| ---------- | --------------------------------------- |
| **Single** | Run Cascade with a single chosen model |
| **Arena** | Compare responses from different models |
## Arena Mode
To enter arena mode, click the **arena** button in the model picker and choose your preferred models.
When you select multiple models, Cascade will independently execute your prompt with each model in a separate session. Each model also gets its own [worktree](./worktrees) for isolation.
If you want to view both conversations at the same time, you can drag the
Cascade tab into the main editor window to expand the available space.
You can independently continue working in each Cascade conversation, including accepting or rejecting changes or asking follow-up questions.
Since each model has its own [worktree](./worktrees), you can iterate on each response without affecting the other sessions.
### Choosing the better response
When you're ready to commit to a particular approach, you should click the "X is better" button to **discard** other conversations and *converge* all models to continue with your chosen approach.
The next message you send after converging will be sent to all models you have selected, allowing you to continue trying out different approaches.
## Battle Groups
Instead of manually selecting models, you can select one of our curated model groups to have Cascade randomly choose two models to compare. We have three random model groups available:
* **Frontier**: Includes frontier reasoning models like GPT 5.2, Claude Opus/Sonnet 4.5, Gemini 3 Pro, etc., optimized for intelligence.
* **Fast**: Includes fast reasoning models like SWE 1.5, Claude Haiku, GPT-5.3-Codex-Spark, etc., optimized for speed.
* **Hybrid**: A mix of frontier and fast models for a balance of speed and intelligence.
When you use one of the battle groups, the exact model names are hidden from you until you click the "X is better" button to converge the models. Then, the original model names are revealed and the conversations are reshuffled.
## Credit Cost
Arena mode charges the same credit cost for each individual model as running it separately. This means that if you select one 6x model and one 4x model, you will be charged 10 credits for each request.
For battle groups, the credit cost displayed is the cost of each individual model in the group. Since each battle group runs two models, the total credit cost per request is double the displayed cost.
## When To Use Arena Mode
Arena mode is particularly useful when you want to:
* Compare code quality across different models
* Explore different approaches to a hard problem
* Test out a new model without abandoning your standard preference
* Access frontier models at reduced cost by using the battle groups
## Limitations
* Arena mode is only supported for workspaces that have git initialized
* By default, only Git-tracked files are copied into the worktrees created for each model; you can configure a [setup hook](./worktrees#setup-hook) to copy additional files as needed
## Related Features
Isolate parallel work in separate git worktrees.
Automate actions before and after Cascade operations.
# Cascade Overview
Source: https://docs.devin.ai/desktop/cascade/cascade
Cascade is Devin Desktop's agentic AI assistant with Code/Chat modes, tool calling, voice input, checkpoints, real-time awareness, and linter integration.
Devin Desktop's Cascade unlocks a new level of collaboration between human and AI.
To open Cascade, press `Cmd/Ctrl+L` or click the Cascade icon in the top right corner of the Devin Desktop window. Any selected text in the editor or terminal will automatically be included.
### Quick links to features
Search the web for information to be referenced in Cascade's suggestions.
Memories and rules help customize behavior.
MCP servers extend the agent's capabilities.
An upgraded Terminal experience.
Automate repetitive trajectories.
Deploy applications in one click.
# Model selection
Select your desired model from the selection menu below the Cascade conversation input box. Click below to see the full list of the available models and their availability across different plans and pricing.
Model availability in Devin Desktop.
# Cascade Code / Cascade Chat
Cascade comes in two primary modes: **Code** and **Chat**.
Code mode allows Cascade to create and make modifications to your codebase, while Chat mode is optimized for questions around your codebase or general coding principles.
While in Chat mode, Cascade may propose new code to you that you can accept and insert.
# Plans and Todo Lists
Cascade has built-in planning capabilities that help improve performance for longer tasks.
In the background, a specialized planning agent continuously refines the long-term plan while your selected model focuses on taking short-term actions based on that plan.
Cascade will create a Todo list within the conversation to track progress on complex tasks. To make changes to the plan, simply ask Cascade to make updates to the Todo list.
Cascade may also automatically make updates to the plan as it picks up new information, such as a [Memory](/desktop/cascade/memories), during the course of a conversation.
# Queued Messages
While you are waiting for Cascade to finish its current task, you can queue up new messages to execute in order once the task is complete.
To add a message to the queue, simply type in your message while Cascade is working and press `Enter`.
* **Send immediately**: Press Enter again on an empty text box to send it right away.
* **Delete**: Remove any message from the queue before it's sent
# Tool Calling
Cascade has a variety of tools at its disposal, such as Search, Analyze, [Web Search](/desktop/cascade/web-search), [MCP](/desktop/cascade/mcp), and the [terminal](/desktop/terminal).
It can detect which packages and tools that you're using, which ones need to be installed, and even install them for you. Just ask Cascade how to run your project and press Accept.
Cascade can make up to 20 tool calls per prompt. If the trajectory stops, simply press the `continue` button and Cascade will resume from where it left off. However, each `continue` will count as a new prompt credit due to tool calling costs.
You can configure an `Auto-Continue` setting to have Cascade automatically continue its response if it hits a limit. These will consume a prompt credit(s) corresponding to the model you are using.
# Voice input
Use Voice input to use your voice to interact with Cascade. In its current form it can transcribe your speech to text.
# Named Checkpoints and Reverts
You have the ability to revert changes that Cascade has made. Simply hover your mouse over the original prompt and click on the revert arrow on the right, or revert directly from the table of contents. This will revert all code changes back to the state of your codebase at the desired step.
Reverts are currently irreversible, so be careful!
You can also create a named snapshot/checkpoint of the current state of your project from within the conversation, which you can easily navigate to and revert at any time.
# Real-time awareness
A unique capability of Devin Desktop and Cascade is that it is aware of your real-time actions, removing the need to prompt with context on your prior actions.
Simply instruct Cascade to "Continue".
# Send problems to Cascade
When you have problems in your code which show up in the Problems panel at the bottom of the editor, simply click the `Send to Cascade` button to bring them into the Cascade panel as an @ mention.
# Explain and fix
For any errors that you run into from within the editor, you can simply highlight the error and click `Explain and Fix` to have Cascade fix it for you.
# Ignoring files
If you'd like Cascade to ignore files, you can add your files to `.codeiumignore` at the root of your workspace. This will prevent Cascade from viewing, editing or creating files inside of the paths designated. You can declare the file paths in a format similar to `.gitignore`.
## Global .codeiumignore
For enterprise customers managing multiple repositories, you can enforce ignore rules across all repositories by placing a global `.codeiumignore` file in the `~/.codeium/` folder. This global configuration will apply to all Devin Desktop workspaces on your system and works in addition to any repository-specific `.codeiumignore` files.
# Linter integration
Cascade can automatically fix linting errors on generated code. This is turned on by default, but it can be disabled by clicking `Auto-fix` on the tool call, and clicking `disable`. This edit will not consume any credits.
When Cascade makes an edit with the primary goal of fixing lints that it created and auto-detected,
it may discount the edit to be free of credit charge. This is in recognition of the fact that
fixing lint errors increases the number of tool calls that Cascade makes.
# Sharing your conversation
This feature is currently only available for Teams and Enterprise customers.
You can share your Cascade trajectories with your team by clicking the `...` Additional options button in the top right of the Cascade panel, and clicking `Share Conversation`.
# @-mention previous conversations
You can also reference previous conversations with other conversations via an `@-mention`.
When you do this, Cascade will retrieve the most relevant and useful information like the conversation summaries and checkpoints, and specific parts of the conversation that you query for. It typically will not retrieve the full conversation as to not overwhelm the context window.
# Simultaneous Cascades
Users can have multiple Cascades running simultaneously. You can navigate between them using the dropdown menu in the top left of the Cascade panel.
If two Cascades edit the same file at the same time, the edits can race, and sometimes the second edit will fail.
If you expect two Cascades to edit similar files, you should consider using [worktrees](./worktrees) to keep them isolated.
# Cascade Hooks
Source: https://docs.devin.ai/desktop/cascade/hooks
Execute custom shell commands at key points in Cascade's workflow for logging, security controls, validation, and enterprise governance with pre and post hooks.
Cascade Hooks enable you to execute custom shell commands at key points during Cascade's workflow. This powerful extensibility feature allows you to log operations, enforce guardrails, run validation checks, or integrate with external systems.
Hooks are designed for power users and enterprise teams who need fine-grained control over Cascade's behavior. They require basic shell scripting knowledge.
## What You Can Build
Hooks unlock a wide range of automation and governance capabilities:
* **Logging & Analytics**: Track every file read, code change, command executed, user prompt, or Cascade response for compliance and usage analysis
* **Security Controls**: Block Cascade from accessing sensitive files, running dangerous commands, or processing policy-violating prompts
* **Quality Assurance**: Run linters, formatters, or tests automatically after code modifications
* **Custom Workflows**: Integrate with issue trackers, notification systems, or deployment pipelines
* **Team Standardization**: Enforce coding standards and best practices across your organization
## How Hooks Work
Hooks are shell commands that run automatically when specific Cascade actions occur. Each hook:
1. **Receives context** (details about the action being performed) via JSON as standard input
2. **Executes your script** - Python, Bash, Node.js, or any executable
3. **Returns a result** via exit code and output streams
For **pre-hooks** (executed before an action), your script can **block the action** by exiting with exit code `2`. This makes pre-hooks ideal for implementing security policies or validation checks.
## Configuration
Hooks are configured in JSON files that can be placed at three different levels. Cascade loads and merges hooks from all locations, giving teams flexibility in how they distribute and manage hook configurations.
#### System-Level
System-level hooks are ideal for organization-wide policies enforced on shared development machines. For example, you can use them to enforce security policies, compliance requirements, or mandatory code review workflows. Enterprise teams can also configure hooks via the [cloud dashboard](#cloud-dashboard-configuration) without managing local files.
* **macOS**: `/Library/Application Support/Windsurf/hooks.json`
* **Linux/WSL**: `/etc/windsurf/hooks.json`
* **Windows**: `C:\ProgramData\Windsurf\hooks.json`
#### User-Level
User-level hooks are perfect for personal preferences and optional workflows.
* **Devin Desktop IDE**: `~/.codeium/windsurf/hooks.json`
* **JetBrains Plugin**: `~/.codeium/hooks.json`
#### Workspace-Level
Workspace-level hooks allow teams to version control project-specific policies alongside their code. They may include custom validation rules, project-specific integrations, or team-specific workflows.
* **Location**: `.windsurf/hooks.json` in your workspace root
Hooks from all three locations are **merged together**. If the same hook event is configured in multiple locations, all hooks will execute in order: system → user → workspace.
### Basic Structure
Here is an example of the basic structure of the hooks configuration:
```json theme={null}
{
"hooks": {
"pre_read_code": [
{
"command": "python3 /path/to/your/script.py",
"powershell": "python3 C:\\path\\to\\your\\script.py",
"show_output": true
}
],
"post_write_code": [
{
"command": "python3 /path/to/another/script.py",
"show_output": true
}
]
}
}
```
In this example, `pre_read_code` specifies both a macOS/Linux command and a Windows PowerShell command. The `post_write_code` hook only specifies `command`, so it will run on macOS/Linux and fall back to PowerShell on Windows.
### Configuration Options
Each hook accepts the following parameters:
| Parameter | Type | Description |
| ------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| `command` | string | The shell command to execute on **macOS/Linux** (run via `bash -c`). At least one of `command` or `powershell` must be specified. |
| `powershell` | string | Optional. The command to execute on **Windows** (run via `powershell -Command`). If omitted on Windows, `command` is used as a fallback. |
| `show_output` | boolean | Whether to display the hook's stdout/stderr output on the user-facing Cascade UI. Useful for debugging. |
| `working_directory` | string | Optional. The directory to execute the command from. Defaults to your workspace root. |
#### Cross-Platform Behavior
The `command` and `powershell` fields let you define platform-appropriate commands in a single configuration. This is useful for teams with mixed macOS/Linux and Windows fleets.
| Platform | `command` set | `powershell` set | Result |
| ----------- | :-----------: | :--------------: | ------------------------------------------------- |
| macOS/Linux | ✓ | (ignored) | Runs `command` via `bash -c` |
| macOS/Linux | ✗ | ✓ | Hook is silently skipped |
| Windows | ✓ | ✗ | Falls back to `command` via `powershell -Command` |
| Windows | ✗ | ✓ | Runs `powershell` via `powershell -Command` |
| Windows | ✓ | ✓ | Runs `powershell` via `powershell -Command` |
| Any | ✗ | ✗ | Validation error |
**About the `working_directory` parameter:**
* In multi-repo workspaces, the default is the root of the repo currently being worked on
* Relative paths resolve from the default location (workspace or repo root)
* Absolute paths are supported
* Using `~` for home directory expansion is not supported
## Hook Events
Cascade provides twelve hook events that cover the most critical actions in the agent workflow.
### Common Input Structure
All hooks receive a JSON object with the following common fields:
| Field | Type | Description |
| ------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `agent_action_name` | string | The hook event name (e.g., "pre\_read\_code", "post\_write\_code") |
| `trajectory_id` | string | Unique identifier for the overall Cascade conversation |
| `execution_id` | string | Unique identifier for the single agent turn |
| `timestamp` | string | ISO 8601 timestamp when the hook was triggered |
| `model_name` | string | Human-readable name of the model associated with this hook invocation (e.g., "Claude Sonnet 4", "GPT 4.1"). This is the same label shown in the Cascade model selector. The value may change over time as Devin Desktop updates model display names. Set to "Unknown" when the model cannot be determined. |
| `tool_info` | object | Event-specific information (varies by hook type) |
In the following examples, the common fields are omitted for brevity. There are twelve major types of hook events:
### pre\_read\_code
Triggered **before** Cascade reads a code file. This may block the action if the hook exits with code 2.
**Use cases**: Restrict file access, log read operations, check permissions
**Input JSON**:
```json theme={null}
{
"agent_action_name": "pre_read_code",
"tool_info": {
"file_path": "/Users/yourname/project/file.py"
}
}
```
This `file_path` may be a directory path when Cascade reads a directory recursively.
### post\_read\_code
Triggered **after** Cascade successfully reads a code file.
**Use cases**: Log successful reads, track file access patterns
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_read_code",
"tool_info": {
"file_path": "/Users/yourname/project/file.py"
}
}
```
This `file_path` may be a directory path when Cascade reads a directory recursively.
### pre\_write\_code
Triggered **before** Cascade writes or modifies a code file. This may block the action if the hook exits with code 2.
**Use cases**: Prevent modifications to protected files, backup files before changes
**Input JSON**:
```json theme={null}
{
"agent_action_name": "pre_write_code",
"tool_info": {
"file_path": "/Users/yourname/project/file.py",
"edits": [
{
"old_string": "def old_function():\n pass",
"new_string": "def new_function():\n return True"
}
]
}
}
```
### post\_write\_code
Triggered **after** Cascade writes or modifies a code file.
**Use cases**: Run linters, formatters, or tests; log code changes
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_write_code",
"tool_info": {
"file_path": "/Users/yourname/project/file.py",
"edits": [
{
"old_string": "import os",
"new_string": "import os\nimport sys"
}
]
}
}
```
### pre\_run\_command
Triggered **before** Cascade executes a terminal command. This may block the action if the hook exits with code 2.
**Use cases**: Block dangerous commands, log all command executions, add safety checks
**Input JSON**:
```json theme={null}
{
"agent_action_name": "pre_run_command",
"tool_info": {
"command_line": "npm install package-name",
"cwd": "/Users/yourname/project"
}
}
```
### post\_run\_command
Triggered **after** Cascade executes a terminal command.
**Use cases**: Log command results, trigger follow-up actions
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_run_command",
"tool_info": {
"command_line": "npm install package-name",
"cwd": "/Users/yourname/project"
}
}
```
### pre\_mcp\_tool\_use
Triggered **before** Cascade invokes an MCP (Model Context Protocol) tool. This may block the action if the hook exits with code 2.
**Use cases**: Log MCP usage, restrict which MCP tools can be used
**Input JSON**:
```json theme={null}
{
"agent_action_name": "pre_mcp_tool_use",
"tool_info": {
"mcp_server_name": "github",
"mcp_tool_arguments": {
"owner": "code-owner",
"repo": "my-cool-repo",
"title": "Bug report",
"body": "Description of the bug here"
},
"mcp_tool_name": "create_issue"
}
}
```
### post\_mcp\_tool\_use
Triggered **after** Cascade successfully invokes an MCP tool.
**Use cases**: Log MCP operations, track API usage, see MCP results
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_mcp_tool_use",
"tool_info": {
"mcp_result": "...",
"mcp_server_name": "github",
"mcp_tool_arguments": {
"owner": "code-owner",
"perPage": 1,
"repo": "my-cool-repo",
"sha": "main"
},
"mcp_tool_name": "list_commits"
}
}
```
### pre\_user\_prompt
Triggered **before** Cascade processes the text of a user's prompt. This may block the action if the hook exits with code 2.
**Use cases**: Log all user prompts for auditing, block potentially harmful or policy-violating prompts
**Input JSON**:
```json theme={null}
{
"agent_action_name": "pre_user_prompt",
"tool_info": {
"user_prompt": "can you run the echo hello command"
}
}
```
The `show_output` configuration option does not apply to this hook.
### post\_cascade\_response
Triggered asynchronously **after** Cascade completes a response to a user's prompt. This hook receives the full Cascade response ever since the last user input.
**Use cases**: Log all Cascade responses for auditing, analyze response patterns, send responses to external systems for compliance review
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_cascade_response",
"tool_info": {
"response": "### Planner Response\n\nI'll help you create that file.\n\n*Created file `/path/to/file.py`*\n\n### Planner Response\n\nThe file has been created successfully."
}
}
```
The `response` field contains the markdown-formatted content of Cascade's response since the last user input. This includes planner responses, tool actions (file reads, writes, commands), and any other steps Cascade took. It also includes information about which [rules](/desktop/cascade/memories) were triggered. See the [Tracking Triggered Rules](#tracking-triggered-rules) example for how to parse rule usage.
The `show_output` configuration option does not apply to this hook.
The `response` content is derived from trajectory data and may contain sensitive information from your codebase or conversations. Handle this data according to your organization's security and privacy policies.
### post\_cascade\_response\_with\_transcript
Triggered asynchronously **after** Cascade completes a response to a user's prompt, similar to `post_cascade_response`. Instead of providing a markdown summary inline, this hook writes the full conversation transcript (from the beginning of the conversation) to a local JSONL file and provides the file path.
**Use cases**: Enterprise audit and compliance logging, tracking AI-generated contributions, feeding transcripts to external observability or analytics tools
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_cascade_response_with_transcript",
"tool_info": {
"transcript_path": "/Users/yourname/.windsurf/transcripts/{trajectory_id}.jsonl"
}
}
```
The `transcript_path` points to a [JSONL](https://jsonlines.org/) file at `~/.windsurf/transcripts/{trajectory_id}.jsonl`. Each line is a JSON object representing a single step in the conversation, with a `type` and `status` field plus step-specific data. For example:
```jsonl theme={null}
{"status":"done","type":"user_input","user_input":{"rules_applied":{"always_on":["my-rule.md"]},"user_response":"create a hello world file"}}
{"planner_response":{"response":"I'll create a hello world file for you."},"status":"done","type":"planner_response"}
{"code_action":{"new_content":"print('hello world')\n","path":"/path/to/file.py"},"status":"done","type":"code_action"}
{"planner_response":{"response":"I created the file for you."},"status":"done","type":"planner_response"}
```
The transcript includes detailed, customer-owned data such as file contents, command outputs, tool arguments, search results, and [rules](/desktop/cascade/memories) that were applied. Please note that the exact structure of each step may change in future versions, so please build any hook consumers to be resilient.
Transcript files are written with `0600` permissions. Devin Desktop automatically limits the transcripts directory to 100 files, pruning the oldest by modification time.
The `show_output` configuration option does not apply to this hook.
This table shows the key differences between `post_cascade_response` and `post_cascade_response_with_transcript` hooks:
| | `post_cascade_response` | `post_cascade_response_with_transcript` |
| ---------------- | ---------------------------------------- | --------------------------------------------------------------------- |
| **Data scope** | Only the steps since the last user input | The full conversation from the beginning |
| **Format** | Markdown summary in `tool_info.response` | Structured JSONL file at `tool_info.transcript_path` |
| **Detail level** | Condensed, human-readable summary | Detailed, machine-readable data (file contents, command output, etc.) |
| **Delivery** | Inline via stdin JSON | File on disk (`~/.windsurf/transcripts/`) |
Transcript files will contain sensitive information from your codebase including file contents, command outputs, and conversation history. Handle these files according to your organization's security and privacy policies.
### post\_setup\_worktree
Triggered **after** a new [git worktree](./worktrees) is created and configured. The hook is executed inside the new **worktree** directory.
**Use cases**: Copy `.env` files or other untracked files into the worktree, install dependencies, run setup scripts
**Environment Variables**:
| Variable | Description |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `$ROOT_WORKSPACE_PATH` | The absolute path to the original workspace. Use this to access files or run commands relative to the original repository. |
**Input JSON**:
```json theme={null}
{
"agent_action_name": "post_setup_worktree",
"tool_info": {
"worktree_path": "/Users/me/.windsurf/worktrees/my-repo/abmy-repo-c123",
"root_workspace_path": "/Users/me/projects/my-repo"
}
}
```
## Exit Codes
Your hook scripts communicate results through exit codes:
| Exit Code | Meaning | Effect |
| --------- | -------------- | ---------------------------------------------------------------------------------------------------- |
| `0` | Success | Action proceeds normally |
| `2` | Blocking Error | The Cascade agent will see the error message from stderr. For pre-hooks, this **blocks** the action. |
| Any other | Error | Action proceeds normally |
Only **pre-hooks** (pre\_user\_prompt, pre\_read\_code, pre\_write\_code, pre\_run\_command, pre\_mcp\_tool\_use) can block actions using exit code 2. Post-hooks cannot block since the action has already occurred.
Keep in mind that the user can see any hook-generated standard output and standard error in the Cascade UI if `show_output` is true.
## Example Use Cases
### Logging All Cascade Actions
Track every action Cascade takes for auditing purposes.
**Config**:
```json theme={null}
{
"hooks": {
"post_read_code": [
{
"command": "python3 /Users/yourname/hooks/log_input.py",
"show_output": true
}
],
"post_write_code": [
{
"command": "python3 /Users/yourname/hooks/log_input.py",
"show_output": true
}
],
"post_run_command": [
{
"command": "python3 /Users/yourname/hooks/log_input.py",
"show_output": true
}
],
"post_mcp_tool_use": [
{
"command": "python3 /Users/yourname/hooks/log_input.py",
"show_output": true
}
],
"post_cascade_response": [
{
"command": "python3 /Users/yourname/hooks/log_input.py"
}
]
}
}
```
**Script** (`log_input.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
def main():
# Read the JSON data from stdin
input_data = sys.stdin.read()
# Parse the JSON
try:
data = json.loads(input_data)
# Write formatted JSON to file
with open("/Users/yourname/hooks/input.txt", "a") as f:
f.write('\n' + '='*80 + '\n')
f.write(json.dumps(data, indent=2, separators=(',', ': ')))
f.write('\n')
print(json.dumps(data, indent=2))
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
This script appends every hook invocation to a log file, creating an audit trail of all Cascade actions. You may transform the input data or perform custom logic as you see fit.
### Restricting File Access
Prevent Cascade from reading files outside a specific directory.
**Config**:
```json theme={null}
{
"hooks": {
"pre_read_code": [
{
"command": "python3 /Users/yourname/hooks/block_read_access.py",
"show_output": true
}
]
}
}
```
**Script** (`block_read_access.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
ALLOWED_PREFIX = "/Users/yourname/my-project/"
def main():
# Read the JSON data from stdin
input_data = sys.stdin.read()
# Parse the JSON
try:
data = json.loads(input_data)
if data.get("agent_action_name") == "pre_read_code":
tool_info = data.get("tool_info", {})
file_path = tool_info.get("file_path", "")
if not file_path.startswith(ALLOWED_PREFIX):
print(f"Access denied: Cascade is only allowed to read files under {ALLOWED_PREFIX}", file=sys.stderr)
sys.exit(2) # Exit code 2 blocks the action
print(f"Access granted: {file_path}", file=sys.stdout)
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
When Cascade attempts to read a file outside the allowed directory, this hook blocks the operation and displays an error message.
### Blocking Dangerous Commands
Prevent Cascade from executing potentially harmful commands.
**Config**:
```json theme={null}
{
"hooks": {
"pre_run_command": [
{
"command": "python3 /Users/yourname/hooks/block_dangerous_commands.py",
"show_output": true
}
]
}
}
```
**Script** (`block_dangerous_commands.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
DANGEROUS_COMMANDS = ["rm -rf", "sudo rm", "format", "del /f"]
def main():
# Read the JSON data from stdin
input_data = sys.stdin.read()
# Parse the JSON
try:
data = json.loads(input_data)
if data.get("agent_action_name") == "pre_run_command":
tool_info = data.get("tool_info", {})
command = tool_info.get("command_line", "")
for dangerous_cmd in DANGEROUS_COMMANDS:
if dangerous_cmd in command:
print(f"Command blocked: '{dangerous_cmd}' is not allowed for safety reasons.", file=sys.stderr)
sys.exit(2) # Exit code 2 blocks the command
print(f"Command approved: {command}", file=sys.stdout)
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
This hook scans commands for dangerous patterns and blocks them before execution.
### Blocking Policy-Violating Prompts
Prevent users from submitting prompts that violate organizational policies.
**Config**:
```json theme={null}
{
"hooks": {
"pre_user_prompt": [
{
"command": "python3 /Users/yourname/hooks/block_bad_prompts.py"
}
]
}
}
```
**Script** (`block_bad_prompts.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
BLOCKED_PATTERNS = [
"something dangerous",
"bypass security",
"ignore previous instructions"
]
def main():
# Read the JSON data from stdin
input_data = sys.stdin.read()
# Parse the JSON
try:
data = json.loads(input_data)
if data.get("agent_action_name") == "pre_user_prompt":
tool_info = data.get("tool_info", {})
user_prompt = tool_info.get("user_prompt", "").lower()
for pattern in BLOCKED_PATTERNS:
if pattern in user_prompt:
print(f"Prompt blocked: Contains prohibited content. The user cannot ask the agent to do bad things.", file=sys.stderr)
sys.exit(2) # Exit code 2 blocks the prompt
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
This hook examines user prompts before they are processed and blocks any that contain prohibited patterns. When a prompt is blocked, the user sees an error message in the Cascade UI.
### Logging Cascade Responses
Track all Cascade responses for compliance auditing or analytics.
**Config**:
```json theme={null}
{
"hooks": {
"post_cascade_response": [
{
"command": "python3 /Users/yourname/hooks/log_cascade_response.py"
}
]
}
}
```
**Script** (`log_cascade_response.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
from datetime import datetime
def main():
# Read the JSON data from stdin
input_data = sys.stdin.read()
# Parse the JSON
try:
data = json.loads(input_data)
if data.get("agent_action_name") == "post_cascade_response":
tool_info = data.get("tool_info", {})
cascade_response = tool_info.get("response", "")
trajectory_id = data.get("trajectory_id", "unknown")
timestamp = data.get("timestamp", datetime.now().isoformat())
# Log to file
with open("/Users/yourname/hooks/cascade_responses.log", "a") as f:
f.write(f"\n{'='*80}\n")
f.write(f"Timestamp: {timestamp}\n")
f.write(f"Trajectory ID: {trajectory_id}\n")
f.write(f"Response:\n{cascade_response}\n")
print(f"Logged Cascade response for trajectory {trajectory_id}")
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
This hook logs every Cascade response to a file, creating an audit trail of all AI-generated content. You can extend this to send data to external logging systems, databases, or compliance platforms.
### Tracking Triggered Rules
Track which [rules](/desktop/cascade/memories) were applied during Cascade interactions for observability and metrics.
**Config**:
```json theme={null}
{
"hooks": {
"post_cascade_response": [
{
"command": "python3 /Users/yourname/hooks/track_rules.py"
}
]
}
}
```
**Script** (`track_rules.py`):
```python theme={null}
#!/usr/bin/env python3
import sys
import json
import re
from datetime import datetime
def extract_triggered_rules(response: str) -> dict:
"""
Parse triggered rules from the Cascade response.
Rules appear as: - (Rule-Type) Triggered Rule: rule-filename.md
"""
pattern = r"- \(([^)]+)\) Triggered Rule: (.+?)(?:\s*$)"
rules = {}
for match in re.finditer(pattern, response, re.MULTILINE):
rule_type, rule_name = match.groups()
if rule_type not in rules:
rules[rule_type] = []
rules[rule_type].append(rule_name)
return rules
def main():
input_data = sys.stdin.read()
try:
data = json.loads(input_data)
if data.get("agent_action_name") == "post_cascade_response":
response = data.get("tool_info", {}).get("response", "")
trajectory_id = data.get("trajectory_id", "unknown")
timestamp = data.get("timestamp", datetime.now().isoformat())
rules = extract_triggered_rules(response)
total_rules = sum(len(v) for v in rules.values())
# Log to file
with open("/Users/yourname/hooks/rules_usage.log", "a") as f:
f.write(f"\n{'='*60}\n")
f.write(f"Timestamp: {timestamp}\n")
f.write(f"Trajectory: {trajectory_id}\n")
f.write(f"Total rules triggered: {total_rules}\n")
for rule_type, rule_list in rules.items():
if rule_list:
f.write(f" {rule_type}: {', '.join(rule_list)}\n")
print(f"Tracked {total_rules} triggered rules")
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()
```
**Rule types:**
* `Always On` - Rules that are always included
* `Model Decision` - Rules whose descriptions were shown to the model for conditional application
* `Manual` - Rules explicitly @-mentioned in user input
* `Global` - Global rules from `global_rules.md`
* `Glob` - Rules triggered by file access matching glob patterns
This tracks which rules were *presented* to the model or *triggered* by file access, but does not indicate whether the model actually *followed* a rule. Rules that have already been shown recently in the conversation are deduplicated and may not appear again until later.
### Running Code Formatters After Edits
Automatically format code files after Cascade modifies them.
**Config**:
```json theme={null}
{
"hooks": {
"post_write_code": [
{
"command": "bash /Users/yourname/hooks/format_code.sh",
"show_output": false
}
]
}
}
```
**Script** (`format_code.sh`):
```bash theme={null}
#!/bin/bash
# Read JSON from stdin
input=$(cat)
# Extract file path using jq
file_path=$(echo "$input" | jq -r '.tool_info.file_path')
# Format based on file extension
if [[ "$file_path" == *.py ]]; then
black "$file_path" 2>&1
echo "Formatted Python file: $file_path"
elif [[ "$file_path" == *.js ]] || [[ "$file_path" == *.ts ]]; then
prettier --write "$file_path" 2>&1
echo "Formatted JS/TS file: $file_path"
elif [[ "$file_path" == *.go ]]; then
gofmt -w "$file_path" 2>&1
echo "Formatted Go file: $file_path"
fi
exit 0
```
This hook automatically runs the appropriate formatter based on the file type after each edit.
### Setting Up Worktrees
Copy environment files and install dependencies when a new worktree is created.
**Config** (in `.windsurf/hooks.json`):
```json theme={null}
{
"hooks": {
"post_setup_worktree": [
{
"command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
"show_output": true
}
]
}
}
```
**Script** (`hooks/setup_worktree.sh`):
```bash theme={null}
#!/bin/bash
# Copy environment files from the original workspace
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
cp "$ROOT_WORKSPACE_PATH/.env" .env
echo "Copied .env file"
fi
if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
echo "Copied .env.local file"
fi
# Install dependencies
if [ -f "package.json" ]; then
npm install
echo "Installed npm dependencies"
fi
exit 0
```
This hook ensures each worktree has the necessary environment configuration and dependencies installed automatically.
## Best Practices
### Security
**Use Cascade Hooks at Your Own Risk**: Hooks execute shell commands automatically with your user account's full permissions. You are entirely responsible for the code you configure. Poorly designed or malicious hooks can modify files, delete data, expose credentials, or compromise your system.
* **Validate all inputs**: Never trust the input JSON without validation, especially for file paths and commands.
* **Use absolute paths**: Always use absolute paths in your hook configurations to avoid ambiguity.
* **Protect sensitive data**: Avoid logging sensitive information like API keys or credentials.
* **Review permissions**: Ensure your hook scripts have appropriate file system permissions.
* **Audit before deployment**: Review every hook command and script before adding to your configuration.
* **Test in isolation**: Run hooks in a test environment before enabling them on your primary development machine.
### Performance Considerations
* **Keep hooks fast**: Slow hooks will impact Cascade's responsiveness. Aim for sub-100ms execution times.
* **Use async operations**: For non-blocking hooks, consider logging to a queue or database asynchronously.
* **Filter early**: Check the action type at the start of your script to avoid unnecessary processing.
### Error Handling
* **Always validate JSON**: Use try-catch blocks to handle malformed input gracefully.
* **Log errors properly**: Write errors to `stderr` so they're visible when `show_output` is enabled.
* **Fail safely**: If your hook encounters an error, consider whether it should block the action or allow it to proceed.
### Testing Your Hooks
1. **Start with logging**: Begin by implementing a simple logging hook to understand the data flow.
2. **Use `show_output: true`**: Enable output during development to see what your hooks are doing.
3. **Test blocking behavior**: Verify that exit code 2 properly blocks actions in pre-hooks.
4. **Check all code paths**: Test both success and failure scenarios in your scripts.
## Enterprise Distribution
Enterprise organizations need to enforce security policies, compliance requirements, and development standards that individual users cannot bypass. Cascade Hooks supports two enterprise distribution methods:
1. **Cloud Dashboard** - Configure hooks via Team Settings in the Devin Desktop dashboard
2. **System-Level Files** - Deploy hooks via MDM or configuration management tools
Both methods can be used together — hooks from all sources are combined and executed in order.
### Cloud Dashboard Configuration
Team admins can configure Cascade Hooks directly from the Devin Desktop dashboard.
**Requirements:**
* Enterprise plan
* `TEAM_SETTINGS_UPDATE` permission
**To configure:**
1. Navigate to **Team Settings** in the Devin Desktop dashboard
2. Find the **Cascade Hooks** section
3. Enter your hooks configuration in JSON format
4. Save your changes
Hooks configured through the dashboard are automatically distributed to all team members and loaded when Devin Desktop starts. Cloud-configured hooks are loaded first, followed by system-level, user-level, and workspace-level hooks.
When multiple team configurations are merged, hooks are combined per action rather than overwritten. This means hooks from all applicable team configs will run together.
### System-Level File Deployment
For organizations that prefer file-based configuration or need hooks to work offline, deploy your mandatory `hooks.json` configuration to these OS-specific locations:
**macOS:**
```
/Library/Application Support/Windsurf/hooks.json
```
**Linux/WSL:**
```
/etc/windsurf/hooks.json
```
**Windows:**
```
C:\ProgramData\Windsurf\hooks.json
```
Place your hook scripts in a corresponding system directory (e.g., `/usr/local/share/windsurf-hooks/` on Unix systems).
System-level hooks take precedence over user and workspace hooks, and cannot be disabled by end users without root permissions.
#### MDM and Configuration Management
Enterprise IT teams can deploy system-level hooks using standard tools:
**Mobile Device Management (MDM)**
* **Jamf Pro** (macOS) - Deploy via configuration profiles or scripts
* **Microsoft Intune** (Windows/macOS) - Use PowerShell scripts or policy deployment
* **Workspace ONE**, **Google Endpoint Management**, and other MDM solutions
**Configuration Management**
* **Ansible**, **Puppet**, **Chef**, **SaltStack** - Use your existing infrastructure automation
* **Custom deployment scripts** - Shell scripts, PowerShell, or your preferred tooling
#### Verification and Auditing
After deployment, verify that hooks are properly installed:
```bash theme={null}
# Verify system hooks are present
ls -la /etc/windsurf/hooks.json # Linux
ls -la "/Library/Application Support/Windsurf/hooks.json" # macOS
# Test hook execution (should see hook output in Cascade)
# Have a developer trigger the relevant Cascade action
# Verify users cannot modify system hooks
sudo chown root:root /etc/windsurf/hooks.json
sudo chmod 644 /etc/windsurf/hooks.json
```
**Important**: System-level hooks are entirely managed by your IT or security team. Devin Desktop does not deploy or manage files at system-level paths. Ensure your internal teams handle deployment, updates, and compliance according to your organization's policies.
### Workspace Hooks for Team Projects
For project-specific conventions, teams can use workspace-level hooks in version control:
```bash theme={null}
# Add to your repository
.windsurf/
├── hooks.json
└── scripts/
└── format-check.py
# Commit to git
git add .windsurf/
git commit -m "Add workspace hooks for code formatting"
```
This allows teams to standardize development practices. Keep security-critical policies at the cloud or system level, and avoid checking sensitive information into version control.
## Additional Resources
* **MCP Integration**: Learn more about [Model Context Protocol in Devin Desktop](/desktop/cascade/mcp)
* **Workflows**: Discover how to combine hooks with [Cascade Workflows](/desktop/cascade/workflows)
* **Analytics**: Track Cascade usage with [Team Analytics](/desktop/accounts/analytics)
# Model Context Protocol (MCP)
Source: https://docs.devin.ai/desktop/cascade/mcp
Integrate MCP servers with Cascade to access custom tools like GitHub, databases, and APIs. Configure stdio, HTTP, and SSE transports with admin controls for Teams.
**MCP (Model Context Protocol)** is a protocol that enables LLMs to access custom tools and services.
An MCP client (Cascade, in this case) can make requests to MCP servers to access tools that they provide.
Cascade now natively integrates with MCP, allowing you to bring your own selection of MCP servers for Cascade to use.
See the [official MCP docs](https://modelcontextprotocol.io/) for more information.
Enterprise users must manually turn this on via settings
## Adding a new MCP
New MCPs can be added from the MCP Marketplace, which you access by
clicking on the `MCPs` icon in the top right menu in the Cascade panel, or from
the `Devin Settings` > `Cascade` > `MCP Servers` section.
If you cannot find your desired MCP, you can add it manually by editing the raw `mcp_config.json` file.
Official MCPs will show up with a blue checkmark, indicating that they are made by the parent service company.
When you click on a MCP, simply click `Install` to expose the server and its tools to Cascade.
### One-Click Install via Deeplink
Devin Desktop supports one-click MCP installation through deeplinks. You can use these links to open the MCP
registry page directly in Devin Desktop, which is useful for sharing MCP server recommendations or embedding
install buttons in documentation.
The deeplink format is:
```
windsurf://windsurf-mcp-registry?serverName=
```
* **With `serverName`**: Opens the MCP registry page for the specified server, where the user can review and install it.
* **Without `serverName`**: Opens the MCP Marketplace page.
For example, `windsurf://windsurf-mcp-registry?serverName=github-mcp-server` will open the GitHub MCP server's
registry page in Devin Desktop.
One-click install deeplinks require that the user's team has MCP access enabled. If MCP access is disabled by an admin, the deeplink will not open the registry page.
Devin Desktop supports three [transport types](https://modelcontextprotocol.io/docs/concepts/transports) for MCP
servers: `stdio`, `Streamable HTTP`, and `SSE`.
Devin Desktop also supports OAuth for each transport type.
For `http` servers, the URL should reflect that of the endpoint and resemble `https:///mcp`.
## Configuring MCP tools
Each MCP has a certain number of tools it has access to. Cascade has a limit of 100 total tools that it has access to at any given time.
On each MCP settings page, you can toggle the tools that you wish to enable. To
open settings for a MCP, click on the `MCPs` icon in the top right menu in the
Cascade panel, and click on the desired MCP.
## mcp\_config.json
The `~/.codeium/windsurf/mcp_config.json` file is a JSON file that contains a list of servers that Cascade can connect to.
Here’s an example configuration, which sets up a single server for GitHub:
```json theme={null}
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
}
}
```
Be sure to provide the required arguments and environment variables for the servers that you want to use.
See the [official MCP server reference repository](https://github.com/modelcontextprotocol/servers) or [OpenTools](https://opentools.com/) for some example servers.
### Popular MCP Server Examples
Below are configuration examples for some commonly used MCP servers. These can be added to your `mcp_config.json` file.
The GitHub MCP server provides tools for repository management, file operations, issue tracking, and pull request management.
**Using npx:**
```json theme={null}
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
}
}
```
**Using Docker:**
```json theme={null}
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
}
}
```
To create a personal access token, visit [GitHub Settings > Developer settings > Personal access tokens](https://github.com/settings/tokens).
The Slack MCP server enables channel management, messaging, and workspace interactions.
```json theme={null}
{
"mcpServers": {
"slack": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-slack"],
"env": {
"SLACK_BOT_TOKEN": "",
"SLACK_TEAM_ID": ""
}
}
}
}
```
To set up a Slack bot token:
1. Create a Slack App at [api.slack.com/apps](https://api.slack.com/apps)
2. Add the required OAuth scopes (e.g., `channels:read`, `chat:write`, `users:read`)
3. Install the app to your workspace and copy the Bot User OAuth Token
The PostgreSQL MCP server provides read-only access to PostgreSQL databases, including schema inspection and query execution.
```json theme={null}
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_CONNECTION_STRING": "postgresql://user:password@localhost:5432/database"
}
}
}
}
```
The PostgreSQL server provides read-only access by default for safety. Ensure your connection string uses appropriate credentials with limited permissions.
The Filesystem MCP server provides secure access to local files and directories with configurable access controls.
```json theme={null}
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y", "@modelcontextprotocol/server-filesystem",
"/path/to/allowed/directory"
]
}
}
}
```
You can specify multiple allowed directories by adding additional path arguments. Only files within these directories will be accessible.
The Brave Search MCP server enables web search capabilities using Brave's Search API.
```json theme={null}
{
"mcpServers": {
"brave-search": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-server-brave-search"],
"env": {
"BRAVE_API_KEY": ""
}
}
}
}
```
To get a Brave API key, sign up at [brave.com/search/api](https://brave.com/search/api/).
The Memory MCP server provides a persistent memory system using a knowledge graph, allowing Cascade to remember information across sessions.
```json theme={null}
{
"mcpServers": {
"memory": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-memory"]
}
}
}
```
The memory server stores data locally and persists across sessions, making it useful for maintaining context about projects, preferences, and learned information.
### Remote HTTP MCPs
It's important to note that for remote HTTP MCPs, the configuration is slightly
different and requires a `serverUrl` or `url` field.
Here's an example configuration for an HTTP server:
```json theme={null}
{
"mcpServers": {
"remote-http-mcp": {
"serverUrl": "/mcp",
"headers": {
"API_KEY": "value"
}
}
}
}
```
### Config Interpolation
The `~/.codeium/windsurf/mcp_config.json` file supports variable interpolation
in the following fields: `command`, `args`, `env`, `serverUrl`, `url`, and
`headers`. This lets you avoid hardcoding secrets directly in the config file.
Two interpolation patterns are supported:
* **`${env:VAR_NAME}`** — replaced with the value of the environment variable `VAR_NAME`. If the variable is not set, it resolves to an empty string.
* **`${file:/path/to/file}`** — replaced with the trimmed contents of the file at the given path. Tilde paths (e.g. `~/secrets/key.txt`) are supported. If the file cannot be read, the pattern is left unchanged.
Here's an example using an environment variable in `headers`:
```json theme={null}
{
"mcpServers": {
"remote-http-mcp": {
"serverUrl": "/mcp",
"headers": {
"API_KEY": "Bearer ${env:AUTH_TOKEN}"
}
}
}
}
```
Here's an example reading an API key from a file:
```json theme={null}
{
"mcpServers": {
"my-server": {
"command": "node",
"args": ["server.js"],
"env": {
"API_KEY": "${file:~/.secrets/api_key.txt}"
}
}
}
}
```
## Admin Controls (Teams & Enterprises)
Team admins can toggle MCP access for their team, as well as whitelist approved MCP servers for their team to use:
### MCP Registry
Enterprise teams can configure custom MCP registries to replace the default Devin Desktop MCP marketplace. Teams can link their own registry URLs to control which MCPs are available to their users.
Registries are the preferred approach for managing MCP access, though whitelists will also work.
#### Configuring Custom Registries
1. Navigate to your team settings
2. Find the **MCP Registry URLs** setting
3. Add one or more registry URLs
When multiple registry URLs are configured, Devin Desktop takes the **union** of all registries—users will see MCPs from all configured sources combined. The team's MCP marketplace will then fetch from these internal registries rather than the default Devin Desktop registry.
Custom registries must follow the [official MCP registry schema](https://modelcontextprotocol.io/). This ensures compatibility and standardized server definitions.
### MCP Whitelist
Configurable MCP settings for your team.
The above link will only work if you have admin privileges for your team.
By default, users within a team will be able to configure their own MCP servers. However, once you whitelist even a single MCP server, **all non-whitelisted servers will be blocked** for your team.
The Server ID in the whitelist must match the key name (case-sensitive) used in the user's `mcp_config.json`.
### How Server Matching Works
When you whitelist an MCP server, the system uses **regex pattern matching** with the following rules:
* **Full String Matching**: All patterns are automatically anchored (wrapped with `^(?:pattern)$`) to prevent partial matches
* **Command Field**: Must match exactly or according to your regex pattern
* **Arguments Array**: Each argument is matched individually against its corresponding pattern
* **Array Length**: The number of arguments must match exactly between whitelist and user config
* **Special Characters**: Characters like `$`, `.`, `[`, `]`, `(`, `)` have special regex meaning and should be escaped with `\` if you want literal matching
### Configuration Options
**Admin Whitelist Configuration:**
* **Server ID**: `github-mcp-server`
* **Server Config (JSON)**: *(leave empty)*
```json theme={null}
{}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"github-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}
```
This allows users to install the GitHub MCP server with any valid configuration, as long as the server ID matches the plugin store entry.
**Admin Whitelist Configuration:**
* **Server ID**: `github-mcp-server`
* **Server Config (JSON)**:
```json theme={null}
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"github-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}
```
Users must use this exact configuration - any deviation in command or args will be blocked. The `env` section can have different values.
**Admin Whitelist Configuration:**
* **Server ID**: `python-mcp-server`
* **Server Config (JSON)**:
```json theme={null}
{
"command": "python3",
"args": ["/.*\\.py", "--port", "[0-9]+"]
}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"python-mcp-server": {
"command": "python3",
"args": ["/home/user/my_server.py", "--port", "8080"],
"env": {
"PYTHONPATH": "/home/user/mcp"
}
}
}
}
```
This example allows users flexibility while maintaining security:
* The regex `/.*\\.py` matches any Python file path like `/home/user/my_server.py`
* The regex `[0-9]+` matches any numeric port like `8080` or `3000`
* Users can customize file paths and ports while admins ensure only Python scripts are executed
### Common Regex Patterns
| Pattern | Matches | Example |
| --------------- | ------------------------- | ---------------------- |
| `.*` | Any string | `/home/user/script.py` |
| `[0-9]+` | Any number | `8080`, `3000` |
| `[a-zA-Z0-9_]+` | Alphanumeric + underscore | `api_key_123` |
| `\\$HOME` | Literal `$HOME` | `$HOME` (not expanded) |
| `\\.py` | Literal `.py` | `script.py` |
| `\\[cli\\]` | Literal `[cli]` | `mcp[cli]` |
## Notes
### Admin Configuration Guidelines
* **Environment Variables**: The `env` section is not regex-matched and can be configured freely by users
* **Disabled Tools**: The `disabledTools` array is handled separately and not part of whitelist matching
* **Case Sensitivity**: All matching is case-sensitive
* **Error Handling**: Invalid regex patterns will be logged and result in access denial
* **Testing**: Test your regex patterns carefully - overly restrictive patterns may block legitimate use cases
### Troubleshooting
If users report that their MCP servers aren't working after whitelisting:
1. **Check Exact Matching**: Ensure the whitelist pattern exactly matches the user's configuration
2. **Verify Regex Escaping**: Special characters may need escaping (e.g., `\.` for literal dots)
3. **Review Logs**: Invalid regex patterns are logged with warnings
4. **Test Patterns**: Use a regex tester to verify your patterns work as expected
Remember: Once you whitelist any server, **all other servers are automatically blocked** for your team members.
### General Information
* Since MCP tool calls can invoke code written by arbitrary server implementers, we do not assume liability
for MCP tool call failures. To reiterate:
* We currently support an MCP server's [tools](https://modelcontextprotocol.io/docs/concepts/tools), [resources](https://modelcontextprotocol.io/docs/concepts/resources), and [prompts](https://modelcontextprotocol.io/docs/concepts/prompts).
# Memories & Rules
Source: https://docs.devin.ai/desktop/cascade/memories
Persist context across Cascade conversations with auto-generated memories and user-defined rules at global, workspace, and system levels for enterprise teams.
`Memories` is the system for sharing and persisting context across conversations.
There are two mechanisms for this in Devin Desktop: **Memories**, which are automatically generated by Cascade, and **Rules**, which are manually defined by the user at the global, workspace, or system level.
## Memories, Rules, Workflows, or Skills?
Devin Desktop offers several ways to customize Cascade. Use this table to pick the right one:
| Feature | What it does | How it's activated | When to use it |
| ------------------------------------------- | ------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| **[Rules](#rules)** | Tell Cascade *how to behave* (e.g. "use bun, not npm") | `always_on`, `glob`, `model_decision`, or `manual` ([see below](#activation-modes)) | Coding conventions, style guides, project constraints |
| **[AGENTS.md](/desktop/cascade/agents-md)** | Location-scoped rules with zero config | Automatic — root = always-on, subdirectory = glob | Directory-specific conventions without frontmatter |
| **[Workflows](/desktop/cascade/workflows)** | Prompt templates for repeatable multi-step tasks | **Manual only** via `/[workflow-name]` slash command | Deployments, PR reviews, release checklists |
| **[Skills](/desktop/cascade/skills)** | Multi-step procedures bundled with supporting files (scripts, templates) | Dynamically invoked by the model, or `@mention` | Complex tasks where Cascade needs reference files — **invest here** |
| **[Memories](#memories)** | Context Cascade auto-generates during conversations | Automatic retrieval when relevant | Let Cascade remember one-off facts; for durable knowledge, prefer Rules or AGENTS.md |
**Recommendation:** For knowledge you want Cascade to reliably reuse, write it as a Rule or add it to `AGENTS.md` in your repo rather than relying on auto-generated Memories. Rules are version-controlled, shareable with your team, and give you explicit control over activation.
## How to Manage Memories
Memories and Rules can be accessed and configured at any time by clicking on the `Customizations` icon in the top right slider menu in Cascade, or via “Devin - Settings” in the bottom-right hand corner. To edit an existing memory, simply click into it and then click the `Edit` button.
## Memories
During conversation, Cascade can automatically generate and store memories if it encounters context that it believes is useful to remember.
Additionally, you can ask Cascade to create a memory at any time. Just prompt Cascade to "create a memory of ...".
Cascade's autogenerated memories are associated with the workspace they were created in and are stored locally in `~/.codeium/windsurf/memories/`. Cascade retrieves them when it believes they're relevant. Memories generated in one workspace are not available in another, and they are not committed to your repository.
Creating and using auto-generated memories do NOT consume credits.
Auto-generated memories live only on your machine. If you want Cascade to remember something durably — and share it with your team — ask Cascade to write it to a [Rule](#rules) in `.devin/rules/` (or the legacy `.windsurf/rules/`) or to your repo's `AGENTS.md` instead.
## Rules
Users can explicitly define their own rules for Cascade to follow.
Rules can be defined at the global, workspace, or system level, and can also be inferred from [AGENTS.md](/desktop/cascade/agents-md) files.
| Scope | Location | Notes |
| ----------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Global | `~/.codeium/windsurf/memories/global_rules.md` | Single file, applied across all workspaces. Always on. Limited to 6,000 characters. |
| Workspace | `.devin/rules/*.md` (preferred) or `.windsurf/rules/*.md` (fallback) | One file per rule, each with its own [activation mode](#activation-modes). Limited to 12,000 characters per file. The legacy single-file `.windsurfrules` at the workspace root is also still read. |
| [AGENTS.md](/desktop/cascade/agents-md) | Any directory in your workspace | Processed by the same Rules engine — root-level = always-on, subdirectory = auto-glob for that directory. |
| [System (Enterprise)](#system-level-rules-enterprise) | OS-specific (e.g. `/etc/devin/rules/`, legacy `/etc/windsurf/rules/`) | Deployed by IT, read-only for end users. |
## Rules Discovery
Devin Desktop automatically discovers rules from multiple locations to provide flexible organization. The `.devin/` directory is the preferred location and takes precedence, with `.windsurf/` kept as a fallback for backward compatibility:
* **Current workspace and sub-directories**: All `.devin/rules` (and legacy `.windsurf/rules`) directories within your current workspace and its sub-directories
* **Git repository structure**: For git repositories, Devin Desktop also searches up to the git root directory to find rules in parent directories
* **Multiple workspace support**: When multiple folders are open in the same workspace, rules are deduplicated and displayed with the shortest relative path
### Rules Storage Locations
Rules can be stored in any of these locations (`.devin/` is preferred and takes precedence over `.windsurf/`):
* `.devin/rules` or `.windsurf/rules` in your current workspace directory
* `.devin/rules` or `.windsurf/rules` in any sub-directory of your workspace
* `.devin/rules` or `.windsurf/rules` in parent directories up to the git root (for git repositories)
When you create a new rule, it will be saved in the `.devin/rules` directory of your current workspace, not necessarily at the git root.
To get started with Rules, click on the `Customizations` icon in the top right slider menu in Cascade, then navigate to the `Rules` panel. Here, you can click on the `+ Global` or `+ Workspace` button to create new rules at either the global or workspace level, respectively.
You can find example rule templates curated by the Devin Desktop team at [https://windsurf.com/editor/directory](https://windsurf.com/editor/directory) to help you get started.
Workspace rule files are limited to 12,000 characters each. The global rules file is limited to 6,000 characters.
### Activation Modes
Each workspace rule declares an activation mode in its frontmatter via the `trigger` field. This controls **when** the rule's content is given to Cascade and **how much context window it consumes**:
| Mode | `trigger:` value | How it reaches Cascade | Context cost |
| ------------------ | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| **Always On** | `always_on` | Full rule content is included in the system prompt on every message. | Every message |
| **Model Decision** | `model_decision` | Only the `description` is shown in the system prompt. Cascade reads the full rule file when it decides the description is relevant. | Description always; full content on demand |
| **Glob** | `glob` | Rule is applied when Cascade reads or edits a file matching the `globs` pattern (e.g. `*.js`, `src/**/*.ts`). | Only when matching files are touched |
| **Manual** | `manual` | Rule is **not** in the system prompt. You activate it by typing `@rule-name` in the Cascade input box. | Only when @mentioned |
The global rules file (`global_rules.md`) and root-level `AGENTS.md` files don't use frontmatter — they are always on.
Example workspace rule with frontmatter:
```markdown theme={null}
---
trigger: glob
globs: **/*.test.ts
---
All test files must use `describe`/`it` blocks and mock external API calls.
```
### Best Practices
To help Cascade follow your rules effectively, follow these best practices:
* Keep rules simple, concise, and specific. Rules that are too long or vague may confuse Cascade.
* There's no need to add generic rules (e.g. "write good code"), as these are already baked into Cascade's training data.
* Format your rules using bullet points, numbered lists, and markdown. These are easier for Cascade to follow compared to a long paragraph. For example:
```
# Coding Guidelines
- My project's programming language is python
- Use early returns when possible
- Always add documentation when creating new functions and classes
```
* XML tags can be an effective way to communicate and group similar rules together. For example:
```
- My project's programming language is python
- Use early returns when possible
- Always add documentation when creating new functions and classes
```
## System-Level Rules (Enterprise)
Enterprise organizations can deploy system-level rules that apply globally across all workspaces and cannot be modified by end users without administrator permissions. This is ideal for enforcing organization-wide coding standards, security policies, and compliance requirements.
System-level rules are loaded from OS-specific directories. The `Devin` directory is preferred and takes precedence, with the legacy `Windsurf` directory kept as a fallback:
**macOS:**
```
/Library/Application Support/Devin/rules/*.md
/Library/Application Support/Windsurf/rules/*.md # legacy fallback
```
**Linux/WSL:**
```
/etc/devin/rules/*.md
/etc/windsurf/rules/*.md # legacy fallback
```
**Windows:**
```
C:\ProgramData\Devin\rules\*.md
C:\ProgramData\Windsurf\rules\*.md # legacy fallback
```
Place your rule files (as `.md` files) in the appropriate directory for your operating system. The system will automatically load all `.md` files from these directories.
### How System Rules Work
System-level rules are merged with workspace and global rules, providing additional context to Cascade without overriding user-defined rules. This allows organizations to establish baseline standards while still permitting teams to add project-specific customizations.
In the Devin Desktop UI, system-level rules are displayed with a "System" label and cannot be deleted by end users.
**Important**: System-level rules should be managed by your IT or security team. Ensure your internal teams handle deployment, updates, and compliance according to your organization's policies. You can use standard tools and workflows such as Mobile Device Management (MDM) or Configuration Management to do so.
# Cascade Modes
Source: https://docs.devin.ai/desktop/cascade/modes
Cascade offers multiple distinct modes, each optimized for different types of tasks.
Cascade offers three distinct modes, each with a different set of capabilities designed for specific workflows.
| Mode | Use case | Tools |
| ------------------ | ----------------------------------- | ----------------- |
| [Code](#code-mode) | Complex features, refactoring | All tools enabled |
| [Plan](#plan-mode) | Complex features requiring planning | All tools enabled |
| [Ask](#ask-mode) | Learning, planning, questions | Search tools only |
You can switch between different modes using the mode toggle below the Cascade input box, or by using the keyboard shortcut `⌘+.` (Mac) or `Ctrl+.` (Windows/Linux).
## Code Mode
**Code mode** is Devin Desktop's default fully agentic mode, designed for making changes to your codebase.
In Code mode, Cascade can:
* Create, edit, and delete files
* Run terminal commands
* Search and analyze your codebase
* Install dependencies
* Execute multi-step tasks autonomously
Use Code mode when you want Cascade to actively work on your project and implement changes.
We recommend you use Code mode as your default mode for most tasks.
## Plan Mode
**Plan mode** helps you think through complex tasks by developing a detailed implementation plan before writing any code.
In Plan mode, Cascade will:
* Explore your codebase to understand the current state
* Ask clarifying questions to ensure the plan aligns with your goals
* Provide multiple options for you to choose from with an interactive interface
* Present a detailed plan, written in an external Markdown file, with implementation steps
When Cascade is finished, you can click "Implement" on the plan file to automatically switch to Code mode and begin implementing the plan.
### Continuing from a plan
The markdown file created in plan mode can be particularly useful for continuing work across multiple sessions.
Plans are stored in your `~/.windsurf/plans` directory and are available in the [@mentions](/desktop/chat/overview#%40-mentions) menu.
By mentioning a plan file, you can continue implementation with a fresh context.
This can be particularly useful when an initial implementation went awry: just discard the original changes, tweak the plan file, and click "Implement" to attempt implementation again in a new conversation.
### Exiting plan mode
There are multiple different ways to move from planning to implementation:
* Click the "Implement" button on the plan file
* Change your mode to Code mode in the input box
* Let the agent *automatically* switch to Code mode when it detects that you're ready to implement
## Ask Mode
**Ask mode** is a read-only mode optimized for questions and exploration.
In ask mode, Cascade can search and analyze your codebase, but cannot make any changes.
# Skills
Source: https://docs.devin.ai/desktop/cascade/skills
Skills help Cascade handle complex, multi-step tasks.
The hardest engineering tasks often take more than just good prompts. They might require reference scripts, templates, checklists, and other supporting files. Skills let you bundle all of these together into folders that Cascade can invoke (read and use).
Skills are a great way to teach Cascade how to execute multi-step workflows consistently.
Cascade uses [**progressive disclosure**](https://agentskills.io/what-are-skills#how-skills-work): only the skill's `name` and `description` are shown to the model by default. The full `SKILL.md` content and supporting files are loaded **only when Cascade decides to invoke the skill** (or when you `@mention` it). This keeps your context window lean even with many skills defined.
For more details on the Skills specification, visit [agentskills.io](https://agentskills.io/home).
## How to Create a Skill
### Using the UI (easiest)
1. Open the Cascade panel
2. Click the three dots in the top right of the panel to open up the customizations menu
3. Click on the `Skills` section
4. Click `+ Workspace` to create a workspace (project-specific) skill, or `+ Global` to create a global skill
5. Name the skill (lowercase letters, numbers, and hyphens only)
### Manual Creation
**Workspace Skill (project-specific):**
1. Create a directory: `.windsurf/skills//`
2. Add a `SKILL.md` file with YAML frontmatter
**Global Skill (available in all workspaces):**
1. Create a directory: `~/.codeium/windsurf/skills//`
2. Add a `SKILL.md` file with YAML frontmatter
## SKILL.md File Format
Each skill requires a `SKILL.md` file with YAML frontmatter containing the skill's metadata:
### Example skill
```markdown theme={null}
---
name: deploy-to-production
description: Guides the deployment process to production with safety checks
---
## Pre-deployment Checklist
1. Run all tests
2. Check for uncommitted changes
3. Verify environment variables
## Deployment Steps
Follow these steps to deploy safely...
[Reference supporting files in this directory as needed]
```
### Required Frontmatter Fields
* **name**: Unique identifier for the skill (displayed in UI and used for @-mentions)
* **description**: Brief explanation shown to the model to help it decide when to invoke the skill
Examples of valid names: `deploy-to-staging`, `code-review`, `setup-dev-environment`
## Adding Supporting Resources
Place any supporting files in the skill folder alongside `SKILL.md`. These files become available to Cascade when the skill is invoked:
```
.windsurf/skills/deploy-to-production/
├── SKILL.md
├── deployment-checklist.md
├── rollback-procedure.md
└── config-template.yaml
```
## Invoking Skills
### Automatic Invocation
When your request matches a skill's description, Cascade automatically invokes the skill and uses its instructions and resources to complete the task. This is the most common way skills are used—you simply describe what you want to do, and Cascade determines which skills are relevant.
The `description` field in your skill's frontmatter is key: it helps Cascade understand when to invoke the skill. Write descriptions that clearly explain what the skill does and when it should be used.
### Manual Invocation
You can always explicitly activate a skill by typing `@skill-name` in the Cascade input. This is useful when you want to ensure a specific skill is used, or when you want to invoke a skill that might not be automatically triggered by your request.
## Skill Scopes
| Scope | Location | Availability |
| ------------------- | ----------------------------- | ------------------------------------------------- |
| Workspace | `.windsurf/skills/` | Current workspace only. Committed with your repo. |
| Global | `~/.codeium/windsurf/skills/` | All workspaces on your machine. Not committed. |
| System (Enterprise) | OS-specific (see below) | All workspaces, deployed by IT. Read-only. |
For cross-agent compatibility, Devin Desktop also discovers skills in `.agents/skills/` and `~/.agents/skills/`. If you have enabled Claude Code config reading, `.claude/skills/` and `~/.claude/skills/` are scanned as well.
### System-Level Skills (Enterprise)
Enterprise organizations can deploy skills that are available across all workspaces and cannot be modified by end users:
| OS | Path |
| --------- | ----------------------------------------------- |
| macOS | `/Library/Application Support/Windsurf/skills/` |
| Linux/WSL | `/etc/windsurf/skills/` |
| Windows | `C:\ProgramData\Windsurf\skills\` |
Each skill is a subdirectory containing a `SKILL.md` file, just like workspace skills.
## Example Use Cases
### Deployment Workflow
Create a skill with deployment scripts, environment configs, and rollback procedures:
```
.windsurf/skills/deploy-staging/
├── SKILL.md
├── pre-deploy-checks.sh
├── environment-template.env
└── rollback-steps.md
```
### Code Review Guidelines
Include style guides, security checklists, and review templates:
```
.windsurf/skills/code-review/
├── SKILL.md
├── style-guide.md
├── security-checklist.md
└── review-template.md
```
### Testing Procedures
Bundle test templates, coverage requirements, and CI/CD configs:
```
.windsurf/skills/run-tests/
├── SKILL.md
├── test-template.py
├── coverage-config.json
└── ci-workflow.yaml
```
## Best Practices
1. **Write clear descriptions**: The description helps Cascade decide when to invoke the skill. Be specific about what the skill does and when it should be used.
2. **Include relevant resources**: Templates, checklists, and examples make skills more useful. Think about what files would help someone complete the task.
3. **Use descriptive names**: `deploy-to-staging` is better than `deploy1`. Names should clearly indicate what the skill does.
## Skills vs Rules vs Workflows
All three customize Cascade, but they differ in **structure**, **invocation**, and **context cost**:
| | Skills | Rules | Workflows |
| --------------------- | ------------------------------------------------------------------------ | -------------------------------------------------- | ---------------------------------------- |
| **Purpose** | Multi-step procedures with supporting files | Behavioral guidelines ("how to behave") | Prompt templates for repeatable tasks |
| **Structure** | Folder with `SKILL.md` + any resource files | Single `.md` file with frontmatter | Single `.md` file |
| **Invocation** | Model decides (progressive disclosure) or `@mention` | `always_on` / `glob` / `model_decision` / `manual` | **Manual only** via `/slash-command` |
| **In system prompt?** | No — only name + description until invoked | Depends on activation mode | No — listed as available commands |
| **Best for** | Deployments, code review, testing procedures that need scripts/templates | Coding style, project conventions, constraints | One-shot runbooks you trigger explicitly |
**Rule of thumb:** if Cascade should pick it up automatically *and* it needs supporting files, use a Skill. If it's a short behavioral constraint, use a Rule. If you always want to trigger it yourself, use a Workflow.
## Related Documentation
If Skills aren't what you're looking for, check out these other Cascade features:
* **[Workflows](./workflows)** - Automate repetitive tasks with reusable markdown workflows invoked via slash commands
* **[AGENTS.md](./agents-md)** - Provide directory-scoped instructions that automatically apply based on file location
* **[Memories & Rules](./memories)** - Persist context across conversations with auto-generated memories and user-defined rules
# Web and Docs Search
Source: https://docs.devin.ai/desktop/cascade/web-search
Search the web and documentation directly from Cascade using @web and @docs mentions, URL parsing, and real-time context from web pages.
Cascade can now intuitively parse through and chunk up web pages and documentation, providing real-time context to the models. The key way to understand this feature is that Cascade will browse the Internet as a human would.
Our web tools are designed in such a way that gets only the information that is necessary in order to efficiently use your credits.
## Overview
To help you better understand how Web Search works, we've recorded a short video covering the key concepts and best practices.
### Quick Start
The fastest way to get started is to activate web search in your Devin Settings in the bottom right corner of the editor. You can activate it a couple of different ways:
1. Ask a question that probably needs the Internet (i.e., "What's new in the latest version of React?").
2. Use `@web` to force a docs search.
3. Use `@docs` to query over a list of docs that we are confident we can read with high quality.
4. Paste a URL into your message.
## Search the web
Cascade can deduce that certain prompts from the user may require a real-time web search to provide the optimal response. In these cases, Cascade will perform a web search and provide the results to the user. This can happen automatically or manually using the `@web` mention.
The **Enable Web Search** admin setting controls whether Cascade can perform web searches on the open Internet. It does not affect Cascade's ability to read specific URLs (see [Reading Pages](#reading-pages) below), which is performed locally on the user's machine.
## Reading Pages
Cascade can read individual pages for things like documentation, blog posts, and GitHub files. The page reads happen entirely on your device within your network so if you're using a VPN you shouldn't have any problems.
Pages are picked up either from web search results, inferred based on the conversation, or from URLs pasted directly into your message.
We break pages up into multiple chunks, very similar to how a human would read a page: for a long page we skim to the section we want then read the text that's relevant. This is how Cascade operates as well.
It's worth noting that not all pages can be parsed. We are actively working on improving the quality of our website reading. If you have specific sites you'd like us to handle better, feel free to file a feature request!
# Workflows
Source: https://docs.devin.ai/desktop/cascade/workflows
Automate repetitive tasks in Cascade with reusable workflows defined as markdown files. Create PR review, deployment, testing, and code formatting workflows.
Workflows enable users to define a series of steps to guide Cascade through a repetitive set of tasks, such as deploying a service or responding to PR comments.
These Workflows are saved as markdown files, allowing users and their teams an easy repeatable way to run key processes.
Once saved, Workflows can be invoked in Cascade via a slash command with the format of `/[name-of-workflow]`.
Workflows are **manual-only** — Cascade will never invoke a workflow automatically. If you want Cascade to pick up a procedure on its own, use a [Skill](/desktop/cascade/skills) instead.
## How it works
Rules generally provide large language models with guidance by providing persistent, reusable context at the prompt level.
Workflows extend this concept by providing a structured sequence of steps or prompts at the trajectory level, guiding the model through a series of interconnected tasks or actions.
To execute a Workflow, users simply invoke it in Cascade using the `/[workflow-name]` command.
You can call other Workflows from within a Workflow!
For example, /workflow-1 can include instructions like "Call /workflow-2" and "Call /workflow-3".
Upon invocation, Cascade sequentially processes each step defined in the Workflow, performing actions or generating responses as specified.
## How to create a Workflow
To get started with Workflows, click on the `Customizations` icon in the top right slider menu in Cascade, then navigate to the `Workflows` panel. Here, you can click on the `+ Workflow` button to create a new Workflow.
Workflows are saved as markdown files within `.windsurf/workflows/` directories and contain a title, description, and a series of steps with specific instructions for Cascade to follow.
## Workflow Discovery
Devin Desktop automatically discovers workflows from multiple locations to provide flexible organization:
* **Current workspace and sub-directories**: All `.windsurf/workflows/` directories within your current workspace and its sub-directories
* **Git repository structure**: For git repositories, Devin Desktop also searches up to the git root directory to find workflows in parent directories
* **Multiple workspace support**: When multiple folders are open in the same workspace, workflows are deduplicated and displayed with the shortest relative path
### Workflow Storage Locations
| Scope | Location | Notes |
| --------------------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| Workspace | `.windsurf/workflows/*.md` | In your current workspace, any sub-directory, or any parent directory up to the git root. Committed with your repo. |
| Global | `~/.codeium/windsurf/global_workflows/*.md` | Available in every workspace on your machine. Not committed. |
| Built-in | Managed by Devin Desktop | Templates shipped with Devin Desktop (e.g. `/plan`). |
| [System (Enterprise)](#system-level-workflows-enterprise) | OS-specific (e.g. `/etc/windsurf/workflows/`) | Deployed by IT, read-only for end users. |
When you create a new workflow through the UI, it will be saved in the `.windsurf/workflows/` directory of your current workspace, not necessarily at the git root. To create a global workflow, use the `+ Global` button in the Workflows panel or create the file directly in `~/.codeium/windsurf/global_workflows/`.
Workflow files are limited to 12000 characters each.
### Generate a Workflow with Cascade
You can also ask Cascade to generate Workflows for you! This works particularly well for Workflows involving a series of steps in a particular CLI tool.
## Example Workflows
There are a myriad of use cases for Workflows, such as:
This is a Workflow our team uses internally to address PR comments:
```
1. Check out the PR branch: `gh pr checkout [id]`
2. Get comments on PR
bash
gh api --paginate repos/[owner]/[repo]/pulls/[id]/comments | jq '.[] | {user: .user.login, body, path, line, original_line, created_at, in_reply_to_id, pull_request_review_id, commit_id}'
3. For EACH comment, do the following. Remember to address one comment at a time.
a. Print out the following: "(index). From [user] on [file]:[lines] — [body]"
b. Analyze the file and the line range.
c. If you don't understand the comment, do not make a change. Just ask me for clarification, or to implement it myself.
d. If you think you can make the change, make the change BEFORE moving onto the next comment.
4. After all comments are processed, summarize what you did, and which comments need the USER's attention.
```
Commit using predefined formats and create pull requests with standardized title and descriptions using the appropriate CLI commands.
Automate the installation or updating of project dependencies based on a configuration file (e.g., requirements.txt, package.json).
Automatically run code formatters (like Prettier, Black) and linters (like ESLint, Flake8) on file save or before committing to maintain code style and catch errors early.
Run or add unit or end-to-end tests and fix the errors automatically to ensure code quality before committing, merging, or deploying.
Automate the steps to deploy your application to various environments (development, staging, production), including any necessary pre-deployment checks or post-deployment verifications.
Integrate and trigger security vulnerability scans on your codebase as part of the CI/CD pipeline or on demand.
## System-Level Workflows (Enterprise)
Enterprise organizations can deploy system-level workflows that are available globally across all workspaces and cannot be modified by end users without administrator permissions. This is ideal for enforcing organization-wide development processes, deployment procedures, and compliance workflows.
System-level workflows are loaded from OS-specific directories:
**macOS:**
```
/Library/Application Support/Windsurf/workflows/*.md
```
**Linux/WSL:**
```
/etc/windsurf/workflows/*.md
```
**Windows:**
```
C:\ProgramData\Windsurf\workflows\*.md
```
Place your workflow files (as `.md` files) in the appropriate directory for your operating system. The system will automatically load all `.md` files from these directories.
### Workflow Precedence
When workflows with the same name exist at multiple levels, system-level workflows take the highest precedence:
1. **System** (highest priority) - Organization-wide workflows deployed by IT
2. **Workspace** - Project-specific workflows in `.windsurf/workflows/`
3. **Global** - User-defined workflows in `~/.codeium/windsurf/global_workflows/`
4. **Built-in** - Default workflows provided by Devin Desktop
This means that if an organization deploys a system-level workflow with a specific name, it will override any workspace, global, or built-in workflow with the same name.
In the Devin Desktop UI, system-level workflows are displayed with a "System" label and cannot be deleted by end users.
**Important**: System-level workflows should be managed by your IT or security team. Ensure your internal teams handle deployment, updates, and compliance according to your organization's policies. You can use standard tools and workflows such as Mobile Device Management (MDM) or Configuration Management to do so.
# Worktrees
Source: https://docs.devin.ai/desktop/cascade/worktrees
Automatically set up git worktrees for parallel Cascade tasks
Devin Desktop supports using git worktrees to run Cascade tasks in parallel without interfering with your main workspace.
When using worktrees, each Cascade conversation gets its own session, allowing Cascade to make edits, or build and test code without interfering with your main workspace.
## Basic worktree usage
The simplest way to get started with using worktrees is switch to the "Worktree" mode in the bottom right corner of the Cascade input.
Currently, you can only switch to a worktree at the beginning of a Cascade session. Conversations cannot be moved to a different worktree once started.
After Cascade makes file changes in the worktree, you have the option of clicking "merge" to incorporate those changes back into your main workspace.
## Location
Worktrees are organized by repo name inside `~/.windsurf/worktrees/`.
Each worktree is given a unique random name.
To see a list of active worktrees, you can run `git worktree list` from within the repository directory.
Because worktrees live in a different directory than your original project, **build systems or tools that rely on relative paths** (e.g., `../shared-lib` references, symlinked dependencies, or monorepo source dependencies resolved by path) may break inside a worktree. If your project uses relative paths outside the repository root, configure a [`post_setup_worktree` hook](./worktrees#setup-hook) to create the necessary symlinks or copy the required files into the expected locations.
## Setup hook
Each worktree contains a copy of your repository files, but does not include `.env` files or other packages that aren't version-controlled.
If you would like to include additional files or packages in each worktree, you can use the `post_setup_worktree` [hook](./hooks#post_setup_worktree) to copy them into the worktree directory.
The `post_setup_worktree` hook runs after each worktree is created and configured. It is executed inside the new **worktree** directory.
The `$ROOT_WORKSPACE_PATH` environment variable points to the original workspace path and can be used to access files or run commands relative to the original repository.
### Example
Copy environment files and install dependencies when a new worktree is created.
**Config** (in `.windsurf/hooks.json`):
```json theme={null}
{
"hooks": {
"post_setup_worktree": [
{
"command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
"show_output": true
}
]
}
}
```
**Script** (`hooks/setup_worktree.sh`):
```bash theme={null}
#!/bin/bash
# Copy environment files from the original workspace
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
cp "$ROOT_WORKSPACE_PATH/.env" .env
echo "Copied .env file"
fi
if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
echo "Copied .env.local file"
fi
# Install dependencies
if [ -f "package.json" ]; then
npm install
echo "Installed npm dependencies"
fi
exit 0
```
This hook ensures each worktree has the necessary environment configuration and dependencies installed automatically.
## Cleanup
Devin Desktop automatically cleans up older worktrees when creating a new worktree to prevent excessive disk usage. Each workspace can have up to **20** worktrees.
Worktrees are cleaned up based on when they were last accessed—the oldest ones are removed first. This cleanup happens on a per-workspace basis, ensuring that worktrees from different repositories remain independent of each other.
Additionally, if you manually delete a Cascade conversation, Devin Desktop will automatically delete the associated worktree.
## Source Control Panel
By default, Devin Desktop does not show worktrees created by Cascade in the SCM Panel.
You can set `git.showWindsurfWorktrees` to `true` in your settings to override this and enable visualizing the worktrees in the SCM Panel.
# Changelog
Source: https://docs.devin.ai/desktop/changelog
Release notes for Devin Desktop (Windsurf).
Fixes issues with diff viewing in autonomous mode.
**Devin Desktop**
* Added "New session in space" to the session kebab menu.
* Devin Cloud sessions now auto-reconnect when the network returns.
* Images can now be copied from chat via the context menu.
* New users now default to agent mode.
* The agent sidebar now stays visible when sending problems or explain-and-fix to Cascade in agent window mode.
* Fixed branch checkout silently failing to open a worktree.
* Very large sessions no longer crash the window when reading or writing the session event cache.
* The "Scroll to top" button in long sessions now has a solid background so it stays visible in dark themes.
* Orphaned Devin ACP agent processes are now detected and cleaned up on startup, including on Windows.
* Fixed analytics connection failures under TLS-intercepting proxies.
**Devin Local**
* Edits produced in autonomous mode now produce reviewable diffs.
* ACU usage is now shown in the `/usage` command.
* Skill `permissions:` frontmatter now applies to auto-approvals.
* Enterprise login policies are now enforced in the CLI.
* Added a `sandbox.excluded` allow/ask/deny config (user and team settings) to run specific commands outside the sandbox; excluded commands also skip the sandbox proxy environment.
* Fixed command approval parsing for PowerShell `$variable` assignment prefixes.
**Devin Desktop**
* Devin ACU usage is now displayed in the client.
* Fixed settings and extensions migration for Windows system-wide installs.
**CLI and Devin Local**
* On Windows, `bash` now resolves to Git Bash instead of the WSL launcher stub.
* Subagents can now be configured with a default model.
* The MCP registry cache is now warmed during startup, so MCP servers are ready sooner.
* Injected context is no longer included in auto-generated session titles.
* Fixed agent messages over-merging in Claude ACP sessions.
* Added an `attribution` option to the Devin Local [config file](/cli/reference/configuration/config-file); set it to `false` to suppress Devin mentions in commit messages.
Various bug fixes and improvements.
**Fixed**
* Made MCP registry parsing more tolerant of old and inconsistent schemas.
**Fixed**
* Fixed a bug with loading skill files that use alternative fields.
The 3.2 series brings Devin Local enhancements and continued Devin Desktop polish.
**Devin Local**
* Added a [`devin plugin`](/cli/extensibility/plugins/overview) system for extending Devin Local — in preview and opt-in for enterprises.
* Subagents can now call MCP tools directly.
* Teams can enforce terminal allow/deny lists through CLI permission scopes.
**Agent and Editor modes**
* Enabled the `Cmd+.` mode-toggle shortcut from the empty editor welcome panel.
**Other improvements**
* Improved handling for less common MCP server features.
* Removed the Explain sparkle button from the editor breadcrumbs.
The 3.1 series builds on the Devin Desktop rebrand with a smoother Agent/Editor experience, Devin Local improvements, and continued polish.
**Agent and Editor modes**
* Added the Agent/Editor switch to the collapsed-sidebar titlebar, and unified the search icon to open agent search.
* Kept the sidebar toggle in place when opening and closing the drawer.
* Smoothed switching between Agent and Editor modes so auxiliary windows no longer close and restore.
**Devin Local**
* Renamed the "Devin CLI" settings section to "Devin Local".
* Added a notification when Devin Local agent sign-in fails.
* Updated the bundled Devin Local agent to [v2026.5.26-8](/cli/changelog/stable#2026-5-26-8).
**Other improvements**
* Added `.devinignore` support alongside `.windsurfignore` and `.codeiumignore`.
* Settings and MCP marketplace pages now scroll across the full panel width and keep content centered on wide panels.
* Hardened migration from Windsurf on Windows to preserve shortcut icon.
* Improved handling of file context in Devin Local agent
* Increased proxy authentication timeout
* Fixed issues with some stdio MCP servers on Windows
### Enterprise
* Simplified model picker pricing view for select enterprise customers
Added a new command for Devin Desktop to rerun the migration from Windsurf. This will reset Devin Desktop settings and give you a second chance to import extensions and other settings from Windsurf. The "Reset migration from Windsurf" command can be found in the command palette.
If you are logged out of your account after migrating from Windsurf, we recommend opening the command palette via ctrl+shift+p (cmd+shift+p on macOS) and running the reset migration command.
Windsurf is now [Devin Desktop](https://devin.ai/blog/windsurf-is-now-devin-desktop).
# Bug fixes and improvements
## General
* Increased remote server startup timeout from 2.5s to 6s.
## Devin Local
This release updates the bundled Devin Local agent to 2026.5.26. See the [changelog](https://cli.devin.ai/docs/changelog/stable#2026-5-26-0) for the full list of changes.
* Devin Local is now aware of the files you have open in the editor as part of its context.
* When prompted for an MCP tool permission in Devin Local, two additional server-level options are now offered: approve all tools on the server for the current session, or permanently.
* Repaired hooks for Devin Local to allow blocking user prompts.
* Improved plan mode in Devin Local to work in the OS sandbox.
* "Always Allow" permission grants in Devin Local now persist across sessions.
* Image attachments in Devin Local now show the correct warning when the selected model does not support images.
# Bug Fixes and Improvements
* Fixed availability issues with swe-check model for some users.
* Improved terminal processing performance
* Restored conversation sharing
* Repaired path resolution for the Devin local agent on WSL
## Devin Review & Quick Review
All Windsurf IDE users now have access to [Devin Review](https://app.devin.ai/review) and [Quick Review](https://docs.windsurf.com/windsurf/quick-review) with your existing subscription.
* Devin Review is available for all self-serve users, with a 2 week free trial.
* Enterprise users can only use Devin Review with a Cognition platform agreement.
## Agent Command Center
* Added list display option for the agent inbox
* Improved sessions sidebar sorting and filtering
* Performance improvements for loading and switching sessions
## Windows updates
We have fixed a bug preventing updates for some users on Windows. To upgrade to this version, you may need to:
* Wait for the update to download.
* Once it is downloaded, open Windows Task Manager and close all `devin.exe` processes
* Proceed with installing the update and restarting Windsurf
## Bug fixes and improvements
* Fixed bugs with some MCP servers
* Improved reliability of Devin Local agent
# Bug Fixes & Improvements
## Bug Fixes
* Fixed a crash that could occur when switching between Cascade conversations
* Fixed an authentication issue that could prevent Devin Cloud sessions from starting
* Fixed an issue where responses to agent questions were not sent correctly
# Devin for Terminal
Devin is now available [for Terminal](https://devin.ai/terminal). All Windsurf users can use this new CLI agent with your existing subscription.
* **Runs on your machine** — Optimized for interactive work, with full access to your codebase, tools, and environment.
* **Hand off to the cloud** — Seamless hand off to Devin in the cloud, with its own VM, testing, video recordings, autofix and more. Come back to a finished PR.
* **Multi-model** — All of your favorite frontier models in one place, including Opus 4.7, GPT-5.5, and SWE-1.6.
* **Fast** — Written in Rust and so performant that the binary can run on an original VT100.
## Devin Agent in Windsurf
You can also enable the new Devin Local agent in Windsurf. This is the same agent harness used on the terminal and sessions can be accessed from both Windsurf and the CLI.
In our testing, it's up to 30% more token-efficient than the existing Cascade agent.
## Additional Changes
* Improved search subtitle layout during streaming
* Fixed file drag-and-drop in agent window Cascade tabs
* Fixed Go to Line/Column keybinding on Windows/Linux (Ctrl+Shift+G)
* Added support for server-driven extension deny lists
* Stability and performance improvements
# Bug Fixes and Improvements
* Fixed OAuth authentication issues for some MCP servers
# Bug Fixes and Improvements
* Fixed a regression with OAuth integration for some MCP servers
* Improved reliability of Devin Cloud connections in Windsurf
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Bug Fixes and Improvements
* Various bug fixes and performance improvements for improving Windsurf 2.0 auth experience.
* Fixed bug with spawning Terminal sessions on Windows
# Windsurf 2.0
Read the full announcement [here](https://windsurf.com/blog/windsurf-2-0).
## Devin in Windsurf
* Devin cloud agent available directly inside Windsurf, included with every self-serve plan
* Delegate tasks from a local session to Devin with one click; Devin runs on its own VM
* Review Devin changes and test results without leaving the editor
* Billing is based on your existing quota and extra usage, with up to 50 USD in extra usage added for launching your first Devin Cloud session.
**Note:** Access to Devin Cloud is rolling out gradually. If you don't see it yet, try logging out of the website and IDE then logging back in.
Devin Cloud is disabled by default for enterprise accounts. Enterprise admins should enable Devin access in their organization settings if they have already purchased Cognition Platform.

## Agent Command Center
* New Kanban-style view showing all local and cloud agent sessions, organized by status
* Group agent sessions, PRs, files, and context into task-level Spaces
* Switch between Spaces to switch between tasks
## Additional Changes
* Refined Windsurf Browser with toolbar integration and Cascade tool for reading page contents
* Sped up initial load times for the Cascade sidebar
* Improved .gitignore and .codeiumignore handling across the product
* Stability improvements for remote extensions (WSL, SSH, Dev Containers)
* Performance improvements for typing in large active diff zones
## Adaptive Fix
We fixed a bug with the adaptive model router which prevented switching models after the first request.
All users who encountered the bug have had quota reset and overage restored.
## Adaptive Model Visibility
We've improved the visibility of the adaptive model in the model picker.

# Introducing Adaptive
We've made several model packaging changes, with more info [here](http://windsurf.com/blog/windsurf-adaptive).
## Adaptive Model Router
A new **Adaptive** model option is now available in the model picker. Adaptive intelligently selects the best model for each task, helping you make your quota last longer by avoiding overuse of premium models.
* **Availability**: Now available to all self-serve users on Pro, Max, and Teams plans.
* **Dynamic model selection** - Automatically chooses the right underlying model for your task while drawing down quota at a fixed per-token rate.
* **Extra usage promo** - Beyond your quota, extra usage is offered at 0.50 USD per 1M input tokens, 2.00 USD per 1M output tokens, and 0.10 USD per 1M cache read tokens for the next 2 weeks.
## Updated Model Picker with Pricing Context
The model picker now shows token pricing information directly, so you can see the exact rate extra usage is billed at.
* **Token pricing display** - Per-model input, output, and cache read token rates visible in the picker.
* **Prompt cache timer** - A new prompt cache timer is integrated into the context window indicator to help you track caching status.
* **Token counts in response cards** - Response cards after messages now include token counts so you can understand exactly how each message cost was calculated.
# Quota Billing
* Added support for the new quota billing system
* Daily and Weekly quota usage is now displayed directly in the IDE
# Bug Fixes and Improvements
* Fix build for Mac x64
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Bug Fixes and Improvements
* Fix for Apple M5
## Cascade
* Fix dangling Diff Zones related to Jupyter Notebooks
* Improve Jupyter Notebook performance when running on WSL
* Improve Cascade UI rendering performance
* Fix Cascade agent panel crashes under certain conditions
* Improve notifications for model price changes
* Add support for loading SKILL.md files from the `.windsurf/skills/` directory
* Fix `AGENTS.md` being ignored by Cascade in specific cases
## MCP
* Add support for [system-level Skill definitions](https://docs.windsurf.com/windsurf/cascade/skills#system-level-skills-enterprise) via MDM-managed configs for Enterprise
* Improve context management for MCP servers
## Stability & Performance
* Improve autocomplete error handling and performance
* Improve SSH & Remote performance
# Bug Fixes and Improvements
* Fix extension installation version selection
## New Model Picker
We introduced a new model picker that groups models by family and adds a hovercard with toggles for
specific variants, like reasoning effort and speed.
Separately, we also added the ability to pin models.
## Cascade Improvements
* Added `POST_CASCADE_RESPONSE_WITH_TRANSCRIPT` cascade hook
* Added Cascade hooks configuration visibility on team settings page
* Reduced the priority of Git commits in @ mention search
* Added a `devin.cascade.readClaudeCodeConfig` flag to disable reading Claude configuration
## MCP Improvements
* Added an MCP Refresh button
* Auto-trigger OAuth login when adding HTTP/SSE MCP servers
* Fix bugs with parsing on Windows and startup
## Platform Improvements
* Merged changes from VS Code 1.108
* Improved startup reliability for Cascade
* Fixed Windows update initialization path that could block updates
* Released binaries for Linux ARM64
# Bug Fixes and Improvements
* Fix compatibility with GitHub Pull Requests extension
# Bug Fixes and Improvements
* Fix for self-updating on Windows
* Fix for macOS UI flickering
# Cascade Improvements
* Plan Mode now supports automatic switching back to Code Mode when you start implementing a plan
* Added support for reading skills from the `.agents/skills` directory
* Tracking triggered rules in the `post_cascade_response` hook via a new `rules_applied` field
* Diff zones will now automatically close on commit
# Linux ARM64 Support
* Full Linux ARM64 client support with deb and rpm packaging
# Enterprise & Team Improvements
* Cloud configuration for Cascade Hooks is now available for enterprise teams via the cloud dashboard
* Support for Devin service key authentication
# Bug Fixes and Improvements
* Fixes for `post_write_code` hooks to handle all code editing tool formats
* Fixes and improvements for MCP server resource loading
* Fixed osascript privilege escalation being incorrectly triggered on Linux for shell command installation
* Addressed multiple memory leaks
* Improved RTL language rendering in todo lists
# New Models
* GPT-5.3-Codex-Spark is now available in Arena Mode's Fast Arena and Hybrid Arena battle groups
# Claude Opus 4.6 (fast mode)
Claude Opus 4.6 (fast mode) is now available in Windsurf in research preview with limited-time promotional pricing for self-serve users until Feb 16:
* **No thinking:** 10x credits
* **With thinking:** 12x credits
Opus 4.6 (fast mode) has the same intelligence as Opus 4.6 but with up to 2.5x higher output speeds.
# Claude Opus 4.6
Claude Opus 4.6 is now available in Windsurf with limited-time promotional pricing for self-serve users:
* **No thinking:** 2x credits
* **With thinking:** 3x credits
Opus 4.6 is available in Arena Mode's Frontier Arena and Hybrid Arena. Try it head-to-head against other frontier models to see how it performs on your real-world tasks.
* Various bug fixes and performance improvements
* Released Tab v2 model selector to all users
# Bug Fixes and Improvements
* Fix issues with Arena Mode Battle Groups
# Bug Fixes and Improvements
* Improve UI styling for announcement popups and notifications
* Close model picker when selecting a battle group
# Wave 14: Arena Mode
Arena Mode brings side-by-side model comparison directly into your IDE, plus Plan Mode for smarter task planning.
## Arena Mode
Run two Cascade agents side-by-side with hidden model identities and vote on which performs better. Arena Mode lets you discover which models actually work best for *your* workflow, codebase, and tasks—not just what benchmarks or influencers say.
* **Battle Groups**: Choose specific models to compare or let Windsurf randomly select from curated groups like "fast models" vs "smart models"
* **Personal & Global Leaderboards**: Your votes contribute to both a personal leaderboard (your preferences) and a global one (across all Windsurf users)
* **Sync or Branch**: Send followup prompts to both agents simultaneously, or branch and explore different paths individually
To get started, select the new **Arena** tab in the model picker. All battle groups are free for the first week for paid users.
## Plan Mode
Plan Mode is a new Cascade mode alongside Code and Ask. Use it to create detailed implementation plans before diving into code.
**Pro tip**: Type `megaplan` in the Cascade input box to trigger an advanced form that asks clarifying questions to create a more aligned, comprehensive plan.
# Bug Fixes and Improvements
* Admins can now set a default model that applies to all team members when they first open Windsurf
* Various bug fixes and performance improvements
# Bug Fixes and Improvements
* Fix bug with permanently disconnected cascades
# Bug Fixes
* Fixes commit message generation and codemaps suggestions
# Enterprise Features
* Enterprise admins can now specify organization-wide allow and deny lists for command auto-execution. [Learn more](https://docs.windsurf.com/windsurf/terminal#team-wide-command-lists-teams-&-enterprise)
# Bug Fixes and Improvements
* Bug fixes and performance improvements for diff zones
* Improved overall stability and reliability
* Added [`post_setup_worktree`](https://docs.windsurf.com/windsurf/cascade/worktrees#setup-hook) hook for initializing worktrees in Cascade
# Bug Fixes and Improvements
* Improvements to GPT-5.2-Codex harness
* Admins can now manage Windsurf restrictions via Windows Group Policy
# GPT-5.2-Codex
Adds support for GPT-5.2-Codex with four reasoning efforts (low, medium, high, and xhigh).
GPT-5.2-Codex is OpenAI's latest model designed for agentic coding. It excels at working in large codebases over long sessions.
For most tasks, we recommend using the medium reasoning effort.
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Improved stability and reliability
# New Features and Improvements
* Windsurf now supports [Agent Skills](https://docs.windsurf.com/windsurf/cascade/skills) for Cascade.
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Improved stability and reliability
# Gemini 3 Flash
Gemini 3 Flash is now available for all users. This model combines Gemini 3 Pro-grade reasoning with Flash-level speed and efficiency, making it ideal for agentic workflows and coding tasks.
* **Blazing Fast Responses**: Experience near-instant feedback with 3x faster performance than previous generations, perfect for iterative development compared to Gemini 3 Pro
* **Superior Coding Intelligence**: Outperforms even Pro-tier models on key coding benchmarks (78% on SWE-bench Verified), providing more accurate code generation and debugging
* **Deep Multimodal Understanding**: Easily process complex video, data extraction, and visual Q\&A tasks with frontier-level reasoning
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Tab fixes and improvements
# Wave 13: Merry Shipmas
Wave 13 brings first-class support for parallel, multi-agent sessions in Windsurf, along with Git worktrees, side-by-side Cascade panes, and a dedicated terminal profile for more reliable agent execution.
## SWE-1.5 Free
Our near-frontier model, SWE-1.5, is now available for free to all users for the next 3 months. SWE-1.5 Free has the full intelligence of SWE-1.5, with the same coding performance on SWE-Bench-Pro, but delivered at standard throughput speeds. The original variant of SWE-1.5 hosted on Cerebras will continue to be available for paid users. SWE-1.5 Free will replace SWE-1 as the default model in Windsurf starting today.
## Git Worktree Support
Windsurf now supports Git worktrees, letting you spawn multiple Cascade sessions in the same repository without conflicts. Git worktrees check out different branches into separate directories while sharing the same Git history.
## Multi-Cascade Panes & Tabs
You can already run multiple Cascade sessions in Windsurf at the same time. Now, you can view and interact with them in separate panes and tabs within the same window. This lets you monitor progress and compare outputs of sessions side-by-side, or even turn Windsurf into a big Cascade dashboard.
## Cascade Dedicated Terminal (Beta)
Windsurf introduces a new approach for letting agents execute terminal commands. Instead of your default shell, Cascade will now run commands in a dedicated zsh shell specifically configured for reliability. The Cascade Dedicated Terminal can use the environment variables you set in your .zshrc configuration and is interactive, which means you can answer any prompts from shell scripts without having to break your flow. This should improve the reliability and speed of shell commands, especially for users with complicated prompts (e.g., powerlevel10k).
In this version, the Cascade Dedicated Terminal will be opt-in for Windsurf Stable on macOS. If you are experiencing issues with the older legacy terminal, we recommend switching to the new terminal early. We expect to make this feature the default in the future, while maintaining the legacy terminal extension for backwards compatibility purposes. You can opt-in in the Windsurf User Settings -> Disable Windsurf Legacy Terminal Profile.
## Context Window Indicator
When a model's context window grows too long, earlier context can be dropped without warning and performance can degrade. Cascade already extends the window by occasionally summarizing messages and clearing history. This release adds a visual indicator to see how much of your context window is currently in use, helping you anticipate limits and decide when to start a new session.
## Cascade Hooks
Execute custom commands at key points during Cascade's workflow, including on model response for auditing purposes.
## System-level Rules & Workflows
Enterprises can deploy rules and workflows via MDM policies, allowing organizations to place rules and workflows files on users' machines.
# Bug Fixes and Improvements
* Enhanced diff zone behavior with configurable scroll-to-next-hunk settings (default off)
* Preserved colors and styling in Cascade terminal output
* Multiple fixes to the Model Context Protocol implementation
* Supports lowering permissions for Cascade's Web Fetch tool
* Fix race condition in the dedicated terminal implementation
* Support force killing commands in the dedicated terminal
* Improved markdown completion
* Fix opening old Cascade diffs
# Features
Added a new "Promo" label to LLM models that are newly available or have special discount pricing
# Bug fixes and improvements
## Agents & Tool Execution
* Fixed Command-I functionality
* Fixed Ctrl+C during tool execution not working properly
* Fixed Go (fallback) processes not being killed properly
* Fixed handling of parallel tool call errors
* Improved MCP tool call visibility (show tool name, args, etc)
* Fixed fallback diff handling for nonexistent files in code actions
## UI & Rendering
* Fixed incorrect indentation from code blocks in terminal rendering
* Fixed nested lists not rendering on new line in terminal markdown
* Fixed content spacing issues
* Fixed streaming flashes
* Enhanced code block file path display to hide line numbers for whole files
* Improved citation and language parsing in code blocks with a more robust regex pattern
* Updated the UI for code block title bars to properly handle long paths with truncation
* Improved the auto-run command menu interface and its display logic
* Added loading indicators when thinking or during long running operations
* Fix opening old Cascade diffs
## Platform & Messaging
* Fixed rate limit error message to say "no credits were used" instead of "credits have been refunded"
* Fixed continuously rechecking for updates on macOS
* Added a user-facing message when API providers are exhausted
## Workspace & Onboarding
* Allowed clicking items in the Windsurf onboarding pane
* Respect gitignore patterns in the workspace directory tree
# Patch Fixes and Improvements
* Reduce occurrence of "prompt is too long" errors
* Request all supported scopes if no scopes are provided in MCP OAuth config
# GPT-5.2
GPT-5.2 is now available in Windsurf. This model will be available for 0x credits in Windsurf (to paid users) for a limited time.
GPT-5.2 represents the biggest leap for GPT models in agentic coding since GPT-5 and is a SOTA coding model in its price range. The version bump undersells the jump in intelligence. We\`re excited to make it the default across Windsurf and several core Devin workloads. - Jeff Wang, CEO of Windsurf
Download the [latest version on Windsurf](https://windsurf.com/download/editor) to try it out!
# Bug fixes and improvements
* General Windsurf stability and performance improvements
* General Tab (Supercomplete) improvements and stability
* Fixes issues with Cascade running commands that could not be cancelled during certain long-running processes
# Features & Tools
## Cascade Hooks on User Prompts
Users can now configure Cascade Hooks on user prompts for logging all user prompts and blocking policy-violating prompts.
## MCP Servers
* Added support for GitLab remote MCP.
* Added OAuth support for GitHub remote MCP.
* Fixed an issue where every MCP would reauth on opening Windsurf.
* Added support for [MCP prompts](https://modelcontextprotocol.io/docs/concepts/prompts)
* Added toggles to enable/disable MCPs in the Cascade header
# Diff Zones
* Fixes issues with diff zones not rendering correctly or jumping to the end of a file when editing
# Tab (Supercomplete)
* Improves reliability of Tab autocomplete
* Makes Tab more responsive and faster in the appropiate circumstances
# Bug fixes and improvements
* General stability and performance improvements
* Fixes issues with login timing out too quickly during onboarding
# GPT-5.1-Codex Max
Introducing GPT-5.1-Codex Max in three reasoning tiers (Low, Medium, High). Low variant available at no cost to paid users for a limited time.
# Patch Fixes and Improvements
* General bug fixes and improvements.
# Claude Opus 4.5
You can now use Claude Opus 4.5 in Windsurf!
Opus 4.5 is the most capable model in Windsurf yet and is now available at Sonnet pricing for a limited time (2x credits compared to 20x for Opus 4.1).
This model is available to all paid Windsurf subscribers.
# AI Models
## Gemini 3 Pro
* Resolved an issue where Gemini 3 Pro caused internal Cascade errors for some users.
## SWE-1.5
* Fixed notebook tool functionality for SWE-1.5.
* Addressed an issue where SWE-1.5 would unexpectedly stop or return "No response requested".
## Sonnet 4.5
* Added support for Sonnet 4.5 with a 1M token context window.
* Reduced the frequency of unnecessary Markdown file creation by Sonnet 4.5.
## GPT-5.1 Codex and Codex Mini
* Added support for GPT-5.1 Codex and Codex Mini with low reasoning effort configuration.
# Features & Tools
## Codemaps
* Improved reliability of saving and retrieving Codemaps.
* Fixed Codemap sorting and increased the limit of visible open Codemaps.
* Resolved issues with mentioning Codemaps in Cascade.
## MCP Servers
* Fixed scope handling and OAuth authentication flows for various MCP servers.
* Resolved issues preventing installation of new MCP servers.
* Added support for handling embedded resource content in tool call responses.
## Tab Completion
* Improved latency, responsiveness, and accuracy of autocomplete.
Note: The Autocomplete setting has been removed as it was a legacy option that had no effect. Windsurf's Tab autocomplete feature is powered by Supercomplete.
## Vibe and Replace
* Fixed reliability issues with Vibe and Replace.
## Fast Context
* Added support for `.codeiumignore` and `.gitignore` for Fast Context.
# General Improvements
* Fixed various UI alignment issues with icons and styles.
* General performance and stability improvements.
* Fixed issues with the file search tool.
# Gemini 3 Pro Preview
* You can now use Gemini 3 Pro (Low and High) in Windsurf! This is a preview release that is available to paid Trial, Pro, and Teams subscribers and will soon be extended to Enterprise users as well.
# GPT-5.1 Priority Mode
* Added priority processing support for GPT-5.1 models, providing guaranteed low-latency responses for faster (\~50 tokens/sec), more reliable AI assistance.
* Priority processing costs 2x the standard rate, which will be reflected in the Windsurf credit system.
# Patch Fixes and Improvements
* Fixed tool call calling issues for GPT-5.1-Codex and GPT-5.1-Codex Mini models
# GPT-5.1 and GPT-5.1-Codex
GPT-5.1 and GPT-5.1-Codex are now available in Windsurf. GPT-5.1 will become the default model in Windsurf for one week, and paid users get free access during this period.
GPT-5.1 and GPT-5.1-Codex deliver a solid upgrade from GPT-5 for agentic coding workflows. They're noticeably better at understanding what you're asking for and working with you to get it done. The new variable thinking feature dynamically adjusts reasoning depth—providing quick responses for simple tasks and more thoughtful analysis when complexity demands it.
# Patch Fixes and Improvements
## MCP Improvements
* **Loading state indicators**: Show loading state per installed MCP to improve visibility during initialization.
* **Refresh only edited MCPs**: When `mcp_config.json` is modified, only the affected MCP server instance is initialized/refreshed; no other instances are refreshed.
* **Increased initialization timeout**: MCP initialization timeout increased to 60s.
* **Refresh button for error states**: Show refresh button for MCPs in error state to allow manual recovery.
## Cascade Hooks
* **Cascade Hooks feature**: New Cascade Hooks feature available to all tiers.
* **Documentation**: See [Cascade Hooks docs](https://docs.windsurf.com/windsurf/cascade/hooks) for available hooks and usage examples.
## SWE 1.5 Image Support
* **Image understanding**: SWE 1.5 now supports image understanding, enabling visual content analysis.
## Removed Features
* **Knowledge Base**: Removed the Knowledge Base feature.
## Bug Fixes
* **Vim extension typing lag**: Fixed bug causing typing lag when Vim extension is enabled.
* **PowerShell + Turbo Mode**: Fixed an issue where PowerShell was not running commands when Turbo Mode is enabled.
## Shortcuts
* **Attach current file to Cascade**: New shortcut `Option/Alt+Cmd+L` when in an editor to attach the current file to Cascade.
# Features
## Expanded Codemaps
Codemaps now include powerful new capabilities:
* **Chat with map** - Interact directly with your codebase visualizations
* **Mermaid diagrams** - Generate visual diagrams within maps for better code understanding
* **Cascade suggestions** - Get AI-powered suggestions directly in your maps
* **Map option in chat/edit nudges** - Easily create maps from chat and edit interactions
* **Smart mode option** - Enhanced intelligent assistance when working with maps
## Cascade Summarization Fix
Improved Cascade summarization to better handle longer conversations. Previously, summaries could be too aggressive and drop important context. Now maintains better continuity across long sessions with multiple file changes and user messages.
## MCP Enhancements
* **Path component handling** - Improved support for MCP URLs with path components (e.g., Smithery MCPs)
* **OAuth flow improvements** - Better OAuth flow for streamable HTTP MCPs
# Bug fixes and improvements
## Performance Improvements
* **Sticky scroll lag fixes** - Resolved lag spikes when using sticky scroll with Vim bindings
* **General slowness fixes** - Addressed performance issues caused by VSCode OSS update
* **Terminal rendering optimization** - Fixed rendering loop that caused 500ms+ delays on first terminal open
## Terminal Fixes
* **PowerShell improvements** - Fixed Windows terminal integration edge cases where commands would appear stuck
* **Shell theme compatibility** - Resolved edge cases with custom shell themes (zsh, fish, powerlevel10k, etc.) that could cause Windsurf to break or show stuck commands
## Editor Stability
* **Terminal freeze fix** - Fixed an issue where the editor would freeze when opening the terminal
* **CMD+J fix** - Resolved layout thrashing issue when opening terminal pane with CMD+J
# Falcon Alpha
You can now try a new stealth model in Windsurf: Falcon Alpha. Falcon Alpha is a powerful agentic model designed for speed. We're excited to hear what you build with it!
# Patch Fixes and Improvements
* Various performance improvements and bug fixes.
# Patch Fixes and Improvements
* Support and fixes for AGENTS.md
* Improvements and bug fixes for Codemaps.
* Improvements to Fast Context. Enterprises can opt in using the Windsurf Team Settings. Users can toggle Fast Context automatically using "CMD/Ctrl + Enter" on the first message in a chat.
* New auto-linting behavior that speeds up Cascade.
* Fix for MCP Marketplace not respecting team whitelist options.
* Fixes for Jupyter Notebook tool.
* Fixes for Memories, Rules, and Workflows.
* General bug fixes and improvements.
* Performance optimizations and stability enhancements.
# Dependencies
* Updated Code OSS to version 1.105.0 (Electron: 37.6.0, Chromium: 138.0.7204.251)
# Patch Fixes
* Resolved issues affecting SSH remote connections with high resource usage.
* Fix certain models seeing increased error rates on editing files.
* Improved diagnostics for third party extensions.
# New Features
* **Fast Context**: Introduced Fast Context subagent powered by SWE-grep, enabling agents to find relevant code context up to 20x faster with >2,800 tokens per second throughput.
Learn more on our [blog](https://cognition.com/blog/swe-grep).
# Bug Fixes
* Fixed issues with WSL compatibility.
* Fixed bugs in Workflows and Rules UI.
* Various stability improvements and minor bug fixes.
# Patch Fixes
* Fixes issue with custom MCP servers not being displayed correctly in the new MCP panel.
* Improvements and bug fixes for the beta Codemaps feature.
* Fixes issue where some bash commands would get stuck.
* Fixes issue where certain models couldn't create or edit Jupyter notebooks.
* General bug fixes and improvements.
# Codemaps
* Codemaps is a beta feature for codebase understanding and navigation. Open the codemaps pane to try it out!
# Patch Fixes
* Fixes to Cascade to reduce internal errors.
* Fixes to Cascade not seeing terminal output.
* Various other bug fixes and stability improvements.
# Claude Sonnet 4.5
* Claude Sonnet 4.5 is now available
# Patch Fixes
* Fix using MCP tools with certain models.
* Fixes to terminal issues on Windows.
# Patch Fixes
* Fix to Cascade slowness issues
# GPT-5-Codex is now in Windsurf!
GPT-5-Codex is now available for free (0x credits) for a limited time for paid users!
Free users can use GPT-5-Codex as well for 0.5x credits.
# Cascade Improvements
## Queued messages
* Users can now add follow-up messages to Cascade while it is working, and Cascade will process them in order after the current task is complete.
## Mermaid diagram support
* Cascade now renders mermaid diagrams in the conversation.
# Deprecation
* Windsurf Browser is now deprecated. We plan to refactor and release a replacement feature in the coming months. Please use [Previews](https://docs.windsurf.com/windsurf/previews) instead.
# Patch Fixes
* Made improvements to the sign up onboarding flow.
* Various bug fixes and stability improvements.
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
* Memory improvements
# Patch Fixes
* Minor improvements and bug fixes
# Devin features in Windsurf, stability improvements, and a brand new UI
* **Stability & Performance**: Over 100 bug fixes and reliability improvements.
* **DeepWiki in Windsurf**: Hover over code symbols for intelligent DeepWiki-powered documentation.
* **Vibe and Replace**: AI-powered find and replace functionality. Apply intelligent transformations to multiple code matches.
* **Cascade Agent Improvements**: Automatic planning mode with no manual toggles required. Revamped tools with more accurate edits. Enhanced code exploration leveraging long context models.
* **Tab Autocomplete**: New system with more frequent and smarter suggestions.
* **UI Redesign**: All-new Chat, Cascade, and home screen panels.
* **Dev Containers**: Support for development containers via remote SSH access.
# GPT-5 Available
Windsurf now supports the GPT-5 suite of models including GPT-5 (low reasoning), GPT-5 (medium reasoning), and GPT-5 (high reasoning). They are available for free for a limited time for paying users!
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Kimi K2 Available
Windsurf now supports Kimi K2 model which costs 0.5 credits per prompt.
# Speak to Cascade
## Voice
* Users can now speak into the chat rather than having to type things out.
## @-mentioning conversations
* @-mention the first conversation so Cascade has full context of it as it goes to write tests for you.
## Deeper Browser integration
* Chat with Cascade about tabs that are open in the Browser using @-mentions
## JetBrains improvements
* Planning Mode, Workflows, and file-based Rules are now available for Cascade on JetBrains
## Improvements
* Now you can @-mention terminal in Cascade.
* You can turn on the Auto-Continue setting to have Cascade automatically continue its response if it hits a limit.
* Support for more MCP servers with easier and more secure authentication by integrating the new Streamable HTTP transport (replaces SSE) and MCP authentication (replaces access tokens or API keys in the config).
* Important for enterprise customers who use Windsurf across lots of repos. Now, you can enforce ignore rules across all repositories by placing .codeiumignore in the \~/.codeium/ folder
# Linux Fixes
* Fixes to RHEL 8 Support
# Cascade Improvements
* Improvements to Cascade reliability
# Patch Fixes
* Minor improvements and bug fixes
# Browser Fixes
* Fixed unauthenticated missing CSRF token
# Patch Fixes
* Fixed API Pricing labels in the model selector
* Fixed bugs related to planning mode
* Fixed some behavior around conversation button dropdown
# Windsurf Browser
* Ability to share browser context with Windsurf
* Share code blocks, selected text, web page elements, screenshots, and console logs
* Send blocks directly to Cascade
## Fixes
* Fixed writing to plan.md files for Enterprise users
# Planning Mode
* Send messages to Cascade in Planning Mode, a setting that will let Cascade plan before making edits
* Cascade will create a plan.md file of the actions it plans to take before taking action
* The plan is user-editable, and Cascade will pick up on user changes
## Terminal Improvements
* Native terminal in Cascade panel
* Terminal now accepts user inputs in the Cascade panel
## Legacy Mode Removal
* Legacy mode has been removed, leaving Write and Chat mode
## Improvements
* Icons in @-mentions
* Theme-aware codeblocks with refreshed design
* Improvements to `.codeiumignore`
* New menu to open previous conversations to quickly switch conversations
# Patch Fixes
* Fixed Cascade and terminal integration issues for Mac and Linux users
* Merged upstream changes from VS Code 1.99.3
* Improvements to import behavior during onboarding
* Fixed shadow with the App Icon on Mac
# Bring your Own Anthropic Key
## BYOK (Anthropic Key)
* You can now bring your own API Key from Anthropic to use the Claude 4 Sonnet, Claude 4 Sonnet (Thinking), Claude 4 Opus, and Claude 4 Opus (Thinking) models in Cascade
* To use BYOK, go to [provide API keys](https://windsurf.com/subscription/provider-api-keys) and input your key
* Once entered, go back to Windsurf and reload the window. You should now be able to use the new models
* This is only available for Free and Pro users at this time
# SWE-1 Improvements
* Adds multi-modal (image) support to SWE-1
# New Family of SWE-1 Models
## SWE-1
* New SWE-1 Model made by Windsurf is available in Cascade
* SWE-1 is a new model with frontier model-level capabilities
* Free for a limited time for Pro Users
## SWE-1-lite
* SWE-1-lite is a new, far more capable model replacing Cascade Base
* Free to use for all plans and tiers
## SWE-1-mini
* SWE-1-Mini is our revamped model for tab completion in Windsurf
## Misc
* Few memory leak bug fixes
* Various fixes to Cascade Plugin Panel
# Cascade Customization
## Cascade UX Improvements
* Redesigned Model Selector
* Continue button when reaching individual tool call limit
* Opening conversations will now open the associated workspace
* Hunk accept/reject widget now has a compact mode to cover less code
* Improvements to commit message generation quality
* Commit message generation reads from global rules as context
* Ability to edit proposed terminal command
## Custom Workflows
* You can create “workflows”, saved prompts that Cascade can follow
* Workflows can be invoked via slash command
* Cascade can help create and edit workflows
* Workflow files are saved in the workspace, under .windsurf/workflows
## File-Based Rules
* You can create granular rules files that are always on, @mention-able, requested by Cascade, or attached to file globs
* Rules files are saved in the workspace, under .windsurf/rules
## Simultaneous Cascades
* Allow Cascade to keep running when switching to another conversation
* Add support for switching between conversations via a dropdown menu or keyboard shortcuts
## Cascade Plugins
* New panel in Cascade for managing MCP Servers
* Easier one-click uninstall and install
* Easier search
* MCP now has MCP resources and multimodel responses
* More MCP Server options coming soon
## Fixes
* Fixed tool call errors for users with disabled telemetry
* Fixed crashes around workspace conversation
# Teams Features
## Teams: Windsurf Reviews
* Team admins can install a Github app for code review and PR title/description edits
* Available to Teams and Enterprise SAAS for 500 reviews/month
## Teams: Conversation Sharing
* Team users can generate a shareable URL to a Cascade conversation
* Only fellow team members can access this URL
* Available to Teams and Enterprise SaaS
## Teams: Knowledge
* Team admins can connect their Google account and curate relevant Google Docs
* Team members will be able to @mention these docs, and Cascade can retrieve them
* Available to Teams and Enterprise SaaS
## Teams Deploys
* Teams users can connect their Netlify account via Windsurf settings
* Deploy apps through Cascade directly to your Netlify team for full control
* Supports team-specific settings like SSO, custom domains, and more through the Netlify dashboard
* Team admins can manage Deploy permissions and settings for their team.
## Teams Analytics
* Teams users get a refreshed analytics dashboard for their team
* Includes new Cascade analytics such as messages sent, total tool calls, model usage, and more
## Misc
* Upgrade to VS Code 1.99.1
# Patch Fixes
* Reduced errors for edit tool calls for Windows
* Fixed model selection and loading bugs on Command
# New App Icon & Upgraded Free Tier
## New App Icon
* Windsurf is now refreshed with a new app icon
* Windsurf.com has been updated with the new wordmark
* (Mac) Customizable app icons now use the new logo
## Upgraded Free Tier
* Free tier now has new, higher limits
* Ability to use Cascade in write mode
* Cascade prompt credits: 5 to 25 Cascade prompt credits per month
* Unlimited Fast Tab
* Unlimited Cascade Base
* Access to Previews
* 1 Deploy
## Performance Improvements
* Performance and reliability improvements when deploying an app using Deploys
* Allow users to create a new deployment even if they have an existing deployment config yaml
* Deploy web app tool now has a check deploy status tool call
* Stability improvements for remote extensions (WSL, SSH, Dev Containers)
* Performance improvements when typing in a large active diff zone
## Misc
* Adds GPT-4.1 to Command
* Upgraded to VSCode base version 1.98
# Patch Fixes
* Updates IDE marketplace link by mirroring Open VSX
# Updated & Simplified Pricing
## We're getting rid of Flow Action Credits
* We're simplifying our pricing model by removing Flow Action Credits
* Change takes effect April 21st, 2025
* Plans now come with prompt credits with add-on credits available for purchase
## User Prompt Credits
* Plans now come with prompt credits, which are consumed per every message sent and not via every tool call
* Add-on credits are available for purchase
* Auto-top off (with max limits) can be enabled via profile
## Existing Plans
* Existing plans are migrating over to the new pricing model
* For more information, please visit the Pricing page
# o4-mini Available
## New o4-mini models available and Free (Limited Time)
* Windsurf now supports the o4-mini medium and o4-mini high models, which are free for all users
* Usage in Windsurf is free for a limited time from April 16th to April 21st
# GPT 4.1 Available
## New GPT 4.1 Model available and Free (Limited Time)
* Windsurf now supports the new GPT 4.1 model, which is free for all users
* Usage in Windsurf is free for a limited time from April 14th to April 21st
# Patch Fixes
* Fixes to Commit Generation parsing on Windows
* UI Fixes to Rules
* Allow empty files on website deploy
* Better Deploys error visibility
* Ability to edit subdomain on website deploy
* Increased stability around MCP SSE connections
* Cascade bug fixes
# Patch Fixes
* Fixes to "Remote - WSL" extension
* Minor UX fixes
# Deploys
## Deploys (Beta)
* Deploy your application with one prompt to Netlify under a windsurf.build domain
* Claim your application's URL via Netlify
* Once claimed, continue deploying to the same project as you make updates
* To deploy a new site or change your subdomain, just ask Cascade to deploy to a new subdomain
* Available to all users for all tiers, with more for paid plans
## Commit Message Generation (Beta)
* Generate commit messages with a click in the Source Control Panel
* Available to users on paid plans with no additional credit cost per use
## Improvements to Memories
* New memories tab in Cascade
* New ability to edit Cascade's generated memories, including the memory's title, content and tags
* New ability to search Cascade's generated memories
* User setting toggle for Auto-Generate Memories
* When enabled, Cascade will autonomously generate memories to remember important context
* When disabled, Cascade will only create memories when you explicitly ask in your prompt
## Improvements to Long Conversations
* Introduced Cascade table of contents of all past user messages, which appears on conversation scroll
* Table of contents enables the ability to revert or scroll to any past message
* Improved performance when interacting with long conversations
## Improvements to Windsurf Tab
* Jupyter Notebook Support for Windsurf Tab
* Additional context signals for Windsurf Tab, including in-IDE search
# New Mac Icons
* Two new application icons (Retro and Pixel Surf) are available for users on paid plans
# Misc
* Cascade new conversation screen now has a new toolbar for tools like MCP, Preview and Deployments.
* Cascade now supports SSE MCP servers in the JSON configuration
* Fixed "Open Cascade on Reload" setting so Cascade will be closed upon opening a new window when setting is disabled
* Cascade input is persisted across new conversation screen and an active conversation
* Refreshed terminal UI in Cascade, with increased visibility for the "Open terminal" button, which opens Cascade's terminal instance directly
* Underlined links are now clickable in Cascade and user messages
* New user setting to enable sound when Cascade is done running (beta)
* Fixes to "Remote - SSH" extension, including custom SSH binary path setting
* Merged changes from VS Code 1.97.0
# Changelog (Next)
Source: https://docs.devin.ai/desktop/changelog-next
Release notes for Devin Desktop (Windsurf) Next builds.
Download Next builds from the [Releases (Next)](/desktop/releases-next) page.
Fixes issues with diff viewing in autonomous mode.
**Devin Desktop**
* Fixed orphaned Devin agent process cleanup on Windows.
* Fixed analytics connection failures under TLS-intercepting proxies.
**Devin Local**
* Edits produced in autonomous mode now produce reviewable diffs.
* Added a `sandbox.excluded` allow/ask/deny config (user and team settings) to run specific commands outside the sandbox; excluded commands also skip the sandbox proxy environment.
**Devin Desktop**
* Added "New session in space" to the session kebab menu.
* Devin Cloud sessions now auto-reconnect when the network returns.
* Images can now be copied from chat via the context menu.
* New users now default to agent mode.
* The agent sidebar now stays visible when sending problems or explain-and-fix to Cascade in agent window mode.
* Fixed branch checkout silently failing to open a worktree.
* Very large sessions no longer crash the window when reading or writing the session event cache.
* The "Scroll to top" button in long sessions now has a solid background so it stays visible in dark themes.
* Orphaned Devin ACP agent processes are now detected and cleaned up on startup.
**Devin Local**
* ACU usage is now shown in the `/usage` command.
* Skill `permissions:` frontmatter now applies to auto-approvals.
* Enterprise login policies are now enforced in the CLI.
* Fixed command approval parsing for PowerShell `$variable` assignment prefixes.
**Devin Desktop**
* Devin ACU usage is now displayed in the client.
* Fixed settings and extensions migration for Windows system-wide installs.
**CLI and Devin Local**
* On Windows, `bash` now resolves to Git Bash instead of the WSL launcher stub.
* Subagents can now be configured with a default model.
* The MCP registry cache is now warmed during startup, so MCP servers are ready sooner.
* Injected context is no longer included in auto-generated session titles.
* Fixed agent messages over-merging in Claude ACP sessions.
* Added an `attribution` option to the Devin Local [config file](/cli/reference/configuration/config-file); set it to `false` to suppress Devin mentions in commit messages.
**Devin Desktop**
* The Windows installer and updater are now branded "Devin".
* Added "Open Agent Kanban View" and "Open Agent List View" commands.
* Added "New file" and "Open file" actions to the agent window tab dropdown.
* The activity bar now stays visible at its default location in agent view.
* Test recording downloads now open in the system browser.
**CLI and Devin Local**
* `!` shell commands now run in your configured `$SHELL`.
* MCP servers support client-defined OAuth scopes.
* Interactive logins are persisted to a shared credential store.
* MCP plugin error cards now surface server error details and a "View logs" button.
* On Windows, Devin now detects GPO-blocked PowerShell and falls back to Git Bash.
Various bug fixes and improvements.
**Fixed**
* Made MCP registry parsing more tolerant of old and inconsistent schemas.
**Fixed**
* Fixed a bug with loading skill files that use alternative fields.
The 3.2 series brings Devin Local enhancements and continued Devin Desktop polish.
**Devin Local**
* Added a [`devin plugin`](/cli/extensibility/plugins/overview) system for extending Devin Local — in preview and opt-in for enterprises.
* Subagents can now call MCP tools directly.
* Teams can enforce terminal allow/deny lists through CLI permission scopes.
**Agent and Editor modes**
* Enabled the `Cmd+.` mode-toggle shortcut from the empty editor welcome panel.
**Other improvements**
* Improved handling for less common MCP server features.
* Removed the Explain sparkle button from the editor breadcrumbs.
The 3.1 series builds on the Devin Desktop rebrand with a smoother Agent/Editor experience, Devin Local improvements, and continued polish.
**Agent and Editor modes**
* Added the Agent/Editor switch to the collapsed-sidebar titlebar, and unified the search icon to open agent search.
* Kept the sidebar toggle in place when opening and closing the drawer.
* Smoothed switching between Agent and Editor modes so auxiliary windows no longer close and restore.
**Devin Local**
* Renamed the "Devin CLI" settings section to "Devin Local".
* Added a notification when Devin Local agent sign-in fails.
* Updated the bundled Devin Local agent to [v2026.5.26-8](/cli/changelog/stable#2026-5-26-8).
**Other improvements**
* Added `.devinignore` support alongside `.windsurfignore` and `.codeiumignore`.
* Settings and MCP marketplace pages now scroll across the full panel width and keep content centered on wide panels.
* Hardened migration from Windsurf on Windows to preserve shortcut icon.
* Improved handling of file context in Devin Local agent
* Increased proxy authentication timeout
* Fixed issues with some stdio MCP servers on Windows
### Enterprise
* Simplified model picker pricing view for select enterprise customers
Fixed intermittent issues with Devin Local connectivity.
Added a new command for Devin Desktop to rerun the migration from Windsurf. This will reset Devin Desktop settings and give you a second chance to import extensions and other settings from Windsurf. The "Reset migration from Windsurf" command can be found in the command palette.
A release was made.
Windsurf is now [Devin Desktop](https://devin.ai/blog/windsurf-is-now-devin-desktop).
This release updates the bundled Devin Local agent to 2026.5.26. Highlights are below — see the [changelog](https://cli.devin.ai/docs/changelog/stable#2026-5-26-0) for the full list of changes.
# New features
* Devin Local is now aware of the files you have open in the editor as part of its context.
* When prompted for an MCP tool permission in Devin Local, two additional server-level options are now offered: approve all tools on the server for the current session, or permanently.
# Bug fixes
* "Always Allow" permission grants in Devin Local now persist across sessions.
* Image attachments in Devin Local now show the correct warning when the selected model does not support images.
# Fixes for Devin Local
* Repaired hooks for Devin Local to allow blocking user prompts
* Improved plan mode in Devin Local to work in the OS sandbox
# Bug fixes and improvements
* Increased remote server startup timeout from 2.5s to 6s
# Bug Fixes and Improvements
* Fixed availability issues with swe-check model for some users.
* Improved terminal processing performance
* Restored conversation sharing
## Devin Review & Quick Review
All Windsurf IDE users now have access to [Devin Review](https://app.devin.ai/review) and [Quick Review](https://docs.windsurf.com/windsurf/quick-review) with your existing subscription.
## Agent Command Center
* Added list display option for the agent inbox
* Improved sessions sidebar sorting and filtering
* Performance improvements for loading and switching sessions
## Windows updates
We have fixed a bug preventing updates for some users on Windows. To upgrade to this version, you may need to:
* Wait for the update to download.
* Once it is downloaded, open Windows Task Manager and close all `devin.exe` processes
* Proceed with installing the update and restarting Windsurf
## Bug fixes and improvements
* Fixed bugs with some MCP servers
* Improved reliability of Devin Local agent
# Settings Improvements
* Settings now open in a dedicated tab instead of a modal, making it easier to navigate and find what you need
* Added a searchable sidebar to quickly locate settings across all categories
* Consolidated the settings gear into the global activity dropdown for a cleaner titlebar
# Agent Command Center Improvements
* Added button to rename agent sessions directly from the sidebar
* Added space @-mentions — you can now reference entire spaces in Cascade conversations
* Added automatic context sharing across sessions in a space
* Model picker search now surfaces the best-matching variant per model family
* Improved at-mention loading with incremental results instead of waiting for all categories
* Tab completions now respect your `files.exclude` settings
* The toolbar footer now works like the Cascade footer with accept/reject buttons tied to diff zones
* File paths and selection ranges are now included in @-mentions
* Session PRs are now rendered in the Devin Cloud sidebar item
* Fixed UI freeze that could occur when pasting large text into Cascade
# Bug Fixes
* Fixed scroll position not being preserved when switching between editor tabs
* Fixed sign-in / sign-out state showing contradictory status after a failed authentication
* Fixed titlebar items disappearing in narrow windows
* Fixed stale session data showing in the sidebar
# Bug Fixes & Improvements
## Bug Fixes
* Fixed a crash that could occur when switching between Cascade conversations
* Fixed an authentication issue that could prevent Devin Cloud sessions from starting
* Fixed an issue where responses to agent questions were not sent correctly
# Devin for Terminal
* Updated Devin Local agent to respect existing Windsurf proxy settings
* Added context window indicator for Devin Local agent
* Improved revert support for Devin Local agent
* Enabled mentioning terminal content in Devin Local sessions
* Added new keyboard shortcuts for accepting permission requests from Devin Local agent
# Bug Fixes and Improvements
* Added support for server-driven extension deny lists
* Simplified file drag & drop support in Agent Command Center
# Devin for Terminal
Devin is now available [for Terminal](https://devin.ai/terminal). All Windsurf users can use this new CLI agent with your existing subscription.
* **Runs on your machine** — Optimized for interactive work, with full access to your codebase, tools, and environment.
* **Hand off to the cloud** — Seamless hand off to Devin in the cloud, with its own VM, testing, video recordings, autofix and more. Come back to a finished PR.
* **Multi-model** — All of your favorite frontier models in one place, including Opus 4.7, GPT-5.5, and SWE-1.6.
* **Fast** — Written in Rust and so performant that the binary can run on an original VT100.
## Devin Agent in Windsurf
You can also enable the new Devin Local agent in Windsurf. This is the same agent harness used on the terminal and sessions can be accessed from both Windsurf and the CLI.
In our testing, it's up to 30% more token-efficient than the existing Cascade agent.
## Additional Changes
* Improved search subtitle layout during streaming
* Fixed file drag-and-drop in agent window Cascade tabs
* Fixed edit rendering issues in Devin Local on Windows
* Fixed Go to Line/Column keybinding on Windows/Linux (Ctrl+Shift+G)
* Stability and performance improvements
# Agent Command Center
* Added workspace and session filters to the spaces sidebar
* Improved unread indicators for sessions with mark read/unread functionality
* You can now drag sessions onto kanban cards to create Spaces
* Added "Put Devin to sleep" tab context menu action
* Improved Cmd+F find-in-chat for agent sessions
* Hand off plans from Cascade to Devin Cloud with one click
# Bug Fixes
* Fixed Cmd+P flicker when focused on cascade in agent mode
* Fixed Cmd+N to open untitled file when editor surface is focused in agent window
* Fixed Ctrl+Shift+M microphone keybinding in agent window mode
* Fixed agent sidebar highlight when focus moves to related panes
* Skip button now skips one question at a time in Devin Cloud sessions
* MCP registry now paginates instead of requesting limit=1000
* Honor HTTP\_PROXY for Windsurf Remote-SSH language server
* Stop Devin for Terminal from spawning console windows on Windows
* Prevent Cascade input re-renders causing typing lag
# Bug Fixes and Improvements
* Fixed OAuth authentication issues for some MCP servers
# Bug Fixes and Improvements
* Fixed a regression with OAuth integration for some MCP servers
* Improved reliability of Devin Cloud connections in Windsurf
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Bug Fixes and Improvements
* Various bug fixes and performance improvements for improving Windsurf 2.0 auth experience.
* Fixed bug with spawning Terminal sessions on Windows
# Windsurf 2.0
Read the full announcement [here](https://windsurf.com/blog/windsurf-2-0).
## Devin in Windsurf
* Devin cloud agent available directly inside Windsurf, included with every self-serve plan
* Delegate tasks from a local session to Devin with one click; Devin runs on its own VM
* Review Devin changes and test results without leaving the editor
* Billing is based on your existing quota and extra usage, with up to 50 USD in extra usage added for launching your first Devin Cloud session.
**Note:** Access to Devin Cloud is rolling out gradually. If you don't see it yet, try logging out of the website and IDE then logging back in.
Devin Cloud is disabled by default for enterprise accounts. Enterprise admins should enable Devin access in their organization settings if they have already purchased Cognition Platform.

## Agent Command Center
* New Kanban-style view showing all local and cloud agent sessions, organized by status
* Group agent sessions, PRs, files, and context into task-level Spaces
* Switch between Spaces to switch between tasks
## Additional Changes
* Refined Windsurf Browser with toolbar integration and Cascade tool for reading page contents
* Sped up initial load times for the Cascade sidebar
* Improved .gitignore and .codeiumignore handling across the product
* Stability improvements for remote extensions (WSL, SSH, Dev Containers)
* Performance improvements for typing in large active diff zones
# Bug Fixes and Improvements
* Fixed resource parameter support for OAuth connections to MCP servers
* Enhanced MCP registry support
## Adaptive Fix
We fixed a bug with the adaptive model router which prevented switching models after the first request.
All users who encountered the bug have had quota reset and overage restored.
## Adaptive Model Visibility
We've improved the visibility of the adaptive model in the model picker.

# Introducing Adaptive
We've made several model packaging changes, with more info [here](http://windsurf.com/blog/windsurf-adaptive).
## Adaptive Model Router
A new **Adaptive** model option is now available in the model picker. Adaptive intelligently selects the best model for each task, helping you make your quota last longer by avoiding overuse of premium models.
* **Availability**: Now available to all self-serve users on Pro, Max, and Teams plans.
* **Dynamic model selection** - Automatically chooses the right underlying model for your task while drawing down quota at a fixed per-token rate.
* **Extra usage promo** - Beyond your quota, extra usage is offered at 0.50 USD per 1M input tokens, 2.00 USD per 1M output tokens, and 0.10 USD per 1M cache read tokens for the next 2 weeks.
# Token Tracking in Response Card
* Added token usage tracking to the response card. You can now see a breakdown of input tokens, output tokens, and cached input tokens for each response directly in the chat panel.
* Enhanced the context window indicator to show when the prompt cache expires, giving you better visibility into cache utilization.
# Bug Fixes and Improvements
* Fixed keyboard input issues with the built-in terminal on Windows
* Improved cost sorting for token-based plans in the model picker
* Clarified which models are available only on pro plans
* Repaired devcontainer support on RHEL 8
A release was made.
A release was made.
A release was made.
# Model & Cost Visibility
Replaced dollar signs with granular cost metrics for quota-based billing plans.
# Additional fixes
* Improved performance for large repos
* Upgraded to VSCode base version 1.110
* Fixed issues with diff zones reappearing after acceptance
# Quota Billing
* Added support for the new quota billing system
* Daily and Weekly quota usage is now displayed directly in the IDE
# Bug Fixes and Improvements
* Fix build for Mac x64
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Bug Fixes and Improvements
* Fix for Apple M5
## Cascade
* Fix dangling Diff Zones related to Jupyter Notebooks
* Improve Jupyter Notebook performance when running on WSL
## Cascade
* Improve Cascade UI rendering performance
* Fix Cascade agent crashes under certain conditions
* Improve notifications for model price changes
* Add support for loading SKILL.md files from the `.windsurf/skills/` directory
* Fix `AGENTS.md` being ignored by Cascade in specific cases
## MCP
* Add support for [system-level Skill definitions](https://docs.windsurf.com/windsurf/cascade/skills#system-level-skills-enterprise) via MDM-managed configs for Enterprise
* Improve context management for MCP servers
## Stability & Performance
* Improve autocomplete error handling and performance
* Improve SSH & Remote performance
# Phoenix Alpha
Phoenix Alpha is now available in Next.
# Bug Fixes and Improvements
* Fix extension installation version selection
## New Model Picker
We introduced a new model picker that groups models by family and adds a hovercard with toggles for
specific variants, like reasoning effort and speed.
Separately, we also added the ability to pin models.
## Cascade Improvements
* Added `POST_CASCADE_RESPONSE_WITH_TRANSCRIPT` cascade hook
* Added Cascade hooks configuration visibility on team settings page
* Reduced the priority of Git commits in @ mention search
* Added a `devin.cascade.readClaudeCodeConfig` flag to disable reading Claude configuration
## MCP Improvements
* Added an MCP Refresh button
* Auto-trigger OAuth login when adding HTTP/SSE MCP servers
* Fix bugs with parsing on Windows and startup
## Platform Improvements
* Merged changes from VS Code 1.108
* Improved startup reliability for Cascade
* Fixed Windows update initialization path that could block updates
* Released binaries for Linux ARM64
A release was made.
# Bug Fixes and Improvements
* Fix compatibility with GitHub Pull Requests extension
# Bug Fixes and Improvements
* Fix for self-updating on Windows
* Fix for macOS UI flickering
# Cascade Improvements
* Plan Mode now supports automatic switching back to Code Mode when you start implementing a plan
* Added support for reading skills from the `.agents/skills` directory
* Tracking triggered rules in the `post_cascade_response` hook via a new `rules_applied` field
* Diff zones will now automatically close on commit
# Linux ARM64 Support
* Full Linux ARM64 client support with deb and rpm packaging
# Enterprise & Team Improvements
* Cloud configuration for Cascade Hooks is now available for enterprise teams via the cloud dashboard
* Support for Devin service key authentication
# Bug Fixes and Improvements
* Fixes for `post_write_code` hooks to handle all code editing tool formats
* Fixes and improvements for MCP server resource loading
* Fixed osascript privilege escalation being incorrectly triggered on Linux for shell command installation
* Addressed multiple memory leaks
* Improved RTL language rendering in todo lists
A release was made.
# New Models
* GPT-5.3-Codex-Spark is now available in Arena Mode's Fast Arena and Hybrid Arena battle groups
# Claude Opus 4.6 (fast mode)
Claude Opus 4.6 (fast mode) is now available in Windsurf in research preview with limited-time promotional pricing for self-serve users until Feb 16:
* **No thinking:** 10x credits
* **With thinking:** 12x credits
Opus 4.6 (fast mode) has the same intelligence as Opus 4.6 but with up to 2.5x higher output speeds.
# Bug Fixes and Improvements
* Fix issues with Arena Mode Battle Groups
# Bug Fixes and Improvements
* Improve UI styling for announcement popups and notifications
* Close model picker when selecting a battle group
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Wave 14: Arena Mode
Arena Mode brings side-by-side model comparison directly into your IDE, plus Plan Mode for smarter task planning.
## Arena Mode
Run two Cascade agents side-by-side with hidden model identities and vote on which performs better. Arena Mode lets you discover which models actually work best for *your* workflow, codebase, and tasks—not just what benchmarks or influencers say.
* **Battle Groups**: Choose specific models to compare or let Windsurf randomly select from curated groups like "fast models" vs "smart models"
* **Personal & Global Leaderboards**: Your votes contribute to both a personal leaderboard (your preferences) and a global one (across all Windsurf users)
* **Sync or Branch**: Send followup prompts to both agents simultaneously, or branch and explore different paths individually
To get started, select the new **Arena** tab in the model picker. All battle groups are free for the first week for paid users.
## Plan Mode
Plan Mode is a new Cascade mode alongside Code and Ask. Use it to create detailed implementation plans before diving into code.
**Pro tip**: Type `megaplan` in the Cascade input box to trigger an advanced form that asks clarifying questions to create a more aligned, comprehensive plan.
# Bug Fixes and Improvements
* Admins can now set a default model that applies to all team members when they first open Windsurf
* Various bug fixes and performance improvements
A release was made.
# Bug Fixes and Improvements
* Fix bug with permanently disconnected cascades
# Bug Fixes
* Fixes commit message generation and codemaps suggestions
# Enterprise Features
* Enterprise admins can now specify organization-wide allow and deny lists for command auto-execution. [Learn more](https://docs.windsurf.com/windsurf/terminal#team-wide-command-lists-teams-&-enterprise)
# Bug Fixes and Improvements
* Bug fixes and performance improvements for diff zones
* Improved overall stability and reliability
* Added [`post_setup_worktree`](https://docs.windsurf.com/windsurf/cascade/worktrees#setup-hook) hook for initializing worktrees in Cascade
# Bug Fixes and Improvements
* Improvements to GPT-5.2-Codex harness
* Admins can now manage Windsurf restrictions via Windows Group Policy
# GPT-5.2-Codex
Adds support for GPT-5.2-Codex with four reasoning efforts (low, medium, high, and xhigh).
GPT-5.2-Codex is OpenAI's latest model designed for agentic coding. It excels at working in large codebases over long sessions.
For most tasks, we recommend using the medium reasoning effort.
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Improved stability and reliability
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Improved stability and reliability
# New Features and Improvements
* Plan Mode Update
* Support for Skills
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
# Gemini 3 Flash
Gemini 3 Flash is now available for all users. This model combines Gemini 3 Pro-grade reasoning with Flash-level speed and efficiency, making it ideal for agentic workflows and coding tasks.
* **Blazing Fast Responses**: Experience near-instant feedback with 3x faster performance than previous generations, perfect for iterative development compared to Gemini 3 Pro
* **Superior Coding Intelligence**: Outperforms even Pro-tier models on key coding benchmarks (78% on SWE-bench Verified), providing more accurate code generation and debugging
* **Deep Multimodal Understanding**: Easily process complex video, data extraction, and visual Q\&A tasks with frontier-level reasoning
# Bug Fixes and Improvements
* Various bug fixes and performance improvements
* Tab fixes and improvements
# Wave 13: Merry Shipmas
Wave 13 brings first-class support for parallel, multi-agent sessions in Windsurf, along with Git worktrees, side-by-side Cascade panes, and a dedicated terminal profile for more reliable agent execution.
## SWE-1.5 Free
Our near-frontier model, SWE-1.5, is now available for free to all users for the next 3 months. SWE-1.5 Free has the full intelligence of SWE-1.5, with the same coding performance on SWE-Bench-Pro, but delivered at standard throughput speeds. The original variant of SWE-1.5 hosted on Cerebras will continue to be available for paid users. SWE-1.5 Free will replace SWE-1 as the default model in Windsurf starting today.
## Git Worktree Support
Windsurf now supports Git worktrees, letting you spawn multiple Cascade sessions in the same repository without conflicts. Git worktrees check out different branches into separate directories while sharing the same Git history.
## Multi-Cascade Panes & Tabs
You can already run multiple Cascade sessions in Windsurf at the same time. Now, you can view and interact with them in separate panes and tabs within the same window. This lets you monitor progress and compare outputs of sessions side-by-side, or even turn Windsurf into a big Cascade dashboard.
## Cascade Dedicated Terminal (Beta)
Windsurf introduces a new approach for letting agents execute terminal commands. Instead of your default shell, Cascade will now run commands in a dedicated zsh shell specifically configured for reliability. The Cascade Dedicated Terminal can use the environment variables you set in your .zshrc configuration and is interactive, which means you can answer any prompts from shell scripts without having to break your flow. This should improve the reliability and speed of shell commands, especially for users with complicated prompts (e.g., powerlevel10k).
In this version, the Cascade Dedicated Terminal will be opt-in for Windsurf Stable on macOS. If you are experiencing issues with the older legacy terminal, we recommend switching to the new terminal early. We expect to make this feature the default in the future, while maintaining the legacy terminal extension for backwards compatibility purposes. You can opt-in in the Windsurf User Settings -> Disable Windsurf Legacy Terminal Profile.
## Context Window Indicator
When a model's context window grows too long, earlier context can be dropped without warning and performance can degrade. Cascade already extends the window by occasionally summarizing messages and clearing history. This release adds a visual indicator to see how much of your context window is currently in use, helping you anticipate limits and decide when to start a new session.
## Cascade Hooks
Execute custom commands at key points during Cascade's workflow, including on model response for auditing purposes.
## System-level Rules & Workflows
Enterprises can deploy rules and workflows via MDM policies, allowing organizations to place rules and workflows files on users' machines.
# Bug Fixes and Improvements
* Enhanced diff zone behavior with configurable scroll-to-next-hunk settings (default off)
* Preserved colors and styling in Cascade terminal output
* Multiple fixes to the Model Context Protocol implementation
* Supports lowering permissions for Cascade's Web Fetch tool
* Fix race condition in the dedicated terminal implementation
* Support force killing commands in the dedicated terminal
* Improved markdown completion
* Fix opening old Cascade diffs
# Bug Fixes and Performance Improvements
* Fix race condition in the new dedicated terminal implementation
* MCP fixes
* Added setting to control scroll-to-next-hunk behavior in diff zones (default off)
* Improve markdown completion
* Preserve terminal colors and styling in the Cascade terminal output pane
* Diff zone fixes and improvements
* Support turbo mode for web fetch requests made by Cascade's Web Fetch tool
* Support force killing commands in the new dedicated terminal
# New Features
## Windsurf Dedicated Terminal
* Introduces a new terminal for Cascade that improves command execution reliability (OS X only)
## Multi Cascade Panels and Tabs
* Adds support for multiple Cascade panels and tabs, allowing users to work with multiple Cascade sessions simultaneously
## Cascade Hooks on Cascade Response
* Allows users to configure Cascade Hooks on model response, specifically for logging all Cascade responses for auditing purposes
## System-level Rules + Workflows
* Allows enterprises to place rules and workflows files on users' machines with MDM policies
# Bug Fixes
* Fix opening old Cascade diffs
* Fix various stability issues with the new terminal implementation
# Patch Fixes and Improvements
* Fix opening old Cascade diffs
# Features
Added a new "Promo" label to LLM models that are newly available or have special discount pricing
# Patch Fixes and Improvements
* Enhances code block file path display to hide line numbers for whole files
* Improves citation and language parsing in code blocks with a more robust regex pattern
* Updates the UI for code block title bars to properly handle long paths with truncation
* Fixes fallback diff handling for nonexistent files in code actions
* Improves the auto-run command menu interface and its display logic
# Patch Fixes and Improvements
## Agents & Tool Execution
* Fixed Command-I functionality
* Fixed Ctrl+C during tool execution not working properly
* Fixed Go (fallback) processes not being killed properly
* Fixed handling of parallel tool call errors
## UI & Rendering
* Fixed incorrect indentation from code blocks in terminal rendering
* Fixed nested lists not rendering on new line in terminal markdown
* Fixed content spacing issues
* Fixed streaming flashes
## Messaging & Platform
* Fixed rate limit error message to say "no credits were used" instead of "credits have been refunded"
* Fixed continuously rechecking for updates on macOS
* Added a user-facing message when API providers are exhausted
## Tooling & Onboarding
* Improved MCP tool call visibility (show tool name, args, etc)
* Added loading indicators when thinking or during long running operations
* Allowed clicking items in the Windsurf onboarding pane
* Respected gitignore patterns in the workspace directory tree
# Patch Fixes and Improvements
* Reduce occurrence of "prompt is too long" errors
* Request all supported scopes if no scopes are provided in MCP OAuth config
# GPT-5.2
GPT-5.2 is now available in Windsurf. This model will be available for 0x credits in Windsurf (to paid users) for a limited time.
GPT-5.2 represents the biggest leap for GPT models in agentic coding since GPT-5 and is a SOTA coding model in its price range. The version bump undersells the jump in intelligence. We\`re excited to make it the default across Windsurf and several core Devin workloads. - Jeff Wang, CEO of Windsurf
Download the [latest version on Windsurf](https://windsurf.com/download/editor) to try it out!
# Bug fixes and improvements
* General Windsurf stability and performance improvements
* General Tab (Supercomplete) improvements and stability
* Fixes issues with Cascade running commands that could not be cancelled during certain long-running processes
# Diff Zones
* Fixes issues with diff zones not rendering correctly or jumping to the end of a file when editing
# Lifeguard
* Fixes various Lifeguard bugs and stability issues
# Tab (Supercomplete)
* Improves reliability of Tab autocomplete
* Makes Tab more responsive and faster in the appropiate circumstances
# MCP Servers
* Added support for [MCP prompts](https://modelcontextprotocol.io/docs/concepts/prompts)
* Added toggles to enable/disable MCPs in the Cascade header
# Bug fixes and improvements
* General stability and performance improvements
* Fixes issues with login timing out too quickly during onboarding
# Features & Tools
## Cascade Hooks on User Prompts
* Users can now configure Cascade Hooks on user prompts for logging all user prompts and blocking policy-violating prompts.
## Worktree / Arena Mode
* Added support for Worktree and Arena Mode.
## MCP Servers
* Added support for GitLab remote MCP.
* Added OAuth support for GitHub remote MCP.
* Fixed an issue where every MCP would reauth on opening Windsurf.
# General Improvements
* General performance and stability improvements.
* Improvements for Tab (Supercomplete) autocomplete reliability.
# GPT-5.1-Codex Max
Introducing GPT-5.1-Codex Max in three reasoning tiers (Low, Medium, High). Low variant available at no cost to paid users for a limited time.
# Claude Opus 4.5
You can now use Claude Opus 4.5 in Windsurf!
Opus 4.5 is the most capable model in Windsurf yet and is now available at Sonnet pricing for a limited time (2x credits compared to 20x for Opus 4.1).
This model is available to all paid Windsurf subscribers.
# AI Models
## Gemini 3 Pro
* You can now use Gemini 3 Pro (Low and High) in Windsurf! This is a preview release that is available to paid Trial, Pro, and Teams subscribers and will soon be extended to Enterprise users as well.
* Resolved an issue where Gemini 3 Pro caused internal Cascade errors for some users.
## SWE-1.5
* Fixed notebook tool functionality for SWE-1.5.
* Addressed an issue where SWE-1.5 would unexpectedly stop or return "No response requested".
## Sonnet 4.5
* Added support for Sonnet 4.5 with a 1M token context window.
* Reduced the frequency of unnecessary Markdown file creation by Sonnet 4.5.
## GPT-5.1 Codex and Codex Mini
* Added support for GPT-5.1 Codex and Codex Mini with low reasoning effort configuration.
# Features & Tools
## Codemaps
* Improved reliability of saving and retrieving Codemaps.
* Fixed Codemap sorting and increased the limit of visible open Codemaps.
* Resolved issues with mentioning Codemaps in Cascade.
## MCP Servers
* Fixed scope handling and OAuth authentication flows for various MCP servers.
* Resolved issues preventing installation of new MCP servers.
* Added support for handling embedded resource content in tool call responses.
## Tab Completion
* Improved latency, responsiveness, and accuracy of autocomplete.
Note: The Autocomplete setting has been removed as it was a legacy option that had no effect. Windsurf's Tab autocomplete feature is powered by Supercomplete.
## Vibe and Replace
* Fixed reliability issues with Vibe and Replace.
## Fast Context
* Added support for `.codeiumignore` and `.gitignore` for Fast Context.
# General Improvements
* Fixed various UI alignment issues with icons and styles.
* General performance and stability improvements.
* Fixed issues with the file search tool.
# Worktree Preview
You can now use Windsurf's AI agent with worktrees to explore and modify code across multiple branches simultaneously.
# MCP Server Improvements
* Fixes issues with scopes and OAuth authentication flows for multiple MCP servers
# Tab Completion
* Improved latency, responsiveness, and accuracy of autocomplete.
# Context Window Indicator Beta
* Context window indicator now shows the current context window used by the Cascade AI agent.
# GPT-5.1 Priority Mode
* Added priority processing support for GPT-5.1 models, providing guaranteed low-latency responses for faster (\~50 tokens/sec), more reliable AI assistance.
* Priority processing costs 2x the standard rate, which will be reflected in the Windsurf credit system.
# Patch Fixes and Improvements
* Fixed tool call calling issues for GPT-5.1-Codex and GPT-5.1-Codex Mini models
# GPT-5.1 and GPT-5.1-Codex
GPT-5.1 and GPT-5.1-Codex are now available in Windsurf. GPT-5.1 will become the default model in Windsurf for one week, and paid users get free access during this period.
GPT-5.1 and GPT-5.1-Codex deliver a solid upgrade from GPT-5 for agentic coding workflows. They're noticeably better at understanding what you're asking for and working with you to get it done. The new variable thinking feature dynamically adjusts reasoning depth—providing quick responses for simple tasks and more thoughtful analysis when complexity demands it.
# Patch Fixes and Improvements
## Removed Features
* **Knowledge Base**: Removed the Knowledge Base feature
## Bug Fixes
* **PowerShell + Turbo Mode**: Fixed an issue where PowerShell was not running commands when Turbo Mode is enabled
## Shortcuts
* **Attach current file to Cascade**: New shortcut `Option/Alt+Cmd+L` when in an editor to attach the current file to Cascade
# Features
## MCP Improvements
* **Loading state indicators**: Show loading state per installed MCP to improve visibility during initialization
* **Refresh only edited MCPs**: When `mcp_config.json` is modified, only the affected MCP server instance is initialized/refreshed - no other instances are refreshed
* **Increased initialization timeout**: MCP initialization timeout increased to 60s
* **Refresh button for error states**: Show refresh button for MCPs in error state to allow manual recovery
## Cascade Hooks
* **Enterprise feature**: New Cascade Hooks feature available
* **Public documentation**: [Draft documentation](https://docs.windsurf.com/windsurf/cascade/hooks) with details and descriptions of hooks available in Windsurf Docs
## Bug Fixes
* **Vim extension typing lag**: Fixed bug causing typing lag when Vim extension is enabled
## SWE 1.5 Image Support
* **Image understanding**: Images are now supported in SWE 1.5, enabling visual content analysis
# Features
## Improvements to SWE-1.5 + Claude Sonnet 4.5 Mode
Enhanced the SWE-1.5 + Claude Sonnet 4.5 mode with improved performance and reliability for better coding assistance.
# Features
## Expanded Codemaps
Codemaps now include powerful new capabilities:
* **Chat with map** - Interact directly with your codebase visualizations
* **Mermaid diagrams** - Generate visual diagrams within maps for better code understanding
* **Cascade suggestions** - Get AI-powered suggestions directly in your maps
* **Map option in chat/edit nudges** - Easily create maps from chat and edit interactions
* **Smart mode option** - Enhanced intelligent assistance when working with maps
## Cascade Summarization Fix
Improved Cascade summarization to better handle longer conversations. Previously, summaries could be too aggressive and drop important context. Now maintains better continuity across long sessions with multiple file changes and user messages.
## Sonnet 4.5 Support for SWE 1.5 Planning
You can now enable beta Sonnet 4.5 planning when using SWE 1.5. To enable, select SWE 1.5 first, then select the Sonnet 4.5 addon.
## MCP Enhancements
* **Path component handling** - Improved support for MCP URLs with path components (e.g., Smithery MCPs)
* **OAuth flow improvements** - Better OAuth flow for streamable HTTP MCPs (e.g., Canva, ServiceNow's internal MCP)
# Bug fixes and improvements
## Performance Improvements
* **Sticky scroll lag fixes** - Resolved lag spikes when using sticky scroll with Vim bindings
* **General slowness fixes** - Addressed performance issues caused by VSCode OSS update
* **Terminal rendering optimization** - Fixed rendering loop that caused 500ms+ delays on first terminal open
## Terminal Fixes
* **PowerShell improvements** - Fixed Windows terminal integration issues where commands would appear stuck
* **Shell theme compatibility** - Resolved edge cases with custom shell themes (zsh, fish, powerlevel10k, etc.) that could cause Windsurf to break or show stuck commands
## Editor Stability
* **Terminal freeze fix** - Fixed an issue where the editor would freeze when opening the terminal
* **CMD+J fix** - Resolved layout thrashing issue when opening terminal pane with CMD+J
# Features
New beta plan mode (type /plan in the Cascade chat input to activate it).
Expanded Codemaps:
* Chat with map
* Mermaid diagrams in maps
* Cascade suggestions for maps
* Chat / edit nudge includes “map option”
* Smart mode option
# Bug fixes and improvements
* Fixes for lag spikes when using sticky scroll
* Fixes for general slowness caused by VSCode OSS update
* Powershell fixes for Windows terminal integration / commands appearing stuck.
* Fixes for certain edge cases around shells with custom themes.
* Fixed an issue where the editor would freeze when opening the terminal
# Falcon Alpha
You can now try a new stealth model in Windsurf: Falcon Alpha. Falcon Alpha is a powerful agentic model designed for speed. We're excited to hear what you build with it!
# Patch Fixes and Improvements
* Various performance improvements and bug fixes.
# Patch Fixes and Improvements
* Support and fixes for AGENTS.md
* Improvements and bug fixes for Codemaps.
* Improvements to Fast Context. Enterprises can opt in using the Windsurf Team Settings. Users can toggle Fast Context automatically using "CMD/Ctrl + Enter" on the first message in a chat.
* New auto-linting behavior that speeds up Cascade.
* Fix for MCP Marketplace not respecting team whitelist options.
* Fixes for Jupyter Notebook tool.
* Fixes for Memories, Rules, and Workflows.
* General bug fixes and improvements.
* Performance optimizations and stability enhancements.
# Dependencies
* Updated Code OSS to version 1.105.0 (Electron: 37.6.0, Chromium: 138.0.7204.251)
# Patch Fixes
* Bug fixes and improvements.
# Patch Fixes
* Bug fixes and improvements.
# Patch Fixes
* Early preview of Windsurf's new Tab model.
* Bug fixes and improvements.
# Patch Fixes
* Bug fixes and improvements.
# Patch Fixes
* Fixes issues with the experimental Cascade tool for finding context not working properly.
* Improvements and bug fixes for the beta Codemaps feature.
* Improvements to the Lifeguard (Beta) feature.
* Fixes issue with custom MCP servers not being displayed correctly in the new MCP panel.
* Fixes issue where some bash commands would get stuck.
* Fixes issue where certain models couldn't create or edit Jupyter notebooks.
* General bug fixes and improvements.
# Patch Fixes
* Various improvements to the experimental Cascade tool which searches and finds relevant files.
# Experimental Cascade Tool
* Experimental Cascade tool to quickly search for files and find relevant context.
# Lifeguard (Beta) Updates
* Try out Lifeguard by clicking the Lifeguard icon at the top right corner of your editor.
# Patch Fixes
* Minor improvements and bug fixes.
# Lifeguard
* Beta preview of lifeguard, a tool to help you find and resolve bugs inside your IDE.
# Codemaps
* Beta preview of codemaps: open the codemaps pane to try it out!
# Claude Sonnet 4.5
* Claude Sonnet 4.5 is now available
# Patch Fixes
* Fix using MCP tools with certain models.
* Fixes to terminal issues on Windows.
# Patch Fixes
* Fix to Cascade slowness issues
# GPT-5-Codex is now in Windsurf!
GPT-5-Codex is now available for free (0x credits) for a limited time for paid users!
Free users can use GPT-5-Codex as well for 0.5x credits.
# Patch Fixes
* Minor improvements and bug fixes
# Cascade Improvements
* Queued messages in Cascade
# Patch Fixes
* Various improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Patch Fixes
* Minor improvements and bug fixes
# Improvements
* Early access to Wave 12 features.
# Patch Fixes
* Performance fixes, especially relating to long chats
# Patch Fixes
* Miscellaneous fixes
# Patch fixes
* Miscellaneous fixes
# Patch Fixes
* Based on the latest release of the Windsurf Editor, v1.11.1
# Patch Fixes
* Based on the latest release of the Windsurf Editor, v1.11.0
# Speak to Cascade
## Voice
* Users can now speak into the chat rather than having to type things out.
## @-mentioning conversations
* @-mention the first conversation so Cascade has full context of it as it goes to write tests for you.
## Deeper Browser integration
* Chat with Cascade about tabs that are open in the Browser using @-mentions
## JetBrains improvements
* Planning Mode, Workflows, and file-based Rules are now available for Cascade on JetBrains
## Improvements
* Now you can @-mention terminal in Cascade.
* You can turn on the Auto-Continue setting to have Cascade automatically continue its response if it hits a limit.
* Support for more MCP servers with easier and more secure authentication by integrating the new Streamable HTTP transport (replaces SSE) and MCP authentication (replaces access tokens or API keys in the config).
* Important for enterprise customers who use Windsurf across lots of repos. Now, you can enforce ignore rules across all repositories by placing .codeiumignore in the \~/.codeium/ folder
# Patch fixes
* Miscellaneous fixes
# Cascade Improvements
* Improvements to Cascade reliability
# Patch fixes
* Miscellaneous fixes
# Patch fixes
* Miscellaneous fixes
# Patch Fixes
* Fixes to default model selection for new users
# Patch Fixes
* Based on the latest release of the Windsurf Editor, v1.10.5
# Patch Fixes
* Based on the latest release of the Windsurf Editor, v1.10.4
# Planning Mode
* Based on the latest release of the Windsurf Editor, v1.10.3
# Planning Mode
* Based on the latest release of the Windsurf Editor, v1.10.1
# Patch fixes
* Miscellaneous fixes
# Updates
* Removal of legacy mode
* Icons in @-mentions
* Theme-aware codeblocks with refreshed design
* Native terminal in Cascade panel
# Patch Fixes
* Based on the latest release of the Windsurf Editor, v1.9.4
# BYOK (Anthropic Key)
* Based on the latest release of the Windsurf Editor, v1.9.2
# SWE-1 Improvements
* Adds multi-modal (image) support to SWE-1
# New Family of SWE-1 Models
* Based on the latest release of the Windsurf Editor, v1.9.0
# Patch Fixes
* Fixes on Windows signing to prevent warnings from Windows Defender
# Patch Fixes
Based on the latest release of the Windsurf Editor, v1.8.2
# Teams Features
Based on the latest release of the Windsurf Editor, v1.8.0
# Improvements
Some improvements to app icons, fixes to SSH server connection, and UI Polish for Cascade Plugins.
# New Features
## Cascade Plugin Panel
* New panel in Cascade for managing MCP Servers
* Easier one-click uninstall and install
* Easier search
* MCP now has MCP resources and multimodel responses
* More MCP Server options coming soon
## Cascade Customization Panel
* Revamped Memories panel to include rules, workflows, and memories
## Revamped rules
* Support for workspace-style rules in `.windsurf/rules`
* Custom triggers when to activate a rule
## Workflows
* Support for quick instructions for Cascade to take on mini-tasks
* `.windsurf/workflows` houses workflows that Cascade can do in the current workspace
* Workflows can be found as slash commands (/) in the Cascade input
## Cascade Improvements
* Conversation sharing with a teams-only accessible URL
## Misc
* Redesigned Model Selector
* Continue button when reaching individual tool call limit
* Hunk accept/reject widget now has a compact mode to cover less code
* Tab respects files mentioned in `codeiumignore`
# Patch Fixes
Based on the latest release of the Windsurf Editor, v1.7.3
# New App Icon & Upgraded Free Tier
Based on the latest release of the Windsurf Editor, v1.7.2
## Patch Fixes
* Updates IDE marketplace link by mirroring Open VSX
## Experimental Improvements
* Bug fixes
* Performance optimizations
* VS Code 1.98.0 Updates
## Updated and Simplified Pricing
* We're simplifying our pricing model by removing Flow Action Credits
* Change takes effect April 21st, 2025
* Plans now come with prompt credits with add-on credits available for purchase
## User Prompt Credits
* Plans now come with prompt credits, which are consumed per every message sent and not via every tool call
* Add-on credits are available for purchase
* Auto-top off (with max limits) can be enabled via profile
## Existing Plans
* Existing plans are migrating over to the new pricing model
* For more information, please visit the Pricing page
## New o4-mini models available and Free (Limited Time)
* Windsurf now supports the o4-mini medium and o4-mini high models, which are free for all users
* Usage in Windsurf is free for a limited time from April 16th to April 21st
# Chat Models
Source: https://docs.devin.ai/desktop/chat/models
Available AI models for Devin Desktop Chat including Base Model, Devin Desktop Premier, GPT-4o, and Claude 3.5 Sonnet with different access levels.
While we provide and train our own dedicated models for Chat, we also give you the flexibility to choose your favorites.
It's worth noting that the Devin Desktop models are tightly integrated with our reasoning stack, leading to better quality suggestions than external models for coding-specific tasks.
Model selection can be found directly under the chat.
## Base Model ⚡
**Access:** All users
Available for unlimited use to all users is a fast, high-quality Devin Desktop Chat model based on Meta's [Llama 3.1 70B](https://ai.meta.com/blog/meta-llama-3-1/).
This model is optimized for speed, and is the **fastest** model available in Devin Desktop Chat. This is all while still being extremely accurate.
## Devin Desktop Premier 🚀
**Access:** Any paying users (Pro, Teams, Enterprise, etc.)
Available in our paid tier is unlimited usage of our premier Devin Desktop Chat model based on Meta's [Llama 3.1 405B](https://ai.meta.com/blog/meta-llama-3-1/).
This is the **highest-performing model** available for use in Devin Desktop, due to its size and integration with Devin Desktop's reasoning engine and native workflows.
## Other Models (GPT-4o, Claude 3.5 Sonnet)
**Access:** Any paying users (Pro, Teams, Enterprise, etc.)
Devin Desktop provides access to OpenAI's and Anthropic's flagship models.
# Chat Overview
Source: https://docs.devin.ai/desktop/chat/overview
Chat with your codebase using Devin Desktop Chat in VS Code and JetBrains. Use @-mentions, persistent context, pinned files, and inline citations.
Chat and its related features are only supported in: VS Code, JetBrains IDEs, Eclipse, Xcode, and Visual Studio.
**Devin Desktop Chat** enables you to talk to your codebase from within your editor.
Chat is powered by our [context awareness](/desktop/context-awareness/overview.mdx) engine.
It combines built-in context retrieval with optional user guidance to provide accurate and grounded answers.
In VS Code, Devin Desktop Chat can be found by default on the left sidebar.
If you wish to move it elsewhere, you can click and drag the Devin Desktop icon and relocate it as desired.
You can use `⌘+⇧+A` on Mac or `Ctrl+⇧+A` on Windows/Linux to open the chat panel and toggle focus between it and the editor.
You can also pop the chat window out of the IDE entirely by clicking the page icon at the top of the chat panel.
In JetBrains IDEs, Devin Desktop Chat can be found by default on the right sidebar.
If you wish to move it elsewhere, you can click and drag the Devin Desktop icon and relocate it as desired.
You can use `⌘+⇧+L` on Mac or `Ctrl+⇧+L` on Windows/Linux to open the chat panel while you are typing in the editor.
You can also open the chat in a popped-out browser window by clicking `Tools > Windsurf > Open Windsurf Chat in Browser` in the top menu bar.
## @-Mentions
An @-mention is a deterministic way of bringing in context, and is guaranteed to be part of the context used to respond to a chat.
In any given chat message you send, you can explicitly refer to context items from within the chat input by prefixing a word with `@`.
Context items available to be @-mentioned:
* Functions & classes
* Only functions and classes in the local index
* Also only available for languages we have built AST parsers for (Python, TypeScript, JavaScript, Go, Java, C, C++, PHP, Ruby, C#, Perl, Kotlin, Dart, Bash, COBOL, and more)
* Directories and files in your codebase
* Remote repositories
* The contents of your in-IDE terminal (VS Code only).
You can also try `@diff`, which lets you chat about your repository's current `git diff` state.
The `@diff` feature is currently in beta.
If you want to pull a section of code into the chat and you don't have @-Mentions available, you can: 1. highlight the code -> 2. right click -> 3. select 'Devin Desktop: Explain Selected Code Block'
## Persistent Context
You can instruct the chat model to use certain context throughout a conversation and across different conversations
by clicking on the `Advanced` tab in the chat panel.
In this tab, you can see:
* **Custom Chat Instructions**: a short prompt guideline like "Respond in Kotlin and assume I have little familiarity with it" to orient the model towards a certain type of response.
* **Pinned Contexts**: items from your codebase like files, directories, and code snippets that you would like explicitly for the model to take into account.
See also [Context Pinning](/desktop/context-awareness/overview#context-pinning).
* **Active Document**: a marker for your currently active file, which receives special focus.
* **Local Indexes**: a list of local repositories that the Devin Desktop context engine has indexed.
## Slash Commands
You can prefix a message with `/explain` to ask the model to explain something of your choice.
Currently, `/explain` is the only supported slash command.
[Let us know](https://discord.com/invite/3XFf78nAx5) if there are other common workflows you want wrapped in a slash command.
## Copy and Insert
Sometimes, Chat responses will contain code blocks. You can copy a code block to your clipboard or insert it directly into the editor
at your cursor position by clicking the appropriate button atop the code block.
If you would like the AI to enact a change directly in your editor based on an instruction,
consider using [Devin Desktop Command](/desktop/command/plugins-overview).
## Inline Citations
Chat is aware of code context items, and its responses often contain linked references to snippets of code in your files.
## Regenerate with Context
By default, Devin Desktop makes a judgment call whether any given question is general or if it requires codebase context.
You can force the model to use codebase context by submitting your question with `⌘⏎`.
For a question that has already received a response, you rerun with context by clicking the sparkle icon.
## Stats for Nerds
Lots of things happen under the hood for every chat message. You can click the stats icon to see these statistics for yourself.
## Chat History
To revisit past conversations, click the history icon at the top of the chat panel.
You can click the `+` to create a new conversation, and
you can click the `⋮` button to export your conversation. This applies only for the Devin Desktop Plugins.
## Settings
Click on the gear icon to reach the `Settings` tab. Here, you can view settings that are applicable to your account. For example, you can update your theme preferences (light or dark), change autocomplete speed, view current plan, and change font size.
The settings panel also gives you an option to download diagnostics, which are debug logs that can be helpful for the Devin Desktop team to debug an issue, should you encounter one.
## Telemetry
You may encounter issues with Chat if Telemetry is not enabled.
To enable telemetry, open your VS Code settings and navigate to User > Application > Telemetry. In the following dropdown, select "all".
To enable telemetry in JetBrains IDEs, open your Settings and navigate to Appearance & Behavior > System Settings > Data Sharing.
# Codemaps
Source: https://docs.devin.ai/desktop/codemaps
Create shareable hierarchical maps of your codebase to visualize code execution flow and component relationships. Navigate and share with teammates.
Powered by a specialized agent, Codemaps are shareable artifacts that bridge the gap between human comprehension and AI reasoning, making it possible to navigate, discuss, and modify large codebases with precision and context.
## What are Codemaps?
While [DeepWiki](/desktop/deepwiki) provides symbol-level documentation, Codemaps help with codebase understanding by mapping how everything works together—showing the order in which code and files are executed and how different components relate to each other.
To navigate a Codemap, click on any node to instantly jump to that file and function. Each node in the Codemap links directly to the corresponding location in your code.
## Accessing Codemaps
You can access Codemaps in one of two ways:
* **Activity Bar**: Find the Codemaps interface in the Activity Bar (left side panel)
* **Command Palette**: Press `Cmd+Shift+P` (Mac) or `Ctrl+Shift+P` (Windows/Linux) and search for "Focus on Codemaps View"
## Creating a Codemap
To create a new Codemap:
1. Open the Codemaps panel
2. Create a new Codemap by:
* Selecting a suggested topic (suggestions are based on your recent navigation history)
* Typing your own custom prompt
* Generating from Cascade: Create new Codemaps from the bottom of a Cascade conversation
3. The Codemap agent explores your repository, identifies relevant files and functions, and generates a hierarchical view
## Sharing Codemaps
You can share Codemaps with teammates as links that can be viewed in a browser.
For enterprise customers, sharing Codemaps requires opt-in because they need to be stored on our servers. By default, Codemaps are only available within your Team and require authentication to view.
## Using Codemaps with Cascade
You can include Codemap information as context in your [Cascade](/desktop/cascade) conversations by using `@-mention` to reference a Codemap.
# Command Overview
Source: https://docs.devin.ai/desktop/command/plugins-overview
Use Devin Desktop Command for AI-powered inline code edits in VS Code and JetBrains. Generate or edit code with natural language prompts using Cmd/Ctrl+I.
**Devin Desktop Command** generates new or edits existing code via natural language inputs, directly in the editor window.
To invoke Command, press `⌘+I` on Mac or `Ctrl+I` on Windows/Linux.
From there, you can enter a prompt in natural language and hit the Submit button (or `⌘+⏎`/`Ctrl+⏎`) to forward the instruction to the AI.
Devin Desktop will then provide a multiline suggestion that you can accept or reject.
If you highlight a section of code before invoking Command, then the AI will edit the selection spanned by the highlighted lines.
Otherwise, it will generate code at your cursor's location.
You can accept, reject, or follow-up a generation by clicking the corresponding code lens above the generated diff,
or by using the appropriate shortcuts (`⌥+A`/`Alt+A`, `⌥+R`/`Alt+R`, and `⌥+F`/`Alt+F`, respectively).
To invoke Command, press `⌘+I` on Mac or `Ctrl+I` on Windows/Linux.
Some users have reported keyboard conflicts with this shortcut, so `⌘+⇧+I` and `⌘+\`on Mac (`Ctrl+⇧+I` and `Ctrl+\` on Windows/Linux)
will also work.
The Command invocation will open an interactive popup at the appropriate location in the code.
You can enter a prompt in natural language and Devin Desktop will provide a multiline suggestion that you can accept or reject.
If you highlight a section of code before invoking Command, then the AI will edit the selection spanned by the highlighted lines.
Otherwise, it will generate code at your cursor's location.
The Command popup will persist in the editor if you scroll around or focus your cursor elsewhere in the editor.
It will act on your most recently highlighted selection of code or your most recent cursor position.
While it is active, the Command popup gives you the following options:
* **Cancel** (`Esc`): this will close the popup and undo any code changes that may have occured while the popup was open.
* **Accept generation** (`⌘+⏎`): this option appears after submitting an instruction and receiving a generation.
It will write the suggestion into the code editor and close the popup.
* **Undo generation** (`⌘+⌫`): this option appears after submitting an instruction and receiving a generation.
It will restore the code to its pre-Command state without closing the popup, while reinserting your most recent instruction
into the input box.
* **Follow-up**: this option appears after submitting an instruction and receiving a generation.
You can enter a second (and third, fourth, etc.) instruction and submit it,
which will undo the currently shown generation and rerun Command using your comma-concatenated instruction history.
# Best Practices
Devin Desktop Command is great for file-scoped, in-line changes that you can describe as an instruction in natural language.
Here are some pointers to keep in mind:
* The model that powers Command is larger than the one powering autocomplete.
It is slower but more capable, and it is trained to be especially good at instruction-following.
* If you highlight a block of code before invoking Command, it will edit the selection. Otherwise, it will do a pure generation.
* Using Command effectively can be an art. Simple prompts like "Fix this" or "Refactor" will likely work
thanks to Devin Desktop's context awareness.
A specific prompt like "Write a function that takes two inputs of type `Diffable` and implements the Myers diff algorithm"
that contains a clear objective and references to relevant context may help the model even more.
# Refactors, Docstrings, and More
Source: https://docs.devin.ai/desktop/command/related-features
Use Command-powered features like code lenses for refactoring, docstring generation, and Smart Paste for cross-language code translation.
Command enables streamlined experiences for a few common operations.
## Function Refactors and Docstring Generation
Above functions and classes, Devin Desktop renders *code lenses*,
which are small, clickable text labels that invoke Devin Desktop's AI capabilities on the labeled item.
You can disable code lenses by clicking the `✕` to the right of the code lens text.
The `Refactor` and `Docstring` code lenses in particular will invoke Command.
* If you click `Refactor`, Devin Desktop will prompt you with a dropdown of selectable, pre-populated
instructions that you can choose from. You can also write your own. This is equivalent to highlighting the function and invoking Command.
* If you click `Docstring`, Devin Desktop will generate a docstring for you above the function header.
(In Python, the docstring will be correctly generated *underneath* the function header.)
## Smart Paste
This feature allows you to copy code and paste it into a file in your IDE written in a different programming language.
Use `⌘+⌥+V` (Mac) or `Ctrl+Alt+V` (Windows/Linux) to invoke Smart Paste.
Behind the scenes, Devin Desktop will detect the language of the destination file and use Command to translate the code in your clipboard.
Devin Desktop's context awareness will try to write it to fit in your code, for example by referencing proper variable names.
Some possible use cases:
* **Migrating code**: you're rewriting JavaScript into TypeScript, or Java into Kotlin.
* **Pasting from Stack Overflow**: you found a utility function online written in Go, but you're using Rust.
* **Learning a new language**: you're curious about Haskell and want to see what your would look like if written in it.
# Command
Source: https://docs.devin.ai/desktop/command/windsurf-overview
Use Devin Desktop Command (Cmd/Ctrl+I) for inline code generation and edits with natural language. No premium credits required.
**Command** generates new or edits existing code via natural language inputs, directly in the editor window.
Command does NOT consume any premium model credits.
To invoke Command, press `⌘+I` on Mac or `Ctrl+I` on Windows/Linux.
You can enter a prompt in natural language and hit the Submit button (or `⌘+⏎`/`Ctrl+⏎`) to forward the instruction to the AI.
If you highlight a section of code before invoking Command, then the AI will edit the selection spanned by the highlighted lines.
Otherwise, it will generate code at your cursor's location.
You can accept, reject, or follow-up a generation by clicking the corresponding code lens above the generated diff,or by using the appropriate shortcuts (`Cmd/Ctrl+Enter`/`Cmd/Ctrl+Delete`)
# Models
Command comes with its own set of models that are optimized for current-file edits.
Devin Desktop Fast is the fastest, most accurate model available.
# Terminal Command
You can use Command in the terminal (`Cmd/Ctrl+I`) to generate the proper CLI syntax using prompts in natural language.
# Best Practices
Command is great for file-scoped, in-line changes that you can describe as an instruction in natural language.
Here are some pointers to keep in mind:
* The model that powers Command is larger than the one powering autocomplete.
It is slower but more capable, and it is trained to be especially good at instruction-following.
* If you highlight a block of code before invoking Command, it will edit the selection. Otherwise, it will do a pure generation.
* Using Command effectively can be an art. Simple prompts like "Fix this" or "Refactor" will likely work
thanks to Devin Desktop's context awareness.
A specific prompt like "Write a function that takes two inputs of type `Diffable` and implements the Myers diff algorithm"
that contains a clear objective and references to relevant context may help the model even more.
# Code Lenses
Source: https://docs.devin.ai/desktop/command/windsurf-related-features
Use Devin Desktop code lenses for quick Explain, Refactor, and Docstring operations on functions and classes directly in the editor.
## Explain, Refactor, and Add Docstring
At the top of the text editor, Devin Desktop exposes *code lenses* on functions and classes.
The `Explain` code lens will invoke Cascade, which will simply explain what the function or class does and how it works.
The `Refactor` and `Docstring` code lenses in particular will invoke Command.
* If you click `Refactor`, Devin Desktop will prompt you with a dropdown of selectable, pre-populated
instructions that you can choose from. You can also write your own. This is equivalent to highlighting the function and invoking Command.
* If you click `Docstring`, Devin Desktop will generate a docstring for you above the function header.
(In Python, the docstring will be correctly generated *underneath* the function header.)
# Fast Context
Source: https://docs.devin.ai/desktop/context-awareness/fast-context
Fast Context is a specialized subagent that retrieves relevant code from your codebase up to 20x faster using SWE-grep models for rapid code retrieval.
Fast Context is a specialized subagent in Devin Desktop that retrieves relevant code from your codebase up to 20x faster than traditional agentic search. It powers Cascade's ability to quickly understand large codebases while maintaining the intelligence of frontier models.
## Using Fast Context
When Cascade receives a query that requires code search, Fast Context will trigger automatically.
You'll notice Fast Context is working when:
* Cascade quickly identifies relevant files across your codebase
* Large codebase queries complete faster than before
* Cascade spends less time reading irrelevant code
## How It Works
Fast Context uses `SWE-grep` and `SWE-grep-mini`, custom models trained specifically for rapid code retrieval. These models combine the speed of traditional embedding search with the intelligence of agentic exploration.
When you make a query to Cascade that requires searching through your codebase, Fast Context automatically activates to:
1. Identify relevant files and code sections using parallel tool calls
2. Execute multiple searches simultaneously
3. Return targeted results in seconds rather than minutes
This approach prevents context pollution and aims to mitigate the traditional speed-accuracy tradeoff. By delegating retrieval to a specialized subagent, Cascade conserves its context budget and intelligence for the actual task at hand.
## SWE-grep Models
Fast Context is powered by the SWE-grep model family:
* **SWE-grep**: High-intelligence variant optimized for complex retrieval tasks
* **SWE-grep-mini**: Ultra-fast variant serving at over 2,800 tokens per second
Both models are trained using reinforcement learning to excel at parallel tool calling and efficient codebase navigation. They execute up to 8 parallel tool calls per turn over a maximum of 4 turns, allowing them to explore different parts of your codebase simultaneously.
The models use a restricted set of cross-platform compatible tools (grep, read, glob) to ensure consistent performance across different operating systems and development environments.
# Context Awareness Overview
Source: https://docs.devin.ai/desktop/context-awareness/overview
Devin Desktop's RAG-based context engine indexes your codebase for intelligent suggestions. Learn about context pinning, knowledge base, and M-Query retrieval.
Devin Desktop's context engine builds a deep understanding of your codebase, past actions, and next intent.
Historically, code-generation approaches focused on fine-tuning large language models (LLMs) on a codebase,
which is difficult to scale to the needs of every individual user.
A more recent and popular approach leverages retrieval-augmented generation (RAG),
which focuses on techniques to construct highly relevant, context-rich prompts
to elicit accurate answers from an LLM.
We've implemented an optimized RAG approach to codebase context,
which produces higher quality suggestions and fewer hallucinations.
Devin Desktop offers full fine-tuning for enterprises, and the best solution
combines fine-tuning with RAG.
## Default Context
Out of the box, Devin Desktop takes multiple relevant sources of context into consideration.
* The current file and other open files in your IDE, which are often very relevant to the code you are currently writing.
* The entire local codebase is then indexed (including files that are not open),
and relevant code snippets are sourced by Devin Desktop's retrieval engine as you write code, ask questions, or invoke commands.
* For Pro users, we offer expanded context lengths, increased indexing limits, and higher limits on custom context and pinned context items.
* For Teams and Enterprise users, Devin Desktop can also index remote repositories.
This is useful for companies whose development organization works across multiple repositories.
## Knowledge Base (Beta)
Only available for Teams and Enterprise customers.
This feature allows teams to pull in Google Docs as shared context or knowledge sources for their entire team.
Currently, only Google Docs are supported. Images are not imported, but charts, tables, and formatted text are fully supported.
Configure knowledge base settings for your team. This page will only be visible with admin privileges.
Admins must manually connect with Google Drive via OAuth, after which they can add up to 50 Google Docs as team knowledge sources.
Cascade will have access to the docs specified in the Devin Desktop dashboard. These docs do not obey individual user access controls, meaning if an admin makes a doc available to the team, all users will have access to it regardless of access controls on the Google Drive side.
### Best Practices
Context Pinning is great when your task in your current file depends on information from other files.
Try to pin only what you need. Pinning too much may slow down or negatively impact model performance.
Here are some ideas for effective context pinning:
* Module Definitions: pinning class/struct definition files that are inside your repo but in a module separate from your currently active file.
* Internal Frameworks/Libraries: pinning directories with code examples for using frameworks/libraries.
* Specific Tasks: pinning a file or folder defining a particular interface (e.g., `.proto` files, abstract class files, config templates).
* Current Focus Area: pinning the "lowest common denominator" directory containing the majority of files needed for your current coding session.
* Testing: pinning a particular file with the class you are writing unit tests for.
## Chat-Specific Context Features
When conversing with Devin Desktop Chat, you have various ways of leveraging codebase context,
like [@-mentions](/desktop/chat/overview#mentions) or custom guidelines.
See the [Chat page](/desktop/chat/overview) for more information.
## Frequently Asked Questions (FAQs)
### Does Devin Desktop index my codebase?
Yes, Devin Desktop does index your codebase. It also uses LLMs to perform retrieval-augmented generation (RAG) on your codebase using our own [M-Query](https://youtu.be/DuZXbinJ4Uc?feature=shared\&t=606) techniques.
Indexing performance and features vary based on your workflow and your Devin Desktop plan. For more information, please visit our [context awareness page](https://windsurf.com/context).
# Remote Indexing
Source: https://docs.devin.ai/desktop/context-awareness/remote-indexing
Index remote repositories from GitHub, GitLab, and BitBucket for enterprise teams without storing code locally.
This feature is only available in the Devin Desktop Plugins for Enterprise plans.
While Local Indexing works great, the user may want to index codebases that they do not have stored locally for our models to take in as context.
For this use case, organizations on Teams and Enterprise plans can use Devin Desktop's Indexing Service to globally import all the relevant repositories. The indexing and embedding is then performed by Devin Desktop's servers (on an isolated tenant), and once the index is created, it is available to be queried by any member of the Team.
## Adding a repository
From [https://windsurf.com/indexing](https://windsurf.com/indexing) you can add a repository to index. Currently we support Git repositories from GitHub, GitLab, and BitBucket.
You can choose to index a particular branch and to automatically re-index the repository after some number of days.
## Security Guarantees
We clone the repository in order to create the index, but once we finish creating embeddings for the codebase we delete all the code and code snippets **assuming that the Store Snippets setting is unchecked.** We don't persist anything other than the embeddings themselves, from which you cannot derive the original code.
Furthermore, all indexing and embedding is performed on a single-tenant instance—nothing about the indexing process is shared between multiple Devin Desktop Teams customers.
# Devin Desktop Ignore
Source: https://docs.devin.ai/desktop/context-awareness/windsurf-ignore
Configure which files and directories Devin Desktop should ignore during indexing using .codeiumignore files with gitignore-style syntax.
## WindsurfIgnore
By default, Devin Desktop Indexing will ignore:
* Paths specified in `gitignore`
* Files in `node_modules`
* Hidden pathnames (starting with ".")
When a file is ignored, it will not be indexed, and also does not count against the Indexing Max Workspace Size file counts.
Files included in .gitignore cannot be edited by Cascade.
If you want to further configure files that Devin Desktop Indexing ignores, you can add a `.codeiumignore` file to your repo root, with the same syntax as `.gitignore`
### Global .codeiumignore
For enterprise customers managing multiple repositories, you can enforce ignore rules across all repositories by placing a global `.codeiumignore` file in the `~/.codeium/` folder. This global configuration will apply to all Devin Desktop workspaces on your system.
The global `.codeiumignore` file uses the same syntax as `.gitignore` and works in addition to any repository-specific `.codeiumignore` files.
## System Requirements
When first enabled, Devin Desktop will consume a fraction of CPU while it indexes the workspace. Depending on your workspace size, this should take 5-10 minutes, and only needs to happen once per workspace. CPU usage will return to normal automatically. Devin Desktop Indexing also requires RAM (\~300MB for a 5000-file workspace).
The "Max Workspace Size (File Count)" setting determines the largest workspace for which Devin Desktop Indexing will try to index a particular workspace / module. If your workspace does not appear to be indexed, please try adjusting this number higher. For users with \~10GB of RAM, we recommend setting this no higher than 10,000 files.
# Context Awareness for Devin Desktop
Source: https://docs.devin.ai/desktop/context-awareness/windsurf-overview
Devin Desktop's RAG-based context engine indexes your codebase for intelligent code suggestions. Supports remote repositories for Teams and Enterprise.
Devin Desktop's context engine builds a deep understanding of your codebase, past actions, and next intent.
Historically, code-generation approaches focused on fine-tuning large language models (LLMs) on a codebase,
which is difficult to scale to the needs of every individual user.
A more recent and popular approach leverages retrieval-augmented generation (RAG),
which focuses on techniques to construct highly relevant, context-rich prompts
to elicit accurate answers from an LLM.
We've implemented an optimized RAG approach to codebase context,
which produces higher quality suggestions and fewer hallucinations.
Devin Desktop offers full fine-tuning for enterprises, and the best solution
combines fine-tuning with RAG.
## Default Context
Out of the box, Devin Desktop takes multiple relevant sources of context into consideration.
* The current file and other open files in your IDE, which are often very relevant to the code you are currently writing.
* The entire local codebase is then indexed (including files that are not open),
and relevant code snippets are sourced by Devin Desktop's retrieval engine as you write code, ask questions, or invoke commands.
* For Pro users, we offer expanded context lengths, increased indexing limits, and higher limits on custom context and pinned context items.
* For Teams and Enterprise users, Devin Desktop can also index remote repositories.
This is useful for companies whose development organization works across multiple repositories.
## Chat-Specific Context Features
When conversing with Devin Desktop Chat, you have various ways of leveraging codebase context,
like [@-mentions](/desktop/chat/overview#mentions) or custom guidelines.
See the [Chat page](/desktop/chat/overview) for more information.
## Frequently Asked Questions (FAQs)
### Does Devin Desktop index my codebase?
Yes, Devin Desktop does index your codebase. It also uses LLMs to perform retrieval-augmented generation (RAG) on your codebase using our own [M-Query](https://youtu.be/DuZXbinJ4Uc?feature=shared\&t=606) techniques.
Indexing performance and features vary based on your workflow and your Devin Desktop plan. For more information, please visit our [context awareness page](https://windsurf.com/context).
# C#, .NET, and CPP
Source: https://docs.devin.ai/desktop/csharp-cpp
Setup guide for C#, .NET Core, .NET Framework (Mono), and C++ development in Devin Desktop using open-source tooling like OmniSharp, clangd, and LLDB.
# Devin Desktop Development Environment Setup Guide
## Overview
Devin Desktop workspaces rely **exclusively on open‑source tooling** for compiling, linting, and debugging. Microsoft's proprietary Visual Studio components cannot be redistributed, so we integrate community‑maintained language servers, debuggers, and compilers instead.
This guide covers two stacks:
1. **.NET / C#** – targeting both .NET Core and .NET Framework (via Mono)
2. **C / C++** – using clang‑based tooling
You can install either or both in the same workspace.
> ⚠️ **Important**: The examples below are templates that you must customize for your specific project. You'll need to edit file paths, project names, and build commands to match your codebase.
***
## 1. .NET / C# development
> **Choose the flavour that matches your codebase.**
### .NET Core / .NET 6+
**Extensions:**
* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) – bundles **OmniSharp LS** and **NetCoreDbg**, so you can hit F5 immediately
* **[.NET Install Tool](https://marketplace.windsurf.com/vscode/item?itemName=ms-dotnettools.vscode-dotnet-runtime)** (`ms-dotnettools.vscode-dotnet-runtime`) – auto‑installs missing runtimes/SDKs
* **[Solution Explorer](https://marketplace.windsurf.com/vscode/item?itemName=fernandoescolar.vscode-solution-explorer)** (`fernandoescolar.vscode-solution-explorer`) – navigate and manage .NET solutions and projects
**Debugger:** Nothing else is required—the extension already contains the language server and an open‑source debugger suitable for .NET Core.
**Build:** `dotnet build`
### .NET Framework via Mono
**Extensions:**
* **[Mono Debug](https://marketplace.windsurf.com/vscode/item?itemName=chrisatwindsurf.mono-debug)** (`chrisatwindsurf.mono-debug`) – debug adapter for Mono ([Open VSX](https://open-vsx.org/extension/chrisatwindsurf/mono-debug))
* **[C#](https://marketplace.windsurf.com/vscode/item?itemName=muhammad-sammy.csharp)** (`muhammad-sammy.csharp`) for language features
**Debugger:** **You must also install the Mono tool‑chain inside the workspace.** Follow the install guide in the [Mono repo](https://gitlab.winehq.org/mono/mono#compilation-and-installation). The debugger extension connects to that runtime at debug time.
> **⚠️ .NET Framework Configuration**: After installing Mono, to use the C# extension with .NET Framework projects, you need to toggle a specific setting in the IDE Settings. Go to **Settings** (in the C# Extension section) and toggle off **"Omnisharp: Use Modern Net"**. This setting uses the OmniSharp build for .NET 6, which provides significant performance improvements for SDK-style Framework, .NET Core, and .NET 5+ projects. Note that this version *does not* support non-SDK-style .NET Framework projects, including Unity.
**Build:** `mcs Program.cs`
### Configure `tasks.json` for Your Project
**You must create/edit `.vscode/tasks.json` in your workspace root** and customize these templates:
```jsonc theme={null}
{
"version": "2.0.0",
"tasks": [
{
"label": "build-dotnet",
"type": "shell",
"command": "dotnet",
"args": ["build", "YourProject.csproj"], // ← Edit this
"group": "build",
"problemMatcher": "$msCompile"
},
{
"label": "build-mono",
"type": "shell",
"command": "mcs",
"args": ["YourProgram.cs"], // ← Edit this
"group": "build"
}
]
}
```
### Configure `launch.json` for Debugging
**You must create/edit `.vscode/launch.json` in your workspace root** and update the paths:
```jsonc theme={null}
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build-dotnet",
"program": "${workspaceFolder}/bin/Debug/net6.0/YourApp.dll", // ← Edit this path
"cwd": "${workspaceFolder}",
"args": [] // Add command line arguments if needed
},
{
"name": "Mono Launch",
"type": "mono",
"request": "launch",
"preLaunchTask": "build-mono",
"program": "${workspaceFolder}/YourProgram.exe", // ← Edit this path
"cwd": "${workspaceFolder}"
}
]
}
```
### CLI equivalents
```bash theme={null}
# .NET Core
$ dotnet build
$ dotnet run
# Mono / .NET Framework
$ mcs Program.cs
$ mono Program.exe
```
### .NET Framework Limitations
⚠️ **Important**: .NET Framework codebases with mixed assemblies (C++/CLI) or complex Visual Studio dependencies have significant limitations in Devin Desktop. These codebases typically require Visual Studio's proprietary build system and cannot be fully compiled or debugged in Devin Desktop due to dependencies on Microsoft-specific tooling and assembly reference resolution.
**Recommended approaches for .NET Framework projects:**
* Use Devin Desktop alongside Visual Studio for code generation and editing
* Migrate compatible portions to .NET Core where possible
***
## 2. C / C++ development
**Required Extensions:**
| Extension | Purpose |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[Windsurf C++ Tools](https://open-vsx.org/extension/Codeium/windsurf-cpptools)** (`Codeium.windsurf-cpptools`) | This is a bundle of the three extensions we recommend using to get started. Package that contains C/C++ LSP support, debugging support, and CMake support. |
> **Note:** Installing the Windsurf C++ Tools bundle will automatically install the individual extensions listed below, so you only need to install the bundle.
| Extension | Purpose |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **[clangd](https://marketplace.windsurf.com/vscode/item?itemName=llvm-vs-code-extensions.vscode-clangd)** (`llvm-vs-code-extensions.vscode-clangd`) | **clangd** language‑server integration. If `clangd` is missing it will offer to download the correct binary for your platform. |
| **[CodeLLDB](https://marketplace.windsurf.com/extension/vadimcn/vscode-lldb)** (`vadimcn.vscode-lldb`) | Native debugger based on LLDB for C/C++ and Rust code. |
| **[CMake Tools](https://marketplace.windsurf.com/vscode/item?itemName=ms-vscode.cmake-tools)** (`ms-vscode.cmake-tools`) | Project configuration, build, test, and debug integration for **CMake**‑based projects. |
For non‑CMake workflows you can still invoke `make`, `ninja`, etc. via custom `tasks.json` targets.
### Configure C/C++ Build Tasks
**Create/edit `.vscode/tasks.json`** for your C/C++ project:
```jsonc theme={null}
{
"version": "2.0.0",
"tasks": [
{
"label": "build-cpp",
"type": "shell",
"command": "clang++",
"args": ["-g", "main.cpp", "-o", "main"], // ← Edit for your files
"group": "build",
"problemMatcher": "$gcc"
}
]
}
```
***
## 3. Notes & Gotchas
* **Open‑source only** – decline any prompt to install proprietary Microsoft tooling; Devin Desktop containers cannot ship it.
* **Container vs Host** – SDKs/compilers must be present **inside** the Devin Desktop workspace container.
* **Keyboard shortcuts**
* Ctrl/⌘ + Shift + B → compile using the active build task
* F5 → debug using the selected `launch.json` config
***
## 4. Setup Checklist
* Install the required extensions for your language stack
* **Create and customize** `.vscode/tasks.json` with your project's build commands
* **Create and customize** `.vscode/launch.json` with correct paths to your executables
* For Mono: install the runtime and verify `mono --version`
* Update file paths, project names, and build arguments to match your codebase
* Test your setup: Press Ctrl/⌘ + Shift + B to build, then F5 to debug
> 💡 **Tip**: The configuration files are project-specific. You'll need to adapt the examples above for each workspace.
# DeepWiki
Source: https://docs.devin.ai/desktop/deepwiki
Get AI-powered explanations of code symbols with DeepWiki. Hover over functions, variables, and classes to understand unfamiliar code in your codebase.
We've implemented [Devin's DeepWiki feature](/work-with-devin/deepwiki) inside of the Devin Desktop Editor. Use it to get up to speed on unfamiliar parts of your codebase.
You can find the DeepWiki interface in the Primary Side Bar / Activity Bar.
To use DeepWiki, hover over a symbol in your codebase and press `Cmd+Shift+Click` to open detailed explanations of code symbols.
Unlike classical hover cards that just show basic type information, DeepWiki-powered hover explains functions, variables, and classes as you read through code.
You can send the DeepWiki explanation to Cascade as an `@-mention` by clicking the `⋮` button in the top right of the DeepWiki panel and selecting `Add to Cascade`.
# Devin in Devin Desktop
Source: https://docs.devin.ai/desktop/devin
Delegate work to Devin, an autonomous cloud agent, directly from Devin Desktop — and review its PRs without leaving your editor.
[Devin](https://devin.ai/) is an autonomous software engineering agent that runs in the cloud. With Devin Desktop 2.0, Devin is built directly into Devin Desktop so you can delegate work to the cloud and review the results without leaving your editor.
Devin is included with every self-serve Devin Desktop plan (Pro, Max, Teams). Enterprise users should reach out to their admin for help.
Access to Devin Cloud is rolling out gradually. If you don't see Devin Cloud, try logging out and logging in to Devin Desktop.
## What Devin does
Devin handles complex tasks end to end — debugging, deployment, testing, and more. Each Devin session runs on its own VM with a desktop, browser, and computer use, so it can keep working after you close your laptop.
## Devin pricing
For self-serve users, Devin is included with your existing Devin Desktop plan and will directly consume the shared quota and extra usage balance from Devin Desktop.
When you first connect your GitHub to Devin, you will be granted up to \$50 in extra usage credits to try out Devin.
## Delegating work to Devin
You can work on a plan with a local Cascade agent and, with a single click, send it to Devin for implementation. Devin spins up its own machine and gets to work while you keep coding locally — or close your laptop and come back later.
## Where Devin shows up
Devin sessions appear alongside your local Cascade sessions in the [Agent Command Center](/desktop/agent-command-center), and can be organized into [Spaces](/desktop/spaces) along with everything else related to a task.
Manage every agent — local and cloud — in one Kanban view.
Group sessions, PRs, files, and context for a task.
## Admin Controls
Enterprise admins need to turn on access to Devin for their enterprise to use Devin. Admins can enable Devin for their enterprise from the Admin Portal. See the [Guide for Admins](/desktop/guide-for-admins#3-1-admin-portal-overview) for more details.
# Devin Desktop FAQ
Source: https://docs.devin.ai/desktop/devin-desktop-faq
Frequently asked questions about the transition from Windsurf to Devin Desktop.
On June 2, 2026, Windsurf is becoming Devin Desktop. This FAQ covers what's changing, what's not, and what it means for your team.
## What is Devin Desktop?
Devin Desktop is the new name for Windsurf. It's the same IDE, same editor, and has the same features, but **unified under the Devin brand**. If you've been using Windsurf 2.0, you've already been using what will become Devin Desktop.
The Agent Command Center (Spaces, Kanban view, multi-agent management) is now front and center. The classic Windsurf experience (editor, extensions, keybindings, workflows, LSPs) is still there and fully accessible. Nothing is getting removed.
## When is this happening?
June 2, 2026. Devin Desktop will be delivered as a regular over-the-air update. You'll receive a heads up that the experience is changing.
## What's changing?
Windsurf becomes Devin Desktop, with the Agent Command Center as the primary view. The full Windsurf IDE is still available, with all the features you know and love - and all your existing work and progress will remain intact. No ongoing work will have any interruptions, and after a quick orientation, the interface will feel immediately familiar.
## Why is this happening?
We're unifying all of our products under the Devin brand: Devin Cloud, Devin Desktop, Devin CLI, and Devin Review. We believe the future of software engineering is managing teams of agents (local and cloud) working alongside you. Devin Desktop is the command center for that and where we expect developers to spend 90%+ of their days.
## Does my plan or pricing change?
No. Your current plan continues to work exactly as it does today. Pricing is unchanged. This applies to all plan types, including legacy Windsurf Enterprise plans.
## How do I get Devin Desktop on the Teams plan?
Devin Desktop is available to users with full seats. On the Teams plan, add a full seat to unlock Devin Desktop and \$40/month of usage that works across all Devin products (Devin Cloud, Devin Desktop, Devin CLI, and Devin Review).
## Do I need to use Devin to use Devin Desktop?
No - you can continue using Devin Desktop with local-only agents.
## Do I need to upgrade to the Cognition Platform Plan, or switch my billing to ACUs?
No. Devin Desktop works out of the box for all existing Windsurf users, including legacy Enterprise customers. Devin Cloud remains a separate SKU. If you're interested in Devin Cloud, talk to your account team.
## What happens to my settings and configuration?
All of your Windsurf settings will be ported to Devin Desktop automatically. Devin Local also inherits your Windsurf settings. If you're on a legacy Windsurf plan, you can still use windsurf.com to manage your settings.
## Will I lose access to anything?
No. The Windsurf IDE, your extensions, your workflows and everything is still there. Your plan, pricing, and access remain the same. Only the name and branding are changing.
For details on how the new [Devin Local](/desktop/devin-local) agent handles features like memories and workflows, see its [limitations](/desktop/devin-local#limitations).
## Are my Windsurf rules still supported? What about Devin rules?
Yes. Devin Desktop continues to read all of your existing Windsurf rules, and adds support for the new `.devin/` equivalents. Nothing you have today needs to change.
Both rule formats are supported side by side:
* **Single-file rules:** the legacy `.windsurfrules` file at your workspace root is still read. (There is no `.devinrules` single-file equivalent — use the directory format below for new rules.)
* **Directory rules:** individual `.md` rule files under a `rules/` directory. `.devin/rules/` is the preferred location and **takes precedence**, with `.windsurf/rules/` kept as a fallback for backward compatibility.
In addition, Devin Desktop reads rules from `AGENTS.md` / `agents.md` files, and can import `.cursor/rules` (`.mdc`) into `.devin/rules/`. Directory-based rules support activation triggers in their frontmatter (always-on, model-decision, glob-based, and manual), so a rule can apply to every request, only when the model decides it's relevant, only for files matching a glob, or only when invoked manually.
Enterprise admins can also deploy rules system-wide; see [System-level configuration](#system-level-configuration-admin-managed-per-machine) below.
## What is Devin Local?
[Devin Local](/desktop/devin-local) is a new local agent available in Devin Desktop. It's more efficient than Cascade, supports subagents, and runs the same architecture as Devin CLI. Devin Local inherits your existing Windsurf settings.
## What happens to Cascade?
The local agent is also being brought under the Devin brand and will be called [Devin Local](/desktop/devin-local), and comes with an improved harness, up to 30% better token efficiency, subagent support, and sandboxing. The existing Cascade agent remains available through July.
Enterprise customers should work with their account team for the transition to Devin Local.
## Will my pricing change when switching to Devin Local?
No, Devin Local inside Windsurf or Devin Desktop uses the exact same pricing model as Cascade: if you are currently using prompt-based credits, you will continue to do so.
## What about Windsurf JetBrains?
The Windsurf JetBrains plugin is not affected by this change and will continue to work as expected (and will keep its name).
## What happened to the `surf` command? How do I open a file from the terminal?
The `surf` shell command has been replaced by the `devin-desktop` command. To install it, open the command palette in Devin Desktop and run **Shell Command: Install 'devin-desktop' command in PATH**. You can then open a file or folder from your terminal the same way you used `surf`:
```bash theme={null}
devin-desktop path/to/file
devin-desktop .
```
The legacy `surf` (and `windsurf`) commands still ship in `~/.codeium/windsurf/bin/` for backward compatibility. If you have scripts or muscle memory tied to `surf`, you can keep using it by aliasing it to the new command:
```bash theme={null}
alias surf="devin-desktop"
```
## What happens with previous Windsurf releases?
As a general rule, we consider every release but the latest to be deprecated, although we do our best to maintain compatibility and not break previous versions. This follows the same model as Microsoft's VSCode. You will be able to continue to download previous Windsurf releases, although we don't recommend it.
## Can our admins test this before the rollout?
Yes. We're happy to share an early build with your admins in the week before June 2 so they can validate the change in your environment ahead of the org-wide rollout. Reach out to your account team to coordinate.
## Will we need to update our network allowlist?
No network changes are required.
For **Cognition Platform** users who log in via devinenterprise.com, all authentication and settings will be managed from the Devin website.
For **Legacy Windsurf Enterprises**, no changes are strictly required. Updates and binaries will continue to be stored on [`codeiumdata.com`](http://codeiumdata.com) and login will continue to happen on `windsurf.com/enterprise`. The only change is that **user-facing website content** (the changelog and documentation) will be moving to a Devin subdomain (`docs.devin.ai`). If you want your team to keep access to the changelog and docs, add `docs.devin.ai` or [`docs.devinenterprise.com`](http://docs.devinenterprise.com) to your allowlist (or `.devin.ai` / `.devinenterprise.com` if you use wildcard rules).
## What is the full list of hostnames we should allow?
No whitelist changes are required before launch.
If you prefer to whitelist proactively, these are the relevant hostnames:
**For all customers, Devin Desktop requires (backend domains):**
* `.codeiumdata.com`
* `update.windsurf.com`
* `.windsurf.com`
* `.codeium.com`
* `.googleapis.com` (authentication)
* `apis.google.com` (authentication)
* `static.devin.ai`
**Cognition Platform customers additionally require (backend domains):**
* `app.devin.ai` (webapp, session URLs, and resource downloads)
* `api.devin.ai` (API backend and the ACP live WebSocket)
If you use wildcard rules, `.devin.ai` covers both. Cognition Platform customers on a `devinenterprise.com` domain should whitelist the equivalent hosts (or `.devinenterprise.com`).
**User-accessible domains (changelog, documentation, and support):**
* `docs.devin.ai` or `docs.devinenterprise.com` (changelog and documentation, after June 2, 2026)
* `decagon.ai` (support)
## What hostnames does the desktop application use for automatic updates?
The desktop application checks for and downloads OTA (over-the-air) updates automatically. The update system uses two types of requests:
1. **Update check API:** the application periodically contacts the update server to see if a new version is available.
1. **Some users disable this feature**
2. **Binary download:** when an update is found, the application downloads the new installer or archive from a CDN.
The relevant hostnames are used by **all customers** (both Legacy Windsurf and Cognition Platform):
* `update.windsurf.com` — update check API
* `windsurf-stable.codeiumdata.com` — binary downloads for the stable and next channels
If your firewall or proxy rules are domain-based, ensure these hostnames are reachable on port 443 (HTTPS). Blocking them will prevent the application from detecting or installing updates.
## What hostnames are used for remote development (SSH, Dev Containers)?
When connecting to a remote machine via SSH or Dev Containers, the desktop application downloads the Remote Extension Host (REH) and CLI binaries to the remote machine. These hostnames are required for **all customers** (both Legacy Windsurf and Cognition Platform):
* `windsurf-stable.codeiumdata.com` — REH and CLI archives (stable/next channels)
* `windsurf-nightly.codeiumdata.com` — REH and CLI archives (insiders channel)
The remote machine must be able to reach these hostnames on port 443. If your remote servers are behind a corporate proxy or airgapped network, ensure these domains are reachable or pre-stage the REH bundle manually.
## Will the app name change affect our device management (MDM) policies?
Yes - this is the most important item for IT and endpoint security teams. The desktop application name is changing from **Windsurf** to **Devin** (appearing as `Devin.app` on macOS, `Devin.exe` on Windows, and `Devin` / `devin` on Linux). Many organizations use central device management (MDM / endpoint management) policies that flag or block any application that isn't explicitly approved, so a policy that only allows "Windsurf" today may flag or block the renamed application after the June 2 update.
**Action required:** Before June 2, 2026, add **Devin** to the allowlist in your device management / endpoint management policies, and confirm with your endpoint security team that the renamed application is approved. Please make sure this reaches the team that actually owns these policies - in many enterprises that team is separate from the one managing the IDE rollout.
## What local file paths does the application read from and write to?
Devin Desktop reads from both legacy (Windsurf/Codeium) and new (Devin) file paths during the transition period, and writes new data to the Devin paths. Enterprise admins managing endpoint policies, file integrity monitoring, or data-loss-prevention rules should be aware of the following directories.
All data from legacy paths will be copied over to new paths when Devin Desktop runs for the first time.
### Per-user IDE data (settings, extensions, workspaces)
This is the VS Code-derived user data directory. If the new path exists, we will read from it:
| OS | Legacy path (read) | New path (read + write) |
| ------- | ----------------------------------------- | -------------------------------------- |
| macOS | `~/Library/Application Support/Windsurf/` | `~/Library/Application Support/Devin/` |
| Windows | `%APPDATA%\Windsurf\` | `%APPDATA%\Devin\` |
| Linux | `~/.config/Windsurf/` | `~/.config/Devin/` |
Contains: `User/settings.json`, `User/keybindings.json`, `User/snippets/`, `globalStorage/`, `Workspaces/`, `argv.json`
### Per-user extensions directory
Extensions are stored in the dot-folder derived from the product name. Legacy paths will remain read-only:
| Legacy path (read) | New path (read + write) |
| ------------------------- | ----------------------- |
| `~/.windsurf/extensions/` | `~/.devin/extensions/` |
### Per-user configuration directory
The primary user-level configuration directory stores user settings, MCP config, global skills, and workflows:
| Purpose | Path |
| ---------------- | --------------------------------------- |
| User settings | `~/.codeium/user_settings.pb` |
| MCP config | `~/.codeium/mcp_config.json` |
| Global workflows | `~/.codeium/windsurf/global_workflows/` |
| Global skills | `~/.codeium/windsurf/skills/` |
| CLI binaries | `~/.codeium/windsurf/bin/` |
The `~/.codeium/` directory structure is not changing in this release. These paths remain the same.
### System-level configuration (admin-managed, per-machine)
Enterprise admins can deploy rules, workflows, and skills system-wide in these directories:
| OS | Legacy path (read) | New path (read + write) |
| ------- | ---------------------------------------- | ------------------------------------- |
| macOS | `/Library/Application Support/Windsurf/` | `/Library/Application Support/Devin/` |
| Windows | `C:\ProgramData\Windsurf\` | `C:\ProgramData\Devin\` |
| Linux | `/etc/windsurf/` | `/etc/devin/` |
Contains subdirectories: `rules/`, `workflows/`, `skills/`
### CLI / shell command binaries
| OS | Path | Binary names |
| ------------- | --------------------------- | ----------------------------------------------------- |
| macOS / Linux | `~/.codeium/windsurf/bin/` | `devin-desktop`, `surf` (legacy), `windsurf` (legacy) |
| macOS / Linux | `~/.local/bin/` | `devin` |
| Windows | `%LOCALAPPDATA%\devin\bin\` | `devin.exe` |
### Workspace-level directories (inside repositories)
The application already supports `.devin/` as the primary workspace directory and falls back to `.windsurf/` for backward compatibility. No admin action is needed for these:
| Legacy (read, fallback) | New (read + write, preferred) | Contents |
| ------------------------------------ | ------------------------------------------------ | ----------------------------------------- |
| `.windsurfrules` (root file) | `.devin/rules/` (directory) | Project rules (single-file legacy format) |
| `.windsurf/rules/` | `.devin/rules/` | Project rules |
| `.windsurf/workflows/` | `.devin/workflows/` | Workflows |
| `.windsurf/skills/` | `.devin/skills/` | Skills |
| `.windsurf/plans/` | `.devin/plans/` | Plans |
| `.codeiumignore` / `.windsurfignore` | `.codeiumignore` (unchanged) / `.windsurfignore` | Ignore patterns |
## What should endpoint security / DLP policies allow?
If your organization uses endpoint security tools that restrict which directories applications can read from or write to, ensure the following paths are permitted for the Devin Desktop application:
* **macOS:** `~/Library/Application Support/Devin/`, `~/.devin/`, `~/.codeium/`, `~/.windsurf/`, `~/.local/bin/devin`
* **Windows:** `%APPDATA%\Devin\`, `%LOCALAPPDATA%\devin\`, `~\.codeium\`, `~\.windsurf\`
* **Linux:** `~/.config/Devin/`, `~/.devin/`, `~/.codeium/`, `~/.windsurf/`, `/etc/devin/`, `~/.local/bin/devin`
The application also uses the system temp directory (`$TMPDIR` / `%TEMP%`) for ephemeral data.
## What hostnames does Devin CLI use for updates?
The Devin CLI has its own update mechanism, separate from the desktop application. This change will have no impact to Devin CLI.
## I have more questions. Who should I contact?
Reach out to your account team or customer support.
# Devin Local Agent
Source: https://docs.devin.ai/desktop/devin-local
Use the same agent harness as Devin CLI directly inside Devin Desktop.
Devin Local is our next-generation agent harness shared with [Devin CLI](https://cli.devin.ai).
It operates on your machine with access to your local files, tools, and environment and is meant to eventually replace Cascade as the primary local agent.
Devin Local is currently in preview and has some [limitations](#limitations) compared to Cascade. Devin Local is not supported in the JetBrains plugin for Devin Desktop.
## Key improvements
In the time since Cascade first launched, model capabilities have evolved significantly. Devin Local is built from the ground up to efficiently leverage these advancements.
### Token efficiency
The Devin Local agent is significantly more token-efficient, with a greater focus on prompt caching. Most tasks take up to 30% fewer tokens than Cascade to accomplish the same result.
### Subagents
The Devin Local agent can spawn independent [subagents](https://cli.devin.ai/docs/subagents) to handle subtasks — either in the foreground or background. Subagents share tools and codebase context with the parent agent but operate in their own conversation chain.
### Sandboxing
The Devin Local agent supports OS-level sandboxing. When enabled, the sandbox enforces:
* **Filesystem isolation** — writable and readable paths are derived from your permission scopes
* **Network filtering** — domain allowlists and denylists control what the agent can reach
Enterprise admins can enforce sandbox behavior across the organization through [team settings](https://cli.devin.ai/docs/enterprise/team-settings#sandbox-enforcement), including requiring sandbox mode for all users and configuring organization-wide domain filtering rules.
### Quick Review
[Quick Review](/desktop/quick-review) is a dedicated subagent available with the Devin Local agent to get rapid feedback on changes.
## Switching your agent
In most cases, you can switch your agent to `Devin Local` when starting *new* conversations via the agent selector in the bottom right corner of Devin Desktop.
### Agent settings
If Devin Local doesn't appear in the agent selector, you might need to enable it from `Devin Settings`:
1. Open the Command Palette with `Cmd+Shift+P` (macOS) or `Ctrl+Shift+P` (Windows/Linux)
2. Open `Devin User Settings`
3. Click the "Agents" tab
4. Toggle the "Devin Local" agent on
5. Restart Devin Desktop
You can also choose to disable Cascade entirely with the `devin.cascade.enabled` setting.
### Enterprise admins
Devin Local is a bundled agent that Devin Desktop fetches from the server. Whether it appears in the agent selector is controlled by the **Devin Local Agent** team setting:
* On **Team** and other non-enterprise plans it is available by default (unless an individual member has this access disabled).
* On **Enterprise** plans it is gated, so an admin must turn it on for members.
Enterprise admins manage this from the team settings dashboard:
* **Devin Enterprise admins** — **Settings → Enterprise → Windsurf** (`app.devin.ai/org/{orgName}/settings/windsurf`). Under **Features**, enable **Devin Local Agent** ("Allow members to use the Devin Local agent in Devin Desktop and delegate tasks to Devin's terminal agent via ACP").
* **Windsurf Enterprise admins** — the [Windsurf dashboard](https://windsurf.com/team/settings).
Once enabled, Devin Local appears in the agent selector for all members after they restart Devin Desktop — no per-user setup or custom [ACP registry config](/desktop/acp#team-registry-configuration) is required.
## Differences
### Permissions model
Devin Local replaces [auto-execution levels](/desktop/terminal#auto-execution-levels) with a more fine-grained permissions system to control which actions the agent can take:
* **Deny** rules block actions entirely (highest priority)
* **Ask** rules always prompt for approval
* **Allow** rules auto-approve actions without prompting
Permissions can be scoped to file reads, file writes, command execution, HTTP fetches, and MCP tools. They can be configured at the project, user, or organization level.
### MCP permissions
Unlike Cascade, the default configuration of the Devin Local agent prompts for approval before calling any MCP tool. When the agent wants to invoke an MCP tool, you can allow the specific tool or every tool on that MCP server, either for the current session or permanently.
Enterprise admins can default-allow specific MCP servers or tools so that trusted integrations don't prompt every time. See [tool-based permissions](/cli/reference/permissions#tool-based-permissions) for how to configure these rules.
### MCP server configuration
With the Devin Local agent, MCP servers are configured via [config files](https://cli.devin.ai/docs/extensibility/mcp/configuration) on your local machine.
The file location is determined by the scope:
| Scope | Location | Shared with team? |
| -------------- | ----------------------------- | ---------------------------------- |
| Project | `.devin/config.json` | Yes (checked into version control) |
| Local override | `.devin/config.local.json` | No (gitignored) |
| User | `~/.config/devin/config.json` | No |
## Skills
Skills are reusable, model-invoked bundles of instructions (and optional scripts) that extend what the Devin Local agent can do. Because Devin Local shares the same agent harness as [Devin CLI](https://cli.devin.ai), it uses the same skills format and discovery mechanism.
Skills are also the recommended way to migrate Cascade memories and workflows, which aren't supported by the Devin Local agent (see [Limitations](#limitations)) — capture a repeatable procedure once and the agent invokes it automatically when relevant.
See the [Devin CLI skills documentation](/cli/extensibility/skills/overview) for details on how to create, configure, and scope skills.
## Limitations
The following features are not currently supported with the Devin Local agent:
* **Memories** — The Devin Local agent does not persist memories between sessions. Migrate your critical memories to [skills](/desktop/cascade/skills).
* **Workflows** — Workflows are not available with the Devin Local agent. Migrate your workflows to [skills](/desktop/cascade/skills).
* **Codemaps** — The Devin Local agent does not yet read [codemaps](/desktop/codemaps).
* **Code Lenses** - Currently [code lenses](/desktop/command/windsurf-related-features) do not yet trigger the Devin Local agent.
* **Fast Context** - Devin Local uses subagents to explore code, but doesn't have the same fast context UI as Cascade.
* **App Deploys** - The Devin Local agent does not support app deploys.
* **Browser previews** - The Devin Local agent does not yet support in-IDE [browser previews](/desktop/previews), including the DOM element selector tool.
* **Conversation Sharing** - Conversation sharing is not yet available with the Devin Local agent.
The Devin Local agent does support [rules and AGENTS.md files](https://cli.devin.ai/docs/extensibility/rules) as well as [skills](https://cli.devin.ai/docs/extensibility/skills/overview) for providing persistent context and reusable workflows.
### Analytics
The Devin Local agent does not yet report all of the analytics that Cascade collects. The following data is collected for Cascade but **not** for Devin Local:
* **Tool usage** — The [`cascade_tool_usage`](/desktop/accounts/api-reference/cascade-analytics) data source (per-tool call counts such as Code Edit, Run Command, Search Web, and MCP Tool) only includes Cascade sessions. Tool calls made by the Devin Local agent are not reported. To monitor or restrict tool usage with the Devin Local agent, use [hooks](/cli/extensibility/hooks/overview) and [permissions](/cli/reference/permissions) instead.
* **Lines suggested and accepted** — The [`cascade_lines`](/desktop/accounts/api-reference/cascade-analytics) data source (daily lines of code suggested and accepted) does not include code written by the Devin Local agent.
* **Write/Read mode** — The Devin Local agent does not report a Cascade mode, so the `mode` field in the `cascade_runs` data source is not populated for Devin Local activity.
Devin Local activity is still included in the [`cascade_runs`](/desktop/accounts/api-reference/cascade-analytics) data source (model usage, messages sent, and credit consumption) and in the [Cascade Data source](/desktop/accounts/analytics-api#cascade-data) of the Custom Analytics API.
The Devin CLI does not report analytics for [hybrid deployments](https://devin.ai/blog/self-hosted-deployment-maintenance-mode).
### Enterprise controls
Enterprise admins can configure the Devin Local agent through [team settings](https://windsurf.com/team/settings), including [new controls only available with the Devin Local agent](https://cli.devin.ai/docs/enterprise/team-settings):
* **Sandbox enforcement** - Require sandbox mode for all users and configure organization-wide domain filtering rules
* **Granular permissions** - Control which actions the agent can take with more fine-grained permissions
* **Network enforcement** - Control network access with allowed and denied domains
Additionally, the "Enable Cascade" control can be used to disable the legacy Cascade agent entirely to ensure your team follows the new controls available with Devin CLI.
#### Unsupported enterprise controls
The following legacy enterprise controls are not available with the Devin Local agent:
* **Restrict Tool Calls to Workspace** - by default, the Devin Local agent can only read/edit files within the workspace.
Custom [permissions](https://cli.devin.ai/docs/reference/permissions) are a more flexible replacement that can be used to replicate the same rules.
* **App Deploys** - App deploys are not yet supported with the Devin Local agent.
* **Conversation Sharing** - Conversation sharing is not yet supported with the Devin Local agent.
* **Enable or disable Cascade for your team** - This setting only controls the legacy Cascade agent and does not apply to the Devin Local agent or the Devin CLI.
* **Global tool calling disabled** - If you previously disabled tool calling entirely, write an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI instead.
The following legacy controls will still be enforced as a fallback if you haven't yet implemented an enterprise CLI permission config:
* **Auto Run Terminal Commands** - The Devin Local agent uses its own [permissions model](https://cli.devin.ai/docs/reference/permissions) instead of auto-execution levels; we recommend using this instead, but the old control will still be enforced as a fallback.
* **Terminal allow lists** - Implement an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI to allow specific terminal commands.
* **Terminal deny lists** - Implement an equivalent [permission policy](https://cli.devin.ai/docs/reference/permissions) for Devin CLI to deny specific terminal commands.
## Further reading
* [Devin CLI quickstart](https://cli.devin.ai/docs)
* [Essential commands](https://cli.devin.ai/docs/essential-commands)
* [Extensibility overview](https://cli.devin.ai/docs/extensibility)
* [Team settings](https://cli.devin.ai/docs/enterprise/team-settings)
# Enterprise Policies
Source: https://docs.devin.ai/desktop/enterprise-policies
Manage Devin Desktop settings centrally with enterprise policies. Configure extension allowlists, update modes, and other settings on Windows, macOS, and Linux using group policies, configuration profiles, and JSON policy files.
# Enterprise Policies for Extension Management
Enterprise policies in Devin Desktop enable organizations to centrally manage editor settings for their development teams to ensure consistency and security across the organization. When a policy value is set, it overrides the Devin Desktop setting configured at any level (default, user, and workspace).
IT admins can deploy and enforce specific Devin Desktop configurations on users' devices through different device management solutions. Devin Desktop supports applying policies on **Windows**, **macOS**, and **Linux**.
Devin Desktop uses its own policy paths, separate from VS Code. Policies configured for VS Code will not apply to Devin Desktop, and vice versa.
***
## Windows Group Policies
Devin Desktop supports [Windows Registry-based Group Policy](https://learn.microsoft.com/en-us/windows/client-management/group-policies-overview). Policies can be deployed using Mobile Device Management (MDM) solutions or configured manually on individual devices.
Devin Desktop reads policies from the registry path `Software\Policies\Windsurf\{ProductName}` (e.g. `Software\Policies\Windsurf\Windsurf` or `Software\Policies\Windsurf\WindsurfInsiders`). This is different from VS Code, which reads from `Software\Policies\Microsoft\{ProductName}`.
### Step 1: Obtain the ADMX and ADML Files
Each Devin Desktop release ships with a `policies` directory containing ADMX template files that define the available policies.
You can get the ADMX and ADML files from an existing Devin Desktop installation:
1. Navigate to the Devin Desktop installation directory.
2. Look for the `policies` folder. This folder contains the ADMX template files (e.g. `windsurf.admx`) and a `locales` subfolder with ADML files for different languages.
Alternatively, download and extract the Devin Desktop zip archive and locate the `policies` folder in the extracted files.
### Step 2: Install the Policy Definition Files
1. Copy the `windsurf.admx` file to `C:\Windows\PolicyDefinitions`.
2. Copy the appropriate ADML file from the `locales` subfolder (e.g. `en-US\windsurf.adml`) to `C:\Windows\PolicyDefinitions\` (e.g. `C:\Windows\PolicyDefinitions\en-US`).
You need administrator privileges to copy files to the `PolicyDefinitions` directory.
For Active Directory environments, copy the ADMX and ADML files to the [Central Store](https://learn.microsoft.com/en-us/troubleshoot/windows-client/group-policy/create-and-manage-central-store) to make the policies available across the domain.
### Step 3: Deploy the Policies
You can deploy the configured policies at scale using an MDM solution, or test them manually on a local machine using the Local Group Policy Editor.
#### Deploy at Scale
Products such as [Microsoft Intune](https://www.microsoft.com/en-us/security/business/microsoft-intune) or Active Directory Group Policy can be used to centrally manage device policy at scale. These solutions allow administrators to deploy the ADMX/ADML files and policy configurations to multiple devices from a central location.
#### Manually Test Policies on a Local Machine
Follow these steps to configure Devin Desktop policies on a local Windows machine using the Local Group Policy Editor:
1. **Open the Local Group Policy Editor:**
* Press `Windows+R` to open the Run dialog.
* Type `gpedit.msc` and press Enter.
* If prompted by User Account Control, select **Yes**.
2. **Navigate to Windsurf policies:**
* **Computer Configuration** > **Administrative Templates** > **Windsurf**
* **User Configuration** > **Administrative Templates** > **Windsurf**
Computer-level policies take precedence over user-level policies when both are configured.
3. **Configure a policy:**
* Double-click on the policy you want to configure (e.g. **AllowedExtensions**).
* Select **Enabled** to enforce the policy.
* For string policies (e.g. `AllowedExtensions`), enter the value in the text field. For example: `{"publisher1": true, "publisher2": true}`.
* For boolean policies (e.g. **EnableTelemetry**), selecting **Enabled** or **Disabled** sets the value.
* Select **OK** to save the changes.
If there is a syntax error in a string policy value (e.g. malformed JSON), the setting will not be applied. You can check the Window log in Devin Desktop for errors (open the Command Palette with `Ctrl+Shift+P` and enter **Show Window Log**).
The policy takes effect the next time Devin Desktop is started.
***
## macOS Configuration Profiles
Configuration profiles manage settings on macOS devices. A profile is an XML file (`.mobileconfig`) with key/value pairs that correspond to available policies.
These profiles can be deployed using Mobile Device Management (MDM) solutions or installed manually on individual devices.
### Step 1: Obtain the Sample Configuration Profile
Each Devin Desktop release ships with a sample `.mobileconfig` file. To locate the sample file on a macOS device with Devin Desktop installed:
1. Open Finder and navigate to `/Applications`.
2. Right-click on **Devin.app** and select **Show Package Contents**.
3. Navigate to `Contents/Resources/app/policies`.
4. Locate the sample `.mobileconfig` file.
### Step 2: Configure Policy Values
1. Copy the sample `.mobileconfig` file to a working location (e.g. your Desktop or Documents folder).
2. Open the copied file in a text editor.
3. Edit the policy values according to your requirements:
**String policies** — policies that accept text values or JSON strings:
```xml theme={null}
AllowedExtensions{"publisher1": true, "publisher2": true}
```
**Boolean policies** — policies that accept true/false values:
```xml theme={null}
EnableFeedbackEnableTelemetry
```
**Remove unwanted policies** — delete both the key and value for any policy you don't want to enforce.
If there is a syntax error in the policy value, the setting will not be applied. You can check the Window log in Devin Desktop for errors (open the Command Palette with `⌘+Shift+P` and enter **Show Window Log**).
### Step 3: Deploy the Policies
#### Deploy at Scale
For enterprise deployments across multiple devices, use Mobile Device Management (MDM) solutions such as Apple Business Manager with MDM.
For more information on configuration profiles, refer to [Apple's documentation on configuration profiles](https://support.apple.com/guide/deployment/intro-to-mdm-profiles-depc0aadd3fe/web).
#### Manually Test Policies on a Local Machine
1. **Install the configuration profile:**
* Save your edited `.mobileconfig` file.
* Double-click the `.mobileconfig` file in Finder.
* System Settings will open. Review the profile details and select **Install**.
* If prompted, authenticate with your administrator credentials.
2. **Verify the profile installation:**
* Open **System Settings**.
* Navigate to **Privacy & Security** > **Profiles** (or **General** > **Device Management** on older versions).
* Verify that your Devin Desktop configuration profile appears in the list.
* Launch Devin Desktop to see the policies in effect.
Policies take effect immediately for new Devin Desktop instances. You may need to restart Devin Desktop if it is already running.
#### Remove a Configuration Profile
To remove policies and revert to default settings:
1. Open **System Settings** > **Privacy & Security** > **Profiles**.
2. Select the Devin Desktop configuration profile.
3. Select the **Remove** (or **-**) button.
4. Authenticate with your administrator credentials to confirm removal.
***
## Linux JSON Policies
You can configure Devin Desktop setting policies on Linux devices by placing a JSON policy file at `/etc/windsurf/policies/policy.json`. This approach uses a simple JSON format to define policy values.
Devin Desktop reads policies from `/etc/windsurf/policies/policy.json`, while VS Code uses `/etc/vscode/policy.json`. Ensure you place the file in the correct location for Devin Desktop.
### Step 1: Obtain the Sample Policy File
Each Devin Desktop release ships with a sample `policy.json` file. You can obtain it from an existing installation — it is located in the `resources/app/policies` directory within the Devin Desktop installation path.
### Step 2: Configure Policy Values
1. Copy the sample `policy.json` file to a working location:
```bash theme={null}
sudo cp /path/to/windsurf/resources/app/policies/policy.json /tmp/policy.json
```
2. Edit the file using your preferred text editor:
```bash theme={null}
sudo nano /tmp/policy.json
```
3. Configure the policy values. For example, to allow only specific extension publishers:
```json theme={null}
{
"AllowedExtensions": "{\"publisher1\": true, \"publisher2\": true}",
"UpdateMode": "manual"
}
```
### Step 3: Deploy the Policies
#### Deploy at Scale
For enterprise Linux deployments across multiple devices, use configuration management tools such as **Ansible**, **Puppet**, **Chef**, or **Salt** to deploy the `policy.json` file. These tools allow administrators to deploy, update, and remove policies remotely across all managed Linux devices.
#### Manually Test Policies on a Local Machine
1. **Create the policy directory and copy the file:**
```bash theme={null}
sudo mkdir -p /etc/windsurf/policies
sudo cp /tmp/policy.json /etc/windsurf/policies/policy.json
sudo chmod 644 /etc/windsurf/policies/policy.json
sudo chown root:root /etc/windsurf/policies/policy.json
```
You need root or sudo privileges to create the directory and manage policy files in `/etc/windsurf/policies`.
2. **Verify the policy installation:**
* Launch Devin Desktop (or restart it if already running).
* Open **File** > **Preferences** > **Settings** (or press `Ctrl+,`).
* Look for settings that correspond to your configured policies — they should show as managed by your organization or have a lock icon.
#### Remove Policies
To remove all policies and revert to default settings, delete the `/etc/windsurf/policies/policy.json` file and restart Devin Desktop.
***
## Extension Management Policies
One of the most common uses of enterprise policies is controlling which extensions users can install. The `AllowedExtensions` policy lets administrators define an allowlist of permitted extension publishers.
### AllowedExtensions
The `AllowedExtensions` policy accepts a JSON string specifying which extension publishers are permitted. When this policy is active, users can only install extensions from the listed publishers.
**Example value:**
```json theme={null}
{"windsurf": true, "github": true, "ms-python": true}
```
This can be configured through any of the platform-specific mechanisms described above:
* **Windows:** Set via Group Policy ADMX templates or directly in the registry at `Software\Policies\Windsurf\{ProductName}`.
* **macOS:** Set in a `.mobileconfig` configuration profile.
* **Linux:** Set in `/etc/windsurf/policies/policy.json`.
When the `AllowedExtensions` policy is enforced, the Extensions view in Devin Desktop indicates that the setting is managed by your organization, and users cannot override it.
***
## Additional Resources
* [Devin Desktop Guide for Enterprise Admins](/desktop/guide-for-admins)
# Welcome to Devin Desktop
Source: https://docs.devin.ai/desktop/getting-started
Download and install Devin Desktop IDE for Mac, Windows, or Linux. Import VS Code or Cursor settings, configure themes, and start coding with AI-powered assistance.
Devin Desktop is a next-generation AI IDE built to keep you in the flow. On this page, you'll find instructions on how to install Devin Desktop on your computer, navigate the onboarding flow, and get started with your first AI-powered project.
Our next-generation agent harness, shared with Devin CLI. Runs on your machine as the primary local agent.
Credits and usage.
An upgraded Terminal experience.
MCP servers extend the agent's capabilities.
Memories and rules help customize behavior.
Instantly understands your codebase.
Advanced configuration options.
Automate repetitive trajectories.
Deploy applications in one click.
See what's new with Devin Desktop in our [changelog](https://windsurf.com/changelog)!
Join our [Discord](https://discord.gg/GjCYNGChrw) for support, feature requests, and bug reports!
## Set Up
Minimum OS Version: OS X Yosemite
Minimum OS Version: Windows 10
Minimum Requirements: glibc >= 2.28, glibcxx >= 3.4.25 (e.g. Ubuntu 20, Debian 10, Fedora 36, RHEL 8)
## Onboarding
### 1. Select your preferred theme
Keep the "Install `devin-desktop` terminal command" option checked to launch Devin Desktop from your terminal:
```bash theme={null}
devin-desktop ~/Developer/my-project
```
You can also pick your preferred keybindings by expanding "Import Settings":
### 2. Log In / Sign Up
To use Devin Desktop, you will need to log in with your Devin account. If you don't have one yet, you can sign up for free!
If you're having trouble logging in, you can also log in manually by providing Devin Desktop with a Devin API key:
### 3. Start Building with Devin!
Explore some of our recommended plugins to get the most out of Devin Desktop!
## Things to Try
Now that you've successfully opened Devin Desktop, let's try out some of the features! These are all conveniently accessible from the starting page. :)
On the right side of the IDE, you'll notice the agent panel. This is your AI-powered code assistant! You can chat, write code, and run code with it. Learn more about [Devin Local](/desktop/devin-local).
You can create brand new projects with the agent! Click the "New Project" button to get started.
You can open a folder or connect to a remote server via SSH or a local dev container. Learn more [here](/desktop/advanced).
Click on the "Devin - Settings" button on the bottom right to pop up the settings panel. To access Advanced Settings, click on the button in this panel or select "Devin Settings" in the top right profile dropdown.
You can open the command palette with the `⌘+⇧+P` (on Mac) or `Ctrl+Shift+P` (on Windows/Linux) shortcut. Explore the available commands!
## Forgot to Import VS Code Configurations?
You can easily import your VS Code/Cursor configuration into Devin Desktop if you decide to do so after the onboarding process.
Open the command palette (Mac: `⌘+⇧+P`, Windows/Linux: `Ctrl+Shift+P`) and type in the following:
## Incompatible Extensions
There are a few extensions that are incompatible with Devin Desktop. These include other AI code complete extensions and proprietary extensions. You cannot install extensions through any marketplace on Devin Desktop.
## Custom App Icons (beta)
For paying users of Devin Desktop, you can choose between different Devin Desktop icons while it sits in your dock. Currently, this feature is only available for Mac OS, with other operating systems coming soon.
To change your app icon, simply click the profile/settings icon in the top right corner of the editor and select "Customize App Icon".
## Devin Desktop Next
Devin Desktop Next is a prerelease version of Devin Desktop which users can choose to opt-in to access the newest features and capabilities as early as possible, even if the features are not fully polished. Features will typically be rolled out to Devin Desktop Next first, and then into the stable release shortly after.
You can opt-in to Devin Desktop Next simply by [downloading it here](https://windsurf.com/editor/download-next).
## Uninstall Devin Desktop
To uninstall Devin Desktop from your system, follow these steps:
Ensure that Devin Desktop is not currently running before proceeding with the uninstallation.
Drag the Devin Desktop application from the Applications folder to the Trash.
The application is usually located in one of these folders:
* `C:\Program Files\Windsurf`
* `C:\Users\[YourUsername]\AppData\Local\Programs\Windsurf`
Delete the Devin Desktop folder from the appropriate location.
Remove the Devin Desktop folder from the location where you installed it.
Delete the Devin Desktop configuration folder:
```bash theme={null}
rm -rf ~/.codeium/windsurf
```
Delete the Devin Desktop configuration folder:
```
C:\Users\[YourUsername]\.codeium\windsurf
```
If you installed Devin Desktop in PATH, remove it from your system's PATH environment variable.
If you installed Devin Desktop using your system's package manager or control panel, you can also use that to uninstall it.
Empty your Trash or Recycle Bin to complete the uninstallation.
# Guide for Admins
Source: https://docs.devin.ai/desktop/guide-for-admins
Enterprise admin guide for deploying Devin Desktop at scale. Configure SSO, SCIM, RBAC, analytics, and team management for large organizations.
# Devin Desktop Guide for Enterprise Admins
> **Purpose** This guide helps enterprise *platform / developer-experience* administrators plan, roll out, and operate Devin Desktop for organizations with **large enterprise teams**. It is intentionally *opinionated* and links out to detailed “how-to” docs per topic. Treat it both as a **read-through guide** *and* as a **check-list** when onboarding.
***
## 1. Audience & Pre-Requisites
| | Details |
| --------------------- | --------------------------------------------------------------------------------------- |
| **Who should read** | Platform / Dev-Ex admins, Corporate IT, Centralized Tooling teams |
| **Assumed knowledge** | Basic Devin Desktop terms (team, role), Enterprise IdP concepts (SAML, SCIM), CLI usage |
| **Out-of-scope** | Deep security / compliance internals → see **Security & Compliance** docs |
***
## 2. Quick-Start Checklist
1. Confirm organization-wide settings
2. Set up **SSO** (Okta, Microsoft Entra ID, Google; see SAML docs for others)
3. Enable **SCIM** & map IdP groups → Devin Desktop *teams*
4. Define **role** & **permission** model (least privilege)
5. Configure **Admin Portal**: team view & security controls
6. Distribute **Devin Desktop clients/extensions** to end users
7. View **analytics dashboards** & **API access tokens**
> Use this list as your “Day 0” deployment tracker.
***
## 3. Core Devin Desktop Concepts
* **Team** – flat collections of members; no nested teams. Teams (also called *Groups*) drive **role assignment** and **analytics grouping**, letting you scope permissions and view usage metrics per cohort.
* **Roles & Permissions** – predefined RBAC; admins are primarily responsible for **team management**, **Devin Desktop feature settings**, and **analytics**. Built-in roles usually cover these needs, but creating a custom role with *analytics-view* permission lets team managers and leads see metrics for their own teams. (RBAC docs)
* **Admin Portal** – centralized UI for user & team management, credit usage, SSO configuration, feature toggles (Web Search, MCP, Deploys), analytics dashboards/report export, service keys for API usage, and role/permission controls.
* **Agents & Workspaces** – Devin Desktop IDE and JetBrains Plugins are Agentic
### 3.1 Admin Portal Overview
The Admin Portal provides centralized management for all Devin Desktop enterprise features through an intuitive web interface. Core capabilities include:
#### User & Team Management
* Add, remove, and manage users across your organization
* Configure teams with proper role assignments
* User status and activity monitoring
#### Authentication & Security
* Configure SSO integration with major identity providers
* Set up SCIM provisioning for automated user lifecycle management
* Manage role-based access controls (RBAC)
* Create and manage **service keys** for API automations with scoped permissions
#### Feature Toggles & Controls
> **Important:** These feature controls affect behavior for your entire organization and can only be modified by administrators. New major features with data privacy implications are released in the "off" state by default to ensure you have control over when and how they're enabled.
The Admin Portal gives you granular control over Devin Desktop features that can be enabled or disabled per team. **Data Privacy Note:** Some features require storing additional data or telemetry as noted below:
**Models Configuration**
* Configure which AI models your teams can access within Devin Desktop
* You can **filter by model** (choose specific models such as SWE-1.5, Claude Opus 4.6, etc.) or **filter by provider** (e.g., OpenAI, Anthropic, Google). Only one filter type is enforced at a time.
* Select multiple models or providers for different use cases (Cascade, Command, chat, etc.)
**Default Model Override**
* Set the default Cascade model for users on your team
* This model is pre-selected each time a user opens Devin Desktop (not just the first time)
* Users can still change their model at any time during a session
* Only models enabled in Models Configuration are available as default options
**Auto Run Terminal Commands** *(Beta)*
* Set the maximum auto-execution level for terminal commands across your organization
* Four levels available: **Disabled** (no auto-execution), **Allowlist Only** (only allowlisted commands), **Auto** (AI-judged safe commands), and **Turbo** (all commands except denylisted)
* Users can select any level up to the maximum you configure, giving them flexibility within your security policy
* [Learn more about auto-executed commands](https://docs.windsurf.com/windsurf/terminal#auto-executed-cascade-commands)
**Terminal Command Lists** *(Beta)*
* Configure **team-wide allowlist and denylist** for terminal commands that apply to all team members
* **Allowlist**: Commands in this list will be auto-executed without user confirmation (when auto-execution is enabled)
* **Denylist**: Commands in this list will always require user approval before execution
* **Precedence**: The denylist takes precedence over the allowlist—if a command matches both lists, it will require approval
* Access via Admin Portal → Team Settings → Terminal Commands → **Manage Lists**
* These team-level lists are merged with individual user allow/deny lists configured in Devin Desktop settings
**MCP Servers** *(Beta)*
* Enable users to configure and use Model Context Protocol (MCP) servers
* Maintain whitelisted MCP servers for approved integrations
* **Security Note:** Review operational and security implications before enabling, as MCP can create infrastructure resources outside Devin Desktop's security monitoring
* Learn more about Model Context Protocol (MCP)
* MCP admin controls for teams & enterprises
**App Deploys** *(Beta)*
* Manage deployment permissions for your teams in Cascade
* Learn more about App Deploys
**Conversation Sharing**
* Allow team members to share Cascade conversations with others
* Conversations are securely uploaded to Devin Desktop servers
* Shareable links are restricted to logged-in team members only
* Learn more about sharing conversations
**Devin**
* **What Devin does** — Delegate complex tasks end to end (debugging, deployment, testing, and more) to an autonomous cloud agent. Each Devin session runs on its own VM with a desktop, browser, and computer use, so it can keep working after you close your laptop.
* **Delegating work to Devin** — Plan with a local Cascade agent and, with a single click, send the task to Devin for implementation. Devin spins up its own machine and gets to work while your team keeps coding locally.
* **Where Devin shows up** — Devin sessions appear alongside local Cascade sessions in the Agent Command Center and can be organized into Spaces along with everything else related to a task.
* Learn more about Devin
**PR Reviews (GitHub Integration)**
* Install Devin Desktop in your team's GitHub organization
* Enable PR review automation and description editing
* Learn more about Windsurf PR Reviews
* **We recommend Devin Review as our new and improved code review experience.** Learn more.
**Knowledge Base Management**
* Curate knowledge from Google Drive sources for your development teams
* Upload and organize internal documentation and resources
* Learn more about Knowledge Base
***
## 4. Identity & Access Management
> **Recommendation:** Use **SSO plus SCIM** wherever possible for automated provisioning, de-provisioning, and group management.
### 4.1 Single Sign-On (SSO)
| | Guidance |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------- |
| **IdPs supported** | Okta, Microsoft Entra ID, Google (others via generic SAML) |
| **Recommended approach** | Create Devin Desktop-specific *app* in IdP; use **role-based** group assignments rather than org-wide `All Employees` group |
| **Common pitfalls** | Email suffix mismatches, duplicate user aliases |
*See the SSO & SCIM Setup Guide for step-by-step configuration for Okta, Microsoft Entra ID, Google, and Generic SAML.*
### 4.2 SCIM Provisioning
* **Why** – automated user lifecycle & team membership management at scale
* **Capabilities**
* Create / deactivate **users** automatically
* Create **teams** automatically (or manage manually)
* Users can belong to **multiple teams**
* Custom team creation via SCIM API (docs)
* **Mapping strategies**
* 1 IdP group → 1 Devin Desktop team (simple, most common)
* Functional vs. project-based group prefixes (e.g. `proj-foo-devs`)
* **Things to decide**
* Which groups to *exclude* (e.g. interns, contractors)
* Renaming rules when IdP group names change
* **Caution**: SCIM should remain your **source of truth**—mixing SCIM and manual / API updates can create drift. Use the API mainly for adding supplemental groups.
***
## 5. User & Team Management at Scale
* Flat *team* → design team taxonomy carefully (no nesting to fall back on)
* Users can belong to **multiple groups**. Groups are used to view analytics
* Today, SCIM does not support assigning roles to users. SCIM only supports assigning users to Groups
***
## 6. Analytics & API Access
### 6.1 Built-In Analytics
| Dashboard | Use-case |
| --------------------- | ------------------------------------------ |
| **Adoption Overview** | Track total active users, daily engagement |
| **Team Activity** | Team usage |
Analytics shows the **percentage of code written by Devin Desktop**, helping quantify impact—see your dashboards at team analytics.
### 6.2 APIs
| API | Typical admin scenarios |
| -------- | -------------------------- |
| **REST** | SCIM management, analytics |
* Generate service keys under **Team Settings → Service Keys**. Scope keys to *least privilege* needed.
* More advanced reporting: see the Analytics API Reference.
* For team management: see the SCIM API – Custom Teams.
***
## 7. Operational Considerations
* **Status Pages** – monitor live service health: Devin Desktop, Anthropic, OpenAI
* **Support Channels** – windsurf.com/support
***
## 8. Setting Up End Users for Success
1. Point end users to the Devin Desktop installation guide to install the appropriate extension or desktop client.
2. Publish an internal “Getting Started with Devin Desktop” page (link to official docs)
3. Hold live onboarding sessions / record short demos
4. Curate starter project templates & sample prompts
5. Collect feedback via survey after 2 weeks; iterate
***
## 9. Additional Resources
* SSO & SCIM Setup Guide
* SCIM API – Custom Teams
* Analytics API Reference
* RBAC Controls
# AI Models
Source: https://docs.devin.ai/desktop/models
Available AI models in Devin Desktop Cascade including SWE-1.7, SWE-1.5, Claude, and GPT. Compare model capabilities, credit costs, and performance.
For most users, we recommend **Adaptive** — our intelligent model router that automatically selects the best model for each task, delivering the right level of intelligence for every prompt.
In Cascade, you can easily switch between different models of your choosing.
Under the text input box, you will see a model selection dropdown menu containing the following models:
For the most up-to-date pricing and availability, please refer to the model selector in Cascade within the Windsurf IDE.
Your quota and extra usage is billed based on the token cost of the model you select. You can view the cost of each model in the table below.
Model usage is converted to ACUs based on the per-token rates below.
This only applies to credit-based enterprise customers. Newer enterprise plans are billed in ACUs — see the Enterprise (ACUs) tab.
# SWE-1.7, swe-grep, swe-check
Our SWE model family of in-house frontier models are built specifically for software engineering tasks.
Our latest model, SWE-1.7, is available as a free preview until August 8. SWE-1.7 Lightning runs on Cerebras for an even faster experience.
Our in-house models include:
* `SWE-1.7`: Cognition's latest software engineering model, available free during the preview.
* `SWE-1.7 Lightning`: A faster version of SWE-1.7 served on Cerebras, delivering the same intelligence with lower latency.
* `SWE-1.6`: Our previous-generation model built for software engineering agents, optimized for both intelligence and model UX. Read our [research announcement](https://cognition.com/blog/swe-1-6).
* `SWE-1.6 Fast`: A faster version of SWE-1.6 available to paying users.
* `SWE-1.5`: Our previous frontier agentic coding model. Near Claude 4.5-level performance at 13x the speed. Read our [research announcement](https://cognition.com/blog/swe-1-5).
* `SWE-1`: Our first agentic coding model. Achieved Claude 3.5-level performance at a fraction of the cost.
* `SWE-1-mini`: Powers passive suggestions in Windsurf Tab, optimized for real-time latency.
* `swe-grep`: Powers context retrieval and [Fast Context](/desktop/context-awareness/fast-context)
* `swe-check`: Powers [Quick Review](/desktop/quick-review) with fast, lightweight reviews optimized for common code issues.
# Devin Desktop Previews
Source: https://docs.devin.ai/desktop/previews
Preview your web app locally in Devin Desktop IDE or browser with element selection, error capture, and direct integration with Cascade for rapid iteration.
Devin Desktop Previews allow you to view the local deployment of your app either in the IDE or in the browser (optimized for Google Chrome, Arc, and Chromium based browsers) with listeners, allowing you to iterate rapidly by easily sending elements and errors back to Cascade as context.
Devin Desktop Previews are opened via tool call, so just ask Cascade to preview your site to get started. Alternatively, you can also click the Web icon in the Cascade toolbar to automatically propagate the natural language prompt to enter the proxy.
# Send Elements to Cascade
In the Preview, you can select and send elements/components and errors directly to Cascade. Simply click on the "Send element" button on the bottom right and then proceed to select the element you want to send.
The selected element will be inserted into your current Cascade prompt as an `@ mention`. You can add as many elements as you want in the prompt.
# In-IDE Preview
Devin Desktop can open up a Preview as a new tab in your editor. This is a simple web view that enables you to view web app alongside your Cascade panel.
Because these Previews are hosted locally, you can open them in your system browser as well, complete with all the listeners and ability to select and send elements and console errors to Cascade.
The listeners and the abilities to send elements and errors are optimized for Google Chrome, Arc, and Chromium based browsers.
# How to Disable
You can disable Devin Desktop Previews from Devin - Settings. This will prevent Cascade from making this tool call.
# Quick Review
Source: https://docs.devin.ai/desktop/quick-review
Quick Review runs an agentic code review on your local changes using AI models.
Quick Review runs an agentic code review on your local changes. When working with AI-generated code, Quick Review provides an independent second opinion by having a separate agent analyze the changes for correctness, style, and potential issues.
Quick Review is only available for the **Devin Local** agent. It is not supported for the legacy Cascade agent.
## Running a review
When the Devin Local agent makes changes, you can select **Quick Review** to immediately request a secondary agent to review those changes. The review agent analyzes the diff and provides feedback directly in the editor, helping you catch issues before committing.
## Available models
Quick Review offers three models to choose from:
| Model | Description | Pricing |
| :------------ | :---------------------------------------------------------------------- | :------------------ |
| **SWE-check** | A fast, lightweight review model optimized for common code issues. | Free for all tiers |
| **GPT 5.5** | Uses the latest OpenAI frontier model for deep, agentic code review. | Token-based pricing |
| **Opus 4.7** | Uses the latest Anthropic frontier model for deep, agentic code review. | Token-based pricing |
**SWE-check** is free for all users and provides quick, efficient reviews. **GPT 5.5** and **Opus 4.7** leverage the latest frontier models for more thorough agentic code review and use token-based pricing.
## Pricing
Quick Review pricing depends on your billing plan.
SWE-check is free for all tiers. GPT 5.5 and Opus 4.7 consume quota at their respective [per-token rates](/desktop/models).
For enterprise customers billed in ACUs, SWE-check is free. GPT 5.5 and Opus 4.7 usage is converted to ACUs based on [per-token rates](/desktop/models).
This only applies to credit-based enterprise customers. Newer enterprise plans are billed in ACUs — see the Enterprise (ACUs) tab.
For Devin Desktop enterprise customers on credit-based billing, GPT 5.5 and Opus 4.7 use **variable-token credit pricing**. Each review consumes credits based on the actual tokens used and the [model selected](/desktop/models) according to your credit rate.
## Enterprise controls
In order for enterprises to enable Quick Review, an administrator needs to enable it from [Devin Desktop settings](https://windsurf.com/team/settings).
Additionally, administrators can decide which of the review models to enable for their organization:
* **SWE-check**
* **GPT 5.5**
* **Opus 4.7**
# Recommended Extensions
Source: https://docs.devin.ai/desktop/recommended-extensions
Popular Open VSX extensions for Devin Desktop including Python, Java, C#, GitLens, and more. Replicate familiar IDE experiences from VS Code, Eclipse, or Visual Studio.
# Devin Desktop: Embracing the Agentic VS Code OSS Experience
## Recommended Extensions
### Extension Guidance
Devin Desktop, using VS Code's interface and AI, is easy to adopt for developers from VS, Eclipse, or VS Code. It uses the Open VSX Registry for extensions, accessible via the Extensions panel or website. To help you get the most out of Devin Desktop for different programming languages, we've compiled a list of popular, community-recommended extensions from the Open VSX marketplace that other users have found helpful for replicating familiar IDE experiences.
Be sure to check out the full Open VSX marketplace for other useful extensions that may suit your specific workflow needs!
### General
* [GitLens](https://open-vsx.org/extension/eamodio/gitlens) - Visualize code authorship at a glance via annotations and CodeLens
* [GitHub Pull Requests](https://open-vsx.org/extension/GitHub/vscode-pull-request-github) - Review and manage your GitHub pull requests and issues directly
* [GitLab Workflow](https://open-vsx.org/extension/gitlab/gitlab-workflow) - GitLab integration extension
* [Mermaid Markdown Preview](https://open-vsx.org/extension/bierner/markdown-mermaid) - Adds diagram and flowchart support
* [Visual Studio Keybindings](https://open-vsx.org/extension/ms-vscode/vs-keybindings) - Use Visual Studio keyboard shortcuts in Devin Desktop
* [Eclipse Keymap](https://open-vsx.org/extension/alphabotsec/vscode-eclipse-keybindings) - Use Eclipse keyboard shortcuts in Devin Desktop
### Python
* [ms-python.python](https://open-vsx.org/extension/ms-python/python) - Core Python support: IntelliSense, linting, debugging, and virtual environment management
* [Windsurf Pyright](https://open-vsx.org/extension/Codeium/windsurfPyright) - Fast, Pylance-like language server with strong type-checking and completions
* [Ruff](https://open-vsx.org/extension/charliermarsh/ruff) - Linter and code formatter
* [Python Debugger](https://open-vsx.org/extension/ms-python/debugpy) - Debugging support for Python applications
### Java
* [Extension Pack for Java](https://open-vsx.org/extension/vscjava/vscode-java-pack) - Bundle of essential Java tools: editing, refactoring, debugging, and project support (includes all below)
* [redhat.java](https://open-vsx.org/extension/redhat/java) - Core Java language server for IntelliSense, navigation, and refactoring
* [Java debug](https://open-vsx.org/extension/vscjava/vscode-java-debug) - Adds full Java debugging with breakpoints, variable inspection, etc.
* [Java Test Runner](https://open-vsx.org/extension/vscjava/vscode-java-test) - Run/debug JUnit/TestNG tests inside the editor with a testing UI
* [Maven](https://open-vsx.org/extension/vscjava/vscode-maven) - Maven support: manage dependencies, run goals, view project structure
* [Gradle](https://open-vsx.org/extension/vscjava/vscode-gradle) - Gradle support: task explorer, project insights, and CLI integration
* [Java Project Manager](https://open-vsx.org/extension/vscjava/vscode-java-dependency) - Visualize and manage Java project dependencies
### Visual Basic
* [Visual Basic Support](https://open-vsx.org/extension/vscode/vb) - Syntax highlighting, code snippets, bracket matching, code folding
* [VB Script Support](https://open-vsx.org/extension/Serpen/vbsvscode) - VBScript editing support: syntax highlighting, code outline view
* [C# support](https://open-vsx.org/extension/muhammad-sammy/csharp) - OmniSharp-based language server with IntelliSense and debugging
* [Solution Explorer](https://open-vsx.org/extension/fernandoescolar/vscode-solution-explorer) - Manage .sln and .csproj files visually
### C# / .NET and C++
* [C# / C++ Development Setup Guide](/desktop/csharp-cpp) - Setup guide for .NET Core, .NET Framework (Mono), and C++ development in Devin Desktop
# Releases
Source: https://docs.devin.ai/desktop/releases
Download Devin Desktop (Windsurf) releases.
# Releases (Next)
Source: https://docs.devin.ai/desktop/releases-next
Download Devin Desktop (Windsurf) Next builds.
The Next edition of Devin Desktop is a beta build that includes previews of upcoming features. It gives early access to new features and releases more frequently than the stable build, but also may have bugs.
# FedRAMP Security Admin Guide
Source: https://docs.devin.ai/desktop/security/security-admin-guide
Devin Desktop FedRAMP Security Admin Guide for securely setting up, configuring, operating, and decommissioning top-level administrative accounts. Includes role definitions, account lifecycle procedures, and a reference table of all admin-controlled security settings.
# FedRAMP Security Admin Guide
This guide describes how to securely set up, configure, operate, and decommission top-level administrative accounts in Devin Desktop. It covers administrative role definitions, account lifecycle procedures, and all admin-controlled security settings with their associated functions, security impacts, and recommended values.
This guide is written for the Devin Desktop FedRAMP deployment which runs on AWS GovCloud. The FedRAMP deployment uses a dedicated enterprise portal and SSO-based authentication (OIDC or SAML 2.0). Some features described in other Devin Desktop documentation for the SaaS offering are not available in the FedRAMP environment.
***
## Administrative role definitions
Devin Desktop uses a Role-Based Access Control (RBAC) system to govern administrative privileges. Roles are managed through the Admin Portal under the Role Management settings section and can be assigned to individual users.
### Built-in roles
Devin Desktop provides two built-in roles that cannot be deleted.
| Role | Description | Default permissions |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Admin** | Full administrative access to organization settings, user management, analytics, and security controls. This is the highest level of privilege a user can hold within a team. | All permissions enabled |
| **User** | Standard end-user access with no administrative permissions. Users can access Devin Desktop's coding features but cannot view or modify organization settings. | No administrative permissions |
### Custom roles
Administrators can create custom roles to implement the principle of least privilege. Custom roles are composed of granular permissions selected from the categories below. To create a custom role, navigate to the Admin Portal and open the Role Management section under Settings.
### Permission reference
The table below lists every permission available for role assignment in the FedRAMP deployment. Each permission controls access to a specific administrative function.
| Category | Permission | Description |
| ------------------- | ------------------------ | -------------------------------------------------------- |
| **Teams** | Teams Read-Only | Read-only access to the teams management page |
| **Teams** | Teams Update | Ability to update user roles on the teams page |
| **Teams** | Teams Delete | Ability to remove users from the teams page |
| **Analytics** | Analytics Read | Read access to the analytics page and dashboards |
| **Attribution** | Attribution Read | Read access to the attribution page |
| **License** | License Read | Read access to the license page |
| **SSO** | SSO Read | Read access to the SSO configuration page |
| **SSO** | SSO Write | Ability to configure and modify SSO provider settings |
| **Service Key** | Service Key Read | Read access to the service keys page |
| **Service Key** | Service Key Create | Ability to create new service keys for API access |
| **Service Key** | Service Key Update | Ability to modify existing service keys |
| **Service Key** | Service Key Delete | Ability to revoke and delete service keys |
| **Role Management** | Role Read | Read access to the roles tab in settings |
| **Role Management** | Role Create | Ability to create new roles |
| **Role Management** | Role Update | Ability to modify existing role definitions |
| **Role Management** | Role Delete | Ability to delete roles |
| **External Chat** | External Chat Management | Ability to modify external chat model configurations |
| **Indexing** | Indexing Read | Read access to the indexing configuration page |
| **Indexing** | Indexing Create | Ability to create new indexes |
| **Indexing** | Indexing Update | Ability to update existing indexed repositories |
| **Indexing** | Indexing Delete | Ability to delete indexes |
| **Indexing** | Indexing Management | Ability to perform index database management and pruning |
| **Fine-Tuning** | Fine-Tuning Read | Read access to the fine-tuning page |
| **Fine-Tuning** | Fine-Tuning Create | Ability to create fine-tuning jobs |
| **Fine-Tuning** | Fine-Tuning Update | Ability to update fine-tuning jobs |
| **Fine-Tuning** | Fine-Tuning Delete | Ability to delete fine-tuning jobs |
A number of these permissions (such as Attribution, License, SSO, Indexing, Fine-Tuning) exist in the RBAC system but their corresponding portal pages are not available in the FedRAMP multitenant deployment. These permissions are included in the role management UI for completeness but do not grant access to any active features in this environment.
***
## Admin account lifecycle procedures
This section describes the end-to-end lifecycle of a top-level administrative account, from initial creation through decommissioning.
### Account setup
**SSO-based onboarding** is the primary provisioning method in the FedRAMP deployment. The platform supports both OIDC and SAML 2.0 for Single Sign-On integration. Users authenticate through the configured identity provider, and after the user's first login creates their account, an administrator assigns the appropriate role through the Admin Portal. Note that SSO integration in the FedRAMP environment requires coordination with the Devin Desktop FedRAMP team and cannot be configured in a self-serve capacity.
Every new admin account should be configured according to the principle of least privilege. Prefer custom roles with only the permissions needed for the administrator's responsibilities rather than assigning the full Admin role unless the user requires complete system access.
### Authentication and MFA requirements
The FedRAMP deployment uses Single Sign-On exclusively, supporting both OIDC and SAML 2.0 protocols. Email and password authentication is not available. All users must authenticate through the configured identity provider.
Multi-Factor Authentication (MFA) is enforced through the organization's identity provider. Devin Desktop inherits the MFA policies configured in the connected IdP, meaning that all authentication strength requirements (such as requiring a second factor, phishing-resistant authenticators, or conditional access policies) are governed at the IdP level. Organizations should configure their IdP to require MFA for all users accessing the Devin Desktop application, particularly for accounts holding administrative roles.
Devin Desktop strongly recommends requiring MFA for all administrative accounts. Configure your identity provider to enforce MFA as a condition for accessing the Devin Desktop application.
### Account configuration
After an administrative account is created, the following configuration steps should be completed.
**Role assignment** determines the scope of the account's administrative access. Assign roles through the Admin Portal by navigating to the Manage Team tab, locating the user, clicking Edit, and selecting the appropriate role from the dropdown. Changes take effect immediately.
**Service key management** is required when the administrator needs API access for automation or analytics. Service keys are created under Settings with scoped permissions matching the key's intended use. Each service key should be named descriptively (for example, "Analytics Dashboard") and assigned a role with the minimum permissions required.
### Account operation
Ongoing operational practices for administrative accounts include the following.
**Regular access reviews** should be conducted to verify that administrative accounts still require their current level of access. Review the list of users with the Admin role periodically through the Manage Team tab and adjust roles as responsibilities change.
**Activity monitoring** is available through the built-in analytics dashboards. Administrators with Analytics Read permission can track user activity, engagement metrics, and feature usage. The Analytics API provides programmatic access to this data for integration with external monitoring systems.
**Service key rotation** should be performed on a regular schedule. To rotate a key, create a new service key with the same permissions, update the consuming system to use the new key, and then delete the old key.
### Account decommissioning
When an administrator no longer requires access, the account should be decommissioned promptly using the following procedure.
Navigate to the Admin Portal, open the Manage Team tab, locate the user, click Edit, and change their role from Admin to User (or a custom role with no administrative permissions).
Delete any service keys that were created by or exclusively used by the departing administrator. Navigate to Settings, then Service Key, and delete the relevant keys.
Remove the user through the Manage Team tab by clicking Delete next to their name. This will deactivate the user's Devin Desktop account and release their license seat.
Verify that the decommissioned account no longer appears in any administrative role by checking the Manage Team user list filtered by the Admin role. Confirm that all service keys associated with the account have been deleted.
Decommission administrative accounts immediately when an administrator changes roles or leaves the organization. Delayed decommissioning creates unnecessary security exposure.
***
## Security settings reference
The table below documents all admin-controlled security settings available in the FedRAMP deployment's Admin Portal. Each entry describes the setting's function, its security impact, and the recommended configuration for a security-conscious deployment.
| Setting | Function | Security impact | Recommended value |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Role-Based Access Control (RBAC)** | Controls which administrative actions each user can perform based on their assigned role and permissions. Managed under the Role Management section in Settings. | Limits the blast radius of compromised accounts by restricting permissions to only what each user needs. Overly broad role assignments increase the potential impact of a single account compromise. | **Configure with least privilege.** Create custom roles with only the permissions each administrator requires. Reserve the built-in Admin role for a small number of administrators. |
| **Service key permissions** | Scopes API access tokens to specific permission sets, controlling which operations automated systems can perform. Managed under the Service Key section in Settings. | Service keys with excessive permissions can be exploited if leaked, granting unauthorized access to user management, analytics, or other functions. | **Scope to minimum required permissions.** Create dedicated service keys for each integration with only the permissions that integration needs. Rotate keys regularly. |
| **SSO provider configuration** | Configures the identity provider used for all user authentication, supporting both OIDC and SAML 2.0 protocols. Email/password authentication is not available. SSO setup requires coordination with the Devin Desktop FedRAMP team. Managed under the SSO section in Settings. | Centralizes authentication through the organization's IdP, enabling enforcement of MFA, conditional access, and session policies. Misconfiguration could lock out all users or allow unauthorized access. | **Configure with your organization's approved identity provider (OIDC or SAML 2.0).** Verify the configuration by testing login with a non-admin account before rolling out broadly. |
*Last updated: January 28, 2026*
# Spaces
Source: https://docs.devin.ai/desktop/spaces
Spaces group all of the agent sessions, PRs, files, and context for a task or project into a single view in the Agent Command Center.
Spaces are how you organize work in the [Agent Command Center](/desktop/agent-command-center).
A Space groups everything related to a specific task or project into a single view: agent sessions, PRs, files, and context. For example, an "Onboarding Flow Redesign" space might have one local Cascade session prototyping the UI and two cloud Devin sessions handling API changes and writing tests.
Every session is its own Space by default, even if it isn't shown as one. You don't need to create a Space to start working — you can group sessions into a shared Space whenever it's useful.
## What lives in a Space
A Space brings together everything you need to work on a task without context switching:
* **Agent sessions** — Local Cascade sessions and cloud [Devin](/desktop/devin) sessions running for this task.
* **Pull requests** — PRs opened by you or by agents working in the Space.
* **Files** — Files relevant to the task.
* **Context** — Project-level context that new sessions in the Space inherit.
## Context is shared across sessions
When you create a new session in a Space, it inherits everything the Space already knows about the project. This means new agents can start working immediately without you having to re-explain the project each time.
## Switching between Spaces
When you return to a Space, the view is restored exactly as you left it.
Switching between Spaces is the same as switching between tasks — except now each task has a team of agents working inside it.
## Creating a Space
There are a few ways to start a new Space:
* **Drag a session into another session.** In the sidebar, drag any session onto an existing session to group them together as a Space.
* **Open a new session in a split pane.** Press `Cmd/Ctrl+\` to split the current pane, then click **New Session** in the empty pane to start a new session in the same Space.
* **Use `Cmd/Ctrl+T`.** This opens a new session inside the current Space.
# Devin Desktop Tab
Source: https://docs.devin.ai/desktop/tab/overview
Devin Desktop Tab provides AI-powered code suggestions with Tab to Jump, Tab to Import, and inline suggestions, powered by our custom model.
**Devin Desktop Tab** has evolved from a simple autocomplete tool into a contextually aware diff-suggestion and navigation engine for writing code.
It is powered by our custom in-house model, trained from scratch to optimize for speed and flow awareness.
Suggestions are based on the context of your code, terminal, Cascade chat history, your prior actions around the editor, and even your clipboard (must opt in via advanced Settings).
Tab is able to make complex edits *both before and after* your current cursor position. You can press `esc` to cancel a suggestion.
Suggestions will also disappear if you continue typing or navigating without accepting them.
## Keyboard Shortcuts
* **Accept suggestion**: `tab`
* **Cancel suggestion**: `esc`
* **Accept suggestion word-by-word**: `⌘+→` (VS Code), `⌥+⇧+\` (JetBrains)
## Tab to Jump
Devin Desktop can also anticipate your next cursor position and prompt you with a `Tab to Jump` label at a certain line in the editor, allowing you to easily navigate through your file.
If you accept by simply pressing `tab`, then you will be taken to that next position.
## Tab to Import
After defining a new dependency to use in a file, simply hit `tab` to import it at the top of the file once the hint shows. Your cursor will stay in the same position.
## Settings
Devin Desktop Tab is offered in two modes: Autocomplete and Supercomplete.
Supercomplete is our most powerful and recommended mode, appearing in small windows around your cursor to suggest both deletions and additions.
Autocomplete is a more traditional autocomplete mode that appears at your cursor.
You can also opt-in to using your clipboard as context. This means if you copy something to your clipboard, Devin Desktop will be able to use it as context.
Tab to Import and Tab to Jump functionalities are also individually configurable in the settings.
## Context Awareness
Devin Desktop Tab is broadly context-aware and adaptively responds to your current coding context, including recent terminal activity, your recent code changes, and clipboard contents.
# Terminal
Source: https://docs.devin.ai/desktop/terminal
Use Devin Desktop's enhanced terminal with Command mode, Cascade integration, Turbo mode for auto-execution, and allow/deny lists for command control.
# Command in the terminal
Use our [Command](/desktop/command/windsurf-overview) modality in the terminal (`Cmd/Ctrl+I`) to generate the proper CLI syntax from prompts in natural language.
# Send terminal selection to Cascade
Highlight a portion of the stack trace and press `Cmd/Ctrl+L` to send it to Cascade, where you can reference this selection in your next prompt.
# @-mention your terminal
Chat with Cascade about your active terminals.
# Auto-executed Cascade commands
Cascade has the ability to run terminal commands on its own with user permission. You can configure how Cascade handles command execution through four distinct auto-execution levels, and certain terminal commands can be accepted or rejected automatically through the Allow and Deny lists.
## Auto-Execution Levels
Devin Desktop provides four levels of command auto-execution, giving you control over how Cascade runs terminal commands:
| Level | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Disabled** | Auto-execution is completely disabled. All commands require manual approval before execution. |
| **Allowlist Only** | Only commands that match entries in your allow list can be auto-executed. All other commands require manual approval. |
| **Auto** | Cascade uses its judgment to determine whether a command is safe to auto-execute. Commands deemed potentially risky will still require your approval. This feature is only available for messages sent with premium models. |
| **Turbo** | All commands are auto-executed immediately, except those in your deny list. |
You can select your preferred auto-execution level via the Devin Settings panel in the bottom right corner of the editor.
### Admin-Controlled Maximum Level (Teams & Enterprise)
For Teams and Enterprise users, administrators can set a maximum allowed auto-execution level for their organization. This setting restricts which levels are available to team members, allowing admins to enforce security policies while still giving users flexibility within those bounds.
When an admin sets a maximum level, users can select any level up to and including that maximum. For example, if an admin sets the maximum to "Auto", users can choose between Disabled, Allowlist Only, or Auto, but cannot enable Turbo mode.
Administrators can configure this setting in the Admin Portal under Team Settings.
### Team-Wide Command Lists (Teams & Enterprise)
Administrators can configure **team-wide allowlist and denylist** for terminal commands that apply to all team members. These lists work in addition to individual user allow/deny lists.
| List Type | Behavior |
| ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Allowlist** | Commands matching entries in this list will be auto-executed without user confirmation (when auto-execution is enabled for the user). |
| **Denylist** | Commands matching entries in this list will always require user approval before execution, regardless of user settings. |
**Key behaviors:**
* **Team and user configs are merged**: Team-level lists are combined with individual user allow/deny lists configured in Devin Desktop settings. A command matching either the team or user allowlist will be auto-executed (unless blocked by a denylist).
* The **denylist takes precedence** over the allowlist—if a command matches both lists (at either team or user level), it will require approval
To configure team-wide command lists, go to the Admin Portal → Team Settings → Terminal Commands → **Manage Lists**.
### Allow list
An allow list defines a set of terminal commands that will always auto-execute. For example, if you add `git`, then Cascade will always accept `git add -A`.
The setting can be found via Command Palette → Open Settings (UI) → Search for `windsurf.cascadeCommandsAllowList`.
### Deny list
A deny list defines a set of terminal commands that will never auto-execute. For example, if you add `rm`, then Cascade will always ask for permission to run `rm index.py`.
The setting can be found via Command Palette → Open Settings (UI) → Search for `windsurf.cascadeCommandsDenyList`.
# Dedicated terminal
Starting in Wave 13, Devin Desktop introduced a dedicated terminal for Cascade to use for running commands on macOS.
This dedicated terminal is separate from your default terminal and *always* uses `zsh` as the shell.
The dedicated terminal *will* use your zsh configuration, so aliases and environment variables will be available from `.zshrc` and other zsh-specific files.
If you use a different shell instead of `zsh`, and want Devin Desktop to use shared environment variables, we recommend creating a shared configuration file that both shells can source.
### Troubleshooting
If you have issues with the dedicated terminal, you can revert to the legacy terminal by enabling the Legacy Terminal Profile option in Devin Desktop settings.
# General Issues
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-common-issues
Common Devin Desktop plugin issues including subscription problems, cancellation, telemetry settings, account deletion, and chat panel troubleshooting.
### I subscribed to Pro but I'm stuck on the Free tier
First, give it a few minutes to update. If that doesn't work, try logging out of Devin Desktop on the website, restarting your IDE, and logging back into Devin Desktop. Additionally, please make sure you have the latest version of Devin Desktop installed.
### How do I cancel my Pro/Teams subscription?
You can cancel your paid plan by going to your Profile by clicking your icon on the top right of the [Devin Desktop website](https://windsurf.com/profile).
To cancel your Pro subscription, navigate to the `Billing` page in the navigation panel on the left and click "Cancel Plan".
To cancel your Teams subscription, navigate to the `Manage Team` page in the navigation panel on the left and click "Cancel Plan".
### How do I disable code snippet telemetry?
As mentioned on our [security page](/admin/security#how-is-your-data-used-to-improve-devin), you can opt out of code snippet telemetry by going to your [account settings](https://windsurf.com/settings). For more information, please visit our [Terms of Service](https://windsurf.com/terms-of-service-individual).
### How do I delete my account?
Reach out to [support](https://windsurf.com/support/) to delete your account.
### How do I request a feature?
You can share feature requests and feedback through our community channels:
[Reddit](https://www.reddit.com/r/windsurf/), [Discord](https://discord.com/invite/3XFf78nAx5), or [Twitter/X](https://x.com/windsurf).
You can also reach out to us via our [support platform](https://windsurf.com/support/).
### My Devin Desktop Chat panel goes blank
Please reach out to us if this happens! A screen recording would be much appreciated. This can often be solved by clearing your chat history.
### How do I download diagnostic logs to send to the support team?
Please see the instructions for various plugins [here](/desktop/troubleshooting/plugins-gathering-logs)
# Eclipse Troubleshooting
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-enterprise/eclipse
Troubleshoot Eclipse plugin issues including startup problems, empty chat screen, WebView2, and certificate errors with Java keystore solutions.
We strongly recommend using the native Devin Desktop Editor or the JetBrains local plugin for their advanced agentic AI capabilities and cutting-edge features.
The Eclipse plugin is under maintenance mode.
# Supported Versions
Version 4.25+ (2022-09+)
# Gathering extension logs
In Eclipse, logs are written to the following paths:
* **Mac/Linux**: \~/.codeium/codeium.log
* **Windows**: `C:\Users\\.codeium\codeium.log`
# Known IDE issues and solutions
## Codeium isn't starting
If Codeium isn't starting up, use the logs to debug what the cause could be (See above). If you are not able to resolve the issue, file a help request by submitting a ticket at help.codeium.com. Make sure to include the logs referenced above to help our team debug the issue as quickly as possible.
## Codeium Chat shows an empty screen
If you are using Windows 10, it's possible you need to install **WebView2** to switch the Eclipse web renderer from Internet Explorer to Edge.
You can see if this is the case by right-clicking --> `Properties` and seeing if there is an Internet Explorer icon.
## Certificate issue
This issue may be indicated by the following errors in the logs:
```
Failed to fetch extension version at
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
```
Unlike other IDEs, Eclipse does not use the OS certificate store. You will have to load the certificates to the Java keystore.
* SaaS users will have to load the Codeium Github URL
* Self-hosted (On-prem) users will have to load their Codeium Enterprise domain URL as well as the Codeium Github URL
**Note**: This is an example for SaaS users, but the process is the same. *For enterprise users - Your certificate is issued and managed by your local IT or Admin team. Please reach out to them for assistance with installing the necessary certificates on your system.*
1. Export the certificate for [https://exafunction.github.io/](https://exafunction.github.io/) from the browser as `githubio.cer` file
In Chrome: navigate to the website, click the padlock, click `Connection is secure`, click `Certificate is valid`, go to the `Details` tab, press the `Copy to File...` button
2. Import in JDK/JRE keystore: (Need to run from cmd prompt opened with "Administrator" privilege)
```
keytool -import -noprompt -trustcacerts -alias codeiumgithub -file githubio.cer -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit
```
3. Verify that the certificate is added to the Keystore by executing:
```
keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" | findstr codeium
```
Enter the Keystore password.
4. Restart Eclipse and browse the marketplace extension from an internal browser. You should be directed to trust the unsigned content.
5. In some cases you might also need to pass the certificates path in VM arguments by editing your eclipse.ini file and adding the path:
```
-Djavax.net.ssl.trustStore="path-to-your-certificates"
```
# JetBrains Troubleshooting
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains
Troubleshoot JetBrains plugin issues including JCEF errors, certificate problems, custom workspaces, and extension diagnostics.
# Supported Versions
Version 2022.3 or greater.
* JetBrains Fleet or ReSharper are not supported
* Remote SSH is not supported.
# Gathering extension logs
Starting in extension version 1.10.0, the Chat Panel has an Extension Diagnostics button on the Settings page. This button will automatically collect relevant logs and parameters into a text file that can be downloaded.
For older versions of the extension:
1. Logs are written to the idea.log file. To locate this file, go to the `Help > Show Log in Finder/Explorer` menu option
2. Export or copy the logs
# Known IDE issues and solutions
## Cascade not being displayed
Usually, you will see the following error in the logs:
```
JCEF is not supported in this env or failed to initialize
```
or
```
Internal JCEF not supported, trying external JCEF
```
JCEF is a browser needed to display Cascade. To fix this, go to `Help > Find Actions > Choose Java Boot Runtime` and pick a runtime with a bundled JCEF.
If you already have JCEF bundled as part of your runtime, JCEF may be disabled in your registry/properties.
Edit your properties: Help > Edit Custom Properties, add the following flag and restart your IDE:
```
ide.browser.jcef.enabled=true
```
## Certificate Issues
If you encounter the following errors:
```
Failed to fetch extension base URL at
```
```
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
```
This suggests that the Codeium extension is unable to trust the TLS connection to your enterprise portal / API server because it does not trust the certificate being presented. This either means that the certificate presented by the Codeium deployment is untrusted or a certificate presented by a corporate proxy intercepting the request is untrusted.
In either case, the most preferable solution is to ensure that the root certificate that signed this certificate is properly installed on end-user machines in the appropriate location. JetBrains IDEs and most other IDEs load certificates from the operating system's default location.
Your certificate is issued and managed by your local IT or Admin team. Please reach out to them for assistance with installing the necessary certificates on your system.
It is important that the full certificate chain is being presented from wherever TLS is being terminated. Oftentimes, if only the leaf certificate is presented, JetBrains IDE and other IDEs are unable to verify its authenticity because they are not aware of the intermediate certificate which validates the leaf certificate and is validated by the root certificate. Browsers are often able to work around this issue as users will likely have encountered a different website that does present the full certificate chain, so the intermediate cert is seen and cached, but applications like JetBrains IDEs don't have this advantage.
**Note**: In JetBrains family products **2024.3**, a bug was introduced in which the IDE is failing to accept the OS certificates ([JetBrains issue report](https://youtrack.jetbrains.com/issue/IJPL-171446/Unable-to-find-valid-certification-path-to-requested-target-exception-in-Settings-Sync-when-proxy-is-used)). To solve this, users can do any of the following:
* Downgrade JB products to earlier versions
* Use the 2024.3.1 preview version (beta version)
* Add `-Djavax.net.ssl.trustStoreType=Windows-ROOT` as a custom JVM option
## Custom Workspaces
If you see the following error when using Cascade:
```
Cascade cannot access paths without an active workspace
```
This indicates that Cascade needs access to a custom workspace to function properly. To resolve this:
1. Open your JetBrains IDE Settings by going to `File > Settings` (or `IntelliJ IDEA > Preferences` on macOS)
2. Navigate to `Tools > Windsurf Settings`
3. In the Windsurf Settings panel, locate the "Custom Workspaces" section at the bottom
4. Click the "Add Workspace" button to add your project workspace
5. Select the appropriate workspace directory for your project
6. Click "OK" to apply the settings
7. Restart your IDE for the changes to take effect
### Enterprise vs Non-Enterprise Behavior
The behavior of custom workspaces differs depending on your user type:
#### Enterprise Users
Enterprise users have selective control over workspace indexing:
* When adding workspaces, you'll see a checkbox option to enable indexing for each workspace
* Only workspaces with the checkbox enabled will be indexed and available to Cascade
* This allows you to control which workspaces consume indexing resources
* Tool calls are restricted to the active workspace for security
#### Non-Enterprise Users
Non-enterprise users get automatic workspace indexing:
* Any workspace you add is automatically indexed without requiring a checkbox
* All added workspaces are immediately available to Cascade
* Tool calls are never blocked outside the active workspace
* The selective indexing feature is not relevant under this model
After completing the setup steps above, Cascade should be able to access your workspace and function normally.
## Keyboard Shortcuts Not Working in Rider on Windows
If you are using JetBrains Rider on Windows and experience issues where Shift+Enter does not create a new line in Cascade, or the Delete key does not work, this is caused by a keybinding conflict with Rider's Unit Test Tool Window.
This is a known issue affecting AI plugins in Rider. To resolve this:
1. Open your JetBrains IDE Settings by going to `File > Settings`
2. Navigate to `Keymap`
3. Search for "Unit Test Tool Window Action"
4. Disable or reassign the conflicting keybindings (Shift+Enter and Delete)
5. Restart your IDE for the changes to take effect
# Proxy Configuration for Devin Desktop in JetBrains IDEs
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-enterprise/jetbrains-proxy
Configure HTTP/HTTPS proxy settings for Devin Desktop plugin in JetBrains IDEs including remote development and Gateway environments.
Some corporate and enterprise networks route traffic through HTTP/HTTPS proxies. The Devin Desktop plugin in JetBrains IDEs needs to reach external Devin Desktop services (for sign-in and AI features), so you may need to configure a proxy before things work reliably.
## When Proxy Configuration May Be Required
Proxy configuration may be required if:
* You see "Failed to connect" or similar network errors in Devin Desktop
* The Devin Desktop panel in the IDE stays blank and never loads
* Cascade or other Devin Desktop features cannot connect or time out
This guide covers:
* Checking whether your network uses a proxy
* Configuring the IDE's proxy
* Enabling Devin Desktop's proxy detection
* Configuring proxy settings for JetBrains Remote
## Check Whether Your Network Uses a Proxy
Before changing anything:
Ask your IT / infra / network team:
* Do we use an HTTP/HTTPS proxy for outbound traffic?
* If yes, is it configured automatically (system settings / PAC file / device management), or do I need to configure it manually in applications?
If your organization does not use a proxy, you usually don't need to change these settings.
If your organization does use one, collect the proxy details (address, port, and any credentials). You can share screenshots of the JetBrains HTTP Proxy and Devin Desktop settings with them so they can tell you exactly what to fill in.
## Configure the JetBrains IDE Proxy
First, make sure the IDE itself can access the internet through your proxy — in particular, that it can reach `windsurf.com`.
1. Open Settings / Preferences in your JetBrains IDE. For example: File → Settings… (Windows/Linux) or ⌘, → Settings… (macOS).
2. Go to Appearance & Behavior → System Settings → HTTP Proxy.
3. Choose the appropriate option based on your IT team's guidance:
* **No proxy** – if your network does not use a proxy.
* **Auto-detect proxy settings** or **Use system proxy settings** – if the proxy is configured globally on your machine.
* **Manual proxy configuration** – if IT provided a specific proxy host/port (and optional username/password) to enter here.
4. Use Check connection… (if available) to verify the configuration — ideally test connectivity to `https://windsurf.com` from this dialog.
5. Apply the changes and restart the IDE if prompted.
If the IDE itself cannot reach the network (for example, plugin marketplace, updates, or built-in web features fail, or you cannot reach `https://windsurf.com` from within the IDE), fix that here first. Devin Desktop relies on this connectivity.
## Enable Devin Desktop Proxy Detection in JetBrains
Once your IDE-level proxy is set (or confirmed not needed), configure how Devin Desktop uses those settings.
The Devin Desktop plugin has its own Detect proxy option inside its settings:
1. In your JetBrains IDE, open Settings / Preferences.
2. Navigate to Tools → Windsurf Settings.
3. Find the Detect proxy toggle.
4. Turn Detect proxy ON if:
* Your proxy is configured at the OS or IDE level, and
* IT expects applications to "just pick up" those settings.
5. Click Apply and OK if needed, then restart the IDE.
6. Try using Devin Desktop again:
* Open the Devin Desktop panel from the IDE sidebar
* Run Cascade or retry the operation that was failing with "Failed to connect" or showing a blank screen
If you see new connection issues after enabling Detect proxy, you can:
* Turn Detect proxy back OFF,
* Double-check your IDE HTTP Proxy configuration (including that it can reach `https://windsurf.com`), and
* Confirm with IT whether additional manual configuration is required.
## Proxy Configuration in JetBrains Remote
If you use JetBrains Remote Development (for example via JetBrains Gateway, a remote backend, or a cloud dev environment), there are effectively two places where proxy settings matter:
* Your local machine, running the thin client.
* The remote machine, where the actual IDE backend (and Devin Desktop) runs.
When you connect with JetBrains Remote, Devin Desktop's network requests originate from the remote machine, not from your local laptop. This means:
* Proxy setup on the remote IDE affects how Devin Desktop connects to Devin Desktop services.
* The remote machine may need its own proxy configuration, even if your local machine is already set up correctly.
For JetBrains remote development, you must use the dedicated "Windsurf (Remote Development)" plugin, not the standard Windsurf plugin. Make sure you've installed Windsurf (Remote Development) as described in the Remote Development section of the Windsurf JetBrains getting started guide.
### Configure the Proxy for the Remote Environment
1. Connect to your remote backend using JetBrains Remote / Gateway.
2. Open Settings / Preferences in the remote IDE session (this opens the settings for the IDE running on the remote machine).
3. Configure the proxy for the remote IDE:
* Go to Appearance & Behavior → System Settings → HTTP Proxy on the remote IDE.
* Set the proxy according to your IT team's instructions (No proxy / Auto-detect / Use system proxy / Manual).
* If the IDE provides a Check connection… button, use it to test connectivity to `https://windsurf.com` from the remote machine.
4. Configure Devin Desktop on the remote IDE:
* Go to Tools → Windsurf Settings (still in the remote session).
* Enable Detect proxy if your IT team expects applications on the remote host to use system/IDE proxy settings.
5. Apply the changes, then restart the remote IDE backend or disconnect and reconnect your remote session.
6. Open the Devin Desktop panel again in the remote IDE and retry the previously failing action.
It's common in corporate setups that both your local machine and the remote machine have their own proxy rules. Make sure you follow IT guidance for each side; fixing only the local proxy will not help if the remote host itself cannot reach the internet (including `https://windsurf.com`) without its own proxy configuration.
## When to Change What
### Change Only the Local IDE HTTP Proxy
If:
* You are not using JetBrains Remote, and
* Other JetBrains features already work after setting it, and
* Devin Desktop works without touching its own settings, and
* The IDE can reach `https://windsurf.com`.
### Enable Devin Desktop "Detect Proxy"
(Local or remote) if:
* The proxy is already set up at the OS or IDE level on that machine, and
* Devin Desktop is the only thing that can't connect, or shows a blank Devin Desktop panel.
### Configure Proxy on the Remote IDE
If:
* You use JetBrains Remote,
* You've installed the Windsurf (Remote Development) plugin for that environment, and
* Errors occur only when connected to a remote backend, or
* IT says the remote server must also go through a proxy to reach the internet (including `https://windsurf.com`).
### Talk to IT / Infra
If:
* You're not sure whether your environment uses a proxy at all, or
* You've configured the HTTP Proxy + Devin Desktop Detect proxy (locally and/or remotely) and verified connection to `https://windsurf.com`, but still see blank Devin Desktop panels or connection failures.
Your IT / infra team is the final source of truth—they can confirm whether you need a proxy on your local machine, your remote machine, or both, how it should be configured in JetBrains, and whether the Devin Desktop Detect proxy setting should be enabled in your environment.
# Visual Studio Troubleshooting
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-enterprise/visualstudio
Troubleshoot Visual Studio plugin issues including IntelliCode conflicts, Tab key bindings, and marketplace visibility problems.
We strongly recommend using the native Devin Desktop Editor or the JetBrains local plugin for their advanced agentic AI capabilities and cutting-edge features.
The Visual Studio plugin is under maintenance mode.
# Supported Versions
Visual Studio 17.5.5 or greater.
# Gathering extension logs
Go to `View > Output`, select `Codeium` in the dropdown, and copy the logs.
# Known IDE issues and solutions
## Don't see Codeium in the VS Marketplace
Make sure that you are using VS version 2022 17.5.5 or greater.
## Seeing overlapping autocomplete suggestions
This happens if Visual Studio's IntelliCode suggestions are displayed at the same time as Codeium's. Disable all IntelliCode options as shown below:
## Tab key is not always accepting completions
You can rebind this to a different keyboard shortcut in your settings:
# Visual Studio Code (VSCode) Troubleshooting
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-enterprise/vscode
Troubleshoot VS Code extension issues including proxy settings, certificate errors, API server configuration, and chat response problems.
We strongly recommend using the native Devin Desktop Editor or the JetBrains local plugin for their advanced agentic AI capabilities and cutting-edge features.
The VSCode plugin is under maintenance mode.
VSCode 1.89 or greater are supported.
# Gathering extension logs
Starting in VS Code Extension 1.10.0, the Extension Diagnostics are accessible for download via the Settings page. This download will contain a collection of relevant logs and parameters into a text file.
*For full output logs of VSCode:*
1. Go to the Command Palette (`Ctrl/Cmd + Shift + P` or go to View > Command Palette)
2. Type in "Show logs" and select the option that reads `Developer: Show Logs`
3. From the dropdown, select `Extension Host` and `Windsurf`
4. You should see something similar to the image below:
5. Change the dropdown in the top right that reads "Extension Host" and select "Codeium"
6. Export or copy the logs
# Known IDE issues and solutions
## e.split is not defined
You are using an unsupported VS Code version, please update to a supported version and try again. You can find a list of supported versions [here](/windsurf/plugins/compatibility).
## Using the wrong API Server
If a user changes their API Server/Portal URL in their **workspace** settings, this will override their user settings and may result in an error where the extension is communicating with the wrong API server.
Make sure that your API Server/Portal URL is set correctly and not overridden accidentally by the workspace settings.
## Not seeing Codeium Chat responses
If you are trying to send messages to Codeium chat but not seeing responses, check if you can cancel the response. If you are unable to cancel the response, this means that the response was completed but not displayed. This can happen if the Chat Web Server loses connection to the extension. Reloading VS Code and opening the Codeium Chat panel again should show the responses.
## Unable to read file .../package.json
```
Unable to read file .../.vscode/extensions/codeium.codeium-/package.json
```
If the above error shows up in the Codeium logs, try deleting the extension folder (.../.vscode/extensions/codeium.codeium-\) and reinstall the extension.
In order to do so manually:
1. Open the command palette ( CTRL + SHIFT + P )
2. Run 'Codeium Enterprise: Reset'
3. Select "Help" from the popup
4. Select "Show Disabled Extensions"
5. Re-enable your Codeium Extension
## Proxy / Network Issues
Unchecking `Detect Proxy` in Codeium settings in VSCode can sometimes resolve issues where the extension is incorrectly attempting to use a proxy.
## Certificate Issues
If you encounter the following errors:
```
ConnectError: [internal] unable to get issuer certificate
```
```
[ERROR]: [internal] unable to verify the first certificate
```
```
tls: failed to verify certificate: x509: "" certificate is not standards compliant
```
This suggests that the Codeium extension is unable to trust the TLS connection to your enterprise portal / API server because it does not trust the certificate being presented. This either means that the certificate presented by the Codeium deployment is untrusted or a certificate presented by a corporate proxy intercepting the request is untrusted.
In either case, the most preferable solution is to ensure that the root certificate that signed this certificate is properly installed on end-user machines in the appropriate location. VS Code and most other IDEs load certificates from the operating system's default location.
Your certificate is issued and managed by your local IT or Admin team. Please reach out to them for assistance with installing the necessary certificates on your system.
It is important that the full certificate chain is being presented from wherever TLS is being terminated. Oftentimes, if only the leaf certificate is presented, VS Code and other IDEs are unable to verify its authenticity because they are not aware of the intermediate certificate which validates the leaf certificate and is validated by the root certificate. Browsers are often able to work around this issue as users will likely have encountered a different website that does present the full certificate chain, so the intermediate cert is seen and cached, but applications like VS Code don't have this advantage.
The Network Proxy Test VS Code extension is useful for debugging certificate issues.
# Gathering Plugin Logs
Source: https://docs.devin.ai/desktop/troubleshooting/plugins-gathering-logs
How to collect diagnostic logs from JetBrains, VS Code, Eclipse, Visual Studio, and NeoVim for troubleshooting Devin Desktop plugin issues.
If you're having issues, the first step in the troubleshooting process is to retrieve the logs from your IDE. Here's how you can get Devin Desktop logs for each of the major IDEs:
## JetBrains IDEs
Cascade now has the option to generate a diagnostics file directly from the IDE, there are 2 ways to do so:
* In the Cascade window, click on the 3 dots in the upper right side, and select Download Diagnostics
* In the IDE menu, go to Tools > Windsurf > Download Windsurf Diagnostics
The first option is preferred since it also includes Cascade embedded browser logs.
This button will automatically collect relevant logs and parameters into a text file.
In extreme situations, you can always get the IDE full log (idea.log) from Help > Show Log in Explorer/Finder.
To gather the Devin Desktop diagnostics, you can use the following options:
* In the Cascade window, click on the 3 dots in the upper right side, and select Download Diagnostics
* In the IDE menu, go to Tools > Windsurf > Download Windsurf Diagnostics
The first option is preferred since it also includes Cascade embedded browser logs.
In addition, to collect the full IDE logs:
* In the IDE menu, go to Tools > Windsurf > Collect Host and Client Logs
## VS Code
1. Go to the Command Palette (`Ctrl/Cmd + Shift + P` or go to View > Command Palette)
2. Type in "Show logs" and select the option that reads "Developer: Show Logs"
3. Change the dropdown in the top right that reads "Extension Host" and select "Windsurf"
4. You should see something similar to the image below:
5. Export or copy the logs
## Eclipse
In Eclipse, logs are written to the following paths:
* **Mac/Linux**: \~/.codeium/codeium.log
* **Windows**: `C:\Users\\.codeium\codeium.log`
## Visual Studio
Go to **view > output**, select "Windsurf" in the dropdown, and copy the logs.
## NeoVim
Set `g:codeium_log_file` to a path to a file in your vimrc and then relaunch vim.
Then the logs should be written to that file.
# Common Devin Desktop Issues
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-common-issues
Troubleshoot common Devin Desktop Editor issues including rate limiting, MacOS security warnings, Windows updates, Linux crashes, and terminal problems.
### General FAQ
First, give it a few minutes to update. If that doesn't work, try logging out of Devin Desktop on the website, restarting your IDE, and logging back into Devin Desktop. Additionally, please make sure you have the latest version of Devin Desktop installed.
You can cancel your paid plan by going to your Profile by clicking your icon on the top right of the [Devin Desktop website](https://windsurf.com/profile).
To cancel your Pro subscription, navigate to the `Billing` page in the navigation panel on the left and click "Cancel Plan".
To cancel your Teams subscription, navigate to the `Manage Team` page in the navigation panel on the left and click "Cancel Plan".
As mentioned on our [security page](/admin/security#how-is-your-data-used-to-improve-devin), you can opt out of code snippet telemetry by going to your [account settings](https://windsurf.com/settings). For more information, please visit our [Terms of Service](https://windsurf.com/terms-of-service-individual).
Reach out to [support](https://windsurf.com/support/) to delete your account.
You can share feature requests and feedback through our community channels:
[Reddit](https://www.reddit.com/r/windsurf/), [Discord](https://discord.com/invite/3XFf78nAx5), or [Twitter/X](https://x.com/windsurf).
You can also reach out to us via our [support platform](https://windsurf.com/support/).
### I'm experiencing rate limiting issues
We're subject to rate limits and unfortunately sometimes hit capacity for the premium models we work with. We are actively working on getting these limits increased and fairly distributing the capacity that we have!
This should not be an issue forever. If you get this error, please wait a few moments and try again.
### Pylance or Pyright isn't working / Python syntax highlighting is broken or subpar
We've gone ahead and developed a [Pyright extension specifically for Devin Desktop](/desktop/advanced#windsurf-extensions). Please search for "Windsurf Pyright" or paste `@id:codeium.windsurfPyright` into the extension search.
### How do I download Diagnostic logs to send to the Devin Desktop support team?
You can download diagnostic logs by going to your Cascade Panel, tapping the three dots in the top right corner, and then clicking "Download Diagnostics".
### On MacOS, I see a pop-up: 'Devin Desktop' is damaged and cannot be opened.
This pop-up is due to a false positive in MacOS security features. You can usually resolve this by going to "System Settings -> Privacy & Security" and clicking "Allow" or "Open anyway" for Devin Desktop. If this fails or is not possible, try the following steps:
1. Ensure that Devin Desktop is placed under your `/Applications` folder and that you are running it from there.
2. Check your processor type: if your Mac has an Intel chip, make sure you have the Intel version. If it's Apple Silicon (like M1, M2 or M3), make sure you have the Apple Silicon version. You can select the processor type from the [Mac download page](https://windsurf.com/windsurf/download_mac).
3. Try redownloading the DMG and reinstalling from [the official download page](https://windsurf.com/windsurf/download_mac), as the failing security feature is usually triggered on download.
4. Make sure Devin Desktop (and the "Devin Desktop is Damaged" pop-up) is closed, and run `xattr -c "/Applications/Devin.app/"`.
### I received an error message about updates on Windows, or updates are not appearing on Windows.
For example:
> Updates are disabled because you are running the user-scope installation of Devin Desktop as Administrator.
We cannot auto-update Devin Desktop when it is run as Administrator. Please re-run Devin Desktop with User scope to update.
### On macOS, Remote SSH fails with "Undefined error: 0" but SSH works from Terminal
If Remote SSH in Devin Desktop fails immediately while the same SSH connection works from Terminal, VS Code, or other applications, this is usually caused by macOS blocking Devin Desktop's local network access.
In the Remote - SSH output log (View → Output → Remote - SSH), you will see:
```
debug1: Connecting to port 22.
ssh: connect to host port 22: Undefined error: 0
```
followed by `SSH server closed unexpectedly. Error code: 255`.
The `Undefined error: 0` message (rather than "Connection refused" or "Network unreachable") is the key indicator — this is the error macOS returns when an application is not granted Local Network permission under Privacy & Security.
To fix this:
1. Open **System Settings → Privacy & Security → Local Network**.
2. Find **Devin Desktop** in the list and **enable** the toggle.
3. Restart Devin Desktop and retry the connection.
If Devin Desktop does not appear in the Local Network list, try initiating an SSH connection from Devin Desktop first to trigger the macOS permission prompt. If the prompt was previously dismissed and the toggle does not appear, deleting and reinstalling Devin Desktop will re-trigger the prompt on next launch.
### What domains should I whitelist for network filters/firewalls, VPNs, or proxies?
If you're using any network filtering, firewalls, VPN services, or working in environments with restricted network access, you may experience connectivity issues with Devin Desktop. To ensure smooth operation, please whitelist the following domains in your network configuration:
**For all customers, Devin Desktop requires (backend domains):**
* `.codeiumdata.com`
* `update.windsurf.com`
* `.windsurf.com`
* `.codeium.com`
* `.googleapis.com` (authentication)
* `apis.google.com` (authentication)
* `static.devin.ai`
**Cognition Platform customers additionally require (backend domains):**
* `app.devin.ai` (webapp, session URLs, and resource downloads)
* `api.devin.ai` (API backend and the ACP live WebSocket)
If you use wildcard rules, `.devin.ai` covers both. Cognition Platform customers on a `devinenterprise.com` domain should whitelist the equivalent hosts (or `.devinenterprise.com`).
**User-accessible domains (changelog, documentation, and support):**
* `docs.devin.ai` or `docs.devinenterprise.com` (changelog and documentation, after June 2, 2026)
* `decagon.ai` (support)
### On Linux, Devin Desktop quietly doesn't launch, or crashes on launch
This is usually due to an Electron permissions issue, which VSCode also has, and is expected when using the tarball on Linux.
The easiest way to fix it is to run the following:
```bash theme={null}
sudo chown root:root /path/to/windsurf/chrome-sandbox
sudo chmod 4755 /path/to/windsurf/chrome-sandbox
```
You should then be able to launch Devin Desktop. You can also just run `windsurf` with the flag `--no-sandbox`, though we don't encourage this.
If this fails, then try the below.
### I received an error message saying 'Devin Desktop failed to start'
Warning: deleting these folders will remove your conversation history and local settings!
Delete the following folder:
Windows: `C:\Users\\.codeium\windsurf\cascade`
Linux/Mac: `~/.codeium/windsurf/cascade`
and try restarting the IDE.
### My Cascade panel goes blank
Please reach out to us if this happens! A screen recording would be much appreciated. This can often be solved by clearing your chat history (`~/.codeium/windsurf/cascade`).
### Terminal session appears stuck in Cascade
If a terminal command has finished running in the terminal but Cascade still shows the session as in progress or stuck, this can be caused by several issues:
**Default terminal profile not set**
This may be caused by the default terminal profile not being explicitly set. To resolve this, you can set the default terminal profile in your Editor settings.
Open the Settings UI (Cmd/Ctrl + ,), search for "terminal default profile", and set the appropriate value for your operating system. Alternatively, you can add the following to your `settings.json`:
For macOS:
```json theme={null}
"terminal.integrated.defaultProfile.osx": "zsh"
```
For Windows:
```json theme={null}
"terminal.integrated.defaultProfile.windows": "PowerShell"
```
For Linux:
```json theme={null}
"terminal.integrated.defaultProfile.linux": "bash"
```
Replace the value with your preferred shell (e.g., `bash`, `zsh`, `PowerShell`, `Command Prompt`, etc.).
**Customized zsh themes**
In some cases, a heavily customized zsh theme (for example, themes from Oh My Zsh, Powerlevel10k, or other prompt frameworks) can also cause Cascade to think a command is still running even after it finishes. To check if this is the issue:
1. Open your `~/.zshrc` file in a text editor.
2. Temporarily disable your theme by commenting out lines that set or load it, such as `ZSH_THEME="..."`, `source ~/.p10k.zsh`, or `eval "$(oh-my-posh init zsh)"`.
3. Save the file, restart Devin Desktop (or open a new terminal in Devin Desktop), and run a command again.
If the terminal session no longer appears stuck in Cascade, you can either keep a simpler theme in `~/.zshrc`, or create a separate, minimal zsh configuration used only by the Devin Desktop terminal so your other terminals can continue using the more complex theme.
**Systemd terminal context tracking (Linux)**
On some newer Linux distributions (reported on Fedora 43 and later), the shell startup chain (`~/.bashrc` → `/etc/bashrc` → `/etc/profile.d/80-systemd-osc-context.sh`) can enable systemd "terminal context tracking," which emits OSC 3008 escape sequences via `PS0` or `PROMPT_COMMAND`. These extra control sequences can interfere with Cascade's output parsing, causing a command to appear stuck or resulting in captured output that looks missing or truncated—even though the terminal displays it correctly.
To work around this issue, prevent the OSC context sequences from being emitted in the Cascade terminal by not sourcing `/etc/bashrc` from your `~/.bashrc`, or by creating a minimal shell configuration file used only for Devin Desktop/Cascade.
### Docker Container Not Visible in Remote Explorer When Using WSL
When connecting to Docker containers inside WSL, the remote explorer window may not display available containers to connect to, requiring users to use the command palette workaround. Use Cmd+P (macOS) or Ctrl+P (Windows) → "Dev Containers: Attach to Running Container" to see the full list of running containers.
# Gathering Devin Desktop Logs
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-gathering-logs
How to download diagnostic logs from Devin Desktop Editor using the Command Palette or Cascade panel for troubleshooting support.
If you're having issues, the first step in the troubleshooting process is to retrieve the logs from your IDE. Here's how you can get Devin Desktop logs for each of the major IDEs:
## Devin Desktop
1. Open the Command Palette (`Ctrl/Cmd + Shift + P` or go to View > Command Palette)
2. Type in "Download Devin Logs" and select the option that reads "Download Devin Logs File"
3. Export or copy the logs and attach the file to your ticket.
Alternatively, you can also click on the three dots in the top right corner of the Cascade panel and select "Download Diagnostics".
# Language Server Fails with 'No Space Left on Device' on Linux
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-inotify-limits
Resolve Linux language server startup failures caused by exhausted inotify watch/instance limits (ENOSPC). Includes symptoms, diagnosis commands, and sysctl fixes.
On Linux, the Devin Desktop language server may fail to start with an error containing **"no space left on device"**, even when the system has plenty of free disk space. This is caused by the Linux kernel's **inotify watch** or **inotify instance** limits being exhausted, not by actual disk usage.
The language server uses **inotify** to watch files in your workspace for changes. When the kernel limit is reached, the system returns an `ENOSPC` error—which is commonly surfaced as "no space left on device."
***
## **Symptoms**
You may see the following in Devin Desktop output logs:
```
Language server failed - no space left on device: no space left on device
```
Often accompanied by stack traces referencing components like:
* `file_watcher`
* `AddTrackedWorkspace`
* `AddDirectoriesRecursive`
Behavior you'll typically observe:
* Devin Desktop opens normally
* The language server exits immediately after starting
* Language-server-dependent features (e.g., Cascade, autocomplete) do not work
***
## **Diagnosis**
### **1. Check your current inotify limits**
Run the following commands:
```shell theme={null}
# Check the maximum number of inotify watches per user
cat /proc/sys/fs/inotify/max_user_watches
# Check the maximum number of inotify instances per user
cat /proc/sys/fs/inotify/max_user_instances
```
Common defaults are **8192** for watches and **128** for instances. These are frequently too low for IDE usage in large workspaces (especially monorepos) and can be further reduced by other processes that consume inotify resources (containers, sync tools, other editors, background services).
### **2. Check how many inotify instances are currently in use**
```shell theme={null}
find /proc/*/fd -lname anon_inode:inotify 2>/dev/null | wc -l
```
If this count is near (or above) your `max_user_instances`, new inotify users (like the language server) may fail to initialize.
***
## **Solution**
Increase the inotify limits. You can apply changes temporarily (until reboot) or permanently.
### **Temporary fix (until reboot)**
```shell theme={null}
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl fs.inotify.max_user_instances=1024
```
### **Permanent fix (survives reboot)**
```shell theme={null}
echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
echo "fs.inotify.max_user_instances=1024" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
```
After applying either fix, **restart Devin Desktop**. The language server should start successfully.
This is a well-known limitation on Linux that affects other IDEs and developer tools that rely on file watchers. If your organization manages system configurations centrally, ask your IT / infra team to apply these sysctl settings.
***
## **When to use which value**
* **`fs.inotify.max_user_watches=524288`**\
Recommended for large repositories or monorepos. Each watched file/directory consumes kernel memory (often \~1 KB per watch on 64-bit systems), so **524288 watches** can use roughly **\~512 MB** of kernel memory.
* **`fs.inotify.max_user_instances=1024`**\
Recommended if you run multiple applications that create inotify instances (multiple IDE windows, containers, file sync tools, etc.). The default of **128** can be exhausted quickly in development environments.
# Proxy Configuration in Devin Desktop Editor
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-proxy-configuration
Configure HTTP/HTTPS proxy settings for Devin Desktop Editor in corporate networks. Includes auto-detect, manual configuration, and SSH remote proxy setup.
Some corporate and enterprise networks route traffic through HTTP/HTTPS proxies. Devin Desktop Editor needs to reach a few external services (for sign-in and AI features), so you may need to configure a proxy before things work reliably.
In particular, proxy configuration may be required if:
* You see **"Failed to connect"** or similar network errors
* The **editor or Cascade panel shows a blank screen** and never loads
* Cascade or other cloud-backed features **cannot load or connect**
* Sign-in or activation flows fail unexpectedly
All proxy options live in **Devin Settings**. You can open them from the **top-right dropdown → Devin Settings**, or via the **Command Palette (Ctrl/⌘+Shift+P) → "Open Devin User Settings"**.
***
## **1. Check whether your network uses a proxy**
Before changing anything in the editor:
1. **Ask your IT / infra / network team**:
* Do we use an HTTP/HTTPS proxy for outbound traffic?
* If yes, is it configured **automatically** (system settings / PAC file), or do I need to configure it **manually** in applications?
2. If your organization does **not** use a proxy, you usually don't need to change these settings.
3. If your organization does use one, collect the proxy details (address, port, and any credentials) from your IT team.
You can share a screenshot of the Devin Desktop proxy settings with them so they can tell you exactly what to fill in.
***
## **2. Use your system proxy ("Detect proxy")**
If your proxy is **already configured on your machine** (for example via system network settings or a PAC file), you can let Devin Desktop detect and reuse it:
1. Open **Devin Settings**.
2. In the settings search bar, type **"proxy"**.
3. Locate the **Detect proxy** toggle (see screenshot).
4. Turn **Detect proxy** **ON**.
5. Close the settings page and **restart Devin Desktop Editor**.
6. Try again:
* Reload the editor / Cascade
* Retry sign-in or any previously failing operation
If things stop working after enabling this, you can turn **Detect proxy** back **OFF** and use manual settings instead (see next section), or follow guidance from your IT team.
***
## **3. Manually configure a proxy in Devin Desktop Editor**
If your organization requires you to **manually specify** the proxy in applications:
1. Collect the required details from your IT / infra team:
* **Proxy protocol + address** (for example `http://proxy.company.com:8080` or `https://proxy.company.com:8443`)
* Whether the proxy **requires authentication**
* Your **proxy username/password** or other credentials, if needed
2. Open **Devin Settings**.
3. In the settings search bar, type **"proxy"** to open the proxy configuration section (see screenshot).
4. Fill in the fields:
* **Proxy URL / address** – include protocol and port (e.g. `http://proxy.company.com:8080`)
* **Authentication** – if your proxy requires it, enter the username and password fields shown in the UI
5. (Optional, if recommended by IT) Turn **Detect proxy** **ON** if your setup still relies on system/PAC detection alongside the manual settings.
6. Close the settings page and **restart Devin Desktop Editor** so the new proxy configuration is fully applied.
7. Try again:
* Reload the editor or Cascade if you previously saw a **blank screen**
* Retry the operation that was failing with **"Failed to connect"** or similar errors
***
## **4. Proxy settings for remote development (SSH / dev containers)**
If you use **remote development** (for example a dev container or Devin Desktop SSH remote), there is a separate set of proxy settings that control traffic between your local Devin Desktop Editor and the **remote** environment.
You may need to adjust these settings if:
* Connecting to a **dev container** or **SSH remote** fails or times out
* The remote window opens, but tools that depend on the network don't work as expected
* Your IT / infra team says the **remote host** must also go through a proxy
To configure the proxy for remote environments:
1. Open **Devin Settings**.
2. In the search bar, type **"proxy"**.
3. Under **User → Extensions**, locate:
* **Remote › Devin Remote SSH: Http Proxy**
* **Remote › Devin Remote SSH: Https Proxy**
4. Enter the proxy address(es) provided by your IT / infra team (usually including protocol and port, for example `http://proxy.company.com:8080`).
5. Restart the remote session (close the remote window and reconnect, or restart the dev container) and try again.
These **remote** proxy settings are independent from the general proxy / Detect proxy options described above. In some environments you may need to configure **both** the local editor proxy and the Devin Remote SSH proxy values.
***
## **5. When to use which option**
* **Use "Detect proxy" only** if:
* Your organization configures proxies centrally on your device (system network settings, PAC file), **and**
* IT tells you apps should "just pick up the system proxy."
* **Use manual configuration (with or without Detect proxy)** if:
* IT gives you a specific proxy URL and credentials to enter in each application, or
* Auto-detection in your environment is unreliable or not supported.
If you're unsure which of these applies to you, your **IT / infra team is the source of truth**—they can confirm whether you need proxy settings at all, what to enter, and whether the **Detect proxy** toggle should be on or off.
# TLS / SSL Inspection Issues in Devin Desktop
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-ssl-inspection
Configure enterprise environments where SSL inspection (e.g., Zscaler) causes TLS certificate validation or protocol negotiation failures. Includes how to capture Console errors and what to request from IT/security.
Some corporate and enterprise networks perform TLS interception ("SSL inspection") on outbound HTTPS traffic (commonly via Zscaler or similar security gateways). Devin Desktop Editor must establish outbound TLS connections to external services (for sign-in and cloud-backed features). If inspected traffic is re-signed by an enterprise inspection CA that your machine/runtime does not trust (or the chain is incomplete), Devin Desktop may fail to connect with SSL/certificate or negotiation errors.
In particular, SSL/TLS inspection troubleshooting may be required if:
* You see "Failed to connect" or similar network errors
* The editor or Cascade panel shows a blank screen and never loads
* Cascade or other cloud-backed features cannot load or connect
* Sign-in or activation flows fail unexpectedly
* Features work on a hotspot/home network but fail on the corporate network
* You see certificate or TLS handshake errors in logs/devtools
If you're also experiencing proxy-related issues, see [Proxy Configuration](/desktop/troubleshooting/windsurf-proxy-configuration).
***
## 1. Check whether your network uses SSL inspection
Before changing anything in the editor, ask your IT / security / network team:
* Do we perform TLS interception / SSL inspection on outbound HTTPS traffic?
* Is SSL inspection enabled for developer workstations and developer tools (not just browsers)?
* What Root CA / Intermediate CA chain is used to sign inspected traffic?
* Is that CA chain deployed to endpoints and trusted by applications/runtimes used for development?
If your organization does not use SSL inspection, you usually don't need to follow this guide. If your organization does use SSL inspection, continue below.
***
## 2. Capture the underlying error in Devin Desktop (Developer Tools → Console)
Devin Desktop Editor (VS Code–based) exposes Developer Tools that can show the actual TLS/certificate failures.
1. Open **Help → Dev Tools** / **Developer Tools**
2. Select the **Console** tab
3. Look for **red errors**
4. Expand each error entry to view full details (nested error fields / stack traces)
Common error patterns include:
**Certificate trust failures (untrusted CA):**
* `certificate signed by unknown authority`
* `unable to verify the first certificate`
* `self signed certificate in certificate chain`
* `UNABLE_TO_VERIFY_LEAF_SIGNATURE`
**Chain-building failures (missing intermediate):**
* `unable to get local issuer certificate`
* `unable to get issuer certificate`
**TLS negotiation failures:**
* `handshake_failure`
* `wrong version number`
* `protocol negotiation failed`
* `ERR_SSL_PROTOCOL_ERROR`
If you can provide the expanded console error text to IT/security, it usually shortens resolution time significantly.
***
## 3. What causes this in SSL-inspected environments
When SSL inspection is enabled, the gateway terminates and re-establishes TLS connections. The client is presented with a synthetic server certificate signed by an enterprise inspection CA (Root CA and sometimes Intermediate CA certificates).
Devin Desktop connectivity failures typically occur when:
* The enterprise inspection **Root CA is not trusted** on the endpoint, and/or
* The inspection certificate **chain is incomplete** (missing Intermediate CA), and/or
* The IDE/runtime uses a **non-OS trust store** that does not include the enterprise inspection CA chain, and/or
* Enterprise policy enforces TLS constraints that break negotiation (minimum TLS version/ciphers, blocking traffic that cannot be decrypted, etc.)
This is generally an enterprise certificate/trust/policy configuration issue, not a Devin Desktop-specific implementation issue.
***
## 4. Work with your IT / security team to resolve
Because SSL inspection and certificate deployment are controlled by your organization, resolution typically requires IT/security changes.
### A) Validate SSL inspection policy for Devin Desktop traffic
Ask IT/security to confirm:
* Whether SSL inspection applies to Devin Desktop-related outbound HTTPS traffic
* Whether any blocks/denies occur due to certificate validation, policy reasons, or TLS negotiation constraints
### B) Ensure the enterprise inspection CA chain is correctly deployed and trusted
Ask IT/security to:
* Deploy the enterprise SSL inspection **Root CA** to developer endpoints
* Ensure any required **Intermediate CA certificates** are present and the chain is correct
* Validate trust using the same trust store the IDE/runtime uses (OS store vs runtime-specific store)
### C) Configure a scoped SSL inspection bypass (fallback)
If trust alignment is not feasible, ask IT/security to:
* Create an SSL inspection bypass for the required Devin Desktop service endpoints (per your organization's allowlist/network requirements process)
* Keep the bypass narrowly scoped and aligned with your security policy
***
## 5. What to send to IT / security (copy/paste)
**Issue:** Devin Desktop Editor fails to connect on the corporate network; likely SSL inspection / TLS interception certificate trust or chain issue.
**Evidence:** Help → Developer Tools → Console shows TLS/certificate or handshake errors (expanded red console errors available).
**Request:**
1. Confirm whether SSL inspection is enabled for Devin Desktop-related outbound HTTPS traffic.
2. Confirm the enterprise SSL inspection Root CA and any intermediates are deployed and trusted on this endpoint (and in any runtime-specific trust store used by the IDE).
3. If trust alignment is not feasible, configure a scoped SSL inspection bypass for the required Devin Desktop service endpoints.
**Include:**
* Timestamp(s) of failure
* OS version
* Whether Zscaler Client Connector (or similar agent) is installed/enabled
* Expanded console error text from Developer Tools → Console
* Whether it works on a hotspot/home network but fails on corporate network
***
## 6. When to use which option
Use certificate deployment/trust fixes if:
* Errors indicate "unknown authority", "unable to verify", "issuer not found", or missing intermediates
* You want the most durable fix while keeping SSL inspection enabled
Use a scoped SSL inspection bypass if:
* The IDE/runtime cannot practically consume the enterprise CA chain
* Trust-store alignment is unreliable in your environment
* IT/security confirms inspection is causing failures and approves a targeted exception
If you're unsure which applies, your IT/security team is the source of truth—they can confirm whether SSL inspection is enabled, what CA chain is used, how endpoints are managed, and whether bypass rules are appropriate.
# WSL Known Issues
Source: https://docs.devin.ai/desktop/troubleshooting/windsurf-wsl-performance
Troubleshoot known Devin Desktop issues when running in Windows Subsystem for Linux (WSL), including slow performance from Plan 9 (9P) filesystem saturation and connection failures caused by VPN or zero-trust network software.
This page covers known issues when using Devin Desktop with Windows Subsystem for Linux (WSL) and their recommended fixes.
***
## **Slow Performance or Disconnections (9P Filesystem Saturation)**
When using Devin Desktop in WSL (via **Remote - WSL**), the editor may become slow, unresponsive, or repeatedly disconnect from the WSL backend. This is most commonly caused by extensions performing aggressive file watching and indexing over the WSL filesystem, which saturates the **Plan 9 (9P) protocol**—the filesystem bridge between Windows and the WSL Linux environment.
This is more likely in large repositories and when multiple language servers run concurrently.
### **Symptoms**
* Devin Desktop is noticeably slow or laggy when connected to WSL
* The editor frequently disconnects from the WSL backend and attempts to reconnect
* Disconnections occur during active development (e.g., while using Cascade) **and** while the editor is idle
* Devin Desktop crashes or becomes unresponsive, requiring a restart of both the IDE and WSL (`wsl --shutdown`)
* WSL memory usage grows over time, even on systems with 32 GB+ of RAM
* WSL diagnostic logs show large numbers of `P9 Reply_Rlerror` events (file-not-found errors)
* Performance is normal when using Devin Desktop outside of WSL (e.g., opening a local Windows folder)
* Common workarounds (restarting WSL, reinstalling Devin Desktop, increasing `.wslconfig` memory) do not resolve the issue on their own
***
### **Root Cause**
Communication between Windows and the WSL Linux filesystem uses the **Plan 9 (9P) protocol**, which has limited throughput compared to native filesystem access.
When extensions are installed in the WSL environment, some perform aggressive file watching and indexing across the entire workspace. In large repositories (e.g., 250,000+ files, 5+ GB), this generates a massive volume of filesystem operations over the 9P bridge, which can:
* Saturate the protocol's capacity
* Produce thousands of file-not-found errors (`Reply_Rlerror`)
* Cause the connection between Devin Desktop and the WSL backend to drop
* Contribute to growing memory pressure inside WSL over time
This is compounded when multiple language servers are also running (e.g., Sorbet, Ruby LSP, TypeScript, etc.), since they add additional file-watching overhead. The combined filesystem activity from extensions and language servers can overwhelm the 9P bridge even on systems with 32 GB+ of RAM.
A known example is the **Vue (Volar) extension**, which has been observed to cause excessive file indexing in WSL environments even when the workspace does not contain Vue files. This issue is documented in the VS Code ecosystem:
[microsoft/vscode-remote-release#11091](https://github.com/microsoft/vscode-remote-release/issues/11091)
This is especially likely if you have carried over a large set of extensions from VS Code or another editor that are not needed for your current project.
***
### **Solutions**
#### **1. Update WSL to the latest version (recommended first step)**
Many disconnection and performance issues in WSL are resolved by simply updating WSL itself. Newer WSL releases include improvements to 9P filesystem stability and connection reliability.
Open **PowerShell** (or Command Prompt) on your Windows host and run:
```
wsl --update
```
Then restart WSL:
```
wsl --shutdown
```
Reopen Devin Desktop and reconnect to WSL. You can verify your WSL version with:
```
wsl --version
```
WSL **2.7.3.0 and later** includes fixes that have resolved persistent disconnection issues for users, even without any other configuration changes.
***
#### **2. Clean reinstall of the Devin Desktop server in WSL**
Delete the Devin Desktop server directory inside WSL and let Devin Desktop reinstall it on next connection:
```shell theme={null}
rm -rf ~/.windsurf-server
```
Then reconnect Devin Desktop to WSL. The server will be reinstalled automatically.
***
#### **3. Minimize installed extensions (highest impact)**
Only install extensions you actively need for the repository you are working in.
* Open the Extensions panel in Devin Desktop while connected to WSL
* Review which extensions are installed in the **WSL** environment (not just locally)
* Disable or uninstall extensions you do not need—especially those that perform heavy file watching or indexing
**Known problematic extensions in WSL:**
* **Vue (Volar)** — confirmed to cause excessive file indexing over the 9P bridge, even in non-Vue projects. Uninstalling this extension alone has resolved disconnections for multiple users.
* Other framework-specific language extensions (Angular, Svelte, etc.) may behave similarly if installed but not needed for the current workspace.
Do **not** assume that extensions which work fine on a local (non-WSL) setup will behave the same in WSL. The 9P filesystem bridge is the bottleneck—extensions that are harmless locally can become destabilizing when every file operation must cross the protocol boundary.
Reducing extension-driven filesystem activity directly reduces load on the 9P bridge.
***
#### **4. Optimize WSL resource limits**
Create or edit the file `%USERPROFILE%\.wslconfig` on your **Windows** host (e.g., `C:\Users\\.wslconfig`) with resource limits appropriate for your system:
```
[wsl2]
memory=16GB
swap=4GB
processors=4
autoMemoryReclaim=gradual
```
> **Note:** The `autoMemoryReclaim` setting was removed in WSL **2.7.3.0** and later. If you are running WSL 2.7.3.0+, omit this line. You can check your WSL version with `wsl --version`.
Adjust values based on your system's available resources.
After saving the file, restart WSL:
```
wsl --shutdown
```
Then reopen Devin Desktop and reconnect to WSL.
***
### **Diagnosis**
#### **Check WSL diagnostic logs for 9P errors**
To confirm that 9P saturation is the cause, collect WSL diagnostic logs:
```
wsl --debug-shell
```
Or collect a full diagnostic bundle:
```
Invoke-WebRequest -UseBasicParsing "https://aka.ms/wsldiag" -OutFile wsldiag.ps1
.\wsldiag.ps1
```
Look for high volumes of `Reply_Rlerror` events in the 9P/filesystem logs. Thousands (or more) typically indicate that extensions or processes inside WSL are generating excessive filesystem requests that the 9P bridge cannot keep up with.
***
### **When to use which fix**
* **Update WSL** first—many issues are resolved by simply running `wsl --update`. WSL 2.7.3.0+ includes significant stability improvements. (Simplest fix.)
* **Minimize extensions** if you have many extensions installed in WSL that you don't actively need, or if you migrated extensions from another editor. (Highest-impact change.)
* **Clean server reinstall** if the Devin Desktop server state may be corrupted or stale (e.g., after a failed update or previous crash).
* **Optimize `.wslconfig`** if WSL is consuming excessive host resources, or if you have not previously configured resource limits. (General WSL stability improvement.)
For best results, start by updating WSL, then apply the remaining fixes as needed. The combination of an up-to-date WSL, a clean server, minimal extensions, and tuned resource limits addresses both the root cause (9P saturation from extension activity) and contributing factors (resource exhaustion).
***
## **Cannot Connect to WSL with VPN or Zero-Trust Software**
Devin Desktop fails to connect to WSL with the error `Couldn't install vscode server on remote server, install script returned non-zero exit status` when VPN or zero-trust software (Twingate, Tailscale, Zscaler, Cloudflare WARP, GlobalProtect, etc.) blocks outbound network traffic from inside WSL.
### **Symptoms**
* Devin Desktop reports `Error resolving authority` / `install script returned non-zero exit status` when connecting to WSL
* WSL itself works (`wsl -d Ubuntu -- echo hello` succeeds), but `curl` times out inside WSL
* The issue started after VPN or zero-trust software was installed or updated
### **Root Cause**
WSL 2 routes traffic through a NAT-based virtual network by default. VPN and zero-trust software often does not forward traffic from this virtual network, so the Devin Desktop server download fails silently.
### **Solution**
#### **1. Enable mirrored networking**
Edit the WSL config file to enable mirrored networking (typically `C:\Users\\.wslconfig`).
Add the following:
```ini theme={null}
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
```
Then restart WSL and clean up any stale installation state:
```
wsl --shutdown
wsl -d Ubuntu -- bash -c "rm -f ~/.windsurf-server/.installation_lock"
```
Reopen Devin Desktop and reconnect to WSL. The server will install automatically.
> **Note:** Requires WSL 2.0.0+. Run `wsl --version` to check, and `wsl --update` to upgrade if needed.
#### **2. Alternative: temporarily disconnect VPN**
If you cannot change `.wslconfig`, disconnect your VPN/ZTNA, let Devin Desktop install the server, then reconnect. Future Devin Desktop updates will require network access from WSL again.
# Vibe and Replace
Source: https://docs.devin.ai/desktop/vibe-and-replace
AI-powered find and replace that applies natural language prompts to each match. Use Smart mode for careful changes or Fast mode for quick transformations.
Vibe and Replace is an evolution of find and replace that allows you to search through your codebase for exact text matches and apply an AI prompt to each replacement.
Use this for more context-aware transformations and refactors.
## Modes
Vibe and Replace can be used in two different modes:
1. `Smart` - utilizes a slower model that will apply changes more carefully
2. `Fast` - utilizes a faster model that will apply changes quickly
To set the mode, click on the `⌄` button next to the Vibe and Replace prompt box.
# Cascade Overview
Source: https://docs.devin.ai/windsurf/plugins/cascade/cascade-overview
Cascade brings agentic AI coding to JetBrains with Write/Chat modes, voice input, tool access, turbo mode, and real-time collaboration.
Windsurf's Cascade brings the best of agentic coding to the JetBrains suite.
To open Cascade, press `Cmd/Ctrl+L` or click the Cascade icon.
# Model selection
Select your desired model from the selection menu below the Cascade conversation input box. Click below to see the full breakdown of the available models and their availability across different plans and pricing.
Model availability in Windsurf.
# Write/Chat Modes
Cascade comes in two modes: **Write** and **Chat**.
Write mode allows Cascade to create and make modifications to your codebase, while Chat mode is optimized for questions around your codebase or general coding principles.
# Queued Messages
While you are waiting for Cascade to finish its current task, you can queue up new messages to execute in order once the task is complete.
To add a message to the queue, simply type in your message while Cascade is working and press `Enter`.
* **Send immediately**: Press Enter again on an empty text box to send it right away.
* **Delete**: Remove any message from the queue before it's sent
# Access to Tools
Cascade has a variety of tools at its disposal, such as Search, Analyze, [Web Search](/desktop/cascade/web-search), and the [terminal](/desktop/terminal).
It can detect which packages and tools that you're using, which ones need to be installed, and even install them for you. Just ask Cascade how to run your project and press Accept.
Cascade can make up to 25 tool calls per prompt. If the trajectory stops, simply type in `continue` and Cascade will resume from where it left off. Each `continue` will count as a new prompt.
# Voice input
Use Voice input to use your voice to interact with Cascade. In its current form it can transcribe your speech to text.
# Revert to previous steps
You have the ability to revert changes that Cascade has made if you want to. Simply hover your mouse over the original prompt and click on the revert arrow on the right, or revert directly from the table of contents. This will revert all code changes back to the state of your codebase at the desired step.
Reverts are currently irreversible, so be careful!
# Auto-Execution Modes
Cascade supports three levels of command auto-execution in JetBrains: **Off**, **Auto**, and **Turbo**. You can select your preferred level via the Windsurf Settings panel.
| Level | Description |
| --------- | -------------------------------------------------------------------------------------------------------------- |
| **Off** | Never auto-execute terminal commands, except those in your allow list. |
| **Auto** | Model decides whether to auto-execute commands based on safety assessment. Available with premium models only. |
| **Turbo** | Always auto-execute terminal commands and browser controls, except those in your deny list. |
For Teams and Enterprise users, administrators can set a maximum allowed auto-execution level. Users can select any level up to that maximum, but cannot exceed it.
For more details on auto-execution levels and allow/deny lists, see the [Terminal documentation](/desktop/terminal#auto-executed-cascade-commands).
# Real-time collaboration
A unique capability of Cascade is that it is aware of your real-time actions.
You no longer necessarily need to prompt with context on your prior actions, as Cascade is already aware.
Try making a manual change in the code editor, and then prompt Cascade to "continue my work"!
# Ignoring files
If you'd like Cascade to ignore files, you can add your files to `.codeiumignore` at the root of your workspace. This will prevent Cascade from viewing, editing or creating files inside of the paths designated. You can declare the file paths in a format similar to `.gitignore`.
## Global .codeiumignore
For enterprise customers managing multiple repositories, you can enforce ignore rules across all repositories by placing a global `.codeiumignore` file in the `~/.codeium/` folder. This global configuration will apply to all Windsurf workspaces on your system and works in addition to any repository-specific `.codeiumignore` files.
# Model Context Protocol (MCP)
Source: https://docs.devin.ai/windsurf/plugins/cascade/mcp
Configure MCP servers to extend Cascade with custom tools and services using stdio, HTTP, or SSE transports with admin controls for Teams and Enterprise.
**MCP (Model Context Protocol)** is a protocol that enables LLMs to access custom tools and services.
An MCP client (Cascade, in this case) can make requests to MCP servers to access tools that they provide.
Cascade now natively integrates with MCP, allowing you to bring your own selection of MCP servers for Cascade to use.
See the [official MCP docs](https://modelcontextprotocol.io/) for more information.
Enterprise users must manually turn this on via settings
## Adding a new MCP plugin
New MCP plugins can be added by going to the `Settings` > `Tools` > `Windsurf Settings` > `Add Server` section.
If you cannot find your desired MCP plugin, you can add it manually by clicking the `View Raw Config` button and editing the raw `mcp_config.json` file.
When you click on an MCP server, simply click `+ Add Server` to expose the server and its tools to Cascade.
Cascade supports three [transport types](https://modelcontextprotocol.io/docs/concepts/transports) for MCP
servers: `stdio`, `Streamable HTTP`, and `SSE`.
Cascade also supports OAuth for each transport type.
For `http` servers, the URL should reflect that of the endpoint and resemble `https:///mcp`.
Make sure to press the refresh button after you add a new MCP plugin.
## mcp\_config.json
The `~/.codeium/mcp_config.json` file is a JSON file that contains a list of servers that Cascade can connect to.
Here’s an example configuration, which sets up a single server for GitHub:
```json theme={null}
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
}
}
```
Be sure to provide the required arguments and environment variables for the servers that you want to use.
See the [official MCP server reference repository](https://github.com/modelcontextprotocol/servers) or [OpenTools](https://opentools.com/) for some example servers.
### Remote HTTP MCPs
It's important to note that for remote HTTP MCPs, the configuration is slightly
different and requires a `serverUrl` or `url` field.
Here's an example configuration for an HTTP server:
```json theme={null}
{
"mcpServers": {
"remote-http-mcp": {
"serverUrl": "/mcp",
"headers": {
"API_KEY": "value"
}
}
}
}
```
### Config Interpolation
The `~/.codeium/mcp_config.json` file handles interpolation of
environment variables in these fields: `command`, `args`, `env`, `serverUrl`, `url`, and
`headers`.
Here’s an example configuration, which uses an `AUTH_TOKEN` environment variable
in `headers`.
```json theme={null}
{
"mcpServers": {
"remote-http-mcp": {
"serverUrl": "/mcp",
"headers": {
"API_KEY": "Bearer ${env:AUTH_TOKEN}"
}
}
}
}
```
## Admin Controls (Teams & Enterprises)
Team admins can toggle MCP access for their team, as well as whitelist approved MCP servers for their team to use:
Configurable MCP settings for your team.
The above link will only work if you have admin privileges for your team.
By default, users within a team will be able to configure their own MCP servers. However, once you whitelist even a single MCP server, **all non-whitelisted servers will be blocked** for your team.
### How Server Matching Works
When you whitelist an MCP server, the system uses **regex pattern matching** with the following rules:
* **Full String Matching**: All patterns are automatically anchored (wrapped with `^(?:pattern)$`) to prevent partial matches
* **Command Field**: Must match exactly or according to your regex pattern
* **Arguments Array**: Each argument is matched individually against its corresponding pattern
* **Array Length**: The number of arguments must match exactly between whitelist and user config
* **Special Characters**: Characters like `$`, `.`, `[`, `]`, `(`, `)` have special regex meaning and should be escaped with `\` if you want literal matching
### Configuration Options
**Admin Whitelist Configuration:**
* **Server ID**: `github-mcp-server`
* **Server Config (JSON)**: *(leave empty)*
```json theme={null}
{}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"github-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}
```
This allows users to install the GitHub MCP server with any valid configuration, as long as the server ID matches the plugin store entry.
**Admin Whitelist Configuration:**
* **Server ID**: `github-mcp-server`
* **Server Config (JSON)**:
```json theme={null}
{
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": ""
}
}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"github-mcp-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}
```
Users must use this exact configuration - any deviation in command or args will be blocked. The `env` section can have different values.
**Admin Whitelist Configuration:**
* **Server ID**: `python-mcp-server`
* **Server Config (JSON)**:
```json theme={null}
{
"command": "python3",
"args": ["/.*\\.py", "--port", "[0-9]+"]
}
```
**Matching User Config (`mcp_config.json`):**
```json theme={null}
{
"mcpServers": {
"python-mcp-server": {
"command": "python3",
"args": ["/home/user/my_server.py", "--port", "8080"],
"env": {
"PYTHONPATH": "/home/user/mcp"
}
}
}
}
```
This example allows users flexibility while maintaining security:
* The regex `/.*\\.py` matches any Python file path like `/home/user/my_server.py`
* The regex `[0-9]+` matches any numeric port like `8080` or `3000`
* Users can customize file paths and ports while admins ensure only Python scripts are executed
### Common Regex Patterns
| Pattern | Matches | Example |
| --------------- | ------------------------- | ---------------------- |
| `.*` | Any string | `/home/user/script.py` |
| `[0-9]+` | Any number | `8080`, `3000` |
| `[a-zA-Z0-9_]+` | Alphanumeric + underscore | `api_key_123` |
| `\\$HOME` | Literal `$HOME` | `$HOME` (not expanded) |
| `\\.py` | Literal `.py` | `script.py` |
| `\\[cli\\]` | Literal `[cli]` | `mcp[cli]` |
## Notes
### Admin Configuration Guidelines
* **Environment Variables**: The `env` section is not regex-matched and can be configured freely by users
* **Disabled Tools**: The `disabledTools` array is handled separately and not part of whitelist matching
* **Case Sensitivity**: All matching is case-sensitive
* **Error Handling**: Invalid regex patterns will be logged and result in access denial
* **Testing**: Test your regex patterns carefully - overly restrictive patterns may block legitimate use cases
### Troubleshooting
If users report that their MCP servers aren't working after whitelisting:
1. **Check Exact Matching**: Ensure the whitelist pattern exactly matches the user's configuration
2. **Verify Regex Escaping**: Special characters may need escaping (e.g., `\.` for literal dots)
3. **Review Logs**: Invalid regex patterns are logged with warnings
4. **Test Patterns**: Use a regex tester to verify your patterns work as expected
Remember: Once you whitelist any server, **all other servers are automatically blocked** for your team members.
### General Information
* Since MCP tool calls can invoke code written by arbitrary server implementers, we do not assume liability
for MCP tool call failures. To reiterate:
* We currently support an MCP server's [tools](https://modelcontextprotocol.io/docs/concepts/tools), [resources](https://modelcontextprotocol.io/docs/concepts/resources), and [prompts](https://modelcontextprotocol.io/docs/concepts/prompts).
# Memories & Rules
Source: https://docs.devin.ai/windsurf/plugins/cascade/memories
Configure Cascade memories and rules to persist context across conversations with global rules, workspace rules, and system-level rules for enterprise.
`Memories` is the system for sharing and persisting context across conversations.
There are two mechanisms for this in Cascade: Memories, which can be automatically generated by Cascade, and rules, which are manually defined by the user at both the local and global levels.
## How to Manage Memories
Memories and Rules can be accessed and configured at any time by clicking on the `Customizations` icon in the top right slider menu in Cascade. To edit an existing memory, simply click into it and then click the `Edit` button.
## Memories
During conversation, Cascade can automatically generate and store memories if it encounters context that it believes is useful to remember.
Additionally, you can ask Cascade to create a memory at any time. Just prompt Cascade to "create a memory of ...".
Cascade's autogenerated memories are associated with the workspace that they were created in and Cascade will retrieve them when it believes that they are relevant. Memories generated in one workspace will not be available in another.
Creating and using auto-generated memories do NOT consume credits
## Rules
Users can explicitly define their own rules for Cascade to follow.
Rules can be defined at either the global level or the workspace level.
`global_rules.md` - rules applied across all workspaces
`.windsurf/rules` - workspace level directory containing rules that are tied to globs or natural language descriptions.
## Rules Discovery
Windsurf automatically discovers rules from multiple locations to provide flexible organization:
* **Current workspace and sub-directories**: All `.windsurf/rules` directories within your current workspace and its sub-directories
* **Git repository structure**: For git repositories, Windsurf also searches up to the git root directory to find rules in parent directories
* **Multiple workspace support**: When multiple folders are open in the same workspace, rules are deduplicated and displayed with the shortest relative path
### Rules Storage Locations
Rules can be stored in any of these locations:
* `.windsurf/rules` in your current workspace directory
* `.windsurf/rules` in any sub-directory of your workspace
* `.windsurf/rules` in parent directories up to the git root (for git repositories)
When you create a new rule, it will be saved in the `.windsurf/rules` directory of your current workspace, not necessarily at the git root.
To get started with Rules, click on the `Customizations` icon in the top right slider menu in Cascade, then navigate to the `Rules` panel. Here, you can click on the `+ Global` or `+ Workspace` button to create new rules at either the global or workspace level, respectively.
You can find example rule templates curated by the Windsurf team at [https://windsurf.com/editor/directory](https://windsurf.com/editor/directory) to help you get started.
Rules files are limited to 12000 characters each.
### Best Practices
To help Cascade follow your rules effectively, follow these best practices:
* Keep rules simple, concise, and specific. Rules that are too long or vague may confuse Cascade.
* There's no need to add generic rules (e.g. "write good code"), as these are already baked into Cascade's training data.
* Format your rules using bullet points, numbered lists, and markdown. These are easier for Cascade to follow compared to a long paragraph.
For example:
```
# Coding Guidelines
- My project's programming language is python
- Use early returns when possible
- Always add documentation when creating new functions and classes
```
* XML tags can be an effective way to communicate and group similar rules together. For example:
```
- My project's programming language is python
- Use early returns when possible
- Always add documentation when creating new functions and classes
```
## System-Level Rules (Enterprise)
Enterprise organizations can deploy system-level rules that apply globally across all workspaces and cannot be modified by end users without administrator permissions. This is ideal for enforcing organization-wide coding standards, security policies, and compliance requirements.
System-level rules are loaded from OS-specific directories:
**macOS:**
```
/Library/Application Support/Windsurf/rules/*.md
```
**Linux/WSL:**
```
/etc/windsurf/rules/*.md
```
**Windows:**
```
C:\ProgramData\Windsurf\rules\*.md
```
Place your rule files (as `.md` files) in the appropriate directory for your operating system. The system will automatically load all `.md` files from these directories.
### How System Rules Work
System-level rules are merged with workspace and global rules, providing additional context to Cascade without overriding user-defined rules. This allows organizations to establish baseline standards while still permitting teams to add project-specific customizations.
In the Cascade UI, system-level rules are displayed with a "System" label and cannot be deleted by end users.
**Important**: System-level rules should be managed by your IT or security team. Ensure your internal teams handle deployment, updates, and compliance according to your organization's policies. You can use standard tools and workflows such as Mobile Device Management (MDM) or Configuration Management to do so.
# Cascade Models
Source: https://docs.devin.ai/windsurf/plugins/cascade/models
Available AI models in Cascade including SWE-1.7, SWE-1.5, SWE-1, Claude, and GPT with credit costs.
In Cascade, you can easily switch between different models of your choosing.
Under the text input box, you will see a model selection dropdown menu containing the following models:
For the most up-to-date pricing and availability, please refer to the model selector in Cascade within the Windsurf IDE.
Your quota and extra usage is billed based on the token cost of the model you select. You can view the cost of each model in the table below.
Model usage is converted to ACUs based on the per-token rates below.
This only applies to credit-based enterprise customers. Newer enterprise plans are billed in ACUs — see the Enterprise (ACUs) tab.
# SWE-1.7, swe-grep, swe-check
Our SWE model family of in-house frontier models are built specifically for software engineering tasks.
Our latest model, SWE-1.7, is available as a free preview until August 8. SWE-1.7 Lightning runs on Cerebras for an even faster experience.
Our in-house models include:
* `SWE-1.7`: Cognition's latest software engineering model, available free during the preview.
* `SWE-1.7 Lightning`: A faster version of SWE-1.7 served on Cerebras, delivering the same intelligence with lower latency.
* `SWE-1.6`: Our previous-generation model built for software engineering agents, optimized for both intelligence and model UX. Read our [research announcement](https://cognition.com/blog/swe-1-6).
* `SWE-1.6 Fast`: A faster version of SWE-1.6 available to paying users.
* `SWE-1.5`: Our previous frontier agentic coding model. Near Claude 4.5-level performance at 13x the speed. Read our [research announcement](https://cognition.com/blog/swe-1-5).
* `SWE-1`: Our first agentic coding model. Achieved Claude 3.5-level performance at a fraction of the cost.
* `SWE-1-mini`: Powers passive suggestions in Windsurf Tab, optimized for real-time latency.
* `swe-grep`: Powers context retrieval and [Fast Context](/desktop/context-awareness/fast-context)
* `swe-check`: Powers [Quick Review](/desktop/quick-review) with fast, lightweight reviews optimized for common code issues.
# Web and Docs Search
Source: https://docs.devin.ai/windsurf/plugins/cascade/web-search
Enable Cascade to search the web and read documentation pages in real-time using @web and @docs mentions for up-to-date context.
Cascade can now intuitively parse through and chunk up web pages and documentation, providing real-time context to the models. The key way to understand this feature is that Cascade will browse the Internet as a human would.
Our web tools are designed in such a way that gets only the information that is necessary in order to efficiently use your credits.
## Overview
To help you better understand how Web Search works, we've recorded a short video covering the key concepts and best practices.
### Quick Start
The fastest way to get started is to activate web search in your Windsurf Settings in the bottom right corner of the editor. You can activate it a couple of different ways:
1. Ask a question that probably needs the Internet (i.e., "What's new in the latest version of React?").
2. Use `@web` to force a docs search.
3. Use `@docs` to query over a list of docs that we are confident we can read with high quality.
4. Paste a URL into your message.
## Search the web
Cascade can deduce that certain prompts from the user may require a real-time web search to provide the optimal response. In these cases, Cascade will perform a web search and provide the results to the user. This can happen automatically or manually using the `@web` mention.
The **Enable Web Search** admin setting controls whether Cascade can perform web searches on the open Internet. It does not affect Cascade's ability to read specific URLs (see [Reading Pages](#reading-pages) below), which is performed locally on the user's machine.
## Reading Pages
Cascade can read individual pages for things like documentation, blog posts, and GitHub files. The page reads happen entirely on your device within your network so if you're using a VPN you shouldn't have any problems.
Pages are picked up either from web search results, inferred based on the conversation, or from URLs pasted directly into your message.
We break pages up into multiple chunks, very similar to how a human would read a page: for a long page we skim to the section we want then read the text that's relevant. This is how Cascade operates as well.
It's worth noting that not all pages can be parsed. We are actively working on improving the quality of our website reading. If you have specific sites you'd like us to handle better, feel free to file a feature request!
# Workflows
Source: https://docs.devin.ai/windsurf/plugins/cascade/workflows
Create reusable Cascade workflows as markdown files to automate repetitive tasks like deployments, PR reviews, and code formatting with slash commands.
Workflows enable users to define a series of steps to guide Cascade through a repetitive set of tasks, such as deploying a service or responding to PR comments.
These Workflows are saved as markdown files, allowing users and their teams an easy repeatable way to run key processes.
Once saved, Workflows can be invoked in Cascade via a slash command with the format of `/[name-of-workflow]`
## How it works
Rules generally provide large language models with guidance by providing persistent, reusable context at the prompt level.
Workflows extend this concept by providing a structured sequence of steps or prompts at the trajectory level, guiding the model through a series of interconnected tasks or actions.
To execute a Workflow, users simply invoke it in Cascade using the `/[workflow-name]` command.
You can call other Workflows from within a Workflow!
For example, /workflow-1 can include instructions like "Call /workflow-2" and "Call /workflow-3".
Upon invocation, Cascade sequentially processes each step defined in the Workflow, performing actions or generating responses as specified.
## How to create a Workflow
To get started with Workflows, click on the `Customizations` icon in the top right slider menu in Cascade, then navigate to the `Workflows` panel. Here, you can click on the `+ Workflow` button to create a new Workflow.
Workflows are saved as markdown files within `.windsurf/workflows/` directories and contain a title, description, and a series of steps with specific instructions for Cascade to follow.
## Workflow Discovery
Windsurf automatically discovers workflows from multiple locations to provide flexible organization:
* **Current workspace and sub-directories**: All `.windsurf/workflows/` directories within your current workspace and its sub-directories
* **Git repository structure**: For git repositories, Windsurf also searches up to the git root directory to find workflows in parent directories
* **Multiple workspace support**: When multiple folders are open in the same workspace, workflows are deduplicated and displayed with the shortest relative path
### Workflow Storage Locations
Workflows can be stored in any of these locations:
* `.windsurf/workflows/` in your current workspace directory
* `.windsurf/workflows/` in any sub-directory of your workspace
* `.windsurf/workflows/` in parent directories up to the git root (for git repositories)
When you create a new workflow, it will be saved in the `.windsurf/workflows/` directory of your current workspace, not necessarily at the git root.
Workflow files are limited to 12000 characters each.
### Generate a Workflow with Cascade
You can also ask Cascade to generate Workflows for you! This works particularly well for Workflows involving a series of steps in a particular CLI tool.
## Example Workflows
There are a myriad of use cases for Workflows, such as:
This is a Workflow our team uses internally to address PR comments:
```
1. Check out the PR branch: `gh pr checkout [id]`
2. Get comments on PR
bash
gh api --paginate repos/[owner]/[repo]/pulls/[id]/comments | jq '.[] | {user: .user.login, body, path, line, original_line, created_at, in_reply_to_id, pull_request_review_id, commit_id}'
3. For EACH comment, do the following. Remember to address one comment at a time.
a. Print out the following: "(index). From [user] on [file]:[lines] — [body]"
b. Analyze the file and the line range.
c. If you don't understand the comment, do not make a change. Just ask me for clarification, or to implement it myself.
d. If you think you can make the change, make the change BEFORE moving onto the next comment.
4. After all comments are processed, summarize what you did, and which comments need the USER's attention.
```
Commit using predefined formats and create pull requests with standardized title and descriptions using the appropriate CLI commands.
Automate the installation or updating of project dependencies based on a configuration file (e.g., requirements.txt, package.json).
Automatically run code formatters (like Prettier, Black) and linters (like ESLint, Flake8) on file save or before committing to maintain code style and catch errors early.
Run or add unit or end-to-end tests and fix the errors automatically to ensure code quality before committing, merging, or deploying.
Automate the steps to deploy your application to various environments (development, staging, production), including any necessary pre-deployment checks or post-deployment verifications.
Integrate and trigger security vulnerability scans on your codebase as part of the CI/CD pipeline or on demand.
## System-Level Workflows (Enterprise)
Enterprise organizations can deploy system-level workflows that are available globally across all workspaces and cannot be modified by end users without administrator permissions. This is ideal for enforcing organization-wide development processes, deployment procedures, and compliance workflows.
System-level workflows are loaded from OS-specific directories:
**macOS:**
```
/Library/Application Support/Windsurf/workflows/*.md
```
**Linux/WSL:**
```
/etc/windsurf/workflows/*.md
```
**Windows:**
```
C:\ProgramData\Windsurf\workflows\*.md
```
Place your workflow files (as `.md` files) in the appropriate directory for your operating system. The system will automatically load all `.md` files from these directories.
### Workflow Precedence
When workflows with the same name exist at multiple levels, system-level workflows take the highest precedence:
1. **System** (highest priority) - Organization-wide workflows deployed by IT
2. **Workspace** - Project-specific workflows in `.windsurf/workflows/`
3. **Global** - User-defined workflows
4. **Built-in** - Default workflows provided by Windsurf
This means that if an organization deploys a system-level workflow with a specific name, it will override any workspace, global, or built-in workflow with the same name.
In the Cascade UI, system-level workflows are displayed with a "System" label and cannot be deleted by end users.
**Important**: System-level workflows should be managed by your IT or security team. Ensure your internal teams handle deployment, updates, and compliance according to your organization's policies. You can use standard tools and workflows such as Mobile Device Management (MDM) or Configuration Management to do so.
# Changelog
Source: https://docs.devin.ai/windsurf/plugins/changelog
Release notes for the Windsurf JetBrains plugin.
# Bug Fixes & Improvements
* Various bug fixes and improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [devin.ai/support](https://devin.ai/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed Cascade chat input not receiving keyboard focus when opening Cascade via the `Ctrl+Shift+L` shortcut or the status bar toggle
* Fixed an IDE internal error popup that could occur after Cascade edited a file
* Fixed the edit count in the diff bar not updating immediately when accepting or rejecting Cascade edits one-by-one
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed Cascade edit reverts not persisting correctly after closing a conversation
* Fixed inaccurate diff statistics shown in the toolbar
* Fixed proxy settings (HTTP\_PROXY) not being respected by the language server
* Fixed WSL shell commands not working in the JetBrains plugin
* Fixed diffs disappearing when closing a conversation and restoring on reopen
* Fixed incorrect "Plan ends in X days" message for free-tier users
* Fixed a crash in the Cascade bar when the component was already disposed
* Fixed MCP OAuth connection issues with certain server configurations
## Improvements
* Improved diff text rendering and visualization in the editor
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Adaptive Fix
We fixed a bug with the adaptive model router which prevented switching models after the first request.
All users who encountered the bug have had quota reset and overage restored.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Introducing Adaptive
We've made several model packaging changes, with more info [here](https://windsurf.com/blog/windsurf-adaptive).
## Adaptive Model Router
A new **Adaptive** model option is now available in the model picker. Adaptive intelligently selects the best model for each task, helping you make your quota last longer by avoiding overuse of premium models.
* **Availability**: Now available to all self-serve users on Pro, Max, and Teams plans.
* **Dynamic model selection** - Automatically chooses the right underlying model for your task while drawing down quota at a fixed per-token rate.
* **Extra usage promo** - Beyond your quota, extra usage is offered at 0.50 USD per 1M input tokens, 2.00 USD per 1M output tokens, and 0.10 USD per 1M cache read tokens for the next 2 weeks.
## Updated Model Picker with Pricing Context
The model picker now shows token pricing information directly, so you can see the exact rate extra usage is billed at.
* **Token pricing display** - Per-model input, output, and cache read token rates visible in the picker.
* **Prompt cache timer** - A new prompt cache timer is integrated into the context window indicator to help you track caching status.
* **Token counts in response cards** - Response cards after messages now include token counts so you can understand exactly how each message cost was calculated.
# Bug Fixes & Improvements
## Improvements
* Now compatible with IntelliJ Platform 2026.1
## Bug Fixes
* Fixed a crash caused by the Cascade bar
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Improvements
* Improved tab completion responsiveness
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fix crash on Apple M5
## Improvements
* Improved system stability and compatibility
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models
## GPT-5.4
GPT-5.4 is now available in Windsurf with limited-time promotional pricing for self-serve users:
* **No Reasoning:** 1x credits
* **Low Reasoning:** 1x credits
* **Medium Reasoning:** 2x credits
* **High Reasoning:** 3x credits
* **Extra High Reasoning:** 8x credits
## Bug Fixes
* Fixed light mode hover contrast for "Accept all" button in Cascade window
* Fixed Cascade diff actions not hiding when IDE window loses focus
* Fixed Cascade going blank after "Add folder to workspace" transition
* Fixed keyboard shortcuts not working correctly on Linux
* Fixed a crash that could occur when creating or deleting files during a Cascade session
* Fixed Cascade being inaccessible while the IDE is loading or indexing a project
## Improvements
* Respect IntelliJ-configured shell path
* Improved diff button colors to better match IDE theme
* Improved Cascade startup performance
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Gemini 3.1 Pro
Gemini 3.1 Pro is now available in Windsurf with limited-time promotional pricing for self-serve users:
* Low Thinking: 0.5x credits
* High Thinking: 1x credits
# Codex 5.3
* Added support for GPT-5.3-Codex with four reasoning efforts (low, medium, high, and xhigh).
* GPT-5.3-Codex is OpenAI's latest model designed for agentic coding.
## Patch Fixes
* Reduced the priority of Git commits in @ mention search
* Fixed Plugin crashes & IDE slowness during initialization
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Claude Opus 4.6 (fast mode)
Claude Opus 4.6 (fast mode) is now available in Windsurf in research preview with limited-time promotional pricing for self-serve users until Feb 16:
* **No thinking:** 10x credits
* **With thinking:** 12x credits
Opus 4.6 (fast mode) has the same intelligence as Opus 4.6 but with up to 2.5x higher output speeds.
## Claude Opus 4.6
Claude Opus 4.6 is now available in Windsurf with limited-time promotional pricing for self-serve users:
* **No thinking:** 2x credits
* **With thinking:** 3x credits
## Patch Fixes
* Fixed Windows shortcuts on switching between code & chat mode.
* Fixed IDE freezing when downloading diagnostics data.
* Fixed an issue where the language server used excessive CPU resources on large projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes
## Bug Fixes
* Fixed Cascade crash on Windows caused by "site can't be reached" connection errors.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## GPT-5.2-Codex
* Adds support for GPT-5.2-Codex with four reasoning efforts (low, medium, high, and xhigh).
* GPT-5.2-Codex is OpenAI's latest model designed for agentic coding.
* It excels at working in large codebases over long sessions.
* For most tasks, we recommend using the medium reasoning effort.
## Agent Skills
* Windsurf now supports [Agent Skills](https://docs.windsurf.com/windsurf/cascade/skills) for Cascade.
## Patch Fixes
* Fixed Cascade panel occasionally going blank during idle periods.
* Fixed language server process not terminating when IDE is closed.
* Fixed keyboard shortcuts on Rider.
* Added [`post_setup_worktree`](https://docs.windsurf.com/windsurf/cascade/worktrees#setup-hook) hook for initializing worktrees in Cascade
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Gemini 3 Flash
Gemini 3 Flash is now available for all users. This model combines Gemini 3 Pro-grade reasoning with Flash-level speed and efficiency, making it ideal for agentic workflows and coding tasks.
* **Blazing Fast Responses**: Experience near-instant feedback with 3x faster performance than previous generations, perfect for iterative development compared to Gemini 3 Pro
* **Superior Coding Intelligence**: Outperforms even Pro-tier models on key coding benchmarks (78% on SWE-bench Verified), providing more accurate code generation and debugging
* **Deep Multimodal Understanding**: Easily process complex video, data extraction, and visual Q\&A tasks with frontier-level reasoning
## Multi-Cascade Panes & Tabs
* You can already run multiple Cascade sessions in Windsurf at the same time. Now, you can view and interact with them in separate panes and tabs within the same window.
* This lets you monitor progress and compare outputs of sessions side-by-side.
## Context Window Indicator
* When a model's context window grows too long, earlier context can be dropped without warning and performance can degrade.
* Cascade already extends the window by occasionally summarizing messages and clearing history.
* This release adds a visual indicator to see how much of your context window is currently in use, helping you anticipate limits and decide when to start a new session.
## Model Context Protocol
* Added support for [MCP prompts](https://modelcontextprotocol.io/docs/concepts/prompts).
* Added toggles to enable/disable MCPs in the Cascade header.
* MCPs can now be triggered by @ mentioning in Cascade
## Patch Fixes
* The shortcut to toggle between Write and Ask Mode now works correctly on Windows.
* Changing rules in settings now immediately reflects in the UI.
* Restored proper behavior for "Reject All Changes" and toggling Cascade (`Cmd/Ctrl + Shift + L`) when no files are open.
* New copy button lets you easily share your Cascade session trajectory.
* Various bug fixes and improvements.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements ✨
UI & Rendering
* Revamped the Cascade bar UI and added keyboard shortcut support.
* Fixed incorrect indentation from code blocks in terminal rendering
* Fixed nested lists not rendering on new line in terminal markdown
* Fixed content spacing issues
* Fixed streaming flashes
* Enhanced code block file path display to hide line numbers for whole files
* Improved citation and language parsing in code blocks with a more robust regex pattern
* Updated the UI for code block title bars to properly handle long paths with truncation
* Improved the auto-run command menu interface and its display logic
* Added loading indicators when thinking or during long running operations
## Patch Fixes
* Settings are now synced between Cascade & the Plugin.
* Fixed an issue where the workspace workflows are defaulted to `.codeium` directory.
* Fixed an issue where the workflow description is not persisted upon saving.
* General stability and performance improvements.
## Platform & Messaging
* Fixed rate limit error message to say "no credits were used" instead of "credits have been refunded".
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models ✨
## GPT 5.2
* GPT-5.2 is now available in Windsurf.
* This model will be available for 0x credits in Windsurf (to paid users) for a limited time.
GPT-5.2 represents the biggest leap for GPT models in agentic coding since GPT-5 and is a SOTA coding model in its price range. The version bump undersells the jump in intelligence. We\`re excited to make it the default across Windsurf and several core Devin workloads. - Jeff Wang, CEO of Windsurf
## Patch Fixes
* General Windsurf stability and performance improvements.
* Fixed issues with Cascade running commands that could not be cancelled during certain long-running processes
* Fixed an issue where Cascade cannot identify modules in workspaces.
* Fixed orphan language server processes even when the IDE is closed.
* Improved file search performance.
* Fixed Cascade hanging on Cascade reverts.
* Fixed diagnostics downloading while changing file names.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models ✨
## Claude Opus 4.5
* You can now use Claude Opus 4.5 in Windsurf!
* Opus 4.5 is the most capable model in Windsurf yet and is now available at Sonnet pricing for a limited time (2x credits compared to 20x for Opus 4.1).
* This model is available to all paid Windsurf subscribers.
## GPT-5.1 and GPT-5.1-Codex
* GPT-5.1 and GPT-5.1-Codex are now available in Windsurf.
* GPT-5.1 and GPT-5.1-Codex deliver a solid upgrade from GPT-5 for agentic coding workflows. They're noticeably better at understanding what you're asking for and working with you to get it done.
* The new variable thinking feature dynamically adjusts reasoning depth—providing quick responses for simple tasks and more thoughtful analysis when complexity demands it.
* Priority processing support for GPT-5.1 models, providing guaranteed low-latency responses for faster (\~50 tokens/sec), more reliable AI assistance.
* Priority processing costs 2x the standard rate, which will be reflected in the Windsurf credit system.
## Gemini 3.0
* You can now use Gemini 3 Pro (Low and High) in Windsurf!
## Features
* Cascade now displays a real-time context window usage meter in the footer, helping you monitor how much of your model's context window is being consumed during conversations.
## Patch Fixes
* Fixed the issues with Cascade Diff Views & Cascade bar.
* Fixed a bug where TAB wouldn't work in multiple files at the same time.
* Fixed Cascade UI inconsistencies.
* Resolved IDE Crashes during Cascade Diff.
* Fixed code indentation formatting issues in Cascade Diff.
* Fixed the Cascade shortcuts to toggle between Code & Chat mode.
* Fixed Cascade diff deletion inlays in empty files.
* Fixed a bug where the workflow description keeps disappearing despite being saved.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# SWE 1.5 + Fast Context Now Available in JetBrains ✨
## SWE 1.5
* Today we’re releasing SWE-1.5, our first fast agent model.
* It achieves near-SOTA coding performance while setting a new standard for speed.
* Link to announcement: [https://x.com/cognition/status/1983662836896448756](https://x.com/cognition/status/1983662836896448756)
## Fast Context - Introducing SWE-grep: Lightning-Fast Agentic Search!
* Fast Context is now available - you can trigger fast context via pressing Cmd + Enter when sending a prompt. For enterprise users, please make sure your organization has turned on Fast Context.
* We’ve trained a first-of-its-kind family of models: SWE-grep and SWE-grep-mini.
* Designed for fast agentic search (>2800 TPS), these models surface the right files to your coding agent 20x faster than before.
* Read the blog: [https://cognition.com/blog/swe-grep](https://cognition.com/blog/swe-grep)
## Improvements
* General UI improvements - font sizes in Cascade are more standardized, removed unnecessary close button from Cascade.
* "tool\_use ids were found without tool\_result" error is resolved.
* Fixed the CPU usage issue during downloading language server.
* Improved autocomplete suggestions.
## NOTE
* Also, note that in the upcoming release, we're planning to deprecate Inlay Hints (Explain, Refactor, etc. buttons on the editor).
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Resolved a bug where "No suggestions" box unnecessarily pops up.
* Resolved a bug where the plugin crashes due to an error message "Can't remove document listener".
* Bumped up the minimum required IntelliJ IDEA version to 2024.3.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Resolved a critical bug that incorrectly defaulted Cascade to the SWE-1 model.
* Suppressed "new suggestion" notifications for failed suggestions to reduce redundant alerts.
* Improved the reliability of accept and reject actions during network disruptions.
* Addressed a bug in the diff view that occurred with repeated accept/reject actions.
* Corrected a performance issue causing slowness when using the SWE-1 model.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models & Patch Fixes ✨
## Models
* Claude Sonnet 4.5 is now available!
* Claude Sonnet 4.5 will be 1x (Pro) and 3x (Enterprise) prompt credits.
* Claude Sonnet 4.5 Thinking will be 1.5x (Pro) and 4x (Enterprise) prompt credits.
* GPT-5-Codex is now available for free (0x credits) for a limited time for paid users.
* Free users can use GPT-5-Codex as well for 0.5x credits.
* Grok Code Fast 1 is available for Pro and Teams users.
## Improvements
* Users can now add follow-up messages to Cascade while it is working, and Cascade will process them in order after the current task is complete.
* Cascade now renders mermaid diagrams in the conversation.
## Patch Fixes
* Fixed multi line autocomplete regression for some users.
* Fixed UI issues in Rules panel.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Fixed proxy issues during Windsurf initialization.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Fixed inline autocomplete suggestions.
* Fixed Cascade shortcuts for start a new conversation, toggle write and chat mode, and close cascade panel.
* Fixed a regression in Inlay hints.
* Minor improvements and bug fixes.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & Bug Fixes
## Improvements
* Performance and quality improvements for autocomplete.
* New system with more frequent and smarter suggestions.
## Patch Fixes
* Fixed UI inconsistencies in the Windsurf settings panel.
* Fixed Unleash initialization issues causing plugin to fail to initialize.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Stability Improvements ✨
## Improvements
* All-new Chat, Cascade, and home screen panels.
* Over 100 bug fixes and reliability improvements.
* Automatic planning mode with no manual toggles required.
* Revamped tools with more accurate edits.
* Enhanced code exploration leveraging long context models.
## Patch Fixes
* Added support for SOCKS proxy for enterprise environments.
* Fixed memory leak issues with language server.
* Fixed IDE freezing issues when working with large projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Improved the diff handling in editor where the Accept/Reject buttons would not disappear after resolving a change.
* Added more logging to help debug issues. Please report any issues to [windsurf.com/support](https://windsurf.com/support).
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed discrepancies in Cascade Analytics for teams users.
* Fixed network issues related to proxy authentication.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Kimi K2 Available ✨
## Kimi K2
* Windsurf now supports Kimi K2 model which costs 0.5 credits per prompt.
## Patch Fixes
* Fixed Cascade turning into white/blank screen when coming back from sleep mode.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Planning Mode, Workflows & File Based Rules ✨
## Planning Mode
* Send messages to Cascade in Planning Mode, a setting that will let Cascade plan before making edits
* Cascade will create a plan.md file of the actions it plans to take before taking action
* The plan is user-editable, and Cascade will pick up on user changes
## Custom Workflows
* You can create “workflows”, saved prompts that Cascade can follow
* Workflows can be invoked via slash command
* Cascade can help create and edit workflows
* Local workflow files are saved in the workspace, under .windsurf/workflows
## File-Based Rules
* You can create granular rules files that are always on, @mention-able, requested by Cascade, or attached to file globs
* Rules files are saved in the workspace, under .windsurf/rules
## Voice
* Users can now speak into the chat rather than having to type things out.
## Cascade Turbo Mode
* Cascade has a revamped "Turbo Mode" that allows Cascade to auto-execute terminal commands, unless specified in deny-list
## @-mentioning conversations
* @-mention the previous conversation so Cascade has full context of it as it goes to write tests for you.
## Improvements
* Icons in @-mentions
* Theme-aware codeblocks with refreshed design
* Improvements to .codeiumignore
* New menu to open previous conversations to quickly switch conversations
## Patch Fixes
* Fixed external URL redirect during web tool call
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Cascade Turbo Mode ✨
## Cascade Turbo Mode
* Cascade has a revamped "Turbo Mode" that allows Cascade to auto-execute terminal commands, unless specified in deny-list
* Terminal commands auto-execution can be enabled/disabled in the Windsurf Settings panel.
## Custom Workspaces
* Individual & Teams users can now index additional workspaces by configuring them in Windsurf settings.
* Enterprise users can enable custom workspace indexing using a new checkbox in settings.
## Patch Fixes
* Fixed Command with Sonnet models.
* Fixed a bug where Cascade bar would sometimes overlap with other applications.
* Minor improvements and bug fixes
* Fixed API Pricing labels in the model selector
* Fixed bugs related to planning mode
* Fixed some behavior around conversation button dropdown
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed an issue where Cascade cannot detect the active workspace detection failed in proxy-enabled environments.
* Fixed a bug where in-editor diff decorations would not be correctly synced with Cascade after reverting to a past step.
* Improved diagnostic logging for better debugging.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Explain and Fix ✨
## Explain and Fix
* Added an Explain And Fix Problem button in error hover popup, and a shortcut (⌥/Alt + shift + ↵), which opens a new Cascade conversation instructing Cascade to explain and fix the problem.
* Toggle the setting "Explain and Fix in current conversation" to open the fix in the ongoing conversation.
## Patch Fixes
* Fixed focus and clipboard issues on Cascade in Android Studio.
* Improved error handling & IDE freezing issues when Windsurf command is run.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements ✨
## Improvements
* Windsurf Command now supports a model selection dropdown.
* Teams admins can select which models are available to their team.
* Improved Autocomplete key binding UI. You can now re-bind when hovered over the autocomplete.
## Patch Fixes
* You can now download Windsurf diagnostics directly from the Windsurf console or using the **Download Windsurf Diagnostics** action for easier troubleshooting.
* Improved Cascade panel focus: pressing ⌘/Ctrl + Shift + L now reliably focuses the panel.
* Added a **Detect Proxy** setting to enable automatic proxy detection for seamless connectivity.
* Windsurf settings panel has been redesigned to be more user-friendly and informative.
* Fixed a bug that caused plugin crashes when dragging and dropping files.
* Fixed a bug where the Accept/Reject buttons would not disappear after resolving a change.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed empty Cascade window & improved overall stability in Android Studio.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Cascade Enhancements & Android Studio Integration ✨
## Cascade Bar
* Introducing a new toolbar in Cascade to navigate diffs and accept/reject all changes.
* Adding the ability to check running Terminal commands and configure MCP.
## Android Studio Support (Beta)
* Fixing Cascade window issue that previously opened in browsers; it now opens directly within Android Studio IDE.
* Improving overall integration stability with Android Studio.
## Drag and Drop Files as Context
* Cascade now supports dragging and dropping files from the File Explorer directly into Cascade as context.
* Compatible with all system file types.
* Available across all subscription plans.
## Provide Authentication Token
* Adding support for manual authentication token entry in JetBrains IDEs.
* Accessible through Actions (Ctrl/Cmd + Shift + A), by typing "Provide Auth Token (Backup Login)" and hitting Enter, or via the Windsurf Widget at the bottom.
* Paste the token into the provided input box to authenticate.
## General Improvements
* Adding multi-modal (image) support to SWE-1.
* Past conversations now open in a pop-up instead of redirecting to the new conversation screen.
* Adding a "Reload Cascade" button to handle error scenarios conveniently.
## Patch Fixes
* Fixed auto-update functionality for Windows users. To enable auto-update, navigate to Settings > Update, and enable **Auto-update Windsurf**.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed checksum mismatch errors while downloading language server.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## BYOK (Anthropic Key)
* You can now bring your own API Key from Anthropic to use the Claude 4 Sonnet, Claude 4 Sonnet (Thinking), Claude 4 Opus, and Claude 4 Opus (Thinking) models in Cascade
* To use BYOK, go to [provide API keys](https://windsurf.com/subscription/provider-api-keys) and input your key
* Once entered, go back to Windsurf and reload the window. You should now be able to use the new models
* This is only available for Free and Pro users at this time
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Family of SWE-1 Models
Today, we are launching our first family of models, dubbed SWE-1, optimized for the entire software engineering process, not just the task of coding. Please see our [SWE-1 page](https://swe-1.com/) for more details.
## SWE-1
* New SWE-1 Model made by Windsurf is available in Cascade.
* SWE-1 is a new model with frontier model-level capabilities.
* Free for a limited time for Pro Users.
## SWE-1-Lite
* SWE-1-Lite is a new, far more capable model replacing Cascade Base.
* Free to use for all plans and tiers.
## Features
* Enterprise users now have ability to add custom workspaces in Windsurf settings.
* Opening conversations will now open the associated workspace.
* Focus will now shift to Cascade when ⌘/ctrl + shift + L is used to open a conversation.
## Patch Fixes
* Fixed file cache conflicts during Cascade edits.
* Fixed a bug where Windsurf would create temp files.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# MCP, Memories & Rules Launch 🚀
# Introducing MCP, Memories & Rules
Unlock limitless possibilities with Model Context Protocol (MCP), empowering LLMs to seamlessly integrate with custom tools and services for enhanced productivity and innovation. Memories can be manually or automatically defined, and are persisted as context to better align the Cascade's outputs with the user's preferences.
## Model Context Protocol (MCP)
* Cascade now supports Model Context Protocol (MCP).
* You can setup your conversation to make tool calls to user-configured MCP servers.
* A list of common MCP servers can be found in the Windsurf settings
* Every MCP tool call costs one flow action credit, regardless of the execution result.
## Cascade Memories & Rules
* You can configure rules for Cascade Memories to follow. For example, you can use rules to specify if you want Cascade to respond in a certain language, communicate in a specific style, or use a specific API.
* Memories & Rules can be found & configured by clicking "Customizations" icon on the Cascade panel.
* Global rules are rules that will be applied to Cascade in all workspaces.
* Workspace rules are rules that will be applied to Cascade in the current workspace.
* Memories do not cost any flow action credits to generate.
## Auto-Generated Memories
* Cascade can automatically generate memories to retain context between conversations.
* You can prompt Cascade to create a memory at any time if you want it to remember key context.
# New Teams Features
## Teams: Windsurf Reviews
* Team admins can install a Github app for code review and PR title/description edits.
* Available to Teams and Enterprise SAAS for 500 reviews/month.
## Teams Analytics
* Teams users get a refreshed analytics dashboard for their team.
* Includes new Cascade analytics such as messages sent, total tool calls, model usage, and more.
# Patch Fixes
## Fixes
* Added enable/disable autocomplete option in the widget and settings.
* Fixed Autocomplete failures & Windsurf connection issues.
* Fixed crashes around workspace conversation.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Fixes
* Fixed a critical bug causing Autocomplete to fail on Windows platforms.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models & Patch Fixes
## Models
* Cascade now has new premium models available: o3 (medium reasoning) and o3 (high reasoning).
* Medium reasoning will be 7.5x prompt credits & high reasoning will be 10x.
## Model Selection
* Added the ability to search available models in Cascade's model selection window.
## Fixes
* Resolved freezing issues when running Command on very large files.
* Fixed display of the Windsurf Console icon in the Tool Window.
* Corrected the reporting of autocomplete usage statistics in Windsurf analytics.
* Reduced errors for edit tool calls for Windows.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models & Upgraded Free Tier
## New App Icon
* Windsurf now has a new app icon!
* windsurf.com has been updated with the new wordmark.
## Models
* Cascade now has new premium models available: o4-mini-medium and o4-mini-high.
* GPT-4.1 and o4-mini will be .25x prompt credits moving forward - o4-mini (high) will be .5x.
* *Currently experiencing high-demand and working to increase capacity*.
## Upgraded Free Tier
* Free tier now has new, higher limits
* Ability to use Cascade in write mode
* Cascade prompt credits: 5 to 25 Cascade prompt credits per month
* Unlimited Cascade Base
## Patch Fixes
* Resolved workspace detection issues in Bazel projects.
* Matched Cascade code block theme with the IDE theme for visual consistency.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Windsurf Pre-release 🪄
Get early access to our latest features before they hit the stable release! While there might be some rough edges, you'll be at the forefront of exploring what's possible with AI in software development.
## How to switch to Pre-release version
* Go to Windsurf settings and enable the **Switch to Pre-release** checkbox.
* Alternatively, open the Windsurf widget from the toolbar at bottom and click **Switch to Pre-Release Version**.
## New Features
* Introduced Pre-release changelogs.
* Added support for accessing .gitignore files via Cascade.
## Patch Fixes
* Fixed repeated Cascade Zoom notifications for some users.
* Fixed an issue where the onboarding popup would not close as expected.
* Resolved a rare bug causing the diff views to freeze when clicking Accept or Reject in the changes overview.
* Fixed an issue where the toolbar would open automatically on every startup.
* Improved Windsurf Terminal compatibility for multi-projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Updated & Simplified Pricing
## We're getting rid of Flow Action Credits
* We're simplifying our pricing model by removing Flow Action Credits
* Change takes effect April 21st, 2025
* Plans now come with prompt credits with add-on credits available for purchase
## User Prompt Credits
* Plans now come with prompt credits, which are consumed per every message sent and not via every tool call
* Add-on credits are available for purchase
* Auto-top off (with max limits) can be enabled via profile
## Existing Plans
* Existing plans are migrating over to the new pricing model
* For more information, please visit the Pricing page
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## New Keybinding
* ⌘/ctrl + shift + L open new conversation in Cascade. It also copies selected editor text to new conversation.
## Note
* ⌘ + Shift + L may conflict with macOS system shortcut. Resolve by disabling "Search with Google" in System Settings → Keyboard → Keyboard Shortcuts → Services.
## Fixes
* Added custom Cascade zoom level setting to address HiDPI scaling issues.
* Resolved conflicts with the cmd+option+v keyboard shortcut.
* Fixed issues with opening files and terminals when working on multiple projects.
* Bug fixes and stability improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Stability Improvements
## IDE Freezing Issues
* Fixed freezing issues when working with multiple projects.
* Fixed crashes caused by unclosed channels during startup and shutdown.
### Note
* Users experiencing freezing issues on v1.42.8 should forcefully terminate the language server process from Activity Monitor (macOS) or Task Manager (Windows).
## Patch Fixes
* Fixed Cascade issues in WSL environments.
* Fixed workspace detection issues where Cascade could not detect the current environment.
* Fixed Explain Button functionality.
## Feedback
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Cascade on JetBrains Launch 🚀
# Introducing the flow evolution of Chat: Cascade
Cascade's agentic capabilities unlock a new level of collaboration between AI and human, making it the ultimate partner for complex coding workflows.
## Write & Chat Mode
* Write mode: Enables Cascade to create and modify codebases.
* Chat mode: Optimized for codebase questions and general coding principles.
## Model Selection
* Added support for new models including Claude 3.7 Thinking, GPT-4.5, Deepseek V3 and more.
## Access to Tools
* Added multiple tool integrations including Search, Analyze, Web Search, and Terminal access
* Added image upload support for premium models.
## Revert to previous steps
* Ability to revert edits that Cascade has created at any point in the conversation.
* Hover over the original message and click on the revert arrow on the right or revert from the table of contents.
## Contextual Awareness
* Contextual awareness capabilities that track IDE state changes in real-time.
* Reduced need for explicit context prompting due to improved awareness.
## Teams Admin Controls
* For teams and enterprise plans, admins can select which models are available to its team.
* As a member of a team, you will only see the models that are available to your team unless enabled by your admin.
* Admins can find these controls at [https://codeium.com/team/windsurf\_settings](https://codeium.com/team/windsurf_settings) under "Extension Models".
# Usage Transparency
* Added credit usage display for Cascade actions
* Updated usage pricing system for Windsurf Plugin. See pricing for details
* Credit usage can be monitored via the Plan Info tab in the Windsurf widget on the bottom toolbar.
# Codeium is Now Windsurf
* We are renaming our company to Windsurf & our extension product to **Windsurf Plugin**.
* Since the launch of our Windsurf Editor, we have captured what we are really building: combining human ingenuity and machine to result in experiences that feel and appear effortlessly powerful.
# What's New with **Codeium v1.38 🚀**
## Bug Fixes
* Performance improvement on large repositories.
* Indexing Performance Boosts.
# What's New with **Codeium v1.36 🚀**
## Bug Fixes
* Performance improvement on large repositories.
* Improved stability across network disconnections.
* Fixed changelog redirect page.
* Improved extension logging.
# What's New with **Codeium v1.30 🚀**
## JetBrains Pre-Release 🪄
We're excited to introduce the Pre-Release Channel for JetBrains! Get early access to upcoming features and help shape the future of Codeium.
* Switch between stable and pre-release versions
* Test new features before they're officially released.
* Provide valuable feedback for improvements.
## Bug Fixes
* Disabled Codeium functionality in Python Debugger Console.
* Fixed Download Diagnostic button in chat client.
# JetBrains-specific updates
* Added Codeium action group to Tools menu
* Added "Codeium"/"Codeium Teams" at bottom right corner
* Disabled inline shortcut hint when conflicting with vim plugin
* Added refresh chat client action to Tools menu
* Added manual autocomplete trigger
* Improved recognition for IDE-unrecognized languages
* Add re-signin instructions when API key is invalid
# Enterprise & technical updates
* Added enterprise Grafana dashboard panels for index service tracking
* Fixed project closure/reopening bug in JetBrains command
* Converted reads from subscriptions to users
* Added dev mode and teams mode to unleash in VSCode
* Fixed analytics API typo and PCW calculation error
* OCaml interface and OCaml files now deemed relevant to each other
* Allow specifying chat-related ports in LS
* Emacs and Vim extensions on enterprise no longer need specific tag checkout
* Vim extension in enterprise-mode automatically downloads enterprise language server
* Automatic deletion of corrupt SQLite databases in language server
* Fixed batch deletion button in indexing UI
* Enhanced telemetry batching
* New model image handling and inference server updates for Kubernetes deployments
# Codeium Command UX Upgrade
Codeium Command got a major renovation.
The most salient features are:
* **Persistent experience**: Opening Command now instantiates a popup that lives near the relevant code until you dismiss it, instead of dissipating when you click away.
* **Follow-up support**: You can now append instructions to your initial one and rerun the new command on the original code.
* **Hotkeys**: Escaping, submitting commands, undoing or canceling commands, toggling focus between the popup and the editor, and accepting commands can all be carried out from the keyboard.
* **Block undo**: `Ctrl+z` or `⌘+z` while in the editor after a Command output will undo Command's entire change. You can also `Ctrl⌫` or `⌘⌫` for the same effect while rehighlighting the original text and popping the latest instruction so that it's ready for a different command.
# Chat Context Upgrade
Our latest update supercharges your chat experience with a suite of new actions:
* **Copy to clipboard**: Easily copy messages with a single click.
* **Rerun with context**: Rerun messages including relevant code from your project for improved responses.
* **Retry Button**: Quickly retry messages that encountered errors.
* **Stats for nerds**: Peek behind the scenes with detailed stats on what's happening under the hood.
* **`/explain` command**: Get detailed explanations for functions, classes, and parts of your code right within the chat.
* **`@mention` files and directories:** Easily reference files and directories in your code.
* **Inline context item pinning:** Pin important context items for quick access.
We've also engineered the Chat input text editor to be significantly faster and more responsive.
# Nudge
Highlighting a section of code now conveniently opens a small popup tool that lets you directly ask about the code in Chat or run a Command on it.
The nudge can be disabled in your Codeium Settings.
# Codeium Command
Command gives developers the ability to instruct the AI to perform tasks within the editor.
Just open the command prompt (`Ctrl+I` or `⌘+I` for Mac), enter a command, and watch Codeium code for you!
And even more powerful is providing in-line instructions on existing blocks of code in order to perform direct transformations. A simple one would be to just add comments to your code:
# Guidelines For Chat
Enhance your chat experience with custom context!
In the chat panel, you now have the option to provide your own short snippets of context for the AI.
# Changelog (Pre-release)
Source: https://docs.devin.ai/windsurf/plugins/changelog-next
Release notes for the Windsurf JetBrains plugin pre-release builds.
# Bug Fixes & Improvements
* Various bug fixes and improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [devin.ai/support](https://devin.ai/support).
# Bug Fixes & Improvements
* Various bug fixes and improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [devin.ai/support](https://devin.ai/support).
# Bug Fixes & Improvements
* Various bug fixes and improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed Cascade chat input not receiving keyboard focus when opening Cascade via the `Ctrl+Shift+L` shortcut or the status bar toggle
* Fixed an IDE internal error popup that could occur after Cascade edited a file
* Fixed the edit count in the diff bar not updating immediately when accepting or rejecting Cascade edits one-by-one
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
* Various bug fixes and improvements
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed an issue with reverting Cascade edits
* Fixed a code editing bug with files using Windows-style line endings
* Fixed inaccurate lines-of-code statistics in the Cascade toolbar
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed OAuth authentication issues for some MCP servers
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Improved text rendering in the Cascade diff viewer
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed shell commands not running correctly when using a WSL terminal on Windows
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed a crash caused by the Cascade bar
* Fixed code diffs being lost when closing and reopening a conversation
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Improvements
* File attachments can now be dragged and dropped onto Cascade as context (not just images)
## Bug Fixes
* Improved IDE responsiveness by caching feature flag lookups, reducing unnecessary network calls during UI interactions
* Improved Cascade chat rendering performance and reduced unnecessary re-renders
* Fixed message fade flicker when sending messages in Cascade
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Bug Fixes
* Fixed a crash that could occur when creating or deleting files during a Cascade session
* Fix crash on Apple M5
## Improvements
* Improved system stability and compatibility
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes
* Fixed light mode hover contrast for "Accept all" button in Cascade window
* Fixed keyboard shortcuts not working correctly on Linux
* Fixed Cascade diff actions not hiding when IDE window loses focus
* Fixed Cascade going blank after "Add folder to workspace" transition
* Fixed Cascade being inaccessible while the IDE is loading or indexing a project
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models
## GPT-5.4
GPT-5.4 is now available in Windsurf with limited-time promotional pricing for self-serve users:
* **No Reasoning:** 1x credits
* **Low Reasoning:** 1x credits
* **Medium Reasoning:** 2x credits
* **High Reasoning:** 3x credits
* **Extra High Reasoning:** 8x credits
## Bug Fixes
* Fixed an issue where tab completions could fail for some users
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Improvements
* Respect IntelliJ configured shell path in terminal shell support checks
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes & Improvements
## Improvements
* Improved Cascade startup performance
* Improved diff button colors to better match IDE theme
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Gemini 3.1 Pro
Gemini 3.1 Pro is now available in Windsurf with limited-time promotional pricing for self-serve users:
* Low Thinking: 0.5x credits
* High Thinking: 1x credits
# Codex 5.3
* Added support for GPT-5.3-Codex with four reasoning efforts (low, medium, high, and xhigh).
* GPT-5.3-Codex is OpenAI's latest model designed for agentic coding.
## Patch Fixes
* Reduced the priority of Git commits in @ mention search
* Fixed Plugin crashes & IDE slowness during initialization
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Claude Opus 4.6 (fast mode)
Claude Opus 4.6 (fast mode) is now available in Windsurf in research preview with limited-time promotional pricing for self-serve users until Feb 16:
* **No thinking:** 10x credits
* **With thinking:** 12x credits
Opus 4.6 (fast mode) has the same intelligence as Opus 4.6 but with up to 2.5x higher output speeds.
## Claude Opus 4.6
Claude Opus 4.6 is now available in Windsurf with limited-time promotional pricing for self-serve users:
* **No thinking:** 2x credits
* **With thinking:** 3x credits
## Patch Fixes
* Fixed Windows shortcuts on switching between code & chat mode.
* Fixed IDE freezing when downloading diagnostics data.
* Fixed an issue where the language server used excessive CPU resources on large projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Bug Fixes
## Bug Fixes
* Fixed Cascade crash on Windows caused by "site can't be reached" connection errors.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## GPT-5.2-Codex
* Adds support for GPT-5.2-Codex with four reasoning efforts (low, medium, high, and xhigh).
* GPT-5.2-Codex is OpenAI's latest model designed for agentic coding.
* It excels at working in large codebases over long sessions.
* For most tasks, we recommend using the medium reasoning effort.
## Agent Skills
* Windsurf now supports [Agent Skills](https://docs.windsurf.com/windsurf/cascade/skills) for Cascade.
## Patch Fixes
* Fixed Cascade panel occasionally going blank during idle periods.
* Fixed language server process not terminating when IDE is closed.
* Fixed keyboard shortcuts on Rider.
* Added [`post_setup_worktree`](https://docs.windsurf.com/windsurf/cascade/worktrees#setup-hook) hook for initializing worktrees in Cascade
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & New Models ✨
## Gemini 3 Flash
Gemini 3 Flash is now available for all users. This model combines Gemini 3 Pro-grade reasoning with Flash-level speed and efficiency, making it ideal for agentic workflows and coding tasks.
* **Blazing Fast Responses**: Experience near-instant feedback with 3x faster performance than previous generations, perfect for iterative development compared to Gemini 3 Pro
* **Superior Coding Intelligence**: Outperforms even Pro-tier models on key coding benchmarks (78% on SWE-bench Verified), providing more accurate code generation and debugging
* **Deep Multimodal Understanding**: Easily process complex video, data extraction, and visual Q\&A tasks with frontier-level reasoning
## Multi-Cascade Panes & Tabs
* You can already run multiple Cascade sessions in Windsurf at the same time. Now, you can view and interact with them in separate panes and tabs within the same window.
* This lets you monitor progress and compare outputs of sessions side-by-side.
## Context Window Indicator
* When a model's context window grows too long, earlier context can be dropped without warning and performance can degrade.
* Cascade already extends the window by occasionally summarizing messages and clearing history.
* This release adds a visual indicator to see how much of your context window is currently in use, helping you anticipate limits and decide when to start a new session.
## Model Context Protocol
* Added support for [MCP prompts](https://modelcontextprotocol.io/docs/concepts/prompts).
* Added toggles to enable/disable MCPs in the Cascade header.
* MCPs can now be triggered by @ mentioning in Cascade
## Patch Fixes
* The shortcut to toggle between Write and Ask Mode now works correctly on Windows.
* Changing rules in settings now immediately reflects in the UI.
* Restored proper behavior for "Reject All Changes" and toggling Cascade (`Cmd/Ctrl + Shift + L`) when no files are open.
* New copy button lets you easily share your Cascade session trajectory.
* Various bug fixes and improvements.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements ✨
UI & Rendering
* Revamped the Cascade bar UI and added keyboard shortcut support.
* Fixed incorrect indentation from code blocks in terminal rendering
* Fixed nested lists not rendering on new line in terminal markdown
* Fixed content spacing issues
* Fixed streaming flashes
* Enhanced code block file path display to hide line numbers for whole files
* Improved citation and language parsing in code blocks with a more robust regex pattern
* Updated the UI for code block title bars to properly handle long paths with truncation
* Improved the auto-run command menu interface and its display logic
* Added loading indicators when thinking or during long running operations
## Patch Fixes
* Settings are now synced between Cascade & the Plugin.
* Fixed an issue where the workspace workflows are defaulted to `.codeium` directory.
* Fixed an issue where the workflow description is not persisted upon saving.
* General stability and performance improvements.
## Platform & Messaging
* Fixed rate limit error message to say "no credits were used" instead of "credits have been refunded".
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models ✨
## GPT 5.2
* GPT-5.2 is now available in Windsurf.
* This model will be available for 0x credits in Windsurf (to paid users) for a limited time.
GPT-5.2 represents the biggest leap for GPT models in agentic coding since GPT-5 and is a SOTA coding model in its price range. The version bump undersells the jump in intelligence. We\`re excited to make it the default across Windsurf and several core Devin workloads. - Jeff Wang, CEO of Windsurf
## Patch Fixes
* General Windsurf stability and performance improvements.
* Fixed issues with Cascade running commands that could not be cancelled during certain long-running processes
* Fixed an issue where Cascade cannot identify modules in workspaces.
* Fixed orphan language server processes even when the IDE is closed.
* Improved file search performance.
* Fixed Cascade hanging on Cascade reverts.
* Fixed diagnostics downloading while changing file names.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Features
* Cascade now displays a real-time context window usage meter in the footer, helping you monitor how much of your model's context window is being consumed during conversations.
## Patch Fixes
* Resolved IDE Crashes during Cascade Diff.
* Fixed code indentation formatting issues in Cascade Diff.
* Fixed the Cascade shortcuts to toggle between Code & Chat mode.
* Fixed Cascade diff deletion inlays in empty files.
* Fixed a bug where the workflow description keeps disappearing despite being saved.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models ✨
## Claude Opus 4.5
* You can now use Claude Opus 4.5 in Windsurf!
* Opus 4.5 is the most capable model in Windsurf yet and is now available at Sonnet pricing for a limited time (2x credits compared to 20x for Opus 4.1).
* This model is available to all paid Windsurf subscribers.
## GPT-5.1 and GPT-5.1-Codex
* GPT-5.1 and GPT-5.1-Codex are now available in Windsurf.
* GPT-5.1 and GPT-5.1-Codex deliver a solid upgrade from GPT-5 for agentic coding workflows. They're noticeably better at understanding what you're asking for and working with you to get it done.
* The new variable thinking feature dynamically adjusts reasoning depth—providing quick responses for simple tasks and more thoughtful analysis when complexity demands it.
* Priority processing support for GPT-5.1 models, providing guaranteed low-latency responses for faster (\~50 tokens/sec), more reliable AI assistance.
* Priority processing costs 2x the standard rate, which will be reflected in the Windsurf credit system.
## Gemini 3.0
* You can now use Gemini 3 Pro (Low and High) in Windsurf!
## Features
* Improved the overall TAB experience with the new models.
* Users can turn on SuperComplete & Tab To Jump in the settings.
* Link for reference: [https://windsurf.com/tab](https://windsurf.com/tab)
## Patch Fixes
* Fixed the issues with Cascade Diff Views & Cascade bar.
* Fixed a bug where TAB wouldn't work in multiple files at the same time.
* Fixed Cascade UI inconsistencies.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# SWE 1.5 + Fast Context Now Available in JetBrains ✨
## SWE 1.5
* Today we’re releasing SWE-1.5, our first fast agent model.
* It achieves near-SOTA coding performance while setting a new standard for speed.
* Link to announcement: [https://x.com/cognition/status/1983662836896448756](https://x.com/cognition/status/1983662836896448756)
## Fast Context - Introducing SWE-grep: Lightning-Fast Agentic Search!
* Fast Context is now available - you can trigger fast context via pressing Cmd + Enter when sending a prompt. For enterprise users, please make sure your organization has turned on Fast Context.
* We’ve trained a first-of-its-kind family of models: SWE-grep and SWE-grep-mini.
* Designed for fast agentic search (>2800 TPS), these models surface the right files to your coding agent 20x faster than before.
* Read the blog: [https://cognition.com/blog/swe-grep](https://cognition.com/blog/swe-grep)
## Improvements
* General UI improvements - font sizes in Cascade are more standardized, removed unnecessary close button from Cascade.
* "tool\_use ids were found without tool\_result" error is resolved.
* Fixed the CPU usage issue during downloading language server.
* Improved autocomplete suggestions.
## NOTE
* Also, note that in the upcoming release, we're planning to deprecate Inlay Hints (Explain, Refactor, etc. buttons on the editor).
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Resolved a bug where "No suggestions" box unnecessarily pops up.
* Resolved a bug where the plugin crashes due to an error message "Can't remove document listener".
* Bumped up the minimum required IntelliJ IDEA version to 2024.3.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Resolved a critical bug that incorrectly defaulted Cascade to the SWE-1 model.
* Suppressed "new suggestion" notifications for failed suggestions to reduce redundant alerts.
* Improved the reliability of accept and reject actions during network disruptions.
* Addressed a bug in the diff view that occurred with repeated accept/reject actions.
* Corrected a performance issue causing slowness when using the SWE-1 model.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Windsurf Tab
## New Windsurf Tab Experience
* Rolled up Autocomplete, Supercomplete, Tab to Jump into one experience called Windsurf Tab.
* Windsurf Tab runs a larger and higher quality model, increasing contextual awareness, quality, and speed.
## Context Improvements
* Completions now use more signals including recently viewed files, terminal commands and outputs, Cascade conversations
* Expanded context length, including more signals to improve completions
## Quality Improvements
* Increased precision choosing between Autocompletes (insertions) and Super-completes.
* Improved indenting and spacing for next-line suggestions.
## Speed Improvements
* Added more Additional context signals for Windsurf Tab.
* Added predictive triggers, leading to consecutive completions after your previous completion or tab to jump.
## Patch Fixes
* Fix MCP loading issue in Windsurf settings.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models & Patch Fixes ✨
## Models
* Claude Sonnet 4.5 & 4.5 Thinking is now available.
* Claude 4.5 will be 1x prompt credits and 4.5 Thinking will be 1.5x prompt credits.
* GPT-5-Codex is now available for free (0x credits) for a limited time for paid users.
* Free users can use GPT-5-Codex as well for 0.5x credits.
* Grok Code Fast 1 is available for Pro and Teams users.
## Improvements
* Users can now add follow-up messages to Cascade while it is working, and Cascade will process them in order after the current task is complete.
* Cascade now renders mermaid diagrams in the conversation.
## Patch Fixes
* Fixed multi line autocomplete regression for some users.
* Fixed UI issues in Rules panel.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Fixed inline autocomplete suggestions.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Patch Fixes
* Fixed Cascade shortcuts for start a new conversation, toggle write and chat mode, and close cascade panel.
* Fixed a regression in Inlay hints.
* Minor improvements and bug fixes.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements & Bug Fixes
## Improvements
* Performance and quality improvements for autocomplete.
* New system with more frequent and smarter suggestions.
## Patch Fixes
* Fixed UI inconsistencies in the Windsurf settings panel.
* Fixed Unleash initialization issues causing plugin to fail to initialize.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Stability Improvements ✨
## Improvements
* All-new Chat, Cascade, and home screen panels.
* Over 100 bug fixes and reliability improvements.
* Automatic planning mode with no manual toggles required.
* Revamped tools with more accurate edits.
* Enhanced code exploration leveraging long context models.
## Patch Fixes
* Added support for SOCKS proxy for enterprise environments.
* Fixed memory leak issues with language server.
* Fixed IDE freezing issues when working with large projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Improved the diff handling in editor where the Accept/Reject buttons would not disappear after resolving a change.
* Added more logging to help debug issues. Please report any issues to [windsurf.com/support](https://windsurf.com/support).
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed discrepancies in Cascade Analytics for teams users.
* Fixed network issues related to proxy authentication.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Kimi K2 Available ✨
## Kimi K2
* Windsurf now supports Kimi K2 model which costs 0.5 credits per prompt.
## Patch Fixes
* Fixed Cascade turning into white/blank screen when coming back from sleep mode.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Planning Mode ✨
## Planning Mode
* Send messages to Cascade in Planning Mode, a setting that will let Cascade plan before making edits
* Cascade will create a plan.md file of the actions it plans to take before taking action
* The plan is user-editable, and Cascade will pick up on user changes
## Custom Workflows
* You can create “workflows”, saved prompts that Cascade can follow
* Workflows can be invoked via slash command
* Cascade can help create and edit workflows
* Local workflowfiles are saved in the workspace, under .windsurf/workflows
## File-Based Rules
* You can create granular rules files that are always on, @mention-able, requested by Cascade, or attached to file globs
* Rules files are saved in the workspace, under .windsurf/rules
## Voice
* Users can now speak into the chat rather than having to type things out.
## Cascade Turbo Mode
* Cascade has a revamped "Turbo Mode" that allows Cascade to auto-execute terminal commands, unless specified in deny-list
## @-mentioning conversations
* @-mention the previous conversation so Cascade has full context of it as it goes to write tests for you.
## Improvements
* Icons in @-mentions
* Theme-aware codeblocks with refreshed design
* Improvements to .codeiumignore
* New menu to open previous conversations to quickly switch conversations
## Patch Fixes
* Fixed external URL redirect during web tool call
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Cascade Turbo Mode ✨
## Cascade Turbo Mode
* Cascade has a revamped "Turbo Mode" that allows Cascade to auto-execute terminal commands, unless specified in deny-list
* Terminal commands auto-execution can be enabled/disabled in the Windsurf Settings panel.
## Custom Workspaces
* Individual & Teams users can now index additional workspaces by configuring them in Windsurf settings.
* Enterprise users can enable custom workspace indexing using a new checkbox in settings.
## Patch Fixes
* Fixed Command with Sonnet models.
* Fixed a bug where Cascade bar would sometimes overlap with other applications.
* Minor improvements and bug fixes
* Fixed API Pricing labels in the model selector
* Fixed bugs related to planning mode
* Fixed some behavior around conversation button dropdown
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed a bug where in-editor diff decorations would not be correctly synced with Cascade after reverting to a past step.
* Improved diagnostic logging for better debugging.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed more bugs where Cascade failed to detect workspace for enterprise environments.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed a bug where Cascade failed to detect current workspace in environments using proxy.
* Cascade now automatically detects proxy when the Detect Proxy is enabled in Windsurf settings.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Explain and Fix ✨
## Explain and Fix
* Added an Explain And Fix Problem button in error hover popup, and a shortcut (⌥/Alt + shift + ↵), which opens a new Cascade conversation instructing Cascade to explain and fix the problem.
* Toggle the setting "Explain and Fix in current conversation" to open the fix in the ongoing conversation.
## Patch Fixes
* Fixed focus and clipboard issues on Cascade in Android Studio.
* Improved error handling & IDE freezing issues when Windsurf command is run.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Product Improvements ✨
## Improvements
* Windsurf Command now supports a model selection dropdown.
* Teams admins can select which models are available to their team.
* Improved Autocomplete key binding UI. You can now re-bind when hovered over the autocomplete.
## Patch Fixes
* Fixed a bug where the Accept/Reject buttons would not disappear after resolving a change.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* You can now download Windsurf diagnostics directly from the Windsurf console or using the **Download Windsurf Diagnostics** action for easier troubleshooting.
* Improved Cascade panel focus: pressing ⌘/Ctrl + Shift + L now reliably focuses the panel.
* Added a **Detect Proxy** setting to enable automatic proxy detection for seamless connectivity.
* Windsurf settings panel has been redesigned to be more user-friendly and informative.
* Fixed a bug that caused plugin crashes when dragging and dropping files.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed empty Cascade window & improved overall stability in Android Studio.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed empty Cascade window in Android Studio.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Cascade Enhancements & Android Studio Integration ✨
## Cascade Bar
* Introducing a new toolbar in Cascade to navigate diffs and accept/reject all changes.
* Adding the ability to check running Terminal commands and configure MCP.
## Android Studio Support (Beta)
* Fixing Cascade window issue that previously opened in browsers; it now opens directly within Android Studio IDE.
* Improving overall integration stability with Android Studio.
## Drag and Drop Files as Context
* Cascade now supports dragging and dropping files from the File Explorer directly into Cascade as context.
* Compatible with all system file types.
* Available across all subscription plans.
## Provide Authentication Token
* Adding support for manual authentication token entry in JetBrains IDEs.
* Accessible through Actions (Ctrl/Cmd + Shift + A), by typing "Provide Auth Token (Backup Login)" and hitting Enter, or via the Windsurf Widget at the bottom.
* Paste the token into the provided input box to authenticate.
## General Improvements
* Adding multi-modal (image) support to SWE-1.
* Past conversations now open in a pop-up instead of redirecting to the new conversation screen.
* Adding a "Reload Cascade" button to handle error scenarios conveniently.
## Patch Fixes
* Fixed auto-update functionality for Windows users. To enable auto-update, navigate to Settings > Update, and enable **Auto-update Windsurf**.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## Patch Fixes
* Fixed checksum mismatch errors while downloading language server.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
## BYOK (Anthropic Key)
* You can now bring your own API Key from Anthropic to use the Claude 4 Sonnet, Claude 4 Sonnet (Thinking), Claude 4 Opus, and Claude 4 Opus (Thinking) models in Cascade
* To use BYOK, go to [provide API keys](https://windsurf.com/subscription/provider-api-keys) and input your key
* Once entered, go back to Windsurf and reload the window. You should now be able to use the new models
* This is only available for Free and Pro users at this time
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Family of SWE-1 Models
Today, we are launching our first family of models, dubbed SWE-1, optimized for the entire software engineering process, not just the task of coding. Please see our [SWE-1 page](https://swe-1.com/) for more details.
## SWE-1
* New SWE-1 Model made by Windsurf is available in Cascade.
* SWE-1 is a new model with frontier model-level capabilities.
* Free for a limited time for Pro Users.
## SWE-1-Lite
* SWE-1-Lite is a new, far more capable model replacing Cascade Base.
* Free to use for all plans and tiers.
## Features
* Enterprise users now have ability to add custom workspaces in Windsurf settings.
* Opening conversations will now open the associated workspace.
* Focus will now shift to Cascade when ⌘/ctrl + shift + L is used to open a conversation.
## Patch Fixes
* Fixed file cache conflicts during Cascade edits.
* Fixed a bug where Windsurf would create temp files.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Blazing Fast Autocomplete ⚡
## Autocomplete Improvements
* Blazing fast Autocomplete, with fast mode.
* Autocomplete speed can be adjusted in the settings.
## Fixes
* Fixed freezing issues with Accept/Reject buttons.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# MCP, Memories & Rules Launch 🚀
# Introducing MCP, Memories & Rules
Unlock limitless possibilities with Model Context Protocol (MCP), empowering LLMs to seamlessly integrate with custom tools and services for enhanced productivity and innovation. Memories can be manually or automatically defined, and are persisted as context to better align the Cascade's outputs with the user's preferences.
## Model Context Protocol (MCP)
* Cascade now supports Model Context Protocol (MCP).
* You can setup your conversation to make tool calls to user-configured MCP servers.
* A list of common MCP servers can be found in the Windsurf settings.
* Every MCP tool call costs one flow action credit, regardless of the execution result.
## Cascade Memories & Rules
* You can configure rules for Cascade Memories to follow. For example, you can use rules to specify if you want Cascade to respond in a certain language, communicate in a specific style, or use a specific API.
* Memories & Rules can be found & configured by clicking "Customizations" icon on the Cascade panel.
* Global rules are rules that will be applied to Cascade in all workspaces.
* Workspace rules are rules that will be applied to Cascade in the current workspace.
* Memories do not cost any flow action credits to generate.
## Auto-Generated Memories
* Cascade can automatically generate memories to retain context between conversations.
* You can prompt Cascade to create a memory at any time if you want it to remember key context.
# New Teams Features
## Teams: Windsurf Reviews
* Team admins can install a Github app for code review and PR title/description edits.
* Available to Teams and Enterprise SAAS for 500 reviews/month.
## Teams Analytics
* Teams users get a refreshed analytics dashboard for their team.
* Includes new Cascade analytics such as messages sent, total tool calls, model usage, and more.
# Patch Fixes
## Fixes
* Added enable/disable autocomplete option in the widget and settings.
* Fixed Autocomplete failures & Windsurf connection issues.
* Fixed crashes around workspace conversation.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Fixes
* Fixed a critical bug causing Autocomplete to fail on Windows platforms.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Models & Patch Fixes
## Models
* Cascade now has new premium models available: o3 (medium reasoning) and o3 (high reasoning).
* Medium reasoning will be 7.5x prompt credits & high reasoning will be 10x.
## Context Improvements
* Completions now use more signals including recently viewed files and Cascade conversations.
## Fixes
* Command functionality now works correctly in `.groovy` files.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Model Selection
* Added the ability to search available models in Cascade's model selection window.
## Fixes
* Reduced errors for edit tool calls for Windows.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Fixes
* Resolved freezing issues when running Command on very large files.
* Fixed display of the Windsurf Console icon in the Tool Window.
* Corrected the reporting of autocomplete usage statistics in Windsurf analytics.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# New Models & Upgraded Free Tier
## New App Icon
* Windsurf now has a new app icon!
* windsurf.com has been updated with the new wordmark.
## Models
* Cascade now has new premium models available: o4-mini-medium and o4-mini-high.
* GPT-4.1 and o4-mini will be .25x prompt credits moving forward - o4-mini (high) will be .5x.
* *Currently experiencing high-demand and working to increase capacity*.
## Upgraded Free Tier
* Free tier now has new, higher limits
* Ability to use Cascade in write mode
* Cascade prompt credits: 5 to 25 Cascade prompt credits per month
* Unlimited Cascade Base
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Patch Fixes
## Fixes
* Resolved workspace detection issues in Bazel projects.
* Matched Cascade code block theme with the IDE theme for visual consistency.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# Windsurf Pre-release 🪄
Get early access to our latest features before they hit the stable release! While there might be some rough edges, you'll be at the forefront of exploring what's possible with AI in software development.
## New Features
* Introduced Pre-release changelogs.
* Added support for accessing .gitignore files via Cascade.
## Patch Fixes
* Fixed repeated Cascade Zoom notifications for some users.
* Fixed an issue where the onboarding popup would not close as expected.
* Resolved a rare bug causing the diff views to freeze when clicking Accept or Reject in the changes overview.
* Fixed an issue where the toolbar would open automatically on every startup.
* Improved Windsurf Terminal compatibility for multi-projects.
## Feedback
* Enjoying Cascade? Please take a moment to rate our plugin on the [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-formerly-codeium-for-python-js-java-go--).
* Join our #cascade-on-jetbrains channel on [Discord](https://discord.gg/GjCYNGChrw).
* Report issues at [windsurf.com/support](https://windsurf.com/support).
# IDE Compatibility
Source: https://docs.devin.ai/windsurf/plugins/compatibility
Supported IDEs and version requirements for Windsurf Plugins including VS Code, JetBrains, Visual Studio, NeoVim, Vim, Emacs, Xcode, Sublime Text, and Eclipse.
Visit our [download page](https://windsurf.com/download) for a list of supported IDEs and installation instructions.
If you are a Windsurf Enterprise user, visit your enterprise portal URL for download and installation instructions.
Contact your internal Windsurf administrator if you have questions.
# Supported IDEs and Versions
**VS Code**: Version 1.89+
**JetBrains IDEs**: Version 2023.3+
**JetBrains IDEs (Remote Development)**: Version 2025.1.3+
**Visual Studio**: 17.5.5+
**NeoVim**: Version 0.6+
**Vim**: 9.0.0185+
**Emacs**: All versions compiled with libxml
**Xcode**: All versions
**Sublime Text**: Version 3+
**Eclipse**: Version 4.25+ (2022-09+)
# Welcome to Windsurf Plugins
Source: https://docs.devin.ai/windsurf/plugins/getting-started
Install and set up Windsurf Plugins for JetBrains, VS Code, Visual Studio, Vim, NeoVim, Jupyter, Chrome, and other IDEs with AI-powered coding assistance.
**Windsurf Plugins** bring AI-powered coding assistance to your preferred IDE or editor.
Get started with your team!
}
href="/windsurf/plugins/cascade/cascade-overview"
>
Windsurf's coding agent.
Credits and usage.
Models available for use.
## JetBrains (Local)
These steps do not apply for enterprises on a self-hosted plan.
If you are an enterprise user, please refer to the instructions in your enterprise portal.
For remote development environments, use the "Windsurf (Remote Development)" plugin instead. See the [Remote Development section](#remote-development) below.
Open the `Plugins` menu in your JetBrains IDE. The shortcut for this is `⌘+,` on Mac and `Ctrl+,` on Linux/Windows. It is also accessible from the settings menu.
Search for the Windsurf plugin, and install it. The plugin loader will prompt you to restart the IDE.
Upon successful installation, Windsurf will begin downloading a language server.
This is the program that communicates with our APIs to let you use Windsurf's AI features.
The download usually takes ten to twenty seconds, but the download speed may depend on your internet connection.
In the meantime, you are free to use your IDE as usual.
You should see a notification on the bottom right to indicate the progress of the download.
Open a project. Windsurf will prompt you to sign in with a notification popup at the bottom right linking you to a login page.
Equivalently, click the widget at the right of the bottom status bar and select the login option there.
If you're not already signed in, you'll be prompted to sign in or create an account.
Once you've signed in, the webpage will indicate that you can return to your IDE.
You're all set. Windsurf's AI features — Autocomplete, Chat, Command, and more — are now available.
At any point, you can check your status by clicking the status bar widget at the bottom right.
If signed in, you will have access to your Windsurf settings and other controls.
If you'd like early access to new features, click on "Switch to Pre-Release"
to try out the [latest pre-release version](https://plugins.jetbrains.com/plugin/20540-windsurf-plugin-for-python-js-java-go--/versions/pre-release)
of the plugin.
### Remote Development
For JetBrains IDEs used in remote development environments, you need to use the separate "Windsurf (Remote Development)" plugin.
For advanced agentic AI capabilities and cutting-edge features, we strongly recommend using the native Windsurf Editor or the JetBrains local plugin. This plugin continues to receive the latest models, compatibility updates, and bug fixes, but does not include newer features exclusive to the Windsurf Editor.
#### Requirements
* JetBrains IDE version 2025.1.3 or greater
#### Installation Steps
Open the `Plugins (Host)` menu in your JetBrains IDE. The shortcut for this is `⌘+,` on Mac and `Ctrl+,` on Linux/Windows. It is also accessible from the settings menu.
Search for **"Windsurf (Remote Development)"** and install it.
Restart your IDE when prompted.
Open the `Plugins (Client)` menu and search for **"Windsurf (Remote Development)"**.
Install the plugin and restart the IDE again.
After installing the plugin on the host, Windsurf will begin downloading a language server.
This is the program that communicates with our APIs to let you use Windsurf's AI features.
The download usually takes ten to twenty seconds, but the download speed may depend on your internet connection.
In the meantime, you are free to use your IDE as usual.
You should see a notification on the bottom right to indicate the progress of the download.
After the language server download is completed, Windsurf will prompt you to sign in with a notification popup at the bottom right linking you to a login page.
Equivalently, click the widget at the right of the bottom status bar and select the login option there.
If you're not already signed in, you'll be prompted to sign in or create an account.
Once you've signed in, the webpage will indicate that you can return to your IDE.
You're all set. Windsurf's AI features are now available in your remote environment.
## Older Plugins
We strongly recommend using the native Windsurf Editor or the JetBrains local plugin for their advanced agentic AI capabilities and cutting-edge features.
The plugins below are in maintenance mode.
Find the Windsurf Plugin (formerly Codeium) in the VS Code Marketplace and install it.
After installation, VS Code will prompt you with a notification in the bottom right corner to sign in to Windsurf.
Equivalently, you can sign in to Windsurf via the profile icon at the bottom of the left sidebar.
If you get an error message indicating that the browser cannot open a link from Visual Studio Code, you may need to update your browser and restart the authorization flow.
If you're not already signed in, you'll be prompted to sign in or create an account.
Once you sign in, you'll be redirected back to Visual Studio Code.
If you are using a browser-based VS Code IDE like GitPod or Codespaces, you will be routed to instructions on how to complete authentication by providing an access token.
Once you're signed in, Windsurf will start downloading a language server.
This is the program that communicates with our APIs to let you use Windsurf's AI features.
The download usually takes ten to twenty seconds, but the download speed may depend on your internet connection.
In the meantime, you are free to use VS Code as usual.
You're all set. Windsurf's AI features — Autocomplete, Chat, and Command — are now available.
### Extension Installation
Follow the **Get Started** instructions in the public [`codeium.vim` repo](https://github.com/Exafunction/codeium.vim). That’s it!
### Using Windsurf Plugin
While Windsurf supports many languages, we’ll demonstrate with Python. Create a new file `test.py`.
Windsurf can suggest multiple lines of code from a partial function header:
Press **Tab** to accept.
Windsurf also understands comments:
### Extension Installation
In the Visual Studio menu bar, click **Extensions → Manage Extensions**.
In **Manage Extensions**, click **Visual Studio Marketplace**, search for **Windsurf**, then click **Download**.
Close the window and relaunch Visual Studio.
Open or create a project. A browser window will open and prompt you to sign in.
If you don’t have an account yet, you’ll be redirected to create one.
You're all set. Windsurf's AI features are now available in Visual Studio.
### Using Windsurf Plugin
While Windsurf supports many languages, we’ll demonstrate with C#. Create or open a C# file.
Windsurf can suggest multiple lines of code from a partial function signature:
Press **Tab** to accept.
### Install Windsurf Plugin
Open a new Jupyter Lab session. In a cell, paste and run `Shift+Enter` the following:
```python theme={null}
import sys
!{sys.executable} -m pip install -U pip --user
!{sys.executable} -m pip install -U codeium-jupyter --user
```
If you’re inside a virtual environment, run:
```python theme={null}
import sys
!{sys.executable} -m pip install -U pip
!{sys.executable} -m pip install -U codeium-jupyter
```
When the commands finish, close the notebook and stop the Jupyter server.
Relaunch Jupyter and open a notebook. Open the settings (Ctrl + ,) and navigate to the **Windsurf** section. You’ll see fields for an enterprise URL and a token.
Click **Get Windsurf Authentication Token** and follow the link. Paste the token back into the settings dialog.
If you can’t find the Windsurf settings, you likely didn’t restart Jupyter. Stop the server (Ctrl+C) and start it again with jupyter lab.
If you don’t have a Windsurf account, you’ll be prompted to create one.
After signing in, copy the token and paste it into the settings dialog.
You're all set. Windsurf's AI features are now available in Jupyter.
### Using Windsurf Plugin
Windsurf can suggest multiple lines of code from a partial function header:
Press **Tab** to accept.
Windsurf also understands comments:
### Install Windsurf
Visit the [Chrome Web Store page](https://chrome.google.com/webstore/detail/codeium/hobjkcpmjhlegmobgonaagepfckjkceh) and click **Add to Chrome**.
Open the extensions dropdown and click the **Pin** icon so the Windsurf icon stays visible.
The extension opens a login page automatically. If not, click the extension icon and follow the link.
You're all set. Try [creating a new Colab notebook](https://colab.research.google.com/#create=true).
### Using Windsurf
Windsurf can suggest multiple lines of code from a partial function header:
Press **Tab** to accept.
Windsurf also understands comments:
### Extension Installation
Visit the [Windsurf Plugin page on Eclipse Marketplace](https://marketplace.eclipse.org/content/codeium) and drag the **Install** button to the Eclipse toolbar.
In the **Confirm Selected Features** prompt, click **Confirm**.
In the **Trust Artifacts** prompt, select **Unsigned** and click **Trust**.
When prompted, restart Eclipse to complete the installation.
When the browser opens, sign in or create an account, then return to Eclipse.
You're all set. Windsurf's AI features are now available in Eclipse.
### Using Windsurf
While Windsurf supports many languages, we’ll demonstrate with Java. Create a new file `Fib.java`.
Windsurf can suggest multiple lines of code from a partial function header:
```java theme={null}
package test;
public class Fib {
public int fib(int n) {
}
}
```
Press **Tab** to accept.
# Guide for Admins
Source: https://docs.devin.ai/windsurf/plugins/guide-for-admins
Enterprise admin guide for deploying Windsurf at scale. Configure SSO, SCIM, RBAC, analytics, and team management for large organizations.
# Windsurf Guide for Enterprise Admins
> **Purpose** This guide helps enterprise *platform / developer-experience* administrators plan, roll out, and operate Windsurf for organizations with **large enterprise teams**. It is intentionally *opinionated* and links out to detailed "how-to" docs per topic. Treat it both as a **read-through guide** *and* as a **check-list** when onboarding.
***
## 1. Audience & Pre-Requisites
| | Details |
| --------------------- | ---------------------------------------------------------------------------------- |
| **Who should read** | Platform / Dev-Ex admins, Corporate IT, Centralized Tooling teams |
| **Assumed knowledge** | Basic Windsurf terms (team, role), Enterprise IdP concepts (SAML, SCIM), CLI usage |
| **Out-of-scope** | Deep security / compliance internals → see **Security & Compliance** docs |
***
## 2. Quick-Start Checklist
1. Confirm organization-wide settings
2. Set up **SSO** (Okta, Microsoft Entra ID, Google; see SAML docs for others)
3. Enable **SCIM** & map IdP groups → Windsurf *teams*
4. Define **role** & **permission** model (least privilege)
5. Configure **Admin Portal**: team view & security controls
6. Distribute **Windsurf clients/extensions** to end users
7. View **analytics dashboards** & **API access tokens**
> Use this list as your "Day 0" deployment tracker.
***
## 3. Core Windsurf Concepts
* **Team** – flat collections of members; no nested teams. Teams (also called *Groups*) drive **role assignment** and **analytics grouping**, letting you scope permissions and view usage metrics per cohort.
* **Roles & Permissions** – predefined RBAC; admins are primarily responsible for **team management**, **Windsurf feature settings**, and **analytics**. Built-in roles usually cover these needs, but creating a custom role with *analytics-view* permission lets team managers and leads see metrics for their own teams. (RBAC docs)
* **Admin Portal** – centralized UI for user & team management, credit usage, SSO configuration, feature toggles (Web Search, MCP, Deploys), analytics dashboards/report export, service keys for API usage, and role/permission controls.
* **Agents & Workspaces** – Windsurf IDE and JetBrains Plugins are Agentic
### 3.1 Admin Portal Overview
The Admin Portal provides centralized management for all Windsurf enterprise features through an intuitive web interface. Core capabilities include:
#### User & Team Management
* Add, remove, and manage users across your organization
* Configure teams with proper role assignments
* User status and activity monitoring
#### Authentication & Security
* Configure SSO integration with major identity providers
* Set up SCIM provisioning for automated user lifecycle management
* Manage role-based access controls (RBAC)
* Create and manage **service keys** for API automations with scoped permissions
#### Feature Toggles & Controls
> **Important:** These feature controls affect behavior for your entire organization and can only be modified by administrators. New major features with data privacy implications are released in the "off" state by default to ensure you have control over when and how they're enabled.
The Admin Portal gives you granular control over Windsurf features that can be enabled or disabled per team. **Data Privacy Note:** Some features require storing additional data or telemetry as noted below:
**Models Configuration**
* Configure which AI models your teams can access within Windsurf
* You can **filter by model** (choose specific models such as SWE-1.5, Claude Opus 4.6, etc.) or **filter by provider** (e.g., OpenAI, Anthropic, Google). Only one filter type is enforced at a time.
* Select multiple models or providers for different use cases (Cascade, Command, chat, etc.)
**Default Model Override**
* Set the default Cascade model for users on your team
* This model is pre-selected each time a user opens Windsurf (not just the first time)
* Users can still change their model at any time during a session
* Only models enabled in Models Configuration are available as default options
**Auto Run Terminal Commands** *(Beta)*
* Set the maximum auto-execution level for terminal commands across your organization
* Four levels available: **Disabled** (no auto-execution), **Allowlist Only** (only allowlisted commands), **Auto** (AI-judged safe commands), and **Turbo** (all commands except denylisted)
* Users can select any level up to the maximum you configure, giving them flexibility within your security policy
* [Learn more about auto-executed commands](https://docs.windsurf.com/windsurf/terminal#auto-executed-cascade-commands)
**MCP Servers** *(Beta)*
* Enable users to configure and use Model Context Protocol (MCP) servers
* Maintain whitelisted MCP servers for approved integrations
* **Security Note:** Review operational and security implications before enabling, as MCP can create infrastructure resources outside Windsurf's security monitoring
* Learn more about Model Context Protocol (MCP)
* MCP admin controls for teams & enterprises
**App Deploys** *(Beta)*
* Manage deployment permissions for your teams in Cascade
* Learn more about App Deploys
**Conversation Sharing**
* Allow team members to share Cascade conversations with others
* Conversations are securely uploaded to Windsurf servers
* Shareable links are restricted to logged-in team members only
* Learn more about sharing conversations
**PR Reviews (GitHub Integration)**
* Install Windsurf in your team's GitHub organization
* Enable PR review automation and description editing
* Learn more about Windsurf PR Reviews
* **We recommend Devin Review as our new and improved code review experience.** Learn more.
**Knowledge Base Management**
* Curate knowledge from Google Drive sources for your development teams
* Upload and organize internal documentation and resources
* Learn more about Knowledge Base
***
## 4. Identity & Access Management
> **Recommendation:** Use **SSO plus SCIM** wherever possible for automated provisioning, de-provisioning, and group management.
### 4.1 Single Sign-On (SSO)
| | Guidance |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| **IdPs supported** | Okta, Microsoft Entra ID, Google (others via generic SAML) |
| **Recommended approach** | Create Windsurf-specific *app* in IdP; use **role-based** group assignments rather than org-wide `All Employees` group |
| **Common pitfalls** | Email suffix mismatches, duplicate user aliases |
*See the SSO & SCIM Setup Guide for step-by-step configuration for Okta, Microsoft Entra ID, Google, and Generic SAML.*
### 4.2 SCIM Provisioning
* **Why** – automated user lifecycle & team membership management at scale
* **Capabilities**
* Create / deactivate **users** automatically
* Create **teams** automatically (or manage manually)
* Users can belong to **multiple teams**
* Custom team creation via SCIM API (docs)
* **Mapping strategies**
* 1 IdP group → 1 Windsurf team (simple, most common)
* Functional vs. project-based group prefixes (e.g. `proj-foo-devs`)
* **Things to decide**
* Which groups to *exclude* (e.g. interns, contractors)
* Renaming rules when IdP group names change
* **Caution**: SCIM should remain your **source of truth**—mixing SCIM and manual / API updates can create drift. Use the API mainly for adding supplemental groups.
***
## 5. User & Team Management at Scale
* Flat *team* → design team taxonomy carefully (no nesting to fall back on)
* Users can belong to **multiple groups**. Groups are used to view analytics
* Today, SCIM does not support assigning roles to users. SCIM only supports assigning users to Groups
***
## 6. Analytics & API Access
### 6.1 Built-In Analytics
| Dashboard | Use-case |
| --------------------- | ------------------------------------------ |
| **Adoption Overview** | Track total active users, daily engagement |
| **Team Activity** | Team usage |
Analytics shows the **percentage of code written by Windsurf**, helping quantify impact—see your dashboards at team analytics.
### 6.2 APIs
| API | Typical admin scenarios |
| -------- | -------------------------- |
| **REST** | SCIM management, analytics |
* Generate service keys under **Team Settings → Service Keys**. Scope keys to *least privilege* needed.
* More advanced reporting and usage management: see the API Reference.
* For team management: see the SCIM API – Custom Teams.
***
## 7. Operational Considerations
* **Status Pages** – monitor live service health: Windsurf, Anthropic, OpenAI
* **Support Channels** – windsurf.com/support
***
## 8. Setting Up End Users for Success
1. Point end users to the Windsurf installation guide to install the appropriate extension or desktop client.
2. Publish an internal "Getting Started with Windsurf" page (link to official docs)
3. Hold live onboarding sessions / record short demos
4. Curate starter project templates & sample prompts
5. Collect feedback via survey after 2 weeks; iterate
***
## 9. Additional Resources
* SSO & SCIM Setup Guide
* SCIM API – Custom Teams
* Analytics API Reference
* RBAC Controls
# Authentication
Source: https://docs.devin.ai/api-reference/authentication
Understand principals, tokens, and how to authenticate with the Devin API
The Devin API uses a **principal + token** model. A **principal** is who you are (your identity), and a **token** is how you prove it (your credential). Understanding this distinction is the key to choosing the right authentication method for your use case.
## Principals & tokens
| Principal | Token | Description |
| ---------------------------- | --------------------------- | ----------------------------------------------------- |
| **Service User** (non-human) | Service User API Key | For automated integrations and CI/CD pipelines |
| **User** (human) | Personal Access Token (PAT) | For human programmatic access under your own identity |
All API credentials use the `cog_` prefix format. Include your token in the `Authorization` header of every request:
```bash theme={null}
curl -X GET "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer cog_your_token_here"
```
The key distinction is **which principal the token authenticates as**:
* A **Service User API Key** authenticates as the **service user** — the service user's identity, permissions, and org memberships apply.
* A **Personal Access Token** authenticates as the **human user** who created it — that user's identity, permissions, and org memberships apply.
***
## Service users (recommended for automation)
Service users are non-human accounts designed for API integrations. They can be assigned specific permissions via RBAC and added to organizations independently of human users.
### How it works
1. **Create a service user** in **Settings > Service users** (organization) or **Enterprise settings > Service users** (enterprise)
2. **Assign a role** that controls which endpoints the service user can access
3. **Generate an API key** — the key starts with `cog_` and is shown only once at creation
4. **Use the key** in the `Authorization` header of every API request
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Create a simple Python script"}'
```
### Service user scopes
| Scope | Created in | API access | Use case |
| ---------------- | ----------------------------------- | ------------------------------------------ | ---------------------------------------------------- |
| **Organization** | Settings > Service users | `/v3/organizations/*` | Session management, knowledge, playbooks, secrets |
| **Enterprise** | Enterprise settings > Service users | `/v3/enterprise/*` + `/v3/organizations/*` | Cross-org management, analytics, audit logs, billing |
Find your organization ID on the **Settings > Service Users** page.
### Session attribution with `create_as_user_id`
Service users are separate identities from human users. By default, sessions created by a service user are attributed to the service user itself. To create sessions **on behalf of a specific user**, pass the `create_as_user_id` parameter when creating a session. The session will appear in that user's session list and count toward their usage.
This requires the `ImpersonateOrgSessions` permission on the service user's role.
### Key properties
* Keys start with `cog_` and are shown only once at creation time
* Service users appear separately from human users in audit logs
* Permissions are controlled via RBAC — assign only what the integration needs
* Enterprise service users inherit org-level permissions across all organizations
For detailed setup instructions, see the [Teams quick start](/api-reference/getting-started/teams-quickstart) or [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart).
***
## Personal access tokens (closed beta)
Personal Access Tokens are currently in **closed beta** and are feature-flagged. [Contact support](mailto:support@cognition.ai) for access. PATs are not available for SSO/enterprise accounts.
Personal Access Tokens (PATs) allow human users to authenticate programmatically under their own identity. When you use a PAT, the API sees **you** — your permissions, your org memberships, and your audit trail.
This is useful when you want to make API calls as yourself (e.g., personal scripts, local tooling) rather than through a shared service user.
For more details, see [Personal Access Tokens](/api-reference/personal-access-tokens).
***
## Legacy authentication (deprecated)
Legacy API keys are deprecated. Use [API v3](/api-reference/v3/overview) with service user authentication. See the [migration guide](/api-reference/getting-started/migration-guide).
Legacy API keys are used with the v1 and v2 APIs. They continue to work during the deprecation period but do not support new features like RBAC, session attribution, or cursor-based pagination.
| Key type | Prefix | Used with | Description |
| -------------------- | ----------- | --------- | ------------------------------------------------- |
| **Personal API key** | `apk_user_` | v1, v2 | Tied to a user account, inherits user permissions |
| **Service API key** | `apk_` | v1 | Organization-scoped, for automation |
**Where to generate:** [Settings > API Keys](https://app.devin.ai/settings/api-keys)
***
## Security best practices
Never share API keys in publicly accessible areas such as GitHub repositories, client-side code, or logs.
1. **Store keys securely**: Use environment variables or secret management systems
2. **Rotate keys regularly**: Generate new keys and revoke old ones periodically
3. **Use service users for automation**: Prefer service users over personal keys for production
4. **Apply least privilege**: Grant only the minimum permissions required
5. **Monitor usage**: Review audit logs for unexpected API activity
6. **Revoke compromised keys immediately**: If a key is exposed, revoke it and generate a new one
## Troubleshooting
### 401 Unauthorized
**Possible causes:**
* Invalid or expired API key
* Missing `Authorization` header
* Incorrect Bearer token format
* Using a legacy API key (`apk_` / `apk_user_`) with the [Devin MCP](/work-with-devin/devin-mcp) — only `cog_`-prefixed keys are supported
**Solution:** Verify your API key is correct and properly formatted in the Authorization header. For MCP usage, ensure you are using a service user API key (not a legacy key).
### 403 Forbidden
**Possible causes:**
* API key doesn't have required permissions
* Using the wrong key type for the endpoint (e.g., legacy key with v3 endpoints)
* Attempting to access resources outside your scope
**Solution:**
* Ensure your service user has the correct role and permissions
* For legacy v2 endpoints: ensure you have the Enterprise Admin role
* For legacy v1 endpoints: verify you have access to the organization
### 404 Not Found
**Possible causes:**
* Incorrect API endpoint URL
* Resource doesn't exist or you don't have access
**Solution:** Verify the endpoint URL and that the resource exists.
## Next steps
* [Teams quick start](/api-reference/getting-started/teams-quickstart) — get started in minutes
* [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart) — RBAC and multi-org setup
* [Common flows](/api-reference/common-flows) — end-to-end workflow examples
* [Migration guide](/api-reference/getting-started/migration-guide) — migrate from v1/v2
# Common Flows
Source: https://docs.devin.ai/api-reference/common-flows
End-to-end workflow guides for common API use cases
This page walks through common end-to-end workflows with the Devin API. Each flow includes the full sequence of API calls with code examples. For individual endpoint details, see the relevant API reference pages.
## Setup
Set these environment variables before running any example:
```bash theme={null}
# Required: your service user API key (starts with cog_)
export DEVIN_API_KEY="cog_your_key_here"
# Required: your organization ID (find it on Settings > Service Users)
export DEVIN_ORG_ID="your_org_id"
```
***
## Getting started: API key to first session
The most common workflow — authenticate, discover your account, and create your first session.
### Step 1: Verify your credentials
Organization-scoped service users can skip to Step 3 — you already know your org ID from the Settings page.
```bash theme={null}
curl "https://api.devin.ai/v3/self" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
Response:
```json theme={null}
{
"principal_type": "service_user",
"service_user_id": "service-user-abc123",
"service_user_name": "CI Bot",
"org_id": null
}
```
### Step 2: List your organizations
**Enterprise service users** can list all organizations:
```bash theme={null}
curl "https://api.devin.ai/v3/enterprise/organizations" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
**Organization-scoped service users** already know their org ID (it's on the Settings > Service Users page where the key was created).
### Step 3: Create a session
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Create a Python script that analyzes CSV data"}'
```
Response:
```json theme={null}
{
"session_id": "devin-abc123",
"url": "https://app.devin.ai/sessions/devin-abc123",
"status": "running"
}
```
### Step 4: Poll for events
Monitor the session by polling for messages:
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/devin-abc123/messages" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Full Python example
```python theme={null}
import os
import time
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# 1. Verify credentials
me = requests.get(f"{BASE}/self", headers=HEADERS)
me.raise_for_status()
data = me.json()
print(f"Authenticated as: {data.get('service_user_name') or data.get('user_name')}")
# 2. Create a session
session = requests.post(
f"{BASE}/organizations/{ORG_ID}/sessions",
headers={**HEADERS, "Content-Type": "application/json"},
json={"prompt": "Create a Python script that analyzes CSV data"}
).json()
print(f"Session: {session['url']}")
# 3. Poll until complete
while True:
status = requests.get(
f"{BASE}/organizations/{ORG_ID}/sessions/{session['session_id']}",
headers=HEADERS
).json()["status"]
print(f"Status: {status}")
if status in ("exit", "error", "suspended"):
break
time.sleep(10)
```
***
## Downloading session attachments
Retrieve files produced by a session (logs, screenshots, generated code, etc.).
### Step 1: Get the session
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Step 2: List attachments
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID/attachments" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
Response:
```json theme={null}
{
"items": [
{
"attachment_id": "att_123",
"name": "output.py",
"url": "https://..."
}
]
}
```
### Step 3: Download
Use the `url` from the attachment response to download the file directly.
### Full Python example
```python theme={null}
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
SESSION_ID = os.environ["SESSION_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
# List attachments
attachments = requests.get(
f"{BASE}/organizations/{ORG_ID}/sessions/{SESSION_ID}/attachments",
headers=HEADERS
).json()["items"]
# Download each attachment
for att in attachments:
print(f"Downloading {att['name']}...")
content = requests.get(att["url"]).content
with open(att["name"], "wb") as f:
f.write(content)
print(f" Saved {att['name']} ({len(content)} bytes)")
```
***
## Knowledge & playbook management
Manage the context and instructions that Devin uses across sessions.
### Create a knowledge note
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Coding standards",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style. Run lint before committing."
}'
```
### List knowledge notes
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Update a knowledge note
```bash theme={null}
curl -X PUT "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes/$NOTE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Coding standards (updated)",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style. Run lint and type-check before committing."
}'
```
### Delete a knowledge note
```bash theme={null}
curl -X DELETE "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes/$NOTE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Create a playbook
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/playbooks" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "PR Review",
"instructions": "Review the PR for bugs, security issues, and style violations. Leave inline comments."
}'
```
### Full Python example
```python theme={null}
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Create knowledge note
note = requests.post(
f"{BASE}/organizations/{ORG_ID}/knowledge/notes",
headers=HEADERS,
json={
"name": "Coding standards",
"trigger": "When writing code in any repository",
"body": "Use TypeScript strict mode. Follow existing code style."
}
).json()
print(f"Created note: {note['note_id']}")
# List all notes
notes = requests.get(
f"{BASE}/organizations/{ORG_ID}/knowledge/notes",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()["items"]
print(f"Total notes: {len(notes)}")
# Create playbook
playbook = requests.post(
f"{BASE}/organizations/{ORG_ID}/playbooks",
headers=HEADERS,
json={
"name": "PR Review",
"instructions": "Review the PR for bugs, security issues, and style violations."
}
).json()
print(f"Created playbook: {playbook['playbook_id']}")
```
***
## Scheduling automated sessions
Create recurring sessions that run on a schedule.
### Create a schedule
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Run the test suite and report any failures",
"cron_schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}'
```
This creates a schedule that runs every weekday at 9 AM Eastern.
### List schedules
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Update a schedule
```bash theme={null}
curl -X PATCH "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"cron_schedule": "0 8 * * 1-5",
"is_enabled": true
}'
```
### Delete a schedule
```bash theme={null}
curl -X DELETE "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/schedules/$SCHEDULE_ID" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Full Python example
```python theme={null}
import os
import requests
API_KEY = os.environ["DEVIN_API_KEY"]
ORG_ID = os.environ["DEVIN_ORG_ID"]
BASE = "https://api.devin.ai/v3"
HEADERS = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# Create a daily health check schedule
schedule = requests.post(
f"{BASE}/organizations/{ORG_ID}/schedules",
headers=HEADERS,
json={
"prompt": "Run the test suite and report any failures",
"cron_schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
).json()
print(f"Created schedule: {schedule['schedule_id']}")
# List all schedules
schedules = requests.get(
f"{BASE}/organizations/{ORG_ID}/schedules",
headers={"Authorization": f"Bearer {API_KEY}"}
).json()["items"]
for s in schedules:
status = "enabled" if s.get("is_enabled") else "disabled"
print(f" {s['schedule_id']}: {s['cron_schedule']} ({status})")
```
***
## Hand off a task from anywhere
Because the Sessions API creates a cloud Devin session from a single request, any tool, script, or coding agent can "hand off" work to Devin — bundling the current repo, branch, and uncommitted changes into the prompt so the cloud session picks up where you left off.
### Create a session with repo context
```bash theme={null}
# Build the JSON body with jq so the raw diff — which contains quotes,
# backslashes, and newlines — is escaped into a valid JSON string.
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg diff "$(git diff HEAD)" \
'{prompt: "Repo: my-org/my-repo (branch: fix-flaky-tests)\nFix the flaky integration tests in CI.\n\nUncommitted changes:\n\($diff)"}')"
```
The cloud session clones the repo, applies the context from your prompt, and runs in its own VM with a shell, browser, and full repo access. Track it by [polling for messages](#step-4-poll-for-events) or in the [Devin web app](https://app.devin.ai).
`git diff HEAD` can include uncommitted secrets — API keys, tokens, or `.env` edits — and the prompt is uploaded to the cloud session. Review your diff and commit, stash, or remove sensitive changes before handing off.
Don't want to build this yourself? The open-source [Devin Handoff](https://github.com/club-cog/devin-handoff) plugin wraps exactly this flow — auto-detecting repo, branch, and diff — so you can hand off from the Devin CLI, Claude Code, Codex, Cursor, or a plain shell script. See [Hand off to Devin](/work-with-devin/devin-handoff).
***
## Error handling
All examples above should include error handling in production. Here's a reusable pattern:
```python theme={null}
import requests
def api_request(method, url, headers, **kwargs):
"""Make an API request with standard error handling."""
response = requests.request(method, url, headers=headers, **kwargs)
try:
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
status = e.response.status_code
if status == 401:
raise Exception("Invalid or expired API key")
elif status == 403:
raise Exception("Service user lacks required permission")
elif status == 404:
raise Exception("Resource not found")
elif status == 429:
raise Exception("Rate limit exceeded — wait and retry")
else:
raise Exception(f"API error {status}: {e.response.text}")
```
## Support
For questions about the API or to report issues, email [support@cognition.ai](mailto:support@cognition.ai)
# Pagination
Source: https://docs.devin.ai/api-reference/concepts/pagination
How cursor-based pagination works across the Devin API
All list endpoints in the Organization and Enterprise APIs use **cursor-based pagination**. This provides consistent, efficient pagination regardless of the size of the result set.
## How it works
Every list endpoint accepts two query parameters:
| Parameter | Type | Description |
| --------- | ------- | ----------------------------------------------------------------------- |
| `first` | integer | Maximum number of items to return per page (default varies by endpoint) |
| `after` | string | Opaque cursor from a previous response. Omit for the first page |
### Response format
List responses include pagination metadata:
```json theme={null}
{
"items": [...],
"has_next_page": true,
"end_cursor": "eyJsYXN0X2lkIjoiYWJjMTIzIn0=",
"total": 142
}
```
| Field | Description |
| --------------- | ----------------------------------------------------------------------------------------------- |
| `items` | Array of results for the current page |
| `has_next_page` | `true` if there are more results |
| `end_cursor` | Pass this as the `after` parameter to get the next page. `null` when `has_next_page` is `false` |
| `total` | Total number of matching items (may be omitted by some endpoints for performance) |
## Example: Paginating through sessions
### First page
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Next page
Use the `end_cursor` value from the previous response:
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=10&after=eyJsYXN0X2lkIjoiYWJjMTIzIn0=" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Collecting all results
```python theme={null}
import os
import requests
org_id = os.environ["DEVIN_ORG_ID"]
url = f"https://api.devin.ai/v3/organizations/{org_id}/sessions"
headers = {"Authorization": f"Bearer {os.environ['DEVIN_API_KEY']}"}
all_sessions = []
cursor = None
while True:
params = {"first": 50}
if cursor:
params["after"] = cursor
response = requests.get(url, headers=headers, params=params).json()
all_sessions.extend(response["items"])
if not response.get("has_next_page"):
break
cursor = response["end_cursor"]
print(f"Fetched {len(all_sessions)} sessions")
```
## Migrating from offset-based pagination
If you're migrating from API v1 or v2, replace `offset`/`limit` with `after`/`first`:
```bash theme={null}
# Before (v1/v2)
curl ".../v1/sessions?offset=50&limit=25"
# After
curl ".../v3/organizations/{org_id}/sessions?first=25&after=CURSOR_FROM_PREVIOUS_PAGE"
```
Cursor-based pagination is more reliable than offset-based pagination because it isn't affected by items being added or removed between pages.
# Quick start: Enterprise
Source: https://docs.devin.ai/api-reference/getting-started/enterprise-quickstart
Get started with the Devin API as an enterprise user with RBAC and multi-org support
This guide walks you through setting up API access for **enterprise organizations** with custom roles, RBAC, and multi-organization support.
If you're on a teams plan with a single organization and don't need custom roles, the [Teams quick start](/api-reference/getting-started/teams-quickstart) is simpler.
If you are a **Devin Enterprise** customer with a dedicated deployment, you will need to replace `api.devin.ai` in all API URLs with your organization's custom API domain (e.g., `api.your-company.devinenterprise.com`). Contact your Devin administrator or Cognition support if you are unsure of your API domain.
## Understanding service user scopes
Enterprise customers can create service users at two levels:
| Scope | Base URL | Use case |
| ---------------- | ------------------------------ | -------------------------------------------------------------- |
| **Enterprise** | `/v3/enterprise/*` | Cross-org management, analytics, audit logs, member management |
| **Organization** | `/v3/organizations/{org_id}/*` | Sessions, knowledge, playbooks, secrets within a single org |
An enterprise service user with enterprise-level permissions automatically inherits the corresponding org-level permissions across **all** organizations.
## Step 1: Create a service user
### Enterprise service user (cross-org access)
1. Go to **Enterprise settings > Service users**
2. Click **Create service user**
3. Choose a name (e.g., "Analytics Dashboard", "Org Provisioning Bot")
4. Assign an enterprise role with the permissions your integration needs
### Organization service user (single-org access)
1. Go to **Settings > Service users** within the target organization
2. Click **Create service user**
3. Choose a name and assign an org-level role
Follow the **principle of least privilege**: create org-scoped service users when your integration only needs access to one organization. Use enterprise service users only for cross-org workflows.
## Step 2: Generate an API key
1. After creating the service user, click **Generate API key**
2. Copy the key immediately — it starts with `cog_` and won't be shown again
3. Store it securely as an environment variable:
```bash theme={null}
export DEVIN_API_KEY="cog_your_key_here"
```
## Step 3: Make your first API call
### Enterprise endpoint example
List all organizations in your enterprise:
```bash theme={null}
curl "https://api.devin.ai/v3/enterprise/organizations" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Organization endpoint example
Create a Devin session in a specific org:
```bash theme={null}
export DEVIN_ORG_ID="your_org_id"
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Implement the feature described in JIRA-123"}'
```
## Permissions and RBAC
Every API endpoint is gated by a specific permission. The required permission is documented on each endpoint's API reference page. Permissions are split into two scopes:
* **Enterprise permissions** — control `/v3/enterprise/*` endpoints (e.g., `ManageOrganizations`, `ManageBilling`, `ViewAccountMetrics`)
* **Organization permissions** — control `/v3/organizations/{org_id}/*` endpoints (e.g., `UseDevinSessions`, `ManageOrgSecrets`, `ManageOrgPlaybooks`)
An enterprise service user with an enterprise-level permission automatically inherits the corresponding org-level permission across all organizations. For example, `ViewAccountSessions` grants `ViewOrgSessions` in every org.
For the full permissions reference, see the [permissions and RBAC documentation](/api-reference/v3/overview#enterprise-permissions).
## Common enterprise workflows
### Monitor consumption across orgs
```bash theme={null}
# Get daily consumption breakdown (uses Unix timestamps — example: Jan 1 to Jan 31, 2025)
curl "https://api.devin.ai/v3/enterprise/consumption/daily?time_after=1735689600&time_before=1738368000" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Audit log retrieval
```bash theme={null}
curl "https://api.devin.ai/v3/enterprise/audit-logs" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Manage users across organizations
```bash theme={null}
# List enterprise users
curl "https://api.devin.ai/v3/enterprise/members/users" \
-H "Authorization: Bearer $DEVIN_API_KEY"
# List users in a specific org
curl "https://api.devin.ai/v3/enterprise/organizations/$DEVIN_ORG_ID/members/users" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
## Next steps
* Browse the full [API permissions reference](/api-reference/v3/overview)
* Learn about [authentication](/api-reference/authentication) in depth
* Set up [pagination](/api-reference/concepts/pagination) for large result sets
* Review the [migration guide](/api-reference/getting-started/migration-guide) if you're moving from v1/v2
# Migrating from v1/v2
Source: https://docs.devin.ai/api-reference/getting-started/migration-guide
Migrate your integrations from API v1 or v2 to the current API
This guide helps you migrate existing integrations from API v1 or v2 to the current Organization and Enterprise APIs. The legacy APIs (v1 and v2) will continue to work during the deprecation period, but all new features are only available in the current API.
## What's changing
| Area | v1/v2 (Legacy) | Current API |
| ------------------ | -------------------------------------------- | ----------------------------------------- |
| **Authentication** | API keys (starts with `apk_user_` or `apk_`) | Service user tokens (starts with `cog_`) |
| **Base URL** | `/v1/*`, `/v2/*` | `/v3/organizations/*`, `/v3/enterprise/*` |
| **Pagination** | Offset-based (`offset` + `limit`) | Cursor-based (`first` + `after`) |
| **Scoping** | Flat — all endpoints at one level | Org-scoped and enterprise-scoped |
| **Permissions** | Key-level (all or nothing) | Role-based with granular permissions |
## Step 1: Create a service user
Replace your legacy API key with a service user:
1. Go to **Settings > Service users**
2. Create a service user with an appropriate role
3. Generate an API key (starts with `cog_`)
4. Update your integration to use the new key
```bash theme={null}
# Before (legacy API key)
curl -H "Authorization: Bearer apk_user_YOUR_LEGACY_KEY" ...
# After (service user token)
curl -H "Authorization: Bearer cog_YOUR_SERVICE_USER_KEY" ...
```
Your legacy API keys will continue to work during the deprecation period. You can migrate incrementally.
## Step 2: Update endpoint URLs
### Session endpoints
| Operation | v1 endpoint | Current endpoint |
| --------------- | --------------------------------------- | -------------------------------------------------------------- |
| Create session | `POST /v1/sessions` | `POST /v3/organizations/{org_id}/sessions` |
| List sessions | `GET /v1/sessions` | `GET /v3/organizations/{org_id}/sessions` |
| Get session | `GET /v1/session/{session_id}` | `GET /v3/organizations/{org_id}/sessions/{devin_id}` |
| Send message | `POST /v1/session/{session_id}/message` | `POST /v3/organizations/{org_id}/sessions/{devin_id}/messages` |
| Archive session | — | `POST /v3/organizations/{org_id}/sessions/{devin_id}/archive` |
| Delete session | — | `DELETE /v3/organizations/{org_id}/sessions/{devin_id}` |
### Knowledge endpoints
| Operation | v1 endpoint | Current endpoint |
| ---------------- | -------------------------------- | ------------------------------------------------------------- |
| List knowledge | `GET /v1/knowledge` | `GET /v3/organizations/{org_id}/knowledge/notes` |
| Create knowledge | `POST /v1/knowledge` | `POST /v3/organizations/{org_id}/knowledge/notes` |
| Update knowledge | `PUT /v1/knowledge/{note_id}` | `PUT /v3/organizations/{org_id}/knowledge/notes/{note_id}` |
| Delete knowledge | `DELETE /v1/knowledge/{note_id}` | `DELETE /v3/organizations/{org_id}/knowledge/notes/{note_id}` |
### Playbook endpoints
| Operation | v1/v2 endpoint | Current endpoint |
| --------------- | ------------------------------------ | ----------------------------------------------------------- |
| List playbooks | `GET /v1/playbooks` | `GET /v3/organizations/{org_id}/playbooks` |
| Create playbook | `POST /v1/playbooks` | `POST /v3/organizations/{org_id}/playbooks` |
| Get playbook | `GET /v1/playbooks/{playbook_id}` | `GET /v3/organizations/{org_id}/playbooks/{playbook_id}` |
| Update playbook | `PUT /v1/playbooks/{playbook_id}` | `PUT /v3/organizations/{org_id}/playbooks/{playbook_id}` |
| Delete playbook | `DELETE /v1/playbooks/{playbook_id}` | `DELETE /v3/organizations/{org_id}/playbooks/{playbook_id}` |
### Secret endpoints
| Operation | v1 endpoint | Current endpoint |
| ------------- | -------------------------------- | ------------------------------------------------------- |
| List secrets | `GET /v1/secrets` | `GET /v3/organizations/{org_id}/secrets` |
| Create secret | `POST /v1/secrets` | `POST /v3/organizations/{org_id}/secrets` |
| Delete secret | `DELETE /v1/secrets/{secret_id}` | `DELETE /v3/organizations/{org_id}/secrets/{secret_id}` |
### Enterprise-only endpoints (new)
These endpoints have no v1/v2 equivalent — they are only available in the current API:
* `GET /v3/enterprise/organizations` — List organizations
* `GET /v3/enterprise/audit-logs` — Audit logs
* `GET /v3/enterprise/consumption/*` — Usage and billing data
* `GET /v3/enterprise/metrics/*` — Usage metrics
* `GET /v3/enterprise/members/users` — User management
* `GET /v3/enterprise/roles` — Role management
* Service user provisioning, IP access lists, ACU limits, and more
## Step 3: Update pagination
The current API uses cursor-based pagination instead of offset-based:
```bash theme={null}
# Before (v1/v2 offset-based)
curl "https://api.devin.ai/v1/sessions?offset=0&limit=25"
# After (cursor-based)
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=25"
# Then use `end_cursor` from the response for the next page:
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions?first=25&after=CURSOR_VALUE"
```
See [Pagination](/api-reference/concepts/pagination) for details.
## Step 4: Handle response format changes
### Session status values
The current API returns more detailed status information. See the endpoint reference for the full schema.
### Error responses
Error format remains consistent: HTTP status code + JSON body with error details.
## Deprecation timeline
Legacy API keys show a deprecation banner in the Devin settings UI. During the transition period:
* **Now**: Legacy API keys continue to work. New organizations may not have access to legacy key creation.
* **Deprecation period**: Both legacy keys and service user tokens work side-by-side.
* **End of life**: Legacy API keys will be removed soon. Monitor your Devin settings for announcements.
We recommend migrating to service users as soon as possible to take advantage of role-based access control, session attribution, and new features.
## Need help?
If you encounter issues during migration, reach out through your usual Devin support channel or contact us at [support@cognition.ai](mailto:support@cognition.ai).
# Quick start: Teams
Source: https://docs.devin.ai/api-reference/getting-started/teams-quickstart
Get started with the Devin API as a teams or standard organization user
This guide walks you through setting up API access for **teams and standard organizations** (non-enterprise). You'll create a service user, get your credentials, and make your first API call in minutes.
If you're part of an enterprise with multiple organizations, custom roles, or SSO, see the [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart) instead.
## Step 1: Create a service user
1. Go to **Settings > Service users** in your organization
2. Click **Create service user**
3. Choose a descriptive name (e.g., "CI Pipeline", "Monitoring Bot")
4. Select a role:
* **Admin** — full access to manage sessions, knowledge, playbooks, secrets, and settings
* **Member** — can create and manage Devin sessions, view resources
Use the **Member** role for most automation. Only use **Admin** if your integration needs to manage org settings or other users.
## Step 2: Generate an API key
1. After creating the service user, click **Generate API key**
2. Copy the key immediately — it starts with `cog_` and won't be shown again
3. Store it securely as an environment variable:
```bash theme={null}
export DEVIN_API_KEY="cog_your_key_here"
```
## Step 3: Make your first API call
Create a Devin session:
```bash theme={null}
export DEVIN_ORG_ID="your_org_id"
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "Create a simple Python script that prints Hello World"}'
```
Find your organization ID on the **Settings → Service Users** page.
**Want sessions attributed to your user?** By default, sessions are attributed to the service user. To create sessions on behalf of a specific user (so they appear in that user's session list), add `"create_as_user_id": "user_abc123"` to the request body. This requires the **Admin** role (which includes the `ImpersonateOrgSessions` permission). See [Session attribution](/api-reference/overview#session-attribution) for details.
## Step 4: Common operations
### List your sessions
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY"
```
### Send a message to a running session
```bash theme={null}
export SESSION_ID="your_session_id"
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions/$SESSION_ID/messages" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Please also add unit tests"}'
```
### Manage knowledge
```bash theme={null}
# List knowledge entries
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY"
# Create a knowledge entry
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/knowledge/notes" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "Coding standards", "trigger_description": "When writing code", "body": "Use TypeScript strict mode..."}'
```
## Permissions for teams users
Teams organizations have a simple permission model:
| Role | Can create sessions | Can manage resources | Can manage settings |
| ---------- | ------------------- | ----------------------------------- | ------------------- |
| **Member** | Yes | Yes (knowledge, playbooks, secrets) | No |
| **Admin** | Yes | Yes | Yes |
For fine-grained role-based access control (RBAC), see the [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart).
## Next steps
* Browse the **Organization API** endpoints in the sidebar
* See [common flows](/api-reference/common-flows) for common integration patterns
* Learn about [authentication](/api-reference/authentication) in depth
* Set up [scheduled sessions](/api-reference/v3/schedules/organizations-schedules) for recurring tasks
# API Overview
Source: https://docs.devin.ai/api-reference/overview
Learn how to programmatically interact with Devin using our REST APIs
The Devin API enables you to integrate Devin into your applications, automate workflows, and build powerful tools. Use **service users** with role-based access control for secure, auditable API access.
## Getting started
For teams and standard organizations. Create a service user and make your first API call in minutes.
For enterprise customers with RBAC, multi-org support, and advanced permissions.
**Which path should I choose?** Most customers should start with the Teams quick start. Choose Enterprise if you manage multiple organizations, use SSO, or need custom roles and RBAC.
## API structure
The API is organized into two scopes:
### Organization API
**Base URL:** `https://api.devin.ai/v3/organizations/*`
For managing resources within a single organization — sessions, knowledge, playbooks, secrets, and more. This is where most integrations start.
### Enterprise API
**Base URL:** `https://api.devin.ai/v3/enterprise/*`
For cross-organization management — analytics, audit logs, user management, billing, and infrastructure. Available to enterprise customers.
Both scopes use service user credentials (`cog_` prefix). See [Authentication](/api-reference/authentication) for setup.
## Session attribution
Service users are separate identities from human users, but you can **create sessions on behalf of any user** in your organization using the `create_as_user_id` parameter. This means sessions appear in that user's session list and count toward their usage — just like they created it themselves.
```bash theme={null}
curl -X POST "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Fix the login bug in issue #42",
"create_as_user_id": "user_abc123"
}'
```
**Coming from personal API keys?** In v1/v2, personal API keys automatically created sessions as your user. With v3, use a service user + `create_as_user_id` for the same behavior — with the added benefit of RBAC, audit trails, and centralized key management. The service user's role must include `ImpersonateOrgSessions` permission.
**Personal Access Tokens (PATs) coming soon.** PATs will let you authenticate directly as your user with the v3 API — no service user or `create_as_user_id` needed. Sessions will automatically be attributed to you. Stay tuned for availability.
You can find user IDs through the [List users](/api-reference/v3/users/organizations-members-users) endpoint or in the Devin UI under organization member settings.
## Legacy APIs (v1 and v2)
The v1 and v2 APIs continue to work during the deprecation period but do not receive new features. We recommend migrating to the current API for role-based access control, session attribution, and new capabilities.
* [v1 API documentation](/api-reference/v1/overview) — session management with legacy API keys
* [v2 API documentation](/api-reference/v2/overview) — enterprise management with legacy API keys
* [Migration guide](/api-reference/getting-started/migration-guide) — step-by-step migration from v1/v2
***
## Error handling
All APIs use standard HTTP status codes:
* `200 OK`: Successful request
* `201 Created`: Resource created successfully
* `400 Bad Request`: Invalid request parameters
* `401 Unauthorized`: Missing or invalid API key
* `403 Forbidden`: Insufficient permissions
* `404 Not Found`: Resource not found
* `429 Too Many Requests`: Rate limit exceeded
* `500 Internal Server Error`: Server error
## Support
For questions about the API or to report issues, email [support@cognition.ai](mailto:support@cognition.ai).
# API Release Notes
Source: https://docs.devin.ai/api-reference/release-notes
Track changes, new features, and improvements to Devin's APIs
This page tracks changes specific to Devin's APIs (v1, v2, and v3). For application feature releases, see [Application Release Notes](/release-notes/overview).
## 2026
**v3 API Updates**
* **Add IPs to IP access list endpoint**: Added `POST /v3/enterprise/ip-access-list` for appending IP ranges to the enterprise IP access list without replacing the existing entries. Unlike `PUT /v3/enterprise/ip-access-list` (which replaces the entire list), this endpoint merges the provided ranges with the current list. Requires `ManageEnterpriseSettings` permission.
* **Update git permission endpoint**: Added `PATCH /v3/enterprise/organizations/{org_id}/git-providers/permissions/{git_permission_id}` for updating an existing git permission (e.g. toggling `read_only`). Requires `ManageGitIntegrations` permission.
* **Organization-scoped member read endpoints (Beta)**: Added `GET /v3beta1/organizations/{org_id}/members/users`, `GET /v3beta1/organizations/{org_id}/members/users/{user_id}`, and `GET /v3beta1/organizations/{org_id}/members/idp-users` for listing and retrieving organization members using an organization-scoped service user. Supports cursor-based pagination (`after`, `first`) and `email` filtering. Requires `ViewOrgMembership` permission at the organization level.
* **Devin Lite mode for session creation**: The `devin_mode` parameter on `POST /v3/organizations/{org_id}/sessions` now also accepts `"lite"` (Devin Lite), in addition to `"normal"` and `"fast"`. Fast and Lite are subject to the same feature flag and enterprise agent preview restrictions as the web app.
**v3 API Updates**
* **Devin mode parameter for session creation (May 21)**: Added `devin_mode` parameter to `POST /v3/organizations/{org_id}/sessions`. Accepts `"normal"` (default agent mode) or `"fast"` (Fast mode). When omitted, the session uses the organization's default mode. Fast mode is subject to the same feature flag and enterprise agent preview restrictions as the web app.
* **Git connection repositories endpoint (May 18)**: Added `GET /v3/enterprise/git-providers/connections/{connection_id}/repositories` for listing the repositories available to a specific enterprise git connection. Supports `filter_name` filtering and cursor-based pagination (`after`, `first`). Requires `ManageGitIntegrations` permission.
**v3 API Updates**
* **Session insights generate endpoint (Mar 11)**: Added `POST /v3/organizations/{org_id}/sessions/{devin_id}/insights/generate` and `POST /v3/enterprise/sessions/{devin_id}/insights/generate` endpoints for triggering on-demand session insights generation. Returns `{ "status": "started" }` when generation begins, or `{ "status": "already_exists" }` if insights are already generated or in progress. Poll the existing GET insights endpoint to retrieve results. Requires `ManageOrgSessions` permission.
**v3 API Updates**
* **v3 endpoints promoted to prod**: The following endpoint groups have been promoted from `v3beta1` to `v3` (prod). Update your base URLs from `/v3beta1/` to `/v3/` for these endpoints:
* Sessions (create, list, get, messages, archive, terminate, tags, insights) — both enterprise and organization scopes
* Knowledge notes — both enterprise and organization scopes
* Playbooks — both enterprise and organization scopes
* Secrets — organization scope
* Schedules — organization scope
* Attachments — organization scope
* Audit logs — both enterprise and organization scopes
* Consumption & billing (cycles, daily breakdowns, ACU limits) — enterprise scope
* Metrics (DAU, WAU, MAU, PRs, sessions, searches, active users, usage) — enterprise scope
* Organizations, users, members, roles, IDP groups — enterprise scope
* Git connections & permissions — enterprise scope
* Hypervisors, queue, IP access lists, org group limits — enterprise scope
* Session tags (organization default tags) — enterprise scope
**Still in beta** (`v3beta1`): Repository indexing endpoints, service user provisioning endpoints, and guardrail violations endpoints remain on `v3beta1` and are marked with a Beta tag in the docs.
* **Guardrail violations endpoint**: Added `GET /v3beta1/enterprise/guardrail-violations` and `GET /v3beta1/enterprise/organizations/{org_id}/guardrail-violations` endpoints for querying guardrail violations across the enterprise. Returns violation details including the guardrail type, reasoning, confidence score, action taken, and the triggering message. Supports filtering by `session_id` and `guardrail_id`, with time range and cursor-based pagination. Use the per-org endpoint to filter by organization. Requires `ManageEnterpriseSettings` permission.
* **IP access list endpoints (Feb 9)**: Added `GET /v3beta1/enterprise/ip-access-list`,`PUT /v3beta1/enterprise/ip-access-list`, and `DELETE /v3beta1/enterprise/ip-access-list` endpoints for managing enterprise IP allowlists. The PUT endpoint replaces the entire list with the provided IP ranges (CIDR notation supported). Requires `ManageEnterpriseSettings` permission.
* **Scheduled sessions endpoints (Feb 3)**: Added organization-level schedule management endpoints: `POST /v3beta1/organizations/{org_id}/schedules` for creating schedules, `GET /v3beta1/organizations/{org_id}/schedules` for listing schedules, `GET /v3beta1/organizations/{org_id}/schedules/{schedule_id}` for retrieving a specific schedule, `PATCH /v3beta1/organizations/{org_id}/schedules/{schedule_id}` for updating schedules, and `DELETE /v3beta1/organizations/{org_id}/schedules/{schedule_id}` for deleting schedules. Requires `ManageOrgSchedules` permission.
**v3 API Updates**
* **ACU limits endpoints (Jan 27)**: Added enterprise ACU limit management endpoints for Devin sessions: `GET /v3beta1/enterprise/consumption/acu-limits/devin` to retrieve limits, `PUT .../organizations/{org_id}` to set org-level limits, and `DELETE` to remove limits. Requires `ManageBilling` permission.
* **Attachments endpoints (Jan 27)**: Added organization attachment endpoints: `POST /v3beta1/organizations/{org_id}/attachments` for uploading attachments and `GET /v3beta1/organizations/{org_id}/attachments/{uuid}/{name}` for downloading attachments. Upload requires `UseDevinSessions` permission, download requires `ViewOrgSessions` permission.
* **Queue endpoint (Jan 21)**: Added `GET /v3beta1/enterprise/queue` endpoint for enterprise admins to monitor session queue health. Returns the total number of queued sessions and a status indicator (`normal`, `elevated`, or `high`). Useful for setting up alerts for capacity issues. Requires `ViewAccountMetrics` permission.
* **Sessions endpoints (Jan 19)**: Added `GET /v3beta1/enterprise/sessions/{devin_id}` and `GET /v3beta1/organizations/{org_id}/sessions/{devin_id}` endpoints for retrieving details of a specific session. Added `POST /v3beta1/enterprise/sessions/{devin_id}/messages` and `POST /v3beta1/organizations/{org_id}/sessions/{devin_id}/messages` endpoints for sending messages to active sessions (sessions are automatically resumed if suspended). Also added `origins` filter parameter to the sessions list endpoints for filtering by session origin (`webapp`, `slack`, `teams`, `api`, `linear`, `jira`, `other`).
* **Audit logs order parameter (Jan 17)**: Added `order` query parameter (`asc` or `desc`, defaults to `desc`) to the enterprise and organization audit logs endpoints for controlling the sort order of results.
* **Secrets router (Jan 16)**: Added organization-level secrets management endpoints: `GET /v3beta1/organizations/{org_id}/secrets` for listing secrets, `POST /v3beta1/organizations/{org_id}/secrets` for creating secrets, and `DELETE /v3beta1/organizations/{org_id}/secrets/{secret_id}` for deleting secrets. Requires `ManageOrgSecrets` permission.
* **Audit logs fix (Jan 15)**: Fixed an issue where `end_cursor` was not returned in audit logs API responses when there were items on the page.
* **Service user provisioning (Jan 14)**: Added `POST /v3beta1/enterprise/service-users` and `POST /v3beta1/organizations/{org_id}/service-users` endpoints for programmatically provisioning new service users. Enforces privilege escalation prevention: the target role's permissions must be a subset of the caller's permissions, and `ManageServiceUsers` permissions can never be granted. Requires `ManageAccountServiceUsers` or `ManageOrgServiceUsers` permission respectively.
* **IDP Groups enterprise-level endpoints (Jan 14)**: Added `GET /v3beta1/enterprise/idp-groups` for listing IDP groups registered with an enterprise, `POST /v3beta1/enterprise/idp-groups` for bulk registering IDP groups (up to 100 at a time), and `DELETE /v3beta1/enterprise/idp-groups/{idp_group_name}` for removing a registered IDP group. Groups with existing role assignments or user memberships cannot be deleted. Requires `ManageAccountMembership` permission.
* **Audit log actions (Jan 12)**: Added `create_join_request`, `automatic_join_event`, and `reject_join_request` action types to audit log responses.
* **Active users endpoint (Jan 8)**: Added `GET /v3beta1/enterprise/metrics/active-users` endpoint for retrieving unique active users for a custom date range. Unlike the DAU/WAU/MAU endpoints which return lists broken down by period, this endpoint returns a single count of unique active users across the entire specified range. Supports filtering by organization IDs and configurable activity thresholds (`min_sessions`, `min_searches`).
* **Hypervisors default status (Jan 8)**: The `GET /v3beta1/enterprise/hypervisors` endpoint now defaults to filtering by `available` status instead of returning all hypervisors. Pass `status=all` to retrieve hypervisors regardless of status.
* **Session secrets (Jan 5)**: Added `session_secrets` parameter to the session creation endpoint (`POST /v3beta1/organizations/{org_id}/sessions`). Session secrets are temporary secrets available only within the current session and are not stored in organization secrets.
* **Pagination fix (Jan 5)**: Fixed pagination bug in the v3 Enterprise Users API where `end_cursor` was not always returned correctly.
**v2 API Updates**
* **Repo cloning fix (Jan 20)**: Fixed the `POST /v2/enterprise/organizations/{org_id}/clone-repository` endpoint schema. Removed the legacy `RepoSetupStepsT` format and simplified the request body to use flat fields (`pull_repo_commands`, `run_lint_commands`, `run_project_commands`, `update_dependencies_commands`, `repo_note`, `repo_path`).
* **Git permissions URL fields (Jan 15)**: Added `group_prefix_url` and `repo_url` fields to the `GitPermissionRequest` schema, providing full URL alternatives to path-based repository and group prefix matching.
* **Organization member role field (Jan 8)**: Added `org_role_name` field to the `GET /v2/enterprise/organizations/{org_id}/members` response, showing each member's role within the organization.
* **Organization creation option (Jan 8)**: Added `add_creator_as_member` boolean parameter (defaults to `true`) to `POST /v2/enterprise/organizations`, allowing enterprise admins to create organizations without automatically adding themselves as a member.
* **Consumption timezone documentation (Jan 7)**: Added timezone behavior documentation to the daily consumption endpoints. Billing cycles use midnight PST (08:00:00 UTC) as the day boundary.
**v1 API Updates**
* **Secret types update (Jan 16)**: Added `dictionary` as a recognized secret type value in the secrets API schema. Note: creating secrets with type `dictionary` is deprecated; use `cookie`, `key-value`, or `totp` instead.
## 2025
**v3 API Updates**
* **Org group limits endpoint (Dec 23)**: Added `GET /v3beta1/enterprise/org-group-limits` and `PUT /v3beta1/enterprise/org-group-limits` endpoints for managing organization group configurations. Groups map sets of organization IDs to optional max Agent Compute Unit limits per billing cycle. Requires `ManageOrganizations` permission. *This feature requires enablement by your account team.*
* **Session archive endpoint (Dec 11)**: Added `POST /v3beta1/organizations/{org_id}/sessions/{devin_id}/archive` endpoint for archiving sessions. Also added `archive` query parameter to `DELETE /v3beta1/organizations/{org_id}/sessions/{devin_id}` (terminate session) and `is_archived` field to session responses.
* **Order parameter removal (Dec 11)**: **Breaking change:** Removed the `order` query parameter from the sessions list endpoint (`GET /v3beta1/organizations/{org_id}/sessions`). Clients must stop sending `order`; use cursor-based pagination with `first`/`after` parameters instead.
* **Searches router (Dec 10)**: Added enterprise and organization-level search endpoints at `GET /v3beta1/enterprise/searches` and `GET /v3beta1/organizations/{org_id}/searches` for listing searches with pagination and filtering.
* **Audit logs improvements (Dec 10)**: Added `data` object, `service_user_name`, and `user_email` fields to audit log responses. Added `update_git_permission` action type.
* **Advanced sessions support (Dec 8)**: Added new request parameters for advanced session workflows: `child_playbook_id`, `session_links`, and `bypass_approval`. Session responses now include `child_session_ids`, `parent_session_id`, and `is_advanced` fields.
* **Session Tags router (Dec 5)**: Added CRUD endpoints at `/v3/beta/enterprise/organizations/{org_id}/tags` for managing allowed session tags per organization. When tag validation is enabled, session creation and tag updates enforce tags from the allowed list.
* **Enterprise Sessions endpoint (Dec 5)**: Added `GET /v3/beta/enterprise/sessions` to list sessions across the enterprise with optional `org_ids` filtering.
* **Git Permissions updates (Dec 5)**: Added `prefix_path` field for matching repositories by path prefix. Added `PUT` and `DELETE` endpoints for bulk replacing or clearing all permissions for an organization.
* **Session impersonation (Dec 5)**: Added `create_as_user_id` parameter to the session creation endpoint, allowing service users to create sessions on behalf of other users.
* **Hypervisors response change (Dec 5)**: The hypervisors endpoint response now returns `utilization_percentage` instead of `max_slots` and `available_slots`.
* **Notes and Playbooks routers (Dec 1)**: Added enterprise and organization-level Notes and Playbooks management endpoints to v3 API. Notes endpoints require `ManageAccountKnowledge` permission, Playbooks endpoints require `ManageAccountPlaybooks` permission.
**v2 API Updates**
* **Org group limits endpoint (Dec 23)**: Added `GET /v2/enterprise/org-group-limits` and `PUT /v2/enterprise/org-group-limits` endpoints for managing organization group configurations. Groups map sets of organization IDs to optional max Agent Compute Unit limits per billing cycle. The PUT endpoint replaces the entire configuration (groups not in the request are deleted). *This feature requires enablement by your account team.*
* **Self endpoint (Dec 23)**: Added `GET /v2/enterprise/self` endpoint returning information about the authenticated API key, including the key ID, associated user ID, user email, and organization ID.
* **Sessions messages field (Dec 11)**: Added `messages` field to v2 sessions API response, providing all session messages similar to the v1 API.
* **Response schema improvements (Dec 11)**: Added proper response schemas for audit logs, snapshots, and playbook endpoints including `AuditLogsResponse`, `EnterpriseSnapshotResponse`, and `EnterprisePlaybookResponse`.
**v1 API Updates**
* **Audit logs deprecation (Dec 5)**: The `/v1/audit-logs` endpoint is deprecated; use the v2 or v3 audit logs endpoints instead.
**v2 Enterprise API Updates**
* **Pagination limit update (Nov 21)**: Maximum pagination limit reduced from 1000 to 200 items per request for improved performance and reliability. Default limit remains 100. This change does NOT affect the v1 External API.
* **Sessions router (Nov 16)**: Added comprehensive sessions management endpoints to v2 API for enterprise administrators.
* **Snapshots API endpoint (Nov 3)**: Added endpoint for retrieving snapshot details programmatically.
**v1 API Updates**
* **Terminate session endpoint (Oct 31)**: Added endpoint to terminate running sessions programmatically.
**v3 API Launch (Beta)**
* **API v3 launch (Oct 23)**: Launched v3 API with full RBAC support, service user authentication model, and comprehensive audit logging for service user actions.
**v2 Enterprise API Updates**
* **Snapshot creation endpoint (Oct 30)**: New V2 Enterprise Organizations API endpoint for enterprise admins to programmatically clone repositories and create snapshots with custom setup steps and startup commands.
* **Playbooks API improvements (Oct 14)**: Added API for publishing enterprise playbooks with improved functionality for programmatic playbook management.
**v2 Enterprise API Updates**
* **Roles router (Sep 25)**: Added enterprise roles router with five API endpoints for managing roles programmatically.
**v1 API Updates**
* **Playbooks API (Sep 6)**: Added comprehensive Playbooks API endpoints to v1 for creating, updating, listing, and deleting playbooks programmatically.
* **Secrets endpoint (Sep 5)**: Added new `POST /v1/secrets` endpoint for creating secrets via API.
**v2 Enterprise API Launch**
* **API v2 launch (Mar 23)**: Launched Enterprise API v2 for enterprise administrators with organization management, consumption tracking, and member management capabilities.
## 2024
**v1 API Launch (Oct 26)**
* Launched REST API for programmatic session creation and management
* Session creation, monitoring, and management endpoints
* File attachment upload and download support
* Basic authentication with API keys
* Idempotent session creation support
* Use cases: automatic PR reviews, lint error resolution, migrations
***
## API Versioning Policy
### Backward Compatibility
We strive to maintain backward compatibility within major versions. Breaking changes will be:
1. Announced at least 7 days in advance
2. Documented in these release notes
3. Accompanied by migration guides when applicable
### Deprecation Process
When we deprecate an API feature:
1. **Announcement**: We'll announce the deprecation with a timeline
2. **Deprecation Period**: The feature remains available but marked as deprecated
3. **Removal**: The feature is removed after the deprecation period
### Version Support
* **v1**: Legacy — will be deprecated soon in favor of the Organization API (v3)
* **v2**: Legacy — will be deprecated soon in favor of the Enterprise API (v3)
* **v3**: Generally available, recommended for all new integrations
***
## Migrating to the current API
For step-by-step migration instructions from v1 or v2, see the [Migration guide](/api-reference/getting-started/migration-guide).
## Support
For questions about API changes or migration assistance, email [support@cognition.ai](mailto:support@cognition.ai).
# Download an attachment
Source: https://docs.devin.ai/api-reference/v3/attachments/get-organizations-attachments
v3-openapi.yaml GET /v3/organizations/{org_id}/attachments/{uuid}/{name}
Download a file attachment.
Returns a 307 redirect: to the IP-enforcing presigned proxy for orgs with an
IP allowlist, or to a presigned S3 URL otherwise.
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# Upload an attachment
Source: https://docs.devin.ai/api-reference/v3/attachments/post-organizations-attachments
v3-openapi.yaml POST /v3/organizations/{org_id}/attachments
Upload a file attachment that can be used in Devin sessions.
## Permissions
Requires a service user with the `UseDevinSessions` permission at the organization level.
# Delete a note
Source: https://docs.devin.ai/api-reference/v3/notes/delete-enterprise-knowledge-notes-note-id
v3-openapi.yaml DELETE /v3/enterprise/knowledge/notes/{note_id}
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# Delete an org-level note
Source: https://docs.devin.ai/api-reference/v3/notes/delete-organizations-knowledge-notes-note-id
v3-openapi.yaml DELETE /v3/organizations/{org_id}/knowledge/notes/{note_id}
Delete a note for an organization.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission for the specified organization.
# Get knowledge folder structure with note counts.
Source: https://docs.devin.ai/api-reference/v3/notes/enterprise-knowledge-folders
v3-openapi.yaml GET /v3/enterprise/knowledge/folders
Return the full folder tree with per-folder note counts.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# List all notes.
Source: https://docs.devin.ai/api-reference/v3/notes/enterprise-knowledge-notes
v3-openapi.yaml GET /v3/enterprise/knowledge/notes
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# Get a note by ID
Source: https://docs.devin.ai/api-reference/v3/notes/get-enterprise-knowledge-note
v3-openapi.yaml GET /v3/enterprise/knowledge/notes/{note_id}
Get a note by ID.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# Get an org-level note
Source: https://docs.devin.ai/api-reference/v3/notes/get-organizations-knowledge-note
v3-openapi.yaml GET /v3/organizations/{org_id}/knowledge/notes/{note_id}
Get a note by ID for an organization.
## Permissions
Requires a service user with the `ManageKnowledge` permission at the organization level.
# Get knowledge folder structure with note counts.
Source: https://docs.devin.ai/api-reference/v3/notes/organizations-knowledge-folders
v3-openapi.yaml GET /v3/organizations/{org_id}/knowledge/folders
Return the full folder tree with per-folder note counts.
## Permissions
Requires a service user with the `ManageKnowledge` permission at the organization level.
# List org-level notes
Source: https://docs.devin.ai/api-reference/v3/notes/organizations-knowledge-notes
v3-openapi.yaml GET /v3/organizations/{org_id}/knowledge/notes
List notes for an organization.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission for the specified organization.
# Create an enterprise-level note
Source: https://docs.devin.ai/api-reference/v3/notes/post-enterprise-knowledge-notes
v3-openapi.yaml POST /v3/enterprise/knowledge/notes
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# Create an org-level note
Source: https://docs.devin.ai/api-reference/v3/notes/post-organizations-knowledge-notes
v3-openapi.yaml POST /v3/organizations/{org_id}/knowledge/notes
Create a note for an organization.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission for the specified organization.
# Update a note
Source: https://docs.devin.ai/api-reference/v3/notes/put-enterprise-knowledge-notes-note-id
v3-openapi.yaml PUT /v3/enterprise/knowledge/notes/{note_id}
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission at the enterprise level.
# Update an org-level note
Source: https://docs.devin.ai/api-reference/v3/notes/put-organizations-knowledge-notes-note-id
v3-openapi.yaml PUT /v3/organizations/{org_id}/knowledge/notes/{note_id}
Update a note for an organization.
## Permissions
Requires a service user with the `ManageAccountKnowledge` permission for the specified organization.
# Permissions & RBAC
Source: https://docs.devin.ai/api-reference/v3/overview
Permission reference for the Devin API
Every API endpoint is gated by a specific permission assigned to the calling service user's role. The required permission for each endpoint is documented on its individual API reference page. This page provides a summary of all permissions by scope.
**Base URLs:**
* `https://api.devin.ai/v3/organizations/*` — endpoints scoped to a single organization
* `https://api.devin.ai/v3/enterprise/*` — endpoints that require enterprise-level permissions
**Devin Enterprise** customers with a dedicated deployment should replace `api.devin.ai` with their custom API domain (e.g., `api.your-company.devinenterprise.com`). See the [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart) for setup details.
Find your organization ID on the **Settings → Service Users** page.
Some enterprise endpoints operate on specific organizations using paths like
`/v3/enterprise/organizations/{org_id}/...` (for example, audit logs and tags).
Even though they include an `org_id` parameter, they require **enterprise-level** permissions.
## Enterprise permissions
| Permission | Controls |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `ReadAccountMeta` | Self (granted to all service users by default) |
| `ManageEnterpriseSettings` | Audit logs, Organization tags |
| `ManageOrganizations` | Organizations CRUD, Organization group limits |
| `ManageAccountMembership` | Roles, Enterprise users, Enterprise IdP groups, Enterprise service user membership, Enterprise IdP group registration |
| `ManageAccountServiceUsers` | Service user provisioning (enterprise) |
| `ManageAccountKnowledge` | Knowledge notes (enterprise) |
| `ManageAccountPlaybooks` | Playbooks (enterprise) |
| `ManageGitIntegrations` | Git connections, Git permissions |
| `ManageBilling` | Consumption cycles, Daily consumption breakdowns |
| `ViewAccountMetrics` | Usage metrics (DAU/WAU/MAU, PRs, sessions, searches, active users), Queue status |
| `ViewEnterpriseInfraDetails` | Hypervisors |
| `ViewAccountSessions` | Sessions list and detail (enterprise, read-only) |
| `ManageAccountSessions` | Send messages to sessions (enterprise) |
## Organization permissions
| Permission | Controls |
| ------------------------ | -------------------------------------------------------------- |
| `ManageOrgSecrets` | Secrets CRUD |
| `ManageOrgKnowledge` | Knowledge notes (organization) |
| `ManageOrgPlaybooks` | Playbooks (organization) |
| `ManageOrgServiceUsers` | Service user provisioning (organization) |
| `ManageOrgSchedules` | Scheduled sessions |
| `ViewOrgSessions` | Sessions list and detail (organization, read-only) |
| `ManageOrgSessions` | Send messages, terminate, archive sessions |
| `UseDevinSessions` | Create sessions |
| `ImpersonateOrgSessions` | Create sessions on behalf of other users (`create_as_user_id`) |
## Permission inheritance
**Enterprise service users** authenticate with `/v3/enterprise/*` endpoints and can operate across all organizations. They are assigned enterprise-level roles and automatically inherit the corresponding org-level permissions in every organization (for example, `ViewAccountSessions` grants `ViewOrgSessions` in all orgs).
**Organization service users** are scoped to a single organization and authenticate with `/v3/organizations/{org_id}/*` endpoints only. They are assigned org-level roles.
## Creating service users
Service users are created through the Devin UI:
1. **Enterprise service users**: Enterprise settings → Service Users
2. **Organization service users**: Organization settings → Service Users
For setup instructions, see the [Teams quick start](/api-reference/getting-started/teams-quickstart) or [Enterprise quick start](/api-reference/getting-started/enterprise-quickstart).
# List org-level playbooks
Source: https://docs.devin.ai/api-reference/v3/playbooks/organizations-playbooks
v3-openapi.yaml GET /v3/organizations/{org_id}/playbooks
List playbooks for an organization.
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission for the specified organization.
# Create an org-level playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/post-organizations-playbooks
v3-openapi.yaml POST /v3/organizations/{org_id}/playbooks
Create a playbook for an organization.
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission for the specified organization.
# Get latest Devin Review status
Source: https://docs.devin.ai/api-reference/v3/pr-reviews/get-enterprise-pr-reviews
v3-openapi.yaml GET /v3/enterprise/pr-reviews
Return the latest Devin Review for a PR scoped to the enterprise.
The owning organization is resolved server-side from ``pr_url`` —
the same way as the trigger endpoint. When ``commit_sha`` is
omitted, the PR's current head commit is fetched from the provider
and used. Returns ``404`` when no review exists for the resolved
commit.
## Permissions
Requires a service user with the `UseReviewManual` permission at the enterprise level.
# Get latest Devin Review status
Source: https://docs.devin.ai/api-reference/v3/pr-reviews/get-organizations-pr-reviews
v3-openapi.yaml GET /v3/organizations/{org_id}/pr-reviews
Return the latest Devin Review for a PR scoped to the organization.
When ``commit_sha`` is omitted, the PR's current head commit is
fetched from the provider and used. Returns ``404`` when no review
exists for the resolved commit.
## Permissions
Requires a service user with the `UseReviewManual` permission for the specified organization.
# Trigger Devin Review
Source: https://docs.devin.ai/api-reference/v3/pr-reviews/post-enterprise-pr-reviews
v3-openapi.yaml POST /v3/enterprise/pr-reviews
Trigger a Devin Review for a pull/merge request.
Creates a database record that will be picked up by the review
worker pool. Always fetches the latest commit from the PR.
## Permissions
Requires a service user with the `UseReviewManual` permission at the enterprise level.
# Trigger Devin Review
Source: https://docs.devin.ai/api-reference/v3/pr-reviews/post-organizations-pr-reviews
v3-openapi.yaml POST /v3/organizations/{org_id}/pr-reviews
Trigger a Devin Review for a pull/merge request.
Creates a database record that will be picked up by the review
worker pool. Always fetches the latest commit from the PR.
## Permissions
Requires a service user with the `UseReviewManual` permission for the specified organization.
# Terminate Session
Source: https://docs.devin.ai/api-reference/v3/sessions/delete-organizations-sessions
v3-openapi.yaml DELETE /v3/organizations/{org_id}/sessions/{devin_id}
Terminate session
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageOrgSessions` permission at the organization level.
## Notes
Once terminated, a session cannot be resumed. If you want to preserve the session for future reference, set the `archive` parameter to `true`.
# List sessions for account
Source: https://docs.devin.ai/api-reference/v3/sessions/enterprise-sessions
v3-openapi.yaml GET /v3/enterprise/sessions
List all sessions across the enterprise.
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# List sessions with insights
Source: https://docs.devin.ai/api-reference/v3/sessions/enterprise-sessions-insights
v3-openapi.yaml GET /v3/enterprise/sessions/insights
List sessions with detailed insights including message counts,
session size classification, and AI-generated analysis.
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# Get session details
Source: https://docs.devin.ai/api-reference/v3/sessions/get-enterprise-session
v3-openapi.yaml GET /v3/enterprise/sessions/{devin_id}
Get details of a specific session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# List session attachments
Source: https://docs.devin.ai/api-reference/v3/sessions/get-enterprise-session-attachments
v3-openapi.yaml GET /v3/enterprise/sessions/{devin_id}/attachments
List all attachments for a session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# Get session insights
Source: https://docs.devin.ai/api-reference/v3/sessions/get-enterprise-session-insights
v3-openapi.yaml GET /v3/enterprise/sessions/{devin_id}/insights
Get detailed insights for a specific session, including message counts,
session size classification, and AI-generated analysis.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# List session messages
Source: https://docs.devin.ai/api-reference/v3/sessions/get-enterprise-session-messages
v3-openapi.yaml GET /v3/enterprise/sessions/{devin_id}/messages
List all messages for a session with cursor-based pagination, ordered chronologically.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewAccountSessions` permission at the enterprise level.
# Get session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/get-enterprise-session-tags
v3-openapi.yaml GET /v3/enterprise/sessions/{devin_id}/tags
Get the tags for a specific session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# Get Session
Source: https://docs.devin.ai/api-reference/v3/sessions/get-organizations-session
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/{devin_id}
Get details of a specific session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# List session attachments
Source: https://docs.devin.ai/api-reference/v3/sessions/get-organizations-session-attachments
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/{devin_id}/attachments
List all attachments for a session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# Get session insights
Source: https://docs.devin.ai/api-reference/v3/sessions/get-organizations-session-insights
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/{devin_id}/insights
Get detailed insights for a specific session, including message counts,
session size classification, and AI-generated analysis.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# List session messages
Source: https://docs.devin.ai/api-reference/v3/sessions/get-organizations-session-messages
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/{devin_id}/messages
List all messages for a session with cursor-based pagination, ordered chronologically.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# Get session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/get-organizations-session-tags
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/{devin_id}/tags
Get the tags for a specific session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# List Sessions
Source: https://docs.devin.ai/api-reference/v3/sessions/organizations-sessions
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions
List sessions.
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# List sessions with insights
Source: https://docs.devin.ai/api-reference/v3/sessions/organizations-sessions-insights
v3-openapi.yaml GET /v3/organizations/{org_id}/sessions/insights
List sessions with detailed insights including message counts,
session size classification, and AI-generated analysis.
## Permissions
Requires a service user with the `ViewOrgSessions` permission at the organization level.
# Generate session insights
Source: https://docs.devin.ai/api-reference/v3/sessions/post-enterprise-session-insights-generate
v3-openapi.yaml POST /v3/enterprise/sessions/{devin_id}/insights/generate
Trigger on-demand generation of session insights.
Returns ``already_exists`` if insights have already been generated.
Otherwise kicks off generation in the background. Poll the
GET insights endpoint to retrieve results once generation completes.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageAccountSessions` permission at the enterprise level.
## Behavior
* If insights have already been generated (or generation is in progress), the endpoint returns `{ "status": "already_exists" }` without re-triggering.
* If no insights exist (or the last attempt failed), the endpoint triggers generation in the background and returns `{ "status": "started" }`.
* Poll the [GET session insights](/api-reference/v3/sessions/get-enterprise-session-insights) endpoint to retrieve results once generation completes.
# Append session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/post-enterprise-session-tags
v3-openapi.yaml POST /v3/enterprise/sessions/{devin_id}/tags
Append tags to a session (deduplicating with existing tags).
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# Send a message to a session
Source: https://docs.devin.ai/api-reference/v3/sessions/post-enterprise-sessions-messages
v3-openapi.yaml POST /v3/enterprise/sessions/{devin_id}/messages
Send a message to an active session. The session will be automatically resumed if suspended.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageAccountSessions` permission at the enterprise level.
# Generate session insights
Source: https://docs.devin.ai/api-reference/v3/sessions/post-organizations-session-insights-generate
v3-openapi.yaml POST /v3/organizations/{org_id}/sessions/{devin_id}/insights/generate
Trigger on-demand generation of session insights.
Returns ``already_exists`` if insights have already been generated.
Otherwise kicks off generation in the background. Poll the
GET insights endpoint to retrieve results once generation completes.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageOrgSessions` permission at the organization level.
## Behavior
* If insights have already been generated (or generation is in progress), the endpoint returns `{ "status": "already_exists" }` without re-triggering.
* If no insights exist (or the last attempt failed), the endpoint triggers generation in the background and returns `{ "status": "started" }`.
* Poll the [GET session insights](/api-reference/v3/sessions/get-organizations-session-insights) endpoint to retrieve results once generation completes.
# Append session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/post-organizations-session-tags
v3-openapi.yaml POST /v3/organizations/{org_id}/sessions/{devin_id}/tags
Append tags to a session (deduplicating with existing tags).
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# Create Session
Source: https://docs.devin.ai/api-reference/v3/sessions/post-organizations-sessions
v3-openapi.yaml POST /v3/organizations/{org_id}/sessions
Create a new session
## Permissions
Requires a service user with the `ManageOrgSessions` permission at the organization level.
### Additional permissions for advanced features
| Feature | Required Permission |
| ------------------- | ------------------------ |
| `create_as_user_id` | `ImpersonateOrgSessions` |
## Devin mode
The `devin_mode` parameter controls which Devin agent mode is used for the session:
| Mode | Description |
| -------- | --------------------------------------------------------------- |
| `normal` | The default agent mode. Fast and good at long-horizon planning. |
| `fast` | \~2x faster, 4x more expensive, same intelligence. |
When omitted, the session uses the organization's default mode. Fast mode is subject to the same feature flag and enterprise agent preview restrictions as the web app.
## User impersonation
The `create_as_user_id` parameter allows creating a session on behalf of another user. This requires:
1. The service user must have `ImpersonateOrgSessions` permission
2. The target user must be a member of the organization
3. The target user must have `UseDevinSessions` permission
# Archive Session
Source: https://docs.devin.ai/api-reference/v3/sessions/post-organizations-sessions-archive
v3-openapi.yaml POST /v3/organizations/{org_id}/sessions/{devin_id}/archive
Archive session and put it to sleep if currently running
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageOrgSessions` permission at the organization level.
## Notes
Archiving a session preserves it for future reference. Archived sessions can still be viewed but cannot be modified or resumed.
# Send a message to a session
Source: https://docs.devin.ai/api-reference/v3/sessions/post-organizations-sessions-messages
v3-openapi.yaml POST /v3/organizations/{org_id}/sessions/{devin_id}/messages
Send a message to an active session. The session will be automatically resumed if suspended.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
## Permissions
Requires a service user with the `ManageOrgSessions` permission at the organization level.
# Replace session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/put-enterprise-session-tags
v3-openapi.yaml PUT /v3/enterprise/sessions/{devin_id}/tags
Replace all tags on a session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# Replace session tags
Source: https://docs.devin.ai/api-reference/v3/sessions/put-organizations-session-tags
v3-openapi.yaml PUT /v3/organizations/{org_id}/sessions/{devin_id}/tags
Replace all tags on a session.
The `devin_id` is the session ID prefixed with `devin-` (e.g., `devin-abc123`).
# Reporting Security Concerns
Source: https://docs.devin.ai/desktop/security/reporting
Report security vulnerabilities to Devin Desktop securely via email with GPG encryption. Learn about our coordinated disclosure policy and safe harbor.
Devin Desktop takes the security of our products and services seriously. If you believe you have found a security vulnerability in any Devin Desktop-owned services, please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them via email to [security@windsurf.com](mailto:security@windsurf.com)
Please include the following information in your report including as much technical detail as possible:
* Type of issue (e.g., buffer overflow, SQL injection, cross-site scripting, etc.)
* The location of the affected source code (if applicable)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit it
* Any other relevant information
This information will help us triage your report more quickly.
Please compile all information into a single email, encrypted with our public GPG key, include the name of the affected product, and the version of the product affected (if known).
### Public GPG Key
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBGdY0gcBEACvhmeoodWK5OUNluDytvc6W2/ahzh334qaYgYOoYxBkN9/6BBW
WTdJJ4Hu//XdAw8G/5ISy6tV17JMWOI59acAehKh8NqBSVhrlR7tHxGiJN2fXTtH
TDGOoyMFbWaSQIRI44E3lQZMyQBScGKxDiXQjIlholmrS3JicrqG85dUgB6got9l
da/3bp8BuydcVib7NGcuRZKS2BEVc8UCvpsP/p+VWiSNtB3kT8PTt782mSmnp6rR
HqL8H6ERlMEgQ9M4iWWZhq4g3qsSeg5x9UtU2ANH/escFNM6Wbzg6hyy3CZtXzw6
2BRnXpF63dqhPiigy+ifVCs/YqGacToaUNhN4I8kt274yW0dX+U/15wvlJchsnsi
RVQwB5FRxIxcPsZAWFBg7P5um15HGpKGS0LFJsB5aUfJFHPFmUAvPUreOjv1rGTO
1FdkAERLHsI7jJA70vTAdOM2WwaeGa55EMwefNJ69LpN2elboFbz5hpAa7w+8Y5w
y1J6knyOA4JFnVI824ZiQIGloECGZOlOxM4Ru+jjkcroO+l+frmvvggqBjvKPHGs
VmrMSNjf7aE/7NDnyKZJ9fvUiLf+WclAcIUySbYQr8xv/aV76xDUH1PT59f/ntp7
jxRA0rVvIThakvV3MPMbdrR78uLbc6Bwc0MdtEIGw+QAQ4YzAX4yeV9LHQARAQAB
tCtzZWN1cml0eUBjb2RlaXVtLmNvbSA8c2VjdXJpdHlAY29kZWl1bS5jb20+iQJO
BBMBCgA4FiEEE5wZ6tOci0CBdec0DoNVUHCWVAkFAmdY0gcCGwMFCwkIBwIGFQoJ
CAsCBBYCAwECHgECF4AACgkQDoNVUHCWVAnT0w//ZVKF9Yz9So8ZeeIVcMz0CrFZ
jWFQMTvQvEQ5jP9VpiXe7z5pwSVvv3SpqvkNX+Y6HtjXdnv5Q+QZGzIZKc6NqbDz
vYGwL0UJCXEdEhdNMKOI0FWLiOl/NPdCqIwSeeUNsKZCZE7LWqDbfDoivStGcKWS
UYqqbrv8FB2BQrqem0YL+da6i24uhghL0NHCk8x3+qR/Cp+xWJyL27nHHRD7OVLO
3UhsEQEVoiZWp2TpZNyO4AjIFjHSQPw/kBOFdP9bZVcL9rmpZMbyhPnG6Xal3Jmn
0epXQcfvNUd/GwP0Oi22y2CoezuGL8/xKkQoRJ0XHhLAFyJTNIEWPxx4Ki5WVVbZ
PSUwc51CL0PKg2GbKF0g8Zy6JNwMciLh59R79gMK9eGZnSdoOe8d8EzV+AWaqPsO
qgxv4adYytLEIuLylLtPlEIni17E/yKIEibnlSS9P7EUBTNXJFmrLUPArEPhQGrS
EPid8mRJCCo47Htn6YH3Tzt0lSr8mfqOwWs1ww/rbDT/1N3Wq+EmEe9hwHjHQCyl
xfn+7yDRcJ4C2C/fuF2cg4JA2QsX8eTpvChSnXnQIhvG+7NISqFUAf1YXuy+cNJa
rJs2CRCrz3rmM1dpQ+miII9Z14/ZSy6wg0f2BXaANZNIKutmPTFWxOyc6RiBMIor
EeYWbajRg5vCJmQNeSW5Ag0EZ1jSBwEQALffVPaMgIsv3vyoDZivVjr4ArkPWuWM
rQMhDRaos11vzWlVEviihdSn9rUP/nx3t6TsvvwMhqTk9yfnRCn5jmE2dSFfT4Wz
kdYkQ8xWLI4Ku8Cu6MK5iemG5JMyL03eaaSqlbjg7IUmNr+PF/poX0c+PCoNVbIC
YbHYtTwTJ52G+DuVQThZI0qnebNc/3CfvDAfMGqyDezIPqoqPRfLolwT6N+zip8O
bDuom7DlcyRjRAeB36dbEPRkqzdkP8ZA4tKWRO2HBhDe4Jg4srZlCs8BiveNK6mM
lOv+EZpSwvuikfga41bk+A08EFojKkg7XuCN+LSBUxKWdl9UDg5eibYiy1uRM8kP
taFzP89tNanQeAU3BBcJRgDqOkl/5KQnPLU8Dn8Iq2nUUg3rdYhRTT7PiSlkuK8f
tWXctlN7AsTtvrKaJGP89oETs5ks/umdep7fmYlJlLO2VZE63itQHGUpE2P0hRSH
itoC7acWdXYY7M/wi1kPl5CvMyStaXfqmgXoRF2ea2N9kP6ioQ5piAvNLmHVc4l9
ID5kDUB4k0Tv5XSE8eXc35fT5JFV8J/Rlk66CDR5DKciBteRqQ97Ojc2CkJ92tCO
/nTnnV8IYLP3yTCmFvABxJLk8qi3UJXo4ySKMzZ48OjDfvr91pr9xjgWyLj0R44O
1S2Tq6eFyy7xABEBAAGJAjYEGAEKACAWIQQTnBnq05yLQIF15zQOg1VQcJZUCQUC
Z1jSBwIbDAAKCRAOg1VQcJZUCd6dD/9iyRnoPBrIiBre1BmXCdx7SJCy3P659dGS
35/KCx9S5oEwjQX11BCembZ7R1rhthpTwj/uCSzaV2mZgdxDg5+IPUSjBafbnHih
gE7RqEOTD6rH3+2NlMJvDJYykucSgjzhAbF2oXTbQneGzA1z5ljn6OKtu+sr0upY
HRjk24x6zm6X3Y95PVoinXmafHfS12oYqM560uhmjE66LylB6ihxwThNDWPDQQ4F
8ZdVrNIqyE5rt+Mdo8XndGnbcRNvAaJ7syqNPzZl8XL7+IvVbMCnM0v5wCuO896w
ngxqTf9UDf6tRZ4bzt0wzvtSa1TtMbbgqeQ4JL75W0iRwGtW2VFqsLJdLvCeoeJS
/oN7ZRjsBpe7Mi7yJHGsKffosFL4U2Xb02FMyQXwUCQuI1kT7Je5a2mOJZZC6Rxs
CaJ5B+H2tq8Vu8eHqWU6HFQgN5A9tRDxWaLSA0s7ClzCbVHVXJ0rlfVG5cGGX5NN
bTHSQ3RAeMIWpgguViogcQTS8H+eJau7ObSrjAH+vyUDZUBZk3wK6TWWERAknRTs
NXGMK99G5TnFMB/BhCcZJcupyFJf2RU0dcrmtSEZsXR1TXZP81TnIRIxrrzhAxHC
TG4WjJ9IfJITK+RZwf0ng5LRnMfDkMOP3JtmnAYqUXSWe4WzaPXoE0TxE1BmtdR4
avMueyobpA==
=X35T
-----END PGP PUBLIC KEY BLOCK-----
```
## Policy
Devin Desktop follows the principle of [Coordinated Vulnerability Disclosure](https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure).
## Safe Harbor
Devin Desktop supports safe harbor for security researchers who:
* Make a good faith effort to avoid privacy violations, destruction of data, and interruption or degradation of our services
* Only interact with accounts you own or with explicit permission of the account holder
* Do not exploit a security issue you discover for any reason other than testing
* Report any vulnerability you've discovered promptly
* Follow the guidelines outlined in this document
We will not take legal action against you or administrative action against your account if you act according to this policy.
*Last updated: December 10, 2024*
# Dedicated Deployment Private Networking
Source: https://docs.devin.ai/enterprise/deployment/dedicated_saas_private_networking
Some enterprise customers require Devin to connect privately to internal systems such as GitHub Enterprise Server, GitLab, Bitbucket Data Center, Artifactory, Nexus, or other developer infrastructure.
Devin's Dedicated Deployment supports this through AWS PrivateLink. This model keeps all traffic on the AWS backbone and avoids exposure on the public internet.
## Overview
PrivateLink provides private IP connectivity from your Devin Dedicated Deployment environment to your internal endpoints. To enable this, your team provides an AWS VPC Endpoint Service in front of each internal system that Devin needs to reach. Cognition then creates Interface VPC Endpoints that consume that service.
PrivateLink is configured on a per domain basis. If Devin must reach multiple domains, you will need one Endpoint Service and one Interface Endpoint for each domain.
## Requirements
You must provide:
* A Network Load Balancer (NLB) in your AWS account that fronts each internal service (GitLab, Artifactory, etc.)
* A VPC Endpoint Service that uses the NLB as its target
* The service name for each Endpoint Service
* Allowed principal permissions that include the Cognition AWS account
* Confirmation of supported ports for each service
* DNS information for the domains Devin must resolve privately
Cognition will provide:
* The AWS account ID to add as an allowed principal
* DNS configuration on the Devin side once connectivity is established
## Cross Region PrivateLink (if your services are in a different region)
If your internal services run in a different region than your Cognition Dedicated Deployment tenant, PrivateLink can still be used. AWS supports cross region endpoint consumption provided the service owner enables it.
### Customer steps
1. **Create or reuse the Network Load Balancer**
The NLB should target the internal systems Devin must access. The NLB must support all required ports.
2. **Create a VPC Endpoint Service from the NLB**
This makes the service available for consumption over PrivateLink.
3. **Enable cross region support**
In the AWS console:
```
VPC Console → Endpoint Services → Select service → Actions → Modify supported Regions
```
Add the region where your Cognition tenant is deployed.
CLI example:
```bash theme={null}
aws ec2 modify-vpc-endpoint-service-configuration \
--service-id vpce-svc-0abc123 \
--add-supported-regions us-west-2 # Your Cognition tenant region
```
4. **Add Cognition's AWS account as an allowed principal**
```bash theme={null}
aws ec2 modify-vpc-endpoint-service-permissions \
--service-id vpce-svc-0abc123 \
--add-allowed-principals arn:aws:iam:::root
```
5. **Provide the following details to Cognition**
* Endpoint Service name
Example: `com.amazonaws.vpce.us-west-2.vpce-svc-0abc123`
* Ports the service accepts
* The domains that should resolve through PrivateLink
### What happens next
Once you provide the details above, Cognition will:
1. **Create Interface VPC Endpoints** in your dedicated tenant environment using the service names you provided.
2. **Send a connection request** that you'll need to approve (either manually or via auto-accept if configured).
3. **Configure DNS** so that your specified domains resolve privately within the Devin environment.
## Architecture Diagram
## Gateway Load Balancer (GWLB) Support
If your organization uses a security appliance such as Zscaler for traffic inspection, you can use an AWS Gateway Load Balancer (GWLB) instead of a Network Load Balancer. This allows Devin's traffic to pass through your security appliance for inspection before reaching your internal services.
In this model:
* A **Gateway Load Balancer** fronts your security appliance (e.g., Zscaler)
* A **Gateway Load Balancer Endpoint** is created in the Devin environment to route traffic through the appliance
* Traffic is inspected by your security appliance and then forwarded to the target internal service
To use this option, provide Cognition with:
* The GWLB Endpoint Service name
* The security appliance vendor and configuration details
* The domains that should be routed through the GWLB
GWLB-based setups follow the same PrivateLink principles as NLB-based setups but add a traffic inspection layer. Contact your Cognition account team for detailed setup guidance.
## Key Considerations
| Topic | Guidance |
| -------------------- | -------------------------------------------------------------------------------------- |
| Required setup | One Endpoint Service per domain, one Interface Endpoint per domain |
| Cross region support | Must be explicitly enabled on the Endpoint Service |
| Allowed principals | Customer must add Cognition's AWS account ID |
| DNS | Customer domains will resolve to private Interface Endpoint IPs on the Cognition side |
| Ports | NLB listeners must match the ports Devin uses to access each service |
| Availability | NLB and underlying targets should be configured in multiple Availability Zones |
| Latency | Small cross region latency increase may occur, since traffic stays on the AWS backbone |
## Information to Provide to Cognition
When your setup is ready, send Cognition:
* AWS Endpoint Service names for each internal domain
* Confirmation that cross region support is enabled (if applicable)
* Allowed principal configuration is complete
* Ports exposed by the NLB
* The list of domains that should be routed through PrivateLink
Cognition will then provision the Interface Endpoints, configure DNS, and confirm connectivity.
# Enterprise Deployment
Source: https://docs.devin.ai/enterprise/deployment/overview
Learn about Devin's enterprise deployment options: Enterprise Cloud and Customer Dedicated Deployment architectures.
## Overview
Devin is designed for seamless integration into enterprise environments, with deployment options that balance **speed, security, and compliance**. Devin can be initiated through the **web interface, Slack, or API**, ensuring flexibility in how teams engage with the system.
Upon activation, Devin operates within a **dedicated workspace** that includes:
* **A shell** for executing commands.
* **A browser** for web-based interactions.
* **A code editor** for reading and writing code.
Devin's **workspace** operates under the control of its **brain**, which always resides within **Cognition's Cloud**.
## Devin's Architecture
Devin's architecture consists of two key components:
* **The Brain**: A stateless, cloud-based service that powers Devin's intelligence, always residing in Cognition's Cloud (similar to GitHub Copilot's architecture).
* **The Devbox**: A secure virtual environment where Devin executes code, connects to resources, and interacts with your systems.
The deployment model you choose determines where the Devbox runs and how it connects to your infrastructure.
### Enterprise Cloud Architecture
In the Enterprise Cloud model, both Devin's brain and Devbox run in Cognition's secure, multi-tenant cloud. All data stays encrypted in transit and at rest. Each Devin session runs on its own isolated machine, keeping customer data segregated by default.
### Customer Dedicated Deployment Architecture
In the Customer Dedicated Deployment model, Cognition hosts Devin in an auto-scaling, customer-isolated environment within a single-tenant VPC. Your VPC connects via AWS Private Link (or IPSec tunnel), allowing Devin to securely access your privately networked resources. Customer data stays encrypted in transit and at rest, and is processed in an isolated tenant.
For detailed steps on configuring AWS PrivateLink connectivity, see [Dedicated Deployment Private Networking](/enterprise/deployment/dedicated_saas_private_networking).
## Deployment Options
Devin supports two primary deployment models to meet varying enterprise requirements:
| **Deployment Model** | **Brain Location** | **Devbox Location** | **Network Setup** | **Primary Advantage** | **Best For** |
| --------------------------------- | ------------------ | ------------------------------------ | -------------------------------- | -------------------------------------------- | ------------------------------------------------------- |
| **Enterprise Cloud** | Cognition Cloud | Cognition Cloud | Public / IP Whitelist | Fastest setup, managed infrastructure | Organizations with public or IP-whitelistable resources |
| **Customer Dedicated Deployment** | Cognition Cloud | Customer-dedicated single-tenant VPC | AWS Private Link or IPSec Tunnel | Tenant isolation with managed infrastructure | Strategic enterprises with private networks |
### Choosing a Deployment Model
**Enterprise Cloud Deployment** is recommended for most organizations looking for a **quick setup** with minimal operational overhead. Deployment can be completed within minutes. This model works well when your source code management (GitHub.com, GitLab.com, Azure DevOps Cloud) and artifact stores are publicly accessible or can support IP whitelisting.
**Customer Dedicated Deployment** is ideal for strategic enterprises whose resources are on private networks and cannot support IP whitelisting. In this model, Cognition hosts Devin in an auto-scaling, customer-isolated environment within a single-tenant VPC. Your VPC connects to Cognition's infrastructure via a secure AWS Private Link (or IPSec tunnel), allowing Devin to access your privately networked resources while maintaining tenant isolation. This deployment model supports MFA VPN access to your internal resources.
**Important Networking Considerations:**
* Devin's Devbox must be able to reach your source code management systems (GitHub, GitLab, Bitbucket, Azure DevOps), artifact stores (Artifactory, CodeArtifact), and other development tools.
* **MFA VPNs are not compatible** with Enterprise Cloud deployments. If your resources require MFA VPN access, consider Customer Dedicated Deployment.
* **OpenVPN is supported** with Customer Dedicated deployments, enabling secure connectivity to your internal resources through your existing VPN infrastructure.
* For self-hosted tools (GitHub Enterprise Server, GitLab self-hosted, Artifactory), you'll need either IP whitelisting (for Enterprise Cloud) or a dedicated deployment model.
* **End user workstations** must have connectivity to `*.devinapps.com` (HTTPS/443) to access Devin's interactive session tools such as the IDE and Desktop. If this domain is blocked by a corporate proxy or firewall, users will be unable to use these features. See [Customer Dedicated Deployment Requirements](#customer-dedicated-deployment-requirements) for details.
Once a deployment model is chosen, the next critical step is **integrating source code repositories**.
## Deployment Specifications
### Customer Dedicated Deployment Requirements
For Customer Dedicated deployments, Cognition manages the infrastructure on your behalf. Requirements include:
* **Network Connectivity**:
* AWS Private Link (preferred)
* IPSec tunnel (alternative option)
* Ability to establish secure tunnel between your VPC and Cognition's single-tenant VPC
* **Access Configuration**:
* DNS resolution for your internal resources
* Network routing configured to allow Devin's Devbox to reach your SCM, artifact stores, and other development tools
* **End User Workstation Connectivity**:
* End user workstations must be able to reach `*.devinapps.com` over HTTPS (port 443). This domain serves Devin's interactive session tools — including the IDE (VSCode frontend) and Desktop (browser viewer) — which are loaded in the user's browser via iframes.
* If your organization uses a corporate proxy or firewall, ensure `*.devinapps.com` is on the allowlist for user workstations.
### Cross-Tenant Communication
Devin's architecture ensures **secure communication** between your environment and Cognition's Cloud.
| **Feature** | **Requirement** |
| ----------------- | ------------------------------------------------------------------------------------------------------------------ |
| **Networking** | Egress access required |
| **Ports** | HTTPS/443 |
| **Connection** | On startup, Devin establishes a **secure WebSocket** connection to an **isolated container** in Cognition's tenant |
| **Communication** | All subsequent operations occur over this **secure channel** |
| **Isolation** | Backend session isolation for enhanced security |
Granting **internet access** to Devin's workspace is **strongly recommended** to ensure full functionality. Devin needs to access your source code repositories, artifact stores, and other development tools.
## SSO Guides
Use the following guides to configure single sign-on (SSO) for your enterprise deployment.
Configure authentication using OpenID Connect with Okta.
Enable seamless authentication with Microsoft Entra ID.
Configure authentication using a generic SAML 2.0 identity provider.
Configure authentication using a generic OpenID Connect identity provider.
## FAQs & Additional Information
Devin is a **compound AI system** and does not currently support third-party LLM API keys.
Please contact our sales team for information on Google Cloud Platform support.
### Next Steps
* **For Enterprise Cloud Deployment**: Start using Devin immediately by [logging in to the web app](https://app.devin.ai).
* **For Customer Dedicated Deployment**: Contact our [Enterprise Sales Team](mailto:enterprise@cognition.ai) to discuss your networking requirements and begin the setup process.
* **Need Assistance?** Contact our [Enterprise Sales Team](mailto:enterprise@cognition.ai).
# Best practices
Source: https://docs.devin.ai/enterprise/environment-management/best-practices
Enterprise best practices for organizing blueprints, managing secrets, monitoring builds, pinning, and migration at scale.
Running Devin across an enterprise means managing environments for dozens of organizations and hundreds of repositories. This page covers the patterns that work well at scale, and the mistakes to avoid.
## Organizing blueprints across tiers
The most common question enterprise admins ask: "Where should this configuration go?"
The answer is simple: **put it in the enterprise blueprint by default.** The enterprise blueprint is the right place for anything that applies (or could apply) to all organizations. This includes language runtimes, security tools, corporate certificates, internal CLIs, proxy configuration, and shared registry auth. It's perfectly fine to install multiple languages and tools here, even if not every org uses all of them.
| Blueprint tier | When to use it | Examples |
| ---------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Enterprise** | Default for all shared configuration | Python 3.12, Node 20, Go 1.22, Rust, security scanners, corporate CA certs, internal CLIs, proxy config, shared registry tokens |
| **Organization** | Only when something should **not** apply to every org | A team-specific private registry, tools restricted to certain teams, org-specific linting config |
| **Repository** | Per-repo setup that runs in the repo directory | `npm install`, `uv sync`, project-specific knowledge items, repo-level `.envrc` files |
**The only reason to use an org blueprint instead of the enterprise blueprint** is when you specifically don't want something applied to every organization. For example, if one team uses a private npm registry that other teams shouldn't have access to, that registry configuration belongs in that team's org blueprint, not the enterprise blueprint.
If something applies to all orgs, it goes in enterprise. If it's repo-specific, it goes in the repo blueprint. The org tier exists only for the exceptions in between.
Don't put repo-specific commands (like `npm install`) in the enterprise or org blueprint. Those tiers run in the home directory, not in the repo directory, so repo-specific commands will fail or install in the wrong place.
### Use knowledge items at the right tier
Knowledge items are additive across tiers. Devin sees all of them. Use this to layer guidance:
* **Enterprise knowledge**: Company-wide coding standards, security review requirements, internal documentation links.
* **Org knowledge**: Team conventions, shared library usage patterns, team-specific deployment procedures.
* **Repo knowledge**: Lint, test, and build commands for the specific project.
## Secrets management at scale
Secrets cascade through the same tier hierarchy as blueprints, with more specific secrets taking precedence.
### Where to define secrets
| Secret scope | Use for | Examples |
| ---------------- | ---------------------------------- | ------------------------------------------------------------------------------------- |
| **Enterprise** | Credentials shared across all orgs | Internal registry tokens, corporate proxy auth, shared API keys for internal services |
| **Organization** | Team-specific credentials | Team deployment keys, API tokens for team services, team-specific registry auth |
| **Repository** | Repo-specific credentials | Per-project API keys, project-specific service accounts |
**Put secrets at the highest applicable tier.** If every org needs access to the internal npm registry, define the token as an enterprise secret once. Don't duplicate it across 50 org configs.
### Secret hygiene
* **Never put secrets in YAML.** Always use the secrets management UI. Secrets in YAML end up in logs, build artifacts, and audit trails.
* **Rotate secrets regularly.** When you rotate a secret in the UI, the new value takes effect on the next build. No blueprint changes needed.
* **Use descriptive names.** `INTERNAL_NPM_TOKEN` is better than `TOKEN_1`. Other admins (and your future self) need to understand what each secret is for.
* **Audit secret usage.** Periodically review which secrets exist and whether they're still needed. Remove unused secrets to reduce your attack surface.
If an org secret and an enterprise secret have the same name, the org secret wins. Same for repo secrets overriding org secrets. Use this intentionally. For example, an org might override the enterprise registry token with a team-specific token that has different permissions.
## Build health monitoring
At enterprise scale, build failures are inevitable. The key is catching them early and resolving them quickly.
### Establish a review cadence
Check build health weekly across all organizations. Look for:
* **Failed builds**: Critical failures in enterprise or org blueprints that block all repos.
* **Partial builds**: Some repos failing. Often a sign of a dependency issue or a stale blueprint.
* **Stale builds**: Orgs whose latest build is unusually old, which may indicate a stuck build queue.
### Respond to enterprise blueprint failures
If an enterprise blueprint change causes widespread failures:
1. **Assess the blast radius.** Check how many orgs are affected on the Rollout page.
2. **Revert the enterprise blueprint** to the last known-good blueprint. Save immediately. This triggers rebuilds across all affected orgs.
3. **Investigate in isolation.** Test your changes against a single pilot org before re-rolling them out.
Don't leave a broken enterprise blueprint in place while debugging. Every minute it's broken, orgs are getting failed builds.
### Partial builds are a signal
A partial build means some repos in an org succeeded while others failed. This is usually caused by:
* A repo-specific dependency issue (broken lock file, removed package)
* A missing system library that only one project needs
* A stale blueprint that hasn't been updated to match repo changes
Partial builds still produce usable snapshots for the repos that succeeded. But investigate the failures. They tend to accumulate if ignored.
## When to pin builds
Build pinning freezes an org's environment to a specific snapshot. Use it deliberately.
### Good reasons to pin
* **Critical release in progress.** You need a stable, known-good environment for the next 48 hours while shipping a release.
* **Active debugging.** You're investigating a build issue and don't want auto-updates changing things under you.
* **Rollback.** A new build introduced a regression and you need to revert immediately while you fix the blueprint.
### Bad reasons to pin
* **Avoiding a fix.** If a build is broken, fix the blueprint. Pinning masks the problem, and since pins don't auto-expire, a forgotten pin can leave you running a stale environment indefinitely.
* **"Just in case."** Auto-updates keep dependencies fresh and catch issues early. Turning them off for no specific reason just delays problems.
You can only pin builds less than **7 days old**. Once pinned, the pin stays active until manually removed. It does not expire. A forgotten pin means your team is running on an increasingly stale snapshot.
## Migrating your enterprise
For the recommended phased migration playbook (from initial testing through full rollout), see [Migrating your enterprise](/enterprise/environment-management/rollout#recommended-migration-playbook).
## Common architectural patterns
Different enterprise structures call for different blueprint strategies.
### Monorepo organizations
**Setup**: One org with a single large repository containing multiple projects.
**Approach**: The **enterprise blueprint** handles all shared tooling (runtimes, global CLI tools, registries). Put project-specific setup (`npm install` in the frontend directory, `uv sync` in the backend directory) in the **repo blueprint**. The org blueprint is only needed if this org has tools or config that shouldn't apply to other orgs.
Use a single blueprint with subshells to handle multiple projects:
```yaml theme={null}
# Repo blueprint for a monorepo
maintenance:
- name: "Frontend dependencies"
run: (cd frontend && npm install)
- name: "Backend dependencies"
run: (cd backend && uv sync)
knowledge:
- name: lint
contents: |
Frontend: cd frontend && npm run lint
Backend: cd backend && uv run ruff check .
```
### Multi-repo organizations
**Setup**: An org with multiple related repositories (e.g., a microservices team).
**Approach**: Put shared tooling and registry configuration in the **org blueprint**. Each repo has its own blueprint with just `maintenance` and `knowledge`. This avoids duplicating setup commands across repos.
### Shared infrastructure org
**Setup**: A platform or DevOps org that provides shared services used by other teams.
**Approach**: The **enterprise blueprint** covers the common base. The shared infra org's blueprint installs platform-specific tools (Terraform, kubectl, cloud CLIs) that its repos need. Other orgs don't get these tools. They only get what's in the enterprise blueprint plus their own org config.
### Isolated project orgs
**Setup**: Independent teams with no shared tooling beyond the basics.
**Approach**: The **enterprise blueprint** still handles the common base: all your standard language runtimes, security tools, and corporate infrastructure. Each org uses its own blueprint only for tools or config that are genuinely unique to that team and shouldn't be shared with others. Repo blueprints handle per-project setup.
When in doubt, put it in the enterprise blueprint. If an org has a specific reason to exclude something (conflicting tool versions, restricted access), they can override it at the org level. It's easier to have a comprehensive enterprise baseline than to duplicate setup across many org blueprints.
# Enterprise environment overview
Source: https://docs.devin.ai/enterprise/environment-management/overview
Enterprise-wide environment management: blueprint hierarchy, enterprise blueprint configuration, secrets, and enterprise-wide rebuilds.
**Prerequisites:** This guide assumes familiarity with declarative environment configuration. See [Declarative environment configuration](/onboard-devin/environment/blueprints) for an introduction.
**Before configuring environments**, ensure your SCM provider is connected (**Enterprise Settings > Integrations**) and each organization has been granted access to its repositories (**Enterprise Settings > Repository Permissions**). Orgs cannot add repos to their environment until access is explicitly granted. See [Git Integrations](/enterprise/integrations/git-integrations) for details.
Enterprise admins can define a **base environment** that applies to every organization in the enterprise. This gives you centralized control over the tools, runtimes, and security infrastructure that Devin uses, while still letting individual orgs and repos customize their own setup on top.
## The blueprint hierarchy
Devin's environment configuration follows a three-tier hierarchy. Each tier builds on the one above it:
```
+-----------------------------------------+
| Enterprise Blueprint |
| Python 3.12, Node 20, security tools |
+-----------------------------------------+
| Organization Blueprint |
| private npm registry, team linting |
+-----------------------------------------+
| Repository Blueprint |
| npm install, project-specific config |
+-----------------------------------------+
```
| Tier | Who manages it | Scope |
| ---------------- | ------------------------- | ----------------------------------- |
| **Enterprise** | Enterprise admins | All organizations, all repositories |
| **Organization** | Org admins | All repositories in the org |
| **Repository** | Org admins or repo config | A single repository |
The relationship is **additive**: org and repo blueprints build on top of the enterprise blueprint, they don't replace it. During every build, the enterprise blueprint runs first, establishing the baseline. Then the org blueprint runs, adding team-specific config. Finally, each repo's blueprint runs with project-specific setup.
See [Blueprint scope](/onboard-devin/environment/blueprints#blueprint-scope) for how org and repo blueprints relate.
## Configuring the enterprise blueprint
Navigate to **Settings > Devin's base environment** to define the enterprise blueprint. This uses the same format as org and repo blueprints, with `initialize`, `maintenance`, and `knowledge` sections. Enterprise and org blueprints also support a [`post-build`](/onboard-devin/environment/blueprint-reference#post-build) section for commands that run after all repos are cloned and set up.
The enterprise blueprint runs **first** during every build, before org and repo blueprints. This means tools and runtimes installed at the enterprise level are available to all downstream blueprints.
## What to put in the enterprise blueprint
The enterprise blueprint is for tools and configuration that **every organization** needs. Common use cases:
### Standard language runtimes
Pin language versions across the enterprise so every team works with the same toolchain:
```yaml theme={null}
initialize:
- name: "Install Python 3.12"
uses: github.com/actions/setup-python@v5
with:
python-version: "3.12"
- name: "Install Node.js 20"
uses: github.com/actions/setup-node@v4
with:
node-version: "20"
- name: "Install Go 1.22"
uses: github.com/actions/setup-go@v5
with:
go-version: "1.22"
```
### Security tools and compliance scanning
Install scanners and audit tools that every project must use:
```yaml theme={null}
initialize:
- name: "Install security tools"
run: |
npm install -g snyk
pip install safety bandit
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh
```
### Internal CLI tools and utilities
Distribute company-specific tools to every environment:
```yaml theme={null}
initialize:
- name: "Install internal CLI"
run: |
curl -L https://internal.example.com/cli/latest/linux-amd64 \
-o /usr/local/bin/internal-cli
chmod +x /usr/local/bin/internal-cli
```
### Shared package registry configuration
Point package managers at your internal registries:
```yaml theme={null}
initialize:
- name: "Configure internal registries"
run: |
npm config set registry https://npm.internal.example.com/
pip config set global.index-url https://pypi.internal.example.com/simple/
```
### Corporate proxy and certificate setup
Install corporate CA certificates and configure proxy settings:
```yaml theme={null}
initialize:
- name: "Install corporate certificates"
run: |
cp "$FILE_CORPORATE_CA_CERT" /usr/local/share/ca-certificates/corporate-ca.crt
update-ca-certificates
echo 'export NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/corporate-ca.crt' >> ~/.bashrc
```
## How tiers interact
During a build, each tier's steps run in a fixed sequence. The output of earlier tiers is available to later ones. Tools installed at the enterprise level are ready to use in org and repo blueprints without reinstallation.
A build creates a new snapshot in this order:
```
1. Enterprise blueprint (runs in ~):
a. initialize
b. maintenance
2. Organization blueprint (runs in ~):
a. initialize
b. maintenance
3. Clone all repositories (up to 10 concurrent)
4. For each configured repo, in the order shown in Settings
(runs in ~/repos/):
a. initialize
b. maintenance
5. post-build (org- and enterprise-level; runs in ~)
6. Health check, then snapshot is saved
```
`post-build` steps run after every repo has been cloned and set up, so they can validate the fully assembled environment. A non-zero exit code from a `post-build` step fails the build and no snapshot is produced. See [`post-build`](/onboard-devin/environment/blueprint-reference#post-build) in the blueprint reference.
Tiers are **additive**: repo blueprints can use tools installed by the org or enterprise blueprint. Lower tiers cannot override what a higher tier set up. Builds typically take 5–15 minutes. Individual commands time out after 1 hour.
`knowledge` items from all tiers are collected and made available to Devin. If multiple tiers define a knowledge item with the same name, all of them are included. They don't overwrite each other.
## Enterprise secrets
Enterprise admins can define secrets at the enterprise level. These secrets are available as environment variables during **every** build and **every** session across **all** organizations, in enterprise, org, and repo blueprint steps alike.
Use enterprise secrets for credentials that are shared across the entire company:
* Internal package registry tokens
* Corporate proxy authentication
* Shared API keys for internal services
* License keys for enterprise tools
Enterprise secrets are managed in the **Secrets** tab within the enterprise blueprint editor. Navigate to **Settings > Devin's base environment** and switch to the **Secrets** tab to manage enterprise-wide secrets alongside your blueprint configuration.
Managing enterprise secrets requires the **ManageAccountResources** permission.
If an org secret has the same name as an enterprise secret, the org secret takes precedence. This lets individual organizations override enterprise-wide defaults when needed.
## Enterprise-wide rebuilds
Enterprise admins can trigger a rebuild that cascades to **all organizations**. This is useful when:
* You update the enterprise blueprint (e.g., upgrade Python from 3.11 to 3.12)
* You rotate an enterprise secret
* You need to refresh all environments after a security patch
Trigger an enterprise-wide rebuild from **Settings > Devin's base environment**. Each organization's build runs with the updated enterprise blueprint, followed by its own org and repo blueprints.
Enterprise-wide rebuilds respect each org's build queue. If an org already has a build in progress, the enterprise-triggered rebuild queues behind it. If a build is already queued, it gets cancelled and replaced by the enterprise-triggered one.
## Managing rollout across organizations
The enterprise admin controls which organizations use declarative configuration versus classic environment setup. The **Rollout** page provides visibility into adoption status across all orgs and lets you progressively migrate organizations.
See [Migrating your enterprise](/enterprise/environment-management/rollout) for a detailed walkthrough of the rollout states, per-org overrides, and a phased migration playbook.
## Related pages
* [Migrating your enterprise](/enterprise/environment-management/rollout)
* [Best practices](/enterprise/environment-management/best-practices)
* [Blueprint reference](/onboard-devin/environment/blueprint-reference)
* [Declarative environment configuration](/onboard-devin/environment/blueprints)
# Migrating your enterprise
Source: https://docs.devin.ai/enterprise/environment-management/rollout
Progressive rollout of declarative environment configuration across your enterprise: rollout states, per-org overrides, phased migration playbook, and monitoring.
Migrating an enterprise from classic environment setup to declarative configuration is a significant change. The Rollout page gives enterprise admins granular control over this transition. You can enable blueprints for a few pilot orgs, expand at your own pace, and roll back instantly if something goes wrong.
## Enterprise rollout states
The Rollout page presents a **Rollout mode** selector that controls how blueprints are available to organizations. There are three modes, plus an initial state before declarative environments are activated:
| State | What it means | Effect on organizations |
| ---------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Not enabled** | Declarative environments haven't been activated for the enterprise yet | No orgs see the environment pages. All orgs use classic setup. Contact your Cognition administrator to enable. |
| **Testing** | Only manually enabled organizations use declarative environments | Enterprise admin opts individual orgs in from the Rollout page. All other orgs remain on classic setup and see no changes. |
| **Available** | Org admins see a migration prompt and can switch on their own | Org admins on classic setup see a migration callout on their Machine Configuration page. They can self-service migrate without enterprise admin intervention. |
| **Enabled by default** | New organizations default to declarative environments | All new orgs start on blueprints. Existing orgs that were on classic setup with repos receive automatic classic overrides. |
The progression is: **Testing → Available → Enabled by default**. You can move between **Testing** and **Available** freely using the Rollout mode dropdown. However, **Enabled by default** is a permanent action that cannot be undone without a Cognition administrator.
**Enabled by default is permanent.** Once you activate this mode, it cannot be reverted to Testing or Available without contacting your Cognition administrator. Make sure your enterprise blueprint is fully validated and most orgs are on blueprints before enabling this mode.
### Testing mode details
In Testing mode, organizations that haven't been opted in continue to use classic setup and see no changes to their experience. The enterprise admin can opt individual orgs in from the Rollout page. Only those orgs switch to declarative configuration. This is the baseline mode when declarative environments are first activated for an enterprise.
### Available mode details
Available mode adds a migration nudge: org admins who are still on classic setup see a callout on their Machine Configuration page encouraging them to migrate to declarative configuration. This doesn't change their setup or give them access to the full environment configuration pages. It simply makes them aware that blueprints are available and provides a self-service path to opt in. This is useful for building awareness and letting org admins migrate at their own pace.
## Per-org overrides
Enterprise admins can override the rollout state for individual organizations directly in the per-org table on the Rollout page:
* **In Testing or Available mode**: Opt specific orgs **in** to blueprints. These orgs switch from classic setup to declarative configuration immediately.
* **In Enabled by default mode**: Opt specific orgs **out** back to classic setup. These orgs continue using their classic configuration.
Overrides are persistent. They survive mode changes. If you opt an org into blueprints during Testing mode, it stays on blueprints when you transition to Available or Enabled by default.
### Automatic classic overrides
When activating **Enabled by default**, a safety mechanism prevents disruption: any org that is currently on classic setup **and has repositories configured** automatically receives an explicit classic override. This means the transition doesn't change anything for orgs that are actively using classic setup. They continue as-is until you explicitly migrate them.
Orgs without repositories (or orgs already on blueprints) are unaffected by this guard.
## Recommended migration playbook
The best approach is to build and validate your configuration in isolation before opening it up to org admins. Don't do a big-bang migration. Start controlled, verify, then expand.
### Phase 1: Build and verify in isolation (Testing)
Start with the enterprise in **Testing** mode. Orgs cannot opt in on their own, so you have full control.
1. **Activate declarative environments** for the enterprise. Your Cognition administrator enables the feature, which puts the enterprise into Testing mode.
2. **Create a dedicated test org** for environment configuration testing. This org exists solely for validating your blueprints.
3. **Enable declarative configuration** for this test org only (via per-org override on the Rollout page).
4. **Configure your enterprise blueprint**: install all shared language runtimes, security tools, corporate certificates, internal CLIs, proxy settings, and registry auth. This is your base layer that every org will inherit.
5. **Configure an org blueprint** for the test org with any org-level tools or registry config.
6. **Add repository blueprints** for a representative set of repositories. Pick repos that cover your most common tech stacks.
7. **Verify end-to-end**: start Devin sessions on these repos and confirm everything works. Repos should be cloned, dependencies installed, lint/test/build commands running correctly, and all tools at expected versions.
Don't just check that builds succeed. A green build doesn't always mean a working environment. A missing PATH entry, wrong tool version, or missing registry auth can slip through. Always verify by running a real Devin session.
### Phase 2: Enable opt-in for org admins (Available)
Once you've confirmed that your enterprise → org → repo blueprint stack composes correctly and produces working environments:
1. **Communicate internally** to org admins that declarative configuration is available and ready.
2. **Switch to Available mode**: change the Rollout mode dropdown from Testing to Available. Org admins on classic setup now see a migration callout encouraging them to migrate.
3. **Org admins can now migrate** their own organizations. Because the enterprise blueprint already provides the base layer (runtimes, tools, certs, registries), org admins only need to configure what's specific to their team and repos.
Each org admin can use the **migration assistant** to make this easy. Devin can inspect the org's existing snapshot and automatically generate equivalent blueprint configuration. See [Migrating to declarative configuration](/onboard-devin/environment/migration) for the step-by-step flow.
Build a library of template blueprints for your most common tech stacks (Node.js, Python, Java, Go, multi-language monorepos) and share them internally so org admins don't start from scratch. The [Template library](/onboard-devin/environment/templates) is a good foundation.
### Phase 3: Expand and clean up (Enabled by default)
1. **Activate Enabled by default** when most orgs are on blueprints. This is a permanent action — orgs that were on classic setup with repos get automatic classic overrides, so nothing changes for them.
2. **New orgs** created after this point start on blueprints by default.
3. **Monitor the Rollout page** for build health across all orgs. Filter by "Classic" to see who hasn't migrated yet.
4. **Work with remaining org admins** to migrate stragglers. The migration assistant makes this straightforward.
5. **Remove classic overrides** once all orgs are verified on blueprints.
Classic configuration is always preserved. Nothing is deleted when an org switches to blueprints. If something goes wrong, enterprise admins can switch any org back to classic setup from the Rollout page using per-org overrides.
### Accelerated migration strategy
For enterprises that want to move quickly, here's an approach that minimizes the per-org migration burden:
1. **Start in Testing mode** (so each org can be opted in individually).
2. **Configure the enterprise blueprint first.** Get admins to set up the enterprise blueprint with shared runtimes, tools, certificates, and registry configuration. This is the base layer that all orgs will inherit.
3. **Switch to Available mode.** This enables the migration nudge so org admins see a callout on their Machine Configuration page and can self-service migrate.
4. **Blast documentation** through whatever internal channels exist (Slack, email, wiki) and encourage org admins to opt in on their own. The migration assistant makes this self-service for org admins.
5. **Auto-enable for orgs with 0 repositories currently configured.** These orgs have nothing to migrate — there's no risk in switching them to blueprints since they don't have an existing classic setup to preserve.
6. **Progressively migrate remaining orgs one by one.** With the enterprise blueprint already configured, each org migration only needs to add org-specific and repo-specific configuration on top. This is much simpler than migrating from scratch.
7. **Activate Enabled by default** once most orgs are migrated. New organizations created after this point start with blueprints enabled.
This approach frontloads the enterprise blueprint configuration (the highest-leverage work) and then lets individual orgs migrate at their own pace with minimal effort.
## Rolling back
Things don't always go smoothly. The rollout system supports rollback at every level.
### Per-org rollback
Enterprise admins can toggle any individual org back to classic setup from the Rollout page:
* The org **immediately reverts** to using its classic setup snapshot.
* Classic configuration is **preserved**. Nothing is lost when an org switches to blueprints, so switching back is safe.
* Active sessions are not affected. The change takes effect on the next session.
### Mode rollback
Enterprise admins can switch between **Testing** and **Available** freely using the Rollout mode dropdown. This is useful if you want to pause self-service migration while you investigate an issue.
**Enabled by default cannot be reverted** by the enterprise admin. If you need to revert from Enabled by default, contact your Cognition administrator. Per-org overrides can still be used to switch individual orgs back to classic setup at any time.
Rollback doesn't delete blueprints or classic configurations. Both are preserved regardless of which mode is active, so you can switch back and forth between Testing and Available without losing work.
## Monitoring rollout health
The Rollout page provides a dashboard for tracking migration progress across your enterprise.
### KPI row
At the top of the page, summary metrics give you a quick read on rollout status:
* **Blueprint orgs**: Number of organizations currently on blueprints
* **Rollout percentage**: Percentage of orgs on blueprints out of the total
* **Build health**: Aggregate build status across blueprint orgs
### Per-org table
Below the KPIs, a detailed table shows every organization:
| Column | Description |
| ------------------- | ---------------------------------------------------------------------- |
| **Organization** | Org name |
| **State** | Current mode: Blueprints or Classic |
| **Override** | Whether the org's state is an explicit override vs. enterprise default |
| **Classic repos** | Number of repos with classic setup configuration |
| **Blueprint repos** | Number of repos with blueprints |
| **Latest build** | Status of the most recent build (Success, Partial, Failed, etc.) |
### Filtering
Filter the table by:
* **All**: Every org in the enterprise
* **Blueprints**: Orgs currently on blueprints
* **Classic**: Orgs currently on classic setup
* **Overrides**: Orgs with explicit state overrides (either direction)
## Concurrency safety
State transitions are protected against simultaneous changes. If another admin changes the enterprise state between when you loaded the page and when you submit your change, the request is rejected with a conflict error.
This prevents accidental overwrites when multiple enterprise admins act at the same time. If your change is rejected, refresh the page to see the current state and resubmit if still appropriate.
## Audit logging
All rollout state transitions are recorded in audit logs:
* Enterprise mode changes (Testing → Available, activation of Enabled by default, etc.)
* Per-org override changes (org opted in, org opted out, override removed)
* Which admin made the change and when
These logs are available through your enterprise's standard audit log interface.
# AI Guardrails
Source: https://docs.devin.ai/enterprise/features/ai-guardrails
Configure safety guardrails to screen user messages and protect against prompt injection, data exfiltration, and policy violations
AI Guardrails allow enterprise administrators to define safety boundaries for how users interact with Devin across the organization. Guardrails automatically screen incoming user messages — including initial messages, follow-up messages, and PR comments — to detect prompt injection, data exfiltration attempts, and policy violations before Devin processes them.
## Overview
Guardrails run as an additional layer of oversight on messages sent to Devin. They analyze user messages in real time and can:
* **Log** suspicious messages for review (`log_only`)
* **Warn** the user with a visible banner while still processing the message (`warn_user`)
* **Block** messages that violate organization policies (`block_message`)
* **Kill** the session entirely when a critical violation is detected (`kill_session`)
## Configuring Guardrails
Enterprise administrators can configure guardrails from the enterprise settings page or the organization settings page at **Settings > Guardrails**. The guardrails configuration page provides:
* **Organization filter** — View and manage guardrails for specific organizations within the enterprise
* **Preset guardrails** — Enable or disable available guardrails and choose the action to take on violation (`log_only`, `warn_user`, `block_message`, or `kill_session`)
* **Session links** — Each guardrail event links back to the originating session for investigation
## Guardrail Events
When a guardrail is triggered, Devin records the event with details including:
* The user message that triggered the guardrail
* The guardrail rule that was matched
* The action taken (`log_only`, `warn_user`, `block_message`, or `kill_session`)
* A link to the session where the event occurred
Guardrail events appear in the [audit logs](/api-reference/v3/audit-logs/enterprise-audit-logs) with the `ai_guardrail_violation` action type, enabling automated monitoring and alerting. You can also retrieve guardrail events programmatically through the [guardrail violations API](/api-reference/v3/guardrail-violations/enterprise-guardrail-violations).
## Use Cases
Common guardrail configurations include:
* **Detecting prompt injection** — Identify and block user messages that attempt to override Devin's instructions or manipulate its behavior
* **Preventing data exfiltration** — Flag or block messages that attempt to instruct Devin to send sensitive data to unauthorized destinations
* **Enforcing policy compliance** — Screen user requests to ensure they align with organizational security and usage policies
AI Guardrails is an enterprise feature. Contact your account team to learn more about enabling guardrails for your organization.
# Getting Started with Devin Enterprise
Source: https://docs.devin.ai/enterprise/getting-started/get-started
Step-by-step guide for configuring Devin Enterprise, including organizations, user roles, SSO, and integrations.
## Overview
Devin Enterprise gives you fine-grained control over admin, security, and provisioning of individual users. This guide walks you through setting up Devin Enterprise, including environment configuration, tool integration, and account provisioning.
Devin's setup process mirrors the onboarding of a new engineer—it requires access to the same services and tools as your development team.
This guide does not cover **Devin's deployment**. For deployment details, refer to the [Deployment Guide](/enterprise/deployment/overview).
## Understanding Organizations
Organizations in Devin Enterprise are logical groupings that provide structure and boundaries for your development teams. Each organization operates as a self-contained unit with its own shared Devin machine, repository access, and member permissions.
Dive deeper into organization structure, planning patterns, and best practices for mapping your teams to Devin organizations.
### Creating Organizations
You can create multiple organizations within your enterprise to segment teams, projects, or departments.
To create an organization:
1. Go to **Enterprise Settings > Organizations**
2. Click **Add Organization**
3. Provide a name and click **Add**
## Members and Roles
### User Roles
There are three types of default users on Devin Enterprise, each with varying levels of permissions.
| **Role** | **Permissions** |
| :---------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Enterprise Admins** | - Full access to all enterprise settings - Create organizations - Invite individuals to organizations - Connect source code repository to account - Manage billing |
| **Organization Admins** | - Invite members to their organization |
| **Members** | - Use Devin and have full access within their organization - Execute Devin sessions |
### Custom Roles
For more granular access control, Devin Enterprise supports [Custom Roles & RBAC](/enterprise/security-access/custom-roles). You can create custom roles with specific permissions at both the organization level (controlling access within a specific organization) and account level (applying across the entire enterprise).
### IdP Groups
Custom roles can be automatically assigned based on SSO IdP group membership. See [IdP Group Integration](/enterprise/security-access/idp-groups) for detailed configuration steps.
### Adding Members
After creating an organization, you can add members and assign them to specific organizations.
1. Navigate to **Enterprise Settings > Members**
2. Click **Add Members**
3. Enter the email address of each user you'd like to invite
Users will receive an email invitation to join your Devin organization.
### Managing Member Access
To manage member access to organizations:
1. Go to **Enterprise Settings > Members**
2. Use the checkbox next to a user's name to select one or more users
3. Use the action buttons at the bottom of the page (**Change role**, **Add organizations**, **Remove organizations**, or **Remove**) to manage the selected users
To verify which organizations a user belongs to, click the organization count (e.g., "2 organizations") in the table to expand and view their organization memberships.
## Single Sign-On (SSO)
Your enterprise admin can set up authentication to Devin via SSO. We support:
* [Okta](/enterprise/security-access/sso/okta)
* [Microsoft Entra ID](/enterprise/security-access/sso/azure)
* [SAML](/enterprise/security-access/sso/saml)
* [OIDC (Generic)](/enterprise/security-access/sso/oidc)
## Integrations
### Source Code Access
Your enterprise admin must connect source code using one of our supported integrations. This can be done in **Enterprise Settings > Connected Accounts**:
* [GitHub](/integrations/gh)
* [GitHub Enterprise](/enterprise/integrations/github-enterprise-server)
* [GitLab](/integrations/gitlab)
* [Bitbucket](/integrations/bitbucket)
* [Azure DevOps](/enterprise/integrations/azure-devops)
Learn how to grant organizations access to specific repositories or entire GitHub groups using Group and Repository Permissions.
### Slack & Microsoft Teams Integration
Tag @Devin directly in Slack channels or Microsoft Teams to start sessions, ask questions, and collaborate with your team. Devin responds in-thread with updates and can be controlled using inline keywords like `!ask`, `mute`, and `sleep`. See the [Slack integration guide](/integrations/slack) or [Microsoft Teams integration guide](/integrations/microsoft-teams) for setup instructions.
## Next Steps
Explore deployment models including Enterprise Cloud and Customer Dedicated Deployment.
Learn about Devin's security practices, data privacy, and compliance certifications.
Browse practical examples across engineering workflows.
For enterprise-level setup and support, contact our [Enterprise Sales Team](mailto:enterprise@cognition.ai).
# Understanding Organizations
Source: https://docs.devin.ai/enterprise/getting-started/organizations
Learn how to structure and manage organizations in Devin Enterprise
## What are Organizations?
Organizations in Devin Enterprise are logical groupings that provide structure and boundaries for your development teams. Each organization operates as a self-contained unit with its own shared Devin machine, repository access, and member permissions.
### Key Characteristics
**Shared Devin Machine**: Each organization has its own dedicated Devin machine that all members share. This ensures consistent environment setup and allows team members to collaborate on the same development context.
**Repository Isolation**: All repositories granted to an organization are accessible to all members within that organization. Repository access is managed at the organization level, not per individual user.
**Member Boundaries**: Users can belong to multiple organizations, but their access and permissions are scoped to each organization independently.
**Billing Separation**: Each organization has its own ACU (Agent Compute Unit) limits and usage tracking, enabling clear cost allocation across teams.
## Organization Structure
### Enterprise Hierarchy
```
Enterprise Account
├── Organization A (E-commerce Platform)
│ ├── Members: full-stack developers, product managers
│ └── Repositories: web-app, mobile-app, api-service, shared-components
├── Organization B (Analytics Platform)
│ ├── Members: data engineers, backend developers
│ └── Repositories: data-pipeline, analytics-api, reporting-dashboard
└── Organization C (Infrastructure & Security)
├── Members: platform engineers, security engineers
└── Repositories: infrastructure, deployment-scripts, security-tools
```
### Access Control Flow
1. **Enterprise Admin** creates organizations and manages overall enterprise settings
2. **Organization Admins** invite members to their specific organizations
3. **Members** access Devin and repositories within their assigned organizations
4. **Repository permissions** are granted by Enterprise Admins to organizations
## Planning Your Organization Structure
### Recommended Mapping Pattern
An effective approach is to **map each Devin organization to a GitHub/GitLab team**, which often aligns with your Identity Provider (IdP) groups and logical business applications. This provides a systemic way to scale up usage and manage access to repositories.
#### Example Mapping
| **GitHub Team** | **Devin Organization** | **IdP Group** | **Business Function** |
| :------------------- | :--------------------- | :------------------ | :------------------------------------------- |
| `ecommerce-platform` | E-commerce Platform | `product-ecommerce` | Customer shopping experience (web, API, etc) |
| `analytics-platform` | Analytics Platform | `product-analytics` | Data insights and reporting |
| `payments-team` | Payments Platform | `product-payments` | Payment processing and billing |
| `platform-infra` | Infrastructure | `eng-platform` | Shared infrastructure and security |
### Decision Framework
When planning your organization structure, consider these factors:
**Question**: How are your development teams currently organized?
**Guidance**: Create organizations that mirror your existing team structure. Teams that regularly collaborate on the same codebase should typically share an organization.
**Example**: If your frontend and backend teams work closely on the same product, consider a single "Product Team" organization rather than separate frontend/backend organizations.
**Question**: Which repositories do different teams need access to?
**Guidance**: Group teams that need access to the same set of repositories. Remember that all organization members can access all organization repositories.
**Example**: If both your web and mobile teams need access to a shared design system repository, they might belong to the same organization.
**Question**: How do you want to track and allocate Devin usage costs?
**Guidance**: Organizations provide natural cost centers for ACU usage tracking. Align organizations with your budgeting structure.
**Example**: If you budget separately for each product line, create organizations that match those product boundaries.
## Next Step
**Set Up Your First Organization**: Learn how to [create and configure organizations](/enterprise/getting-started/get-started#creating-organizations) in your enterprise account to start organizing your development teams.
# Artifacts
Source: https://docs.devin.ai/enterprise/integrations/artifacts/overview
Accessing Your Artifacts
To use artifacts during snapshot setup, you will need to authenticate with them during repository configuration.
If you need to store secrets for artifact authentication, you can either save them directly to the machine file system (e.g., in a file or by exporting environment variables) or use [Devin's Secret Manager](/product-guides/secrets). Below are sections for AWS, Azure, and Jfrog
If your artifacts are on a private network, please see [Deployment Options](/enterprise/deployment/overview)
## Devin Machine Setup
To integrate with your artifact repositories, you'll need to configure your Devin machine with the appropriate credentials and tools. There are two main ways to accomplish this:
1. Use the integrated Terminal within Devin to install and configure artifact repository tools directly on the machine.
2. Use the **Setup Agent** tab (located in the center column of Devin's Machine during repo setup) and prompt Devin to assist with the setup.
## Jfrog Artifactory
### Step 1: Downloading CLI
```bash theme={null}
curl -fL https://getcli.jfrog.io | sh
sudo mv jfrog /usr/local/bin/
jfrog config add
jfrog rt config
```
### Step 2: Download Artifact
```bash theme={null}
#!/bin/bash
# Set variables for your Artifactory instance and artifact details
ARTIFACTORY_URL="https://your-artifactory-instance.jfrog.io/artifactory" # Change this to your Artifactory URL
REPO="my-repository" # Replace with your repository name
ARTIFACT_PATH="my-artifact/my-package/1.0.0/my-package-1.0.0.jar" # Path to your artifact in Artifactory
OUTPUT_DIR="./downloads" # Directory to save downloaded artifact
## Step 1: Download the artifact
echo "Downloading artifact $ARTIFACT_PATH from $ARTIFACTORY_URL"
jfrog rt dl "$REPO/$ARTIFACT_PATH" "$OUTPUT_DIR/"
## Step 2: Check if download was successful
if [ $? -eq 0 ]; then
echo "Artifact downloaded successfully to $OUTPUT_DIR/"
else
echo "Failed to download the artifact."
exit 1
fi
```
## AWS Code Artifact
### Step 1: Downloading CLI
```bash theme={null}
#!/bin/bash
# Variables
ROLE_NAME="robot-artifact-iam-role"
POLICY_ARN="arn:aws:iam::aws:policy/AWSArtifactReadOnlyAccess"
KEY_PAIR_NAME="robot-artifact-key-pair"
# Step 1: Create IAM Role for AWS Artifact
echo "Creating IAM Role: $ROLE_NAME"
aws iam create-role \
--role-name "$ROLE_NAME" \
--assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Principal": {
"Service": "artifact.amazonaws.com"
}
}
]
}' > create_role_output.json
# Check if IAM Role was created successfully
if [ $? -eq 0 ]; then
echo "IAM Role $ROLE_NAME created successfully."
else
echo "Failed to create IAM Role $ROLE_NAME."
exit 1
fi
# Step 2: Attach Policy to Role for Artifact Access
echo "Attaching AWSArtifactReadOnlyAccess policy to IAM Role $ROLE_NAME"
aws iam attach-role-policy \
--role-name "$ROLE_NAME" \
--policy-arn "$POLICY_ARN"
if [ $? -eq 0 ]; then
echo "Policy attached successfully."
else
echo "Failed to attach policy."
exit 1
fi
# Step 3: Create IAM Access Keys (for programmatic access)
echo "Creating Access Keys for IAM Role: $ROLE_NAME"
aws iam create-access-key \
--user-name "$ROLE_NAME" \
> access_keys_output.json
# Check if keys were created
if [ $? -eq 0 ]; then
echo "Access keys created successfully."
ACCESS_KEY_ID=$(jq -r '.AccessKey.AccessKeyId' access_keys_output.json)
SECRET_ACCESS_KEY=$(jq -r '.AccessKey.SecretAccessKey' access_keys_output.json)
echo "Access Key ID: $ACCESS_KEY_ID"
echo "Secret Access Key: $SECRET_ACCESS_KEY"
else
echo "Failed to create access keys."
exit 1
fi
# Step 4: Display the IAM Role and Access Key Information
echo "IAM Role $ROLE_NAME has been created with the policy: $POLICY_ARN"
echo "Access Key ID: $ACCESS_KEY_ID"
echo "Secret Access Key: $SECRET_ACCESS_KEY"
```
### Step 2: Downloading Artifact
```bash theme={null}
#!/bin/bash
# Variables
ARTIFACT_ID="example-artifact-id" # Replace with the actual Artifact ID
# Step 1: Get Artifact URL for downloading the report
echo "Fetching artifact download URL for Artifact ID: $ARTIFACT_ID"
DOWNLOAD_URL=$(aws artifact describe-artifact \
--artifact-id "$ARTIFACT_ID" \
--query "artifactDetails[0].downloadUrl" \
--output text)
```
## Azure Artifacts
### Step 1: Downloading CLI
```bash theme={null}
# Install Microsoft package repository
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
# Update package lists and install .NET SDK
sudo apt update
sudo apt install -y dotnet-sdk-8.0
dotnet tool install -g AzureArtifactsCredentialProvider
```
### Step 2: Generating a PAT
Next, you’ll need to generate a personal access token (PAT).
1. Log in to your [Azure DevOps portal](https://dev.azure.com).
2. In the top-right corner, click on your profile and select **Security**.
3. In the **Personal Access Tokens** section, click on **New Token**.
4. Set the scopes for the token. You’ll need at least the **"Packaging (read)"** scope to access Azure Artifacts.
5. Save your PAT securely, as you will not be able to view it again.
### Step 3: Configure .npmrc file
```bash theme={null}
echo "//pkgs.dev.azure.com/your-organization-name/_packaging/your-feed-name/npm/registry/:username=AzureDevOps" >> ~/.npmrc
echo "//pkgs.dev.azure.com/your-organization-name/_packaging/your-feed-name/npm/registry/:_password=$(echo -n your-PAT | base64)" >> ~/.npmrc
```
If you're working with NuGet, you will need the following:
```bash theme={null}
mkdir -p ~/.nuget
cat < ~/.nuget/nuget.config
EOL
```
If you need Docker artifacts from Azure:
```bash theme={null}
echo your-PAT | docker login https://your-organization-name.azurecr.io --username your-username --password-stdin
```
To get started with Devin Enterprise, contact our [enterprise sales team](mailto:enterprise@cognition.ai).
# Azure DevOps
Source: https://docs.devin.ai/enterprise/integrations/azure-devops
Work with Devin directly in your Azure DevOps repositories
Devin also supports connecting to Azure DevOps via a Microsoft Entra service principal, which does not require a dedicated service account with elevated directory admin privileges. Depending on your requirements, that flow may be a better fit — see [Azure DevOps (Service Principal)](/enterprise/integrations/azure-devops-service-principal).
## Why integrate Devin with Azure DevOps?
Integrating Devin with your Azure DevOps organization allows Devin to clone repositories, create pull requests, and collaborate effectively with your team. This integration enables Devin to work seamlessly within your existing development workflow.
Unlike some other SCM integrations, Azure DevOps does not display third-party apps in the same way. Instead, all connection management is handled inside Devin under **Enterprise Settings > Integrations**.
## Prerequisites
Before setting up the Azure DevOps integration, you will need to:
1. **Create a dedicated Azure DevOps user for Devin** - Create a new Azure DevOps account specifically for Devin (e.g., `devin@yourcompany.com`). This dedicated service account provides cleaner access management and audit trails.
2. **Grant the Devin user a sufficient admin role** - The new Devin service account must be able to grant admin consent for the tenant (Application Administrator, Cloud Application Administrator, or Global Administrator). Microsoft restricts third-party application access unless an admin with sufficient privileges grants tenant-level consent.
3. **Prepare for the connection flow** - To complete the integration, you will need to be:
* Signed into **Devin** with your personal account
* Signed into **Azure DevOps** with the Devin service account (the new account that can grant admin consent for your tenant)
Both browser sessions must be active during the integration setup process—your Devin account to initiate the connection, and the Devin service account in Azure DevOps to authorize the OAuth consent.
## Authentication and Permissions
Devin uses OAuth 2.0 via Microsoft's MSAL (Microsoft Authentication Library) to connect to Azure DevOps. The Devin service account must be able to grant admin consent for the tenant (Application Administrator, Cloud Application Administrator, or Global Administrator) to complete the OAuth flow. Azure DevOps works through service accounts, so Devin connects using the authorized Devin user identity rather than a registered app.
### RBAC and Permission Model
Devin's integration with Azure DevOps is built with a strict Role-Based Access Control (RBAC) model that separates authentication and authorization. This ensures that Devin only accesses repositories explicitly allowed by enterprise admins.
When you connect Azure DevOps to Devin:
1. A connection record is created with the encrypted refresh token, linked to the user identity
2. Devin generates permissions records to define which organizations, projects, and repositories are accessible
3. At runtime, checks are performed across all repos and compared to the permissions list to enforce boundaries
For enterprise customers, permissions can be replicated across organizations, and all repository-level access is managed via the **Devin Enterprise UI** under Integrations.
## Azure DevOps Hierarchy
Azure DevOps uses a three-level hierarchy: **Organization > Project > Repository**. Devin handles this structure internally and can discover and interact with repositories at any level, as long as the connected user has access.
## Setting up the Integration
1. **Sign into both accounts:**
* Sign into your Devin account at [app.devin.ai](https://app.devin.ai)
* In a separate browser or incognito window, sign into Azure DevOps with the Devin service account (the account that can grant admin consent for your tenant)
2. In your Enterprise Devin account, navigate to [**Settings > Enterprise Settings > Integrations**](https://app.devin.ai/settings/integrations)
3. Once on the Integrations page, click the **Connect to Azure DevOps** button.
4. This will open up a new browser tab, asking you to grant Devin permission to your Azure DevOps Organization. **Ensure you are signed in with the Devin service account** (the account that can grant admin consent for your tenant).
5. Once you have granted permissions, you will see your Azure DevOps integration, and your connected Repositories, back on the Integrations page in Enterprise Settings
6. Now that Devin has access to your Azure DevOps, you can grant permissions to any/all Sub-Organizations within your Enterprise account. To do this, select **Git Permissions** in your Azure DevOps integration, choose a Sub-Organization, and grant permissions either at the Group or Repository level.
7. For each Organization that has been granted permissions, navigate to **Devin's Settings > Devin's Machine**, click **+ Repository**, and integrate the repositories into Devin's Machine.
## What Devin Can Access
Devin's Azure DevOps integration is focused **only on Git operations**, including:
| Capability | Description |
| -------------------- | ---------------------------------------------- |
| List repositories | View available repositories and their metadata |
| Read branches | Access branch information and commit history |
| Create pull requests | Open new PRs for code changes |
| View pull requests | Access PR events, comments, and status |
| Push code | Push new branches and commits to repositories |
## What Devin Cannot Access
The integration is deliberately scoped to Git-only functionality. Devin does **not** have access to:
* Work items (boards)
* Pipelines or builds
* Test plans
* Artifacts
* Wiki
* Service connections
If your organization requires Devin to support these additional areas in the future, that would require broader OAuth scopes and new provider logic. Please contact [enterprise@cognition.ai](mailto:enterprise@cognition.ai) to discuss your requirements.
## Security Considerations
The system is designed around the principle of least privilege:
* **OAuth provides capability, RBAC enforces boundaries** - OAuth grants the technical ability to access Azure DevOps, but an additional layer of git permissions enforces the actual access boundaries
* **Explicit access only** - Devin never accesses repos or projects that are not explicitly granted in the Enterprise UI
* **Encrypted credentials** - All refresh tokens are encrypted and securely stored
* **Audit trail** - Using a dedicated service account makes it easier to track Devin's activity in your Azure DevOps audit logs
* **Branch policies respected** - Devin's PRs are subject to the same branch policies and review requirements as any other contributor
## Best Practices
* **Use the dedicated Devin service account** - Always use the dedicated Azure DevOps account created for Devin rather than connecting with a personal account
* **Enable branch policies** - Set up branch policies in Azure DevOps to ensure all changes go through proper review processes before being merged
* **Use repository-level permissions** - Grant Devin access only to the specific repositories it needs, rather than organization-wide access
* **Monitor access logs** - Regularly review Azure DevOps audit logs for Devin's activity
* **Document your setup** - Keep internal documentation of which repositories Devin has access to and why
We recommend setting up branch policies in Azure DevOps to ensure all changes go through proper review processes before being merged.
If your Microsoft Entra ID is integrated with your organization's HRIS (Human Resources Information System), additional configuration steps may be required to complete the Azure DevOps integration. Please contact the [Devin support team](mailto:enterprise@cognition.ai) for assistance with advanced setup.
## Troubleshooting
**OAuth consent fails:**
* Verify that the Devin service account can grant admin consent for the tenant (requires Application Administrator, Cloud Application Administrator, or Global Administrator role)
* Check that your Microsoft Entra ID tenant allows third-party application consent
* Ensure you're signed into Azure DevOps with the Devin service account (not your personal account) when completing the OAuth flow
**Devin cannot see my repositories:**
* Verify that the Devin service account has access to the repositories in Azure DevOps
* Check that repository permissions have been granted in Devin's Enterprise Settings
* Ensure the repositories have been added to Devin's Machine
**Pull request creation fails:**
* Confirm that the Devin service account has contributor permissions on the target repository
* Check that branch policies are not blocking the PR creation
* Verify that the target branch exists and is accessible
## Network Setup
If you have IP filtering enabled on your Azure DevOps instance, you will need to whitelist Devin's IP addresses.
For the most up-to-date list, see our [IP whitelisting documentation](/admin/common-issues#ip-whitelisting).
# Azure DevOps (Service Principal)
Source: https://docs.devin.ai/enterprise/integrations/azure-devops-service-principal
Connect Devin to Azure DevOps using a Microsoft Entra service principal
## Overview
Devin connects to Azure DevOps through a Microsoft Entra service principal. Your admin approves the Cognition-published **Cognition Azure DevOps Service Principal** application in your tenant, which creates a service principal that you then add to your Azure DevOps organization with the permissions you choose.
* Only `User.Read` is requested during Entra approval — this establishes identity only
* Entra approval alone does **not** grant access to repositories or code
* All repository access is controlled by permissions you assign in Azure DevOps
Unlike some other SCM integrations, Azure DevOps does not display third-party apps in the same way. All connection management is handled inside Devin under **Settings > Enterprise Settings > Integrations**.
## Prerequisites
Before setting up the Azure DevOps integration, ensure you have:
1. **Enterprise Devin account** with permission to manage integrations
2. **Microsoft Entra admin** who can grant admin consent for applications
3. **Azure DevOps organization admin** who can add users and assign permissions
## Setting Up the Integration
1. Sign into your Devin account at [app.devin.ai](https://app.devin.ai).
2. In a separate browser or incognito window, sign into Azure DevOps (needed for step 6).
3. In your Enterprise Devin account, navigate to **Settings > Enterprise Settings > Integrations** and select **Azure DevOps**.
4. Open the dropdown on the **Connect** button and select **Connect with service principal**.
5. You are redirected to Microsoft to grant Devin permission to your tenant. After approving, you are returned to the Azure DevOps integration page in Devin, which now shows an **Add organization with service principal** section.
* Approving creates a service principal in your Microsoft Entra tenant
* This step only requests `User.Read` — it does not grant access to repositories
6. In Azure DevOps, navigate to **Organization Settings > Users**:
* Click **Add Users** and add the service principal (`Cognition Azure DevOps Service Principal`)
* Select **Basic** for the Access level (Stakeholder is not sufficient — APIs require Basic)
* Add to all projects you want Devin to have access to
* Assign the service principal to the relevant Azure DevOps Groups (typically Project Contributors)
7. Back in Devin, in the **Add organization with service principal** section of the Azure DevOps integration page, enter the Azure DevOps organization name from the previous step and click **Add**.
8. In Devin, select **Git Permissions** in your Azure DevOps integration, choose a Sub-Organization, and grant permissions either at the Group or Repository level.
9. For each Organization that has been granted permissions, navigate to **Devin's Settings > Devin's Machine**, click **+ Repository**, and integrate the repositories.
## What Devin Can Access
Devin's Azure DevOps integration is scoped to **Git operations only**:
| Capability | Description |
| -------------------- | ---------------------------------------------- |
| List repositories | View available repositories and their metadata |
| Read branches | Access branch information and commit history |
| Create pull requests | Open new PRs for code changes |
| View pull requests | Access PR events, comments, and status |
| Push code | Push new branches and commits to repositories |
Devin does **not** have access to work items, pipelines, builds, test plans, artifacts, wiki, or service connections.
If your organization requires Devin to support additional Azure DevOps areas in the future, please contact [enterprise@cognition.ai](mailto:enterprise@cognition.ai) to discuss your requirements.
## Security Considerations
* **Minimal Entra permissions** — Only `User.Read` is requested. No directory-wide read access, group membership visibility, or administrative control.
* **Explicit authorization** — Entra approval alone grants no Azure DevOps access. All repository access must be explicitly assigned by your Azure DevOps admin.
* **Encrypted credentials** — All tokens are encrypted and securely stored.
* **Scoped access** — Permissions can be limited to specific projects, repositories, and operations via Devin's Enterprise UI.
* **Auditability** — Activity is logged in Entra sign-in logs and Azure DevOps audit logs.
* **Branch policies respected** — Devin's PRs are subject to the same branch policies and review requirements as any other contributor.
## Best Practices
* **Use repository-level permissions** — Grant Devin access only to the specific repositories and projects it needs, rather than organization-wide access.
* **Enable branch policies** — Set up branch policies in Azure DevOps to ensure all changes go through proper review processes before being merged.
* **Monitor audit logs** — Regularly review Azure DevOps audit logs and Entra sign-in logs for the service principal's activity.
## Troubleshooting
**Admin consent fails:**
* Verify the approving user has permission to grant admin consent for applications in your Entra tenant
* If your tenant restricts application consent, a Global Administrator or Cloud Application Administrator may need to grant consent
**Service principal not visible in Azure DevOps:**
* Verify the admin consent completed successfully in your Entra portal under **Enterprise Applications** (look for `Cognition Azure DevOps Service Principal`)
* Ensure the service principal has been explicitly added to your Azure DevOps organization under **Organization Settings > Users**
**Conditional Access / MFA blocking access:**
* If the service principal is subject to Conditional Access policies enforcing MFA, token refresh will fail silently. Create a Conditional Access exclusion for the service principal against the Devin application.
**Devin cannot see my repositories:**
* Verify that the service principal has been added to the Azure DevOps organization under **Organization Settings > Users**
* Confirm the access level is set to **Basic** (Stakeholder is insufficient for API access)
* Check that repository permissions have been granted in Devin's Enterprise Settings
* Ensure the repositories have been added to Devin's Machine
**Pull request creation fails:**
* Confirm that the service principal has Contributor permissions on the target repository
* Check that branch policies are not blocking the PR creation
* Verify that the target branch exists and is accessible
## Network Setup
If you have IP filtering enabled on your Azure DevOps instance, you will need to whitelist Devin's IP addresses.
For the most up-to-date list, see our [IP whitelisting documentation](/admin/common-issues#ip-whitelisting).
# Git Integrations
Source: https://docs.devin.ai/enterprise/integrations/git-integrations
Connect Devin with your source code repositories
## Enterprise Source Code Management Setup
In order for Devin to access your repositories, you must first connect your Source Code Management (SCM) provider to your Enterprise, and then grant a Devin Organization access to specific groups or repositories.
SCM Integrations can only be configured by Enterprise Admins.
Start in **Enterprise Settings > Integrations** to connect Devin to your source code.
For more information on configuring Git integrations, see the relevant documentation for your SCM provider:
Connect Devin with GitHub repositories.
Connect Devin with your GitHub Enterprise Server.
Connect Devin with Azure DevOps repositories.
Connect Devin with GitLab repositories.
Connect Devin with Bitbucket repositories.
## Repository Permissions
Connecting your Devin Enterprise to your SCM provider establishes a secure link that allows you to manage access permissions for different organizations and repositories. However, Devin Organizations cannot work with your repositories until you explicitly grant permission.
After connecting your Devin Enterprise to your SCM provider, you can manage repository permissions in **Enterprise Settings > Repository Permissions**.
### Adding or Updating Permissions
1. Select the Devin Organization for which you want to manage repository access from the dropdown menu at the top of the page.
* Here, you can view all currently configured permissions and repositories.
2. Click **+ Add Permissions** to open the permissions flyout.
3. Choose the level of access you want to grant:
* **Group-level access**: Grants access to all repositories within an organizational unit. Select your SCM provider's grouping structure:
* GitHub / GitHub Enterprise Server: Organization
* Azure DevOps: Organization or Project
* GitLab: Group or Subgroup
* Bitbucket: Workspace
* **Repository-level access**: Grants access to a single, specific repository.
4. Use the dropdown to filter by Git Provider if needed.
5. Select **Add permissions** to save your changes.
### Revoking Permissions
To revoke access to repositories or groups:
* Select the **trash can icon** next to the permission you want to remove, or
* Go into **+ Add Permissions**, deselect the permission, and save.
Once saved, that Devin Organization will no longer be able to access those repositories or groups.
# GitHub Enterprise Server Integration
Source: https://docs.devin.ai/enterprise/integrations/github-enterprise-server
Connect Devin with GitHub Enterprise Server or GitHub Enterprise Cloud with Data Residency
## Overview
Devin supports two methods for connecting to GitHub Enterprise Server (GHES) and GitHub Enterprise Cloud (GHEC) with Data Residency:
1. **GitHub App (Recommended)** — Register and install a dedicated GitHub App on your GHES or GHEC instance. This provides a streamlined setup experience and does not require managing personal access tokens.
2. **Personal Access Token (PAT)** — Create a service account and generate a fine-grained personal access token. This method works for all GHES versions.
The GitHub App integration is currently available on a limited basis. To get started, please contact your Cognition representative.
***
## GitHub App Setup
The GitHub App setup involves three steps:
1. **App Registration** — Register a GitHub App on your GHES or GHEC instance. You only need **one App registration per instance**.
2. **App Configuration** — Configure the registered App on your GHES or GHEC instance (e.g., make it public and opt out of token expiration).
3. **App Installation** — Install the registered App on each GitHub organization you want Devin to access. You need **one installation per organization**.
### Prerequisites
* A Devin user with **Manage git permissions**
* Owner or admin access to the GitHub organization where the App will be registered
### Step 1: Register the GitHub App
1. In your Devin account, navigate to **Enterprise Settings** → **Integrations** → **GitHub**.
2. Expand the **Advanced** section to reveal the **GitHub Enterprise** options.
3. Click **Register App**.
4. In the modal that appears, enter the **hostname** of your GHES or GHEC instance and the **organization** where the App will be registered.
5. You will be redirected to GitHub. Click **Register App** to complete the registration.
6. After being redirected back to Devin, the GitHub App is now registered in your GitHub organization.
### Step 2: Configure the GitHub App
After registration, configure the App on your GHES or GHEC instance:
1. On your GHES or GHEC instance, navigate to the GitHub organization specified during registration.
2. Go to **Settings** → **Developer Settings** → **GitHub Apps** and select the Devin App.
3. In the **Advanced** section, under **Danger zone**, click **Make public**. This allows the App to be installed across other organizations on the same instance.
4. Navigate to the **Optional features** section and opt out of **User-to-server token expiration**. This prevents access tokens from expiring and avoids the need for users to re-authorize the App periodically.
### Step 3: Install the GitHub App
1. In your Devin account, navigate to **Enterprise Settings** → **Integrations** → **GitHub**.
2. Expand the **Advanced** section and click **Install App**.
3. In the modal, select the GitHub App registered under your GHES or GHEC instance.
4. You will be redirected to GitHub, where you can choose a GitHub organization and select which repositories to grant Devin access to. We recommend granting access to **all repositories**.
5. After completing the installation, you will be redirected back to Devin. A new git connection will appear in **Settings** → **Integrations** → **GitHub**.
Repeat this step for each additional GitHub organization you want to connect.
### Troubleshooting
If you encounter issues during the GitHub App registration or installation process, please contact your Cognition representative or reach out to [enterprise@cognition.ai](mailto:enterprise@cognition.ai).
***
## Personal Access Token Setup
Integrating Devin into your GitHub allows Devin to access your repos and create pull requests. This lets Devin be a true collaborator on your engineering team.
### **Create a Service Account for Devin**
1. Within your GitHub Enterprise, create a new GitHub account for Devin to use. This is important to ensure all of Devin's access and usage can be properly tracked and managed.
2. Add the newly created service account to all relevant GitHub organizations as a **Member**. Verify that the account has access to all of the repositories that Devin is expected to access.
### **Generate a Personal Access Token for Devin**
1. While logged into the service account, click on the profile picture in the upper-right corner, then click **Settings**.
2. In the left sidebar, click **Developer settings**.
3. In the left sidebar, under **Personal access tokens**, click **Fine-grained tokens**.
4. Click **Generate new token**.
5. Add the **Token name** and **Expiration**.\
**Note:** When the token expires, Devin will immediately lose all access to GitHub and a new token will need to be created.
6. Under **Resource owner**, select the correct organization.
If you're not seeing the correct organization under "Resource owner", make sure that the enterprise and organization have enabled the use of fine-grained personal access tokens.
#### **Enabling in Enterprise Settings**
Only Enterprise Admins will be able to update these settings. Make sure that personal access tokens are also enabled in the specific organization settings.
1. In the top-right corner of GitHub Enterprise Server, click your profile picture, then click **Enterprise settings**.
2. At the top of the page, click **Policies**.
3. Under **Policies**, click **Personal access tokens**.
4. Select the **Fine-grained tokens** tab.
5. Under **Fine-grained personal access tokens**, enable access.
6. Click **Save**.
#### **Enabling in Organization Settings**
Only Organization Admins will be able to update these settings. Make sure that personal access tokens are also enabled in the enterprise settings.
1. In the upper-right corner of GitHub, click your profile picture, then click **Organizations**.
2. Next to the organization, click **Settings**.
3. In the left sidebar, under **Personal access tokens**, click **Settings**.
4. Select the **Fine-grained tokens** tab.
5. Under **Fine-grained personal access tokens**, enable access for your organization.
6. Click **Save**.
7. Under **Repository access**, select which repositories you want Devin to work with. Tokens always include read-only access to all public repositories on GitHub.
8. Make sure the token has the following permissions which are required for Devin to work properly:
| Permission | Access level | Description |
| :------------ | :------------- | :-------------------------------------------------------------------------- |
| Contents | Read and write | Allow Devin to contribute to the codebase |
| Issues | Read and write | Allow Devin to open new issues |
| Metadata | Read only | Allow Devin to view crucial metadata about a repository such as who owns it |
| Pull requests | Read and write | Allow Devin to create new PRs |
Additional permissions will help Devin better collaborate with your team depending on what work you're asking Devin to do.
9. Click **Generate Token** and save the token that is displayed.\
**Note:** Admin approval may be needed depending on your GitHub settings.
10. To validate that the token has all the necessary access and permissions, **create and push a test branch** on your local machine to a repository in the organization.
11. Once the token has been generated and tested, reach out to your Cognition point of contact to finish the setup process. If you are not currently working directly with our team, reach out to [enterprise@cognition.ai](mailto:enterprise@cognition.ai).
### **Validating PAT Permissions Locally**
Before sharing the token with Cognition, verify that it has the correct permissions by pushing a test branch:
```bash theme={null}
# Authenticate with gh CLI using your token
export GH_TOKEN=your_personal_access_token
export GH_HOST=your-github-enterprise-server.com
# Clone the repository
gh repo clone your-organization/your-repository
cd your-repository
# Create a test branch
git checkout -b test-devin-token-$(date +%s)
# Make a small change
echo "# Test" >> TEST.md
git add TEST.md
git commit -m "Test: Validate Devin token permissions"
# Push the branch (tests contents write permission)
git push origin HEAD
# Create a pull request (tests pull requests write permission)
gh pr create --title "Test: Validate Devin token permissions" \
--body "This is a test PR to validate token permissions." \
--base main
# Clean up: close the test PR and delete the test branch
gh pr close pr-number --delete-branch
```
**Expected results:** The push and PR creation should succeed without authentication errors. If the push fails, verify the token has "Contents: Read and write" permission. If the PR creation fails, verify the token has "Pull requests: Read and write" permission.
## **Using Devin with the GitHub Integration**
Now that GitHub is integrated, you can configure which Devin sub-organizations have access to each repository (see [Repository Permissions](/enterprise/integrations/git-integrations#repository-permissions))
Once the integration is set up, you can go to the Devin web application and you are now able to @mention any repository in your prompt!
If you are using a repository for the first time, we recommend going through the [development environment setup process in the onboarding flow](/onboard-devin/environment) to ensure that Devin has the most accurate and up to date information about working with your codebase.
Devin will automatically respond to any PR comments as long as the session has not been archived
### **Security Considerations**
Some additional information regarding Devin's permissions in GitHub:
* We recommend enabling branch protections on master to ensure checks are enforced before Devin can merge any changes.
* If Devin is connected to your organization's GitHub account then it will have the same permissions for any user with access to the GitHub and Devin organizations.
* Devin will not mirror the permissions of the user running a session with Devin, it will retain the permissions granted at the org-level.
* Devin cannot create new repos in your GitHub account.
# GitLab Self-Managed Integration
Source: https://docs.devin.ai/enterprise/integrations/gitlab-self-managed
Connect Devin with your self-managed GitLab instance
## Overview
This guide walks through the full setup for integrating a **GitLab instance** with Devin, including both the **admin setup** and the **end-user setup**.
There are two parts to the integration:
1. **Admin setup**
* Connect the organization's self-hosted GitLab instance to Devin
* Set up a service account
* Configure repository access
* Register OAuth so users can link their personal GitLab identities
2. **User setup**
* Link an individual user's GitLab account to their Devin account
The admin setup must be completed before any user can link their GitLab account. Only Enterprise Admins can perform the admin setup steps.
***
## Part 1: Admin Setup
### Step 1: Create a Service Account in GitLab
In GitLab:
1. Go to the correct **GitLab group**
2. Navigate to **Settings**
3. Open **Service Accounts**
4. Create a new service account
This service account is what Devin will use to access repositories in GitLab.
***
### Step 2: Add the Service Account as a Group Member
Still in GitLab:
1. Go to the group's **Members** page
2. Add the service account as a member of the group
3. Grant it the **Developer** role
This is necessary so the service account can access repositories appropriately.
***
### Step 3: Generate a Personal Access Token for the Service Account
After creating the service account:
1. Locate the newly created service account
2. Click on the three dots > **Manage access tokens** > **Generate a new personal access token** > Select **api** under access scopes
3. Copy and store that token securely
Ensure you are selecting the service account's token, and not your personal access token found in your user's preferences. You want Devin to act as the service account, not as you. You will use this token when adding the GitLab connection in Devin.
***
### Step 4: Add the GitLab Connection in Devin
In Devin:
1. Go to **Enterprise Settings**
2. Open **Connections**
3. Add a new connection
4. Enter:
* Your **self-hosted GitLab URL** (if applicable)
* The **personal access token** created for the service account
This creates the enterprise-level GitLab connection.
***
### Step 5: Configure Webhook
Configuring a webhook allows Devin to automatically receive real-time notifications when specific events occur in GitLab (such as opening or updating merge requests and commenting on merge requests).
To configure the webhook:
1. In **Enterprise Settings** > **Connections**, locate the GitLab instance you just added
2. Click the **Manage** dropdown
3. Select **Configure Webhook**
4. Follow the provided commands to complete the setup
Once configured, Devin will be able to respond to GitLab events in real time rather than relying on periodic polling.
***
### Step 6: Verify Repository Access
After adding the connection:
1. Confirm that the service account has access to the repositories you want to use
2. In Devin, if repositories do not appear immediately, manually refresh the repository list
3. Go to **Enterprise Repositories**
4. Select the correct organization
5. Open **Manage Permissions**
6. Add the relevant repositories with the appropriate **read/write** permissions
If repos are missing, it may be because Devin refreshes the repository list periodically rather than instantly.
***
## Part 2: Enable User Linking for Self-Hosted GitLab
### Step 7: Register an OAuth Application on the Self-Hosted GitLab Instance
To allow individual users to link their GitLab identity to Devin, the admin must register an OAuth app for the self-hosted GitLab instance.
In Devin:
1. Go to the enterprise GitLab connection area
2. Open **Advanced**
3. Go to the self-hosted GitLab section
4. Start the flow to **register an OAuth application**
***
### Step 8: Complete OAuth App Registration in GitLab
Follow the link in the registration modal to open the GitLab application form. Fill in the fields as shown:
1. Set the **Name** and **Redirect URI** exactly as shown in the Devin modal
2. Enable the **Confidential** checkbox
3. Select the **api** scope
4. Click **Save application**
5. Copy the **Application ID** and **Application Secret** from GitLab
6. Return to Devin and paste those values into the registration modal
7. Click **Register**
This completes the admin-side setup needed for user identity linking.
***
## Part 3: Organization Membership Requirement
### Step 9: Make Sure the User Belongs to the Correct Devin Organization
Before a user can link their GitLab account, they must be a member of a Devin organization with GitLab repository permissions.
In Devin:
1. Go to the organization membership area
2. Confirm the user is part of a Devin organization with GitLab repository permissions
3. If they are not, add them first
**Personal Connections only shows integrations for organizations the user belongs to.** If a user is not in a Devin organization with GitLab repository permissions, the GitLab integration may not appear at all.
***
## Part 4: End-User Setup
### Step 10: Open Personal Connections
As the end user in Devin:
1. Go to **Personal Connections**
2. Look for the self-hosted GitLab integration
If it does not appear, check organization membership first.
***
### Step 11: Link the User's GitLab Account
Once the integration appears:
1. Select the self-hosted GitLab connection
2. Complete the linking flow
3. Link the user's **GitLab account** to their **Devin account**
After this, Devin should be able to act as that user for GitLab operations.
# Custom Roles & RBAC
Source: https://docs.devin.ai/enterprise/security-access/custom-roles
Configure fine-grained access control with custom roles and role-based access control (RBAC) in Devin Enterprise.
## Overview
Custom roles and RBAC give you the ability to fine-tune access to the Devin application. Enterprise administrators can create custom roles with specific permissions and assign them to users or IdP groups, providing granular control over what actions users can perform within your Devin Enterprise deployment.
Devin Enterprise implements a two-tier role system with distinct scopes and capabilities: organization-level roles and account-level roles.
## Creating and Assigning Custom Roles
Enterprise admins or users with the **Manage Account Membership** permission are the only users who can configure custom roles. Navigate to your enterprise settings and select the "Roles" tab to manage both organization-level and account-level roles.
To create a custom role:
1. Navigate to Enterprise Settings > Roles
2. Click "Create a custom role" for either Organization or Enterprise level
3. Provide a descriptive role name
4. Select the specific permissions you want to grant
5. Save the role
Once created, custom roles can be assigned to individual users or IdP groups through the membership management interface:
* Enterprise admins or users with the **Manage Account Membership** permission can navigate to the "Enterprise members" page in Enterprise settings and assign account-level roles
* Please note that this is the same set of users who are able to create, edit, and delete custom roles
* Organization admins or users with the **Manage Organization Membership** permission can navigate to the "Organization members" page and assign organization-level roles
* Please note that these users are able to **assign** custom roles on the organization level, but creating, editing, or deleting custom roles requires **Manage Account Membership** (enterprise-level) permissions
We currently do not support multiple roles per user, but this feature is on our roadmap and we plan to support it soon. Each user can currently be assigned only one role per organization and one account-level role.
### Organization-Level Roles
Organization-level roles are assigned on an organization-by-organization basis and do not apply outside of the assigned organization. These roles control access to resources and actions within a specific organization.
Organization-level roles can be configured with the following permissions:
| Permission | Description |
| ---------------------- | ---------------------------------------------------------------- |
| **Use DeepWiki** | Access to DeepWiki functionality |
| **Use Ask Devin** | Access to Ask Devin feature |
| **Use Devin Sessions** | Access to create and use Devin sessions |
| **Manage Membership** | Add/remove users and groups. Assign or unassign permission roles |
| **Manage Settings** | Manage settings at the organization level |
| **Manage Playbooks** | Create/edit/delete organization playbooks |
| **Manage Secrets** | Create/edit/delete organization secrets |
| **Manage Knowledge** | Create/edit/delete organization knowledge |
| **Manage Snapshots** | Create/edit/delete machine snapshots |
| **Index Repositories** | Index repositories for Ask Devin and DeepWiki generation |
| **Manage Sessions** | Edit Devin sessions from other users in the organization |
| **View Sessions** | View Devin sessions from other users in the organization |
| **Manage API Keys** | Create/delete/use API keys |
| **Manage MCP Servers** | Create/edit/delete MCP servers |
| **View Metrics** | View organization metrics |
| **View Consumption** | View organization consumption |
Users can either build their own custom roles with a specific set of permissions, or they can use one of our three default organization roles:
* **Admin**: Full administrative access within the organization
* **Member**: Standard user access with core functionality
* **DeepWiki Only**: Limited access restricted to DeepWiki and Ask Devin functionality, including repository indexing permissions
### Account-Level Roles (Enterprise Roles)
Account-level roles (also known as enterprise-level roles) are assigned across the entire enterprise and apply to every organization within the enterprise. Users with account-level roles automatically inherit corresponding organization-level permissions in all organizations that they are a member of.
Account-level roles can be configured with the following permissions:
| Permission | Description |
| ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Manage Organizations** | View/create/edit/delete enterprise organizations |
| **Manage Account Membership** | View/create/edit/delete enterprise + organization membership. Create/edit/delete custom roles |
| **Manage Enterprise Settings** | View/edit settings at the enterprise + organization levels |
| **Manage Git Integrations** | Create/edit/delete Git integrations (GitHub, Gitlab, ADO, Bitbucket). Manage repo permissions and repo indexing |
| **Manage Chat Integrations** | Create/edit/delete chat integrations like Microsoft Teams or Slack |
| **Manage Ticket Integrations** | Create/edit/delete ticketing integrations like Jira or Linear |
| **Use Account Tools** | Use Devin sessions, Ask Devin, and DeepWiki across any org |
| **Manage Account Resources** | Create/edit/delete playbooks, secrets, and knowledge across any org |
| **Manage Account Snapshots** | Create/edit/delete machine snapshots in any org. Manage account level snapshots + index repos |
| **Index Account Repositories** | Index repositories for Ask Devin and DeepWiki generation across the enterprise |
| **Manage Sessions** | Edit Devin sessions from other users across any org |
| **View Sessions** | View Devin sessions from other users across any org |
| **View Enterprise Infra Details** | View enterprise infrastructure details |
| **Manage Account API Keys** | Create/edit/delete/use API keys in the enterprise and any org |
| **Manage Account MCP Servers** | Create/edit/delete MCP servers across any org |
| **View Account Metrics** | View enterprise metrics |
| **View Personal Analytics** | View your own ACU consumption and usage analytics across the enterprise from the [My analytics](/enterprise/security-access/personal-analytics) page. Requires the `expose-personal-analytics` feature flag |
| **Manage Billing** | View/edit consumption for the enterprise |
| **Use Devin Review (manual)** | Access [Devin Review](/work-with-devin/devin-review) and manually trigger a review on any PR. Base tier — required to view the Review tab |
| **Use Devin Review (on PR creation)** | Everything in manual, plus automatically trigger reviews when a PR is created or marked ready for review |
| **Use Devin Review** | Full auto-review on every push — reviews trigger on PR creation, new commits, draft marked ready, and reviewer/assignee added. Granted to all members and admins by default |
| **Manage Devin Review** | Manage auto-review settings, posting options, review rules, and other admin configuration in [Settings > Review](https://app.devin.ai/settings/review). Independent of the usage tiers above — does not grant Review access on its own |
Users can either build their own custom roles with a specific set of permissions, or they can use one of our two default account roles:
* **Admin**: Full administrative access across the entire enterprise
* **Member**: Standard user access across all organizations in the enterprise
## Auto Assign a Role based on SSO IdP Group
You can automatically assign roles to users based on their Identity Provider (IdP) group membership. This streamlines user access management by ensuring users inherit the correct permissions upon authentication.
1. Navigate to **Enterprise Settings > Members**
2. Configure IdP group mappings to associate group names with specific roles
3. When users authenticate via SSO, they automatically receive the role assigned to their IdP group
Your SSO provider must send the `groups` array in the SSO assertion. For detailed setup instructions, see [IdP Group Integration](/enterprise/security-access/idp-groups).
## Best Practices
* **Principle of Least Privilege**: Grant users only the minimum permissions necessary for their role
* **Use IdP Groups**: Leverage IdP group integration for easier management of role assignments at scale
* **Regular Audits**: Periodically review role assignments and permissions to ensure they remain appropriate
* **Descriptive Naming**: Use clear, descriptive names for custom roles to make their purpose obvious
* **Documentation**: Maintain internal documentation of your custom roles and their intended use cases
### Common Issues
If a user is not receiving the expected permission,
* Verify the user is assigned to the correct role for that specific organization
* Ensure the role has the necessary permissions configured
For additional support with role configuration, contact your Devin Enterprise administrator or reach out to [support](mailto:support@cognition.ai).
# IdP Group Integration
Source: https://docs.devin.ai/enterprise/security-access/idp-groups
Configure Identity Provider (IdP) group integration for streamlined user access management in Devin Enterprise.
## Sign in to Devin Enterprise
We recommend configuring single sign-on (SSO) and unified login for greater security and improved usability. SSO enables your users to sign into Devin Enterprise with your organization's identity provider. See [Microsoft Entra ID SSO](/enterprise/security-access/sso/azure), [Okta SSO](/enterprise/security-access/sso/okta), [SAML SSO](/enterprise/security-access/sso/saml), or [OIDC SSO](/enterprise/security-access/sso/oidc).
If you don't configure SSO, users can log in to Devin Enterprise using a selected external account such as Google.
GitHub is not recommended, as often personal GitHub emails and work emails do not match.
## Technical Overview of Devin's RBAC Architecture
Devin Enterprise implements a comprehensive Role-Based Access Control (RBAC) system that integrates with your existing identity infrastructure. This section explains how to configure and leverage RBAC for your organization.
### Identity Provider Integration
After configuring Devin Enterprise with your Identity Provider (IdP), the authentication flow is as follows:
1. During authentication, Devin Enterprise receives group information from your IdP
2. Your IdP sends group information as claims in the JWT token
3. Devin Enterprise uses these groups to determine access permissions
### Configuring Group-Based Access
You can configure which IdP groups have access to specific organizations:
1. Map your existing IdP groups to Devin Enterprise organizations
2. Assign appropriate roles (member or admin) to each group
3. Users will automatically inherit permissions based on their IdP group membership
### Access Control Implementation
Devin Enterprise determines user access through multiple pathways:
* **Direct membership**: Individual users assigned to organizations
* **Group membership**: Users inherit access from their IdP group memberships
* **Enterprise admin**: Administrators have access to all organizations within their enterprise
Direct membership and group membership are **additive**. Users receive the combined permissions from all their roles assigned through both direct and group membership. There is no precedence hierarchy between these assignment types.
### Repository Access Control
For Git repository access, Devin Enterprise:
* Inherits permissions from the organization-level access control
* Supports fine-grained access control at the repository level
* Maintains consistent authorization across all components
This approach allows you to leverage your existing identity management system while providing secure, role-based access to Devin Enterprise resources.
## Sync users and groups from your identity provider
You can sync users and groups from your IdP to Devin Enterprise, ensuring they have the right access. Groups can have member or admin roles and may belong to multiple organizations.
To enable automatic user matching, provide a mapping of groups to roles and organizations. After authentication, Devin Enterprise extracts group information from the JWT token your IdP sends and matches users accordingly.
```
{
"sub": "12345",
"name": "John Doe",
"email": "johndoe@example.com",
"groups": ["Engineering", "Admins"], // Group claim
"iss": "https://idp.example.com",
"aud": "your_app_client_id"
}
```
Contact us if you require [SCIM](mailto:sales@cognition.ai).
When a user is removed from your identity provider, that user is deactivated in Devin Enterprise. You can configure IdP group permissions through your enterprise settings. See [Custom Roles & RBAC](/enterprise/security-access/custom-roles) for more information.
## Enterprise Access Control
Devin Enterprises can have unlimited organizations.
| Access Condition | Description |
| :-------------------------------------- | :-------------------------------------------------------------------------------------------------- |
| Member of the organization | You can access the organization if you're a member. |
| Organization admin (owns the org) | You can access and edit the organization. |
| Enterprise admin (owns the enterprise) | You can access and edit the enterprise and sub-organizations. |
| Part of an IdP group for members/admins | You can access the enterprise or organization if you're part of an IdP group that's a member/admin. |
IdP groups are fetched upon user-login, so changes in group membership will require reauthentication.
***
# IP Access Lists
Source: https://docs.devin.ai/enterprise/security-access/ip-access-lists
Restrict API and webapp access to specific IP addresses or CIDR ranges
IP access lists let enterprise administrators restrict access to the Devin platform from specific IP addresses or CIDR ranges. When an IP access list is configured, only requests originating from the allowed IP ranges can access Devin's APIs and webapp.
## How It Works
When you configure an IP access list, Devin enforces it at the enterprise level:
* **API requests** from IPs not in the access list are rejected with a `401 Unauthorized` response
* **Webapp access** is restricted to users connecting from allowed IP ranges
This is useful for enterprises that need to ensure Devin is only accessed from corporate networks, VPN endpoints, or other trusted IP ranges.
## Configuring IP Access Lists
IP access lists are managed via the [Enterprise API v3](/api-reference/v3/ip-access-list/get-ip-access-list). The following operations are available:
### Viewing the Current Access List
Retrieve the current IP access list for your enterprise:
```bash theme={null}
GET /v3/enterprise/ip-access-list
```
Returns the list of allowed IP ranges currently configured.
### Replacing the Access List
Replace the entire IP access list with a new set of IP ranges:
```bash theme={null}
PUT /v3/enterprise/ip-access-list
```
The request body should be a JSON object with an `ip_ranges` field containing an array of IP ranges in CIDR notation. Individual IP addresses can be specified with a `/32` suffix.
```json theme={null}
{
"ip_ranges": ["10.0.0.0/8", "192.168.1.0/24", "203.0.113.50/32"]
}
```
The PUT endpoint **replaces** the entire list. Any IP ranges not included in the request will be removed. Make sure to include all desired ranges in each update.
### Clearing the Access List
Remove all IP restrictions by clearing the access list:
```bash theme={null}
DELETE /v3/enterprise/ip-access-list
```
When the access list is empty, no IP-based restrictions are enforced.
## Permissions
Managing IP access lists requires the `ManageEnterpriseSettings` permission. This is typically available to enterprise administrators.
## Best Practices
* **Include all office and VPN egress IPs** before enabling the access list to avoid locking out users
* **Use CIDR ranges** instead of individual IPs where possible to simplify management
* **Test with a broad range first**, then narrow down as needed
* **Keep a record** of configured ranges outside of Devin in case you need to restore access
If you accidentally lock yourself out by configuring an incorrect IP access list, contact [support@cognition.ai](mailto:support@cognition.ai) for assistance.
# Personal Analytics
Source: https://docs.devin.ai/enterprise/security-access/personal-analytics
Let users view their own ACU consumption and usage analytics across your enterprise.
## Overview
Personal analytics lets individual users view their own usage of Devin — their ACU consumption across every organization in your enterprise — from a **My analytics** page in their settings. This is scoped to each user's own activity: users only ever see their own consumption, not anyone else's.
Personal analytics is off by default. Enabling it for your users requires granting the permission to the roles that should be able to see it.
## Using Personal Analytics
### Grant the "View Personal Analytics" permission
Add the **View Personal Analytics** permission to the role you want to be able to view their own personal usage. This is an account-level (enterprise) permission that grants read-only access to a user's own consumption.
You can add this permission to an existing role or create a new custom role for it. For step-by-step instructions on creating and assigning roles, see [Creating and Assigning Custom Roles](/enterprise/security-access/custom-roles#creating-and-assigning-custom-roles).
The permission is required. Without it, the **My analytics** page is not accessible.
### View personal analytics
Once the permission is granted, users with the permission can view their own usage. Navigate to **Settings → Enterprise → My analytics** to see your ACU consumption across the enterprise.
## Related
* [Usage](/admin/billing/usage) — how Devin meters work and where to view account-wide consumption
* [Creating and Assigning Custom Roles](/enterprise/security-access/custom-roles) — grant the **View Personal Analytics** permission
# Customer Managed Keys
Source: https://docs.devin.ai/enterprise/security-access/security/customer-managed-keys
Use your own AWS KMS key to encrypt data at rest in your Devin Enterprise Dedicated deployment.
## Overview
By default, Cognition encrypts all customer data at rest using Cognition-managed keys. For organizations that require direct control over their encryption keys, Devin supports **Customer Managed Keys (CMK)** using [AWS Key Management Service (KMS)](https://aws.amazon.com/kms/).
With CMK, you provide your own AWS KMS key, and Cognition uses it to encrypt data stored in your dedicated tenant — including session data and VM snapshots. This gives you full control over the key lifecycle, including the ability to rotate, disable, or revoke access at any time.
CMK is available exclusively for **Enterprise Dedicated** deployments and must be configured during initial deployment setup. For more information on deployment models, see [Enterprise Deployment](/enterprise/deployment/overview).
## How It Works
In an Enterprise Dedicated deployment, Devin stores customer data in Amazon S3 buckets within your dedicated tenant. When CMK is enabled:
1. Your AWS KMS key is used for **server-side encryption** of all data written to these S3 buckets.
2. Cognition's infrastructure uses the key to encrypt data at write time and decrypt it at read time.
3. You retain ownership of the key in your own AWS account and can manage its lifecycle independently.
If you do not provide a KMS key, Cognition creates and manages an encryption key on your behalf.
## Prerequisites
Before setting up CMK, ensure you have:
* An **Enterprise Dedicated** deployment with Cognition (CMK must be configured during initial deployment)
* An **AWS KMS key** in the **same AWS region** as your Devin deployment
* Permissions to modify your KMS key policy and create key aliases
Contact your Cognition account team to confirm the AWS region of your dedicated tenant.
## Setup
### Step 1: Create or Select a KMS Key
Use an existing symmetric AWS KMS key or [create a new one](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html) in the same region as your Cognition dedicated tenant. The key must be a **symmetric encryption key** (the default key type in AWS KMS).
### Step 2: Add a Key Alias
Add the alias **`devin-customer-managed-key`** to your KMS key. Cognition's infrastructure requires this exact alias to locate and use the key for encryption.
1. Open the [AWS KMS Console](https://console.aws.amazon.com/kms).
2. Select your key and go to the **Aliases** tab.
3. Choose **Create alias**.
4. Enter `devin-customer-managed-key` as the alias name.
5. Save the alias.
```bash theme={null}
aws kms create-alias \
--alias-name alias/devin-customer-managed-key \
--target-key-id
```
### Step 3: Configure the Key Policy
Update your KMS key policy to allow Cognition's AWS accounts to use the key for encryption and decryption. Add the following statement to your key policy:
```json theme={null}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::272506498303:root",
"arn:aws:iam::063509147090:root"
]
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
}
]
}
```
1. Open the [AWS KMS Console](https://console.aws.amazon.com/kms).
2. Select your key and go to the **Key policy** tab.
3. Choose **Edit**.
4. Add the statement above to the `Statement` array in your existing key policy.
5. Save the policy.
```bash theme={null}
# First, retrieve your current key policy
aws kms get-key-policy \
--key-id \
--policy-name default \
--output text > key-policy.json
# Edit key-policy.json to add the statement above,
# then apply the updated policy
aws kms put-key-policy \
--key-id \
--policy-name default \
--policy file://key-policy.json
```
### Step 4: Provide the Key ARN to Cognition
Send your KMS key ARN to your Cognition account team. The ARN has the following format:
```text theme={null}
arn:aws:kms:::key/
```
Once Cognition receives your key ARN, the team will configure your dedicated tenant to use it for encryption. No further action is required on your part.
## Key Management
### Key Rotation
AWS KMS supports [automatic key rotation](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html) for customer managed keys. When enabled, AWS automatically creates new cryptographic material for your key every year while retaining the old material to decrypt previously encrypted data. Cognition recommends enabling automatic key rotation.
### Revoking Access
You can revoke Cognition's access to your KMS key at any time by removing the policy statement added in [Step 3](#step-3-configure-the-key-policy). Note that revoking access will prevent Cognition from reading or writing encrypted data in your tenant, which will disrupt Devin's functionality until access is restored.
Disabling or deleting your KMS key, or revoking Cognition's access, will make all encrypted customer data in your tenant unreadable. Ensure you understand the implications before making changes to your key or its policy.
### Monitoring Key Usage
You can monitor all usage of your KMS key through [AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html). CloudTrail logs every API call made to your key, including calls from Cognition's accounts, providing a full audit trail of encryption and decryption operations.
## FAQs
Your KMS key is used to encrypt customer data stored in Amazon S3 within your dedicated tenant, including session data and VM snapshots.
No. Your KMS key must be in the same AWS region as your Devin deployment. Contact your Cognition account team to confirm your tenant's region.
Cognition will create and manage an encryption key on your behalf. All data is still encrypted at rest — CMK simply gives you direct control over the key.
No. CMK is currently available only for Enterprise Dedicated deployments.
Yes. Contact your Cognition account team to update the KMS key ARN for your tenant. Previously encrypted data will remain encrypted with the original key unless re-encrypted.
# Enterprise security
Source: https://docs.devin.ai/enterprise/security-access/security/enterprise-security
# **Security & Trust**
For more details on Cognition's security posture, visit our [Trust Center](https://trust.cognition.ai).
## **Security**
### **Secure Transmission and Encryption**
All data transmission is **encrypted in transit and at rest**. Production systems are continuously monitored through logging, error handling, and real-time dashboards tracking live metrics. Alerts are triggered for unusual application states (e.g., high error rates, slow performance, failures) and are promptly investigated by our team.
Access to Cognition's AWS cloud environment is granted on a **need-to-know basis**, aligned with business roles. Only a limited number of employees or contractors have direct access to production systems.
### **General Security Practices**
All employees and contractors must use **multi-factor authentication (MFA)** on all primary work applications. Additionally, they undergo **annual security training**, covering best practices for password management, social engineering awareness, and phishing prevention.
### **Third-Party Audits and Certification**
Cognition has been **SOC 2 Type II certified** since September 2024. During these audits, third-party reviewers evaluated all security policies, procedures, and internal and external controls related to:
* **Data security**
* **Privacy**
* **Processing integrity**
* **Confidentiality**
* **Availability**
For more details, visit our [Trust Center](https://trust.cognition.ai).
### **Vulnerability Disclosure Program**
If you identify a potential security issue, report it to our security team at [security@cognition.ai](mailto:security@cognition.ai). Cognition will notify Enterprise customers of any security incidents that may impact their environments, following the reporting obligations outlined in customer agreements.
## **Privacy & Intellectual Property**
### **How does Cognition process data accessed by Devin?**
Data processing depends on how customers interact with Devin:
* **Web Application**: Cognition only processes data actively provided by the authorized user.
* **Integrations**: The administrator installing the integration can review and manage all permissions granted to Devin.
For **Enterprise customers with dedicated deployments**, all customer data is stored within the customer's tenant.
### **What is Cognition's data retention policy?**
Cognition retains data processed through Devin only for the duration of the customer relationship unless specified otherwise.
* **Feedback & User Interaction Data** may be retained as needed, as determined by Cognition.
### **How is customer data used to improve Devin?**
By default, Cognition **does not** train its models on customer data or code.
For Enterprise customers using **dedicated deployments**, all customer data remains within the customer's tenant. Please refer to your Cognition agreement for further details.
### **What are the intellectual property (IP) rights for Devin's output?**
The output generated by Devin—whether code, work product, or other content—is the **customer's intellectual property** and may be used for commercial purposes.
However, customers **cannot** use Devin's output to train models intended to reverse-engineer or develop a competing product.
### **Integrations**
#### **SCM Platforms**
When configuring the SCM integration, users can select which repositories Devin can access. Depending on integration type, permissions can be adjusted at any time via the SCM platform's settings or by regenerating the fine-grained access token.
#### **Messaging Platforms**
Devin **only processes data explicitly provided** when:
* It is tagged (`@Devin`)
* It receives a direct prompt
* Additional information is shared in an active thread
For details on specific integrations, see the [Integrations](/integrations/overview) page.
## **User Best Practices**
### **Devin's Limitations**
While Devin improves daily, it may still:
* Generate **hallucinations** (inaccurate or misleading responses)
* Introduce **bugs** into code
* Suggest **insecure coding practices**
To mitigate risks, we strongly recommend:
* **Code reviews** before deployment
* **Branch protections** to enforce validation checks
* Following your organization's standard engineering review processes
### **Handling Secrets**
If Devin requires credentials (e.g., API keys, passwords, cookies), use Cognition's [Secrets Manager](/product-guides/secrets) under the **Settings page** to securely share and store sensitive information.
### **Sharing Feedback**
We continuously enhance Devin based on customer feedback.
* For feature requests and suggestions, contact your Cognition account team or email [support@cognition.ai](mailto:support@cognition.ai).
* To report security incidents, email [security@cognition.ai](mailto:security@cognition.ai).
Your input is invaluable in refining Devin as an AI software engineer.
# Entra ID SSO Setup
Source: https://docs.devin.ai/enterprise/security-access/sso/azure
Configure Single Sign-On with Microsoft Entra ID (formerly Azure AD)
Click on any image to enlarge it.
## Required Information
To enable Microsoft Entra ID login for Devin, we will need to collect the following values:
* Client ID
* Tenant ID
* Client Secret
* Microsoft AD Domain
* Identity Provider Domains (i.e. all company email domains you'd like to support)
## Setup Instructions
To get the required information above, you will need to register an App Registration in Microsoft Entra ID.
The App Registration should be created by an admin in your organization with the **Application Administrator** or **Cloud Application Administrator** role. The Devin service account does not need any special privileges for this setup.
In the Microsoft Entra ID portal, click on Add registration
Name the registration Devin AI. Select "Accounts in this organizational directory only". Set the Redirect URI as "[https://auth.devin.ai/login/callback](https://auth.devin.ai/login/callback)" (this is the only Redirect URI needed)
Add the User.Read and Directory.Read.All permissions by selecting "API Permissions" and "Add a permission" to the Microsoft Graph API.
## Collecting the Required Values
You can get the Client ID and Tenant ID from the Overview page.
The Microsoft AD Domain can be found by selecting the "Manifest" page and looking for "publisherDomain"
Add a client secret by selecting "Certificates & secrets." Select "New client secret" and copy the secret VALUE (not the secret ID) as Client Secret
## Send to Cognition
Send the following values to Cognition:
* Client ID
* Tenant ID
* Client Secret
* Microsoft AD Domain
* Identity Provider Domains (i.e. all company email domains you'd like to support)
# SSO Onboarding Guide
Source: https://docs.devin.ai/enterprise/security-access/sso/guide
End-to-end guide for setting up SSO, understanding SCIM considerations, and configuring IdP groups with Devin Enterprise.
This guide walks enterprise administrators through the full SSO lifecycle with Devin — from initial setup through IdP group configuration — and explains how Devin handles user provisioning without SCIM.
For provider-specific setup instructions, see [Okta](/enterprise/security-access/sso/okta), [Microsoft Entra ID](/enterprise/security-access/sso/azure), [SAML](/enterprise/security-access/sso/saml), or [Generic OIDC](/enterprise/security-access/sso/oidc).
***
## 1. Setting Up SSO
### Creating Your SSO Application
Create an application in your identity provider (Okta, Microsoft Entra ID, or any SAML/OIDC-compliant IdP) and share the following credentials with your Cognition team:
| Connection Type | Protocol | What to Provide |
| :--------------------- | :----------------------------- | :-------------------------------------------------- |
| **Okta** | OIDC (Okta Workforce Identity) | Okta domain, Client ID, Client Secret, Scopes |
| **Microsoft Entra ID** | OIDC (Microsoft Entra ID) | Microsoft Entra ID domain, Client ID, Client Secret |
| **SAML** | SAML 2.0 (any IdP) | Sign-In URL, X.509 Signing Certificate |
| **Generic OIDC** | OIDC | Discovery URL, Client ID, Client Secret, Scopes |
You should also provide your verified email domain(s) so Devin knows which email addresses to trust from your IdP.
### What Happens After Setup
Once your Cognition team has the credentials, they configure the SSO connection. After setup is complete:
1. The SSO connection is linked to your Devin enterprise
2. **Auto-membership on login** is enabled — any user who authenticates via SSO is automatically added to your enterprise
3. Your email domain(s) are registered as trusted — only emails from those domains are accepted
4. **Group-based role assignment (RBAC)** is enabled — IdP groups sent during login can be mapped to Devin roles
5. Default social logins (Google, GitHub) are disabled — SSO becomes the required authentication method
### The User Login Experience
1. User navigates to your Devin URL
2. Redirected to the configured IdP (Okta, Microsoft Entra ID, etc.)
3. User authenticates normally
4. The IdP sends user info and group memberships back to Devin
5. Devin automatically:
* Creates the user's account if it's their first login (just-in-time provisioning)
* Assigns them the default Enterprise Member role
* Syncs their IdP group memberships — adds new groups, removes stale ones
* Records the login in the enterprise audit log
***
## Self-Service Administration
The following are available to enterprise admins directly in the Devin webapp.
### IdP Group Management
**Settings → Enterprise → Identity Provider Groups**
* View all groups that have been synced from user logins
* Assign a group to an enterprise-level role (e.g., "Everyone in `Engineering-Admins` gets the Enterprise Admin role")
* Assign a group to specific orgs with specific roles (e.g., "`Team-Backend` gets Member access in the Backend org")
* Bulk add/remove groups across multiple orgs
* View how many orgs each group is assigned to
### Member Management
**Settings → Enterprise → Members**
* View all enterprise members, including their IdP group memberships
* Invite new members by email
* Update member roles
* Remove members
### Custom Roles
**Settings → Enterprise → Roles**
* Create custom roles with granular permissions
* Assign custom roles to individual users or to IdP groups
See [Custom Roles & RBAC](/enterprise/security-access/custom-roles) for details.
### API for Automation
Devin provides a V2 API you can use to automate member management:
| Action | API Endpoint |
| :---------------------------- | :------------------------------------------- |
| List all members | `GET /v2/enterprise/members` |
| Invite users by email (bulk) | `POST /v2/enterprise/members/invite` |
| Remove a member | `DELETE /v2/enterprise/members/{user_id}` |
| Bulk update member roles | `PATCH /v2/enterprise/members/roles` |
| Migrate members between roles | `PATCH /v2/enterprise/members/migrate-roles` |
| List all roles | `GET /v2/enterprise/roles` |
| List all IdP groups | `GET /v2/enterprise/groups` |
| Pre-create IdP groups | `PUT /v2/enterprise/groups` |
| Get a group's org assignments | `GET /v2/enterprise/groups/{group_name}` |
***
## 2. Understanding Devin Without SCIM
Devin does not currently support the SCIM protocol. All user and group management happens through SSO login events and the Devin UI/API. Here is what that means in practice.
### User Provisioning: Login-Triggered Only
| | With SCIM | Devin (Without SCIM) |
| :------------------------ | :---------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- |
| **How users are created** | IdP pushes user creation to app immediately when user is assigned | User only exists in Devin after their first SSO login — or after manual invite via the UI or API |
| **When it happens** | Admin assigns app to user → user appears within seconds | Admin assigns app to user → nothing happens in Devin until they log in |
| **Pre-provisioning** | User account is ready before they ever visit the app | No pre-provisioning unless admin explicitly invites them via the Devin UI or API |
When onboarding new employees, the admin can either invite them in advance (**Settings → Enterprise → Members → Invite**, or via the API) or simply let them be auto-provisioned on first login.
### User Deprovisioning: Manual Only
| | With SCIM | Devin (Without SCIM) |
| :------------------------ | :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------- |
| **How users are removed** | IdP deactivates/removes user → app immediately disables the user | Deactivating/removing a user in the IdP does nothing in Devin |
| **Offboarding** | Offboarded employee loses access within minutes | Offboarded employee retains access until manually removed from Devin and their session expires |
| **Compliance** | Automated compliance — no orphaned accounts | Risk of orphaned accounts unless the admin maintains both systems |
This is the biggest operational gap. When offboarding an employee, the admin must separately remove them from Devin (**Settings → Enterprise → Members → Remove**, or via the API). Active sessions continue working until they naturally expire — there is no instant session revocation triggered by the IdP.
### Group Sync: Login-Time Only, Not Real-Time
| | With SCIM (Group Push) | Devin (Without SCIM) |
| :------------------------ | :---------------------------------------------------------- | :-------------------------------------------------------------------------------- |
| **Sync timing** | IdP pushes group membership changes in real-time | Groups only sync when the user logs in |
| **Adding to a group** | Admin adds user to group → app reflects it immediately | Admin adds user to group → Devin doesn't know until user's next login |
| **Removing from a group** | Admin removes user from group → app reflects it immediately | Admin removes user from group → Devin still shows old membership until next login |
| **Source of truth** | IdP is always the source of truth | IdP is source of truth only at login time — can drift between logins |
If an admin changes someone's IdP group (e.g., moves them from Engineering to Sales), Devin won't reflect this until the user logs in again. In the meantime, the user keeps their old group-based roles and org access.
### Built-in Alternatives to SCIM
Devin includes several features that address common SCIM use cases:
1. **Just-in-time provisioning** — users are auto-created on first SSO login with the default enterprise role
2. **Full group sync on every login** — every time a user logs in, Devin does a complete diff of their IdP groups: adds new ones, removes old ones
3. **Group-based RBAC** — you can map IdP groups to enterprise roles and org access in the Devin settings, taking effect on next login
4. **V2 API for automation** — invite, remove, and bulk role changes can be scripted to close the provisioning/deprovisioning gap
5. **Audit logs** — every login is recorded, providing visibility into who has accessed Devin
***
## 3. Configuring IdP-Managed Groups
If you use SCIM with other applications (e.g., Slack, Box), this section explains how Devin's group model works and how to configure your IdP correctly.
### Context: SCIM Groups vs IdP Groups
* **SCIM Groups:** The downstream app tells the IdP what groups exist (the IdP "imports" them). The app is the source of truth for group structure. The IdP syncs users into those app-defined groups.
* **IdP Groups (what Devin uses):** The IdP is the source of truth. Groups are defined in the IdP's directory, and group memberships flow to Devin via SAML/OIDC claims at login time.
Since Devin does not use SCIM, you are already operating in "IdP groups" mode. The key is making sure the right groups are being sent from your IdP and mapped correctly in Devin.
### Step 1: Define Groups in the IdP
In your IdP Admin Console (examples below use Okta):
1. Go to **Directory → Groups**
2. Create groups that map to Devin access levels (e.g., `Devin-Engineering`, `Devin-Admins`, `Devin-DataScience`)
3. Assign users to these groups
These are IdP-native groups — your IdP is the source of truth for who belongs to what.
### Step 2: Configure Group Claims in the IdP App
The groups must be included in the authentication response so Devin can read them.
#### For SAML Connections
1. Go to **Applications → \[Devin App] → SAML Settings → Edit**
2. Under **Group Attribute Statements**, add:
* **Name:** `groups`
* **Filter:** "Starts with" → `Devin-` (or use "Matches regex" for more complex patterns)
3. This tells the IdP to include matching group names in the SAML assertion
#### For OIDC Connections
1. Go to **Applications → \[Devin App] → Sign On → Edit**
2. Under **OpenID Connect ID Token → Groups claim type**, select "Filter"
3. Set the filter to match Devin groups (e.g., "Starts with" → `Devin-`)
Use a filter prefix like `Devin-` so only relevant groups are sent. There's no need to send every IdP group in the organization.
### Step 3: Map Groups to Roles and Orgs in Devin
Once groups are flowing through on login, map them in Devin.
#### In the Devin UI
1. **Settings → Enterprise → Identity Provider Groups**
2. Groups appear automatically after any member of that group logs in
3. Click a group → assign it an enterprise-level role (e.g., Enterprise Admin, or a custom role)
4. Click a group → assign it to specific orgs with specific org-level roles
#### Via the API (for Pre-Setup or Automation)
* Pre-create groups before anyone logs in: `PUT /v2/enterprise/groups`
* List groups and their org assignments: `GET /v2/enterprise/groups`
### Step 4: If Migrating from SCIM Groups in Other Apps
If you are shifting your overall IdP strategy from SCIM-managed groups to IdP-managed groups across your tooling (not just Devin):
1. **Stop SCIM Group Importing** in the other apps:
* In the IdP: go to the app's **Provisioning → Integration** tab → uncheck "Import Groups"
* This stops the downstream app from being the source of truth for groups
2. **Create Matching Groups** in the IdP Directory:
* Go to **Directory → Groups** and create groups that mirror what existed in the downstream app
* Assign users to these IdP-native groups
3. **Configure Group Push** (for apps that support it):
* In the app's IdP config: **Push Groups** tab → Find groups by name → Link to existing downstream groups
* This makes the IdP overwrite the app's internal membership — the IdP becomes the single source of truth
* Devin doesn't need Group Push because it reads groups directly from the login assertion
4. **Disable SCIM Group Sync** in the other apps:
* Ensure "Import Groups" stays off to prevent the downstream app from re-asserting as source of truth
For Devin specifically, no migration is needed. Just ensure Steps 1–3 above are done (groups defined in your IdP, claims configured, mappings set in Devin).
***
## Key Considerations
If a group is renamed, Devin treats it as a new group. The old group's role mappings don't transfer automatically — you will need to reconfigure the new group name in Devin's settings.
A user added to a Devin-mapped IdP group won't gain that access until they log in.
Removing a user from an IdP group doesn't immediately revoke their Devin access. On their next login, Devin syncs and removes the stale group membership. Any direct membership (assigned outside of groups) is unaffected.
The group name in the IdP must exactly match what Devin sees. Case-sensitive.
Devin doesn't support nested/hierarchical groups. If the IdP sends a parent group, child group members aren't automatically included. Each group must be explicitly assigned.
***
## Recommended Setup for "SCIM-Like" Behavior
For the tightest possible control without SCIM, follow this approach:
1. Define groups: `Devin-Admins`, `Devin-Backend`, `Devin-Frontend`, etc.
2. Assign users to groups
3. Configure SAML/OIDC group claims filtered to "Starts with: `Devin-`"
When a user logs in via SSO, Devin automatically:
* Auto-creates the user if new
* Performs a full group sync (adds new groups, removes stale ones)
* Applies group-to-role and group-to-org mappings immediately
Set up a scheduled job to close SCIM gaps:
1. Read active users from your IdP API
2. Read Devin members from `GET /v2/enterprise/members`
3. Invite new employees via `POST /v2/enterprise/members/invite`
4. Remove departed employees via `DELETE /v2/enterprise/members/{user_id}`
This gives you push-style provisioning and deprovisioning without SCIM.
### What This Gives You
* Your IdP as single source of truth for group structure and membership
* Automatic group-based access on every login
* API-driven provisioning/deprovisioning to close the gap SCIM would normally fill
* Full audit trail for all logins and membership changes
### Current Limitations
* **Real-time group sync between logins** — groups only update when users log in
* **Instant session revocation on deprovisioning** — sessions live until they expire
* **IdP-initiated lifecycle events** like suspend/reactivate are not supported
# OIDC SSO Setup
Source: https://docs.devin.ai/enterprise/security-access/sso/oidc
Configure Single Sign-On with a Generic OpenID Connect Identity Provider
If your organization uses an OpenID Connect (OIDC) identity provider other than Microsoft Entra ID or Okta (e.g., Ping Identity, OneLogin, Keycloak, Auth0, or another OIDC-compliant IdP), you can configure SSO for Devin Enterprise using a generic OIDC connection.
This guide is for customers whose identity provider is **not** natively supported by the [Microsoft Entra ID (OIDC)](/enterprise/security-access/sso/azure) or [Okta (OIDC)](/enterprise/security-access/sso/okta) integrations. If your IdP is Microsoft Entra ID or Okta, we recommend using the native integration instead, as it provides a more streamlined setup experience.
## What You'll Need
The following information is required to set up OIDC SSO for Devin. You will collect these during the setup steps below and send them to your Cognition account team in the final step.
* **Discovery URL** - Your IdP's OIDC Discovery endpoint (e.g., `https://idp.example.com/.well-known/openid-configuration`)
* **Client ID** - The application Client ID from your IdP
* **Client Secret** - The application Client Secret from your IdP
* **Identity Provider Domains** - All company email domains that will authenticate through this IdP (e.g., `example.com`, `subsidiary.example.com`)
* **Scopes** - The OIDC scopes to request (typically `openid profile email`; add `groups` if using IdP groups)
## Setup Instructions
### Step 1: Register an Application in Your IdP
In your identity provider's admin console, create a new OIDC / OAuth 2.0 application (sometimes called a "Web Application" or "Confidential Client") with the following settings:
| Setting | Value |
| :-------------------------------------- | :------------------------------------- |
| **Application Type** | Web Application / Confidential Client |
| **Sign-in Redirect URI (Callback URL)** | `https://auth.devin.ai/login/callback` |
| **Sign-out Redirect URI** | Leave empty |
| **Grant Type** | Authorization Code |
| **Token Endpoint Authentication** | Client Secret (POST) |
After creating the application, note the **Client ID** and **Client Secret** provided by your IdP.
### Step 2: Locate Your Discovery URL
Most OIDC-compliant identity providers publish an OpenID Connect Discovery document. This URL allows Devin to automatically retrieve your IdP's authorization, token, and userinfo endpoints.
The Discovery URL typically follows this pattern:
```
https:///.well-known/openid-configuration
```
Common Discovery URL formats by provider:
* **Keycloak**: `https:///realms//.well-known/openid-configuration`
* **Ping Identity**: `https:////as/.well-known/openid-configuration`
* **OneLogin**: `https://.onelogin.com/oidc/2/.well-known/openid-configuration`
* **Auth0**: `https:///.well-known/openid-configuration`
* **Google Workspace**: `https://accounts.google.com/.well-known/openid-configuration`
You can verify the URL by opening it in a browser — it should return a JSON document containing fields like `authorization_endpoint`, `token_endpoint`, and `issuer`.
### Step 3: Configure Scopes
OIDC scopes control what user information Devin receives during authentication. At minimum, request the following scopes:
| Scope | Purpose | Required |
| :-------- | :---------------------------------------------------- | :----------------------- |
| `openid` | Required for all OIDC flows | Yes |
| `profile` | Returns the user's display name | Yes |
| `email` | Returns the user's email address | Yes |
| `groups` | Returns the user's group memberships (for IdP groups) | Only if using IdP groups |
Your scopes string should be: `openid profile email` (or `openid profile email groups` if using IdP groups).
Some IdPs use a different scope name for group claims (e.g., `roles` or a custom scope). Check your IdP's documentation for the correct scope name that returns group membership information.
### Step 4: Configure Group Claims (Required for IdP Groups)
If you want to use [IdP Group Integration](/enterprise/security-access/idp-groups) for role-based access control in Devin, you **must** configure your IdP to include group membership in the ID token or userinfo response. Without this, users will authenticate successfully but IdP groups will not be synced.
To enable IdP group syncing:
1. In your IdP, ensure the `groups` scope is available for the application
2. Configure your IdP to include a `groups` claim in the ID token or userinfo response
If your IdP does not include group claims by default, you may need to create a custom scope or configure a claims mapping policy. Consult your IdP's documentation for instructions on adding group claims to OIDC tokens.
### Step 5: Send Configuration to Cognition
Send the following to your Cognition account team:
1. **Discovery URL** (e.g., `https://idp.example.com/.well-known/openid-configuration`)
2. **Client ID**
3. **Client Secret**
4. **Identity Provider Domains** (all email domains for this IdP)
5. **Scopes** (e.g., `openid profile email groups`)
Your Cognition account team will configure the OIDC connection so that IdP groups sync automatically on each user login.
## Verifying Your Setup
After your Cognition account team confirms the configuration is complete:
1. Navigate to your Devin Enterprise URL (e.g., `https://.devinenterprise.com`)
2. Click **Sign in with OIDC** (or the equivalent SSO button) to initiate the login flow
3. You should be redirected to your IdP's login page
4. After authenticating, you should land in your Devin Enterprise organization
To verify IdP groups are working:
1. Go to **Settings** > **IdP Groups** in the Devin webapp
2. You should see your IdP groups listed after at least one group member has logged in
3. Groups are synced on each login, so any membership changes in your IdP will take effect the next time a user signs in
IdP groups are fetched upon user login, so changes in group membership will require reauthentication. See [IdP Group Integration](/enterprise/security-access/idp-groups) for more details on configuring group-based access control.
# Okta SSO Setup
Source: https://docs.devin.ai/enterprise/security-access/sso/okta
Configure Single Sign-On with Okta
To set up Okta as a log-in option for your Devin users, you can share this document with your Okta administrator and/or a member of your IT team.
## Create a new application in Okta
1. In your OKTA Admin Panel go to Applications > Create App Integration
2. Select `OIDC - OpenID Connect` for the Sign-in method and `Web Application` for the `Application Type`
3. For `Sign-in redirect URIs` enter the following values
[https://auth.devin.ai/login/callback](https://auth.devin.ai/login/callback)
4. Leave Sign-out redirect URIs empty
## Share your application credentials with Cognition
1. Once the application is created, you will need to share with Cognition the following pieces of information
1. Client ID
2. Client Secret
3. Your Okta Domain (can be obtained from the user dropdown below your email)
## Optional
You can enable the application as an icon in your users dashboard with the following configuration:
1. Select **Either OKTA or App** for `Login initiated by`
2. Check **Display application icon to users**
3. Select **Redirect to app to initiate login (OIDC Compliant)** as the Login flow value
4. Set the Initiate login URI to your Devin Enterprise login URL
`https://.devinenterprise.com/login`
# SAML SSO Setup
Source: https://docs.devin.ai/enterprise/security-access/sso/saml
Configure Single Sign-On with a SAML Identity Provider
If your organization uses a SAML-based identity provider (e.g., Microsoft Entra ID via SAML, ADFS, Ping Identity, OneLogin, or another SAML 2.0-compliant IdP), you can configure SSO for Devin Enterprise using generic SAML.
This guide is for customers who want to use **SAML** instead of the native [Microsoft Entra ID (OIDC)](/enterprise/security-access/sso/azure) or [Okta (OIDC)](/enterprise/security-access/sso/okta) integrations. We generally recommend using the native OIDC integration when possible, but there are certain situations in which SAML SSO is preferred instead.
## What You'll Need
The following information is required to set up SAML SSO for Devin. You will collect these during the setup steps below and send them to your Cognition account team in the final step.
* **Sign In URL** - Your IdP's SAML SSO endpoint (e.g., `https://idp.example.com/sso/saml`)
* **X509 Signing Certificate** - The public certificate your IdP uses to sign SAML assertions
* **Identity Provider Domains** - All company email domains that will authenticate through this IdP (e.g., `example.com`, `subsidiary.example.com`)
* **Group Attribute Name** (if using IdP groups) - The SAML attribute name your IdP uses to send group memberships
## Setup Instructions
### Step 1: Create a SAML Application in Your IdP
In your identity provider's admin console, create a new SAML 2.0 application with the following settings:
| Setting | Value |
| :--------------------------------------- | :------------------------------------------------------------------------------------- |
| **ACS (Assertion Consumer Service) URL** | `https://auth.devin.ai/login/callback` |
| **Entity ID / Audience URI** | Leave blank initially — see [Step 5](#step-5-complete-configuration-with-cognition) |
| **Name ID Format** | `urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress` (recommended) or `persistent` |
| **Name ID Value** | User's email address |
| **Signature Algorithm** | RSA-SHA256 |
| **Digest Algorithm** | SHA256 |
| **Response Binding** | HTTP-POST |
### Step 2: Configure SAML Attributes
Ensure your IdP sends the following attributes in the SAML assertion:
| SAML Attribute | Description | Required |
| :--------------------------------------------------------------------- | :---------------------------------------------------------- | :---------- |
| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier` | Unique user identifier (typically the user's email address) | Yes |
| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress` | User's email address | Yes |
| `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name` | User's display name | Recommended |
Devin uses the `nameidentifier` attribute to identify users. Most IdPs populate this automatically from the SAML **Name ID** value. If your IdP does not send `nameidentifier` as a separate attribute, ensure the **Name ID Value** in Step 1 is set to the user's email address.
### Step 3: Configure Group Assertions (Required for IdP Groups)
If you want to use [IdP Group Integration](/enterprise/security-access/idp-groups) for role-based access control in Devin, you **must** configure your IdP to send group membership in the SAML assertion. Without this, users will authenticate successfully but IdP groups will not be synced.
To enable IdP group syncing, configure a **group attribute** in your SAML application:
| SAML Attribute | Value |
| :------------------ | :---------------------------------------- |
| **Attribute Name** | `http://schemas.xmlsoap.org/claims/Group` |
| **Attribute Value** | User's group memberships |
The exact attribute name may vary depending on your IdP. Common attribute names for groups include:
* `http://schemas.xmlsoap.org/claims/Group`
* `http://schemas.microsoft.com/ws/2008/06/identity/claims/groups`
* `groups`
* `memberOf`
**Share the exact attribute name you configure with your Cognition account team** so we can map it correctly on our side.
#### Microsoft Entra ID with SAML
If you are using Microsoft Entra ID with SAML instead of the native OIDC integration:
1. In the Azure portal, go to **Enterprise Applications** > your SAML app > **Single sign-on**
2. Under **Attributes & Claims**, click **Add a group claim**
3. Select **Groups assigned to the application** (recommended) or **All groups**
4. Set the **Source attribute** to a value appropriate for your setup (e.g., `sAMAccountName` or `Display name`)
5. Note the **Claim name** that Azure generates (e.g., `http://schemas.microsoft.com/ws/2008/06/identity/claims/groups`) and share it with your Cognition account team
#### Other SAML Identity Providers
For other IdPs (ADFS, Ping Identity, OneLogin, etc.):
1. Add a group attribute statement to your SAML application configuration
2. Configure it to send the user's group memberships
3. Note the exact attribute name and share it with your Cognition account team
### Step 4: Send Configuration to Cognition
Send the following to your Cognition account team:
1. **Sign In URL** (e.g., `https://idp.example.com/sso/saml`)
2. **X509 Signing Certificate** (the public certificate file or PEM-encoded text)
3. **Identity Provider Domains** (all email domains for this IdP)
4. **Group Attribute Name** (if using IdP groups) — the exact SAML attribute name configured in Step 3
### Step 5: Complete Configuration with Cognition
After receiving your configuration, your Cognition account team will:
1. Create the SAML connection and provide you with the **Entity ID / Audience URI** and a **connection name**
2. Map your group attribute (if applicable) so that IdP groups sync automatically on each user login
Once you receive the Entity ID, update your SAML application's **Entity ID / Audience URI** setting with the provided value.
Devin sends signed SAML authentication requests. Your SAML metadata file will be available at:
```
https://auth.devin.ai/samlp/metadata?connection=
```
where `` is the connection name provided by your Cognition account team. Import this metadata into your IdP to complete the trust configuration and enable request signature verification.
## Verifying Your Setup
After you have updated the Entity ID and your Cognition account team confirms the configuration is complete:
1. Navigate to your Devin Enterprise URL (e.g., `https://.devinenterprise.com`)
2. Click **Sign in with SAML** (or the equivalent SSO button) to initiate the login flow
3. You should be redirected to your IdP's login page
4. After authenticating, you should land in your Devin Enterprise organization
To verify IdP groups are working:
1. Go to **Settings** > **IdP Groups** in the Devin webapp
2. You should see your IdP groups listed after at least one group member has logged in
3. Groups are synced on each login, so any membership changes in your IdP will take effect the next time a user signs in
IdP groups are fetched upon user login, so changes in group membership will require reauthentication. See [IdP Group Integration](/enterprise/security-access/idp-groups) for more details on configuring group-based access control.
# Trust Center
Source: https://docs.devin.ai/enterprise/security-access/trust-center
Security practices, compliance certifications, and data privacy commitments
# Best Practices
Source: https://docs.devin.ai/use-cases/best-practices
How to structure work for Devin to maximize efficiency and ROI
Identifying the right use case for Devin is key to maximizing efficiency and return on investment (ROI). Below are best practices for selecting a use case that aligns with Devin's strengths.
## Best Enterprise Use Cases
| **Ideal Use Case Criteria** |
| :---------------------------------------------------------------------------------------------- |
| Large, high-business-value projects that can be broken into **isolated & repetitive subtasks**. |
| Tasks that require **less than 90 minutes** of manual engineering time. |
| **Backwards-compatible tasks** that can be independently validated and merged. |
## Devin's Ideal Requirements
| **Requirement** |
| :---------------------------------------------- |
| High volume of **repetitive subtasks** (slices) |
| Tasks of **junior engineer-level** complexity |
| **Isolated & incremental** tasks |
| **Objective & verifiable** subtasks |
| **(Recommended)** Minimal project dependencies |
If your task meets most or all of these requirements, it is an ideal candidate for Devin.
## Crafting Devin's Work
Selecting the right **task type** is crucial for maximizing Devin's reliability.
| **Scenario** | **Reliability Concern** | **Task Type** |
| ------------------------------------------------------------------------ | ----------------------------- | ------------------ |
| Asking Devin to build complex, **net-new features** (even if repetitive) | Lower reliability at scale | **Tall & Deep** |
| Assigning Devin **simple, well-defined tasks** | Highly reliable and effective | **Wide & Shallow** |
### Tall & Deep vs. Wide & Shallow
A **large backlog** of simple, **horizontally-scalable** tasks (e.g., resolving SonarQube issues) can generate significant **ROI** when scaled across thousands of iterations.
The simpler the slice, the more **reliable** the overall project.
## What to Slice
**Great candidates for Devin:**
* **Migrations**
* **Refactors**
* **Modernizations**
* **Technical debt backlogs**
For instance, when working on a **code migration**, it must be broken down into **isolated slices**, each handled by an individual Devin session.
## Verification
A slice should be the **smallest atomic unit** of the project.
| **Example Slices** |
| :----------------- |
| **File** |
| **Notebook** |
| **Module** |
| **Requirement** | **Details** |
| :--------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Time Limit** | Each slice must take **under 90 minutes** of manual engineering work. |
| **Verification** | Must include a way to **validate code changes**, such as: - Running tests - Building the code - CI checks - A custom verification script |
Devin must have a clear **success/failure** verification mechanism.
Avoid tasks with excessive **dependencies** or external systems. Devin excels at **coding tasks**.
## Parallel Execution
| **Requirement** | **Description** |
| ---------------------- | --------------------------------------------------------------------------------------------- |
| **Isolation** | Each slice must be **independent** and **backwards-compatible**. |
| **Parallel Execution** | Utilize **Devin's parallelism** to execute slices **simultaneously**. |
| **Human Review** | After each slice is completed, it should undergo **human review** before merging into `main`. |
## Scaling Considerations
| **Principle** | **Description** |
| --------------------------- | ------------------------------------------------------------------------------------------ |
| **Slice-Level Reliability** | Devin is optimized for **maximum reliability** at the **individual slice** level. |
| **Scaling Consideration** | When scaling across **thousands of slices**, maintaining **high reliability** is critical. |
| **Error Impact** | Even a small error rate can compound when executing at scale. |
## Best Practices for Task Definition
| **Requirement** | **Description** |
| ------------------------- | ------------------------------------------------------------------- |
| **Clear step details** | Provide **explicit instructions** for each slice. |
| **End-to-end reference** | A **detailed guide or video** helps ensure consistency. |
| **Before/After examples** | Offer multiple **before/after code examples** (input/output pairs). |
| **Dependency access** | Ensure Devin has **all necessary dependencies** for the task. |
Devin excels in ongoing **technical debt** tasks (e.g., **PR reviews, QA automation**) when they are properly **sliced and structured**.
Migrations, modernizations, and refactors are strong use cases **if they can be tackled incrementally**.
For example, a full-repository migration requiring **all changes at once** is **not recommended**.
**Case Study:** [Nubank Migration Case Study](https://devin.ai/customers/nubank)
# Data & Analysis
Source: https://docs.devin.ai/use-cases/data-analysis
## Overview
Devin excels at data manipulation, analysis, and visualization tasks. Whether you need to process datasets, create visualizations, or automate data workflows, Devin can help streamline your data operations.
## Use Cases
1. Hosting and populating Jupyter notebooks with data analysis
2. Creating custom data visualizations
3. Analyzing and visualizing financial/economic data
4. Statistical modeling and data processing
5. Time series analysis and forecasting
## Example Prompts
```txt Visualize inflation adjusted prices theme={null}
Hi Devin, please go to https://beta.data.gov.sg/ and visualize how the distribution of flat prices has been changing over time. Then report back with any interesting insights.
```
```txt Analyze California Housing Prices theme={null}
Hey Devin! Can you create a plot showing average real estate price by city? Only include the top 20 most expensive cities. Here's the dataset: https://www.kaggle.com/datasets/kanchana1990/real-estate-dataset-california
```
## Example Sessions
### Data Analysis & Visualization
**Netflix Shows/Movies Analysis**
An interactive analysis of Netflix's content library, exploring trends in genres, release dates, and ratings using Python and Pandas.
[https://app.devin.ai/sessions/4f803558dc1e45ddb489fb93848015ae](https://app.devin.ai/sessions/4f803558dc1e45ddb489fb93848015ae)
### Code Repository Analysis
**Repository Visualization with Gource**
Visual representation of repository commit history using Gource, demonstrating code evolution over time.
[https://app.devin.ai/sessions/8fe32e3a349a4842b2d787e5ccac931b](https://app.devin.ai/sessions/8fe32e3a349a4842b2d787e5ccac931b)
### Advanced Jupyter Notebook Examples
Each notebook demonstrates specialized data analysis techniques:
* **[Audio Analysis](https://app.devin.ai/sessions/bb9ff93037ed4d5f9690099e5269f285)**: Visualization of audio waveforms and spectrograms for sound processing
* **[Image Processing](https://app.devin.ai/sessions/a725564c943e4974ae2df16e54b14a5d)**: Implementation of CAPTCHA solving techniques using computer vision
* **[Data Visualization](https://app.devin.ai/sessions/ce43eb22d1aa48c594b1fd8915ed5130)**: Advanced techniques for visualizing data series with color gradients
* **[Statistical Analysis](https://app.devin.ai/sessions/453af5136fea4500a8e3956e2644a8a8)**: Mathematical modeling and optimization of probability-based strategies
### Additional Visualizations
**Repository Analysis**
* **[Drawdb Visualization](https://app.devin.ai/sessions/d98c5e3b4bef43c88b395a0862c36d76)**: Visual analysis of database schema and relationships
# Clear Engineering Backlogs
Source: https://docs.devin.ai/use-cases/examples/clear-engineering-backlogs
Let Devin tackle your engineering backlogs
## Overview
Devin can help you manage and organize issue backlogs across platforms like GitHub, Jira, and Linear, automating the tedious parts of backlog maintenance while ensuring your team focuses on the most important work.
## Common Backlog Management Scenarios
Tag Devin on a GitHub issue to kick off a new Devin session.
### How to setup
1. Push [devin-on-label.yml](https://github.com/ankehao-demo/COBOL-Demo/blob/main/.github/workflows/devin-on-label.yml) to any GitHub repo under a `.github/workflows` folder
2. Create a GitHub Issue label called **`devin`**
3. Add the Devin API key from your Devin org as a GitHub Repository secret called `DEVIN_API_KEY`
### How it works
1. Add a **`devin`** label to an issue
2. GitHub Actions workflow kicks off and an automated comment is created under the issue with a link to the new Devin session
3. Devin session is automatically kicked off
### Jira and Linear Integrations
Devin integrates directly with both Jira and Linear to help you manage your issue backlog. You can assign tickets to Devin on both platforms and have them automatically turned into PRs.
For detailed setup instructions and configuration options, see the [Jira Integration Guide](/integrations/jira) and [Linear Integration Guide](/integrations/linear).
## Related Use Cases
* [Testing & Refactoring](/use-cases/testing-refactoring)
* [Migration & Modernization](/use-cases/migration-modernization)
# COBOL Modernization
Source: https://docs.devin.ai/use-cases/examples/cobol-modernization
Modernize legacy COBOL systems to contemporary technologies
## Overview
Devin can help modernize legacy COBOL systems by migrating them to modern languages and architectures. Whether you're moving to Java, Python, C#, or cloud-native microservices, Devin can analyze COBOL code, understand business logic, and create equivalent implementations in modern technologies while preserving critical functionality.
## Why Modernize COBOL?
### Business Drivers
* **Talent shortage**: Fewer developers know COBOL, making maintenance difficult
* **Integration challenges**: Legacy systems struggle to integrate with modern APIs and services
* **Cloud migration**: Move to cloud platforms for better scalability and cost efficiency
* **Agility**: Modern languages enable faster feature development and deployment
### Technical Benefits
* **Improved maintainability**: Modern code is easier to understand and modify
* **Better tooling**: Access to modern IDEs, testing frameworks, and CI/CD pipelines
* **Enhanced performance**: Leverage modern runtime optimizations
* **Security**: Apply current security best practices and patch vulnerabilities
## Related Use Cases
* [Migration & Modernization](/use-cases/migration-modernization)
* [Testing & Refactoring](/use-cases/testing-refactoring)
# Java Upgrades
Source: https://docs.devin.ai/use-cases/examples/java-upgrades
Upgrade your Java applications to the latest versions with ease
## Overview
Devin can help you upgrade Java applications across major versions, handling dependency updates, API migrations, and ensuring compatibility with modern Java features. Whether you're moving from Java 8 to 11, 11 to 17, or any other version upgrade, Devin can automate the tedious parts while maintaining code quality.
## Common Java Upgrade Scenarios
### Java 8 to Java 11
* Module system (Project Jigsaw) compatibility
* Removal of deprecated APIs (e.g., `sun.*` packages)
* Updated garbage collection defaults
* New HTTP client API
### Java 11 to Java 17
* Sealed classes and pattern matching
* Records for immutable data
* Text blocks for multi-line strings
* Enhanced switch expressions
### Spring Boot Version Upgrades
* Spring Boot 2.x to 3.x migrations
* Jakarta EE namespace changes (javax.\* to jakarta.\*)
* Configuration property updates
* Dependency compatibility resolution
## Additional Resources
* [Java Version Migration Guide](https://docs.oracle.com/en/java/javase/17/migrate/getting-started.html)
* [Spring Boot 3.0 Migration Guide](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide)
* [Devin Playbooks](/product-guides/creating-playbooks) - Create reusable upgrade workflows
* [Devin Knowledge](/product-guides/knowledge) - Store project-specific upgrade patterns
## Related Use Cases
* [Testing & Refactoring](/use-cases/testing-refactoring)
* [Migration & Modernization](/use-cases/migration-modernization)
* [Containerization](/use-cases/tutorials/containerization)
# JavaScript to TypeScript Migration
Source: https://docs.devin.ai/use-cases/examples/javascript-to-typescript
Migrate JavaScript codebases to TypeScript for improved type safety and developer experience
## Overview
Devin can help migrate JavaScript codebases to TypeScript, adding type safety, improving code maintainability, and enhancing developer experience. Whether you're converting a small library or a large-scale application, Devin can systematically add type annotations, resolve type errors, and ensure your codebase leverages TypeScript's full potential.
## Why Migrate to TypeScript?
### Developer Experience Benefits
* **Type safety**: Catch errors at compile time instead of runtime
* **Better IDE support**: Enhanced autocomplete, refactoring, and navigation
* **Self-documenting code**: Types serve as inline documentation
* **Easier refactoring**: Confidently make changes with type checking
### Code Quality Improvements
* **Reduced bugs**: Type system prevents common JavaScript errors
* **Better maintainability**: Clear interfaces and contracts between modules
* **Improved collaboration**: Types make code intentions explicit for team members
* **Enhanced tooling**: Access to advanced static analysis and linting
## Common Migration Scenarios
### Gradual Migration
* Convert files incrementally from `.js` to `.ts`
* Use `allowJs` and `checkJs` for mixed codebases
* Prioritize high-value modules first
* Maintain backward compatibility during transition
### Library and Framework Migrations
* React components with proper prop types
* Node.js backends with typed APIs
* Express applications with typed middleware
* Vue.js applications with TypeScript support
### Configuration and Tooling
* Set up `tsconfig.json` with appropriate compiler options
* Configure build tools (Webpack, Vite, etc.)
* Update testing frameworks for TypeScript
* Integrate with existing CI/CD pipelines
## Additional Resources
* [TypeScript Documentation](https://www.typescriptlang.org/docs/)
* [TypeScript Migration Guide](https://www.typescriptlang.org/docs/handbook/migrating-from-javascript.html)
* [Devin Playbooks](/product-guides/creating-playbooks) - Create reusable migration workflows
* [Devin Knowledge](/product-guides/knowledge) - Store project-specific type patterns
## Related Use Cases
* [Testing & Refactoring](/use-cases/testing-refactoring)
* [Migration & Modernization](/use-cases/migration-modernization)
# NoSQL to SQL Migration
Source: https://docs.devin.ai/use-cases/examples/nosql-to-sql
Migrate from NoSQL databases to SQL for improved data consistency and relational integrity
## Overview
Devin can help migrate applications from NoSQL databases to SQL, handling schema design, data transformation, and query refactoring. Whether you're moving from MongoDB to PostgreSQL or DynamoDB to MySQL, Devin can systematically convert your data models, migrate your data, and update your application code to work with relational databases.
## Why Migrate to SQL?
### Data Integrity Benefits
* **ACID compliance**: Ensure data consistency with transactions
* **Referential integrity**: Enforce relationships with foreign keys
* **Schema validation**: Prevent invalid data at the database level
* **Complex queries**: Leverage powerful JOIN operations and aggregations
### Operational Advantages
* **Mature tooling**: Access to decades of SQL optimization and monitoring tools
* **Standardization**: Use industry-standard SQL across different databases
* **Better analytics**: Simplified reporting and business intelligence integration
* **Cost efficiency**: Optimize storage with normalization and indexing
## Common Migration Scenarios
### MongoDB to PostgreSQL
* Convert document collections to normalized tables
* Transform embedded documents into related tables
* Migrate MongoDB queries to SQL with proper JOINs
* Implement indexes for query optimization
### DynamoDB to MySQL
* Map partition keys and sort keys to primary keys
* Convert NoSQL access patterns to SQL queries
* Handle secondary indexes and global tables
* Migrate application code from AWS SDK to SQL drivers
### Schema Design and Normalization
* Analyze NoSQL data structures and relationships
* Design normalized schemas following best practices
* Create migration scripts with data validation
* Implement proper constraints and indexes
## Additional Resources
* [PostgreSQL Documentation](https://www.postgresql.org/docs/)
* [MySQL Documentation](https://dev.mysql.com/doc/)
* [Devin Playbooks](/product-guides/creating-playbooks) - Create reusable migration workflows
* [Devin Knowledge](/product-guides/knowledge) - Store database-specific patterns
## Related Use Cases
* [Migration & Modernization](/use-cases/migration-modernization)
* [Data Analysis](/use-cases/data-analysis)
* [Testing & Refactoring](/use-cases/testing-refactoring)
# SAS to PySpark Migration
Source: https://docs.devin.ai/use-cases/examples/sas-to-pyspark
Migrate SAS analytics workflows to modern PySpark infrastructure
## Overview
Devin can help migrate legacy SAS analytics workflows to modern PySpark, enabling you to leverage cloud-scale data processing, reduce licensing costs, and integrate with modern data platforms. As an open-source technology, PySpark provides the scalability and flexibility needed for big data analytics while maintaining the enterprise readiness of SAS. However, customers can also use Devin to migrate to cloud-native vendors like BigQuery and Snowflake!
## Case Study
Learn how Nubank successfully migrated their legacy ETL systems with Devin, achieving significant improvements in development velocity and code quality.
## Why Migrate from SAS to PySpark?
### Business Benefits
* **Cost reduction**: Eliminate expensive SAS licensing fees
* **Cloud scalability**: Process larger datasets with elastic cloud resources
* **Modern ecosystem**: Integrate with modern data tools (Databricks, AWS EMR, Azure Synapse)
* **Open source**: Leverage community innovations and avoid vendor lock-in
### Technical Advantages
* **Distributed processing**: Handle massive datasets across clusters
* **Real-time analytics**: Support both batch and streaming workloads
* **Flexible deployment**: Run on-premises, cloud, or hybrid environments
* **Rich ecosystem**: Access to Python's extensive data science libraries
## Additional Resources
* [PySpark Documentation](https://spark.apache.org/docs/latest/api/python/)
* [Devin Playbooks](/product-guides/creating-playbooks) - Create reusable migration workflows
* [Devin Knowledge](/product-guides/knowledge) - Store SAS-specific patterns and solutions
## Related Use Cases
* [Migration & Modernization](/use-cases/migration-modernization)
* [Data Analysis](/use-cases/data-analysis)
* [Testing & Refactoring](/use-cases/testing-refactoring)
# Use Cases
Source: https://docs.devin.ai/use-cases/gallery/index
Get inspired by what you can build with Devin
Browse practical examples across engineering workflows. Each use case includes prompts you can try immediately.
# Overview
Source: https://docs.devin.ai/use-cases/index
Proven use cases deployed across hundreds of enterprises
Explore how teams use Devin to accelerate migrations, modernize legacy systems, and automate engineering workflows at scale.
***
Our customers achieve 6-12x efficiency gains when leveraging Devin effectively. This guide explains how to maximize Devin's productivity and showcases use cases Devin has successfully completed for our customers.
### What Makes a Good Use Case for Devin
The best enterprise use cases are large, high-business value projects that can be broken into isolated, repetitive tasks. Each project should have:
Breaking down large projects into smaller, repetitive subtasks takes advantage of Devin's unlimited parallel capacity and leads to the greatest efficiency gains. For example, upgrading tens of thousands of Java files can be divided into isolated slices, each tackled by an individual Devin session.
Devin excels when provided clear guidance on how to complete each task. Always include how to structure the solution, what to test, and relevant context such as existing patterns, constraints, and dependencies.
Devin works best when it is able to easily and objectively verify if it has successfully completed the assigned task. This might include checking the CI passes, running unit tests, or testing user flows in the browser.
## Use Case Library
### Codebase Modernization
Legacy codebases and technical debt impose a persistent toll on developer productivity and introduce security vulnerabilities, compliance risks, and integration challenges. With Devin, modernization projects that would have taken years can be accomplished in months or weeks.
**Version & Framework Upgrades**
Java 8 to 17, Python 2 to 3, PHP 7.x to 8.x
Angular 16 to 18, React 16 to 18
Spring Boot 2.x to 3.x, .NET Framework to .NET 6/7/8
**Technology Migrations**
JavaScript → TypeScript, PySpark Conversions
COBOL/SAS to Python/Java
AWS to Azure, GCP migrations
MongoDB to PostgreSQL, DynamoDB to MySQL
In-house frameworks or libraries
**Architecture Modernization**
SOAP to REST/GraphQL, improve logging, rate-limiting, refactor endpoints
Move business logic from stored procedures to application layer
Monorepo to submodule conversions, extract common code into libraries
### Continuous Code Quality
By automating engineering best practices like vulnerability remediation, adding comprehensive test coverage, and ensuring consistent code quality, Devin empowers engineers to focus on strategic decisions and new feature development.
**Standards Enforcement**
Address vulnerabilities, code smells, and errors from automated scan reports. [SonarQube Guide](/enterprise/use-cases/sonarqube/guide)
Implement multi-language support, centralize language files
Enforce consistent error handling, style guides, and coding standards
Add static typing and type annotations
Implement and enforce code style guides and best practices
**Testing & Validation**
Auto-generate integration tests, unit tests, etc.
Write QA tests and perform automated QA testing
Automatically review and suggest changes on pull requests
**Codebase Maintenance**
Automate documentation maintenance and logging coverage
Remove obsolete feature flags and code paths
Transform development artifacts into production services
Use Devin as a backend for internal agents
# Interactive Applications
Source: https://docs.devin.ai/use-cases/interactive-applications
## Overview
Devin is a great partner for quickly addressing small frontend bugs, handling edge cases, and prototyping. Here are some example prompts and sessions where Devin helps build full stack applications.
## Use Cases
1. Small frontend bug fixes
2. Handling edge cases
3. Building quick MVPs and prototypes
## Example Prompts
```txt Small frontend changes theme={null}
In X repo, can you make it so that pressing enter when focused
on any of the filters inputs will trigger the submit (same as the submit button)
```
```txt Self-host Redash theme={null}
Hi Devin - I want to test out Redash. Please self
host the Redash server, connect a local sqlite database. Add some dummy
data and create an example query & dashboard.
```
# Migration & Modernization
Source: https://docs.devin.ai/use-cases/migration-modernization
## Overview
Devin can take away the pain of migrations, helping you move between different frameworks, languages, etc. Use [playbooks](/product-guides/creating-playbooks) to easily reuse prompts for large migrations.
## Use Cases
1. Language migrations (e.g., JavaScript to TypeScript)
2. Framework upgrades (e.g., React 17 to 18)
3. Database migrations
4. Dependency updates
5. Architecture modernization
## Example Prompts
```txt Java upgrade theme={null}
## Overview
This playbook provides step-by-step instructions for upgrading a Java 7 project to Java 8.
## Procedure
1. Verify if the provided project is indeed on Java 7
2. Install Java 8 Development Kit (JDK)
3. Update the project's build configuration
4. Identify and replace deprecated Java 7 APIs
5. Analyze the codebase for potential Java 8 enhancements
6. Update unit tests
7. Perform thorough testing
8. Update documentation
9. Build and verify the application
## Advice and Tips
- Refer to the Java 8 documentation for detailed information on new features and APIs
- For large-scale migrations, consider using the [API Reference](/api-reference/overview) to run multiple migration sessions in parallel
```
```txt TypeScript migration theme={null}
Please help migrate our JavaScript project to TypeScript. We need to:
1. Add TypeScript configuration
2. Convert .js files to .ts
3. Add appropriate type definitions
4. Update build process
5. Ensure all tests still pass
```
## Example Session
### CSV to Notion Bulk Migration
In this example session, Devin helps a user migrate data from CSV files into Notion.
[https://app.devin.ai/sessions/583736c03c174c92884aad7ada325fe2](https://app.devin.ai/sessions/583736c03c174c92884aad7ada325fe2)
# Testing & Refactoring
Source: https://docs.devin.ai/use-cases/testing-refactoring
## Overview
Devin can analyze existing codebases, identify areas for improvement, or execute on refactoring requirements you share without breaking functionality.
## Common Use Cases
1. Writing and expanding test coverage
2. Code refactoring and optimization
3. API endpoint development and modification
4. Performance improvements
5. Code review and quality assurance
6. Automated testing workflows via the [API Reference](/api-reference/overview)
## Example Prompts
```txt Write unit test theme={null}
Can you get https://github.com/markedjs/marked set up, use the command line tool with the --output/-o flag, then add a unit test to test the --output flag?
There should already be similar tests in bin.test.js that you can add to.
```
```txt Endpoint refactor theme={null}
Currently when users sends a POST to , we . It would be better to split this endpoint into 2 separate endpoints because .
.
.
Test by .
```
```txt General refactor theme={null}
In the slack server, refactor AppRegistry into its own file.
```
## Example Sessions
### Code Coverage Tutorial
Learn how to improve test coverage systematically through our detailed tutorial:
* Writing comprehensive unit tests
* Identifying coverage gaps
* Implementing missing test cases
[View the Code Coverage Tutorial](/use-cases/tutorials/code-coverage)
### Connect4 Code Refactor
A complete refactoring session showing:
* Code structure improvement
* Component separation
* Performance optimization
* Test coverage enhancement
**View Session:**
[https://app.devin.ai/sessions/8965de5e3ae0436985bf3dd2e1a5b4af](https://app.devin.ai/sessions/8965de5e3ae0436985bf3dd2e1a5b4af)
# API Integration
Source: https://docs.devin.ai/use-cases/tutorials/api-integration
Devin can integrate, configure, and test third party APIs in your applications.
# Integrating SendGrid into an Application
Our sample application is an online educational platform written with the Django Python web framework. A [PR](https://github.com/uncc-hice/edukona_backend/pull/47) was recently opened to integrate the SendGrid email API into the application, and in this tutorial we’re going to have Devin attempt its own SendGrid implementation to showcase how it can work with third party APIs.
#### Initial Prompt
In our prompt, we provide some specific instructions about how and where we want Devin to integrate our SendGrid hooks, and we have Devin revert to an earlier commit hash before the above PR was merged, to give us a clean starting point for our integration. Follow along with the live Devin session [here](https://app.devin.ai/sessions/05d9bf38b65d4aa9a16a5c16c8b5fc5e).

Devin investigates the codebase and ensures that there’s no conflicting email implementation that already exists in the application.

#### Implementing SendGrid
It then moves on to implementing the SendGrid API, and prompts us for our API credentials which we can set up as [Secrets](/product-guides/secrets) in Devin’s environment so that it may access them going forward as ENV variables.

Now that it has proper API credentials, Devin finishes implementing SendGrid.

When I compare Devin’s SendGrid implementation to the actual merged PR we linked at the beginning, there are a few notable improvements I observe:
* Devin configured SendGrid in a new email.py module rather than in the same file as the view itself. It also returns True or False to indicate whether the email sending was successful based on the SendGrid response code.
* Devin uses Python’s built-in logging module rather than print (which was a pattern that the PR reviewer specifically commented on).
* Devin also makes the From email configurable rather than hardcoded, but also adds a default value if the ENV var does not exist.
* Devin adds exception handling to its mailInstructor method.
With its core implementation finished, I can ask Devin to test the application by adding an instructor account under my email address. To test the application, it will also need to go through and install and configure all of the dependencies like a PostgreSQL server and relevant Python libraries.

#### Debugging
Devin quickly encounters an error, which is because I never provided it with a FROM address for my SendGrid account. Devin actually navigates in its [Browser](/work-with-devin/devin-session-tools#interactive-browser) to the API docs to figure out what is going on here and understand the error messages and implementation best practices:

I can go back into the Secrets dialog and add a SENDGRID\_FROM\_EMAIL variable for Devin to access.

I also instruct Devin to use the default SendGrid username ‘apikey’ since I have not set up a subaccount for the API:

#### Adding Knowledge
Devin observes that my requests and implementation requirements may be generalizable, and prompts me to add [Knowledge](/product-guides/knowledge#what-is-knowledge) that it can utilize in the future:

If you so choose, you could also edit the Knowledge to add even more specifics if these tactics will be useful in future sessions that your team plans to run.
#### Testing

After a few minutes of environment configuration and setup, Devin finishes its successful session and I see the email in my inbox. I did not actually configure the SendGrid template to have real content in it, but the API request works and so Devin’s work is done!

If I choose to submit a PR, Devin has already drafted the message for me including details of everything it changed in the application and how it works:

Sign up today to [try out Devin](https://cognition.com/get-started#company) and tackle an API integration that’s burning a hole in your team’s backlog.
# Code Coverage
Source: https://docs.devin.ai/use-cases/tutorials/code-coverage
Devin can analyze your codebase's test suite and write additional tests to increase code coverage for your team.
# Improving Code Coverage With Devin
Most applications in production don’t have 100% code coverage. Engineering teams have to ruthlessly prioritize, and tend to focus on writing tests for critical paths to get the most benefit out of their time spent. Devin can bridge this gap by analyzing a codebase’s existing test suite style and increasing coverage of less critical but still important functions.
For this example, we’re going to take an open source Typescript sample application based on the RealWorld spec which already has some tests but not comprehensive coverage: [https://github.com/SeuRonao/realworld-express-prisma](https://github.com/SeuRonao/realworld-express-prisma)
You can follow along with the full Run [here](https://app.devin.ai/sessions/9169ca11ab2141f9b0a5345f0338632d?ts=1727821682237) or you can read through the rest of this post highlighting each step of Devin’s process. We’ll be highlighting various parts of Devin’s Workspace like the Editor or Shell.
#### Initial Prompt
We start off our Run with a simple prompt directing Devin to set up our dev environment and assess the existing code coverage of our application:

In its Shell Devin first clones our repo from GitHub, parses the README file, and installs our project dependencies in its local environment.

Devin then uses its built-in editor to create our .env file so that the application can run locally. When working with Devin, you also have the ability to open VSCode yourself to perform manual edits or review the files Devin is working on.

#### Establishing a Coverage Baseline
Devin then runs the test suite in its Shell. One of the major benefits of Devin is that it not only can modify or create code for your team, it can also work directly in its Browser and Terminal to perform higher level interactions with your codebase, its dev environment, or even your running application.

We can see below how Devin interpreted and translated the results from its Shell into our chat so that it is more human readable and distilled down.

#### Making an Improvement Plan
Now we can move on to the actual task at hand, increasing code coverage. It looks like profileViewer.ts is a good place for us to start, given its essentially nonexistent coverage by default. We prompt Devin on next steps, and it reports back to us on what is going on throughout the process.

Devin is able to read the existing file, determine what test cases we might want to implement based on the functionality that exists, and then actually write the new tests for us without any intervention. After it finishes implementing the new test cases, Devin gives us a final rundown of its changes:

#### Code Review
It also shares the new file with us so that we can download and review it. Alternatively, we could have also asked Devin to [create a Pull Request directly on GitHub](/integrations/gh) with this new file so that it could be looked at as part of our normal code review process. I decide to just review it in Devin’s built-in Editor so that I don’t have to download the file.

Generally the changes look good but we want to make sure there are no runtime bugs that we overlooked, so we ask Devin to run the test suite again and report back.

It runs as expected and we’ve increased our overall coverage from 28.57% of functions to 57.14% of functions, which is exactly what we wanted to achieve. The entire process took Devin less than 10 minutes of working time to implement even though we stepped away in the middle before giving Devin our next set of instructions. You can increase test coverage and remove a tedious task from your engineering team’s backlog just by delegating it to Devin.
If you find yourself frequently coming back to Devin to increase code coverage, you could even turn this prompt into a [detailed Playbook](/product-guides/creating-playbooks) so that you can easily kick off new Runs for different parts of your application. If you want to learn more about what kinds of Prompts Devin works well for, read up on some of our [examples](/learn-about-devin/prompting) in the Docs.
# Containerization
Source: https://docs.devin.ai/use-cases/tutorials/containerization
In this tutorial, we’ll show you how Devin can configure a Docker container to standardize your team’s dev environment.
## Creating a Docker Container
Since Devin has access to a Terminal and can configure and run software on its own server, setting up a Docker container is well within its capabilities.
Our sample application is a Go project with MongoDB as the data store. This session is Devin’s version of a Pull Request that a real developer made to an open source project. Follow along with the live run [here](https://app.devin.ai/sessions/379eb9a40ff2433db49e51c95c7d9bc1?ts=1729908167981).
#### Start With a GitHub Issue
We start with the original GitHub issue:

Next, we can write a simple prompt for Devin based on what this Issue is looking for. We instruct it to read the above GitHub issue for additional context, but also give it our own summary of the proposed solution and what we want Devin to produce.

#### Investigating the Codebase
Devin starts off with an investigation step where it reads our linked GitHub issue and [scans](/release-notes#repo-knowledge) the actual code and configuration files of the project for required dependencies.

After its analysis is complete, Devin moves on to install Docker on its local machine and then create our initial Dockerfile, docker-compose.yml, and .dockerignore so that it can begin testing the container setup. It also configures our .env file so that the application can run with the newly configured container backend.

#### Testing the Container
Devin then moves on to test each container, starting with our MongoDB server and then moving on to our Go environment. Once the containers are up and running, Devin moves on to testing the application itself. From reading through Devin's [Command History](/work-with-devin/devin-session-tools#shell-command-history) I can see that it found our Swagger API definition and loaded it into the built-in [Browser](/work-with-devin/devin-session-tools#interactive-browser) to see how the backend API works.

Devin then put together a curl request to test that the backend API is running and returning results as per its design spec.

#### Debugging
Since we get a **Connection refused** error, Devin immediately moves on to debugging and correcting the Docker configuration. This is a common pattern where Devin can self-correct errors as it goes through a session. Devin quickly corrects the configuration issue, restarts the Docker container, and summarizes its completed work for us.

When we compare Devin’s work to the [PR on the actual project](https://github.com/Ratnesh-Team/Rehabify/pull/137), there are some notable differences and improvements:
* Devin sets up a docker-compose.yml file in addition to our Dockerfile. This gives us some more specific orchestration settings like defining how our network works, how our volumes are configured, and which services depend on one another.
* Devin changes the build process from `go mod tidy` to a method that allows us to cache some of the dependencies in our Docker build.
* Devin builds a statically linked Go binary rather than a dynamically linked one, which should be lighter weight for our docker build.
* Devin configures our CA certificates for HTTPS, and lets us use a .env file for configuration rather than passing in environment variables directly.
* And most notably, Devin adds a MongoDB service in our Docker config which the PR on the project does not. It assumes the developer has a separate MongoDB instance running already.

In 13 minutes, Devin has successfully put together our Docker container for this project’s backend using best practices, tested it, and written a comprehensive summary of its work. Try your own containerization prompt on your own codebase today by [signing up](https://cognition.com/get-started#company) for a Devin account for your team.
# Managing Frontend Components
Source: https://docs.devin.ai/use-cases/tutorials/frontend-components
Devin can work with frontend libraries and share visuals with you during its sessions.
# Creating a Storybook Story
Devin has access to a built-in browser and can take screenshots of its projects and applications. For this tutorial, we’re working with a simple Next.js based open source [dashboard](https://github.com/powerhouse-inc/fusion). Devin will help us take some of the existing Components in our application and add them to our Storybook workshop. If you haven’t heard of it before, [Storybook](https://storybook.js.org/) is an open source frontend ‘workshop’ to help you visualize, categorize, and test your frontend UI components in a centralized place.
#### Initial Prompt
Our prompt for this [session](https://app.devin.ai/sessions/8426d6656a7a4b0c8cb4dccc2d83b138?ts=1729958134257) is fairly simple, as we expect Devin to do some of its own background research for the relevant context on Storybook and our application itself.

#### Installing and Running Storybook
Devin starts by examining our application’s Card component for context and then installs and runs the storybook package in its workspace. One of Devin’s powerful capabilities is that it can install, configure, and run applications itself and respond to the outputs in its built-in Shell. Devin puts together a Storybook config file and then runs the application. Running storybook in this case gives us some build errors.

#### Debugging
We can also see, in Devin’s browser, that the build error we encountered when running storybook also resulted in a frontend error when Devin tried to load the Card component. When you’re dealing with Devin sessions that touch frontend tasks, it can be very handy to be able to step back through what Devin ‘saw’ in its Browser at each stage of the development process:

#### Implementing the Card Story
Devin now moves on to fixing the errors so that our Card story component renders correctly in Storybook. After a small amount of iteration, Devin gets the app to build correctly and sends us a screenshot of the correct Storybook output in our session. Asking Devin to send specific screenshots as it works can help you verify what is going on and rendering in your application’s UI.

When we compare Devin’s implementation of Storybook and specifically the Card story, versus what the core application has, there are a few improvements Devin made over the open source implementation. Notably, Devin added some additional examples of the Card component with more detailed documentation and demonstrations in its story. It also added some configuration support to Storybook for light/dark themes.
We’d encourage you to try out some of your own frontend-oriented tasks with Devin, whether it is helping your team have a better inventory of Components in a tool like Storybook or even testing UI/UX flows in its built in Browser. [Request access to our Teams plan](https://cognition.com/get-started#company) today to try it yourself.
# MCP Use Cases
Source: https://docs.devin.ai/use-cases/tutorials/mcp-use-cases
### Analytics
We use Devin as our data analyst right from Slack. Using database and data warehouse MCPs, Devin answers most of our common data questions.
### Sentry
Send Sentry issues directly to Devin to resolve.
### Linear and Zapier
Tell Devin to create Linear tickets straight from Slack on your phone.
We love using Linear with the Zapier MCP, which connects Devin with hundreds of applications like Google Calendar and Gmail.
### Figma
Devin can now view and comment on Figma designs.
### Datadog
Use Devin to root cause Datadog incidents and open PRs with fixes.
# Web Scraping & Automation
Source: https://docs.devin.ai/use-cases/web-scraping
## Overview
Devin is your tireless web scraping assistant. It can build web scrapers or even do repetitive web research and information gathering tasks itself!
## Use Cases
1. Web scraping and data collection
2. Automated data extraction
3. Converting scraped data to structured formats
4. Handling both static and dynamic web content
5. Browser automation for repetitive tasks
6. Building automated data collection pipelines using the [API Reference](/api-reference/overview)
## Example Prompts
```txt Scrape emojis theme={null}
Use this (https://github.com/muan/unicode-emoji-json) to write a function that converts a string like https://www.gstatic.com/android/keyboard/emojikitchen/20201001/u1f600/u1f600_u2615.png to "grinning_face_warm_beverage" by extracting the 2 emojis (u1f600, u2615) and converting them to actual emojis.
```
```txt Scrape website theme={null}
## Overview
This playbook can be used to scrape a website and return the results to the user, along with the client-side and server-side scraping scripts used to generate the results.
```
```txt Download logos theme={null}
Please find and download the logos of 50 of the Fortune 500 companies.
```
## Example Sessions
### Emoji Data Processing
**Scrape Emojis**
Learn how to parse and convert emoji Unicode data from GitHub repositories into human-readable formats. This session demonstrates working with JSON data sources and string manipulation for emoji processing.
[https://app.devin.ai/sessions/4f8a7b129820493b9c0ca140cddede50](https://app.devin.ai/sessions/4f8a7b129820493b9c0ca140cddede50)
### YouTube Content Extraction
**Scrape YouTube Playlist**
Discover how to programmatically extract video metadata from YouTube playlists. This session covers using Python to access video titles, descriptions, and other playlist information while respecting YouTube's terms of service.
[https://app.devin.ai/sessions/8c6edbbb0bce4b70acd09255e1994c0b](https://app.devin.ai/sessions/8c6edbbb0bce4b70acd09255e1994c0b)
### E-commerce Data Collection
**Scrape Ebay Data**
Learn techniques for gathering product information from eBay listings at scale. This session explores automated web scraping approaches for collecting prices, descriptions, and seller information while handling pagination and rate limiting.
[https://app.devin.ai/sessions/dc70fe0649cb4041852da384e65d42be](https://app.devin.ai/sessions/dc70fe0649cb4041852da384e65d42be)
# List Audit Logs
Source: https://docs.devin.ai/api-reference/v3/audit-logs/enterprise-audit-logs
v3-openapi.yaml GET /v3/enterprise/audit-logs
List audit logs for the enterprise.
Audit logs include the `ai_guardrail_violation` action, recorded when a guardrail is triggered. See the [AI Guardrails](/enterprise/features/ai-guardrails) feature guide for details on configuring guardrails.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission at the enterprise level.
## Time filters
This endpoint supports optional time filters using the `time_after` and `time_before` query parameters.
* Both `time_after` and `time_before` are **Unix timestamps in seconds**, interpreted as UTC.
* If you provide `time_before`, you must also provide `time_after`.
* The time range between `time_after` and `time_before` must be **100 days or less**.
* If no time filters are provided, the API returns audit logs for the full available history (subject to pagination).
# List Organization Audit Logs
Source: https://docs.devin.ai/api-reference/v3/audit-logs/organizations-audit-logs
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/audit-logs
List audit logs for the organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission at the enterprise level.
## Time filters
This endpoint supports optional time filters using the `time_after` and `time_before` query parameters.
* Both `time_after` and `time_before` are **Unix timestamps in seconds**, interpreted as UTC.
* If you provide `time_before`, you must also provide `time_after`.
* The time range between `time_after` and `time_before` must be **100 days or less**.
* If no time filters are provided, the API returns audit logs for the full available history (subject to pagination).
# List Code Scan Findings
Source: https://docs.devin.ai/api-reference/v3/code-scans/enterprise-code-scans-findings
v3-openapi.yaml GET /v3/enterprise/code-scans/findings
List enterprise code scan findings
## Permissions
Requires a service user with the `ViewAccountCodeScans` permission at the enterprise level.
# Get Code Scan Metrics
Source: https://docs.devin.ai/api-reference/v3/code-scans/enterprise-code-scans-metrics
v3-openapi.yaml GET /v3/enterprise/code-scans/metrics
Get metrics for enterprise code scans
## Permissions
Requires a service user with the `ViewAccountCodeScans` permission at the enterprise level.
## Time filters
This endpoint requires the `time_after` and `time_before` query parameters.
* Both `time_after` and `time_before` are **Unix timestamps in seconds**, interpreted as UTC.
* `time_after` must be earlier than `time_before`.
* The time range between `time_after` and `time_before` must be **100 days or less**.
* Metrics are scoped to code scans created within this time range.
# Remediate Code Scan Finding
Source: https://docs.devin.ai/api-reference/v3/code-scans/enterprise-code-scans-remediate
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/code-scans/{scan_id}/findings/{finding_id}/remediate
Launch a Devin session to remediate a code scan finding
## Permissions
Requires a service user with the `UseAccountCodeScans` permission at the enterprise level.
## Behavior
Launches a Devin session to remediate the specified code scan finding: the session analyzes the vulnerable code, implements a fix, and opens a pull request. The session is attributed to the calling principal (the service user or PAT that made the request).
Returns `409 Conflict` if the finding already has a remediation session.
# List Consumption Cycles
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-cycles
v3-openapi.yaml GET /v3/enterprise/consumption/cycles
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-daily
v3-openapi.yaml GET /v3/enterprise/consumption/daily
Get daily ACU consumption for the entire enterprise.
Returns total ACUs and consumption broken down by date.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC. To match the consumption
data shown in the Devin dashboard, pass Unix timestamps that align with this
timezone offset (e.g., 1733385600 for December 5, 2025 at midnight PST).
## Product-Level Breakdown
Each date entry in the response includes an `acus_by_product` object that breaks down the total ACU consumption into its product components: `devin`, `cascade`, and `terminal`. This allows you to see how consumption is distributed across products for each day. When product-level data is not available for a given product, its value defaults to `0.0`.
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get Organization Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-daily-organizations
v3-openapi.yaml GET /v3/enterprise/consumption/daily/organizations/{org_id}
Get daily ACU consumption for a specific organization.
Returns total ACUs and consumption broken down by date for the org.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC. To match the consumption
data shown in the Devin dashboard, pass Unix timestamps that align with this
timezone offset (e.g., 1733385600 for December 5, 2025 at midnight PST).
## Product-Level Breakdown
Each date entry in the response includes an `acus_by_product` object that breaks down the total ACU consumption into its product components: `devin`, `cascade`, and `terminal`. This allows you to see how consumption is distributed across products for each day. When product-level data is not available for a given product, its value defaults to `0.0`.
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get Service User Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-daily-service-users
v3-openapi.yaml GET /v3/enterprise/consumption/daily/service-users/{service_user_id}
Get daily ACU consumption for a specific service user.
Returns total ACUs and consumption broken down by date for sessions
created by the given service user.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC. To match the consumption
data shown in the Devin dashboard, pass Unix timestamps that align with this
timezone offset (e.g., 1733385600 for December 5, 2025 at midnight PST).
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get Session Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-daily-sessions
v3-openapi.yaml GET /v3/enterprise/consumption/daily/sessions/{session_id}
Get daily ACU consumption for a specific session.
Returns total ACUs and consumption broken down by date for the session.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC. To match the consumption
data shown in the Devin dashboard, pass Unix timestamps that align with this
timezone offset (e.g., 1733385600 for December 5, 2025 at midnight PST).
## Product-Level Breakdown
Each date entry in the response includes an `acus_by_product` object that breaks down the total ACU consumption into its product components: `devin`, `cascade`, and `terminal`. This allows you to see how consumption is distributed across products for each day. When product-level data is not available for a given product, its value defaults to `0.0`.
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get User Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/consumption-daily-users
v3-openapi.yaml GET /v3/enterprise/consumption/daily/users/{user_id}
Get daily ACU consumption for a specific user.
Returns total ACUs and consumption broken down by date for the user.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC. To match the consumption
data shown in the Devin dashboard, pass Unix timestamps that align with this
timezone offset (e.g., 1733385600 for December 5, 2025 at midnight PST).
## Product-Level Breakdown
Each date entry in the response includes an `acus_by_product` object that breaks down the total ACU consumption into its product components: `devin`, `cascade`, and `terminal`. This allows you to see how consumption is distributed across products for each day. When product-level data is not available for a given product, its value defaults to `0.0`.
## Permissions
Requires a service user with the `ViewAccountConsumption` permission at the enterprise level.
# Get Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/organizations-consumption-daily
v3-openapi.yaml GET /v3/organizations/{org_id}/consumption/daily
Get daily ACU consumption for the organization.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC.
## Product-Level Breakdown
Each date entry in the response includes an `acus_by_product` object that breaks down the total ACU consumption into its product components: `devin`, `cascade`, and `terminal`.
## Permissions
Requires a service user with the `ViewOrgConsumption` permission at the organization level.
# Get Service User Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/organizations-consumption-daily-service-users
v3-openapi.yaml GET /v3/organizations/{org_id}/consumption/daily/service-users/{service_user_id}
Get daily ACU consumption for a specific service user within the organization.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC.
## Permissions
Requires a service user with the `ViewOrgConsumption` permission at the organization level.
# Get Session Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/organizations-consumption-daily-sessions
v3-openapi.yaml GET /v3/organizations/{org_id}/consumption/daily/sessions/{session_id}
Get daily ACU consumption for a specific session within the organization.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC.
## Permissions
Requires a service user with the `ViewOrgConsumption` permission at the organization level.
# Get User Daily Consumption
Source: https://docs.devin.ai/api-reference/v3/consumption/organizations-consumption-daily-users
v3-openapi.yaml GET /v3/organizations/{org_id}/consumption/daily/users/{user_id}
Get daily ACU consumption for a specific user within the organization.
**Timezone behavior**: Billing cycles use midnight PST (Pacific Standard Time)
as the day boundary, which corresponds to 08:00:00 UTC.
## Permissions
Requires a service user with the `ViewOrgConsumption` permission at the organization level.
# List repositories for a git connection
Source: https://docs.devin.ai/api-reference/v3/git-connections/get-git-providers-connection-repositories
v3-openapi.yaml GET /v3/enterprise/git-providers/connections/{connection_id}/repositories
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# List Git Connections
Source: https://docs.devin.ai/api-reference/v3/git-connections/git-providers-connections
v3-openapi.yaml GET /v3/enterprise/git-providers/connections
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# Clear Git Permissions
Source: https://docs.devin.ai/api-reference/v3/git-permissions/clear-organizations-git-providers-permissions
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/git-providers/permissions
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# Delete Git Permission
Source: https://docs.devin.ai/api-reference/v3/git-permissions/delete-organizations-git-providers-permissions
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/git-providers/permissions/{git_permission_id}
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# List Git Permissions
Source: https://docs.devin.ai/api-reference/v3/git-permissions/organizations-git-providers-permissions
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/git-providers/permissions
List git permissions for the organization.
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# Update Git Permission
Source: https://docs.devin.ai/api-reference/v3/git-permissions/patch-organizations-git-providers-permissions
v3-openapi.yaml PATCH /v3/enterprise/organizations/{org_id}/git-providers/permissions/{git_permission_id}
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# Create Git Permissions
Source: https://docs.devin.ai/api-reference/v3/git-permissions/post-organizations-git-providers-permissions
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/git-providers/permissions
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# Replace Git Permissions
Source: https://docs.devin.ai/api-reference/v3/git-permissions/put-organizations-git-providers-permissions
v3-openapi.yaml PUT /v3/enterprise/organizations/{org_id}/git-providers/permissions
## Permissions
Requires a service user with the `ManageGitIntegrations` permission at the enterprise level.
# List Guardrail Violations
Source: https://docs.devin.ai/api-reference/v3/guardrail-violations/enterprise-guardrail-violations
v3-openapi.yaml GET /v3beta1/enterprise/guardrail-violations
List guardrail violations across the enterprise.
For an overview of how guardrails work and how to configure them, see the [AI Guardrails](/enterprise/features/ai-guardrails) feature guide.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission at the enterprise level.
## Time filters
This endpoint supports optional time filters using the `time_after` and `time_before` query parameters.
* Both `time_after` and `time_before` are **Unix timestamps in seconds**, interpreted as UTC.
* If you provide `time_before`, you must also provide `time_after`.
* The time range between `time_after` and `time_before` must be **100 days or less**.
* If no time filters are provided, the API returns guardrail violations for the full available history (subject to pagination).
# List Organization Guardrail Violations
Source: https://docs.devin.ai/api-reference/v3/guardrail-violations/organizations-guardrail-violations
v3-openapi.yaml GET /v3beta1/enterprise/organizations/{org_id}/guardrail-violations
List guardrail violations for a specific organization.
For an overview of how guardrails work and how to configure them, see the [AI Guardrails](/enterprise/features/ai-guardrails) feature guide.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission at the enterprise level.
## Time filters
This endpoint supports optional time filters using the `time_after` and `time_before` query parameters.
* Both `time_after` and `time_before` are **Unix timestamps in seconds**, interpreted as UTC.
* If you provide `time_before`, you must also provide `time_after`.
* The time range between `time_after` and `time_before` must be **100 days or less**.
* If no time filters are provided, the API returns guardrail violations for the full available history (subject to pagination).
# List Hypervisors
Source: https://docs.devin.ai/api-reference/v3/hypervisors/hypervisors
v3-openapi.yaml GET /v3/enterprise/hypervisors
## Permissions
Requires a service user with the `ViewEnterpriseInfraDetails` permission at the enterprise level.
# Get Active Users for Custom Date Range
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-active-users
v3-openapi.yaml GET /v3/enterprise/metrics/active-users
Get unique active users for a custom date range.
A user is considered active if they have created at least min_sessions sessions
OR at least min_searches searches within the specified time range.
Returns a single count of unique active users across the entire range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Daily Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-dau
v3-openapi.yaml GET /v3/enterprise/metrics/dau
Get daily active users for each day in the specified time range.
A user is considered active on a given day if they have created at least
min_sessions sessions OR at least min_searches searches during that UTC day.
Returns a list of daily active user counts, one entry per day in the range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Monthly Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-mau
v3-openapi.yaml GET /v3/enterprise/metrics/mau
Get monthly active users for each month in the specified time range.
A user is considered active in a given month if they have created at least
min_sessions sessions OR at least min_searches searches during that UTC month.
Returns a list of monthly active user counts, one entry per month in the range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get PR Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-prs
v3-openapi.yaml GET /v3/enterprise/metrics/prs
Get aggregated PR metrics for the enterprise account.
Optionally filter by playbook_id to get metrics for PRs from sessions created with a specific playbook.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Search Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-searches
v3-openapi.yaml GET /v3/enterprise/metrics/searches
Get aggregated search metrics for the enterprise account.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Session Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-sessions
v3-openapi.yaml GET /v3/enterprise/metrics/sessions
Get aggregated session metrics for the enterprise account.
Optionally filter by playbook_id to get metrics for sessions created with a specific playbook.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Session Metrics by Category
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-sessions-by-category
v3-openapi.yaml GET /v3/enterprise/metrics/sessions-by-category
Get session counts and ACU consumption grouped by category and subcategory.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Usage Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-usage
v3-openapi.yaml GET /v3/enterprise/metrics/usage
Get aggregated usage metrics for the enterprise account.
Returns counts of sessions, searches, and PRs (opened, closed, merged)
within the specified time range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Weekly Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/metrics-wau
v3-openapi.yaml GET /v3/enterprise/metrics/wau
Get weekly active users for each week in the specified time range.
A user is considered active in a given week if they have created at least
min_sessions sessions OR at least min_searches searches during that UTC week.
Weeks are defined as Monday 00:00:00 UTC to Sunday 23:59:59 UTC.
Returns a list of weekly active user counts, one entry per week in the range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Active Users for Custom Date Range
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-active-users
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/active-users
Get unique active users for a custom date range.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Daily Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-dau
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/dau
Get daily active users for each day in the specified time range.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Monthly Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-mau
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/mau
Get monthly active users for each month in the specified time range.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get PR Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-prs
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/prs
Get aggregated PR metrics for the organization.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Search Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-searches
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/searches
Get aggregated search metrics for the organization.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Session Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-sessions
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/sessions
Get aggregated session metrics for the organization.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Organization Usage Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-usage
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/metrics/usage
Get aggregated usage metrics for the enterprise account.
Returns counts of sessions, searches, and PRs (opened, closed, merged)
within the specified time range.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
# Get Usage Metrics
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-usage-org
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/usage
Get aggregated usage metrics for the organization.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Get Weekly Active Users
Source: https://docs.devin.ai/api-reference/v3/metrics/organizations-metrics-wau
v3-openapi.yaml GET /v3/organizations/{org_id}/metrics/wau
Get weekly active users for each week in the specified time range.
## Permissions
Requires a service user with the `ViewOrgMetrics` permission at the organization level.
# Delete a playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/delete-enterprise-playbooks-playbook-id
v3-openapi.yaml DELETE /v3/enterprise/playbooks/{playbook_id}
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission at the enterprise level.
# Delete an org-level playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/delete-organizations-playbooks-playbook-id
v3-openapi.yaml DELETE /v3/organizations/{org_id}/playbooks/{playbook_id}
Delete a playbook for an organization.
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission for the specified organization.
# List all playbooks.
Source: https://docs.devin.ai/api-reference/v3/playbooks/enterprise-playbooks
v3-openapi.yaml GET /v3/enterprise/playbooks
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission at the enterprise level.
# Get a playbook by ID.
Source: https://docs.devin.ai/api-reference/v3/playbooks/get-enterprise-playbook
v3-openapi.yaml GET /v3/enterprise/playbooks/{playbook_id}
Get a specific playbook by ID.
# Get an org-level playbook by ID
Source: https://docs.devin.ai/api-reference/v3/playbooks/get-organizations-playbook
v3-openapi.yaml GET /v3/organizations/{org_id}/playbooks/{playbook_id}
Get a specific playbook by ID for an organization.
# Create an enterprise-level playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/post-enterprise-playbooks
v3-openapi.yaml POST /v3/enterprise/playbooks
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission at the enterprise level.
# Update a playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/put-enterprise-playbooks-playbook-id
v3-openapi.yaml PUT /v3/enterprise/playbooks/{playbook_id}
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission at the enterprise level.
# Update an org-level playbook
Source: https://docs.devin.ai/api-reference/v3/playbooks/put-organizations-playbooks-playbook-id
v3-openapi.yaml PUT /v3/organizations/{org_id}/playbooks/{playbook_id}
Update a playbook for an organization.
## Permissions
Requires a service user with the `ManageAccountPlaybooks` permission for the specified organization.
# Get Queue
Source: https://docs.devin.ai/api-reference/v3/queue/enterprise-queue
v3-openapi.yaml GET /v3/enterprise/queue
Get the queue status for an enterprise.
Returns the total number of queued sessions (status: new, resuming, claimed)
and a status indicator (normal/elevated/high).
This endpoint is useful for enterprise admins to monitor queue health and
set up alerts for capacity issues.
## Permissions
Requires a service user with the `ViewAccountMetrics` permission at the enterprise level.
## Status Thresholds
The `status` field indicates the current queue pressure based on the number of queued sessions:
| Status | Condition | Description |
| ---------- | --------------------- | --------------------------- |
| `normal` | queue\_size ≤ 10 | Queue is operating normally |
| `elevated` | 11 ≤ queue\_size ≤ 50 | Queue pressure is elevated |
| `high` | queue\_size > 50 | Queue pressure is high |
# Bulk remove repositories from indexing
Source: https://docs.devin.ai/api-reference/v3/repositories/delete-organizations-bulk-remove-repositories
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/repositories/indexing
Disables indexing and clears configured branches for a batch of repositories.
## Permissions
Requires a service user with the `IndexOrgRepositories` permission at the organization level.
## Behavior
Disables indexing and clears all configured branches for the specified repositories. Returns 404 if any of the specified repositories are not found.
# Remove a branch from indexing
Source: https://docs.devin.ai/api-reference/v3/repositories/delete-organizations-remove-branch
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/repositories/{repository_path}/indexing/branches/{branch_name}
## Permissions
Requires a service user with the `IndexOrgRepositories` permission at the organization level.
## Behavior
Removes a specific branch from indexing for the specified repository. If no branches remain after removal, indexing is automatically disabled for the repository.
Returns 404 if the branch is not configured for indexing.
# Remove a repository from indexing
Source: https://docs.devin.ai/api-reference/v3/repositories/delete-organizations-remove-repository
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/repositories/{repository_path}/indexing
Disables indexing and clears configured branches for a single repository.
## Permissions
Requires a service user with the `IndexOrgRepositories` permission at the organization level.
## Behavior
Disables indexing and clears all configured branches for the specified repository.
# Get indexing status for a repository
Source: https://docs.devin.ai/api-reference/v3/repositories/get-organizations-repository-indexing-status
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/repositories/{repository_path}/indexing
## Permissions
Requires a service user with the `Read` permission at the organization level.
## Path parameters
* **`repository_path`** — The full path of the repository (e.g., `org/repo-name`).
# List indexed repositories
Source: https://docs.devin.ai/api-reference/v3/repositories/list-organizations-indexed-repositories
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/repositories/indexing
## Permissions
Requires a service user with the `Read` permission at the organization level.
# List repositories available to an organization
Source: https://docs.devin.ai/api-reference/v3/repositories/list-organizations-repositories
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/repositories
## Permissions
Requires a service user with the `Read` permission at the organization level.
## Query parameters
* **`filter_name`** — Filter repositories by name (case-insensitive substring match).
* **`only_repo_paths`** — Only return repositories matching these paths.
* **`exclude_repo_paths`** — Exclude repositories matching these paths.
* **`load_indexing_status`** — Whether to include indexing status in the response (default: `true`). Set to `false` for faster responses when indexing status is not needed.
# Bulk index repositories
Source: https://docs.devin.ai/api-reference/v3/repositories/put-organizations-bulk-index-repositories
v3-openapi.yaml PUT /v3beta1/organizations/{org_id}/repositories/indexing
Idempotently enables indexing for a batch of repositories and triggers indexing jobs.
## Permissions
Requires a service user with the `IndexOrgRepositories` permission at the organization level.
## Behavior
This endpoint is **idempotent** — calling it multiple times with the same repositories will not create duplicate indexing jobs. It enables indexing and triggers indexing jobs for each repository in the request.
You can optionally specify `branch_names` for each repository to index specific branches. If omitted, the default branch is used.
# Index a repository
Source: https://docs.devin.ai/api-reference/v3/repositories/put-organizations-index-repository
v3-openapi.yaml PUT /v3beta1/organizations/{org_id}/repositories/{repository_path}/indexing
Idempotently enables indexing for a single repository and triggers indexing jobs.
## Permissions
Requires a service user with the `IndexOrgRepositories` permission at the organization level.
## Behavior
This endpoint is **idempotent** — calling it multiple times for the same repository will not create duplicate indexing jobs. It enables indexing and triggers indexing jobs for the specified repository.
You can optionally specify `branch_names` in the request body to index specific branches. If omitted, the default branch is used.
# Delete schedule
Source: https://docs.devin.ai/api-reference/v3/schedules/delete-organizations-schedule
v3-openapi.yaml DELETE /v3/organizations/{org_id}/schedules/{schedule_id}
Soft delete a schedule.
## Permissions
Requires a service user with the `ManageOrgSchedules` permission at the organization level.
## Notes
This performs a soft delete. The schedule will be disabled and marked as deleted. It will no longer appear in list results.
# Get schedule
Source: https://docs.devin.ai/api-reference/v3/schedules/get-organizations-schedule
v3-openapi.yaml GET /v3/organizations/{org_id}/schedules/{schedule_id}
Get a specific schedule by ID.
## Permissions
Requires a service user with the `ManageOrgSchedules` permission at the organization level.
# List schedules
Source: https://docs.devin.ai/api-reference/v3/schedules/organizations-schedules
v3-openapi.yaml GET /v3/organizations/{org_id}/schedules
List all schedules for the organization.
## Permissions
Requires a service user with the `ManageOrgSchedules` permission at the organization level.
# Update schedule
Source: https://docs.devin.ai/api-reference/v3/schedules/patch-organizations-schedule
v3-openapi.yaml PATCH /v3/organizations/{org_id}/schedules/{schedule_id}
Update an existing schedule.
## Permissions
Requires a service user with the `ManageOrgSchedules` permission at the organization level.
## Notes
All fields are optional. Only the fields provided in the request body will be updated. To disable a schedule, set `enabled` to `false`.
Setting `playbook_id` to `null` will clear the associated playbook.
You can change the `schedule_type` between `recurring` and `one_time`. When changing to `one_time`, provide `scheduled_at` with a future ISO 8601 datetime. When changing to `recurring`, provide `frequency` with a valid cron expression.
## Execution identity
The `run_as_user_id` parameter controls which user identity the schedule runs as. When a schedule fires, sessions are created under this user — they receive notifications and the session appears in their history.
* **Set a user**: Provide a valid user ID to change the execution identity. This requires:
1. The service user must have `ImpersonateOrgSessions` permission
2. The target user must be a member of the organization
3. The target user must have `UseDevinSessions` permission
* **Clear (set to `null`)**: Reverts the schedule to run as the default bot user
* **Omit the field**: Leaves the current execution identity unchanged
# Create schedule
Source: https://docs.devin.ai/api-reference/v3/schedules/post-organizations-schedules
v3-openapi.yaml POST /v3/organizations/{org_id}/schedules
Create a new scheduled session.
## Permissions
Requires a service user with the `ManageOrgSchedules` permission at the organization level.
## Schedule type
The `schedule_type` field controls whether the schedule is recurring or one-time:
* `recurring` (default) — Requires the `frequency` field with a cron expression
* `one_time` — Requires the `scheduled_at` field with an ISO 8601 datetime in the future
## Frequency
For recurring schedules, the `frequency` field accepts a standard cron expression (e.g., `0 9 * * 1-5` for weekdays at 9 AM UTC).
## Scheduled at
For one-time schedules, the `scheduled_at` field accepts an ISO 8601 datetime with timezone (e.g., `2026-03-01T09:00:00Z`). The datetime must be in the future. After execution, the schedule is automatically disabled.
## Agent types
| Agent | Description |
| -------------- | ------------------------------ |
| `devin` | Standard Devin agent (default) |
| `data_analyst` | Data analyst agent |
| `advanced` | Advanced agent |
## User impersonation
The `create_as_user_id` parameter allows creating a schedule on behalf of another user. This requires:
1. The service user must have `ImpersonateOrgSessions` permission
2. The target user must be a member of the organization
3. The target user must have `UseDevinSessions` permission
# Delete an org-level secret
Source: https://docs.devin.ai/api-reference/v3/secrets/delete-organizations-secrets
v3-openapi.yaml DELETE /v3/organizations/{org_id}/secrets/{secret_id}
Delete a secret for an organization.
## Permissions
Requires a service user with the `ManageOrgSecrets` permission at the organization level.
# List org-level secrets
Source: https://docs.devin.ai/api-reference/v3/secrets/organizations-secrets
v3-openapi.yaml GET /v3/organizations/{org_id}/secrets
List secrets for an organization.
## Permissions
Requires a service user with the `ManageOrgSecrets` permission at the organization level.
# Create an org-level secret
Source: https://docs.devin.ai/api-reference/v3/secrets/post-organizations-secrets
v3-openapi.yaml POST /v3/organizations/{org_id}/secrets
Create a secret for an organization.
## Permissions
Requires a service user with the `ManageOrgSecrets` permission at the organization level.
# Get Self
Source: https://docs.devin.ai/api-reference/v3/self/self
v3-openapi.yaml GET /v3/self
## Permissions
Requires a service user or PAT user with the `ReadAccountMeta` permission.
# Delete the enterprise blueprint (soft-delete)
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/delete-enterprise-blueprint
v3-openapi.yaml DELETE /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
## Behavior
Soft-deletes the enterprise blueprint.
# Delete an enterprise blueprint file
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/delete-enterprise-blueprint-file
v3-openapi.yaml DELETE /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}/files/{file_id}
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
# Soft-delete a blueprint
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/delete-organizations-blueprint
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level. Deleting org-tier blueprints requires the `ManageOrgSnapshots` permission.
## Behavior
Soft-deletes the blueprint.
# Delete a blueprint file
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/delete-organizations-blueprint-file
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}/files/{file_id}
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# Unpin a build (no-op if not pinned)
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/delete-organizations-build-pin
v3-openapi.yaml DELETE /v3beta1/organizations/{org_id}/snapshot-setup/builds/{build_id}/pin
Unpin the org if and only if it is currently pinned to ``build_id``.
No-op (still 204) when the org is not pinned to this build.
## Permissions
Requires a service user with the `ManageOrgSnapshots` permission at the organization level.
## Behavior
Unpins a build. No-op if the build is not currently pinned.
# Get the enterprise blueprint
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-enterprise-blueprint
v3-openapi.yaml GET /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
# Presigned URL for the enterprise blueprint YAML
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-enterprise-blueprint-contents
v3-openapi.yaml GET /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}/contents
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
## Behavior
Returns a presigned URL for downloading the enterprise blueprint's YAML file.
# Get a single blueprint
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-organizations-blueprint
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# Presigned URL for the blueprint's YAML
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-organizations-blueprint-contents
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}/contents
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
## Behavior
Returns a presigned URL for downloading the blueprint's YAML file.
# Get a single build
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-organizations-build
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/builds/{build_id}
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# Presigned URL for the build's log file
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/get-organizations-build-logs
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/builds/{build_id}/logs
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
## Behavior
Returns a presigned URL for downloading the build's log file.
# List enterprise blueprint files
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/list-enterprise-blueprint-files
v3-openapi.yaml GET /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}/files
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
# List enterprise-tier blueprints
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/list-enterprise-blueprints
v3-openapi.yaml GET /v3beta1/enterprise/snapshot-setup/blueprints
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
# List blueprint files
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/list-organizations-blueprint-files
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}/files
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# List org- and repo-tier blueprints
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/list-organizations-blueprints
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/blueprints
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# List builds for the org
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/list-organizations-builds
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/snapshot-setup/builds
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
# Update a blueprint's contents and/or position
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/patch-organizations-blueprint
v3-openapi.yaml PATCH /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}
Partial update for a single blueprint. Does NOT auto-trigger a build.
Fields honored:
- ``contents`` — writes a new YAML version for the blueprint.
- ``position`` — sets the repo-tier blueprint's execution position.
Returns ``400`` on an org-tier blueprint (those have no position).
Returns ``400`` when the body is empty.
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level. Creating or updating org-tier blueprints requires the `ManageOrgSnapshots` permission.
## Behavior
Updates a blueprint's contents and/or position. Does not auto-trigger a build.
# Upload an enterprise blueprint file
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-enterprise-blueprint-file
v3-openapi.yaml POST /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}/files
Upload a file attachment (env-var substitution material) to the blueprint.
Returns 409 if the derived env-var name collides with another active file.
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
## Behavior
Uploads a file to the enterprise blueprint. Files are referenced in the blueprint YAML and made available during snapshot builds.
# Create the enterprise-tier blueprint
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-enterprise-blueprints
v3-openapi.yaml POST /v3beta1/enterprise/snapshot-setup/blueprints
Create the single enterprise-tier blueprint.
Returns 409 if a blueprint already exists for this enterprise.
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
## Behavior
Creates the enterprise-tier blueprint. A blueprint defines the declarative environment configuration for Devin sessions. Mutating a blueprint does not auto-trigger a build — you must explicitly call the builds endpoint.
# Upload a blueprint file
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-organizations-blueprint-file
v3-openapi.yaml POST /v3beta1/organizations/{org_id}/snapshot-setup/blueprints/{blueprint_id}/files
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level.
## Behavior
Uploads a file to the blueprint. Files are referenced in the blueprint YAML and made available during snapshot builds.
# Create an org- or repo-tier blueprint
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-organizations-blueprints
v3-openapi.yaml POST /v3beta1/organizations/{org_id}/snapshot-setup/blueprints
Create a blueprint. ``type`` is inferred from ``repo_name``.
Per spec, this never auto-triggers a build — callers must
``POST /builds`` explicitly.
## Permissions
Requires a service user with the `ManageRepoBlueprints` permission at the organization level. Creating org-tier blueprints requires the `ManageOrgSnapshots` permission.
## Behavior
Creates an org- or repo-tier blueprint. A blueprint defines the declarative environment configuration for Devin sessions. Mutating a blueprint does not auto-trigger a build — you must explicitly call the builds endpoint.
# Cancel an in-flight build
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-organizations-build-cancel
v3-openapi.yaml POST /v3beta1/organizations/{org_id}/snapshot-setup/builds/{build_id}/cancel
## Permissions
Requires a service user with the `ManageOrgSnapshots` permission at the organization level.
## Behavior
Cancels an in-flight build. Has no effect on builds that have already completed.
# Pin the org to a specific successful build
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-organizations-build-pin
v3-openapi.yaml POST /v3beta1/organizations/{org_id}/snapshot-setup/builds/{build_id}/pin
Pin a successful build (less than 7 days old).
Translates the SDK's 400 errors into 409 (per spec: "409 if the
build is not succeeded, or older than 7 days").
## Permissions
Requires a service user with the `ManageOrgSnapshots` permission at the organization level.
## Behavior
Pins the organization to a specific successful build. New sessions will use this pinned snapshot until it is unpinned.
# Trigger a manual build
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/post-organizations-builds
v3-openapi.yaml POST /v3beta1/organizations/{org_id}/snapshot-setup/builds
Manually trigger a snapshot build using the org's current blueprints.
## Permissions
Requires a service user with the `ManageOrgSnapshots` permission at the organization level.
## Behavior
Triggers a manual snapshot build for the organization. The build is asynchronous — poll the build status endpoint to track progress.
# Replace the enterprise blueprint's YAML contents
Source: https://docs.devin.ai/api-reference/v3/snapshot-setup/put-enterprise-blueprint
v3-openapi.yaml PUT /v3beta1/enterprise/snapshot-setup/blueprints/{blueprint_id}
## Permissions
Requires a service user with the `ManageAccountSnapshots` permission at the enterprise level.
## Behavior
Replaces the enterprise blueprint's YAML contents. Does not auto-trigger a build.
# Delete User
Source: https://docs.devin.ai/api-reference/v3/users/delete-members-users
v3-openapi.yaml DELETE /v3/enterprise/members/users/{user_id}
This endpoint only operates on users with **direct** role assignments. Users whose membership is derived from IDP group assignments cannot be removed through this endpoint — manage their membership through IDP group configuration instead.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Get User
Source: https://docs.devin.ai/api-reference/v3/users/get-members-user
v3-openapi.yaml GET /v3/enterprise/members/users/{user_id}
Get a user by ID. Returns both direct and IDP-group-derived role assignments.
This endpoint returns a user by ID, including both direct role assignments (`role_assignments`) and IDP-group-derived role assignments (`idp_role_assignments`).
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Users
Source: https://docs.devin.ai/api-reference/v3/users/members-users
v3-openapi.yaml GET /v3/enterprise/members/users
This endpoint only returns users with **direct** role assignments. To list users whose membership is derived from IDP group assignments, use the [List IDP group users](/api-reference/v3/users/members-idp-users) endpoint.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Update User
Source: https://docs.devin.ai/api-reference/v3/users/patch-members-users
v3-openapi.yaml PATCH /v3/enterprise/members/users/{user_id}
This endpoint only operates on users with **direct** role assignments. To manage roles inherited through IDP group membership, use the [IDP group role management](/api-reference/v3/idp-groups/members-idp-groups) endpoints.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Invite Users
Source: https://docs.devin.ai/api-reference/v3/users/post-members-users
v3-openapi.yaml POST /v3/enterprise/members/users
This endpoint creates **direct** role assignments for invited users. To manage membership through IDP groups, use the [IDP group role management](/api-reference/v3/idp-groups/members-idp-groups) endpoints.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Personal Access Tokens [Closed Beta]
Source: https://docs.devin.ai/api-reference/personal-access-tokens
Authenticate as yourself for programmatic API access
Personal Access Tokens are currently in **closed beta** and are feature-flagged. [Contact support](mailto:support@cognition.ai) to request access. PATs are **not available** for SSO/enterprise accounts.
## Overview
Personal Access Tokens (PATs) allow human users to authenticate programmatically under their own identity. Unlike service user API keys (which authenticate as a non-human service user), a PAT authenticates as **you** — the human user who created the token.
| Token type | Authenticates as | Identity | Permissions |
| ------------------------- | ------------------------ | --------------------------- | ------------------------------------ |
| **Service User API Key** | Service User (non-human) | The service user's identity | The service user's assigned role |
| **Personal Access Token** | User (human) | Your user identity | Your permissions and org memberships |
All API credentials use the `cog_` prefix format. Both token types are used identically in the `Authorization` header:
```bash theme={null}
curl "https://api.devin.ai/v3/organizations/$DEVIN_ORG_ID/sessions" \
-H "Authorization: Bearer $YOUR_PAT"
```
## When to use PATs
PATs are designed for scenarios where you need programmatic API access **as yourself**:
* **Personal scripts and tooling** — automate your own workflows without a shared service user
* **Local development** — test API integrations using your own account
* **Short-lived automation** — one-off scripts that should be attributed to you
For production integrations, CI/CD pipelines, and shared automation, use [service user API keys](/api-reference/authentication#service-users-recommended-for-automation) instead. Service users provide better audit trails, centralized key management, and RBAC controls.
## How it works
1. **Generate a PAT** in your account settings
2. The token starts with `cog_` and is shown only once at creation time
3. Use the token in the `Authorization` header — exactly like a service user API key
4. Every API call authenticates as your user account — your permissions, org memberships, and audit trail apply
## Key differences from service user API keys
| Aspect | Service User API Key | Personal Access Token |
| ------------------ | ---------------------------------- | ---------------------------------- |
| **Identity** | Non-human service user | Your human user account |
| **Permissions** | Controlled by assigned RBAC role | Inherits your existing permissions |
| **Audit trail** | Actions attributed to service user | Actions attributed to you |
| **Key management** | Managed by org/enterprise admins | Managed by you personally |
| **Use case** | Production automation, CI/CD | Personal scripts, local tooling |
| **Availability** | Generally available | Closed beta |
## Limitations
* **Closed beta**: PATs require a feature flag to be enabled for your account
* **Not available for SSO/enterprise accounts**: Currently limited to non-SSO accounts
* **Personal scope**: PATs are tied to your individual account and cannot be shared
## Security considerations
* Treat PATs with the same care as passwords — they provide full access to your account
* Store PATs in environment variables or secret managers, never in source code
* Revoke PATs immediately if compromised
* Use the minimum scope necessary for your use case
* Prefer service user API keys for any shared or production automation
## Next steps
* [Authentication overview](/api-reference/authentication) — understand the full auth model
* [Teams quick start](/api-reference/getting-started/teams-quickstart) — get started with service users
# Download an attachment
Source: https://docs.devin.ai/api-reference/v1/attachments/download-attachment-files
v1-openapi.yaml GET /v1/attachments/{uuid}/{name}
Download attachment files that were previously uploaded. Returns a redirect to a presigned URL for secure file access.
This endpoint allows you to download files from a Devin session. If you want to upload resources, you should use the [upload endpoint](/api-reference/v1/attachments/upload-files-for-devin-to-work-with).
The endpoint returns a 307 redirect to a presigned URL that provides temporary access to the file. The presigned URL is valid for 60 seconds.
## Example Usage
```python theme={null}
import requests
# Download an attachment
response = requests.get(
f"https://api.devin.ai/v1/attachments/{uuid}/{filename}",
headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
allow_redirects=True
)
# Save the file content
with open(filename, "wb") as f:
f.write(response.content)
```
# Upload an attachment
Source: https://docs.devin.ai/api-reference/v1/attachments/upload-files-for-devin-to-work-with
v1-openapi.yaml POST /v1/attachments
Upload files for Devin to work with during sessions. Supports various file types including code, data, and documentation files.
This endpoint uploads files to our servers and returns a URL that you can reference in Devin sessions. The file isn't automatically sent to any session - you need to include the URL in your prompts.
## How to Use Uploaded Files
Devin only recognizes attachments when they are written in the exact format `ATTACHMENT:"{file_url}"` (singular `ATTACHMENT`, all caps). The `ATTACHMENT:` line must be on its own line in the prompt, and the URL must be enclosed in double quotes.
Simply including the raw URL without this format will not work. Variants like `ATTACHMENTS:` (plural) are also not recognized.
To reference an uploaded file in a Devin session:
1. **Upload the file** using this endpoint to get a URL
2. **Include the URL in your prompt** when creating a session or sending a message
3. **Format the URL correctly** by putting `ATTACHMENT:"{file_url}"` on its own line in your prompt
## Complete Example
```python theme={null}
import os
import requests
DEVIN_API_KEY = os.getenv("DEVIN_API_KEY")
# Step 1: Upload the file
with open("data.csv", "rb") as f:
response = requests.post(
"https://api.devin.ai/v1/attachments",
headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
files={"file": f}
)
file_url = response.text
# Step 2: Create a session that references the uploaded file
session_response = requests.post(
"https://api.devin.ai/v1/sessions",
headers={"Authorization": f"Bearer {DEVIN_API_KEY}"},
json={
"prompt": f"""Please analyze the data in the attached CSV file and create a summary report.
Focus on identifying trends and key insights.
ATTACHMENT:"{file_url}"
"""
}
)
print(session_response.json())
```
**Important:** The `ATTACHMENT:` prefix must be on its own line in the prompt with the URL enclosed in double quotes, exactly as shown above: `ATTACHMENT:"{url}"`. To attach multiple files, add one `ATTACHMENT:"{file_url}"` line per file.
# Create knowledge entry
Source: https://docs.devin.ai/api-reference/v1/knowledge/create-knowledge
v1-openapi.yaml POST /v1/knowledge
Create a new knowledge entry for the organization.
# Delete knowledge entry
Source: https://docs.devin.ai/api-reference/v1/knowledge/delete-knowledge
v1-openapi.yaml DELETE /v1/knowledge/{note_id}
Delete a knowledge entry from the organization.
# List all knowledge
Source: https://docs.devin.ai/api-reference/v1/knowledge/list-knowledge
v1-openapi.yaml GET /v1/knowledge
List all knowledge entries and folders for the organization.
# Update knowledge entry
Source: https://docs.devin.ai/api-reference/v1/knowledge/update-knowledge
v1-openapi.yaml PUT /v1/knowledge/{note_id}
Update an existing knowledge entry.
# v1 API Overview (Legacy)
Source: https://docs.devin.ai/api-reference/v1/overview
Core session management and automation with org-scoped access
This API version is deprecated. Use [API v3](/api-reference/v3/overview) with service user authentication. See the [migration guide](/api-reference/getting-started/migration-guide) for step-by-step instructions.
The v1 API provides core functionality for creating and managing Devin sessions, along with supporting resources like secrets, knowledge, and playbooks.
**Base URL:** `https://api.devin.ai/v1/*`
**Authentication:** Personal or Service API Keys ([learn more](/api-reference/authentication))
## Permissions
The v1 API uses organization-scoped authentication. API keys are scoped to a specific `(org_id, user_id)` pair and provide access to resources within that organization. The v1 API does not use the full RBAC permission system - access is determined by the API key's organization scope.
For fine-grained RBAC control, use the [Organization API](/api-reference/v3/overview) instead.
## Sessions
Manage Devin sessions and interact with them:
List all current Devin sessions for your organization
Start a new Devin session with a task description and optional parameters
Retrieve information about an existing session's status and output
Interact with an active session by sending messages to Devin
Upload files for Devin to work with during sessions
Update the tags associated with a Devin session
## Secrets
Manage secrets and credentials for your organization:
View metadata for all secrets in your organization
Permanently remove a secret from your organization
## Knowledge
Manage knowledge for your organization:
List all knowledge and folders in your organization
Create a new piece of knowledge
Update a piece of knowledge
Delete a piece of knowledge
## Playbooks
Manage reusable instruction sets for your organization:
View all playbooks accessible to your organization
Create a new team playbook with instructions and optional macro
Retrieve details of a specific playbook
Update an existing team playbook
Delete a team playbook from your organization
## Next steps
Migrate to the [current API](/api-reference/overview) for RBAC, session attribution, and new features. See the [migration guide](/api-reference/getting-started/migration-guide).
# Create Playbook
Source: https://docs.devin.ai/api-reference/v1/playbooks/create-playbook
v1-openapi.yaml POST /v1/playbooks
Create a new team playbook
Create a new team playbook. Requires ManageOrgPlaybooks permission.
# Delete Playbook
Source: https://docs.devin.ai/api-reference/v1/playbooks/delete-playbook
v1-openapi.yaml DELETE /v1/playbooks/{playbook_id}
Delete a team playbook
Delete a team playbook. Requires ManageOrgPlaybooks permission. This marks the playbook as deleted and removes any associated macro.
# Get Playbook
Source: https://docs.devin.ai/api-reference/v1/playbooks/get-playbook
v1-openapi.yaml GET /v1/playbooks/{playbook_id}
Retrieve details of a specific playbook
Retrieve details of a specific playbook by its ID.
# List Playbooks
Source: https://docs.devin.ai/api-reference/v1/playbooks/list-playbooks
v1-openapi.yaml GET /v1/playbooks
Retrieve all playbooks accessible to your organization
Retrieve all team playbooks accessible to your organization. Only team playbooks are returned via the API.
# Update Playbook
Source: https://docs.devin.ai/api-reference/v1/playbooks/update-playbook
v1-openapi.yaml PUT /v1/playbooks/{playbook_id}
Update an existing team playbook
Update an existing team playbook. Requires ManageOrgPlaybooks permission. Only team playbooks can be updated.
# Create Secret
Source: https://docs.devin.ai/api-reference/v1/secrets/create-secret
POST /v1/secrets
Create a new secret in your organization
Create a new encrypted secret that can be used in Devin sessions. The secret will be available to all sessions created after the secret is added.
## Request Body
Type of secret. Must be one of: `cookie`, `key-value`, `totp`
User-defined name for the secret. Must be unique within the organization.
The secret value to store. Will be encrypted at rest.
Whether the secret should be treated as sensitive and redacted in logs.
Optional note describing the secret's purpose.
## Response
The unique identifier of the created secret
# Delete a secret
Source: https://docs.devin.ai/api-reference/v1/secrets/delete-secret
v1-openapi.yaml DELETE /v1/secrets/{secret_id}
Permanently delete a secret by its ID. This action cannot be undone.
# List secrets
Source: https://docs.devin.ai/api-reference/v1/secrets/list-secrets
v1-openapi.yaml GET /v1/secrets
List metadata for all secrets in your organization. Does not return secret values.
# Create a new session
Source: https://docs.devin.ai/api-reference/v1/sessions/create-a-new-devin-session
v1-openapi.yaml POST /v1/sessions
Create a new Devin session. You can optionally specify parameters like snapshot ID and session visibility.
# List sessions
Source: https://docs.devin.ai/api-reference/v1/sessions/list-sessions
v1-openapi.yaml GET /v1/sessions
List all Devin sessions for your organization.
# Retrieve details about an existing session
Source: https://docs.devin.ai/api-reference/v1/sessions/retrieve-details-about-an-existing-session
v1-openapi.yaml GET /v1/sessions/{session_id}
Retrieve detailed information about an existing Devin session, including its status, output, and metadata.
# Send a message to a session
Source: https://docs.devin.ai/api-reference/v1/sessions/send-a-message-to-an-existing-devin-session
v1-openapi.yaml POST /v1/sessions/{session_id}/message
Send a message to an existing Devin session to provide additional instructions or information.
# Terminate a session
Source: https://docs.devin.ai/api-reference/v1/sessions/terminate-a-session
v1-openapi.yaml DELETE /v1/sessions/{session_id}
Terminate an active Devin session. Once terminated, the session cannot be resumed.
# Update session tags
Source: https://docs.devin.ai/api-reference/v1/sessions/update-session-tags
v1-openapi.yaml PUT /v1/sessions/{session_id}/tags
Update the tags associated with a Devin session.
# List API Keys
Source: https://docs.devin.ai/api-reference/v2/api-keys/list-enterprise-api-keys
v2-openapi.yaml GET /v2/enterprise/api-keys
List API keys across an Enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of API keys across organizations in the enterprise.
# Create a Service API Key
Source: https://docs.devin.ai/api-reference/v2/api-keys/provision-service-key
v2-openapi.yaml POST /v2/enterprise/api-keys
Provision a service API key for an Organization in the Enterprise
Requires an enterprise admin personal API key.
Creates a service API key for a specified Organization within the Enterprise.
# Revoke API Key
Source: https://docs.devin.ai/api-reference/v2/api-keys/revoke-enterprise-api-key
v2-openapi.yaml DELETE /v2/enterprise/api-keys/{api_key_id}
Revoke a specific enterprise API key
Requires an enterprise admin personal API key.
Revokes a specific API key that belongs to the enterprise.
# Get Audit Logs
Source: https://docs.devin.ai/api-reference/v2/audit-logs
v2-openapi.yaml GET /v2/enterprise/audit-logs
Retrieve audit logs for the entire enterprise.
Requires an enterprise admin personal API key.
# Consumption Cycles
Source: https://docs.devin.ai/api-reference/v2/consumption/consumption-cycles
v2-openapi.yaml GET /v2/enterprise/consumption/cycles
Generate a list of all billing cycles for the enterprise
Requires an enterprise admin personal API key.
Returns a list of all billing cycles for your enterprise from inception until today.
# Daily Consumption
Source: https://docs.devin.ai/api-reference/v2/consumption/daily-consumption
v2-openapi.yaml GET /v2/enterprise/consumption/daily
Return daily consumption for the current billing cycle
Requires an enterprise admin personal API key.
Returns daily ACU consumption data for your enterprise, broken down by date and organization.
## Timezone behavior
Billing cycles use **midnight PST (Pacific Standard Time)** as the day boundary, which corresponds to **08:00:00 UTC**. To match the consumption data shown in the Devin dashboard, you must pass timestamps with this timezone offset.
For example, to query consumption for a billing cycle from December 5, 2025 to January 5, 2026:
```bash theme={null}
curl "https://api.devin.ai/v2/enterprise/consumption/daily?start_date=2025-12-05T08:00:00Z&end_date=2026-01-05T08:00:00Z" \
-H "Authorization: Bearer YOUR_API_KEY"
```
If you pass dates without the `T08:00:00Z` suffix (e.g., `2025-12-05`), the API will use midnight UTC, which may result in slightly different consumption totals compared to the dashboard.
## Filtering by organization
When filtering by `org_ids`, the results will only include Devin session ACUs. ACUs consumed by Cascade and Terminal are omitted, as usage for these products is not tied to any organization.
# PR Metrics
Source: https://docs.devin.ai/api-reference/v2/consumption/pr-metrics
v2-openapi.yaml GET /v2/enterprise/metrics/prs
Get pull request metrics for your enterprise
Requires an enterprise admin personal API key.
Returns pull request metrics for your enterprise, including counts of PRs opened, closed, and merged.
# Searches Metrics
Source: https://docs.devin.ai/api-reference/v2/consumption/searches-metrics
v2-openapi.yaml GET /v2/enterprise/metrics/searches
Get search count metrics for your enterprise
Requires an enterprise admin personal API key.
Returns search count metrics for your enterprise within the specified time period.
# Sessions Metrics
Source: https://docs.devin.ai/api-reference/v2/consumption/sessions-metrics
v2-openapi.yaml GET /v2/enterprise/metrics/sessions
Get sessions metrics for your enterprise
Requires an enterprise admin personal API key.
Returns the total number of sessions for your enterprise within the specified time period.
# Usage Metrics
Source: https://docs.devin.ai/api-reference/v2/consumption/usage-metrics
v2-openapi.yaml GET /v2/enterprise/metrics/usage
Get usage metrics (sessions, searches, and PRs) for your enterprise
Requires an enterprise admin personal API key.
Returns usage metrics including session count, search count, and PR counts for your enterprise within the specified time period.
Only the [GitHub app integration](/integrations/gh) provides properly enriched statistics around PRs and PR status. For [GitLab on-premise](/integrations/gitlab) installations, MR status syncs only once a day, which can lead to a temporarily misrepresented status.
# User Daily Consumption
Source: https://docs.devin.ai/api-reference/v2/consumption/user-daily-consumption
v2-openapi.yaml GET /v2/enterprise/consumption/daily/{user_id}
Return daily consumption for a specific user
Requires an enterprise admin personal API key.
Returns daily ACU consumption data for a specific user within your enterprise.
## Timezone behavior
Billing cycles use **midnight PST (Pacific Standard Time)** as the day boundary, which corresponds to **08:00:00 UTC**. To match the consumption data shown in the Devin dashboard, you must pass timestamps with this timezone offset. See [Daily Consumption](/api-reference/v2/consumption/daily-consumption#timezone-behavior) for details and examples.
## Filtering by organization
When filtering by `org_ids`, the results will only include Devin session ACUs. ACUs consumed by Cascade and Terminal are omitted, as usage for these products is not tied to any organization.
# Get Group Details
Source: https://docs.devin.ai/api-reference/v2/groups/get-group-details
v2-openapi.yaml GET /v2/enterprise/groups/{group_name}
Get details for a specific IdP group in this Enterprise
Requires an enterprise admin personal API key.
Returns detailed information about a specific enterprise IdP (Identity Provider) group, including its organization associations and roles.
# List Enterprise Groups
Source: https://docs.devin.ai/api-reference/v2/groups/list-enterprise-groups
v2-openapi.yaml GET /v2/enterprise/groups
List IdP groups in this Enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of all IdP (Identity Provider) groups in your Enterprise, including their organization associations and roles.
# List Hypervisors
Source: https://docs.devin.ai/api-reference/v2/infrastructure/list-enterprise-hypervisors
v2-openapi.yaml GET /v2/enterprise/hypervisors/health
Get hypervisor status information for VPC monitoring
Requires an enterprise admin personal API key.
Returns a list of hypervisors with their current health status for the enterprise. This endpoint is designed for VPC monitoring and allows enterprise administrators to check the health of their hypervisor infrastructure.
This endpoint is only available for enterprises with VPC deployments.
# Delete Enterprise Member
Source: https://docs.devin.ai/api-reference/v2/members/delete-enterprise-member
v2-openapi.yaml DELETE /v2/enterprise/members/{user_id}
Remove a user from an organization
Requires an enterprise admin personal API key.
Remove a user from an organization.
# Get Member Details
Source: https://docs.devin.ai/api-reference/v2/members/get-member-details
v2-openapi.yaml GET /v2/enterprise/members/{user_id}
Get detailed information about a specific enterprise member
Requires an enterprise admin personal API key.
Returns detailed information about a specific member in your enterprise, including their profile, activity metrics, and access permissions.
# Invite Enterprise Members
Source: https://docs.devin.ai/api-reference/v2/members/invite-enterprise-members
v2-openapi.yaml POST /v2/enterprise/members/invite
Invite multiple users to the enterprise by email (bulk invite, max 100 users)
Requires an enterprise admin personal API key.
Invite multiple users to your enterprise by providing their email addresses. This endpoint supports bulk invitations with up to 100 email addresses per request.
# List Enterprise Members
Source: https://docs.devin.ai/api-reference/v2/members/list-enterprise-members
v2-openapi.yaml GET /v2/enterprise/members
List paginated members in this enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of all members in your enterprise, including their basic information and enterprise role.
# User Organizations
Source: https://docs.devin.ai/api-reference/v2/members/user-organizations
v2-openapi.yaml GET /v2/enterprise/members/{user_id}/organizations
Get paginated list of organizations that this user has access to
Requires an enterprise admin personal API key.
Returns a paginated list of organizations that a specific user has access to within your enterprise.
# Create Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/create-organization
v2-openapi.yaml POST /v2/enterprise/organizations
Create a new organization in this enterprise
Requires an enterprise admin personal API key.
Create a new organization within your enterprise with optional ACU limits.
# Get Organization Details
Source: https://docs.devin.ai/api-reference/v2/organizations/get-organization-details
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}
Get details for a specific organization in this enterprise
Requires an enterprise admin personal API key.
Get details for a specific organization in this enterprise.
# List Organizations
Source: https://docs.devin.ai/api-reference/v2/organizations/list-organizations
v2-openapi.yaml GET /v2/enterprise/organizations
List paginated organizations in this enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of all organizations within your enterprise.
# v2 API Overview (Legacy)
Source: https://docs.devin.ai/api-reference/v2/overview
Enterprise-wide management, analytics, and compliance for administrators
This API version is deprecated. Use [API v3](/api-reference/v3/overview) with service user authentication. See the [migration guide](/api-reference/getting-started/migration-guide) for step-by-step instructions.
The v2 API provides enterprise-wide management, analytics, and compliance capabilities for enterprise administrators.
Access to the v2 API requires Enterprise Admin role.
**Base URL:** `https://api.devin.ai/v2/enterprise/*`
**Authentication:** Enterprise Admin Personal API Keys ([learn more](/api-reference/authentication))
## Permissions
The v2 API requires the **Enterprise Admin** role. Only users with this role can generate personal API keys that work with v2 endpoints. Service API keys and organization-level keys are not accepted.
All v2 endpoints provide enterprise-wide access to resources across all organizations within the enterprise. For organization-scoped access or fine-grained RBAC control, use the [Organization API](/api-reference/v3/overview) or [Enterprise API](/api-reference/v3/overview) respectively.
## API Keys
Provision and manage service API keys for your enterprise:
Create a new service API key for automation
View all API keys in your enterprise
Revoke a specific API key
## Audit Logs
Access compliance and security audit trails:
Retrieve enterprise-wide audit logs for compliance
## Consumption
Track ACU usage and billing:
View consumption cycle summaries
Get daily consumption breakdowns
Track consumption by user
## Groups
Manage enterprise IdP groups:
View all IdP groups in your enterprise
Retrieve details for a specific group
## Members
Manage enterprise members and roles:
View all members in your enterprise
Retrieve details for a specific member
Invite new members to your enterprise
Remove a member from your enterprise
View available roles
## Metrics
Access analytics and usage metrics:
View pull request metrics
Access session analytics
View search usage metrics
Get overall usage analytics
## Organizations
Manage sub-organizations:
View all organizations in your enterprise
Create a new sub-organization
Retrieve organization details
Update organization settings
Delete a sub-organization
## Sessions
View enterprise-wide session data:
View all sessions across the enterprise
Get AI-powered session insights
Retrieve details for a specific session
## Playbooks
Manage enterprise-wide playbooks:
View all playbooks
Create a new playbook
## Next steps
Migrate to the [current API](/api-reference/overview) for RBAC with service users, session attribution, and new features. See the [migration guide](/api-reference/getting-started/migration-guide).
# Delete Account IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/delete-enterprise-idp-group
v3-openapi.yaml DELETE /v3/enterprise/idp-groups/{idp_group_name}
Remove a registered IDP group from this enterprise.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Delete IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/delete-members-idp-groups
v3-openapi.yaml DELETE /v3/enterprise/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Delete Organization IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/delete-organizations-members-idp-groups
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/members/idp-groups/{idp_group_name}
Remove idp_group from the organization.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# List Account IDP Groups
Source: https://docs.devin.ai/api-reference/v3/idp-groups/enterprise-idp-groups
v3-openapi.yaml GET /v3/enterprise/idp-groups
List IDP groups registered with this enterprise.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Get IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/get-members-idp-group
v3-openapi.yaml GET /v3/enterprise/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Organization IDP Groups
Source: https://docs.devin.ai/api-reference/v3/idp-groups/list-organizations-members-idp-groups
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/members/idp-groups
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List IDP Groups
Source: https://docs.devin.ai/api-reference/v3/idp-groups/members-idp-groups
v3-openapi.yaml GET /v3/enterprise/members/idp-groups
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Get Organization IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/organizations-members-idp-groups
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Update IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/patch-members-idp-groups
v3-openapi.yaml PATCH /v3/enterprise/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Update Organization IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/patch-organizations-members-idp-groups
v3-openapi.yaml PATCH /v3/enterprise/organizations/{org_id}/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Register Account IDP Groups
Source: https://docs.devin.ai/api-reference/v3/idp-groups/post-enterprise-idp-groups
v3-openapi.yaml POST /v3/enterprise/idp-groups
Bulk create IDP groups for this enterprise. Existing groups are ignored.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Assign IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/post-members-idp-groups
v3-openapi.yaml POST /v3/enterprise/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Assign Organization IDP Group
Source: https://docs.devin.ai/api-reference/v3/idp-groups/post-organizations-members-idp-groups
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/members/idp-groups/{idp_group_name}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Add IPs to IP Access List
Source: https://docs.devin.ai/api-reference/v3/ip-access-list/add-ip-access-list
v3-openapi.yaml POST /v3/enterprise/ip-access-list
This endpoint **adds** IP ranges to the existing IP access list without removing any ranges already present. To replace the entire list, use the [Replace IP access list](/api-reference/v3/ip-access-list/replace-ip-access-list) endpoint.
## Permissions
Requires a service user with the `ManageIPWhitelist` permission at the enterprise level.
# Clear IP Access List
Source: https://docs.devin.ai/api-reference/v3/ip-access-list/clear-ip-access-list
v3-openapi.yaml DELETE /v3/enterprise/ip-access-list
## Permissions
Requires a service user with the `ManageIPWhitelist` permission at the enterprise level.
# Get IP Access List
Source: https://docs.devin.ai/api-reference/v3/ip-access-list/get-ip-access-list
v3-openapi.yaml GET /v3/enterprise/ip-access-list
## Permissions
Requires a service user with the `ManageIPWhitelist` permission at the enterprise level.
# Replace IP Access List
Source: https://docs.devin.ai/api-reference/v3/ip-access-list/replace-ip-access-list
v3-openapi.yaml PUT /v3/enterprise/ip-access-list
This is a potentially destructive operation. This endpoint **replaces** the entire IP access list — any IP ranges not included in the request body will be removed, which can lock out users and integrations. Include all desired ranges in every request.
## Permissions
Requires a service user with the `ManageIPWhitelist` permission at the enterprise level.
# Get Organization Group Limits
Source: https://docs.devin.ai/api-reference/v3/org-group-limits/get-org-group-limits
v3-openapi.yaml GET /v3/enterprise/org-group-limits
Get the current organization groups configuration
Requires `ManageOrganizations` permission.
This endpoint requires the organization group limits feature to be enabled for your enterprise. To enable this feature, reach out to your account team.
Returns the current organization groups configuration, including group names, associated organization IDs, and optional max Agent Compute Unit limits per billing cycle.
# Update Organization Group Limits
Source: https://docs.devin.ai/api-reference/v3/org-group-limits/update-org-group-limits
v3-openapi.yaml PUT /v3/enterprise/org-group-limits
Update the organization groups configuration
Requires `ManageOrganizations` permission.
This endpoint requires the organization group limits feature to be enabled for your enterprise. To enable this feature, reach out to your account team.
Replaces the entire organization groups configuration with the provided config. Groups not included in the request will be deleted, and groups included will be created or updated to match the provided configuration. Each group maps a set of organization IDs to an optional max Agent Compute Unit limit per billing cycle.
# Delete Organization
Source: https://docs.devin.ai/api-reference/v3/organizations/delete-organizations
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}
Delete an organization from this enterprise
## Permissions
Requires a service user with the `ManageOrganizations` permission at the enterprise level.
# Get Organization
Source: https://docs.devin.ai/api-reference/v3/organizations/get-enterprise-organization
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}
Get details for a specific organization in the enterprise.
# List Organizations
Source: https://docs.devin.ai/api-reference/v3/organizations/organizations
v3-openapi.yaml GET /v3/enterprise/organizations
List organizations in the enterprise.
## Permissions
Requires a service user with the `ManageOrganizations` permission at the enterprise level.
# Update Organization
Source: https://docs.devin.ai/api-reference/v3/organizations/patch-organizations
v3-openapi.yaml PATCH /v3/enterprise/organizations/{org_id}
Update an organization's name and/or ACU limits
## Permissions
Requires a service user with the `ManageOrganizations` permission at the enterprise level.
# Create Organization
Source: https://docs.devin.ai/api-reference/v3/organizations/post-organizations
v3-openapi.yaml POST /v3/enterprise/organizations
Create a new organization in this enterprise
## Permissions
Requires a service user with the `ManageOrganizations` permission at the enterprise level.
# List Roles
Source: https://docs.devin.ai/api-reference/v3/roles/roles
v3-openapi.yaml GET /v3/enterprise/roles
Get roles for this enterprise
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Revoke API key for service user
Source: https://docs.devin.ai/api-reference/v3/service-users/delete-enterprise-service-user-api-key
v3-openapi.yaml DELETE /v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}
Revoke an API key for a service user.
Returns 404 if the key is not found, 409 if already revoked.
## Permissions
Requires a service user with the `ManageAccountServiceUsers` permission at the enterprise level.
# Delete Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/delete-members-service-users
v3-openapi.yaml DELETE /v3/enterprise/members/service-users/{service_user_id}
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Delete Organization Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/delete-organizations-members-service-users
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/members/service-users/{service_user_id}
Remove service user from the organization.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# List API keys for service user
Source: https://docs.devin.ai/api-reference/v3/service-users/get-enterprise-service-user-api-keys
v3-openapi.yaml GET /v3beta1/enterprise/service-users/{service_user_id}/api-keys
List API keys for a service user, optionally filtered by status.
## Permissions
Requires a service user with the `ManageAccountServiceUsers` permission at the enterprise level.
# Get Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/get-members-service-user
v3-openapi.yaml GET /v3/enterprise/members/service-users/{service_user_id}
Get a service user by ID.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Service Users
Source: https://docs.devin.ai/api-reference/v3/service-users/members-service-users
v3-openapi.yaml GET /v3/enterprise/members/service-users
List service users in the enterprise.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Organization Service Users
Source: https://docs.devin.ai/api-reference/v3/service-users/organizations-members-service-users
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/members/service-users
List service users in the organization.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Update Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/patch-members-service-users
v3-openapi.yaml PATCH /v3/enterprise/members/service-users/{service_user_id}
Update enterprise role for service user.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Update Organization Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/patch-organizations-members-service-users
v3-openapi.yaml PATCH /v3/enterprise/organizations/{org_id}/members/service-users/{service_user_id}
Update organization role for service user.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Create API key for service user
Source: https://docs.devin.ai/api-reference/v3/service-users/post-enterprise-service-user-api-keys
v3-openapi.yaml POST /v3beta1/enterprise/service-users/{service_user_id}/api-keys
Create a new API key for a service user.
The caller must have ManageAccountServiceUsers permission.
## Permissions
Requires a service user with the `ManageAccountServiceUsers` permission at the enterprise level.
# Assign Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/post-members-service-users
v3-openapi.yaml POST /v3/enterprise/members/service-users/{service_user_id}
Assign enterprise role to service user.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Assign Organization Service User
Source: https://docs.devin.ai/api-reference/v3/service-users/post-organizations-members-service-users
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/members/service-users/{service_user_id}
Assign organization role to service user.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Rotate API key for service user
Source: https://docs.devin.ai/api-reference/v3/service-users/rotate-enterprise-service-user-api-key
v3-openapi.yaml POST /v3beta1/enterprise/service-users/{service_user_id}/api-keys/{api_key_id}/rotate
Rotate an API key for a service user.
Creates a new key. By default revokes the old key; set revoke_current=false
for graceful rollover where both keys remain active temporarily.
Returns 404 if the key is not found, 400 if the key is not active.
## Permissions
Requires a service user with the `ManageAccountServiceUsers` permission at the enterprise level.
# Clear Organization Default Tag
Source: https://docs.devin.ai/api-reference/v3/tags/delete-enterprise-organizations-default-tag
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/tags/default
Clear the default tag for an organization.
# Clear Organization Tags
Source: https://docs.devin.ai/api-reference/v3/tags/delete-organizations-tags
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/tags
Clear all allowed session tags for an organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission. Additionally, the session tags feature must be enabled for the enterprise.
# Remove Organization Tag
Source: https://docs.devin.ai/api-reference/v3/tags/delete-organizations-tags-tag
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/tags/{tag}
Remove a single tag from the allowed session tags for an organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission. Additionally, the session tags feature must be enabled for the enterprise.
# Get Organization Default Tag
Source: https://docs.devin.ai/api-reference/v3/tags/get-enterprise-organizations-default-tag
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/tags/default
Get the current default tag for an organization.
# Get Organization Allowed Tags
Source: https://docs.devin.ai/api-reference/v3/tags/organizations-tags
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/tags
Get the allowed session tags for an organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission. Additionally, the session tags feature must be enabled for the enterprise.
# Append Organization Tags
Source: https://docs.devin.ai/api-reference/v3/tags/post-organizations-tags
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/tags
Append tags to the allowed session tags for an organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission. Additionally, the session tags feature must be enabled for the enterprise.
# Set Organization Default Tag
Source: https://docs.devin.ai/api-reference/v3/tags/put-enterprise-organizations-default-tag
v3-openapi.yaml PUT /v3/enterprise/organizations/{org_id}/tags/default
Set the default tag for an organization. The tag must exist in the allowed tags list.
# Replace Organization Allowed Tags
Source: https://docs.devin.ai/api-reference/v3/tags/put-organizations-tags
v3-openapi.yaml PUT /v3/enterprise/organizations/{org_id}/tags
Replace the full set of allowed session tags for an organization.
## Permissions
Requires a service user with the `ManageEnterpriseSettings` permission. Additionally, the session tags feature must be enabled for the enterprise.
# Delete Organization User
Source: https://docs.devin.ai/api-reference/v3/users/delete-organizations-members-users
v3-openapi.yaml DELETE /v3/enterprise/organizations/{org_id}/members/users/{user_id}
This endpoint only operates on users with **direct** organization role assignments. Users whose organization membership is derived from IDP group assignments cannot be removed through this endpoint — manage their membership through IDP group configuration instead.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Get Organization User
Source: https://docs.devin.ai/api-reference/v3/users/get-organization-user
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/members/users/{user_id}
Get an organization member by ID. Returns both direct and IDP-group-derived role assignments.
This endpoint returns a single organization member by ID, including both direct and IDP-group-derived role assignments.
## Permissions
Requires a service user with the `ViewOrgMembership` permission at the organization level.
# List Organization IDP Group Users
Source: https://docs.devin.ai/api-reference/v3/users/list-organization-idp-users
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/members/idp-users
List users whose organization membership is derived from IDP group assignments.
This endpoint lists users whose organization membership is derived from IDP group assignments, authenticated with an organization-scoped service user. To list users with direct role assignments, use the [List organization users](/api-reference/v3/users/list-organization-users) endpoint.
## Permissions
Requires a service user with the `ViewOrgMembership` permission at the organization level.
# List Organization Users
Source: https://docs.devin.ai/api-reference/v3/users/list-organization-users
v3-openapi.yaml GET /v3beta1/organizations/{org_id}/members/users
List users with direct membership in the organization.
This endpoint lists users with **direct** role assignments in the organization, authenticated with an organization-scoped service user. To list users whose membership is derived from IDP group assignments, use the [List organization IDP group users](/api-reference/v3/users/list-organization-idp-users) endpoint.
## Permissions
Requires a service user with the `ViewOrgMembership` permission at the organization level.
# List IDP Group Users
Source: https://docs.devin.ai/api-reference/v3/users/members-idp-users
v3-openapi.yaml GET /v3/enterprise/members/idp-users
List users whose enterprise membership is derived from IDP group assignments.
This endpoint lists users whose enterprise membership is derived from IDP group assignments. It returns only users who have roles inherited through IDP group membership, not users with direct role assignments. If you are looking for users with direct role assignments, use the [List users](/api-reference/v3/users/members-users) endpoint instead.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Organization IDP Group Users
Source: https://docs.devin.ai/api-reference/v3/users/organizations-members-idp-users
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/members/idp-users
List users whose organization membership is derived from IDP group assignments.
This endpoint lists users whose organization membership is derived from IDP group assignments. It returns only users who have roles inherited through IDP group membership for the specified organization, not users with direct role assignments. If you are looking for users with direct role assignments in an organization, use the [List organization users](/api-reference/v3/users/organizations-members-users) endpoint instead.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# List Organization Users
Source: https://docs.devin.ai/api-reference/v3/users/organizations-members-users
v3-openapi.yaml GET /v3/enterprise/organizations/{org_id}/members/users
This endpoint only returns users with **direct** role assignments in the organization. To list users whose organization membership is derived from IDP group assignments, use the [List organization IDP group users](/api-reference/v3/users/organizations-members-idp-users) endpoint.
## Permissions
Requires a service user with the `ViewAccountMembership` permission at the enterprise level.
# Update Organization User
Source: https://docs.devin.ai/api-reference/v3/users/patch-organizations-members-users
v3-openapi.yaml PATCH /v3/enterprise/organizations/{org_id}/members/users/{user_id}
This endpoint only operates on **direct** organization role assignments. To manage roles inherited through IDP group membership, use the [IDP group role management](/api-reference/v3/idp-groups/organizations-members-idp-groups) endpoints.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# Assign Organization User
Source: https://docs.devin.ai/api-reference/v3/users/post-organizations-members-users
v3-openapi.yaml POST /v3/enterprise/organizations/{org_id}/members/users/{user_id}
This endpoint assigns a **direct** organization role to a user. To manage roles through IDP group membership, use the [IDP group role management](/api-reference/v3/idp-groups/organizations-members-idp-groups) endpoints.
## Permissions
Requires a service user with the `ManageAccountMembership` permission at the enterprise level.
# List available roles
Source: https://docs.devin.ai/api-reference/v2/members/list-roles
v2-openapi.yaml GET /v2/enterprise/roles
List all roles that are available to the user's enterprise
Requires an enterprise admin personal API key.
Returns a list of all roles available in your enterprise, including both enterprise-level and organization-level roles. Each role includes its unique identifier, display name, and type.
# Get Organization Group Limits
Source: https://docs.devin.ai/api-reference/v2/org-group-limits/get-org-group-limits
v2-openapi.yaml GET /v2/enterprise/org-group-limits
Get the current organization groups configuration
Requires an enterprise admin personal API key.
This endpoint requires the organization group limits feature to be enabled for your enterprise. To enable this feature, reach out to your account team.
Returns the current organization groups configuration, including group names, associated organization IDs, and optional Agent Compute Unit limits per billing cycle.
# Update Organization Group Limits
Source: https://docs.devin.ai/api-reference/v2/org-group-limits/update-org-group-limits
v2-openapi.yaml PUT /v2/enterprise/org-group-limits
Update the organization groups configuration
Requires an enterprise admin personal API key.
This endpoint requires the organization group limits feature to be enabled for your enterprise. To enable this feature, reach out to your account team.
Replaces the entire organization groups configuration with the provided config. Groups not included in the request will be deleted, and groups included will be created or updated to match the provided configuration. Each group maps a set of organization IDs to an optional max Agent Compute Unit limit per billing cycle.
# Add Group to Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/add-group-to-organization
v2-openapi.yaml POST /v2/enterprise/organizations/{org_id}/groups
Add a new IdP group to an organization
Requires an enterprise admin personal API key.
Adds an enterprise IdP (Identity Provider) group to a specific organization with a specified role.
# Add Organization Members
Source: https://docs.devin.ai/api-reference/v2/organizations/add-organization-members
v2-openapi.yaml POST /v2/enterprise/organizations/{org_id}/members
Bulk add users to one or more organizations within your enterprise
Requires an enterprise admin personal API key.
This endpoint allows you to add multiple users to multiple organizations in a single API call. It's designed for efficient bulk operations when managing organization memberships at scale.
# Add Organization Permissions
Source: https://docs.devin.ai/api-reference/v2/organizations/add-organization-permissions
v2-openapi.yaml POST /v2/enterprise/organizations/{org_id}/git/permissions
Add git permissions to an organization
Requires an enterprise admin personal API key.
Add one or more git repository permissions to a specific organization within your enterprise.
# Clone a Repository into an Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/clone-repository
v2-openapi.yaml POST /v2/enterprise/organizations/{org_id}/clone
Clone a repository into an organization's snapshot
Requires an enterprise admin personal API key.
Clones a git repository in an organization and updates into a new snapshot version.
# Delete Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/delete-organization
v2-openapi.yaml DELETE /v2/enterprise/organizations/{org_id}
Delete an organization from this enterprise
Requires an enterprise admin personal API key.
Delete an organization from your enterprise.
This action cannot be undone. The organization will be permanently deleted along with all user memberships. You cannot delete the primary organization of your enterprise.
# Delete Organization Permission
Source: https://docs.devin.ai/api-reference/v2/organizations/delete-organization-permission
v2-openapi.yaml DELETE /v2/enterprise/organizations/{org_id}/git/permissions/{permission_id}
Remove a git permission from an organization
Requires an enterprise admin personal API key.
Remove a specific git repository permission from an organization within your enterprise.
# Organization Connections
Source: https://docs.devin.ai/api-reference/v2/organizations/organization-connections
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/git/connections
Get paginated list of git connections that this organization has access to
Requires an enterprise admin personal API key.
Returns a paginated list of git connections that a specific organization has access to within your enterprise.
# Organization Groups
Source: https://docs.devin.ai/api-reference/v2/organizations/organization-groups
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/groups
Get paginated list of enterprise groups that are in this organization
Requires an enterprise admin personal API key.
Returns a paginated list of enterprise groups within a specific organization.
# Organization Members
Source: https://docs.devin.ai/api-reference/v2/organizations/organization-members
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/members
Get paginated list of users that are in this organization
Requires an enterprise admin personal API key.
Returns a paginated list of users who are members of a specific organization within your enterprise.
# Organization Permissions
Source: https://docs.devin.ai/api-reference/v2/organizations/organization-permissions
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/git/permissions
Get paginated list of git permissions that this organization has access to
Requires an enterprise admin personal API key.
Returns a paginated list of git repository permissions that a specific organization has access to within your enterprise.
# Remove User from Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/remove-user-from-organization
v2-openapi.yaml DELETE /v2/enterprise/organizations/{org_id}/members/{user_id}
Remove a user from an organization
Requires an enterprise admin personal API key.
Remove a user from an organization.
# Update Organization
Source: https://docs.devin.ai/api-reference/v2/organizations/update-organization
v2-openapi.yaml PATCH /v2/enterprise/organizations/{org_id}
Update an organization's ACU limit and/or display name
Requires an enterprise admin personal API key.
Update the maximum ACU limit per billing cycle and/or display name for a specific organization within your enterprise. This endpoint allows you to modify either field independently or both at the same time.
# Update organization member roles
Source: https://docs.devin.ai/api-reference/v2/organizations/update-organization-member-roles
v2-openapi.yaml PATCH /v2/enterprise/organizations/{org_id}/members/roles
Update organization roles for specific members
Requires an enterprise admin personal API key.
Updates the organization-level roles for one or more members within a specific organization. This endpoint allows you to assign a new organization role to multiple users at once.
# Create Enterprise Playbook
Source: https://docs.devin.ai/api-reference/v2/playbooks/create-playbook
v2-openapi.yaml POST /v2/enterprise/playbooks
Create a new playbook in your enterprise
Requires an enterprise admin personal API key.
Create a new playbook. The playbook will be associated with your account and enterprise. Use macros to create quick shortcuts (e.g., `!deploy`).
# List Enterprise Playbooks
Source: https://docs.devin.ai/api-reference/v2/playbooks/list-playbooks
v2-openapi.yaml GET /v2/enterprise/playbooks
List all enterprise playbooks available to the authenticated user
Requires an enterprise admin personal API key.
Retrieve all playbooks for your enterprise. Includes team and community playbooks you have access to.
# Bulk Index Repositories
Source: https://docs.devin.ai/api-reference/v2/repositories/bulk-index-repositories
v2-openapi.yaml POST /beta/v2/enterprise/repositories/bulk-index
Index multiple repositories (up to 100) for use in Devin sessions.
This endpoint allows you to index multiple repositories at once, making them available for Devin to access during sessions. You can index up to 100 repositories in a single request.
Repository indexing is an asynchronous operation. Use the [Get Repository Status](/api-reference/v2/repositories/get-repository-status) endpoint to check indexing progress.
# Get Repository Indexing Status
Source: https://docs.devin.ai/api-reference/v2/repositories/get-repository-status
v2-openapi.yaml GET /beta/v2/enterprise/repositories/{org_id}
Retrieve the indexing status of repositories for a specific organization.
This endpoint returns the current indexing status for all repositories associated with the specified organization. The response includes information about indexing jobs, commit SHAs, and timestamps for each repository.
# Get Self
Source: https://docs.devin.ai/api-reference/v2/self/get-self
v2-openapi.yaml GET /v2/enterprise/self
Get information about the authenticated API key
Requires an enterprise admin personal API key.
Returns information about the authenticated API key, including the key ID, associated user ID, user email, and organization ID.
# Get Enterprise Session
Source: https://docs.devin.ai/api-reference/v2/sessions/get-enterprise-session
v2-openapi.yaml GET /v2/enterprise/sessions/{session_id}
Get detailed information about a specific Devin session including analysis data and pull requests
Requires an enterprise admin personal API key.
Retrieves detailed information about a specific Devin session within your enterprise, including comprehensive session analysis, initial user message, pull request information, and ACU consumption data.
# List Enterprise Sessions
Source: https://docs.devin.ai/api-reference/v2/sessions/list-enterprise-sessions
v2-openapi.yaml GET /v2/enterprise/sessions
Get a paginated list of Devin sessions for your enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of all Devin sessions within your enterprise, including basic session information, pull request data, and ACU consumption.
# List Enterprise Sessions (Insights)
Source: https://docs.devin.ai/api-reference/v2/sessions/list-enterprise-sessions-insights
v2-openapi.yaml GET /v2/enterprise/sessions/insights
Get a paginated list of Devin sessions with detailed analysis data for your enterprise
Requires an enterprise admin personal API key.
Returns a paginated list of all Devin sessions within your enterprise, including comprehensive session analysis, initial user messages, pull request information, and ACU consumption data. This endpoint provides more detailed information than the basic [List Enterprise Sessions](/api-reference/v2/sessions/list-enterprise-sessions) endpoint.
# List Organization Sessions
Source: https://docs.devin.ai/api-reference/v2/sessions/list-organization-sessions
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/sessions
Get a paginated list of Devin sessions for a specific organization
Requires an enterprise admin personal API key.
Returns a paginated list of all Devin sessions for a specific organization within your enterprise, including basic session information, pull request data, and ACU consumption.
# List Organization Sessions (Insights)
Source: https://docs.devin.ai/api-reference/v2/sessions/list-organization-sessions-insights
v2-openapi.yaml GET /v2/enterprise/organizations/{org_id}/sessions/insights
Get a paginated list of Devin sessions with detailed analysis data for a specific organization
Requires an enterprise admin personal API key.
Returns a paginated list of all Devin sessions for a specific organization within your enterprise, including comprehensive session analysis, initial user messages, pull request information, and ACU consumption data. This endpoint provides more detailed information than the basic [List Organization Sessions](/api-reference/v2/sessions/list-organization-sessions) endpoint.
# Get User Usage Analysis (Beta)
Source: https://docs.devin.ai/api-reference/v2/user-usage/get-user-usage-analysis-beta
GET /beta/v2/enterprise/user-usage-analysis
Get paginated user usage analysis with detailed ACU consumption metrics across different time periods
**Beta Endpoint** - This endpoint is currently in beta and may change. While we strive to maintain backward compatibility, the API structure and response format may be updated as we improve the feature.
This endpoint retrieves detailed usage analytics for all users in your enterprise, including ACU consumption patterns, session counts, and search activity across different time periods (last 7 days, last 30 days, and lifetime).
# Compliance and Availability
Source: https://docs.devin.ai/federal/compliance
Compliance frameworks and certifications.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
Full details and documents regarding security and compliance can be found on our [Public Sector Trust Center](https://trust.cognition.ai/?product=cognitionpublicsector).
***
## Products
Today, Devin Desktop and Devin CLI are available in our federal deployments and maintain feature parity with their commercial counterparts. Devin and Devin Review are slated for FedRAMP High authorization in 2026.
Zero Data Retention (ZDR) is enabled for all Devin Desktop and Devin CLI features in federal deployments.
| | Devin | Devin CLI | Devin Desktop |
| ---------------- | ---------- | --------- | ------------- |
| **Commercial** | ✓ | ✓ | ✓ |
| **FedRAMP High** | In Process | ✓ | ✓ |
| **IL4** | In Process | ✓ | ✓ |
| **IL5** | In Process | ✓ | ✓ |
| **IL6** | In Process | ✓ | ✓ |
| **JWICS** | In Process | ✓ | ✓ |
| **ITAR** | In Process | ✓ | ✓ |
Devin Desktop was formerly known as Windsurf.
***
## Models
We actively monitor model and provider approvals to ensure you always have access to the most recent models available at your required compliance level. It takes time for new models to get necessary approvals, but we ensure access no more than a few days after most changes. This table was last updated on 14 JUL 26.
| | FedRAMP High | ITAR | IL4/5 |
| ----------------- | ------------ | ---- | ----- |
| GPT 5.4 | ✓ | ✓ | ✓ |
| GPT 5.1 | ✓ | ✓ | ✓ |
| GPT 4.1 | ✓ | ✓ | ✓ |
| GPT 4.1 mini | ✓ | ✓ | ✓ |
| Claude Opus 4.8 | ✓ | ✓ | |
| Claude Opus 4.7 | ✓ | ✓ | |
| Claude Opus 4.6 | ✓ | ✓ | |
| Claude Sonnet 4.6 | ✓ | ✓ | |
| Claude Sonnet 4.5 | ✓ | ✓ | ✓ |
| Claude Haiku 4.5 | ✓ | ✓ | |
| Gemini 3.5 Flash | ✓ | ✓ | ✓ |
| SWE 1.6 Federal | ✓ | ✓ | ✓ |
***
## Desktop Features
| | FedRAMP High | ITAR | IL4/5/6 | ZDR |
| --------------------------------------------- | ------------ | ---- | ------- | --- |
| [Tab](/desktop/tab/overview) | ✓ | ✓ | ✓ | ✓ |
| [Command](/desktop/command/windsurf-overview) | ✓ | ✓ | ✓ | ✓ |
| [Browser Preview](/desktop/previews) | ✓ | ✓ | ✓ | ✓ |
| [DeepWiki](/desktop/deepwiki) | ✓ | ✓ | ✓ | ✓ |
| [Codemaps](/desktop/codemaps) | ✓ | ✓ | ✓ | ✓ |
| [Skills](/desktop/cascade/skills) | ✓ | ✓ | ✓ | ✓ |
| [Cascade](/desktop/cascade/cascade) | ✓ | ✓ | ✓ | ✓ |
# FAQs
Source: https://docs.devin.ai/federal/faqs
Frequently asked questions for federal customers.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
**Who is the federal deployment for?**
The federal deployment of Devin is a dedicated, security-hardened version of Devin that runs on AWS GovCloud. It's designed for customers who work in air-gapped environments or require certifications like FedRAMP, ITAR, and IL4/5/6.
**How does Devin compare to similar products?**
Devin is an enterprise-grade coding tool, designed to meet strict compliance requirements, support real-world engineering workflows, and enable governance at scale. Platform tools like Knowledge, Playbooks, and DeepWiki support every aspect of real-world engineering workflows, from code understanding to auditable workflows. Having the right accreditations also allows us to cover burdens like infrastructure, so you do not have to.
You uniquely interact with Devin Cloud like you would with any other human engineer. Start a task, close your laptop, and review the PR later. This enables a far more effective user experience than other IDEs or agents, which resemble pair programming. Devin CLI and Devin Desktop take this industry-leading harness and allow you to access it locally or on-prem.
**Which models do I have access to?**
Model access is determined by your compliance needs (e.g. FedRAMP High vs. IL5) and authorizations achieved by model providers. Your account team will work with you to ensure you have access to the latest models available at your compliance level.
**When will I get access to newer models?**
We make new models available as soon as possible, often within a week of certification. Once a model achieves the required certifications (e.g. FedRAMP High, IL5, etc), we begin working with our partners to ensure compliant access.
**Do I retain access to what I build with Devin?**
Yes. All intellectual property and software you build with Devin is fully yours forever, regardless of your relationship with Cognition.
**Where can Devin be deployed?**
The Cognition platform can be deployed in a variety of ways, ranging from SaaS to on-prem, but feature availability may vary. Billing is shared across all products and deployments, so you can seamlessly move from one deployment to another.
**Can I use GitLab and GitHub with Devin?**
Yes. Devin integrates with a variety of external providers.
**What is Windsurf?**
Devin Desktop was previously known as Windsurf.
**What is an ACU?**
An Agent Compute Unit (ACU) is the normalized unit used to measure Devin’s output across tasks in enterprise settings. Essentially, it measures agent effort. It provides a consistent metric to quantify the work Devin performs, regardless of task type, codebase, or complexity, enabling organizations to track performance, optimize usage, and evaluate ROI over time. A more detailed breakdown of what contributes to usage can be found [here](/admin/billing/usage).
**How do I track spending?**
You can track usage from the Profile tab of the portal, including per-user analytics and overall spending.
**What is the AI Productivity Guarantee?**
Cognition guarantees that you will get more engineering value from Devin than what you pay. You can read more about the guarantee [here](https://cognition.com/blog/ai-guarantee).
**How do I add more prompt credits or ACUs?**
Please reach out to your account team to discuss renewal increases or overage spending.
**Is Devin available in my environment?**
An updated availability and compliance breakdown is available [here](/federal/compliance).
**Are there on-prem options?**
We are finalizing versions of Devin Desktop and Devin CLI that can be run fully air-gapped and on-prem. Please reach out to [public.sector@cognition.ai](mailto:public.sector@cognition.ai) for more information.
**What is FedStart?**
Our services are currently deployed within Palantir’s FedStart platform. This leverages their environment accreditations, similar to how you might access an AI lab’s models through a platform like AWS GovCloud.
**Can I connect private and self-hosted resources?**
Yes. Our deployed engineers will work with you to set up the necessary connections to resources in your VPC or on-prem environment. Many options exist, including IP allowlisting or AWS PrivateLink.
**What are my options for authentication?**
The federal deployment does not allow direct logins with a username and password. Your account team will help you set up SAML or OIDC authentication via your current identity provider (IdP).
# Getting Started
Source: https://docs.devin.ai/federal/getting-started
Get up and running with Devin in your environment.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
The federal platform uses a dedicated portal, hosted in an accredited environment via Palantir FedStart. The portal enables access to layered team settings, usage analytics, and user management. This is also where you can install Devin products for different distributions. Your account team will work with you to set up authentication and access.
***
## Quickstart
Once you have access to the portal, you can start using Devin. A breakdown of where you can use the different offerings is available [here](/federal/compliance). Please reach out to your account team if you have any questions or would like a live walkthrough.
## Feature availability
Due to additional compliance requirements, not all features in commercial Devin Desktop are available in federal Devin Desktop, and some are available with restrictions. The table below summarizes the differences.
| Feature | Description |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Devin Cloud integrations | Cloud agent features, including review, cloud/local toggle, intro cards, and the agent window, are not available. |
| Custom ACP agents | Third-party/remote agent connectors cannot be registered or used in the agent selector. |
| MCP servers | The public MCP Marketplace is disabled; custom MCP servers can be configured manually, and admins can manage allowlists, blocklists, and private registries. |
| Managed terminal | Terminal selection is "inherit" by default. |
| Voice input in Cascade | The microphone button in the Cascade input footer is not available. |
| Web app deployments | The "Deploy" action in the Cascade header menu is not available. |
| Install Devin CLI | The "Install Devin CLI" action in the command palette is not available. |
| Lifeguard | The Lifeguard safety/guardrail feature is not shown in the settings page or Cascade editor input. |
| In-app announcements | Announcement banners inside the IDE are not available. |
| Smart Friend | Models do not call a smarter model for assistance. |
| Credit cost display | The credit cost is not shown in the Cascade response toolbar after each turn. |
| Web search | Automatic and allowlisted web requests are disabled; web searches are allowed on a per-approval basis. |
| DeepWiki and Codemaps | DeepWiki and Codemaps are available and can be controlled under [Cascade settings in the Enterprise portal](https://windsurf.fedstart.com/settings); both are reengineered for Zero Data Retention (ZDR) compliance. |
# Introduction
Source: https://docs.devin.ai/federal/introduction
The AI software engineering platform for government.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
Our mission is to provide the world’s best agentic software engineering capability to the U.S. Government (USG) and its mission partners.
***
At the product level, this means offering our platform in workloads compliant for USG across every security level, including FedRAMP, ITAR, IL4/5/6, JWICS, and on-prem. Full details and documents regarding security and compliance can be found on our [Public Sector Trust Center](https://trust.cognition.ai/?product=cognitionpublicsector).
At the engagement level, we are able to combine our platform and partner systems integrators to deliver mission outcomes on a firm-fixed-price basis.
This guide is written for the federal deployment of the Cognition Platform, which runs on AWS GovCloud. The federal deployment uses a dedicated enterprise portal and SSO-based authentication via OIDC or SAML. Some features described in documentation for other Devin offerings are not available in the federal environment.
With thousands of demanding organizations, Devin has a proven track record in system modernization, vulnerability remediation, capability development, and more. We are confident that we will help you achieve mission outcomes, and we will fund up to \$10 million of usage until you do. You can learn more about our AI Productivity Guarantee [here](https://cognition.com/blog/ai-guarantee).
Please reach out to [public.sector@cognition.ai](mailto:public.sector@cognition.ai) to get started!
# Security
Source: https://docs.devin.ai/federal/security
Security practices and controls for Devin Desktop in federal deployments.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
This guide describes how to securely set up, configure, operate, and decommission top-level administrative accounts in **Devin Desktop**. It covers administrative role definitions, account lifecycle procedures, and all admin-controlled security settings with their associated functions, security impacts, and recommended values.
***
## Administrative role definitions
Devin Desktop uses a Role-Based Access Control (RBAC) system to govern administrative privileges. Roles are managed through the Admin Portal under the Role Management settings section and can be assigned to individual users.
### Built-in roles
Devin Desktop provides two built-in roles that cannot be deleted.
| Role | Description | Default permissions |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
| **Admin** | Full administrative access to organization settings, user management, analytics, and security controls. This is the highest level of privilege a user can hold within a team. | All permissions enabled |
| **User** | Standard end-user access with no administrative permissions. Users can access Devin Desktop's coding features but cannot view or modify organization settings. | No administrative permissions |
### Custom roles
Administrators can create custom roles to implement the principle of least privilege. Custom roles are composed of granular permissions selected from the categories below. To create a custom role, navigate to the Admin Portal and open the Role Management section under Settings.
### Permission reference
The table below lists every permission available for role assignment in the FedRAMP deployment. Each permission controls access to a specific administrative function.
| Category | Permission | Description |
| ------------------- | ------------------------ | -------------------------------------------------------- |
| **Teams** | Teams Read-Only | Read-only access to the teams management page |
| **Teams** | Teams Update | Ability to update user roles on the teams page |
| **Teams** | Teams Delete | Ability to remove users from the teams page |
| **Analytics** | Analytics Read | Read access to the analytics page and dashboards |
| **Attribution** | Attribution Read | Read access to the attribution page |
| **License** | License Read | Read access to the license page |
| **SSO** | SSO Read | Read access to the SSO configuration page |
| **SSO** | SSO Write | Ability to configure and modify SSO provider settings |
| **Service Key** | Service Key Read | Read access to the service keys page |
| **Service Key** | Service Key Create | Ability to create new service keys for API access |
| **Service Key** | Service Key Update | Ability to modify existing service keys |
| **Service Key** | Service Key Delete | Ability to revoke and delete service keys |
| **Role Management** | Role Read | Read access to the roles tab in settings |
| **Role Management** | Role Create | Ability to create new roles |
| **Role Management** | Role Update | Ability to modify existing role definitions |
| **Role Management** | Role Delete | Ability to delete roles |
| **External Chat** | External Chat Management | Ability to modify external chat model configurations |
| **Indexing** | Indexing Read | Read access to the indexing configuration page |
| **Indexing** | Indexing Create | Ability to create new indexes |
| **Indexing** | Indexing Update | Ability to update existing indexed repositories |
| **Indexing** | Indexing Delete | Ability to delete indexes |
| **Indexing** | Indexing Management | Ability to perform index database management and pruning |
| **Fine-Tuning** | Fine-Tuning Read | Read access to the fine-tuning page |
| **Fine-Tuning** | Fine-Tuning Create | Ability to create fine-tuning jobs |
| **Fine-Tuning** | Fine-Tuning Update | Ability to update fine-tuning jobs |
| **Fine-Tuning** | Fine-Tuning Delete | Ability to delete fine-tuning jobs |
A number of these permissions (such as Attribution, License, SSO, Indexing, Fine-Tuning) exist in the RBAC system but their corresponding portal pages are not available in the FedRAMP multitenant deployment. These permissions are included in the role management UI for completeness but do not grant access to any active features in this environment.
***
## Admin account lifecycle procedures
This section describes the end-to-end lifecycle of a top-level administrative account, from initial creation through decommissioning.
### Account setup
The platform supports both OIDC and SAML 2.0 for Single Sign-On (SSO) integration. Users authenticate through their configured identity provider (IdP). A user's first login creates their account, and an administrator assigns the appropriate role through the Admin Portal. Note that SSO integration requires coordination with the Cognition team and cannot be configured in a self-serve capacity. **Onboarding typically takes no more than a few days.**
Every new admin account should be configured according to the principle of least privilege. Prefer custom roles with only the permissions needed for the administrator's responsibilities rather than assigning the full Admin role unless the user requires complete system access.
### Authentication and MFA requirements
The FedRAMP deployment requires Single Sign-On (SSO), supporting both OIDC and SAML 2.0 protocols. Email and password authentication is not available. All users must authenticate through their configured identity provider.
We strongly recommend requiring Multi-Factor Authentication (MFA) for all administrative accounts. Devin Desktop inherits the MFA policies configured in the connected IdP.
### Account configuration
After an administrative account is created, the following configuration steps should be completed.
**Role assignment** determines the scope of the account's administrative access. Assign roles through the Admin Portal by navigating to the Manage Team tab, locating the user, clicking Edit, and selecting the appropriate role from the dropdown. Changes take effect immediately.
**Service key management** is required when the administrator needs API access for automation or analytics. Service keys are created under Settings with scoped permissions matching the key's intended use. Each service key should be named descriptively (for example, "Analytics Dashboard") and assigned a role with the minimum permissions required.
### Account operation
Ongoing operational practices for administrative accounts include the following.
**Regular access reviews** should be conducted to verify that administrative accounts still require their current level of access. Review the list of users with the Admin role periodically through the Manage Team tab and adjust roles as responsibilities change.
**Activity monitoring** is available through the built-in analytics dashboards. Administrators with Analytics Read permission can track user activity, engagement metrics, and feature usage. The Analytics API provides programmatic access to this data for integration with external monitoring systems.
**Service key rotation** should be performed on a regular schedule. To rotate a key, create a new service key with the same permissions, update the consuming system to use the new key, and then delete the old key.
### Account decommissioning
When an administrator no longer requires access, the account should be decommissioned promptly using the following procedure.
Navigate to the Admin Portal, open the Manage Team tab, locate the user, click Edit, and change their role from Admin to User (or a custom role with no administrative permissions).
Delete any service keys that were created by or exclusively used by the departing administrator. Navigate to Settings, then Service Key, and delete the relevant keys.
Remove the user through the Manage Team tab by clicking Delete next to their name. This will deactivate the user's Devin Desktop account and release their license seat.
Verify that the decommissioned account no longer appears in any administrative role by checking the Manage Team user list filtered by the Admin role. Confirm that all service keys associated with the account have been deleted.
Decommission administrative accounts immediately when an administrator changes roles or leaves the organization. Delayed decommissioning creates unnecessary security exposure.
***
## Security settings reference
The table below documents all admin-controlled security settings available in the FedRAMP deployment's Admin Portal. Each entry describes the setting's function, its security impact, and the recommended configuration for a security-conscious deployment.
| Setting | Function | Security impact | Recommended value |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Role-Based Access Control (RBAC)** | Controls which administrative actions each user can perform based on their assigned role and permissions. Managed under the Role Management section in Settings. | Limits the blast radius of compromised accounts by restricting permissions to only what each user needs. Overly broad role assignments increase the potential impact of a single account compromise. | **Configure with least privilege.** Create custom roles with only the permissions each administrator requires. Reserve the built-in Admin role for a small number of administrators. |
| **Service key permissions** | Scopes API access tokens to specific permission sets, controlling which operations automated systems can perform. Managed under the Service Key section in Settings. | Service keys with excessive permissions can be exploited if leaked, granting unauthorized access to user management, analytics, or other functions. | **Scope to minimum required permissions.** Create dedicated service keys for each integration with only the permissions that integration needs. Rotate keys regularly. |
| **SSO provider configuration** | Configures the identity provider used for all user authentication, supporting both OIDC and SAML 2.0 protocols. Email/password authentication is not available. SSO setup requires coordination with the Devin Desktop FedRAMP team. Managed under the SSO section in Settings. | Centralizes authentication through the organization's IdP, enabling enforcement of MFA, conditional access, and session policies. Misconfiguration could lock out all users or allow unauthorized access. | **Configure with your organization's approved identity provider (OIDC or SAML 2.0).** Verify the configuration by testing login with a non-admin account before rolling out broadly. |
*Last updated: June 28, 2026*
# Billing and Procurement
Source: https://docs.devin.ai/federal/usage-and-billing
How usage and billing work for federal customers.
This documentation is for the federal deployments of Devin. [Back to Devin Docs](/get-started/devin-intro)
We offer both usage-based pricing for access to the Cognition platform and firm-fixed-price (FFP) contracts for delivering mission outcomes.
***
## Usage
This is for customers that want to procure access to the platform for their engineers and/or their mission partner engineers.
Usage-based pricing is shared across all deployments and products on the Cognition platform. For example, you can seamlessly move between a commercial and federal deployment, or from Devin Cloud to Devin Desktop. Usage is measured in Agent Compute Units (ACUs), which represent how much actual work the agent is doing. The price of each ACU depends on the deployment level. For example, JWICS is more expensive than FedRAMP High. A more detailed breakdown of what contributes to usage can be found [here](/admin/billing/usage).
Many customers have existing purchase agreements with CSPs like AWS, Azure, and Google. We do not want customers to pay twice for intelligence. Thus, customers are able to burn down their CSP commitments with their existing accounts through utilization of Devin.
## Firm-fixed-price
This is for customers that want to procure the completion and delivery of a mission outcome on firm-fixed-price basis, regardless of how much compute or labor is spent by Cognition.
The combination of our platform, deployed engineers, and partnerships with federal solution providers, allows us to not only provide a developer tool, but to deliver mission outcomes faster, better, and cheaper than ever before.
In each firm-fixed price contract, Cognition will provide a Scope of Work that specifies the the mission outcome, SLAs, and hand-off terms. Cognition will also budget a number of ACUs and man-hours required to execute the scope of work.
Following delivery, if there are any leftover ACUs, they will be credited back to the customer under regular usage-based-pricing terms.
## Billing
We offer a number of purchase options, ranging from marketplaces to contract vehicles like [NASA SEWP V](https://www.carahsoft.com/sewp) and [ITES-SW2](https://www.carahsoft.com/ites-sw2) through partners like Carahsoft. Please contact [public.sector@cognition.ai](mailto:public.sector@cognition.ai) to get started!