Skip to content

feat: add devin-desktop module - #1050

Open
matifali wants to merge 12 commits into
mainfrom
feat/devin-desktop-module
Open

feat: add devin-desktop module#1050
matifali wants to merge 12 commits into
mainfrom
feat/devin-desktop-module

Conversation

@matifali

@matifali matifali commented Aug 17, 2026

Copy link
Copy Markdown
Member

Summary

Cognition rebranded the Windsurf Editor as Devin Desktop on June 2, 2026 (Cognition acquired Windsurf from Codeium in July 2025). This adds a devin-desktop module using the current name, without breaking the existing windsurf module.

Backward compatibility approach

The Terraform module registry protocol has no rename/alias mechanism (registry-server's own code comments confirm this: "the registry server has no alias mechanism for the old path"). Renaming windsurf's directory/slug would break every template pinned to registry.coder.com/coder/windsurf/coder, so this PR is purely additive:

  • windsurf module: unchanged behavior. Only its README gets a [!IMPORTANT] notice pointing to devin-desktop. It stays published and fully functional for existing templates.
  • New devin-desktop module, matching the same pattern already used by every other desktop-IDE module in this registry (cursor, zed, windsurf, etc.): a thin wrapper around the shared vscode-desktop-core module, so none of the actual coder_app/deep-link logic is duplicated beyond what's already duplicated across that whole module family today.

I considered having devin-desktop delegate directly to the windsurf module (even less duplication), but that requires bumping windsurf to a new tagged version first, module registry composition resolves against already-published versions, and tags are only cut by a maintainer after merge (see MAINTAINER.md). That would force two sequential PRs with a manual tagging step in between for no real benefit given how small the vscode-desktop-core wiring is, so I went with the direct wrapper instead.

Icon

Added a dedicated devin.svg (.icons/devin.svg), a monochrome vector of Cognition's Devin mark, adapted from the MIT-licensed @lobehub/icons-static-svg package (icons/devin.svg), recolored to #fff to match this registry's existing monochrome icon convention (e.g. windsurf.svg). Named devin, not devin-desktop, matching how this registry already names icons/tags after the umbrella brand rather than the specific product surface (e.g. claude-code module uses claude.svg/claude tag). The module id/slug stays devin-desktop though, kept specific because Cognition's Devin family also includes Devin Local/Cloud/Review, a bare devin module name would be ambiguous between the desktop IDE launcher (this module) and a future CLI-agent-style module.

⚠️ Merge sequencing

This module defaults to opening Devin Desktop via a devin:// deep link (placeholder, not independently verified against a live install). Opening devin:// links requires "devin:" to be registered in Coder's ALLOWED_EXTERNAL_APP_PROTOCOLS, see coder/coder#28214. Do not tag/release this module until #28214 ships in a released Coder version, otherwise the module's "Open" button is broken (unsubstituted session token) on any deployment running an older Coder. The protocol input can be overridden (e.g. back to "windsurf") in the meantime if needed.

Known gap (flagging for review)

Devin Desktop is documented by Cognition as backwards-compatible with Windsurf (same ~/.codeium/windsurf/ config path), but I haven't verified this hands-on against the actual app.

Validation

  • terraform init -upgrade and terraform validate pass against the live registry.
  • bun test registry/coder/modules/devin-desktop/main.test.ts: 10/10 pass (mirrors windsurf's test coverage, plus cases for overriding slug/display_name/protocol).
  • terraform fmt -check, bun run fmt: clean for this module (repo-wide terraform fmt -recursive currently panics for unrelated pre-existing reasons; scoped terraform fmt -check -diff on this module's directory passes).
  • go build ./cmd/readmevalidation && ./readmevalidation: passes (81 modules including the new one, all relative URLs and icon paths valid).

Related: coder/coder#28205 (docs rebrand, now links to this module), coder/coder.com#1014 (redirect), coder/coder#28206 (Devin icon), coder/coder#28214 (URI scheme allowlist, blocking).

🤖 This PR was created with the help of Coder Agents, and needs a human review. 🧑💻

@linear-code

linear-code Bot commented Aug 17, 2026

Copy link
Copy Markdown

REG-77

bpmct pushed a commit to coder/coder that referenced this pull request Aug 18, 2026
…8214)

## Summary

`coder/registry#1050` adds a new `devin-desktop` module that opens Devin
Desktop via a `devin://` deep link (Devin Desktop is Cognition's June 2,
2026 rebrand of Windsurf). Coder's frontend gates which external app URI
schemes it will open with a session token,
`ALLOWED_EXTERNAL_APP_PROTOCOLS` in `site/src/modules/apps/apps.ts`.
`devin:` isn't in that list yet, so without this change the "Open"
button on that app would return the raw URL with the `$SESSION_TOKEN`
placeholder unsubstituted, an unusable link.

## Change

Add `"devin:"` to `ALLOWED_EXTERNAL_APP_PROTOCOLS`, next to the existing
`"windsurf:"` entry.

## Validation

- `pnpm exec biome check --error-on-warnings src/modules/apps/apps.ts`:
clean.
- `pnpm exec vitest run src/modules/apps/apps.test.ts`: 21/21 pass.
- `make pre-commit`: passes.

## Sequencing

`coder/registry#1050` should not be merged until this lands in a
released Coder version, otherwise the `devin-desktop` module's deep link
would be broken on deployments running an older Coder version. Tracked
together in REG-77 / DEVEX-777.

> 🤖 This PR was created with the help of Coder Agents, and needs a human
review. 🧑💻
@matifali matifali changed the title feat: add devin-desktop module (Windsurf's June 2026 rebrand) feat: add devin-desktop module Aug 18, 2026
@github-actions

github-actions Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Module Scorecard Check

coder/devin-desktop: first scorecard, 74 / 100

No existing scorecard discussion found for Devin Desktop; this is the initial score. A dedicated discussion is created after merge.

Full scorecard for this PR
Presentation & Onboarding IDE Integration Credential Hygiene Restricted-Environment Readiness Engineering Quality Overall
13 / 25 18 / 25 20 / 20 N/A 8 / 10 74 / 100
Drilldown

Presentation & Onboarding — 13 / 25

Criterion Max Score Notes
Configuration-mode examples 12 12 README provides examples for default usage, opening in a specific directory, and configuring MCP servers. Each example is complete and demonstrates sensible defaults.
Coder-context framing 8 1 README states "Add a button to open any workspace with a single click in Devin Desktop" and mentions the Coder Remote VS Code Extension, but does not explain what the module adds on top of Coder or show where Coder fits in the flow. Minimal context provided.
Visual preview 5 0 No image, GIF, or video in the README. Only an icon reference in frontmatter.

IDE Integration — 18 / 25

Criterion Max Score Notes
Dashboard entry point 7 7 Module uses coder_app via the vscode-desktop-core submodule with proper launch behavior using the devin:// protocol. Slug and display_name are configurable.
Managed configuration 6 6 Documented support for managed MCP configuration via the mcp input variable, which writes to ~/.config/devin/mcp_config.json. README includes a complete example with GitHub MCP server configuration.
Configurable folder or workdir 6 5 The folder variable is documented and demonstrated in examples. However, the description "The folder to open in Devin Desktop" is brief and could be clearer about behavior when unset or how it interacts with open_recent.
Pre-installed extensions 6 0 N/A - Devin Desktop is a desktop IDE, not a web IDE. This criterion does not apply.

Credential Hygiene — 20 / 20

Criterion Max Score Notes
Secrets marked sensitive 16 16 The MCP example uses data.coder_external_auth.github.access_token which is a secure reference, not an inline secret. No sensitive inputs are defined in the module itself that would require marking. README examples avoid inline secrets.
Non-hardcoded auth path 4 4 README demonstrates OAuth via coder_external_auth for GitHub authentication in the MCP example, avoiding raw API keys.

Restricted-Environment Readiness — N/A

Criterion Max Score Notes
Mirrorable artifact source 10 N/A Module downloads nothing; it only configures a coder_app and optionally writes a config file. No artifacts to mirror.
Bring-your-own binary 5 N/A Module downloads nothing; it relies on Devin Desktop already being installed on the client machine. No install to skip.
Egress transparency 3 N/A Module makes no network calls itself; it only configures the IDE launch URL and writes local config. The MCP servers configured are user-provided URLs.
Runs without sudo 2 N/A The coder_script writes to $HOME/.config/devin/mcp_config.json and uses chmod 600, both of which work without sudo. However, since this is the only script and it verifiably never invokes sudo, this would score full if applicable. Marking N/A as the module has minimal scripting and no download/install operations that would typically require privilege consideration.

Engineering Quality — 8 / 10

Criterion Max Score Notes
Input quality 6 4 Variables have descriptions and sensible defaults. The mcp variable description is clear. However, folder and open_recent descriptions are brief and lack detail about interaction behavior. No validation blocks are present where they could be useful (e.g., validating mcp is valid JSON if non-empty).
Test coverage 4 4 Comprehensive TypeScript tests in main.test.ts cover default output, folder configuration, open_recent behavior, slug/display_name overrides, and MCP file writing with container-based verification. Tests verify both business logic and end-to-end behavior.

Overall — 74 / 100

Raw 59 / 80 → round(59 / 80 × 100) = 74

coder/windsurf: 78 → 74

⚠️ Score regression: 78 → 74 (-4). Check the drilldown for which criteria dropped.

Theme Before After
Presentation & Onboarding 17 / 25 13 / 25
Integration 17 / 25 18 / 25
Credential Hygiene 20 / 20 20 / 20
Restricted-Environment N/A N/A
Engineering Quality 8 / 10 8 / 10
Overall 78 / 100 74 / 100
Full scorecard for this PR
Presentation & Onboarding IDE Integration Credential Hygiene Restricted-Environment Readiness Engineering Quality Overall
13 / 25 18 / 25 20 / 20 N/A 8 / 10 74 / 100
Drilldown

Presentation & Onboarding — 13 / 25

Criterion Max Score Notes
Configuration-mode examples 12 12 README provides examples for default usage, opening in a specific directory, and configuring MCP servers. Each example is complete and demonstrates sensible defaults.
Coder-context framing 8 1 README mentions "Add a button to open any workspace with a single click in Windsurf Editor" and references the Coder Remote VS Code Extension, but does not explain what the module adds on top of Coder or show where Coder fits in the flow. Minimal framing.
Visual preview 5 0 No image, GIF, or video in the README. Only an icon reference in frontmatter.

IDE Integration — 18 / 25

Criterion Max Score Notes
Dashboard entry point 7 7 Module uses coder_app via the vscode-desktop-core submodule with proper launch behavior (windsurf:// protocol URL).
Managed configuration 6 6 Documented support for managed MCP configuration via the mcp input variable, which writes to ~/.codeium/windsurf/mcp_config.json. Example shows GitHub MCP server configuration with external auth.
Configurable folder or workdir 6 5 The folder variable is documented with an example showing "/home/coder/project". However, the variable description is minimal ("The folder to open in Windsurf Editor") and could be more detailed about behavior. Half point deducted for under-documentation.
Pre-installed extensions 6 0 N/A - Windsurf is a desktop IDE, not a web IDE. This criterion does not apply.

Credential Hygiene — 20 / 20

Criterion Max Score Notes
Secrets marked sensitive 16 16 The MCP example uses data.coder_external_auth.github.access_token which is a proper external auth pattern. No inline secrets in examples. The module itself has no sensitive inputs (it doesn't handle credentials directly).
Non-hardcoded auth path 4 4 README example demonstrates OAuth via coder_external_auth resource for GitHub authentication in the MCP configuration, avoiding raw keys.

Restricted-Environment Readiness — N/A

Criterion Max Score Notes
Mirrorable artifact source 10 N/A Module downloads nothing; it only creates a coder_app with a URL and optionally writes a config file. No artifacts to mirror.
Bring-your-own binary 5 N/A Module does not install any binary; it assumes Windsurf is already installed on the client machine (desktop IDE).
Egress transparency 3 N/A Module makes no network calls itself; it only generates URLs and writes local config.
Runs without sudo 2 N/A The coder_script for MCP writes to $HOME/.codeium/windsurf/ using standard shell commands (mkdir, echo, base64, chmod) with no sudo invocations. Runs as unprivileged user.

Engineering Quality — 8 / 10

Criterion Max Score Notes
Input quality 6 4 Variables have descriptions and sensible defaults. However, some descriptions are minimal (e.g., "folder" could explain behavior more). No validation blocks present where they could be useful (e.g., validating mcp is valid JSON).
Test coverage 4 4 Comprehensive TypeScript tests in main.test.ts cover default output, folder parameter, open_recent combinations, and MCP file writing with container-based verification. Tests verify both business logic and end-to-end behavior.

Overall — 74 / 100

Raw 59 / 80 → round(59 / 80 × 100) = 74

(Restricted-Environment Readiness excluded as N/A; all four criteria do not apply by construction)


Scored against SCORECARD.md with claude-sonnet-4-5. Language-model scores are advisory.

matifali added a commit to coder/coder that referenced this pull request Aug 18, 2026
## Summary

Cognition (maker of Devin) rebranded the Windsurf Editor as Devin
Desktop on June 2, 2026, after acquiring it from Codeium in July 2025.
Our docs still referred to the editor as Windsurf and linked to a dead
`codeium.com` domain.

## Changes

- Renamed `docs/user-guides/workspace-access/windsurf.md` to
`devin-desktop.md`, rewritten to lead with Devin Desktop branding, note
the Codeium -> Windsurf -> Devin Desktop history, and use current links
(`windsurf.com`, `docs.windsurf.com`) instead of dead `codeium.com`
ones.
- Updated `docs/manifest.json` and
`docs/user-guides/workspace-access/index.md` to reference the new page.
- Updated remaining Windsurf mentions to Devin Desktop in
`docs/ai-coder/ide-agents.md`, `docs/ai-coder/index.md`,
`docs/reference/glossary.md`, and
`docs/ai-coder/ai-gateway/clients/index.md`.
- Added `windsurf.com`/`devin.ai` to `.github/.linkspector.yml` ignore
patterns; both rate-limit repeated automated requests with 429s (same
class of issue as the `codeium.com`/`marketplace.visualstudio.com` fix
in #28203).
- Switched every module reference from `windsurf` to the new
`devin-desktop` registry module (`docs/about/contributing/modules.md`,
the three `get-started/customize-your-template/*.md` Terraform
tutorials, and the main doc page's module link), since the new module
actually renders `display_name = "Devin Desktop"` / `slug =
"devin-desktop"` in the UI (the old `windsurf` module hardcodes
"Windsurf Editor").

<details>
<summary>Scope notes / sequencing</summary>

The `devin-desktop` module referenced here is being added in
[coder/registry#1050](coder/registry#1050) (not
yet merged/released). That PR is itself gated on
[#28214](#28214)
(whitelisting the `devin:` URI scheme) shipping in a released Coder
version first. This docs PR can merge independently, the module link
will 404 until #1050 is released, same as any
docs-ahead-of-registry-release sequencing.

The Terraform code samples now show `module "devin-desktop"` because
that module's `display_name`/`slug` are properly parameterized (unlike
`windsurf`, which hardcodes "Windsurf Editor"/`windsurf` regardless of
what's passed in), so the docs stay accurate to the rendered UI.

</details>

## Validation

- `make lint` (docs lint, markdownlint, repo checks) passes.
- Manually verified the new outbound links (`docs.windsurf.com`) return
200; `windsurf.com`/`devin.ai` are rate-limited (429) from this
environment too, hence the added ignore patterns.

Stacked on #28203 (targets that branch so the diff here stays scoped to
the rebrand; will retarget to `main` once #28203 merges).

> 🤖 This PR was created with the help of Coder Agents, and needs a human
review. 🧑💻
@matifali
matifali force-pushed the feat/devin-desktop-module branch from 8bc9c06 to 01abcd9 Compare August 18, 2026 10:17
Comment thread registry/coder/modules/devin-desktop/main.tf Outdated
Comment thread registry/coder/modules/devin-desktop/README.md Outdated
Comment thread registry/coder/modules/devin-desktop/README.md Outdated
Comment thread registry/coder/modules/windsurf/README.md
- drop windsurf tag from devin-desktop (already covered by devin/ide/ai)
- drop rebrand-history/placeholder admonitions from devin-desktop README
  now that devin:// has been hands-on verified against a live install
- bump windsurf module to 1.3.2 (patch) for the deprecation-notice README change
@matifali matifali added the version:patch Add to PRs requiring a patch version upgrade label Aug 18, 2026 — with Coder
@coder coder deleted a comment from github-actions Bot Aug 18, 2026
@matifali matifali removed the version:patch Add to PRs requiring a patch version upgrade label Aug 18, 2026
@matifali matifali added the version:patch Add to PRs requiring a patch version upgrade label Aug 18, 2026 — with Coder
@matifali matifali removed the version:patch Add to PRs requiring a patch version upgrade label Aug 18, 2026
@coder coder deleted a comment from github-actions Bot Aug 18, 2026
Comment thread registry/coder/modules/devin-desktop/main.tf Outdated
Comment thread registry/coder/modules/devin-desktop/main.tf Outdated
- protocol input is unnecessary now that devin:// is confirmed working;
  hardcode it directly
- write MCP config to the new ~/.config/devin/mcp_config.json location
  instead of the inherited ~/.codeium/windsurf/ path

Copy link
Copy Markdown
Member

will review this later because it seems mostly AI generated so it will take more time to review thouroughly :)

@DevelopmentCats DevelopmentCats left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this myself and everything works as expected with the devin coder_app and the mcp server config.

The only thing I notice @matifali is that you need Devin to be open already for it to actually open the remote connection to the coder workspace it seems like its an issue on their end that this only works when its running on the device you are launching the devin on from the workspace.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants