MemoryLake
Back to all articles
TutorialAugust 10, 2026·11 min read

How to Migrate From Windsurf to Claude Code Without Losing Context (2026)

Nothing broke, which is the problem. Cognition rebranded Windsurf to Devin Desktop on June 2, 2026 via an over-the-air update, Cascade reached end of life on July 1, and your editor came back with your plan, extensions, keybindings, and MCP connections intact. If you've decided to leave for Claude Code instead of following, there was no moment that forced you to take inventory — so the things that don't transfer are the things you find out about later.

Here's the direct answer: your rules are portable and your memories aren't. Windsurf's project rules are Markdown or plain text — the legacy `.windsurfrules` file in the project root, or the newer `.windsurf/rules/` directory — and the content moves into `CLAUDE.md` almost verbatim, only the filename and load path changing. Cascade's memories are a different thing: auto-generated, local to your machine, not shared with teammates, and with no export path. Those aren't migrating, and the honest plan is to reconstruct what mattered rather than pretend they will.

This covers what to collect, where it goes on the Claude Code side, and what to do about the layer neither editor lets you take with you.

What actually transfers

Rules content transfers almost verbatim. Windsurf rules are instructions to a model written in Markdown. Claude Code reads CLAUDE.md. There's no translation layer needed — you're changing where the text lives, not what it says.

Worth knowing the shape of what you're collecting, since it changed over Windsurf's life. Community documentation describes two systems coexisting: the legacy `.windsurfrules` plain-text file in the project root, and the newer `.windsurf/rules/` directory of scoped Markdown rules, with current Devin Desktop builds preferring .devin/rules/ and keeping .windsurf/rules/ as a fallback. Rules across those files are reported to be capped at roughly 12,000 characters combined — worth checking against your own install, since these specifics come from practitioner guides rather than a current official reference.

That fallback behavior is why this migration feels optional. Your old rules keep being read, so nothing visibly degrades, and the inventory never happens.

Cascade memories don't transfer, and this is the actual loss. The distinction that matters, as the community guides put it: rules are static instructions you write and commit to version control, while Cascade memories are auto-generated and local — the agent records context from a session so it stops re-asking, but memories aren't shared with teammates and aren't a place to put deliberate conventions.

Read that carefully, because it cuts both ways. It means Windsurf did have a memory layer, and it was doing real work for you — every "it already knows that" moment you stopped noticing. It also means the layer was auto-generated from sessions, private to one machine, and never designed to be exported. There's no file you hand to Claude Code.

MCP connections need re-adding, not converting. They survived the Windsurf-to-Devin rebrand automatically; they don't follow you to a different editor. Claude Code supports MCP servers, so this is re-entering configuration rather than rewriting anything — but the credentials and environment variables each server needed are your problem again.

Extensions, keybindings, and your plan don't come at all. Those carried over in the rebrand because it was the same editor. Claude Code is a CLI, not a VS Code fork, so this part isn't a migration — it's a change of tool category, and worth naming up front so you're not surprised.

Scripts and automation need auditing. The rebrand moved .windsurf/tools/ to .devin/tools/, and the widely-reported summary of that transition was that the editor migrated itself but scripts did not. Anything that shelled out to a Windsurf path is already a latent breakage, and moving to Claude Code is a good moment to find it rather than a new cause of it.

The manual migration

Step 1: Collect your rules, and reconstruct what the memories held

Start with the files, because that part is mechanical. Look in the project root for .windsurfrules, then in .windsurf/rules/ and .devin/rules/ for scoped Markdown files. Collect all of them, including the ones you'd forgotten were there — the combined character cap means older rules often got trimmed rather than deleted, and half-rules are worse than none.

Sort what you find by real scope:

  • Global to your work — how you want output formatted, languages and versions you default to, things true of every project.
  • Global to this repository — conventions, architecture constraints, testing requirements.
  • Specific to one area — rules that only apply to the API layer, the data layer, the tests.

Then do the part that isn't mechanical. Open Cascade — or Devin Desktop — and read what the agent seems to know that isn't written anywhere. The practical way to surface it is to ask directly: what conventions is it following, what has it been told about this project, what does it avoid doing. Because memories are auto-generated from sessions, the answers are often things you told it once in passing and never wrote down: a vendor quirk, a directory that shouldn't be touched, a build step that has to run first.

