Persistent Memory for Windsurf: Decisions That Outlive the Rename
Windsurf is transitioning to Devin Desktop, and the memory surface changed shape with the name. Legacy Cascade and the newer Devin Local agent do not share the same capabilities, so the honest answer to "what does my agent remember" depends on which surface you are actually running.
Start with the built-in fix, because it covers more than people give it credit for.
Use the native path first
Legacy Cascade generates Memories automatically, stored locally and scoped to the workspace that produced them. Durable instructions for a repository belong in Rules or AGENTS.md, where they travel with the code. And if you are moving from Cascade to Devin Local, the official migration wizard exists to carry useful material forward into skills. If your problem is continuity inside one workspace, or that migration itself, the native path is the right fix. Use it.
The gap is anything that crosses a workspace line. A Memory from one workspace does not follow you into the next one. Nothing you settled with Cascade shows up when you ask the same question from a different agent. Renames and migrations make this visible, but they do not cause it. The context you actually depend on was never the product. It is months of small decisions about your codebase, and it is the least portable part of your stack.
The vault sits outside the moving parts
MemoryRouter keeps selected decisions in a vault that belongs to no client in particular. For a legacy Cascade installation with remote MCP support, the connection is one entry in Cascade's MCP config:
{
"mcpServers": {
"memoryrouter": {
"serverUrl": "https://mcp.memoryrouter.ai/mcp"
}
}
}
Merge it into the existing mcpServers object rather than replacing other servers, or add the server from Cascade's MCP settings panel and edit nothing. The first connection opens a browser for OAuth, asks which vault it should use, and leaves no MemoryRouter key sitting in a config file. The coding tools guide documents the exact settings, and the Windsurf page walks through the same setup end to end.
Two boundaries worth stating plainly. This is conditional remote MCP compatibility for legacy Cascade, not a verified native plugin for Devin Local, so if your release does not expose compatible remote OAuth, stop at that line rather than forcing it. And the connection is model-directed: Cascade calls search_memories, store_memory, or date_search_memories when it judges they will help, the same way it decides when to read a file. The prompt is how you tilt that judgment. Say "check memory" before a task that depends on history, and "remember this" after a decision worth keeping.
Prove it with a disposable fact
Wire-check the connection before real decisions go in. Ask Cascade: "Store this in MemoryRouter: the demo service uses a read replica for reporting only." Then inspect the tool result. A reply saying it saved the fact is not the receipt; the store_memory call and its result are.
Open a fresh conversation with nothing carried over and ask: "Check memory: what does the demo service use the read replica for?" A working path shows the search call and the reporting-only answer. If it comes back empty, check that you authorized the vault you meant to and that the server is enabled in Cascade's MCP panel.
Then extend the test once. Connect a second tool, Claude Code or Cursor or ChatGPT, to the same vault and ask the same question there. An answer arriving in a client that never saw the original conversation is the property that makes the next rename a non-event.
What this does not do
- It does not import your Cascade Memories, local memory files, or old chats. Bringing history in is a separate workflow; the connection covers everything from now on.
- It does not replace Memories, Rules, or the migration wizard. The native surfaces keep their jobs, and the vault runs beside them as a layer a session can search.
- It is not a scoping mechanism. One connection authorizes one vault and the memory tools carry no project argument, so a hard wall between two projects means two vaults and two connections.
- Nothing is captured in the background. If a decision never went through a store call, the vault does not have it.
Create your MemoryRouter account, add the server entry to mcp_config.json, and keep the decisions on your side of the rename.