Migrate a user's local Claude Code / Codex setup into Kortix — Agent Skills, memories/rules, and MCP server connectors. Use when the user wants to bring their local Claude Code or Codex skills, CLAUDE.md / AGENTS.md preferences, or configured MCP servers over to a Kortix project, or says 'import my local skills', 'bring my Claude memories over', 'match my MCPs to Kortix connectors', 'set up what I use locally here', or 'switch from Claude Code / Codex'.
Marketplace skill — migrate your local Claude Code / Codex skills, memories, and MCP connectors into Kortix.
memory tool, MCP servers as Kortix connectors.~) — hand the user the matching discovery one-liner,
have them paste the output back, or have them zip the relevant directory (e.g.
~/.claude/skills) and upload it into the session. Then import from the upload.~. Touch a project's repo-local config only when the user names that project.SKILL.md):~/.claude/skills/ — Claude Code personal skills~/.claude/plugins/marketplaces/*/plugins/*/skills/ and
~/.claude/plugins/marketplaces/*/external_plugins/*/skills/ — plugin-bundled~/.codex/skills/ and ~/.agents/skills/ — Codexfor root in ~/.claude/skills ~/.codex/skills ~/.agents/skills \
~/.claude/plugins/marketplaces/*/plugins/*/skills \
~/.claude/plugins/marketplaces/*/external_plugins/*/skills; do
[ -d "$root" ] && find "$root" -maxdepth 2 -name SKILL.md -print
done
~/.claude/commands/*.md are single-file slash commands, not skills — skip
them. Two plugins can ship skills with the same directory leaf; they aren't
interchangeable, so show both and let the user pick which (or skip the name) —
only one name can win per project.kortix marketplace search "<topic>" --json, inspect with
kortix marketplace show <name> --json, and install it if it covers the
workflow. Only carry the user's own version over when nothing matches..kortix/opencode/skills/<name>/ # the directory name MUST equal frontmatter `name`
scripts/, references/, assets/).
Then validate — this step is universal across runtimes:agentskills validate .kortix/opencode/skills/<name>/
name that doesn't match the directory, isn't unique among the project's skills,
or violates ^[a-z0-9]+(-[a-z0-9]+)*$; missing name/description. (Full rules
in the create-skill skill.)git add .kortix/opencode/skills
git commit -m "import: bring over local Claude Code / Codex skills"
git push origin HEAD
kortix cr open --title "Import local skills" --description "Skills migrated from ~/.claude and ~/.codex."
Mapping: Claude Code/Codex skill folders →.kortix/opencode/skills/; the upload step that other tools callsave_custom_skillis, in Kortix, just committing the files via a CR. For reuse across projects, publish them to a marketplace/registry source instead of copy-pasting.
~/.claude/CLAUDE.md, ~/.claude/rules/*.md, ~/.claude/projects/*/memory/*.md~/.codex/AGENTS.md, ~/.codex/AGENTS.override.md, ~/.codex/memories/*.mdfor f in ~/.claude/CLAUDE.md ~/.claude/rules/*.md ~/.claude/projects/*/memory/*.md \
~/.codex/AGENTS.override.md ~/.codex/AGENTS.md ~/.codex/memories/*.md; do
[ -f "$f" ] && { printf '\n=== %s ===\n' "$f"; head -c 40000 "$f"; }
done
CLAUDE.md / AGENTS.md are usually project-specific — only scan
them if the user names a project.CLAUDE.md yields a few or zero. (Same
KEEP/DROP rubric the kortix-memory skill defines.)memory tool
(not write/edit), into .kortix/memory/ — most fit conventions.md or
overview.md; create a dedicated file only if a topic earns one, and keep
MEMORY.md in sync. Then land it via CR (memory: import local preferences).
Re-running creates duplicates — the memory layer has no dedup, so warn the user
before a second pass.Mapping: the per-entry upload other tools callmemory_updateis, in Kortix, thememorytool writing into.kortix/memory/— see thekortix-memoryskill for the full protocol.
~/.claude.json — top-level mcpServers (user scope; skip the nested
projects.<path>.mcpServers entries unless the user names that project)~/.codex/config.toml — [mcp_servers.<name>] sectionsjq -r '.mcpServers // {} | keys[]' ~/.claude.json 2>/dev/null
grep -E '^\[mcp_servers\.[A-Za-z0-9_-]+\]' ~/.codex/config.toml 2>/dev/null \
| sed -E 's/^\[mcp_servers\.//; s/\]$//'
kortix executor connectors # or the `connectors` MCP tool — names + connection status
notion server → the Notion connector, etc.).
When a name is opaque or could map to more than one, suggest the likeliest and
confirm before acting. Classify each: already connected · mappable-not-connected ·
no Kortix equivalent.kortix-system → Credentials & setup links) — never paste raw keys:kortix executor add notion --provider pipedream --app notion # add_connector — instant, no CR
kortix executor connect notion # connect — mints a 1-click link
# API-key provider instead of OAuth:
kortix secrets request SOME_API_KEY --scope connector # request_secret — mints a secret link
kortix executor connectors) when the user returns.This matches your local MCP servers to Kortix connectors by service name only — it never moves or copies credentials. Authorize each match with the Kortixconnectlink orkortix secrets request.
| Track | Item | Status | Notes |
| --------- | ----------- | ----------- | --------------------------------------- |
| Skill | <name> | Imported | In CR #N, pending merge |
| Skill | <name> | Skipped | Failed agentskills validate: <reason> |
| Memory | CLAUDE.md | Skipped | Coding-tool-specific — nothing portable |
| Connector | notion | Auth pending| Connect link surfaced; awaiting user |
agentskills validate doesn't get committed; surface why.~. Stick to the canonical roots above; reach into a
project repo only when the user names it.memory tool protocol.