Canonical reference for what Engram stores, skips, and how it scores importance. Both batch ingest (
ingest.py) and live extraction (context_query.py) enforce this policy.
- Decisions that change future behavior
- Project milestones
- Agent outcomes with impact
- Todos / reminders / commitments
- Stable relationships (people ↔ projects ↔ repos ↔ tools)
- Preferences / operating rules
- Operational run summaries — only when they materially changed something, exposed a systemic issue, or validated a new setup
- Errors — only when they taught us something or are recurring
- Internal reasoning / think / chain-of-thought
- Secrets, passwords, tokens, raw auth-bearing commands
- Reminder wrappers / heartbeat envelopes / transport boilerplate
- Casual chatter, duplicates, routine success spam
| Level | Score | What qualifies |
|---|---|---|
| High | 0.80–1.0 | Decisions, milestones, durable preferences, major lessons |
| Medium | 0.50–0.70 | Agent outcomes, meaningful run summaries, useful todos |
| Low | 0.10–0.30 | Transient status, repetitive cron output, scratch text |
Low-importance facts should generally be skipped, not stored at low importance.
Every candidate fact must pass all five before it gets written to the graph:
- Durable next week? — Will this still matter in 7+ days?
- Actionable or explanatory? — Does it drive a future action or explain a past decision?
- Specific enough to retrieve? — Could someone search for this and find it useful?
- Safe? — No secrets, no raw reasoning, no auth tokens.
- Novel? — Not a duplicate or near-duplicate of something already stored.
If it doesn't clear that bar, skip it.
Engram should answer:
- What changed?
- Why did we decide that?
- Who worked on it?
- What's still pending?
Not: every intermediate thought or cron wrapper.