The bridge between your AI chat and your editor.
Exportal moves a conversation from
Claude.ai or ChatGPT into Claude Code
in VS Code, and back. One click in any chat, and the whole thread lands
in your workspace as clean Markdown, already attached to Claude Code as
an @-mention. No copy-paste, no re-explaining.
Under the hood
The actual file you receive, and the actual path it travels. No mock screenshots.
The Markdown you receive
# Exportal: claude.ai conversation
- **Title:** Refactoring the auth middleware
- **UUID:** `7f3a4b9c-2d8e-4c11-a8d3-...`
- **Created:** 2026-04-22T14:32:11Z
- **Messages:** 14
- **Redaction:** enabled
## User
Can you read src/auth/middleware.ts and walk me through
how the JWT verification works?
## Assistant
[tool_use: read_file]
{ "path": "src/auth/middleware.ts" }
The current implementation uses `jsonwebtoken` v9 with
HS256. The `verifyToken` function on line 23 takes a
request and...
A real export from a Claude.ai conversation. Tool-use blocks and inline code are preserved verbatim, ready to paste into Claude Code as context, or auto-attached for you.
How the bridge works
All traffic flows through your loopback address. There is no Exportal cloud, no analytics, no telemetry. The Chrome companion talks only to 127.0.0.1, your own machine.
What it does
Six things, and the combination is what makes it a bridge rather than an exporter.
- One-click export
- From any chat at
claude.ai/chat,claude.ai/design/p, orchatgpt.com/c, a clean Markdown file lands in your VS Code workspace, including tool use and results. - Auto-attach to Claude Code
- Exported files land as an
@-mentionin the Claude Code panel. Continue the conversation in your editor with full context, no copy-paste, no re-explaining. - Bidirectional
- Send any Claude Code session back to claude.ai or ChatGPT. The chat is rendered, copied to your clipboard, and the provider opens. Paste and continue in the cloud.
- Claude Design support
- For
claude.ai/design/pprojects, generated assets (HTML, JSX, JSON) are also downloaded into a sibling folder so Claude Code sees them too. - Official ZIP imports
- Drop a Claude.ai or ChatGPT data export ZIP and Exportal renders it. New ZIPs in your Downloads folder are detected while the panel is visible.
- Appear in
/resume - Opt-in: imported conversations appear in Claude Code's
/resumecommand as if they were native local sessions. Experimental.
How it works
Three steps. After the first pairing, daily use is one click.
-
Install both halves
The Exportal Companion from the Chrome Web Store, and the Exportal extension from the VS Code Marketplace.
-
Pair once
Ctrl Shift P, then
Exportal: Show pairing token, then Copy and open Chrome. The companion detects the token and pairs by itself. -
Click and continue
On any chat, click the floating Exportal button. VS Code opens the conversation as Markdown, attached to Claude Code as an
@-mention. Or press Alt Shift E.
Architecture and privacy
For people who want to know how their tools work, and to check.
Local-first by design
The Chrome companion and the VS Code extension communicate through
a local HTTP loopback bridge on 127.0.0.1,
authenticated by a token paired once. No remote servers exist in the
data path: the server lives inside your own VS Code, on your own
machine.
- No remote servers. Nothing is sent off your machine.
- No analytics. No telemetry. No accounts.
- Network permissions are used only to talk to
127.0.0.1, your own loopback address. - Reads conversations through your existing browser session, the same way your browser already reads them when you scroll. No automation, no scraping, no rate-limit abuse.
- Open source under MIT. Every line of the Chrome extension, the VS Code extension, and the bridge protocol is on GitHub.
The full threat model is documented in
SECURITY.md:
what is treated as a sensitive asset, where redaction applies by
default, what is intentionally out of scope (for example encryption
at rest), and how the pairing token mitigates loopback access from
other processes.
Who built this
Built in the open
The repo is the source of truth, not this page. Four documents carry the history.
Questions
Short, honest answers.
Does Exportal work without the VS Code extension?
No. Exportal is a bridge, so both halves are required. The Chrome companion talks to a local HTTP server that lives inside the VS Code extension. Both are free and MIT-licensed.
Why does the Chrome extension ask for network permissions if it's local?
The "network" permission is used only to talk to 127.0.0.1, your own machine's loopback address. There is no remote server. You can verify this by reading the source code.
Will Anthropic or OpenAI ban my account?
No. Exportal only reads conversations you already have access to, using your existing browser session, the same way your browser does when you scroll through them. No automation, no scraping, no rate-limit abuse.
Does it work with Pro, Max, Team and Enterprise plans?
Yes, with all of them. Exportal uses your existing logged-in session: whatever you can see in your browser, Exportal can export.
What if Anthropic or OpenAI change their internal API?
Exportal parses responses defensively and falls back gracefully. If a structural change breaks something, file an issue on GitHub and it will be fixed quickly. The official ZIP import path is always available as a fallback that does not depend on the internal API.
Is the /resume integration officially supported?
No. The .jsonl session format used by Claude Code is reverse-engineered, not officially documented by Anthropic. The /resume integration is opt-in and labelled experimental; it may break across Claude Code versions. The Markdown export, which is the primary feature, is unaffected.
How is this different from existing exporters in the Chrome Web Store?
Existing exporters save chats to a file. Exportal is a bridge: the exported conversation is auto-attached to Claude Code in VS Code so you continue the conversation, not just archive it. It is also bidirectional, supports claude.ai/design/p with asset download, and is the only tool that integrates with Claude Code's /resume command.