Write those down as ordinary text. This is the only irreplaceable hour in the migration — everything else is copying files. It's also the moment to notice how much of your editor's usefulness had accumulated in a local, per-machine store you never backed up.

Step 2: Rebuild them as CLAUDE.md at the right levels

Claude Code reads CLAUDE.md, and the placement does the scoping work:

  • Global preferences go in ~/.claude/CLAUDE.md.
  • Repository conventions go in CLAUDE.md at the project root, committed, so your team gets them too.
  • Area-specific rules go in a CLAUDE.md in that subdirectory, or stay in a document you reference.

A useful habit for the third case: rather than inlining a long area-specific rule, keep it as a file in docs/ and put one line in the root CLAUDE.md pointing at it — "read docs/api-conventions.md before touching anything under src/api/." You can also pull specific files in with @path imports when they're relevant instead of always.

If you'd rather not start from a blank file, /init scaffolds a CLAUDE.md from the repository, and /memory opens the memory files for editing directly. Both are faster than writing from scratch, and both produce something you should then edit down.

Keep it short. Everything in scope loads on every task, so a long root file is a cost you pay on every request forever — and unlike Windsurf's combined character cap, nothing stops you from making it too long. The cap was doing you a favor.

Then set expectations correctly, because this is where people get disappointed. Rules files make knowledge available; they don't make the tool remember. Claude Code starts each session fresh from your files and compacts context in long sessions, which is why it forgets your project context between sessions even with a good CLAUDE.md, and why corrections you gave last week can come back undone. You've moved the rules. You haven't replaced the auto-generated memory layer you just lost, and Claude Code doesn't ship one.

The Better Way: One Memory Layer, Either Editor

Notice the shape of what just happened. You lost a memory layer because it was local to a machine and welded to a product, and the product changed out from under you — first by rebranding, then by ending the agent you used.

That's not a Windsurf failure. It's what happens to any knowledge that lives inside a tool: it's excellent until the tool changes, and then it's unrecoverable. Cascade memories were auto-generated and local by design; nobody promised they'd outlive Cascade.

The alternative is keeping that layer outside the editor entirely. MemoryLake is a memory layer your tools read from — the conventions, decisions, and constraints in one store, reachable from Claude Code over MCP and from anything else through the API. The next time an editor rebrands, sunsets an agent, or you simply want to try something new, the knowledge is a config entry rather than a reconstruction exercise.

To be fair to files: CLAUDE.md has genuine advantages a store doesn't. It's plain text, it lives in version control, it's reviewed in pull requests, and your team inherits it automatically. Keep it for standing rules — that's what it's for. The memory layer is for what accumulates: the vendor quirks, the reasons behind decisions, the things you'd otherwise only discover by interrogating an agent before you uninstall it.

Step 1: Create an API key

Generate a key and make your first request in about 30 seconds. Keep it in your environment or a secret manager rather than inline in config — you're already re-entering MCP credentials for this move, so put them somewhere you won't have to hunt for next time.

Create a MemoryLake API key
Create a MemoryLake API key

Step 2: Upload your first memories

Drop in the documents, images, and files holding what you reconstructed in Step 1, plus the reference material your rules were pointing at: architecture decisions with reasons, the build quirks, the constraints. Upload sources rather than summaries where you can.

Upload your first memories to MemoryLake
Upload your first memories to MemoryLake

Step 3: Connect your AI & agents

Give Claude, Codex, OpenClaw, and other AI agents access to memory via MCP or the API. Claude Code supports MCP servers, so this is one configuration entry — and the same store is readable from whatever else you use, which is the point of doing it once.

Connect your AI and agents via MCP
Connect your AI and agents via MCP

What this changes in practice

The first difference is that the interrogation exercise in Step 1 is the last one. What you learned about your own project doesn't sit in a per-machine store you can't export; it's in a record you can read.

The second is machine independence. Cascade memories were local, and so is most of what replaced them — Claude Code's own knowledge lives in files in a checkout. A store means a second laptop, a container, or a teammate's session starts from the same knowledge instead of from nothing.

