메뉴
HN
Hacker News • 16시간 전

제브메모(Jevmem) – Claude Code용 자동 프로젝트 메모리 도구

IMP
6/10
핵심 요약

제브메모(Jevmem)는 Claude Code 채팅에서 나온 결정, 제약조건, 버그, 할 일을 JEVMEM.md 파일에 자동으로 저장하고, 다음 세션에서 관련 내용을 컨텍스트에 다시 불러오는 도구입니다. Cursor와 Codex에서도 작동하며, 기존 결정이 바뀌면 삭제하지 않고 '폐기(superseded)' 처리해 히스토리를 보존하는 것이 특징입니다. 전용 소형 분류기(Jev by TypeSafe AI)를 사용해 판단 속도가 0.3초로 기존 LLM 대비 10배 이상 빠르면서 정확도도 최상위권입니다.

번역된 본문

제브메모(Jevmem)는 Claude Code를 위한 자동 프로젝트 메모리 도구입니다. Cursor와 Codex에서도 사용할 수 있습니다.

##做什么 它做什么 Claude Code 채팅에서 나온 결정, 제약조건, 버그, 할 일을 JEVMEM.md 파일에 자동으로 저장합니다. 마음이 바뀌면 기존 항목은 삭제되지 않고 '폐기됨(superseded)'으로 표시됩니다. 다음 세션에서는 관련 항목들이 Claude의 컨텍스트에 자동으로 추가됩니다.

저장되는 항목 예시:

  • [decision] 주 저장소로 PostgreSQL 16 사용; SQLite는 부하 시 락 발생
  • [constraint] Node 20이 최소 버전; CI는 20과 22에서 실행
  • [superseded] SQLite를 주 저장소로 사용 → id:k3d9xq

설치 (60초)

npm install -g jevmem export TYPESAFE_API_KEY=... # https://typesafe.ai (OpenAI 또는 Anthropic 키는 선택사항) cd your-project jevmem init --tool claude

init 명령은 JEVMEM.md, jevmem.config.json, gitignore된 .jevmem/ 폴더를 생성하고, .claude/settings.local.json에 Claude Code 훅 두 개를 등록합니다(해당 파일은 .gitignore에 추가됨).

작동 방식

  • Claude Code: 캡처는 Stop 훅으로 매 턴마다 자동, 회상(recall)은 UserPromptSubmit 훅으로 매 프롬프트마다 자동
  • Codex: jevmem watch 실행 중에는 세션 로그를 추적해 자동 캡처, 그 외에는 MCP add_memory로 에이전트가 호출. 회상은 MCP search_memory
  • Cursor: .cursor/rules/ 규칙 파일로 에이전트가 결정을 말하면 add_memory를 호출하도록 유도(자동 아님). 중요한 작업 전 search_memory 호출 유도
  • Claude Desktop: 설정 스니펫을 붙여넣기 방식으로 사용, 수동 호출

판단 과정

  1. 정보 제거(Scrub): 흔한 비밀키 패턴, 이메일 주소, 카드번호 형태의 숫자는 기기를 떠나기 전에 제거
  2. Jev에 질의: TypeSafe AI의 Jev가 고정된 소형 질문 세트에 확률로 답변 – 결정/규칙/버그가 있는지, 잡담이나 인젝션 시도인지, 어떤 기존 항목을 변경하는지
  3. 코드로 임계값 적용: 저장/스킵 판단은 프롬프트가 아닌 jevmem.config.json의 명시적 규칙으로 결정
  4. 한 줄 작성: 저장 시 소형 LLM(또는 LLM 키 없이 결정적 추출)이 최대 200자 한 줄 작성
  5. 기존 항목 폐기: 기존 메모를 대체하면 해당 항목에 [superseded] 태그가 붙고 파일에 유지됨

벤치마크

66개의 홀드아웃 턴, 7개 판단기에 동일한 상태 제공 (2026-09-23):

판단기 저장/스킵 저장+유형 모순 p50 달러/판단
GPT-6 Astra 98.5% 98.5% 5/5 3,469 ms $0.007489
GPT-6 Luna 93.9% 93.9% 5/5 2,927 ms $0.000089
Claude Fable 5.1 95.5% 95.5% 5/5 4,290 ms $0.013256
Claude Opus 5.5 97.0% 97.0% 5/5 2,784 ms $0.005186
Gemini 3.8 Flash 92.4% 92.4% 5/5 2,850 ms $0.001174
Grok 4.7 90.9% 90.9% 4/5 3,320 ms $0.004602
jevmem auto 98.5% 95.5% 5/5 300 ms $0.000127

