loil — life of ideas, light
Claude Code deletes its transcripts after about thirty days. loil keeps them, and
everything around them that you would need later to see how an idea evolved, in a private
store on your disk. It does nothing else.
Everything stays on your machine. loil never uploads, syncs or sends anything anywhere.
It has no network code, no account, no telemetry and no cloud. The store is a folder on
your own disk (~/.loil, readable only by you), and the only things that leave it are the
ones you move yourself.
What it keeps
For every Claude Code session of a repo you loil init:
| in the store | what |
|---|---|
payloads/*.json |
the raw hook payloads (start, end, every compaction) |
transcript.jsonl.gz |
the conversation, byte for byte |
subagents/, tool-results/, … |
everything in the session's own Claude directory |
plans/<sha>.md |
every plan file the session named, every version |
file-history/*.gz |
Claude's copies of every file version it edited in the session |
git/start.json, git/end.json, git/diff-end.patch.gz |
HEAD, branch, status and the uncommitted diff |
claude-project-entry.json |
the project's entry in ~/.claude.json (cost, tokens, model) |
And per project: snapshots of Claude's project memory and of the repo's agent configuration
(CLAUDE.md, .claude/…) whenever they change, your prompt history for the project with the
pasted text it references, and Claude's own sessions-index.json.
Everything is plain files: JSON, JSONL, gzip. gunzip -c gives you the original. Each file is
recorded with its size and sha256, and loil verify checks them all.
Use
uv tool install loi-light # or: pipx install loi-light
cd ~/your/repo
loil init # hooks into .claude/settings.local.json; imports the sessions Claude still holds
loil ls # the sessions recorded for this repo
loil verify # re-hash every stored file
loil capture --backfill # import again (e.g. after sessions ran on another machine)
The store is ~/.loil (dirs 0700, files 0600). Set LOIL_HOME or loil init --home PATH
to keep it elsewhere. Nothing large or sensitive goes inside the repo: it gets
.loil/config.toml (commit it; it is the project's id) and two gitignored per-user files.
The store may hold what Claude's own files hold, including MCP environment values from
.claude/settings*.json. Nothing in it is ever transmitted: it stays local unless you
copy it somewhere yourself. If you point LOIL_HOME at a synced folder (iCloud, Dropbox),
that sync is yours, not loil's.
Status
Pre-alpha. Hooks, capture, backfill, ls and verify work for Claude Code. Not yet:
importing sessions from a loi store, a periodic capture to bound loss on a crash, Codex.
License
Apache-2.0
Metadata
Release files for loi-light 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| loi_light-0.1.0.tar.gz | 46.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| loi_light-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 107.1 kB
Release files / loi_light-0.1.0.tar.gz
| Download URL | loi_light-0.1.0.tar.gz |
|---|---|
| Size | 46.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
68aa02044d1a2e2334f1e4beed6fc7290aac172ccc338f2477ced72fe3839daa
|
|
BLAKE2b-256 checksum How to use checksums |
9af11256428fcfdeec55bbba2acec9144f2ae3c1c9f2094bcd898016de3898d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / loi_light-0.1.0-py3-none-any.whl
| Download URL | loi_light-0.1.0-py3-none-any.whl |
|---|---|
| Size | 60.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22f31a925b916ff74ab38afd5e847520ae630509cabb07ac71223ba7532158cf
|
|
BLAKE2b-256 checksum How to use checksums |
9b35af1e67453a8e1ec099fb7100a5dd9a905c7ee2ed0aebf2365d4b3792583e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|