Integrations · Windsurf

Deterministic replay for Windsurf workflows.

Add Reelier to Windsurf's MCP config, record the job once through the wrap proxy, and replay it at 0 tokens with a receipt that names every asserted step.

How capture works on Windsurf

reelier scan includes Windsurf's directory in its source list. Honest caveat: today, transcripts that don't match the Claude-style JSONL schema parse to 0 replayable sessions — scan skips what it doesn't recognize rather than inventing steps. Note that .windsurfrules is config, not history: scan never treats a rules file as a transcript.

The dependable capture path is the recording proxy: front the MCP server(s) your workflow uses with reelier mcp --wrap, run the job once in Windsurf, and the full trace lands in .reelier/traces/. Wrap captures lossless traces (tool annotations included) — scan-from-history is a reconstruction; wrap is the recording.

reelier scan reads~/.codeium/windsurfThe literal directory scan reads for Windsurf (reelier/src/scan.ts). Unrecognized transcript formats contribute 0 replayable sessions — honest degradation, never a crash.

Wire it up

mcp_config.json — Reelier's tools inside Windsurf
{
  "mcpServers": {
    "reelier": {
      "command": "npx",
      "args": ["-y", "reelier", "serve"]
    }
  }
}

Windsurf Settings → MCP Servers, or ~/.codeium/windsurf/mcp_config.json depending on version — same mcpServers shape either way.

terminal — Windsurf rules
curl -fsSL https://raw.githubusercontent.com/seldonframe/reelier/main/integrations/windsurf/reelier.md

Paste the output into your global Windsurf rules or a project .windsurfrules file — the when-to-replay guidance in Windsurf's rules format.

mcp_config.json — record through the proxy
{
  "mcpServers": {
    "your-data-server": {
      "command": "npx",
      "args": ["-y", "reelier", "mcp", "--wrap", "npx -y @yourco/mcp-server"]
    }
  }
}

The recorder: a lossless pass-through proxy writing .reelier/traces/*.jsonl. Only local stdio servers can be wrapped; http/sse entries are reported as skipped.

First receipt in 60 seconds

  1. Front your data server with the wrapped entry above and restart Windsurf.
  2. Run the job once in Windsurf, as usual. The proxy records every tool call to .reelier/traces/<name>.jsonl.
  3. Compile the trace into a skill — one assertion per step.npx -y reelier compile .reelier/traces/<name>.jsonl -o my-job.skill.md
  4. Replay deterministically: 0 LLM tokens, receipt written. npx -y reelier diff my-job gates drift from the second run on.npx -y reelier run my-job.skill.md

A real receipt

Verbatim output of a portfolio replay, run with the published CLI (npx -y reelier@latest, resolved to reelier@0.12.1) on 2026-07-21. The run record confirms passed: true and 0 LLM tokens. Nothing platform-specific about it — the same skill file replays from any shell, including yours:

Reelier · replay receipt
=== registry-latest ===
✓ Step 1 — Latest dist-tag from the registry [passed] 152ms

PASSED: 1/1 steps ok, 0 failed, 152ms total
seed receipt · examples/portfolio · reelier@0.12.1 · 2026-07-21

Replay it yourself: npx -y reelier@latest run examples/portfolio/registry-latest.skill.md (from a checkout of the repo — read-only, no account, no key).

FAQ

Does scan read .windsurfrules?

No — deliberately. .windsurfrules (like .cursor/rules) is configuration, not a tool-call transcript, so it can't be replayed and scan doesn't pretend otherwise. Scan reads transcript directories; rules files teach the agent when to reach for replay.

Can the replay run outside Windsurf?

Yes — that's the point. The skill is a markdown file; npx -y reelier run replays it from any shell, cron job, or CI runner at 0 tokens, read-only by default.

What can't Reelier replay?

Reelier replays deterministic tool calls: MCP tool calls and its own http.get/http.post builtins. It cannot replay file edits, shell commands, reads and searches, subagent dispatch, or anything non-deterministic. An edit-heavy coding session honestly reports nothing replayable — an empty result, not an error.

Reading as an agent? This page has a markdown twin: /for/windsurf/md