Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/techtheist/engram/normalnpx skills add techtheist/engram --skill normalgit clone --depth 1 https://github.com/techtheist/engramWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00072 | $0.06411 |
| Opus 5 | $0.00036 | $0.03206 |
| Sonnet 5 | $0.00014 | $0.01282 |
| Haiku 4.5 | $0.00007 | $0.00641 |
Grade A, and why
engram scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
This is a copy
92% identical to engram — 30 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 193 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Engram — project memory (Normal)
Engram is a local, user-owned graph of why things are the way they are in this project: decisions and their reasons, gotchas that bit us, problems and how they were solved, stable preferences. Not code structure, not implementation detail — the codebase already holds those.
What good capture buys. A session that recalls well starts where the last one stopped: settled decisions don't get relitigated, known rakes don't get stepped on twice, and "why is it like this?" gets a real answer instead of archaeology. A session that captures well pays that forward. And because the graph is a pane the user curates — not hidden plumbing — every node you write is something they will see. That's also the failure mode to respect: a graph that's noisy or wrong stops being trusted, and an untrusted graph stops being read. Quality of nodes, honesty of edges, and closed loops matter more than volume.
This is the Normal variant: balanced capture. Save what a future session would genuinely want to know; skip noise.
Claude Code already has memory of its own (CLAUDE.md, auto-memory) — don't mirror it. Engram is additional: it holds the project's reasoning — decisions with reasons, conflicts, gotchas — not user preferences, session workflow, or code structure.
You interact with it through the engram MCP tools. Three jobs: recall (read before you act), capture (write durable knowledge after you act), and maintenance (keep what's already there honest).
Recall — brief first, then search
- At the start of a session, call
briefonce: a compact digest of the canon — unresolved conflicts, suspects to judge, recent changes, the open worklist, principles, decisions, cautions. Every record carries its node id; act on ids directly. If the session already opens with an injected "# Engram brief" (the session-start hook provides it), that IS the brief — read it and don't call the tool again. - Before any non-trivial decision, call
searchwith a natural-language description of what you're about to do. Hits carry their 1-hop neighbors,conflicts-with/replacesfirst — read those especially. Search takes adetaillevel — startcompact(id/title/score only) when scanning broadly, default snippet when working,full(bodies attached) only for the hits you'll actually act on: expand on demand instead of paying for depth up front. If a prior Decision or Caution covers your situation, follow it or, if you're about to contradict it, surface that to the user. - Respect the reply's
confidenceverdict.strong— the top hit cleared the calibrated line; act on it.weak— likely not in memory: nothing cleared this graph's calibrated line (auto-tune fits it per graph), so the hits are the nearest candidates rather than a found answer — they are never cut, but verify against the code or the user before relying on one.none— the graph is silent: say so instead of inventing a memory, and capture the fact once this session establishes it. Weak tail hits and the noise past the score cliff are already trimmed before delivery, so what arrives is what deserves your attention. - On a
weakornoneverdict, reformulate before concluding absence. One phrasing is one probe, and the graph's register is rarely the user's: try two or three angles before deciding the memory isn't there — entity-first (name the thing: "tepin store lock", not "why won't the daemon start"), paraphrased into the graph's vocabulary (the words a note would have used, not the words the question used), and date-anchored (after: "last week", orduring_versionwhen you roughly know the cycle). Each is one cheap call. Only after that is "the graph is silent" an honest answer rather than a failed first guess. - Scope in time when the question is temporal.
searchtakesafter/before— a day (2026-08-14), an ISO instant, or a relative expression the daemon resolves (today,yesterday,last week,last 3 days,2 hours ago,a month ago,this year) — plusduring_version("0.8.4", resolved from the graph's own recorded version switches) andorder(chronologicalto read how something developed,recentfor the current value of something that changed). Don't compute dates yourself — pass the expression and let the daemon resolve it against one clock. The window filters before the confidence verdict, so a scoped verdict describes the scoped set, and the same grammar works onscope: "memory"andscope: "history". Hits carrycreated_at, so a result's place in time is always visible. - Use
get_node/traverseto pull the reasoning around a hit (e.g. a Decision and the Principle it stands on). - For history:
timelinewalks a node'sreplaceschain oldest-first, each retired generation carrying the note that explains why it was replaced.auditpages the mutation journal — "what changed while I was away", "who wrote this". - For whole-graph work:
list_nodespages complete nodes (full bodies, filters by type/status/tag) — the lossless read for reviews and exports like a decisions.md;update_nodes/add_notesbatch a curation sweep or a multi-note capture into one call (same per-item dupe checks and warnings). list_openshows the live worklist (open Problems and Intents) — check it when picking up work.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 193 lines · 72 tokens per session scan A e4e4a25cee3e
engram is a skill published in the GitHub repository techtheist/engram (17 stars, last pushed yesterday), licensed MIT. It adds 72 tokens to every session and 6,411 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. It is 92% identical to engram, differing in 30 lines, and is treated as a copy.
Other skills, from other repositories
runaway-context
Use this skill when working in a project that has a RunawayContext v3 install. It loads the project's brief from the auto-generated Tier 3 markdown, queries knowledge.db for relevant lessons and chunks, and routes writes through the contract-enforced Client (HR-2 / HR-3 / HR-9). Trigger when the conversation enters a…
memory
Unified project memory management: update, prune, reflect, and maintain knowledge. Combines conversation scanning, deduplication, contradiction detection, confidence scoring, and consistency checks in a single skill. Usage: /memory update [topic] — scan conversation, persist learnings /memory prune [type] — find…
thoughtline-memory
Persistent, project-aware memory for AI coding agents. Use thoughtline whenever you make a decision, fix a bug, learn something non-obvious, or need to recall prior work.
weekly-digests
Generate a serial week-by-week narrative digest of a project's full claude-mem timeline. Splits the timeline into per-ISO-week files, then runs one consecutive subagent per week — each receiving the prior week's carry-forward block — to produce one chapter per ISO week of data. Use when asked for "weekly digests"…
browserwing-admin
Manage and operate BrowserWing — an intelligent browser automation platform. Install dependencies, configure LLM, create/manage/execute automation scripts, use AI-driven exploration to generate scripts, browse the script marketplace, and troubleshoot issues.
review-offered-task
Review a task that has been offered to you and decide whether to accept or reject it.