hopsesh guide · Claude Code
claude --resume says “No conversation found” after copying a session: the fix
The file isn’t where Claude Code looks, there are two copies, or it was swept. How the project folder is named, the fix for each cause, and the paths inside the file.
The two messages
No conversation found with session ID: <session-id>
No conversation found to continue
The first comes from claude --resume <id> when no saved transcript on this computer matches the id. The second comes from claude --continue, which only reopens the newest session of the current directory, when that directory has none. After the first, Claude Code exits with code 1.
Both mean the same thing from Claude Code’s side: the file isn’t where it looks. Claude Code keeps transcripts on the computer where the session ran, so a session from another computer only exists here once you’ve copied it, and then only if you copied it to the right place.
Where Claude Code looks
Each session is one file:
~/.claude/projects/<project>/<session-id>.jsonl
<project> is the working directory’s path with every character that isn’t a letter or digit replaced by -. A session started in /Users/alice/src/webapp lives in ~/.claude/projects/-Users-alice-src-webapp/. On Windows, C:\Users\alice\src\webapp becomes C--Users-alice-src-webapp under %USERPROFILE%\.claude\projects. A name over 200 characters is cut to 200 with a hash of the full path added.
claude --resume <id> searches the current project folder and its git worktrees first, then, since Claude Code 2.1.223, every other project folder on the computer. Earlier versions stop after the first step.
The causes, and the fix for each
The file is in the old computer’s project folder
You copied -Users-alice-src-webapp/ from a Mac to a Linux box where the repository is at /home/alice/src/webapp. Claude Code in that directory looks in -home-alice-src-webapp/, which is empty, so claude --continue reports No conversation found to continue.
-
On Claude Code 2.1.223 or newer,
claude --resume <id>still finds it by id in the other folder. Runclaude updateif you’re on an older version. -
Or move the file into the folder for this computer’s path:
mkdir -p ~/.claude/projects/-home-alice-src-webapp mv ~/.claude/projects/-Users-alice-src-webapp/<id>.jsonl ~/.claude/projects/-home-alice-src-webapp/ -
To see what’s there, run
claude --resumeand pressCtrl+Ato list sessions from every project on this computer.
There are two copies of the session
The cross-project search resolves an id only when exactly one other project holds a transcript for it. If you copied the session twice, into two folders or over an earlier attempt, Claude Code reports not-found rather than pick one. Find them and keep one:
find ~/.claude/projects -name '<id>.jsonl'
The file was deleted
Claude Code removes transcripts after 30 days by default (cleanupPeriodDays in settings.json). scp -p and rsync -a keep the original modification time, so an old session copied that way can be swept at the next start. Copy without them, or touch the file after copying.
It’s in another configuration folder
CLAUDE_CONFIG_DIR moves the whole ~/.claude tree. If you copied the file into ~/.claude but run Claude Code with CLAUDE_CONFIG_DIR=~/.claude-work, or the other way round, it’s in a tree Claude Code isn’t reading. This is common with two Claude accounts on one computer.
It’s a claude -p or cloud session
Sessions created with claude -p or the Agent SDK don’t appear in the picker or in --continue; resume them by id. Sessions from Claude Code on the web aren’t local files at all: --resume doesn’t list them, and claude --teleport brings them down.
The id is wrong
The id is the file name without .jsonl. For a claude -p run it is the session_id field of the --output-format json output.
Skip the folder name: resume by path
claude --resume also takes the absolute path of a transcript file and resumes the session stored there:
claude --resume ~/Downloads/<id>.jsonl
That avoids working out the project folder name. It doesn’t change what’s inside the file.
It resumes, but in the wrong place
Once Claude Code finds the session, a second problem appears. Every tool call in the transcript names absolute paths: the working directory, each file read and edited. Copied from /Users/alice/src/webapp to /home/alice/src/webapp, the session still refers to the old folder, and its first edits can aim at paths that don’t exist here.
A search-and-replace over the file mostly works, with traps: on Windows the paths are JSON-escaped (C:\\Users\\alice), a short prefix such as /home/ali also matches /home/alice2, and ids and signed thinking blocks must not change. And the code has to be there: commit and push on the old computer and pull here first, or the session talks about commits this checkout doesn’t have.
Do the whole move with hopsesh
hopsesh is a free, open-source command-line tool, terminal UI and app for macOS and Windows that moves Claude Code and Codex sessions between your computers over SSH. It handles every cause above:
hopsesh hosts allow studio # let hopsesh connect to the other computer
hopsesh plan studio:"fix flaky tests" # see the plan; changes nothing
hopsesh pull studio:"fix flaky tests" # do it, then run the printed claude --resume command
It installs the copy under the exact folder name Claude Code expects for this computer’s path, sets other copies of the same id aside, gives the file a fresh modification time, and rewrites the paths in one pass, JSON escaping and Windows separators included, without touching ids or signed thinking blocks. It finds the repository here or clones it, brings the code to the session’s commit (straight from the other computer if it was never pushed) and lists any path it couldn’t map. hopsesh undo reverses the move.
For a session already on this computer that you want in another folder, hopsesh cd <id> ~/src/webapp-2 does what Claude Code’s own /cd does, from outside the session. See Claude Code history after moving a project folder.
hopsesh is alpha software, and an independent project, not affiliated with Anthropic or OpenAI. More: move a Claude Code session to another computer.
“No conversation found”
Why does claude --resume say “No conversation found with session ID”?
No saved transcript on this computer matches the id, or more than one does. Since 2.1.223 Claude Code searches the current project, then every other project folder, but resolves an id only when exactly one holds it. A mistyped id or a transcript deleted by the 30-day cleanup gives the same message.
Which folder does a copied session go in?
In ~/.claude/projects, in the folder named after the repository’s path on this computer, with every character that is not a letter or digit replaced by a dash: /Users/alice/src/webapp becomes -Users-alice-src-webapp, and C:\Users\alice\src\webapp becomes C--Users-alice-src-webapp.
Can I resume a .jsonl file without putting it in ~/.claude/projects?
Yes. claude --resume also takes the absolute path of a transcript file and resumes the session stored there. The paths inside the file stay as they were on the computer where it ran.
Why does claude --continue say “No conversation found to continue”?
claude --continue only reopens the newest session of the current directory. A session copied into the folder named after the old computer’s path isn’t there. Resume it by id, or press Ctrl+A in the claude --resume picker to see every project.
Why did my copied session disappear after a day?
Claude Code deletes transcripts older than cleanupPeriodDays, 30 by default, when it starts. scp -p and rsync -a keep the original modification time, so an old session copied that way can be swept at once. Copy without them, or touch the file afterwards.
Use the method
Try it with hopsesh
Open-source CLI and desktop app: move a Claude Code or Codex session to another computer, into the other agent, or to the cloud, with undo built in.
See everything hopsesh does →brew install roeehrl/tap/hopsesh Without Homebrew: curl -fsSL https://raw.githubusercontent.com/roeehrl/hopsesh/main/scripts/install.sh | sh, which checks the download against the release’s checksums and signature.irm https://raw.githubusercontent.com/roeehrl/hopsesh/main/scripts/install.ps1 | iex Same checks as the macOS and Linux script. The Windows app installs this command as well.More ways to install
- Installer for Arm64 Windows 10 or 11 on Arm
- Portable .zip x64 or Arm64, no install, on the release page
- Command line with Scoop from the roeehrl bucket, without the app
scoop bucket add roeehrl https://github.com/roeehrl/scoop-bucket; scoop install hopsesh - Command line only in PowerShell, without the app
irm https://raw.githubusercontent.com/roeehrl/hopsesh/main/scripts/install.ps1 | iex