Skip to content

feat(agents): support Devin Desktop compatibility - #114

Merged
RealZST merged 4 commits into
RealZST:mainfrom
Orchardxyz:feat/devin-agent-support
Aug 15, 2026
Merged

feat(agents): support Devin Desktop compatibility#114
RealZST merged 4 commits into
RealZST:mainfrom
Orchardxyz:feat/devin-agent-support

Conversation

@Orchardxyz

Copy link
Copy Markdown
Contributor

Summary

  • Show Windsurf as Devin Desktop in the UI and README.
  • Prefer new Devin Desktop config paths while keeping legacy Windsurf paths compatible.
  • Add a Devin Desktop mascot with hover/click animations.
  • Add tests for Devin-first path priority and legacy fallback behavior.

Context

Cognition has acquired Windsurf and is transitioning the product into Devin Desktop:

This keeps HarnessKit aligned with the current product name while preserving existing Windsurf user configs.

Screenshots

PixPin_2026-08-11_10-09-14

Verification

  • cargo test -p hk-core windsurf
  • pnpm test -- src/lib/__tests__/types.test.ts src/lib/__tests__/agent-capabilities.test.ts
  • pnpm exec tsc --noEmit
  • pnpm lint

Prefer Devin Desktop config paths for the existing Windsurf adapter while
keeping legacy Windsurf locations discoverable and merge-compatible.

Update the agent display name, docs, and mascot treatment to reflect Devin
Desktop without breaking the stable internal windsurf adapter key.
@RealZST

RealZST commented Aug 14, 2026

Copy link
Copy Markdown
Owner

Thanks for the timely PR!

Before merging I did a deep dive into the official docs, and found something that affects the scope of this PR a bit, so I'd like to confirm the direction with you first.

Devin Desktop currently ships two agents with completely separate configs.

Cascade (the legacy Windsurf agent) Devin Local (now the default agent for new tabs) / Devin CLI
Global MCP ~/.codeium/windsurf/mcp_config.json (docs) ~/.config/devin/mcp_config.json (docs)
Global rules ~/.codeium/windsurf/memories/global_rules.md (docs) ~/.devin/global_rules.md + AGENTS.md (docs)
Project-level .devin/{rules,workflows,skills} preferred, .windsurf/ fallback (FAQ) .devin/{config.json,skills,agents}(docs)
Project-level Hooks .windsurf/hooks.json (docs) .devin/hooks.v1.json (docs)

In this PR, the project-level changes are spot on: .devin/ preferred with .windsurf/ fallback is exactly what the docs describe ✅.

But the global side is the tricky part: ~/.config/devin is actually the Devin CLI / Devin Local config home, while Cascade's global config never moved from ~/.codeium/windsurf/ (the FAQ says those paths "remain unchanged"). And the files this PR looks for there — global_rules.md, hooks.json, global_workflows/ — are Cascade-style names that the CLI doesn't use either (it has config.json / mcp_config.json / AGENTS.md, per the CLI docs). So the global paths end up matching neither agent.

The question

Modeling Devin Local/CLI properly means giving it its own agent entry in HarnessKit (own paths, own formats — the same way hindsight models the two agents separately), rather than folding it into the Windsurf adapter. So two options:

  1. Scope this PR to Devin Desktop (Cascade): keep your rename + mascot + project-level .devin/ support, revert the ~/.config/devin global side. I'd push the adjustments onto this branch.
  2. Additionally support Devin Local / Devin CLI as a new, separate agent — a follow-up PR.

Do you use the Devin Local agent or the Devin CLI? If yes, I'm happy to prioritize option 2 as a follow-up, and this PR would then land as option 1 either way.

Thanks again for the PR!

@Orchardxyz

Copy link
Copy Markdown
Contributor Author

Thanks for the timely PR!

Before merging I did a deep dive into the official docs, and found something that affects the scope of this PR a bit, so I'd like to confirm the direction with you first.

Devin Desktop currently ships two agents with completely separate configs.

