{"slug": "show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram", "title": "Show HN: My AI keeps getting smarter. I don't. So I built Engram", "summary": "Developer nagisanzenin released Engram v1.0.8, a learning system for humans that turns AI coding assistants into tutors, examiners, and spaced-repetition schedulers across six agentic platforms including Claude Code, OpenAI Codex, OpenCode, Hermes Agent, Google Antigravity, and OpenClaw. Engram requires no configuration or account and stores state in local JSON files, using commands like /learn, /review, and /coach to make users actively recall concepts rather than passively consume explanations.", "body_md": "The mix-up worth clearing first: Engram is not an agent-memory plugin.It doesn't give your agent persistent memory, context, or knowledge of your codebase — memory MCPs and context tools do that,for the agent. Engram points the other way:it's a learning system for the human.Your agent becomes a tutor that makes you do the thinking, a blind examiner that checks you actually got it, and a scheduler that brings each idea back right before your brain drops it. The agent doesn't get smarter.You do — measurably, with receipts.\n\nBorn as a Claude Code plugin; the same skills and engine now run on six agentic platforms — including, as of v1.0.8, one that puts the tutor in your chat app:\n\n```\nclaude plugin marketplace add nagisanzenin/engram\nclaude plugin install engram@engram\n```\n\n| Platform | Install | Then |\n|---|---|---|\nClaude Code (born here) |\nthe two commands above | `/learn` `/review` `/coach` |\nOpenAI Codex |\n`codex plugin marketplace add nagisanzenin/engram` then `codex plugin add engram@engram` →\n|\n`$learn` `$review` `$coach` |\nOpenCode |\n`\"plugin\": [\"opencode-engram-learning\"]` in `opencode.json` (\n|\n`/learn` `/review` `/coach` |\nHermes Agent |\nclone + `skills.external_dirs` →\n|\n`/skill learn` (or `/study` ) `/review` `/coach` |\nGoogle Antigravity |\n`agy plugin install https://github.com/nagisanzenin/engram` |\n`/learn` `/review` `/coach` |\nOpenClaw |\n`openclaw plugins install engram --marketplace nagisanzenin/engram` →\n|\n`/learn` `/review` `/coach` |\n\nOpenCode: opencode.json is read globally (~/.config/opencode/opencode.json) or per-project; pin to source instead of npm with \"plugin\": [\"git+https://github.com/nagisanzenin/engram.git\"].\n\nAntigravity: The due-review session nudge isn't ported yet, and the\n\n`architect`\n\nand `smith`\n\nsubagents are currently dropped by AG 1.1.4's strict installer. Everything else works the same.OpenClaw: the nudge needs\n\n`openclaw config set hooks.internal.enabled true`\n\n(OpenClaw ignores plugin hooks until internal hooks are switched on), and it fires on `/new`\n\nand `/reset`\n\nrather than every session. Engram's agents aren't registered — the skills spawn them through `sessions_spawn`\n\nwith isolated context instead, which keeps the assessor blind. Details in [INSTALL-OPENCLAW.md](/nagisanzenin/engram/blob/main/INSTALL-OPENCLAW.md).Then, inside your coding assistant (command spelling per your platform's row above):\n\n```\n/learn kalman filters        ← or music theory, or Rust lifetimes, or anything\n```\n\nThat's the whole onboarding. No config, no account, no cards to write. Requires `python3`\n\n(stock macOS/Linux one is fine — stdlib only). One state folder, every platform: learn in one tool, review in another, same schedule.\n\nYou already ask Claude to explain things. It explains beautifully. You nod, you feel smart, and **ten days later it's gone** — because a chat has no memory of you, no test of whether you really got it, and no plan for the forgetting that starts the moment you close the terminal.\n\nEngram is what's missing around the explanation: **a tutor that makes you do the thinking, an examiner that checks you actually got it, and a scheduler that brings each idea back right before your brain drops it.**\n\nEngram is |\nEngram is not |\n|---|---|\na learning system for the human — you end up knowing things |\nagent memory — tools that persist what the agent knows (different job entirely) |\na tutor that makes you produce answers before it explains |\na chatbot that explains while you nod along |\n| a memory system — every concept gets a future review date | notes and summaries you'll never reopen |\n| an independent examiner that grades you blind, in writing | self-assessed \"yeah, makes sense\" |\n| plain JSON files on your machine | a cloud service, account, or subscription |\n\n**Concretely, installing it gives you:** three commands (`/learn`\n\n, `/review`\n\n, `/coach`\n\n— exact spelling per platform in the table above), a quiet session nudge that tells you when reviews are due (and says nothing otherwise — on every platform except Antigravity, whose hook port is pending; on OpenClaw it needs one config flag and fires on `/new`\n\n), and a state folder at `~/.claude/learning/`\n\nthat you own, can read, and share across every platform you use.\n\n```\n recall\n 100% ─┐ just reading                100% ─┐ with engram\n       │\\                                  │\\      ●╌╌╌●╌╌╌╌╌●╌╌╌╌╌╌╌●╌╌\n       │ \\                                 │ \\    ╱    ╲╱      ╲╱\n       │  \\__                              │  ●──╱\n       │     \\____                         │\n       │          \\_______                 │   each ● = a 2–4 minute /review,\n   0% ─┴──────────────────── day 30    0% ─┴─  booked just before you'd forget\nYOU ──→  /learn transformers\n            │\n            ▼\n  ┌────────────────────────────────────────────────────────────────┐\n  │  CURRICULUM ARCHITECT                                          │\n  │  breaks the topic into a first-principles concept map:         │\n  │  \"what must be understood before what\" — never chapter order.  │\n  │  flags the few THRESHOLD concepts † that unlock everything.    │\n  └────────────────────────────────────────────────────────────────┘\n            │\n            ▼\n  ┌────────────────────────────────────────────────────────────────┐\n  │  THE TUTOR  (your normal Claude chat, under strict rules)      │\n  │                                                                │\n  │  per concept:  open a question → you PREDICT → struggle a      │\n  │  little (hints, not answers) → resolve → you EXPLAIN IT BACK   │\n  │                                                                │\n  │  threshold concepts get a generated interactive HTML           │\n  │  explorable — sliders and prediction gates, not more text.     │\n  └────────────────────────────────────────────────────────────────┘\n            │   your answers, verbatim (crash-safe stash on disk)\n            ▼\n  ┌────────────────────────────────────────────────────────────────┐\n  │  THE ASSESSOR  (separate agent — grades blind)                 │\n  │  sees only the rubric and your words, never the lesson.        │\n  │  every grade becomes a receipt on disk. no receipts,           │\n  │  no mastery claim.                                             │\n  └────────────────────────────────────────────────────────────────┘\n            │   receipts\n            ▼\n  ┌────────────────────────────────────────────────────────────────┐\n  │  THE SCHEDULER  (engram.py — deterministic code, not vibes)    │\n  │  FSRS-4.5 fits your personal forgetting curves and books       │\n  │  each concept's next review just before you'd lose it.         │\n  └────────────────────────────────────────────────────────────────┘\n            │\n            ▼\n  next session:  [engram] 6 reviews due (transformers: 6) · ~4 min\n                     │\n                     ├──→  /review   2–4 minutes of free recall\n                     └──→  /coach    weekly: stats · dashboard · tuning\n```\n\nFrom the first live topic taught with Engram (transformer internals). Note who does the thinking:\n\n```\n◆ node 6/13 · nonlinearity-necessity †\n\nengram   Delete σ for a second. The FFN is now just W₂·(W₁·x).\n         What is W₂·W₁ — and what has the two-layer FFN collapsed into?\n\nyou      i dont know really\n\nengram   Fine — that's a commitment. Forget matrices. W₁ = \"×2\",\n         W₂ = \"×3\". Run a number through both, nothing in between.\n         Two steps of computation… or secretly one?\n\nyou      basically 2x3\n\nengram   That's the whole secret, and you just said it. ×2 then ×3 = ×6:\n         two linear layers fuse into ONE. Fifty of them? Still one matrix.\n         Depth means nothing until a nonlinearity blocks the fuse —\n         and that's why σ is not optional.\n```\n\nAt session end, the assessor — which never saw that dialogue — graded the learner's six answers: **1 recalled · 4 partial · 1 first-retrieval**, while the tutor was convinced the session went great. The schedule believed the assessor. That separation is the point: your future reviews are built on verified evidence, not on the tutor's enthusiasm (or yours).\n\n| Command | What happens | Time |\n|---|---|---|\n`/learn <topic>` |\nIntake (your goal, your background) → concept map → pretest → generation-first teaching → blind grading → everything scheduled | 5–60 min, you pick |\n`/review` |\nDue concepts, free recall, interleaved across topics. The habit that makes it all permanent | 2–4 min |\n`/coach` |\nRetention stats, calibration, local HTML dashboard, schedule tuning, n-of-1 experiments | weekly-ish |\n\nEverything else is ambient: the session hook nudges when reviews are due and is silent otherwise.\n\nEngram implements the four most-replicated findings in learning science — and deliberately skips the popular myths (no \"learning styles\"; that theory failed every controlled test):\n\n-\n**Structure**— knowledge is a graph, so topics are decomposed by*chains of necessity*(\"why must this be true?\"), never by chapter order. -\n**Generation**— the mind keeps what it makes. You predict, attempt, and explain back before being told. Even failed attempts measurably improve what sticks next (the pretesting effect). -\n**Retention**— testing*is*the learning (not the measurement of it), and spacing beats bingeing. Free recall on an FSRS schedule fitted to your own review history. -\n**Honest adaptation**— it adapts from your*measured*retention, calibration, and error patterns. Confidence is only recorded when you actually state it; grades only exist as written receipts. -\n**Motivation & wisdom, honestly**— it makes your*real*competence growth visible at the moment it happens (the memory that now lasts 4× longer — not points or streaks, which backfire on motivated adults), and it carries you through the hard part: struggle named as encoding, lapses absolved not pitied, backlogs met with amnesty. Two new layers, every claim adversarially verified against the primary source —[docs/05-affective-layers.md](/nagisanzenin/engram/blob/main/docs/05-affective-layers.md). -\n**Visuals that earn their keep**(v0.5) — interactive explorables are built when the*content*rewards manipulation (a parameter to drag, a process that unfolds — declared per concept by the curriculum architect, never inferred from a \"visual learner\" label), always wrapped in predict → act → explain guidance, because the guidance is what carries the effect (scaffolded simulations beat identical unscaffolded ones, g+ = 0.60). You choose the eagerness (`visuals eager|threshold|off`\n\n), and your own review receipts then measure whether the medium actually holds better*for you*—[docs/06-visual-encoding.md](/nagisanzenin/engram/blob/main/docs/06-visual-encoding.md). -\n**Procedures are practiced, not recited**(v1.1) — some knowledge is a*skill executed on instances*(an integral, a`git rebase`\n\n, a statistical-test choice — any domain, declared per node by the content, never by a topic label). Those nodes enter by the**worked-example ladder**(study → complete → faded → solve; examples first is the best-replicated novice result in math, g ≈ 0.44) and are reviewed by**solving a fresh variant**— new numbers, same structure — next to the problems they're confused with, because practice format must match use format (transfer d = 0.58 congruent vs 0.28 not). Solutions are step-graded with the arithmetic**verified by execution**, and a slip is priced gentler than a wrong method. Engram stays a general learn-anything system; this layer wakes only where the content is a skill —[docs/11-the-procedure-gap.md](/nagisanzenin/engram/blob/main/docs/11-the-procedure-gap.md). -\n**The session doesn't end on a failed retrieval**(v1.5) — when a concept comes back wrong, Engram re-derives it, puts something else in between, and asks again, to** one**correct recall. Then it guarantees the*dose*: the first two intervals after encoding are capped so at least three spaced sessions land inside the first month. This is the largest effect in the whole evidence base — one correct recall in each of three spaced sessions beats three crammed into one**68% vs 26%** at a week (the honest exposure-controlled size is d ≈ 0.7) — and it buys durability of*the practiced item*, not transfer, which is exactly what it claims.[docs/13](/nagisanzenin/engram/blob/main/docs/13-the-adaptive-instrument.md)§2.5 -\n**It fits your memory, and refuses to pretend**(v1.6) — the schedule's parameters are fitted from your own reviews (initial stability at 64 usable reviews, the full vector at 400), and**a fit that doesn't beat your current one is refused rather than shipped**. The workload/retention trade-off is drawn for you and never recommended: Anki, with the largest review dataset in existence, removed its own auto-recommendation, and Engram's receipts carry no per-review durations to price the trade honestly. -\n**It adapts — on receipts, with your consent, in writing**(v1.8, Article 12) — every change the*system*suggests is computed from your evidence, offered with that evidence quoted, applied only on a yes, logged to an append-only ledger, and reversible. The families it may steer on are**closed**: assistance level from demonstrated prior knowledge (the one aptitude-treatment interaction that survived its literature), scheduling from fitted forgetting, one specific fading metacognitive prompt, and small real choices. Styles, traits, personality and time-of-day stay dead —*a system that adapts to you is one hallucinated correlation away from a horoscope, and the ledger is what keeps the difference visible.*\n\n**Citations & full theory** (for the skeptical — click)\n\nThe load-bearing evidence: retrieval practice (Roediger & Karpicke 2006; Karpicke & Blunt 2011, *Science*; Dunlosky et al. 2013 \"high utility\"), distributed practice (Cepeda et al. 2006; Rawson & Dunlosky 2011), desirable difficulties & the fluency illusion (Bjork 1994; Koriat & Bjork 2005), pretesting (Richland, Kornell & Kao 2009), the ~85% difficulty sweet spot (Wilson et al. 2019), self-explanation & ICAP (Chi et al. 1994; Chi & Wylie 2014), multimedia principles behind the explorables (Mayer; Paivio), step-level tutoring ≈ human tutors (VanLehn 2011), FSRS scheduling (open-spaced-repetition, Anki's modern default), and the learning-styles refutation (Pashler, McDaniel, Rohrer & Bjork 2008).\n\nThe affective layers (v0.4): competence-as-information (Deci/Koestner/Ryan 1999 — verbal competence feedback lifts *adult* intrinsic motivation d=+0.33, but flips to d=−0.78 when controlling), progress salience (Harkin et al. 2016, 138 RCTs, d=0.40), curiosity's reward circuit (Gruber, Gelman & Ranganath 2014), return-after-absence amnesty (Silverman & Barasch 2023; Lally et al. 2010) — and the refusals it's built on: gamification's motivational effect is the *least* robust (Sailer & Homner 2020) and backfires on already-motivated adults (Hanus & Fox 2015), streaks install a proxy goal, growth-mindset framing is small and context-specific (Sisk 2018; Yeager 2019), sympathy-after-failure reads as a low-ability cue (Graham 1984), and over-helpful AI tutoring harms retention (Bastani 2025). ADHD is honored as an opt-in *Focus profile* that turns up the same universal dials — not a new pedagogy, and pointedly not a game.\n\nThe visual-encoding audit (v0.5): interactive simulations carry the largest verified interactivity effect (g+=0.62, D'Angelo/SRI 2014) but *guidance inside the artifact is the active ingredient* (scaffolded versions of the same simulation g+=0.60; guidance in inquiry d=0.50, Lazonder & Harmsen 2016); dynamic-vs-static is modest and moderator-driven (g=0.226, Berney & Bétrancourt 2016 — concentrated where the motion *is* the content, d=0.40 representational vs ≈−0.05 decorative); learner control per se is worth ≈nothing (g=0.05, Karich 2014); seductive details reliably hurt (Sundararajan & Adesope 2020); and expertise reversal is a confirmed disordinal crossover (novices +0.505 with assistance, knowledgeable learners −0.428; Tetzlaff 2025) — which is why explorables are content-triggered, guidance-wrapped, scaffold-faded, and measured against your own receipts rather than assumed to work. What didn't survive verification is stated as open, not assumed — [docs/06-visual-encoding.md](/nagisanzenin/engram/blob/main/docs/06-visual-encoding.md).\n\nFull treatment with design consequences: [docs/01-foundations.md](/nagisanzenin/engram/blob/main/docs/01-foundations.md) · what exists and what's missing in every other tool: [docs/02-prior-art.md](/nagisanzenin/engram/blob/main/docs/02-prior-art.md) · system design: [docs/03-architecture.md](/nagisanzenin/engram/blob/main/docs/03-architecture.md) · roadmap & constitution: [docs/04-roadmap.md](/nagisanzenin/engram/blob/main/docs/04-roadmap.md) · the motivation & wisdom layers: [docs/05-affective-layers.md](/nagisanzenin/engram/blob/main/docs/05-affective-layers.md) · the visual-encoding audit: [docs/06-visual-encoding.md](/nagisanzenin/engram/blob/main/docs/06-visual-encoding.md) · the measured loop: [docs/07-the-measured-loop.md](/nagisanzenin/engram/blob/main/docs/07-the-measured-loop.md)\n\n**And the strongest external result, stated honestly.** [Kestin et al., Scientific Reports, June 2025 (Harvard, n=194)](https://www.nature.com/articles/s41598-025-97652-6): an AI tutor built on exactly this dialogue grammar — one step at a time, never reveal the solution, make them attempt first — produced\n\n**roughly double the learning gains of an active-learning physics classroom, in less time.** The caveat is the whole reason Engram exists:\n\n**its outcome was an immediate post-test.** Nobody has ever measured whether AI-tutoring gains survive to thirty days. That is the question this tool is built to answer, on you, with receipts.\n\nEngram's central claim is separation of powers: a **blind assessor** grades your free recall, and its receipts drive mastery, retention, calibration, and the schedule itself. Which raises the question nobody in this space likes: **who grades the grader?**\n\nUntil v0.7, nobody. The oracle was a vibe — an excellent one, unmeasured. And that hole sat directly under the foundation, because *if the grader is lenient, every number Engram has ever shown you is inflated, and the system has no way to find out.*\n\nSo we built the audit and ran it. **Then the gold set failed before the grader did**, and that turned out to be the more important result.\n\n0 of 258 |\nblind judgments — 86 gold items (86% adversarial) × 3 independent runs — where the grader awarded more credit than the strict rubric reading. Zero, on the spec that ships — and it is a repaired zero, not an untested one. Extending the set to procedure items ran the audit three times over 774 judgments and caught 3 real inflations, each traced to an ambiguity in the grader's own instructions (one of them introduced by this release). All three are closed; the number was re-earned, not extrapolated. The full account, including what the fixes cost:\n|\n\nThat is a claim about **safety**, and it is the reason the badge above says what it says. A grader that errs low makes you re-drill something you had earned — annoying, and it costs you time. A grader that errs *high* tells you that you know something you do not, and **you stop reviewing.** Only one of those is a trap, and this grader has never walked into it.\n\nv0.7.0 shipped this section with a **QWK 0.93** badge. Then an independent post-release reviewer ran the one test nobody had thought to run: it graded the gold set with a *correct* grader and with a deliberately *fooled* one.\n\n**The fooled grader scored higher.** (1.000 vs 0.990.) **The gold set was rewarding leniency.** The instrument was inverted.\n\nThe cause was five lenient adjudications by the gold set's own author, every one of the same species: **crediting an adjacent fact as partial credit.** Majority is not intersection. Consonance is not pitch-set arithmetic. The history of a theory is not its mechanism. The grader had caught all five, three runs out of three — *including on a fluent-but-empty item*, which means the author was fooled by fluency\n\n**in the very category built to catch being fooled by fluency.**\n\nCorrecting them moves agreement from 0.889 to 0.965 and QWK to **0.978**. And here is the thing:\n\nThat rise is not evidence the grader got better. It is evidence the instrument had been measuring the author's inconsistency.\n\nWorse — the corrections were *prompted by the grader's own disagreements*. So the QWK that follows is **circular**: an authored gold set cannot validate a grader from the same model family, because when the two disagree and the author concedes, the agreement that follows measures only the author's willingness to concede. **The engine now says so on every single audit**, in the `read`\n\nstring, until someone who is not the author has adjudicated the set.\n\nThat is why the badge is no longer a QWK. ** 0/258 graded up is a safety property that does not depend on the gold being perfectly calibrated** — and correcting the gold\n\n*downward*only made it a stronger claim, because it lowered the bar the grader had to not exceed. It still never did.\n\nOne genuine disagreement (`g_054`\n\n) is **deliberately left in**, because the reviewer read both readings and judged the gold's defensible. *An instrument with no disagreement left in it measures nothing.*\n\n**The gold set is public** — [ gold/assessor-gold.jsonl](/nagisanzenin/engram/blob/main/gold/assessor-gold.jsonl), 86 items,\n\n**86% adversarial**:\n\n*fluent-but-empty*,\n\n*terse-but-correct*,\n\n*confident-and-wrong*,\n\n*right-answer-wrong-reason*,\n\n*paraphrase*,\n\n*partial-credit boundary*, and — new in v1.1 —\n\n*right-answer-wrong-method*,\n\n*slip-vs-conceptual*,\n\n*fluent-wrong-step*,\n\n*terse-but-correct-solution*. Every corrected item carries a\n\n`disputed`\n\nrecord with its original grade, so the correction is auditable rather than laundered. Run it yourself: `/coach audit`\n\n. **Dispute an item**— drop it in\n\n`gold/local-gold.jsonl`\n\nand it overrides ours (the audit will say it did).**What would actually fix this:** one human, who is not us, adjudicating 86 items — and the two categories where the author and the grader now disagree in every run (`right-answer-wrong-method`\n\n, `procedure-partial-boundary`\n\n) are where that human would earn their keep first. That is the highest-value contribution anyone could make to this repository, and until it happens the engine will keep saying so out loud. **Since v1.4 there is a procedure for doing it** — a 10-anchor calibration gate, then QWK and ordinal Krippendorff's α with a bootstrap CI, against thresholds fixed before anyone reads the file: ** docs/ADJUDICATION.md**, scored by\n\n`engram.py adjudication-stats`\n\n. One external rater *corroborates*the authored gold; replacing it would take two who agree with each other, and the engine keeps saying that too.\n\n**One more thing the literature insists on, and the engine enforces:** high consistency is *not* correctness. A judge has been measured at test–retest **0.992** with a position bias of **0.192** — perfectly reproducible and systematically wrong ([docs/07](/nagisanzenin/engram/blob/main/docs/07-the-measured-loop.md) §3). Engram's assessor is *prompted* to be a skeptic, so it is self-consistent by construction — precisely the profile that failure mode wears. So the engine **refuses to certify on consistency**: above 0.95 test–retest it demands the leniency bias be strictly under the ceiling, fewer than three runs cannot pass at all, and three *identical* runs are flagged as measuring nothing.\n\nThe evidence base of learning science is built on **undergraduates, word pairs, and 20-minute retention intervals.** Almost nothing tests *self-directed adults*, on *hard conceptual material*, at *30–90 day horizons*, with *blind-graded free recall*.\n\nThat is not a gap anyone chose. It is a gap because, until roughly 2026, **grading free recall at scale was impossible** — you needed a human to read every answer.\n\nEngram produces exactly that data as a byproduct of being useful, on hundreds of machines, with a **measured** grader behind every verdict. And the open question is sitting right there: [Kestin et al. (Harvard, Scientific Reports, 2025)](https://www.nature.com/articles/s41598-025-97652-6) found an AI tutor built on this exact dialogue grammar produced\n\n**~2× the learning gains of an active-learning classroom, in less time**— measured on an\n\n**immediate post-test.**\n\n**Nobody has ever measured whether AI-tutoring gains survive to thirty days.**\n\n```\npython3 scripts/engram.py export --contributor \"@you\"     # writes a FILE. Sends nothing.\n```\n\n**Then read the file.** It is short, it is yours, and nothing has left your machine.\n\n| leaves | never leaves |\n|---|---|\n| grades, ratings, confidence | your productions — every word you wrote |\n| timings, stability, intervals, retrievability | probes, claims, rubrics |\n`kind` , `node_kind` , `error_class` , `artifact` , `arm` , `stratum` |\ngoals, interests, misconception text |\n`grader` and its measured QWK |\ntopic names and node ids — hashed, not carried |\n\n**Four things make that a promise rather than a hope:**\n\n**The payload is a WHITELIST.** Every field is constructed by name. There is*no code path*by which a production could arrive — not*\"we remembered to delete it.\"*A blacklist is a promise you must keep every release; a whitelist is one you keep by construction.**The**, so the promise is verifiable by the person making it, not merely asserted at them.`stripped`\n\nlist ships INSIDE the file**An unaudited grader cannot contribute.**`export`\n\n**refuses**— a refusal, not a warning.*A finding aggregated from unaudited oracles is not a finding; it is noise with a schema.***v0.7 gates v1.0.****The engine has no network code.** Not \"none by default\" —**none.** A**permanent selftest parses the engine's own AST**(not a grep — the first draft found the word`curl`\n\nin its*own comment*) and fails the build if anyone ever adds`import socket`\n\nto make one thing convenient.`export`\n\nwrites a file and stops; the**agent** posts, via`gh`\n\n, only on an explicit yes.\n\n**And it is ATTRIBUTED — we are not going to lie to you about that.** `gh`\n\nposts from your account. A \"salted anonymous hash\" riding inside a signed envelope would be theatre the moment the envelope is signed. You cannot have one-keystroke upload *and* anonymity; pick one, and say which out loud. **Attribution is also the stronger science:** a retention study lives on **longitudinal linkage** — following *the same learner across months* **is** the question — so attributed n=100 beats anonymous n=500.\n\nThis is not telemetry. **It is a consenting, named, informed participant in an open study** — which is what every good study has always had. **Withdrawal is: it's a GitHub post, delete it.** That is the entire mechanism, deliberately.\n\n**Read the whole thing before you decide: CONTRIBUTING-DATA.md.**\n\n**Your mastery map**, any time (`/learn`\n\nshows it, `/coach`\n\nrenders the full dashboard):\n\n```\ntransformers — Transformers from first principles\n██▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░  1 retained · 6 learning · 6 untouched\n\n● contextual-meaning        due 2026-07-09   S=3.7d\n◐ residual-stream        †  due 2026-07-06   S=1.4d\n◐ nonlinearity-necessity †  due 2026-07-06   S=1.4d\n· depth-necessity        †  due —            S=—\n```\n\n**Interactive explorables** — self-contained HTML with prediction gates (content stays locked until you commit a guess), guided manipulable models, and embedded retrieval prompts. Built for threshold concepts by default; set `visuals eager`\n\nand they're also built whenever a concept's own structure rewards manipulation (the curriculum architect declares this per node — features you can drag, processes that unfold); or just ask mid-lesson: *\"make it visual.\"* **A local HTML dashboard** (`/coach dashboard`\n\n) with per-topic maps, retention-by-strength bars vs. the 85% target band, honest calibration, an encoding-medium comparison (do explorable-encoded concepts hold better *for you*? — your own receipts answer), and your next-7-days forecast. Both live in `~/.claude/learning/artifacts/`\n\n— no network, ever.\n\n**Is this a memory plugin for my agent?**\nNo — the other direction, and this is the most common mix-up. Agent-memory tools (memory MCPs, context managers, \"give Claude persistent memory\" plugins) store knowledge *for the agent*. Engram uses the agent to install knowledge *in you*: it tutors, blind-grades your free recall, and schedules reviews against your measured forgetting curve. If you want your agent to remember things, you want a different tool. If you want to still know things a month after the chat, you want this one.\n\n**How is this different from just asking Claude to explain?**\nAsking produces understanding; understanding decays on the same curve as everything else. Engram adds the three things a chat can't: verification (did you *actually* get it?), memory across sessions (a learner model in files, not context), and a future (every concept has a scheduled next encounter). The explanation is the easy 20%.\n\n**Is this Anki?**\nAnki schedules cards *you* write and grades *yourself*. Engram teaches the material, writes the assessment from the dialogue, grades it blind, and schedules concepts on the same family of algorithm (FSRS) — with an actual tutor attached. If you love Anki, think: Anki where the deck builds itself from a Socratic lesson and the grader isn't you.\n\n**Non-code topics?**\nYes — the engine doesn't care. History, music theory, statistics, anatomy (it routes memorization-heavy content to mnemonics instead of derivation-theater).\n\n**Math and STEM specifically?**\nYes, and since v1.1 with a layer built for the half of STEM that is *doing*: the architect marks skill-type nodes as `procedure`\n\n, which swaps in worked-example acquisition and solve-a-fresh-variant reviews, step-graded with execution-checked arithmetic (a dropped sign is priced as a slip, not a forgotten idea; a right answer over a wrong method is capped — the answer is not the knowledge). It is not a \"math mode\": the same kind fires on a git workflow or a conjugation drill, concepts still run the Socratic grammar, and a topic with no procedure nodes behaves exactly as before. Theory and the adversarial verification behind it: [docs/11-the-procedure-gap.md](/nagisanzenin/engram/blob/main/docs/11-the-procedure-gap.md).\n\n**What if I just want the answer?**\nSay \"just tell me\" — it complies immediately, no lecture. It also quietly schedules that concept for earlier review, because told-not-derived decays faster. Your call, honestly priced.\n\n**I'm a visual learner — will it build me visuals?**\nCareful — two different things are true. \"Visual learner\" as a *learning style* is a debunked theory (matching instruction to a diagnosed style has failed every controlled test), so Engram will never route content by that label. But interactive visuals as a *medium* are real and measured — strongest exactly when the concept itself is manipulable (a parameter to drag, a process that unfolds) and when the interaction is guided, which is how Engram builds them. So: the **content** decides what qualifies (each concept carries a declared visual affordance), **you** decide the eagerness — say *\"build visuals eagerly\"* or run `python3 scripts/engram.py visuals eager`\n\n(or `threshold`\n\n/`off`\n\n; you can also just ask *\"make it visual\"* on any concept mid-lesson) — and then your own review receipts quietly measure whether explorable-encoded concepts actually hold better for you. `/coach`\n\nshows the verdict with honest sample sizes. Preference honored, evidence in charge: [docs/06-visual-encoding.md](/nagisanzenin/engram/blob/main/docs/06-visual-encoding.md).\n\n**I have ADHD / I keep getting bored and quitting — is there a mode for that?**\nYes: an opt-in **Focus profile**. It doesn't add a game — no XP, streaks, or badges (the evidence says those backfire on motivated adults; see [docs/05](/nagisanzenin/engram/blob/main/docs/05-affective-layers.md)). It turns *up* dials Engram already has: one node per session so you can't drift, your **real** memory-growth surfaced every review (*\"this now lasts ~4× longer\"* — a true stability number, not points), and amnesty whenever you return to a backlog instead of a guilt pile. Two ways to switch it, whichever you like:\n\n**Just say so** in`/learn`\n\nor`/coach`\n\n—*\"I have ADHD, turn on focus mode.\"***Run it** yourself:`python3 scripts/engram.py focus on`\n\n(or`off`\n\n, or`status`\n\n).\n\nIt's stored as a declared need in your learner model, honored across all three commands — not a \"learning style\" (Engram rejects those). Works for anyone who wants it; ADHD just gets the intensity. Full rationale and evidence: [docs/05-affective-layers.md](/nagisanzenin/engram/blob/main/docs/05-affective-layers.md).\n\n**Where's my data?**\n`~/.claude/learning/`\n\n— learner model, concept graphs, grade receipts, misconception log, artifacts. Human-readable JSON. Your learning **state never leaves your machine**: the engine (`engram.py`\n\n) is stdlib-only with no network code, and the dashboard is a local file. The one exception is the curriculum architect, which uses web search on the *topic and goal you give it* when building a new map — so keep secrets out of the goal line, or ask for an offline map. (Override the location with `ENGRAM_HOME`\n\n.)\n\n**Why does it keep testing me?**\nBecause retrieval is the treatment, not the measurement. A century of memory research in four words: testing is the learning.\n\n**CLI reference** — `scripts/engram.py`\n\n, the deterministic core\n\nThe model never does calendar math; this does:\n\n| Command | Purpose |\n|---|---|\n`add-topic --file F [--replace|--extend]` |\ningest a concept DAG · re-author one · add an arc (new nodes only; every existing schedule, receipt and retirement untouched) |\n`next --topic T [--frontier-of N]` |\nnext frontier concept · the unreceipted prerequisites of a node, for an adaptive pretest that credits nothing |\n`init` / `doctor [--fix]` / `path` |\ncreate state · diagnose problems and name their repairs · print state location |\n`topics` / `topic-status --topic T` |\nlist topics · mastery map with progress bar |\n`adherence` |\nthe binding constraint: of concepts taught and scheduled, how many you came back for (`loop_closure` ) · return cadence · the full funnel |\n`retention` |\nthe north star: recall at 7 / 30 / 90 days after encoding — reported with its `unmeasured` denominator (the concepts that came due and were never reviewed; unknown, not absent) |\n`decay --topic T` |\nwhat is dying right now, and what N minutes would save — real FSRS numbers, both arms over the same window |\n`commit --cue … --action …` |\nyour if-then plan, in your words. Stored, shown back at the moment it names (v1.3 — from v0.6 to v1.2 it was stored and displayed by nothing), renewable, never enforced |\n`next --topic T` / `due` |\nnext frontier concept · due review queue (interleaved) |\n`due --cap N` |\na capped session, ranked by expected retention saved per minute rather than most-overdue-first — with `order_basis` stating in the payload that it is model-derived (`--limit` keeps the old shape and order) |\n`retire --topic T [--node N]` |\ntake something off your list — out of every queue, counted in every denominator it leaves, reversible with `--restore` |\n`rate` / `receipt --file F` |\napply one rating · apply assessor receipt batch |\n`stash add|list|count|clear` |\ncrash-safe queue of answers awaiting grading |\n`model` / `misconception` |\nopen learner model · error catalog |\n`propose` / `adaptations` |\nat most 3 engine-justified adaptations, each with its evidence and grade (read-only) · the append-only ledger of every change, why, and that it is reversible (Article 12) |\n`experiment start|assign|status|settle` |\nn-of-1 trials done properly: randomized (seeded, reproducible) · stratified (kills the material-vs-medium confound) · pre-registered · powered (15/arm; the floor moves with the metric — 8 for transfer, 10 for slip-share) · and the engine computes the verdict — `--verdict` is refused |\n`edit-node --topic T --node N --file F` |\nrepair ONE node’s grading contract in place — `probe` , `rubric` , `transfer_probe` (by file, the shell-safe channel; inline flags for hand use). Schedules, receipts and registrations are untouched; the node records that its contract moved and how many receipts predate it |\n`focus on|off|status` |\ntoggle the ADHD Focus profile (Sprint default, growth every review, always-on amnesty) |\n`visuals eager|threshold|off|status` |\nthe explorables dial: every high-affordance concept · portal concepts only (default) · none |\n`artifact set|clear|list` |\nregister a built explorable on its node (validated; powers regeneration tracking + the medium comparison) |\n`gold` |\nthe 86-item adversarial gold set, answers stripped by construction — shaped exactly like a real settle payload, so the audit grades the real assessor |\n`assessor-audit --file F` |\ngrade the grader. QWK (headline) · raw agreement (never quoted alone) · signed leniency bias · test–retest · confusion matrix · per-case-type breakdown |\n`adjudication-stats --file F` |\nscore an external human's adjudication of the gold set: anchor calibration gate, QWK, ordinal Krippendorff's α with a bootstrap CI, signed direction — thresholds fixed in advance (\n|\n`grader-health [--grader-context S]` |\nthe latest audit's verdict — and it EXPIRES (v1.4): a grader swap voids the badge, because a swapped model grades measurably more lenient. `stats` embeds it, and stamps `grader_unvalidated` on every retention figure until it passes |\n`transfer [--topic T]` |\nthe mature concepts ready for the harder question — the `transfer_probe` the architect wrote and nothing ever asked. `/review` serves it automatically |\n`capstone --topic T` |\nmaterialize the build as a real NODE in the DAG (idempotent). New topics get one from `add-topic` ; it requires every concept, so it cannot be silently skipped |\n`stats` / `report` |\ntelemetry JSON (incl. `modality` — explorable vs dialogue retention) · self-contained HTML dashboard |\n`refit` |\nfit the schedule to your measured memory: the interval multiplier (≥50 reviews), then your own FSRS parameters — S0 at 64 usable reviews, the full vector at 400, and a fit that does not beat your current one is refused |\n`export [--topic T]` |\na text-stripped, attributed receipt bundle written to a file. Whitelist-constructed — there is no code path by which a production could leave. Refuses if your grader is unaudited |\n`session-start` / `log-session` |\nambient nudge (hook) · session telemetry |\n`selftest` |\n302 checks over the FSRS math, state machine, adherence/retention arithmetic, the grader-audit statistics, and every hardened boundary |\n\n**Troubleshooting & updating**\n\n- Anything weird →\n`python3 scripts/engram.py doctor`\n\n(checks state files, paths, python, quarantined files). - Update:\n`claude plugin marketplace update engram && claude plugin update engram@engram`\n\n, then restart or`/reload-plugins`\n\n. - Skills resolve the plugin root via\n`${CLAUDE_PLUGIN_ROOT}`\n\n(or`${CODEX_PLUGIN_ROOT}`\n\non Codex); for a dev clone outside the plugin cache, set`ENGRAM_ROOT=/path/to/engram`\n\n. - Corrupt a state file by hand? It's quarantined to a\n`.corrupt.<date>`\n\nsibling (never silently discarded) and`doctor`\n\nwill point at it — your other topics keep working.\n\n**Repository layout & design lineage**\n\n```\n.claude-plugin/     plugin.json, marketplace.json          (Claude Code)\n.codex-plugin/      plugin.json                            (Codex)\n.agents/plugins/    marketplace.json                       (Codex marketplace)\nskills/             learn / review / coach  (+ _shared: dialogue grammar, Explorable Contract, subagent spawning)\nagents/             engram-curriculum-architect · engram-assessor · engram-artifact-smith  (Claude Code)\ncodex/agents/       *.toml ports of the three subagents     (Codex)\nhooks/              SessionStart re-anchor (Claude Code/Codex) · pre_llm_call port (Hermes) — self-resolving; silent when nothing is due\nhooks/engram-due/   HOOK.md + handler.js                    (OpenClaw hook pack — same nudge, same silence)\nscripts/engram.py   deterministic core: FSRS-4.5, state, receipts, stats, dashboard, selftest\ndocs/               theory · prior art · architecture · roadmap\nINSTALL-CODEX.md · INSTALL-HERMES.md · INSTALL-OPENCLAW.md    per-platform glue, at the repo root\n```\n\nOne codebase, many agents: `skills/`\n\nand `scripts/engram.py`\n\nare shared verbatim; each platform gets its own thin glue (manifest, subagent format, or hook adapter). See [INSTALL-CODEX.md](/nagisanzenin/engram/blob/main/INSTALL-CODEX.md) · [INSTALL-HERMES.md](/nagisanzenin/engram/blob/main/INSTALL-HERMES.md).\n\nSeparation of powers, enforced by construction: the **tutor** teaches but never grades; the **assessor** grades from a fresh context without seeing the lesson; the **coach** adapts only from receipts; and `engram.py`\n\n— never the model — computes every date and stability value. Verification patterns (oracle-driven loops, receipts, re-anchoring) inherited from [claude-code-production-grade-plugin](https://github.com/nagisanzenin/claude-code-production-grade-plugin), transposed from software verification to learning verification.\n\n| Doc | Contents |\n|---|---|\n|\n\n[docs/02-prior-art.md](/nagisanzenin/engram/blob/main/docs/02-prior-art.md)[docs/03-architecture.md](/nagisanzenin/engram/blob/main/docs/03-architecture.md)[docs/04-roadmap.md](/nagisanzenin/engram/blob/main/docs/04-roadmap.md)[docs/05-affective-layers.md](/nagisanzenin/engram/blob/main/docs/05-affective-layers.md)[docs/06-visual-encoding.md](/nagisanzenin/engram/blob/main/docs/06-visual-encoding.md)[docs/07-the-measured-loop.md](/nagisanzenin/engram/blob/main/docs/07-the-measured-loop.md)**The frontier audit:** why \"learning rate\" is the wrong vector, what actually determines whether you come back, whether an LLM grader can be trusted, and which memory neuroscience is actionable vs. decoration[docs/08-vision.md](/nagisanzenin/engram/blob/main/docs/08-vision.md)**The vision:** the one number Engram exists to move, which appealing metrics are traps, and the final state — tutor → instrument → commons. Includes the exhibit: the founder's own memory decaying on schedule[docs/09-target-architecture.md](/nagisanzenin/engram/blob/main/docs/09-target-architecture.md)**The target engine:** schemas, the nine new commands, the invariants that must never break, and the order of operations[docs/10-roadmap-to-1.0.md](/nagisanzenin/engram/blob/main/docs/10-roadmap-to-1.0.md)**The road to 1.0:** v0.6 → v1.0 as executable work orders — why / what / done / selftests / risk, each shippable by someone who has never seen the repo[docs/11-the-procedure-gap.md](/nagisanzenin/engram/blob/main/docs/11-the-procedure-gap.md)**The procedure gap (v1.1's theory):** Engram was braced for the conceptual half of math & STEM and blind to the procedural half — Pillars 16–17 (the example ladder; the problem as the probe), adversarially verified by three refute-first passes that corrected five claims and inverted one design rule before code shipped[docs/13-the-adaptive-instrument.md](/nagisanzenin/engram/blob/main/docs/13-the-adaptive-instrument.md)**The v2.0 evidence audit:** a live probe of the shipped engine plus seven refute-first research passes (successive relearning · the FSRS ecosystem · LLM-grader validity 2025–26 · adherence · retrieval formats · review ordering · adaptivity) — and a kill list as long as the survivor list[docs/14-roadmap-to-2.0.md](/nagisanzenin/engram/blob/main/docs/14-roadmap-to-2.0.md)**The road to 2.0:** v1.3 → v2.0 as executable work orders, each marked shipped with what the build corrected in it[docs/15-target-architecture-2.0.md](/nagisanzenin/engram/blob/main/docs/15-target-architecture-2.0.md)**The schema authority:** every field, payload and signature the roadmap names, the self-heal table, and the invariants v2.0 adds[docs/ADJUDICATION.md](/nagisanzenin/engram/blob/main/docs/ADJUDICATION.md)**The contributor kit:** how to adjudicate the gold set as an outside human, and the statistics that make your work countable[docs/12-procedure-layer-work-order.md](/nagisanzenin/engram/blob/main/docs/12-procedure-layer-work-order.md)**The procedure layer's build:** architecture + work orders (WO-1…WO-8), the compatibility doctrine (no breaking changes, no domain mode — Engram stays general), and the pre-answered numbers audit for`by_kind`\n\nFour Claude Code plugins from the same workshop. Most share one habit: *let a deterministic core decide, and never let the producer of work grade it.*\n\n— benchmark-calibrated per-subagent reasoning effort: dispatch the cheapest tier a blind grader still accepts. ~64.7% fewer output tokens at equal quality, pre-registered.[effortmining](https://github.com/nagisanzenin/effortmining)— human-voice writing engine: 60+ measured voices plus a deterministic AI-tell scanner and a blind auditor, so text reads like a person, not a model.[idiolect](https://github.com/nagisanzenin/idiolect)— turns \"build me X\" into a gated multi-agent pipeline (architecture → tests → security → CI/CD) with a receipt for every phase. Engram's verification patterns started here.[production-grade](https://github.com/nagisanzenin/claude-code-production-grade-plugin)— a minimal comms protocol for Claude: a per-turn hook makes replies answer-first, pick-list-driven, and calm, without touching the work.[less](https://github.com/nagisanzenin/less)\n\nIf Engram earned its keep, a star helps the next person find it.\n\nGitHub restricted the stargazer-timeline API to repo collaborators, so the live history chart no longer renders inline. Click the badge for the interactive graph.\n\n*An engram is the physical trace a memory leaves in neural tissue (Semon, 1904; experimentally located by Josselyn, Tonegawa et al. in the 2010s). Building durable ones is literally this plugin's job.* · MIT license ·\n\n[changelog](/nagisanzenin/engram/blob/main/CHANGELOG.md)", "url": "https://wpnews.pro/news/show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram", "canonical_source": "https://github.com/nagisanzenin/engram", "published_at": "2026-07-30 08:38:17+00:00", "updated_at": "2026-07-30 08:52:13.799142+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "ai-tools"], "entities": ["nagisanzenin", "Engram", "Claude Code", "OpenAI Codex", "OpenCode", "Hermes Agent", "Google Antigravity", "OpenClaw"], "alternates": {"html": "https://wpnews.pro/news/show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram", "markdown": "https://wpnews.pro/news/show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram.md", "text": "https://wpnews.pro/news/show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram.txt", "jsonld": "https://wpnews.pro/news/show-hn-my-ai-keeps-getting-smarter-i-don-t-so-i-built-engram.jsonld"}}