Exportal
Bridge between claude.ai / ChatGPT and Claude Code (VS Code). Export any chat to clean Markdown with one click — ready to paste as context into Claude Code, or to send a Claude Code session back to your web chat.
Status: bidirectional (claude.ai / ChatGPT ↔ Claude Code). VS Code extension + Chrome companion + CLI.
Landing: exportal.dev. Support: exportal.dev/support. Privacy: exportal.dev/privacy. Full changelog and docs: GitHub repo.
What it solves
When you switch from claude.ai to Claude Code (or vice versa), you lose all the context and have to re-explain your project. Exportal generates a clean Markdown file with the entire conversation — including tool use, thinking, and results — that you paste in as initial context.
How to use it — happy path
With both extensions installed and paired:
- Open any chat at
claude.ai/chat/<uuid>, a project at claude.ai/design/p/<uuid>, or a chat at chatgpt.com/c/<uuid>.
- Click the floating Exportal button (bottom-right corner) → Export this chat.
- VS Code saves the conversation to
<workspace>/.exportal/<timestamp>-<slug>.md, opens the file, and automatically opens the Claude Code panel with the Markdown attached as @-mention. You just write your prompt and you're done.
- The Exportal panel surfaces an After import section with quick prompts ("Continue this conversation", "Summarize and plan next steps", etc.). Click one and the prompt is copied to the clipboard with the cursor already inside Claude Code's input —
Ctrl+V sends "@filename.md your-prompt" in one go. Edit the list with the exportal.postImportTemplates setting.
VS Code closed? No problem — the FAB detects it and opens it automatically via vscode://. The conversation is imported as soon as the bridge starts, without you having to do anything.
Exportal tab on something else? The After-import section restores the moment you switch back to the Exportal tab — you don't need to have it open during the export.
For Claude Design projects, in addition to the chat, the generated assets (HTML, JSX, JSON, etc.) are downloaded to <workspace>/.exportal/<timestamp>-<slug>/ (sibling folder of the .md). The .md starts with a "Generated assets" header listing the files so Claude Code sees them.
Or with a keyboard shortcut (without opening the panel):
Alt+Shift+E — export the current chat to VS Code (works on /chat and /design/p).
Alt+Shift+O — prepare the official export (only on /chat, in case you want the version with all your chats; the extension forwards the ZIP when it arrives by email).
Auto-attach to the Claude Code chat can be disabled with the exportal.autoAttachToClaudeCode setting. Add .exportal/ to your .gitignore if you don't want to version the imports.
The other way around: Claude Code → claude.ai / ChatGPT
From the Exportal tab, ↑ Export current session section, click claude.ai or ChatGPT. It automatically picks the most recent Claude Code session, renders to Markdown, copies to the clipboard, saves the .md to <workspace>/.exportal/ as a fallback, and opens the provider's site. You paste with Ctrl+V or drag the .md if the session is too long (claude.ai/ChatGPT truncate pastes >100K characters).
Import from a .zip export (claude.ai or ChatGPT)
If you download the official export ZIP (claude.ai: Settings → Export data; ChatGPT: Settings → Data controls → Export), Exportal imports it with one click:
- Open the Exportal tab. If you downloaded the ZIP recently, the panel detects it automatically and shows the filename + time on the provider's row (green). Click the row → direct import, no file picker.
- If it doesn't detect anything, click anyway → file picker.
- Real-time watch listens to your Downloads folder while the panel is visible: download a new ZIP and in ~1.5 seconds it shows up on the corresponding row.
Show up in Claude Code's /resume (opt-in)
If you enable the exportal.alsoWriteJsonl setting, alongside the .md a .jsonl compatible with Claude Code is written to ~/.claude/projects/<encoded-cwd>/<sessionId>.jsonl. The imported conversation shows up directly in /resume as if it were a local session of the project. It's experimental — the .jsonl format is reverse-engineered, not officially documented, and may break between versions.
Dedicated tab in VS Code
There's an Exportal icon in the activity bar (left vertical bar). The panel brings everything together: an After import section with quick prompts (only after a real import; survives switching tabs), settings toggles, one row per provider for Import/Export (claude.ai, ChatGPT, Gemini soon), clickable bridge status, and a footer with the version.
Installation
VS Code extension
From the Marketplace (recommended):
Ctrl+Shift+X → search for "Exportal" → Install.
Or local build to develop/work with changes:
npm install
npm run package:vsix
code --install-extension exportal-*.vsix
When you open VS Code for the first time, a two-step pairing wizard appears: Step 1 sends you to the Chrome Web Store to install the companion; Step 2 shows the pairing token with a "Copy token and open Chrome" button. If you skip it, you can reopen the wizard with Ctrl+Shift+P → Exportal: Show pairing token.
Chrome companion
- Install Exportal Companion from the Chrome Web Store, or download
exportal-companion-<version>.zip from Releases and load it unpacked in chrome://extensions (Developer mode enabled).
- In VS Code, run Exportal: Show pairing token → click Copy token and open Chrome. This opens claude.ai with the token in the URL fragment; the companion's content script captures it automatically, opens its options page showing "Done! — All connected", and VS Code shows a pairing-complete notification. No copy, no paste.
The icon badge reflects the state: OK green (imported), SET yellow (token missing), OFF red (VS Code not responding), AUTH red (invalid token), OLD red (VS Code outdated), ERR red (others). Click the icon while in any error state and the options page opens with a banner explaining the fix.
A short success chime plays when an export lands in VS Code (default ON, opt-out from the companion's options page).
Ways to export
| Method |
Where it works |
What it does |
Export this chat (button or Alt+Shift+E) |
claude.ai/chat/<uuid> and claude.ai/design/p/<uuid>. |
Reads claude.ai's internal API (same session cookies), sends the JSON to the local VS Code bridge, opens the Markdown. No ZIPs, no emails. On Design it also downloads the generated files to a sibling folder of the .md. |
Prepare official export (button or Alt+Shift+O) |
claude.ai/chat only. |
Saves the UUID of the current chat. When the official claude.ai ZIP finishes downloading, the companion forwards it to VS Code and VS Code opens that chat directly from the list. |
CLI (optional)
To export Claude Code sessions to Markdown, or to import a claude.ai ZIP from the terminal:
# Export a Claude Code session
npx exportal export <sessionId> --out session.md
# Import from a claude.ai ZIP
npx exportal import list ./data-abc.zip # list conversations
npx exportal import show ./data-abc.zip <uuid> # render one
Both commands redact secrets by default. See --help.
Principles
- Local-first, zero-network: nothing leaves your machine.
- Fail-closed on security: redaction enabled by default, both in CLI and extension.
- Mandatory preview in the CLI before writing an export.
- Boring tech: strict TypeScript, Node 20+, minimal dependencies.
Requirements
- Node.js ≥ 20
- VS Code ≥ 1.85 (for the extension)
License
MIT.