Windows and WSL together
Besides the main directory the api reads a second one — the one "from the other side": started in WSL it sees the Windows profile, started in Windows it sees the WSL profile. It is mounted read-only.
This is something none of the neighbours can do, and it puts an end to the eternal "where did that session go".
How to switch it on
In docker:
./scripts/detect-claude-homes.sh --write # finds the path and writes EXTRA_CLAUDE_HOME into .env
docker compose up -d apiThe app has nothing to mount — it looks for the other side by itself (\wsl.localhost\<distro> or /mnt/<drive>/Users/<someone>). It is switched off with CLAUDER_COMPANION_HOMES=0.
Several sources at once are set through CLAUDE_DATA_DIRS:
CLAUDE_DATA_DIRS=windows=/data/claude-windows,wsl=/data/claude-wslHow it looks
Projects from an extra source get a prefix in their id (windows~C--Users-varyen), while the main source's ids stay as they were — old links don't break.
A directory that arrived through two different mounts is dropped by inode: there will be no duplicates. And one and the same folder worked in from both sides is shown as a single entry with a shared chat list.
Continuing such a session
An agent from the container can't: the transcript is mounted read-only, and a C:\… directory doesn't exist in Linux at all.
So the reply is run by that side: claude.exe --resume is started through an ssh bridge into WSL, and the reply arrives through the usual transcript polling.
What doesn't fully work along this path:
- images travel as files through an exchange directory;
- the model's questions are not supported.
If the bridge isn't set up, the "Continue in chat" item is simply unavailable for such a session. Setting up the bridge is described in scripts/host-bridge/README.md in the repository.