Blog
·6 min

Where Windsurf Stores Your Cascade Chat History

Windsurf keeps Cascade conversations in ~/.codeium as binary protobuf files — one per conversation, unreadable in a text editor, with no export. Here is the layout and what you can actually do about it.

Windsurf's Cascade conversations are on your disk, but unlike every other tool in this category you cannot read them. They are protobuf — binary, length-prefixed, meaningless to grep and to any editor you would normally reach for. That single fact shapes everything else about keeping them.

The exact location

Windsurf inherits the Codeium directory rather than the editor's own. Everything lives under your home directory, on every platform:

# Cascade conversations — one .pb file per conversation
~/.codeium/cascade/<uuid>.pb

# per-project chat state, the project path encoded in the filename
~/.codeium/chat_state/codeium_chat_state_file_<encoded-path>.pb

# the local index — this is the big one
~/.codeium/database/

# Windows
%USERPROFILE%\.codeium\

On the machine used for this article there are 13 Cascade conversation files spanning February to April, three chat_state files whose names spell out the projects they belong to, and a database directory of 3.0 GB. The conversations themselves are the small part — 32 MB against three gigabytes of index.

There is a second location for editor state. Windsurf is a VS Code fork, so window layout, per-workspace settings and extension storage sit under the usual editor root — ~/Library/Application Support/Windsurf/User/ on macOS, %APPDATA%\Windsurf\User\ on Windows. Cascade history is not there. Look in ~/.codeium.

# what you have
ls ~/.codeium/cascade/*.pb | wc -l
du -sh ~/.codeium/cascade ~/.codeium/database

# which projects have chat state
ls ~/.codeium/chat_state/

Why you cannot read them

Run head on one of those .pb files and you get binary. Protobuf is a schema-driven wire format: without the schema — which Windsurf does not publish — the bytes are not self-describing in any useful way. You can pull fragments out with strings, which will show you some of your own prompt text, but you cannot reconstruct a conversation, and nothing in the product exports one.

Every other tool in this category writes JSON, JSONL or SQLite — formats you can read without permission. Windsurf writes a format that only Windsurf can open.

This is a defensible engineering choice. Protobuf is compact and fast, and Cascade conversations carry a lot of structure. But it changes what ownership of the data means in practice: the file is on your disk, and the ability to read it is not.

What actually goes wrong

  • There is no export. No JSON, no markdown, no clipboard-friendly transcript. What you can get out is what the UI will show you, one conversation at a time.
  • You cannot search across conversations from outside the app. grep is useless on protobuf, so the app's own search is the only search there is.
  • Reinstalling or resetting Codeium clears the directory. The conversations go with it, and because you cannot read the backup you took, you have no way to check what you lost.
  • The 3 GB index makes ~/.codeium a natural target for anyone cleaning up disk space. The conversations are 32 MB of that, sitting in the blast radius of a directory people delete for unrelated reasons.
  • The per-project chat_state filenames encode the project path. Move or rename the project and the association no longer matches, the same way it does in every VS Code derivative.

How to back it up

Copy the conversation files and skip the index — that is a 32 MB backup instead of a 3 GB one, and the index is regenerable while the conversations are not. Quit Windsurf first:

DEST="$HOME/Backups/windsurf-$(date +%Y-%m-%d)"
mkdir -p "$DEST"

cp -R ~/.codeium/cascade "$DEST/"
cp -R ~/.codeium/chat_state "$DEST/"

du -sh "$DEST"

Be clear-eyed about what that buys you: a copy of files you cannot open, restorable only into the same product. It is worth doing — a restore into Windsurf is a real recovery — but it is not the same as having the record, and pretending otherwise would be dishonest.

If you want a readable record rather than a restorable one, the reliable approach is to capture at the point where the conversation is still text. promptwake doctor will show you what every AI tool on the machine is holding; for Windsurf specifically, the honest answer today is that its format is closed and the useful capture happens elsewhere in your toolchain.

Where the personal fix stops working

The team-scale problems are the usual ones — the files are on one laptop, nobody else can read them, they cover one tool — but Windsurf adds a sharper version of the last one. A record you cannot read is a record you cannot show. When a customer's security questionnaire asks how AI-generated code is reviewed and retained, 'we have the files but only the vendor's app can open them' is not an answer that survives follow-up.

A backup you cannot read is a bet that the product that wrote it will still be there, still able to open it, on the day you need it.

What to do this week

Copy ~/.codeium/cascade and ~/.codeium/chat_state somewhere safe today; it is small and takes one command. Then check the size of ~/.codeium/database — if it is measured in gigabytes, know that the conversations are in the same directory as the thing you will eventually be tempted to delete.

If what you need is a record the team can read, search and show to someone else, that is the problem PromptWake exists for: it captures prompt, response and the resulting diff from the AI tools your team already uses, keeps them locally by default, and on the paid tiers syncs them into one searchable timeline. Take the copy regardless — a reinstall does not warn you first.