jevmem
Avinash-jetwani · Avinash-jetwani/jevmem
Plugin này giúp các tác nhân Claude Code và Codex ghi nhớ các quyết định, quy tắc và cách tiếp cận đã thực hiện qua các phiên bằng cách lưu chúng vào tệp JEVMEM.md trong kho lưu trữ của bạn.
jevmem lưu các quyết định, quy tắc và phương pháp thất bại từ các cuộc trò chuyện Claude Code của bạn vào JEVMEM.md trong repo, và đưa những thông tin liên quan trở lại trong phiên làm việc tiếp theo.
Xem trước
Bạn có thể làm gì với nó
- Đảm bảo các thực hành mã hóa và quyết định kiến trúc nhất quán trên nhiều phiên tác nhân.
- Ghi lại các cách tiếp cận thất bại và lỗi để tác nhân không lặp lại sai lầm cũ.
- Duy trì tài liệu sống về các ràng buộc và yêu cầu dự án trong kho lưu trữ.
Kiểm tra an toàn
Không thấy dấu hiệu rủi ro trong các file đã quét.
Quét tự động các file trong repo. Luôn xem lại code trước khi chạy.
Trích từ README
Say it once. jevmem saves the decisions, rules and failed approaches from your Claude Code chats to JEVMEM.md in your repo, and brings the relevant ones back next session. Before Claude runs a command or edits a file, it checks the call against your saved rules. It is open source (MIT), built on TypeSafe AI's Jev, in Anthropic's Claude plugin directory and on the MCP Registry, and works with Cursor and Codex over MCP.
In Anthropic's Claude plugin directory · On the MCP Registry · Open source, MIT
The docs site, one page per question: avinash-jetwani.github.io/jevmem
https://github.com/user-attachments/assets/65e48f03-8e1c-49d9-baad-6f217911e861
Why
Each Claude Code session starts with a fresh context, so what you decided last week lives in last week's chat.
A CLAUDE.md file helps if you keep it up to date. jevmem keeps a file like it up to date for you, as you work.
How it works
- You decide something in a chat: "We use Postgres."
- jevmem asks Jev by TypeSafe AI, a model that answers yes/no questions with probabilities, whether it's worth keeping.
- If it is, jevmem writes one line to
JEVMEM.mdin your repo. - Next session, the lines that matter for your prompt go back to Claude.
Change your mind, and the old line is crossed out: kept for history, not sent to Claude. Your team gets the same file through git.
jevmem keeps decisions, rules, bugs, to-dos and dead ends (an approach that was tried and failed, with the reason).
- [superseded] We'll use SQLite as the primary store for now. → id:cuasaq
- [decision] Switch the primary store to Postgres 16.
- [constraint] Node 20 is the minimum supported version, and CI runs Node 20 and 22.
About these lines
Each line also carries a comment with its id, time and confidence, left out above. The full lines:
- [superseded] We'll use SQLite as the primary store for now. → id:cuasaq
- [decision] Switch the primary store to Postgres 16.
- [constraint] Node 20 is the minimum supported version, and CI runs Node 20 and 22.
Real lines from 0.5.7's default writer, which 0.5.8 to 0.5.10 did not change (the run, 2026-09-26). It kept one sentence of each turn: the Postgres turn also said "SQLite locks up under concurrent writes", and that reason was left out. Since 0.6.0 the line is made from the sentences Jev picks, the one that states the memory and the one that gives its reason (What's new). With writer set, an OpenAI or Anthropic model condenses the whole turn instead.
Does it work?
| No project memory | jevmem | Same lines in CLAUDE.md | |
|---|---|---|---|
| Followed the project's decision | 28 of 72 | 66 of 72 | 67 of 72 |
| Tried a change the project forbids | 10 of 18 | 0 of 18 | — |
| Repeated an approach that had already failed | 3 of 15 | 0 of 15 | 0 of 15 |
So jevmem does about as well as a hand-written CLAUDE.md, without you writing it.
CLAUDE.md did better on a convention nothing in the prompt points at (3 of 3 against 0 of 3), so rules every task must follow still belong there.
Method, dates and builds: What's new.
The guard (new in 0.6)
Before Claude runs a command or edits a file, jevmem checks it against your saved rules. If one might break, Claude Code asks you first:
jevmem: this may break a saved rule: "Never commit .env files" (JEVMEM.md)
On a held-out test of 274 tool calls, it caught 66 of 68 rule breaks, with 3–4 false asks in 206 fine calls. It's a backstop, not a sandbox: it looks at the words a rule and a call share. How the guard works.
Install
You need a TypeSafe API key and Claude Code 2.1.273 or later.
- In the Claude app: Plugins → Discover → jevmem → Add.
- Install the CLI the plugin runs:
npm install -g jevmem - Save your key (paste it when asked; it isn't shown):
jevmem key - In your project's folder, turn jevmem on:
jevmem enable
Start Claude Code in that project. jevmem doctor checks the setup.
Other ways to install: the jevmem marketplace, npm, Cursor, Codex
From the jevmem marketplace:
npm install -g jevmem
claude plugin marketplace add Avinash-jetwani/jevmem
claude plugin install jevmem@jevmem
cd your-project && jevmem enable
With npm only (also sets up Cursor and Codex):
npm install -g jevmem
cd your-project
jevmem init --tool claude # or cursor, codex, claude-desktop, all
Already have a CLAUDE.md? jevmem import shows what it would add from it; --apply writes it.
Every step, and what to do if the plugin can't find the CLI: docs/install.md.
Works with
| Saving | Bringing it back | |
|---|---|---|
| Claude Code | Automatic, every turn | Automatic, every prompt |
| Codex | Automatic while jevmem watch runs | When the agent asks, over MCP |
| Cursor | When the agent calls it, over MCP | When the agent asks, over MCP |
| Claude Desktop | When you ask it to, over MCP | When you ask it to, over MCP |
The MCP server is on the MCP Registry as io.github.Avinash-jetwani/jevmem. Client setup: docs/mcp.md · docs/install.md.
Fast and cheap
Deciding what to save takes 0.28 s and costs $0.00016 per message, in the background: Claude doesn't wait for it. jevmem tied the best LLM on save or skip (98.5%); two LLMs were better at picking the kind of line.
The full benchmark: accuracy, cost and how it was run
66 held-out turns, all seven deciders given the same state ([method, regression set, pricing, p95, retries](docs/bench