Releases: Atomlaunch/engram
v1.1.0 — Multi-Provider Session Summarization
What's Changed
🔌 Multi-Provider Session Summarization
Engram's session save flow no longer requires an Anthropic API key. It now supports any OpenAI-compatible endpoint alongside Anthropic, automatically routing through whatever provider Hermes is configured with.
Credential resolution priority:
- Hermes credential pool (reads active provider from
config.yaml) - Codex OAuth access token (
~/.codex/auth.json) ANTHROPIC_API_KEYenvironment variable.envfile fallback
Full Changelog: v1.0.0...v1.1.0
v1.0.0 — Obsidian-native rewrite
What's New
Complete rewrite. Dropped Neo4j and Docker. Engram is now Obsidian-native — the vault is the source of truth, SQLite FTS5 is the index.
Added
- Obsidian-native architecture — vault is the source of truth
- SQLite FTS5 index with incremental mtime-based updates
- File watcher (watchdog) with inotify on Linux, polling fallback for WSL2 /mnt/ paths
- 3 note types: Entity, Fact, Session
- 7 artifact types for Facts:
durable_fact,preference,standing_rule,decision,lesson,open_loop,constraint - Wikilink graph indexed in SQLite links table
- Ingest pipeline: LLM extraction → vault write-back (Entity + Fact notes)
- Briefing generator: standing rules + open loops + recent session + top entities + recent facts
- Session save to vault (Memory/Sessions/)
- Query API:
search_facts,search_entities,get_standing_rules,get_open_loops,get_sessions,get_facts_about,full_text_search - CLI:
engram index | brief | search | ingest | session | version - Vault templates: entity.md, fact.md, session.md, AGENTS.md
- pyproject.toml package structure, pip installable
Removed
- Neo4j / Kuzu graph database dependency
- Docker requirement
- Episode nodes (raw conversation storage)
- Emotion nodes
- Multi-agent scoping (agent_id fields)
- HTTP server / dashboard
- MCP server (planned for v1.1)
Notes
- v0 legacy code preserved at git tag
v0-legacy - Requires Python >= 3.11
- Config at
~/.engram/config.json - Index DB at
~/.engram/vault_index.db
v0.2.0 — LLM Live Extraction, Speaker Attribution & Compaction
What's New in v0.2.0
🧠 LLM-Based Live Memory Extraction
The entire live fact extraction pipeline has been rebuilt. The old regex-based afterTurn() extractor has been replaced with qwen3.5:9b running locally via Ollama. This means:
- Facts are extracted with real language understanding, not pattern matching
- Technical noise (timestamps, config values, debug output) is properly filtered
- Durable facts (preferences, relationships, identity) are reliably captured
🗣️ Speaker Attribution
Previously, facts were stored as main prefers X (using the agent ID). Now:
extractSpeakerFromText()in the JS plugin parses Discord envelope metadata to identify the real human speaker_resolve_speaker_name()in Python ensures facts are always stored with human names (e.g.TheDev prefers X)- The
--speakerargument is passed from JS to Python on every extraction call
🔧 Context Engine Plugin Updates
engram_searchtool — on-demand Neo4j graph memory search, registered directly in the pluginengram_storetool — explicit fact storage with LLM extraction fallbackafterTurn()gate simplified — directly callsstoreLiveLLM()for valid user turns, regex path fully disabled
🏥 Health Check System
New scripts/healthcheck.sh performs a 6-component automated system check:
- Ollama status + qwen3.5:9b model loaded
- Neo4j bolt connection
- Graph query path (test recall)
- LLM extraction pipeline (end-to-end smoke test)
- Pinned facts injection
- Graph stats (nodes, relationships, facts)
Includes opt-in ollama_auto_start config flag (default: false) — respects users who manage Ollama via systemd or Homebrew.
🧹 Cleanup
- All hardcoded paths removed — healthcheck uses dynamic
$BASH_SOURCEresolution - All personal info, agent names, and credentials removed from source
- Duplicate
config.example.jsonremoved (onlyconfig.json.exampleremains) - Stale feature branch deleted
📁 Files Changed
| File | Change |
|---|---|
context_query.py |
LLM extraction, speaker resolution, envelope stripping, noise filtering |
session.py |
Generalized help text (removed internal agent names) |
scripts/healthcheck.sh |
New: 6-component health check with opt-in auto-start |
config.json.example |
Added ollama_auto_start field and documentation |
extensions/engram-context-engine/index.js |
Speaker extraction, LLM-only afterTurn, engram_search/engram_store tools |
extensions/engram-context-engine/manifest.json |
Synced |
extensions/engram-context-engine/package.json |
Synced |
extensions/engram-context-engine/openclaw.plugin.json |
Synced |
✅ Test Results
- 12/12 test suite passing (100%)
- Cross-session recall verified
- Speaker attribution verified
- Envelope noise filtering verified
- Short message gate verified
- Car insurance policy recall cross-session verified
🗜️ Session Compaction System
Engram includes a full session compaction engine that replaces OpenClaw's default compaction when enabled:
- Opt-in via
ownsCompaction: truein plugin config (default: false, defers to OpenClaw runtime) - Smart transcript splitting — keeps the last 12 messages as recent tail, compacts everything older
- Durable memory extraction — scans older messages for keywords like "remember", "favorite", "always", "never", "birthday", "policy" and extracts them before discarding
- Envelope noise filtering — strips Discord metadata, JSON blobs, tool outputs, and messages >800 chars from compaction summaries
- Structured summary generation — produces a 4-section summary: Objective, Established facts, Decisions made, Open loops
- Memory flush to disk — writes compaction summaries to
memory/YYYY-MM-DD-agent-hash.mdso the ingest pipeline can index them into Neo4j - Deduplication — durable records are deduped before persisting to avoid redundant facts
- Token tracking — reports tokensBefore/tokensAfter so you can monitor compression ratios