sibyl-memory-hermes
Sibyl Memory SDK + bundled Hermes plugin payload. Local-first, SQLite-backed, structured-tier memory for Hermes v0.13+ (and any Python orchestration that wants direct SDK access).
The package ships two things:
SibylMemoryProvider: a framework-agnostic SDK class. Call it directly from any Python code that wants structured local memory.- A bundled Hermes plugin payload: a thin adapter implementing Hermes v0.13's
MemoryProviderABC. Installed into$HERMES_HOME/plugins/sibyl/by thesibyl-memory-hermes install-pluginconsole script.
Memory content lives on the user's own machine, never on our servers. Built on sibyl-memory-client, the SDK foundation.
Install (Hermes path)
Hermes' loader uses filesystem discovery, NOT pip entry points. A pip install alone won't make Sibyl visible to Hermes: the install-plugin console script bridges the gap.
pip install sibyl-memory-hermes
sibyl-memory-hermes install-plugin
Sibyl Memory runs on Linux, macOS (Apple Silicon and Intel), and Windows through WSL2. Native Windows is not supported.
Then edit ~/.hermes/config.yaml:
memory:
provider: sibyl
Restart Hermes. Four tools become available to the agent:
sibyl_remember(category, name, body): store a structured factsibyl_recall(category, name): look up a known factsibyl_search(query). FTS5 search across all four tiers (entities, state, journal, reference); hits are tier-taggedsibyl_list(category?, status?): browse what's remembered
Optional: lift the 5 MB free-tier cap by binding your account:
pip install sibyl-memory-cli
sibyl init
Direct SDK use (any Python orchestration)
from sibyl_memory_hermes import SibylMemoryProvider
provider = SibylMemoryProvider() # auto-loads ~/.sibyl-memory/credentials.json
provider.remember("project", "atlas", {"status": "shipping v2 friday"})
provider.recall("project", "atlas") # → {id, tenant_id, category, name, body, ...}
provider.set_state("active_branch", {"name": "v0.3.1"})
provider.save_context(
inputs={"user": "what changed in v0.3.1?"},
outputs={"assistant": "..."},
)
provider.search("v0.3.1") # FTS5 across entities + state + reference + journal
Environment overrides
| Var | Default | What it does |
|---|---|---|
SIBYL_TENANT_ID |
unset | Non-secret tenant override. When set to a non-empty value it becomes the active tenant and wins over the tenant in credentials.json. Blank or unset leaves tenant resolution untouched. This is an identifier, not a secret. |
Precedence: explicit SIBYL_TENANT_ID > credentials.json (tenant_id then account_id) > the shared default tenant. Set it when one machine or container needs to target a specific tenant without editing the credential file.
Why "local-first"?
Mem0, Zep, Honcho, and most other agent-memory products centralize user context on their servers. The Sibyl Memory Plugin keeps the data on the user's disk. Our cloud schema has no memory-content tables. Even with admin DB access we cannot read what users have written. That's the difference between "we promise we don't" and "we structurally can't."
| Sibyl Memory Plugin | Typical hosted memory | |
|---|---|---|
| Memory content lives | on user's disk | on vendor's servers |
| Query latency | local SQLite (sub-ms) | round-trip + vector search |
| Privacy claim | structurally enforced | policy-only |
| Free-tier cost to vendor | near-zero | scales with users |
Architecture: five tiers, not one bucket
The provider routes operations onto the appropriate memory tier instead of dumping everything into a single vector store:
| Intent | Tier | Storage call |
|---|---|---|
| save the conversation turn | COLD journal | save_context(inputs, outputs) |
| remember a fact | WARM entity | remember(category, name, body) |
| current state | HOT state | set_state(key, body) |
| lookup a runbook | REFERENCE | set_reference(key, body) |
| archive stale entity | ARCHIVE | archive(category, name) |
| search by content | FTS5 cross-tier | search(query) → tier-tagged hits |
Different intents, different lookups, no embedding model required. FTS5 covers full-text search out of the box.
Hermes contract
The Hermes plugin is implemented by a bundled adapter at _hermes_plugin/adapter.py. The adapter is copied into $HERMES_HOME/plugins/sibyl/ by the install-plugin console script and is what Hermes' filesystem loader picks up. The adapter implements Hermes v0.13's MemoryProvider ABC and delegates every call to SibylMemoryProvider. Verified against hermes-agent through 0.19.0 (current): the adapter loads via the live ABC and instantiates cleanly.
The SDK class itself (SibylMemoryProvider) is framework-agnostic: it does not inherit from any framework ABC. This is the v0.3.0 architecture shift. v0.2.x and earlier attempted soft-inheritance via a broken import path; that path was removed and the adapter pattern replaced it.
Activation
Most users get here via the sibyl init CLI (from sibyl-memory-cli), which writes ~/.sibyl-memory/credentials.json after browser authentication. The provider auto-detects this file on construction.
For pre-activation use (tests, internal tooling):
from sibyl_memory_hermes import SibylMemoryProvider
provider = SibylMemoryProvider(
db_path="/tmp/test-memory.db",
tenant_id="test-user",
autoload_credentials=False,
)
Free tier
- 5 MB local soft cap (with server-authoritative tier verification at the cap boundary)
- Single device
- All five tiers (HOT/WARM/COLD/REFERENCE/ARCHIVE)
- FTS5 full-text search across entities + state + reference + journal
- Multi-tenant isolation
- Per-profile memory isolation: each Hermes profile gets its own DB automatically (
<HERMES_HOME>/sibyl/profiles/<name>/memory.db), so specialist agents don't share or leak memory
Paid tiers (Stake, Sync, Lifetime, Enterprise) unlock self-learning, the memory check-up, no cap, and (in build) cross-device encrypted sync. See docs.sibyllabs.org/memory/tiers.
Documentation
- Full docs: docs.sibyllabs.org/memory/
- Hermes integration guide: docs.sibyllabs.org/memory/integrations#hermes
- Install guide: docs.sibyllabs.org/memory/install
License
MIT. Package on PyPI: pypi.org/project/sibyl-memory-hermes.
Citation
The Sibyl Memory Plugin holds #2 globally on the LongMemEval Oracle benchmark. The benchmark methodology and report are at blog.sibylcap.com/longmemeval-v2.
Metadata
Release files for sibyl-memory-hermes 0.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sibyl_memory_hermes-0.4.1.tar.gz | 63.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sibyl_memory_hermes-0.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 108.4 kB
Release files / sibyl_memory_hermes-0.4.1.tar.gz
| Download URL | sibyl_memory_hermes-0.4.1.tar.gz |
|---|---|
| Size | 63.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c445022f6e20e5e27b19d0feb92ba0c505a535f393530d3f1740ad968228ce0f
|
|
BLAKE2b-256 checksum How to use checksums |
51aa91f01461c52dc71312a9248fbb9d5942e454947c106f13e6f4b033f8a825
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / sibyl_memory_hermes-0.4.1-py3-none-any.whl
| Download URL | sibyl_memory_hermes-0.4.1-py3-none-any.whl |
|---|---|
| Size | 44.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b0ce0df414347cb83e13284cb60ebe975123f81bdc16081e05ddbd2ed6b40491
|
|
BLAKE2b-256 checksum How to use checksums |
ffce68e56e9aa7fd3983dfdf0ebcb92e7b37de7c36116b6d20b15d470713165c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|