# Windsurf

> Windsurf is retired. Import the Cascade history it left on your machine, and recover full transcripts from downloaded trajectories.

Windsurf is retired. Hansard imports the Cascade history it left on your
machine. Some of that history is stored in a format Hansard cannot read, so a
downloaded Cascade trajectory is the way to get a full transcript when the
local history is incomplete.

## Source IDs

| Source     | Use it for                                                                                                     |
| ---------- | -------------------------------------------------------------------------------------------------------------- |
| `windsurf` | Local Cascade transcripts and plans, message files Hansard keeps but cannot read, and downloaded trajectories. |

## How the import works

Hansard can read Windsurf history from four places: transcript hook files that
Windsurf writes to `~/.windsurf/transcripts`, a bulk recovery from a running
Windsurf app, downloaded trajectory Markdown files, and local Cascade plan and
protobuf files. Transcript hook records map directly to user, assistant, tool,
result, and context events. Bulk recovery asks the running Windsurf language
server for each trajectory by its ID and saves its progress, so an interrupted
recovery can continue. Recovery only reads, and Hansard never stores Windsurf's
local sign-in token.

Several of these can describe the same Cascade trajectory. Hansard combines
them only when they share the exact trajectory ID. A transcript hook file takes
priority over a bulk recovery, which takes priority over readable plan files
and protobuf files. The best copy supplies the transcript, and the others can
add a title, working directory, timestamps, or the original files. Content
that looks similar but has a different ID stays a separate conversation.

Older protobuf message files on disk are kept but not decoded. A readable plan
can therefore appear as a partial placeholder conversation until bulk recovery
or a downloaded trajectory supplies the full transcript. A downloaded
trajectory normally finds its conversation by trajectory ID. When a
placeholder shows a token, `--claim` with that token replaces exactly that
placeholder. The watcher follows new transcript and plan files, while bulk
recovery and downloaded trajectories are always manual.

## Import and keep current

**Import now**

```sh
hansard import --source windsurf --since all
hansard index rebuild
```

To recover every readable trajectory, open Windsurf and run:

```sh
hansard import windsurf --recover --since all
```

To import a trajectory you downloaded with Windsurf's **Download trajectory**
action, pass the Markdown file, or a folder of downloaded files:

```sh
hansard import windsurf /home/user/Downloads/cascade-chat-conversation.md
```

When a conversation in the app shows a **Windsurf trajectory export needed**
card, copy the command from the card. It includes the token for that
conversation:

```sh
hansard import windsurf --claim ws-0123456789abcdef /home/user/Downloads/cascade-chat-conversation.md
```

**Keep current**

With **Automatic** source selection, the watcher still includes `windsurf`
and follows new transcript and plan files. Downloaded trajectories and bulk
recovery always run by hand.

## Review the import in the app

1. When the import finishes, open **Conversations** and select **Filter & sort**.
2. Set **Source** to **Windsurf** and set **Time** to the window you imported. Use **Folder** to narrow the list when you use this harness in several projects.
3. Select a conversation to check its messages, tool calls, files, commits, model, and token usage.

To keep archiving new sessions from a local harness, open **Settings → Imports**. **Automatic** follows every supported harness installed on this computer. **Custom** lets you turn individual harnesses on or off. Cloud sources and account exports never run from here; each needs its own import command. If a conversation you expect is missing after you reset the filters, run the import command on this page again with `--explain-skips` where the source supports it.

## What Hansard preserves

- Transcript hook turns when Windsurf wrote them.
- Readable Cascade plans and matching details.
- Protobuf message files, kept as original files without being decoded.
- Downloaded trajectory Markdown as the full transcript when you import it.

## Known limitations

- Legacy recovery requires a compatible running language server. Devin's
  [release notes](https://docs.devin.ai/desktop/changelog) removed Cascade in
  September 2026, although its older Cascade guides remain online. A current
  Devin installation does not prove that legacy recovery is available.

- The documented transcript hook keeps at most 100 files and prunes the oldest.
  A missing transcript folder does not establish that the account has no history.

- Older local protobuf message files are not decoded.

- A plan-only conversation is not a complete conversation. A placeholder is
  not searchable until you import its downloaded trajectory.

- Downloaded trajectories must be imported by hand.

> **Missing turns:** Use Windsurf's **Download trajectory** action, then import the Markdown file.
> This gives a complete transcript even when the local files cannot be read.

## Refresh an existing archive

```sh
hansard import --source windsurf --since all
hansard index rebuild
```

If you download newer versions of trajectories, import them again.
