Your coding agent forgets what it just figured out. Attic writes it down, so tomorrow it already knows.
A plugin for Claude Code and Codex CLI.
You ask your agent to investigate something. It reads ten files, traces the
flow, works out the answer. Then the context fills up, /compact runs, and
that understanding is gone. Tomorrow it reads the same ten files again.
Attic writes what the agent learns to a .attic/ folder in your project, and
keeps a one-line index in the conversation:
you: why are users logged out at random?
claude: attic:redis-eviction-bug · maxmemory-policy is allkeys-lru,
so session keys get evicted. Fix is volatile-lru.
The detail lives in .attic/items/redis-eviction-bug.md. The chat holds a
handle. After a compaction, a new session, or a week away, the finding is
still there.
Claude Code
claude plugin marketplace add NishikantaRay/Attic
claude plugin install attic@attic
Codex CLI
codex plugin marketplace add NishikantaRay/Attic
codex plugin add attic@atticOn Codex, run /hooks once in an interactive session and trust the attic
hooks — Codex will not run a hook it has not reviewed. Skills work without
this; only the automatic loading needs it. More on
Codex.
Check it is on:
/attic-help
If a reference card prints, you are set. Then just work normally. After the
agent investigates something, look for a handle like attic:some-finding in
its reply, and run ls .attic/items/ to see what it kept.
To see the difference for yourself:
sh scripts/try-attic.shThat builds a throwaway project with one real bug, asks the same question twice — once with the finding stashed, once without — and prints both answers with their token counts. Nothing outside a temp folder is touched.
| Command | What it does |
|---|---|
/attic-stash |
Keep this finding |
/attic-recall <topic> |
What did we learn about X? |
/attic-index |
Show everything kept in this project |
/attic-sweep |
Save the session before /compact |
Four more exist for pinning, pruning, health checks and git setup. Full list with every flag: docs/COMMANDS.md.
/attic off turns it off. /attic turns it back on.
| Level | Behaviour |
|---|---|
lite |
Only keeps things when you ask |
full |
Keeps findings after each investigation. Default |
ultra |
Keeps everything non-trivial, replies get very short |
off |
Dormant |
Start with full. If it feels chatty, drop to lite.
.attic/
INDEX.md one line per finding
DECISIONS.md what was decided, and why
items/*.md the findings themselves
Plain Markdown you can read and edit. Commit it and your team shares the
knowledge; add it to .gitignore and it stays personal.
If you commit it, run /attic-git once. INDEX.md is append-only, so two
branches both adding a finding will conflict every time; that command installs
a merge driver that keeps both sides. Team setup.
The index is injected into every session, so it cannot grow forever. Pinned items always survive, newest fill the remaining room, and older ones collapse to a single line you can still search. Your newest finding is never the one that disappears.
Sometimes. Here is the evidence, including where it does not.
The real test: three sessions on a private monorepo with auth spread across a server, three clients and an Electron process. Investigate the auth flow; then, in a fresh session told nothing about the first, add account lockout; then, in another fresh session, add password change.
| No Attic | Attic | ||
|---|---|---|---|
| Input tokens | 5,935,224 | 3,938,927 | −34% |
| Cost | $6.35 | $5.02 | −21% |
| Correctness | 13/13 | 13/13 | tie |
The shape matters more than the total. Session 1 is a wash (−6%), session 2 saves 36%, session 3 saves 43%. The benefit compounds as sessions accumulate.
Both arms were correct, so this did not make the agent smarter. It made the same quality cheaper.
Where it costs you. On a short session, or a question you never ask
twice, the index is overhead you pay for nothing — measured at +2.5% on one
benchmark case. That is why off exists. No headline percentage is quoted
because agent sessions are not reproducible enough to support one:
the full accounting.
Method, prompts and raw results: benchmarks/auth-investigation/.
The answer is often in a tab: an MDN page, an issue thread, a changelog. The browser extension puts it in the same attic your agent writes to. It works on Chrome, Brave, Edge and other Chromium browsers.
Select the part that matters, right-click, done. No form, no filename, no tab switch — and next session your agent answers from it without reading a file.
Clicking the toolbar icon opens a library over your .attic/: items rendered
as markdown, [[slug]] links between them with backlinks, full-body search,
⌘K to jump anywhere, and editing in place.
npm run attic:serve -- --root /path/to/project
Then load extension/ unpacked at chrome://extensions (or
brave://extensions) and press Connect. On Brave, allow localhost access in
Shields — it blocks extension pages from reaching 127.0.0.1, which looks
exactly like a companion that is not running.
It is not on the Chrome Web Store: it writes to your filesystem through a companion you start yourself, which is not something a store install can offer.
Setup, security model and endpoints.
No telemetry. No API keys. Nothing leaves your machine. Everything stays in your project folder. The script refuses to write anything that looks like a credential. Security notes.
The plugin itself makes no network calls at all. The optional browser
extension talks to a companion on 127.0.0.1 that you start yourself — bound
to loopback, token-authenticated, and limited to the project roots you name.
Why your AI keeps forgetting · The answer was in a tab · Measuring agent memory · Quickstart · All commands · Codex setup · Browser extension · Team setup · How it is built · Contributing · Changelog
claude plugin uninstall attic@attic # Claude Code
codex plugin remove attic # Codex CLI
Your .attic/ folders stay where they are. Delete them if you want.
MIT