id = "windsurf" name = "Windsurf" homepage = "https://devin.ai/desktop" icon = "SimpleIcons:windsurf" # No `description`: Cognition renamed the product mid-flight and the pages that # carried Windsurf's own sentence about itself now redirect, so there is # nothing to quote that is still the project's own words. # The Linux install page says the packaging was renamed but the command was # not: "the package is now called `devin-desktop`, which provides `windsurf`". # `windsurf` is what a user types, so that is what a consumer sees. executables = ["windsurf"] [dotfiles] # Cognition renamed Windsurf to Devin Desktop, and the documentation moved to # docs.devin.ai with it; the paths below are from those pages and still use the # pre-rename directory name, as the install page notes the packaging does. # # The uninstall instructions name the directory itself: "Delete the Devin # Desktop configuration folder" at "~/.codeium/windsurf" on Mac and Linux and # "C:\Users\[YourUsername]\.codeium\windsurf" on Windows — the same path, since # the Windows user profile root is `~`. It is a literal dotfile directory, with # no XDG or %APPDATA% spelling. # # Two files inside it are the user's own configuration: # https://docs.devin.ai/desktop/cascade/mcp — "~/.codeium/windsurf/mcp_config.json" # https://docs.devin.ai/desktop/cascade/memories — the global rules row reads # "Global | `~/.codeium/windsurf/memories/global_rules.md` | Single file, # applied across all workspaces" paths = [ "~/.codeium/windsurf/mcp_config.json", "~/.codeium/windsurf/memories/global_rules.md", ] # Nothing to carve out. The rest of ~/.codeium/windsurf — the conversation # history, the local index, and what the memories page calls the # auto-generated memories beside global_rules.md — is state, and none of it is # named above, so there is nothing inside a listed path to exclude. exclude = [] # The sign-in is an account session rather than a file the docs place under # ~/.codeium. The editor half of Windsurf is a VS Code fork and keeps its own # user directory elsewhere, but no page of the documentation states where, so # it is not guessed at here. secret = [] # The MCP page is explicit that this file is where tokens end up: its own # example sets "GITHUB_PERSONAL_ACCESS_TOKEN" in a server's env block, and the # page offers "${env:VAR_NAME}" and "${file:/path/to/file}" interpolation as # the way to avoid writing one in. Both the env block and the headers a remote # server authenticates with are lifted out; an interpolation reference costs # nothing to carry through a secret store, while a pasted key would otherwise # sync in the clear. [[dotfiles.secret_paths]] file = "~/.codeium/windsurf/mcp_config.json" match = { key_path = ["mcpServers.*.env.*", "mcpServers.*.headers.*"] } # A server's command and args are absolute paths to a binary or a checkout on # this machine. They are also the user's own wiring, which has to be put back # by hand after a rebuild, so the value is worth keeping for this device. [[dotfiles.machine_lines]] file = "~/.codeium/windsurf/mcp_config.json" match = { key_path = ["mcpServers.*.command", "mcpServers.*.args"] } scope = "backup"