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:

KindFilesWhat Cusp does
InstructionsAGENTS.md, CLAUDE.md, GEMINI.md, CLAUDE.local.md, .claude/CLAUDE.md, and the user-level ~/.claude/CLAUDE.md, ~/.codex/AGENTS.md, ~/.gemini/GEMINI.mdLoaded as project, local and user memory, with @path imports up to 4 hops deep
Rules.claude/rules/*.md, ~/.claude/rules/*.mdLoaded at start; rules with paths: frontmatter load when the agent touches a matching file
Settings.claude/settings.json, .claude/settings.local.json, ~/.claude/settings.jsonMerged into the settings hierarchy: permissions, hooks, env, sandbox, model and more
Managed settingssystem-wide managed settings files in the settings.json formatHonored at the managed level, below Cusp's own managed file. See Deployment
Permission rulespermissions.allow, ask, denyBash(npm run test:*), Edit(src/**), WebFetch(domain:github.com), mcp__github__*
Skills.claude/skills/, .agents/skills/, .codex/skills/ and their user-level foldersDiscovered with full frontmatter support, $ARGUMENTS, ${CLAUDE_SKILL_DIR} and !`command` expansion
Commands.claude/commands/*.md, ~/.claude/commands/*.mdAvailable as /name; a skill with the same name wins
Subagents.claude/agents/*.md, ~/.claude/agents/*.mdLoaded with their tools, model, permission mode, skills, MCP servers and hooks
Hookshooks in any settings fileSame 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.

SourceWhat 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 project

The 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:

KindCusp fileShared fileOn 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
InstructionsCUSP.md, .cusp/CUSP.mdAGENTS.md, CLAUDE.md, GEMINI.mdAll 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

ModeBehavior
default (Manual)Asks before edits, commands and network access
acceptEditsWorkspace file edits are approved automatically
planRead-only until you approve a plan
autoA fast classifier model approves low-risk actions
bypassEverything 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-plugin format install with cusp 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.

On this page