import-claude-session
Import a claude.ai / Claude Desktop conversation as a resumable Claude Code session transcript.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Import a claude.ai / Claude Desktop conversation as a resumable Claude Code session transcript.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.
Respond to code review comments point by point, quoting each reviewer point verbatim and answering directly beneath it.
Use when moving local sessions between Claude Code and Codex, converting Claude Code JSONL into Codex rollout format, converting Codex rollout JSONL into Claude scrollback, or debugging cross-agent resume state.
Use when moving local sessions between Codex and Claude Code, converting Codex rollout JSONL into Claude scrollback, converting Claude Code JSONL into Codex rollout format, or debugging cross-agent resume state.
Operate remote hosts over SSH through the ssh-mcp server, driving a box like a person at a terminal instead of firing blind one-off commands.
Use when a task involves SSH or a remote host, including remote commands, interactive shells, sudo over SSH, tailing logs, deployments, scp or rsync file transfer, and port forwards or tunnels.
| name | import-claude-session |
| description | Import a claude.ai / Claude Desktop conversation as a resumable Claude Code session transcript. |
| when_to_use | Use when the user wants to bring a Claude Desktop or claude.ai chat into Claude Code, convert/export a conversation into a .jsonl session, or resume a web/desktop chat from the CLI. |
| argument-hint | [conversation name] [target project dir] |
| allowed-tools | ["Bash"] |
| effort | medium |
Pulls a conversation out of the Claude Desktop app (claude.ai) and writes it as a Claude Code .jsonl transcript so it appears in claude --resume for a chosen project directory.
The conversation content is not on disk. The desktop app only caches config locally; messages live on claude.ai's servers. The claude_session_to_cc.py script in this skill directory does all the deterministic work: it reads the desktop app's sessionKey cookie from the local Cookies store, decrypts it with the macOS Keychain key Claude Safe Storage, calls the claude.ai API to download the conversation, and converts it to the CC transcript format. Your job is to get the conversation name and target dir from the user, run the script, and report the result.
macOS only. The first run may surface a Keychain prompt the user must approve.
claude.ai stores one record per turn with a content array of blocks. Claude Code records one parentUuid-chained line per block. The script applies this mapping:
| claude.ai block | Claude Code line |
|---|---|
| human message | user line, message.content = string |
assistant thinking | assistant line, one thinking block |
assistant text | assistant line, one text block |
assistant tool_use | assistant line, one tool_use block |
tool_result | user line with tool_result + toolUseResult |
All blocks from one assistant turn share a generated message.id. The file lands in ~/.claude/projects/<cwd-with-slashes-as-dashes>/<session-id>.jsonl, so cwd determines which project's resume list shows it.
Ask the user which conversation (by title) and which project directory the session should belong to, unless they already said. The dir sets the cwd stamped in every line and the project folder the file lands in.
Run: ${CLAUDE_SKILL_DIR}/claude_session_to_cc.py list
It prints [{uuid, name, updated_at}] as JSON. Confirm the exact title with the user if there's no clean match. If a Keychain prompt appears, tell the user to approve it.
Run: ${CLAUDE_SKILL_DIR}/claude_session_to_cc.py convert --name "<title>" --cwd "<project dir>"
Use --id <uuid> instead of --name if titles collide. The script prints {session_id, out_path, lines, source_name, cwd}.
Confirm the transcript is well-formed before claiming success:
python3 -c "import json; ls=[json.loads(l) for l in open('<out_path>')]; print(len(ls),'lines ok')"
Tell the user the out_path and how to open it: cd <cwd> && claude --resume, then pick the session (it shows the conversation's first prompt).
sessionKey is a live credential. Do not print it, echo it, or write it anywhere. The script never emits it.web_search results are flattened to title+URL lists. State this if the user asks about fidelity; do not present them as real.[Attached image: ...] note). Binary image bytes are not downloaded.list shows no match, report that and show the available titles rather than guessing a uuid.