Windsurf’s editor, with Devin Local as its agent
ultracite init --editors devin writes .vscode/settings.json, so Devin Desktop formats on save and applies your linter’s safe fixes, and installs the extension from its Open VSX mirror with the devin-desktop launcher. Since 3.9.19 its only agent is Devin Local, which loads AGENTS.md, and --hooks devin hands it what ultracite fix couldn’t fix after each edit.
Devin Desktop by CognitionChecked against Devin Desktop 3.10.48
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnPaste": true,
"editor.formatOnSave": true,Format on save
"emmet.showExpandedAbbreviation": "never",
"js/ts.tsdk.path": "node_modules/typescript/lib",The project’s TypeScript
"js/ts.tsdk.promptToUseWorkspaceVersion": true,
"[astro]": {
"editor.defaultFormatter": "astro-build.astro-vscode"
},
"[css]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[graphql]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[handlebars]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[javascriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[json]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[less]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[scss]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescript]": {Oxfmt formats it
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue-html]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[vue]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"[yaml]": {
"editor.defaultFormatter": "oxc.oxc-vscode"
},
"editor.codeActionsOnSave": {
"source.fixAll.oxc": "explicit"Oxlint’s safe fixes
}
}init does in Devin Desktop- 1Writes
.vscode/settings.jsonA new file, or merged into yours setting by setting, with your comments and other settings kept. - 2Installs
oxc.oxc-vscodeWithdevin-desktop --install-extension, orwindsurfon older installs, when it creates the settings file. - 3With
--hooks devin, writes.devin/hooks.v1.jsonRunsnpx ultracite fix --hookon each file Devin Desktop’s agent edits.
- 4Trust the workspace when Devin Desktop asks. Until you do, Devin Local and hooks stay off.
- 5If
initcouldn’t rundevin-desktoporwindsurf, install the Oxc extension from the Extensions view, or Biome’s if you picked Biome. - 6Save a file: Oxfmt formats it and Oxlint’s safe fixes apply.
Three toolchains, one settings.json
init writes the settings for the toolchain you pick, so Devin Desktop formats with the same tool as ultracite fix and applies its fixes when you save.
Oxlint + OxfmtDefault
- Extension
- oxc.oxc-vscode
- Formats with
- oxc.oxc-vscode
- On save
- source.fixAll.oxc
--linter oxlint
- Extension
- biomejs.biome
- Formats with
- biomejs.biome
- On save
- source.fixAll.biomesource.organizeImports.biome
--linter biome
- Extensions
- dbaeumer.vscode-eslintesbenp.prettier-vscode
- Formats with
- esbenp.prettier-vscode
- On save
- source.fixAll.eslintsource.organizeImports
--linter eslint
The Windsurf editor under a new name
Devin Desktop is Windsurf renamed, still built on Code OSS: it reads .vscode/settings.json, installs extensions from an Open VSX mirror, and keeps agents and hooks off until you trust the workspace.
- Renamed
- Windsurf became Devin Desktop on June 2, 2026. Settings carry over automatically, and the first-run Migrate from Windsurf option copies your extensions.
- Extensions
- From an Open VSX mirror at
marketplace.windsurf.com.oxc.oxc-vscode,biomejs.biome,dbaeumer.vscode-eslintandesbenp.prettier-vscodeare all on it. - Launcher
devin-desktop, fromShell Command: Install 'devin-desktop' command in PATH. It takes--install-extension, and the oldwindsurfandsurfcommands still ship in~/.codeium/windsurf/bin/.- Restricted Mode
- In an untrusted workspace, Devin Local and every other agent are off, and hooks neither load nor run. Trusting the workspace turns them back on.
- Project folder
- Rules, skills, workflows and hooks moved from
.windsurf/to.devin/. Devin Desktop still reads.windsurf/as a fallback. - Agent edits
- Shown as diff zones with accept and reject controls for each hunk. Turn them off under Editor → User interface → Agent diff zones to have edits applied straight to the file.
Devin Local took over from Cascade
Devin Local runs the same architecture as Devin CLI: it loads AGENTS.md as an always-on rule and is fed the lint errors detected after its edits. --hooks devin adds a PostToolUse hook to .devin/hooks.v1.json, which runs ultracite fix --hook on each file it writes or edits and adds what’s left to its context.
- 1
~/.config/devin/AGENTS.mdYour global rules, loaded in every project alongside the project’s own. - 2
AGENTS.mdUltraciteAt the workspace root, loaded at session start as an always-on rule. This is whereinitwrites Ultracite’s rules. - 3
CLAUDE.md, AGENT.md, .windsurfrulesTreated the same asAGENTS.md: their contents load as always-on rules. - 4
.devin/rules/*.md, .windsurf/rules/*.mdOne rule per file, applied by itstriggerfrontmatter. Both folders load, and.cursor/rules/*.mdcis read too. - 5
packages/*/AGENTS.mdRead when the agent opens files in that directory, so only the relevant rules load.
{
"PostToolUse": [
{
"hooks": [
{
"command": "npx ultracite fix --hook",
"type": "command"
}
],
"matcher": "^(write|edit|apply_patch)$"
}
]
}- 01Devin Local writes or edits a file, and the change shows as a diff zone you can accept or reject.
- 02With
--hooks devin,ultracite fix --hookfixes and formats that file, and hands what it couldn’t fix back asadditionalContext. - 03The Oxc, Biome or ESLint extension lints the file too, and lint errors detected after the edit go back to the agent, with a cap so it doesn’t loop on one it can’t resolve.
- 04It fixes what’s left in its next step, or runs
npx ultracite checkasAGENTS.mdsays once you approve the command.
Worth knowing about Devin Desktop
Cascade’s setup doesn’t carry over
Cascade was removed in 3.9.19, on September 8, 2026. The
Devin: Open Cascade Migration Wizardcommand moves its hooks, workflows and memories across, and a separate command migrates Windsurf hooks into Devin hooks in every workspace folder.The Ultracite skill loads as is
Devin Local loads project skills from
.agents/skills/,.devin/skills/and.windsurf/skills/.initinstalls the Ultracite skill into.agents/skills/, so/ultraciteruns it, and the agent can invoke it on its own.Worktrees need their own install
Devin Local can work in a git worktree, a separate checkout with no
node_modules. Apost_setup_worktreehook in.devin/hooks.jsonruns inside each new worktree, Devin Local’s included, so you can install dependencies there before the agent lints.
Devin Desktop questions, answered
- Is Windsurf now Devin Desktop?
- Yes. Cognition renamed Windsurf to Devin Desktop on June 2, 2026, as a regular over-the-air update.
npx ultracite init --editors devinsets it up, and the old--editors windsurfid still works. - Does Devin Desktop still have Cascade?
- No. Cascade was removed in 3.9.19, and Devin Local is the only agent in Devin Desktop. A Continue in Devin Local prompt moves existing Cascade conversations to it.
- Does --hooks devin work with Devin Local?
- Yes. It writes a
PostToolUsehook to.devin/hooks.v1.json, in Claude Code’s format, which Devin Local and Devin CLI read. Re-runninginittakes thepost_write_codehook earlier versions wrote for Cascade out of.devin/hooks.jsonand.windsurf/hooks.json, and leaves your own hooks there. - Does Devin Desktop read AGENTS.md?
- Yes. Devin Local loads
AGENTS.mdat the workspace root as an always-on rule at session start, and picks upAGENTS.mdfiles in subdirectories when it works on files there. It readsCLAUDE.md,.windsurfrulesand.devin/rulestoo. - Why didn’t the Biome extension install in Devin Desktop?
initinstalls it only when it creates.vscode/settings.json, and only ifdevin-desktopor the olderwindsurfcommand is on your PATH. RunShell Command: Install 'devin-desktop' command in PATH, or install the extension from the Extensions view.- Does Devin Local fix lint errors on its own?
- Yes. Lint errors detected after Devin Local’s edits are fed back to it to fix, with new errors marked apart from ones it has already seen and a cap so it doesn’t loop on one it can’t resolve.
Keep going
- AgentDevinCognition’s autonomous coding agent, in cloud sessions, a CLI and a desktop app.
- EditorCursorThe AI code editor built on VS Code, with an agent that edits across your codebase.
- EditorVS CodeMicrosoft’s code editor, with GitHub Copilot’s agent built in and extensions from the Visual Studio Marketplace.
- DocsEditor setupEvery editor
initconfigures, and the extension each toolchain needs.
Ship less slop
One command sets up your linter, formatter, editor and agents. Works with Oxlint, Biome and ESLint.