Import your setup
Bring instructions, settings, skills, subagents, commands, hooks and MCP servers from the agents you already use.
You don't have to start from scratch. Cusp reads the common instruction and configuration formats where they already are, and the import converts the rest into Cusp's own files. Your instructions, skills, subagents, hooks and MCP servers work as they are.
This page lists what Cusp reads in place, what the import converts for each source, how Cusp's files and the shared ones coexist, and what doesn't carry over yet.
Read in place
These files need no import. Open a project that has them and they're active:
| Kind | Files | What Cusp does |
|---|---|---|
| Instructions | AGENTS.md, CLAUDE.md, GEMINI.md, CLAUDE.local.md, .claude/CLAUDE.md, and the user-level ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md, ~/.gemini/GEMINI.md | Loaded as project, local and user memory, with @path imports up to 4 hops deep |
| Rules | .claude/rules/*.md, ~/.claude/rules/*.md | Loaded at start; rules with paths: frontmatter load when the agent touches a matching file |
| Settings | .claude/settings.json, .claude/settings.local.json, ~/.claude/settings.json | Merged into the settings hierarchy: permissions, hooks, env, sandbox, model and more |
| Managed settings | system-wide managed settings files in the settings.json format | Honored at the managed level, below Cusp's own managed file. See Deployment |
| Permission rules | permissions.allow, ask, deny | Bash(npm run test:*), Edit(src/**), WebFetch(domain:github.com), mcp__github__* |
| Skills | .claude/skills/, .agents/skills/, .codex/skills/ and their user-level folders | Discovered with full frontmatter support, $ARGUMENTS, ${CLAUDE_SKILL_DIR} and !`command` expansion |
| Commands | .claude/commands/*.md, ~/.claude/commands/*.md | Available as /name; a skill with the same name wins |
| Subagents | .claude/agents/*.md, ~/.claude/agents/*.md | Loaded with their tools, model, permission mode, skills, MCP servers and hooks |
| Hooks | hooks in any settings file | Same events, matchers, handler types, exit codes and JSON output |
| MCP servers | .mcp.json, ~/.claude.json (user and per-project entries) | Connected over stdio or HTTP, with a project approval step |
| Output styles | .claude/output-styles/, ~/.claude/output-styles/ | Loaded by name |
What the import converts
Some agents keep their configuration in formats Cusp doesn't read directly. The import converts them into .cusp/ files. It copies; it never moves or deletes the originals.
| Source | What comes over |
|---|---|
Claude Code (.claude/, ~/.claude/) | Settings merged into .cusp/settings.json; subagents, commands, skills, output styles and rules copied into .cusp/, so the project no longer depends on .claude/ |
Codex CLI (.codex/config.toml, ~/.codex/) | MCP servers; approval_policy and sandbox_mode as the closest permission mode; prompts in ~/.codex/prompts/ as commands; AGENTS.override.md as a rule. Profiles are listed but not imported |
Gemini CLI (.gemini/settings.json, ~/.gemini/) | MCP servers, excluded and allowed tools as permission rules, and TOML commands as Markdown commands ({{args}} becomes $ARGUMENTS). Both settings layouts are read. Extensions are listed for you to install |
Cursor (.cursor/, ~/.cursor/) | .cursor/rules/*.mdc: always-apply rules become rules, glob rules become path-scoped rules, description-only rules become skills, manual rules become commands. Also the legacy .cursorrules, .cursor/mcp.json, .cursor/commands/*.md, and CLI permissions from .cursor/cli.json |
Secrets never come over. API keys and tokens in MCP or settings files become ${VAR} references, and the import lists the variables to set at the end. Settings that skip approvals or redirect traffic stay off unless you choose them.
In the desktop app
When you first set up Cusp, the Bring your setup step lists the agents it found on your computer. Review what comes over shows every item with a checkbox and the exact file changes before anything is written.
From the CLI
cusp import codex --dry-run # show the diffs, write nothing
cusp import cursor # import this project's Cursor setup
cusp import gemini --user # user-level configuration instead of the projectThe source is one of claude-code, codex, gemini or cursor. --all imports both project and user level. --force replaces existing .cusp/ files that differ; by default they're kept.
How .cusp/ and shared files coexist
Every place Cusp reads a shared .claude/ path, it also reads the matching .cusp/ path. At the same level, .cusp/ wins:
| Kind | Cusp file | Shared file | On conflict |
|---|---|---|---|
| Project settings | .cusp/settings.json | .claude/settings.json | .cusp/ wins |
| Local settings | .cusp/settings.local.json | .claude/settings.local.json | .cusp/ wins |
| User settings | ~/.cusp/settings.json | ~/.claude/settings.json | ~/.cusp/ wins |
| Instructions | CUSP.md, .cusp/CUSP.md | AGENTS.md, CLAUDE.md, GEMINI.md | All load; CUSP.md comes later, so it wins on conflicting guidance |
| Skills | .cusp/skills/ | .claude/skills/, .agents/skills/ | First found wins on a name clash, .cusp/ first |
| Subagents | .cusp/agents/ | .claude/agents/ | .cusp/ wins on a name clash |
| MCP servers | .cusp/mcp.json, ~/.cusp/mcp.json | .mcp.json, ~/.claude.json | .cusp/ wins on a name clash |
So you can keep sharing these files with teammates who use other agents, and put Cusp-only tweaks in .cusp/.
Cusp loads every instruction file it finds, so AGENTS.md and CLAUDE.md both load when a project has both. If they say the same thing, you'll see it twice in context. Use claudeMdExcludes in settings to skip a file.
Tool and rule names
Cusp's tools use the names and input fields that existing hooks, permission rules and skills are written against: Read, Write, Edit, MultiEdit, Bash, Grep, Glob, WebFetch, Agent, Skill, with file_path, old_string, new_string, command, and so on.
Some models see a different name on the wire. GPT-family models edit with apply_patch and plan with update_plan, because that is what they were trained on. Hooks and permission rules always see the canonical name, so an Edit(src/**) rule also covers ApplyPatch and EditLines. See Tools.
Permission modes
| Mode | Behavior |
|---|---|
default (Manual) | Asks before edits, commands and network access |
acceptEdits | Workspace file edits are approved automatically |
plan | Read-only until you approve a plan |
auto | A fast classifier model approves low-risk actions |
bypass | Everything allowed except deny rules and protected paths. bypassPermissions is accepted as an alias |
dontAsk (CLI) | Anything that would prompt is denied |
Project and local settings can't set auto or bypassPermissions as the default mode. Only your user settings can. See Permissions.
Hooks
Cusp supports five handler types (command, http, mcp_tool, prompt, agent) and the full event list, including PreToolUse, PostToolUse, UserPromptSubmit, Stop, SessionStart and PreCompact. Exit code 2 blocks, JSON on stdout decides, and both ${CLAUDE_PROJECT_DIR} and CUSP_PROJECT_DIR are set, along with CUSP_HOOK_EVENT. See Hooks.
A hook script that checks tool_name == "Edit" will also see GPT models' edits as Edit-family calls named ApplyPatch. If your script filters on the exact tool name, add ApplyPatch, MultiEdit and EditLines to the list, or match on tool_input.file_path.
What doesn't carry over yet
- Auto memory written by other agents isn't read. Cusp keeps its own auto memory.
- In-process UI extensions that patch another agent's own interface have no equivalent in Cusp.
- Keybindings files from other agents. Cusp's shortcuts are listed in Keyboard shortcuts.
- Gemini CLI extensions are listed by the import, not installed. Plugins in the
.claude-pluginformat install withcusp plugin; see Hub.
Checking what loaded
Run /status in the CLI to see the daemon, session, model and workspace. Settings files that fail to parse are reported with the file path and the reason; an invalid key is dropped with a warning instead of discarding the whole file.