Migrate from Windsurf: extract Cascade work into a standard owned deploy
A Windsurf project is a local folder Cascade indexes, multi-file plans Cascade executes, terminal commands Cascade runs, Source Control commits, and preview chrome glued to the editor. Migration is pushing that tree to org Git, translating Cascade-assumed env into CI, and landing on a conventional host. You keep the product behavior; you stop needing an open Windsurf Cascade session to boot production.
CodeCross LLC defines migrate-from-windsurf as Cascade-plus-local-repo extraction into a standard owned deploy. Operators push the Windsurf-opened folder to an org remote, remap secrets Cascade assumed for a clean runner, and prove build → start without Windsurf. Done when the destination boots from that checkout alone—no Cascade chat, no Windsurf preview, no laptop-only Source Control for production.
Why a raw Windsurf folder fails on a standard host
A green Cascade session is not a portable build
CI images lack editor-injected path assumptions. Cascade may have used uncommitted local state. Secrets arrive empty. Preview chrome hid missing assets.
Editor caches and Cascade transcripts land in the remote
Chat dumps with secrets, unpublished local experiments, and agent rules that only live in Windsurf need an include-or-drop pass.
Install only succeeds inside an open Windsurf session
Replace “available because Cascade just ran it” steps with install, build, and a host start. Fail the pipeline if those steps need the editor.
Local .env next to Windsurf gets committed “just this once”
Capture env names Cascade injected separately. Mint fresh values. Never commit Cascade chat dumps.
Auth still expects localhost Cascade used during a flow
OAuth, webhooks, and CORS that hardcode personal preview tunnels poison the destination origin until they are remapped.
The extract sequence that actually boots
Inventory, pin, remap, then prove start without Windsurf
Product behavior stays. Cascade terminal assumptions leave. The destination is a conventional start command on a clean runner.
01
Walk the tree Cascade edited before the org remote push
Application code, lockfiles, Source Control history worth keeping, and a written map of which flows owned which paths.
02
Encode Cascade terminal steps as CI jobs
Pin language and runtime versions. Fail if install only succeeds inside an open Windsurf session.
03
Remap Cascade-assumed env names; mint destination values
Auth, DB, and third-party APIs become CI secret keys. Dual-allow old callbacks only during cutover.
04
Prove install → test → start with Windsurf closed
The destination boots from that checkout alone. Cascade chat is no longer required for production.
How to
Extract a Windsurf folder into standard owned CI
Cascade-plus-local-repo extract. Success is build → start with no open Windsurf session and no Cascade chat for production.
Step 01
Inventory Cascade-touched modules before the org remote push
Take the application tree, lockfiles, Source Control history worth keeping, and a written map of Cascade flows. Leave editor caches and secret-bearing transcripts out.
Step 02
Turn Cascade terminal steps into portable CI
List install, test, and run commands Cascade ran successfully. Pin runtimes. Replace session-local steps with install, build, and a host start.
Step 03
Mint destination secrets and remount Auth
Capture every env name Cascade assumed. Never commit local .env files that lived next to Windsurf. Point Auth at the destination origin.
Step 04
Fix localhost callbacks Cascade used during flows
Update OAuth, webhooks, and CORS that still hardcode personal preview tunnels before DNS moves. Rotate old laptop secret values after cutover.
Step 05
Prove the destination boots from checkout alone
install → test → start with Windsurf closed. A successful Cascade session is evidence of intent—not a portable build artifact.
Read next
Proof, the essay, and sibling intents
These pages are already on the site. Use them to pressure-test the bet before a call.
“What impressed us most about CodeCross was their ability to deeply understand our vision and translate it into a complete digital solution. Unlike many agencies that just focus on technical delivery, CodeCross approached our project like true partners.”
How do you inventory Cascade-touched modules before the org remote push?
Walk the tree Cascade edited: application code, lockfiles, Source Control history worth keeping, and a written map of which Cascade flows owned which paths. Leave editor caches, Cascade chat transcripts with secrets, and unpublished local experiments out of the remote unless explicitly needed. Agent rules that only live in Windsurf need an explicit include-or-drop pass.
What Cascade-assumed env names must become CI secret keys?
Capture every env *name* Cascade injected or assumed during flows—Auth, DB, third-party APIs—separately from values. Mint fresh values on the destination; never commit Cascade chat dumps or local `.env` files that lived next to Windsurf. Fail the pipeline if required names arrive empty on a clean runner.
When do localhost Auth callbacks Cascade used poison the destination origin?
When OAuth, webhooks, or CORS still hardcode localhost, personal preview tunnels, or laptop-only URLs Cascade relied on during a flow. Point Auth at the destination origin, verify on a clean runner, then rotate old laptop secret values after cutover so leaked Cascade transcripts die.
Why does a green Cascade terminal session not equal a portable install?
CI images lack editor-injected path assumptions; Cascade may have used uncommitted local state; secrets arrive empty; Windsurf preview chrome hid missing assets. Normalize install, lockfiles, and env first; then push. A successful Cascade session is evidence of intent—not a portable build artifact.
Boot from checkout—not from a Cascade terminal.
Bring the local folder and the install steps Cascade assumed. We will say whether this is a portable tree — or a session that only boots while Windsurf is open.