Codonic

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. Run claude update if 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 --resume and press Ctrl+A to 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 →
Install the CLI Terminal macOS and Linux · Command line and terminal UI 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.
Install the CLI Terminal Windows, in PowerShell · Command line and terminal UI 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.
hopsesh for Mac .dmg macOS app · macOS 13 or later · Apple silicon and Intel Download Signed and notarized by BlueGuru LLC. Updates itself from Settings → Updates.
hopsesh for Windows .exe Windows app · Windows 10 or 11 · x64 Download Not code-signed yet: at SmartScreen, click More info, then Run anyway. Smart App Control, if on, blocks it.
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
Linux packages and all files GitHub Latest release · .deb, .rpm and .apk for amd64 and arm64, a portable Windows app .zip, plus archives Open on GitHub Release notes, checksums and every build of the current version. Source on GitHub GitHub Apache-2.0 · Go 1.26 or later to build Open on GitHub From source: go install github.com/roeehrl/hopsesh/cmd/hopsesh@latest