Cascade (the legacy Windsurf agent) Devin Local (now the default agent for new tabs) / Devin CLI
Global MCP ~/.codeium/windsurf/mcp_config.json (docs) ~/.config/devin/mcp_config.json (docs)
Global rules ~/.codeium/windsurf/memories/global_rules.md (docs) ~/.devin/global_rules.md + AGENTS.md (docs)
Project-level .devin/{rules,workflows,skills} preferred, .windsurf/ fallback (FAQ) .devin/{config.json,skills,agents}(docs)
Project-level Hooks .windsurf/hooks.json (docs) .devin/hooks.v1.json (docs)
In this PR, the project-level changes are spot on: .devin/ preferred with .windsurf/ fallback is exactly what the docs describe ✅.

But the global side is the tricky part: ~/.config/devin is actually the Devin CLI / Devin Local config home, while Cascade's global config never moved from ~/.codeium/windsurf/ (the FAQ says those paths "remain unchanged"). And the files this PR looks for there — global_rules.md, hooks.json, global_workflows/ — are Cascade-style names that the CLI doesn't use either (it has config.json / mcp_config.json / AGENTS.md, per the CLI docs). So the global paths end up matching neither agent.

The question

Modeling Devin Local/CLI properly means giving it its own agent entry in HarnessKit (own paths, own formats — the same way hindsight models the two agents separately), rather than folding it into the Windsurf adapter. So two options:

  1. Scope this PR to Devin Desktop (Cascade): keep your rename + mascot + project-level .devin/ support, revert the ~/.config/devin global side. I'd push the adjustments onto this branch.
  2. Additionally support Devin Local / Devin CLI as a new, separate agent — a follow-up PR.

Do you use the Devin Local agent or the Devin CLI? If yes, I'm happy to prioritize option 2 as a follow-up, and this PR would then land as option 1 either way.

Thanks again for the PR!

Thanks for the detailed explanation and for digging into the official documentation. I had misunderstood the transition and assumed that Windsurf, including Cascade’s configuration, had largely migrated to the Devin paths. I wasn’t aware that Cascade and Devin Local are separate agents with different configuration systems.
I don’t currently use Devin Local or Devin CLI, so I agree that this PR should be scoped to Devin Desktop’s Cascade compatibility. Keeping the rename, mascot, and project-level .devin/ support while reverting the ~/.config/devin global paths makes sense to me.
Please feel free to push the adjustments to this branch. Thanks again for catching this!

RealZST and others added 2 commits August 15, 2026 21:56
… paths

Devin Desktop ships two agents with separate config systems: Cascade
(the legacy Windsurf agent, which this adapter models) and Devin Local /
Devin CLI. Per the official FAQ, Cascade's per-user paths "remain
unchanged" under ~/.codeium/windsurf/ — only the workspace side moved to
.devin/ (with .windsurf/ as fallback). ~/.config/devin belongs to the
Devin CLI, a different agent with a different file layout entirely.

Verified against docs.devin.ai and the string constants in the official
3.7.25 binaries: Cascade's language server never references
~/.config/devin, while the embedded Devin CLI binary owns it.

- Revert the global side to ~/.codeium/windsurf and drop the merged
  multi-candidate readers plus the scanner-wide id dedup they required
- Keep the project-side .devin/{rules,skills,workflows} preference and
  .windsurfignore; add the missing .devinignore (the primary name)
- Detect fresh installs via ~/.devin/extensions (product.json
  dataFolderName), deliberately not bare ~/.devin or ~/.codeium, which
  other products create
- Fix a pre-existing gap: global rules live at memories/global_rules.md;
  keep the old bare path visible and stop double-listing the file as a
  memory

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ndsurf mascot

The Devin logo hardcoded a near-black fill, which disappears on dark
backgrounds; use var(--mascot-icon-color) like the other monochrome
marks (cursor, codex). Remove the old Windsurf mascot component and its
CSS block — nothing references them since the Devin mark took over.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@RealZST
RealZST merged commit f547d2b into RealZST:main Aug 15, 2026
3 checks passed
@RealZST RealZST mentioned this pull request Aug 18, 2026
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.

2 participants