Make a Claude Code chat you started in VS Code show up in the Claude Code desktop app β so you can carry one conversation back and forth between both apps.
Windows Β· one PowerShell script Β· no install Β· never edits your chats Β· MIT licensed
Full explanations are below β but if you just want it done, this is the whole thing.
STEP 1 Download the script (green "Code" button β Download ZIP β Extract).
STEP 2 In VS Code: Terminal β New Terminal. Paste ONE line, swap in your folder, press Enter:
powershell -NoProfile -ExecutionPolicy Bypass -File "βΉPATH TO THE .ps1βΊ" -ProjectPath "βΉYOUR VS CODE PROJECT FOLDERβΊ" -Apply
STEP 3 Fully quit the desktop app (tray icon β Quit) and reopen it.
Done β your VS Code chats from that folder now appear in the desktop app's sidebar.
π Confused by βΉPATH TO THE .ps1βΊ
vs βΉYOUR PROJECT FOLDERβΊ
? Read ** the 3-folders section** β it's the #1 thing people trip on.
Understand it (5-min read):
π The one idea behind everythingβ notebook + index cardβ The WH questionsβ who / what / why / when / where / howπ Is it safe?β yes, and exactly why
Do it (copy-paste):
π₯ Install β get the script onto your PCπ§© IMPORTANT: don't mix up these 3 foldersβread this firstπ How to use it β copy-paste recipesβ restart the desktop appβ οΈ The step everyone forgetsπ Red error? The two common fixes
Use it:
π Carry one chat between both apps (ping-pong)ποΈ How to undoπ§ Bonus: the folder β "drawer" namingΒ·β οΈ Honest limitationsπ License
Imagine every Claude Code chat is a notebook, and there's a library index card that points to it.
THE NOTEBOOK = your actual chat (every message you and Claude wrote)
THE INDEX CARD = a tiny note that says "a notebook exists, here's its name and where it is"
- The VS Code extension finds notebooksby looking on the shelf(the folder on your disk). - The desktop app is lazier β itonly reads index cards. No card = it can't see the notebook,even though the notebook is right there.
When you start a chat in the desktop app, it writes the index card for you. β When you start a chat in VS Code, no card gets written. β β the desktop app is blind to it.
This tool writes the missing index card. That's the whole thing. One card per chat.
YOUR VS-CODE CHAT
notebook β (your messages β already on disk, we never touch it)
index card β MISSING ββrun this toolβββΊ index card β βββΊ desktop app sees it
Anyone who uses Claude Code in more than one place β the VS Code extension and the desktop app β and is annoyed that chats started in VS Code never appear in the desktop app's sidebar.
It creates a small "index card" file (Claude Code calls it a session wrapper) for chats that don't have one. With the card in place, the desktop app lists the chat and can open it. It adds tiny pointer files. Nothing else.
Both apps and the terminal CLI share the exact same chat file on disk. But the desktop app builds its sidebar only from index cards, and only the desktop app writes those cards β VS Code never does. So VS-Code-born chats are invisible to the desktop app until someone writes the card. This tool writes it.
Whenever you started a chat in VS Code and now want it in the desktop app too. Run it as often as you like β it skips chats that already have a card, so re-running is always safe.
THE NOTEBOOK (your chat β we only READ it, never change it):
C:\Users\<you>\.claude\projects\<folder-as-dashes>\<session-id>.jsonl
THE INDEX CARD (what this tool WRITES):
C:\Users\<you>\AppData\Roaming\Claude\claude-code-sessions\<guid>\<guid>\local_<session-id>.json
For each VS-Code-born chat in a folder, the tool:
1. Opens the chat file and reads ONLY its first ~50 lines (a read-only peek)
2. Figures out two things:
β’ which folder the chat belongs to
β’ a friendly title (the chat's first message), with the date in front
e.g. "[Jun 13] hey help me find the claude's sesins..."
3. Writes a tiny index card whose pointer ("cliSessionId") aims at that chat file
4. Drops the card next to the desktop app's other cards
That's it. It reads your chats (peek only) and writes new little card files.
β It NEVER edits, moves, or deletes your actual chat files (.jsonl)
β It NEVER overwrites a card that already exists (it skips those)
β It NEVER deletes anything β it only ADDS card files
β It is DRY-RUN by default β it writes NOTHING unless you add -Apply
β It is trivially reversible β delete the card file it made, and the listing is gone
(your chat stays perfectly safe, because the card was never the chat)
You need just ONE file: register_vscode_session_in_desktop.ps1
. There is nothing to compile or install β you save this one file and run it. Pick either way to get it.
1. Open https://github.com/budhasantosh010/claude-code-session-bridge
2. Click the green "< > Code" button β "Download ZIP"
3. Find claude-code-session-bridge-main.zip in your Downloads folder
4. Right-click it β "Extract Allβ¦" β choose a PERMANENT home, e.g. C:\Users\<you>\Tools
5. You now have the script here:
C:\Users\<you>\Tools\claude-code-session-bridge-main\register_vscode_session_in_desktop.ps1
cd C:\Users\<you>\Tools
git clone https://github.com/budhasantosh010/claude-code-session-bridge.git
Result:
C:\Users\<you>\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1
π Keep it somewhere permanent you'll remember (a
Tools\
folder is perfect).Don't leave it in Downloadsβ too easy to delete by accident.
1. In File Explorer, find register_vscode_session_in_desktop.ps1
2. Hold SHIFT, right-click it β "Copy as path"
3. The full path is now on your clipboard, e.g.:
"C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1"
Almost everyone trips on this at first β including the person who built this tool. There are three completely different folders in play, and they are NOT the same thing:
β THE SCRIPT (the tool) β a .ps1 file. Just a helper program. Lives ANYWHERE.
C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1
β‘ YOUR PROJECT FOLDER β where YOUR code/work lives. The folder you open in VS Code.
C:\Users\Alex\Documents\my-website
β’ CLAUDE'S SESSIONS FOLDER β Claude's OWN private storage. You NEVER point at this.
C:\Users\Alex\.claude\projects\...
π Folder β‘ β your project folder (the one you open in VS Code).
π« NOT folder β’ (.claude\projects\...
).
Why? The -ProjectPath
part is asking "which project's chats do you want?" β and you name a project by where its code lives (its human name, like ...\my-website
). The script then quietly translates that into folder β’ for you. You never type folder β’ yourself.
YOU type: -ProjectPath "C:\Users\Alex\Documents\my-website" β folder β‘ (your code)
SCRIPT figures: β look inside C:\Users\Alex\.claude\projects\c--Users-...-my-website\ β folder β’
(it does this itself β not your job)
No. Here's the key idea:
The
.ps1
file isNOT part of Claude.It's a small helper program. It has nothing to do with Claude's internal machinery, so it doesnotbelong in.claude
.
.claude\ = Claude's house. Claude's own stuff (sessions, settings, memory).
ββ you don't store your own tools inside someone else's house ββ
the .ps1 = YOUR screwdriver. A tool. It can sit in ANY drawer you like β
Desktop, a Tools\ folder, anywhere. It works exactly the same.
The script's location doesn't matter at all. What matters is that your command points at it with the -File "..."
part:
-File "C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1"
ββββββββββββ "hey PowerShell, run THIS tool β it's right here" ββββββββββββ
Move the .ps1
to C:\Tools\
? Then just change that to -File "C:\Tools\register_vscode_session_in_desktop.ps1"
and it still runs fine.
RUN this tool β ββ to bookmark the chats of this project β‘ ββ into the desktop app.
(-File "...ps1") (-ProjectPath "...your code folder")
Folder β’ (.claude) = Claude's private storage. The tool reads it FOR you. You never name it.
β SCRIPT PATH = where you saved register_vscode_session_in_desktop.ps1 (copied just above)
β‘ PROJECT PATH = the folder you open in VS Code for that chat
To copy the PROJECT PATH: in VS Code, right-click the top folder in the Explorer sidebar β "Copy Path". (Or in File Explorer, Shift+right-click the folder β "Copy as path".)
1. Open PowerShell: in VS Code click Terminal β New Terminal
(or press the Windows key, type "PowerShell", press Enter)
2. Paste a recipe below β with YOUR two paths filled in
3. Press Enter
π‘
Golden habit:run itwithout-Apply
first β that's apreviewand writes nothing. Happy with what it lists? Add-Apply
and run again to actually write the cards.
π Every recipe below uses this ONE concrete example. Just swap in your own two paths.
Example SCRIPT PATH : C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1
Example PROJECT PATH: C:\Users\Alex\Documents\my-website
Plain English: "Look at my-website's chats and add a card for any that doesn't have one yet."
powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1" -ProjectPath "C:\Users\Alex\Documents\my-website" -Apply
Plain English: "Show me what you WOULD add, but don't touch anything yet."
powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1" -ProjectPath "C:\Users\Alex\Documents\my-website"
Plain English: "I only want this single chat in the desktop app, not all of them."
Step 1 β find the chat's id:
1. Open File Explorer and go to: C:\Users\<you>\.claude\projects\
2. Open the "drawer" for your project. Its name is your PROJECT PATH with every
space and symbol turned into a dash. So:
C:\Users\Alex\Documents\my-website β c--Users-Alex-Documents-my-website
3. Inside, each chat is a file named <session-id>.jsonl . The filename IS the id:
41c938f1-e81e-4d13-ad39-bde9636a51c0.jsonl
βββββββββββββββββ this is the id ββββββββββββββββ
Step 2 β run it (paste the id after -SessionId):
powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1" -SessionId 41c938f1-e81e-4d13-ad39-bde9636a51c0 -Apply
Plain English: "Sweep all my projects at once." Note: no-ProjectPath
here β-AllProjects
takes its place.
powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Users\Alex\Tools\claude-code-session-bridge\register_vscode_session_in_desktop.ps1" -AllProjects -Apply
powershell -NoProfile -ExecutionPolicy Bypass -File "βΉSCRIPT PATHβΊ" -ProjectPath "βΉPROJECT PATHβΊ" -Apply
ββ paste path β ββ paste path β‘
After running with -Apply, fully QUIT and RE-OPEN the desktop app. The sidebar reads index cards
only when it starts upβ new cards won't appear until you restart. (Quit properly: right-click the Claude icon in the Windows tray, bottom-right near the clock β
Quit. Just closing the window may not be enough.)
"... cannot be loaded because running scripts is disabled ..."
β You forgot the -ExecutionPolicy Bypass part. Copy the WHOLE recipe line; it's already in there.
"No cabinet drawer for: C:\...\your-folder"
β That PROJECT PATH has no Claude Code chats yet, OR the path is slightly wrong.
Fix: make sure you copied the EXACT folder you open in VS Code (Explorer β right-click top
folder β "Copy Path"). Run Recipe B (preview) first to check before using -Apply.
WROTE 41c938f1 [Jun 19] read the project_log... β a new card was written
WOULD 9f089261 [Jun 13] hey help me find... β preview only (you left off -Apply)
Result: 1 new sticky-note(s), 4 already registered (skipped).
β added this run β already had cards, left untouched
| Flag | Meaning |
|---|---|
| (none) | |
| Dry run β lists what it would do, writes nothing. | |
-Apply |
|
| Actually write the card file(s). | |
-ProjectPath "<path>" |
|
| The folder you opened in VS Code (default: current folder). | |
-SessionId <id> |
|
| Do just one chat, by its id. | |
-AllProjects |
|
Every project folder under ~/.claude/projects , not just one. |
Here's the part that surprises people: there is nothing to "sync." Your messages already live in one shared notebook. No copying, no up. The only trick is each app re-reads the notebook when you OPEN the chat β so "syncing" just means open the chat in the other app.
DESKTOP ββyou type, Claude repliesβββΊ the shared notebook grows
β
β β STOP (let the reply finish)
βΌ
VS CODE ββopen the SAME folder β /resume β pick the chatβββΊ
it re-reads the notebook β your desktop messages are right there
β
β β‘ type, Claude replies β notebook grows again, then STOP
βΌ
DESKTOP ββre-open the chat from the sidebarβββΊ
re-reads β your VS Code messages appear
π΄ THE ONE GOLDEN RULE
Only ONE app "live" on a chat at a time.
Finish your turn β STOP β switch β open/resume β continue.
Never type in both at the same second (both would scribble in the same
notebook at once and could smear a line).
When you return to an app, OPEN THE CHAT FRESH so it re-reads from disk β
don't trust a tab you left sitting open; it may still show the old page.
1. Go to: C:\Users\<you>\AppData\Roaming\Claude\claude-code-sessions\<guid>\<guid>\
2. Find: local_<that-session-id>.json
3. Delete it.
4. Restart the desktop app β the chat is gone from the sidebar.
index card. Your actual chat (the notebook .jsonl
) is never touched and stays safe.
Claude Code files each chat under a folder name made from the chat's working directory, where every character that isn't a letter or number becomes a dash -:
C:\Users\Me\Music\my project
β (every space / symbol β dash)
βΌ
c--Users-Me-Music-my-project β the "drawer" inside ~/.claude/projects\
That's why the exact folder matters: a parent folder, a subfolder, or a renamed folder becomes a different drawer β and therefore a different list of chats.
Windows only(it uses Windows paths + PowerShell). Pull requests for macOS/Linux desktop paths are very welcome.** The title is a best guessfrom the chat's first message β rename it inside the app if you like.- The card stamps default settings(model, effort, no MCP tools). When you open the chat, the notebook is the source of truth**; the card's settings are just defaults for the listing. - Tested against the Claude Code desktop app's card format as of mid-2026. If the desktop app changes that format later, the script may need a small update. Community tool, not affiliated with Anthropic.
MIT β see LICENSE. Use it, fork it, share it, ship it.