40 lines
1.1 KiB
Markdown
40 lines
1.1 KiB
Markdown
# Session history
|
|
|
|
**Status:** Implemented · **Code:** `Scripts/sessions-store.js`
|
|
|
|
`Resume Session…` lists this project's previous Claude Code sessions — including
|
|
ones started in a terminal — without shelling out to the interactive picker.
|
|
|
|
## Where Claude Code stores sessions
|
|
|
|
```
|
|
~/.claude/projects/<slug>/<session-id>.jsonl
|
|
```
|
|
|
|
The slug is the project path with `/` and `.` flattened to `-`:
|
|
|
|
```
|
|
/Users/me/Developer/git.example.ca/thing.novaextension
|
|
→ -Users-me-Developer-git-example-ca-thing-novaextension
|
|
```
|
|
|
|
`projectSlug()` implements exactly that substitution. Files are sorted by mtime,
|
|
newest first.
|
|
|
|
## Labels
|
|
|
|
`firstPrompt()` reads up to 40 lines of a transcript looking for the first
|
|
non-meta, non-synthetic `user` message and uses it as the picker label, falling
|
|
back to the short session id.
|
|
|
|
## Resuming
|
|
|
|
`--resume <id>` replaces `--session-id`. The session model is reset and rebuilt
|
|
from the resumed session's messages as they stream in.
|
|
|
|
## Gotchas
|
|
|
|
- Transcripts can be megabytes; `firstPrompt()` uses `readline()` and stops
|
|
early rather than reading whole files.
|
|
- Zero-byte and non-`.jsonl` entries are skipped.
|