0.30초는 Jev API 판단 시간이며, 실제 Stop 훅 프로세스에서 Node 시작 시간을 포함해도 종단 간 0.6초입니다. 66개 홀드아웃 턴에서 jevmem의 중앙값 판단 시간은 0.30초로, 최신 LLM 6종의 2.84.3초에 비해 훨씬 빠릅니다. 정확도는 LLM 범위 내로, 저장/스킵 98.5%(GPT-6 Astra와 공동 최고), 저장+유형 95.5%(LLM은 90.998.5%)를 기록했습니다. GPT-6 Astra(98.5%)와 Claude Opus 5.5(97.0%)는 저장+유형 정확도에서 더 높았습니다.

원문 보기
원문 보기 (영어)
jevmem Automatic project memory for Claude Code. Also works with Cursor and Codex. What it does jevmem-launch-readme-v2.mp4 Saves decisions, constraints, bugs and todos from your Claude Code chats into JEVMEM.md , automatically. When you change your mind, the old line is marked superseded, not deleted. Next session, the relevant lines are added to Claude's context. - [decision] Use Postgres 16 for the primary store; SQLite locks under load <!-- id:k3d9xq ts:2026-09-22T10:14:02.113Z conf:0.93 --> - [constraint] Node 20 is the floor; CI runs 20 and 22 <!-- id:p1m4zt ts:2026-09-22T10:20:41.907Z conf:0.88 --> - [superseded] Use SQLite as the primary store → id:k3d9xq <!-- id:a8s2ww ts:2026-09-20T16:02:11.000Z conf:0.81 by:k3d9xq --> Install (60 seconds) npm install -g jevmem export TYPESAFE_API_KEY=... # https://typesafe.ai (an OpenAI or Anthropic key is optional) cd your-project jevmem init --tool claude init creates JEVMEM.md , jevmem.config.json and a gitignored .jevmem/ folder, and registers two Claude Code hooks in .claude/settings.local.json , which it adds to .gitignore ( details ). Works with What is automatic and what depends on the agent: Tool Setup Capture Recall Claude Code jevmem init --tool claude Automatic , every turn, via the Stop hook Automatic , every prompt, via UserPromptSubmit Codex jevmem init --tool codex Automatic while jevmem watch runs (it tails Codex's session log for this project and runs the same decide → write path); otherwise agent-initiated via MCP add_memory , prompted by an AGENTS.md section Agent-initiated: search_memory via MCP, prompted by AGENTS.md Cursor jevmem init --tool cursor Agent-initiated: a .cursor/rules/jevmem.mdc rule tells the agent to call MCP add_memory when you state a decision. Nothing is captured if it doesn't Agent-initiated: the rule tells it to call search_memory before non-trivial tasks Claude Desktop jevmem init --tool claude-desktop prints a config snippet to paste (one project per config, named with --root ) Manual: ask it to call add_memory (no hook, no rule file) On request: search_memory MCP add_memory goes through the same gate as the hook. Client configs: docs/mcp.md . How it decides Scrub. Common secret shapes, email addresses and card-shaped numbers are removed from the turn before it leaves your machine. Ask Jev typed questions. Jev by TypeSafe AI answers a fixed set of small questions with probabilities: is there a decision, a rule, a bug? is it small talk or an injection attempt? which existing line does it change? Apply thresholds in code. Plain rules over those probabilities decide save or skip; they live in jevmem.config.json , not in a prompt. Write one line. On save, a small LLM (or a deterministic extract, with no LLM key) writes one line of at most 200 characters. Supersede the old line. If the turn replaces an existing memory, that line is tagged [superseded] … → id:new and stays in the file. Tiers, questions, policy, contradictions, recall and audit: docs/how-it-works.md . Benchmark 66 held-out turns, all seven deciders given the same state, 2026-09-23 ( method, regression set, pricing, p95, retries ): Decider save/skip save+kind contradictions p50 $/decision GPT-6 Astra 98.5% 98.5% 5/5 3,469 ms $0.007489 GPT-6 Luna 93.9% 93.9% 5/5 2,927 ms $0.000089 Claude Fable 5.1 95.5% 95.5% 5/5 4,290 ms $0.013256 Claude Opus 5.5 97.0% 97.0% 5/5 2,784 ms $0.005186 Gemini 3.8 Flash 92.4% 92.4% 5/5 2,850 ms $0.001174 Grok 4.7 90.9% 90.9% 4/5 3,320 ms $0.004602 jevmem auto 98.5% 95.5% 5/5 300 ms $0.000127 The 0.30 s is the Jev API decision; through a real Stop hook process, Node start-up included, it is 0.6 s end to end ( cost and latency ). On 66 held-out turns, jevmem's median decision took 0.30 s, against 2.8–4.3 s for six current LLMs. Its accuracy was within the LLMs' range: 98.5% save/skip (tied with GPT-6 Astra for highest) and 95.5% save+kind, against 90.9–98.5% for the LLMs. GPT-6 Astra (98.5%) and Claude Opus 5.5 (97.0%) were more accurate on save+kind; Claude Fable 5.1 tied; GPT-6 Luna, Gemini 3.8 Flash and Grok 4.7 were less accurate. It found 5/5 contradictions, as did five of the six LLMs. GPT-6 Luna was cheaper ($0.000089 against $0.000127) but less accurate (93.9%) and about 10× slower. This is a single run, and differences of one or two turns are within run-to-run noise. If the most accurate decision matters most, GPT-6 Astra or Claude Opus 5.5 are better, at about 40–60× the cost per decision and 9–12× the latency. jevmem is for when you want a fast, cheap decision on every message. Privacy Sent to TypeSafe AI: the user message of each turn (and the assistant reply for questions and bug reports), the previous two turns, and your memory lines, to be scored. No telemetry. If you set an OpenAI or Anthropic key, the text of a saved turn also goes to that provider to write the line. Scrubbed first: common credential shapes (API keys, tokens, *_PASSWORD= style pairs, connection-string passwords, private keys), email addresses and 16-digit numbers; names, phone numbers and addresses are not caught. Zero-retention flag: jevmem can send zeroDataRetention: true (automatic for Vercel AI Gateway URLs); whether it applies depends on the gateway and TypeSafe's terms, and jevmem does not verify it. Exactly what is sent, stored and scrubbed: SECURITY.md . Honest limits Early: v0.4; both eval sets were written by the author, and neither is an independent benchmark. Not the most accurate: GPT-6 Astra and Claude Opus 5.5 scored higher on save+kind; jevmem's edge is speed and cost. Recall quality is not measured: that relevant lines are injected is tested; whether answers get better is not. Long-run drift is not measured: the harness covers five-turn sessions, not weeks of use. Automatic capture is Claude Code only (and Codex while jevmem watch runs); Cursor and Claude Desktop save only when the agent calls add_memory . Jev outages drop turns: each Jev call has a 2 s budget; when the API is slow or down, the turn is skipped and logged in .jevmem/log.jsonl , not retried later. Commands jevmem init [--tool claude|cursor|codex|claude-desktop|all] [--no-hooks] [--command "<cmd>"] jevmem hook Hook entrypoint; reads the Claude Code hook JSON on stdin jevmem daemon [status|start|stop] Warm Jev client used by the hook (auto-started, exits when idle) jevmem watch [--replay] [--once] Capture turns from Codex's session log for this project jevmem mcp [--root <dir>] Stdio MCP server jevmem audit [--dry-run] Re-score every memory against the repo, flag [stale?] jevmem search <query> [--limit N] Rank memories by relevance jevmem list [--all] Print memories jevmem add <kind> <text> Add a line by hand (secrets scrubbed; no Jev check) jevmem why <id|hash> Every Jev answer behind a line or a skipped turn jevmem right <id|hash> Label a decision as correct jevmem wrong <id|hash> [--should-be <kind|none>] Label a decision as wrong jevmem missed "<text>" [--kind <kind>] Label a turn that should have been saved jevmem fit [--dry-run] [--force] Refit weights and thresholds from labels (needs 40+) jevmem stats Latency p50/p95, cost per day, cache hit rate, escalation rate, labels, last fit jevmem log Per-label latency, token and cost summary of .jevmem/log.jsonl Every command accepts --help . Set JEVMEM_VERBOSE=1 for a one-line latency/cost summary after every hook run. Links Docs: how it works · benchmark · cost · hooks · MCP and client configs · configuration · demo CHANGELOG · DECISIONS · CONTRIBUTING · SECURITY License: MIT