The third shows up when you run several sessions. Claude Code can now have sessions message each other, which is useful for coordination — but a message is text passed between two live sessions, not a shared base. A store is what makes the fourth session next week know what the first one learned.

And it makes the next tool change cheap. Cascade's EOL was a hard date announced with notice, and it still cost people their accumulated context. The version of this migration you don't want to repeat is the one where the knowledge is inside whatever you switch to.

Best practices for the switch

Interrogate the old agent before you uninstall it

This is the step everyone skips and the only one that's genuinely irreversible. Auto-generated memories are the accumulated result of things you said once. Ask the agent what it knows about the project, what conventions it's following, what it avoids — and write the answers down before the install is gone.

Don't mistake the fallback for a migration

Devin Desktop reading .windsurf/rules/ as a fallback means your old rules still work, which makes it easy to believe nothing needs doing. If you're leaving for a different editor, that fallback is irrelevant — Claude Code reads none of those paths.

Treat the 12,000-character cap as guidance you keep

Windsurf's combined rules limit forced you to be selective. CLAUDE.md has no such enforcement, and the natural result is a file that grows past the point where the model attends to all of it. Pick a budget and hold to it deliberately.

Audit your scripts while you're in there

The rebrand moved tool paths, and scripts didn't follow. Anything referencing a Windsurf path is already broken or about to be. Fixing it during a deliberate migration is much cheaper than discovering it in CI.

Separate rules from knowledge as you rebuild

CLAUDE.md is for short standing rules loaded every task. The reasons, history, and reference material belong in documents or a store retrieved when relevant. Rebuilding everything as one long rules file recreates the problem the character cap was protecting you from.

Conclusion

Windsurf to Claude Code is two jobs with very different costs. Moving rules is mechanical: collect .windsurfrules, .windsurf/rules/, and .devin/rules/, sort by scope, and place them as ~/.claude/CLAUDE.md, a committed root CLAUDE.md, and subdirectory files or referenced docs. Replacing Cascade's memories is not mechanical at all — they were auto-generated and local, there's no export, and the only way to recover them is to ask the agent what it knows before you walk away.

The lesson worth taking from Cascade's July 1 end of life is the one that isn't about Windsurf: a memory layer that lives inside a product has the lifespan of that product. Keeping it in a store your editors read from is what makes the next rebrand, sunset, or change of mind a configuration change instead of a reconstruction.

Frequently asked questions

Do I have to migrate at all, given the editor updated itself?

No — that's precisely why this is a decision rather than an emergency. The June 2, 2026 rebrand carried your plan, extensions, keybindings, and MCP connections over, and Devin Desktop reads .windsurf/rules/ as a fallback. If you're staying, the follow-the-rebrand path is the relevant one. This guide is for people choosing a different editor instead.

Can I export my Cascade memories?

There's no export path, and it follows from what they are: auto-generated and local to your machine rather than an authored artifact. The practical substitute is asking the agent what it knows about your project and writing the answers down yourself, before you lose access to the install.

Will Claude Code read my `.windsurfrules` file?

No. Claude Code reads CLAUDE.md — at ~/.claude/CLAUDE.md for your global preferences, at the project root for repository conventions, and in subdirectories for narrower scope. The content of a rules file usually transfers with no edits; it's the filename and location that change.

What happens to my MCP servers?

They need re-adding. MCP connections carried over through the Windsurf-to-Devin rebrand because it was the same editor; they don't follow you to Claude Code. Claude Code supports MCP servers, so it's configuration rather than rewriting — just budget time for the credentials and environment variables each one needs.

Should I go to Claude Code or Cursor?

Both are common destinations for people leaving after Cascade's end of life, and the rules-migration work is nearly identical — only the destination file differs, CLAUDE.md versus .cursor/rules. The Cursor-rules version of this conversion covers the mapping in the other direction if you want to see the shape. If you expect to end up using more than one, put the knowledge in a shared store and treat the editors as clients.

Why did my rules seem to work fine and my agent still get worse?

Because they're two layers. Your rules kept being read through the rebrand and the fallback path, so the explicit conventions held. What changed underneath was the auto-generated memory — the accumulated session context that made the agent feel like it already knew things. Rules dropping out of effect and memory disappearing look identical from the outside, which is why it's worth checking which one you're actually seeing.