Hermes Agent memory provider plugin backed by Cashew thought-graph memory.
Project description
hermes-cashew
A Hermes Agent memory provider plugin that stores conversation context in a local Cashew thought graph with semantic search and automatic context recall. Get from zero to a working install in under five minutes.
v0.2.0 brings semantic search via sqlite-vec, recursive graph traversal, expanded configuration (31 keys with sane defaults), and zero-config startup.
Prerequisites
- Hermes Agent installed
cashew-brain>=1.0.0— installed automatically byhermes plugins installsqlite-vec— optional, enables semantic search (install below if wanted)
Install
hermes plugins install magnus919/hermes-cashew
This clones the repository to ~/.hermes/plugins/cashew/ and registers the
plugin entry point. After install, restart the gateway:
hermes gateway restart
Register with Hermes
After installing, set cashew as the active memory provider:
hermes config set memory.provider cashew
hermes gateway restart
Or use the interactive setup (v0.2.0 now includes cashew in the provider picker):
hermes memory setup
Zero-Config Startup
hermes-cashew works out of the box — all 31 configuration keys have sane
defaults. Create ~/.hermes/cashew.json only if you want to override them:
cat > ~/.hermes/cashew.json << 'EOF'
{
"cashew_db_path": "cashew/brain.db",
"embedding_model": "sentence-transformers/all-MiniLM-L6-v2",
"recall_k": 5,
"user_domain": "cli/user",
"ai_domain": "cli/ai",
"sync_queue_timeout": 30,
"vec_dimension": 384,
"gc_interval_turns": 100,
"gc_delete_probability": 0.01,
"enable_query_decomposition": true,
"max_tokens_per_node": 512,
"feature_bfs_retrieval": true,
"feature_semantic_search": true,
"feature_context_summarization": false,
"max_depth": 3,
"similarity_threshold": 0.7,
"max_nodes_per_query": 20
}
EOF
Full Config Reference
| Key | Default | Description |
|---|---|---|
cashew_db_path |
cashew/brain.db |
Path to SQLite DB, relative to hermes_home |
embedding_model |
sentence-transformers/all-MiniLM-L6-v2 |
Embedding model for retrieval |
recall_k |
5 |
Max nodes returned per recall query |
sync_queue_timeout |
30 |
Seconds to wait for sync worker drain on shutdown |
user_domain |
cli/user |
Domain label for user messages |
ai_domain |
cli/ai |
Domain label for AI messages |
vec_dimension |
384 |
Embedding dimension (fixed for v0.2.0) |
gc_interval_turns |
100 |
GC run frequency |
gc_delete_probability |
0.01 |
Node deletion probability per GC |
enable_query_decomposition |
true |
Enable query decomposition |
max_tokens_per_node |
512 |
Token limit per context node |
feature_bfs_retrieval |
true |
Enable BFS graph traversal |
feature_semantic_search |
true |
Enable sqlite-vec semantic search |
feature_context_summarization |
false |
Enable context summarization |
max_depth |
3 |
Max BFS traversal depth |
similarity_threshold |
0.7 |
Minimum similarity score |
max_nodes_per_query |
20 |
Maximum nodes per query |
Environment variables override config values: prefix any key with CASHEW_
(e.g. CASHEW_RECALL_K=10).
Verify the Install
hermes gateway restart # ensure gateway picks up the new plugin
hermes memory status
Expected output shows Provider: cashew with Plugin: installed and Status: available.
How It Works
hermes-cashew provides two LLM-accessible tools:
cashew_query— searches the local thought graph for context relevant to the current conversation. Uses sqlite-vec for semantic search when available, with keyword fallback on macOS or when the extension is unavailable.cashew_extract— explicitly persists a conversation turn into the graph. The agent can call this when it judges a turn contains worth-remembering knowledge.
Both tools are registered automatically when Hermes loads the plugin.
On each session start, prefetch() retrieves relevant context from the graph
and injects it into the system prompt.
Semantic Search (Optional)
sqlite-vec is an optional SQLite extension that enables vector similarity search.
Without it, cashew falls back to keyword-based retrieval — still functional,
but less precise.
Install:
pip install sqlite-vec
You may also need to enable load extension support in your SQLite build:
sqlite3_config(SQLITE_ENABLE_LOAD_EXTENSION)
If sqlite-vec is not available at runtime, you'll see this INFO log on startup:
sqlite-vec not available; semantic search will use fallback
This is normal and expected on systems without sqlite-vec support.
Uninstall
hermes plugins remove cashew
hermes config set memory.provider built-in # revert to built-in memory
rm -rf ~/.hermes/cashew # optional: remove the local graph data
Troubleshooting
Plugin: NOT installed in hermes memory status
-
cashew-brain not installed in Hermes venv —
hermes plugins installdoes not automatically install Python package dependencies into Hermes's venv. Install it manually:~/.hermes/hermes-agent/venv/bin/python3 -m ensurepip ~/.hermes/hermes-agent/venv/bin/python3 -m pip install cashew-brain
-
Stale pycache or entry point not registered — If cashew-brain is installed but the plugin still shows NOT installed:
cd ~/.hermes/plugins/cashew && \ ~/.hermes/hermes-agent/venv/bin/python3 -m pip install -e . hermes gateway restart
Status: not available
The plugin is available when cashew-brain is importable. Check:
~/.hermes/hermes-agent/venv/bin/python3 -c "from core.context import ContextRetriever; print('ok')"
If this fails, cashew-brain is not installed in the Hermes venv (see above).
Hermes-agent venv has no pip
Hermes-agent creates a minimal venv without pip. Bootstrap it first:
~/.hermes/hermes-agent/venv/bin/python3 -m ensurepip
~/.hermes/hermes-agent/venv/bin/python3 -m pip install <package>
Do not run pip install from outside the venv targeting the hermes python,
or the package will land in the wrong environment.
Embedding model download on first use
cashew-brain bundles sentence-transformers. The first retrieval operation may
trigger a ~500 MB embedding model download. To avoid this in automated environments:
HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 HF_DATASETS_OFFLINE=1 hermes ...
Development
git clone https://github.com/magnus919/hermes-cashew
cd hermes-cashew
pip install -e ".[dev]" # macOS
python3 -m pip install -e ".[dev]" # Linux
pytest # run the test suite
Tests require no network access and mock the embedding model automatically
(HF_HUB_OFFLINE=1 is set by tests/conftest.py).
Architecture Notes
The plugin uses a dual-path loading strategy to support both pip install -e .
(development) and hermes plugins install (flat-entry loader):
- pip / test path: Python's namespace package mechanism resolves
plugins.memory.cashewtoplugins/memory/cashew/__init__.pyviasys.path - flat-entry path: Hermes loads
~/.hermes/plugins/cashew/__init__.pyas_hermes_user_memory.cashew. The root__init__.pydetects this context and exec's the nested implementation withsys.modulespatched so relative imports resolve correctly
License
See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_cashew-0.3.0.tar.gz.
File metadata
- Download URL: hermes_cashew-0.3.0.tar.gz
- Upload date:
- Size: 203.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e0ddd683d5f5734c92b457fa143fa43c9f95c3e0d63a5e0d5426fbf4c8fca04
|
|
| MD5 |
f666074ba7a95bcb11134166dd8da965
|
|
| BLAKE2b-256 |
4eeacdca280813adb404fd62ac60419683ee505e750ee0bb4b0a92de31de52d6
|
Provenance
The following attestation bundles were made for hermes_cashew-0.3.0.tar.gz:
Publisher:
release.yml on magnus919/hermes-cashew
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_cashew-0.3.0.tar.gz -
Subject digest:
4e0ddd683d5f5734c92b457fa143fa43c9f95c3e0d63a5e0d5426fbf4c8fca04 - Sigstore transparency entry: 1521191497
- Sigstore integration time:
-
Permalink:
magnus919/hermes-cashew@f41cf76a531adb7df0c991f8b83bfde899f18028 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/magnus919
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f41cf76a531adb7df0c991f8b83bfde899f18028 -
Trigger Event:
push
-
Statement type:
File details
Details for the file hermes_cashew-0.3.0-py3-none-any.whl.
File metadata
- Download URL: hermes_cashew-0.3.0-py3-none-any.whl
- Upload date:
- Size: 32.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e1a14996b203b5f135c17bf85b13df81495b33fe5f1d854be28ed8cc5b65577
|
|
| MD5 |
45e2f1ede8c798f1c00a5dfa11561545
|
|
| BLAKE2b-256 |
4072f1f4593c03a673058f26a1524f2de58a1798cb3e586ea544b16e0e77a680
|
Provenance
The following attestation bundles were made for hermes_cashew-0.3.0-py3-none-any.whl:
Publisher:
release.yml on magnus919/hermes-cashew
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
hermes_cashew-0.3.0-py3-none-any.whl -
Subject digest:
0e1a14996b203b5f135c17bf85b13df81495b33fe5f1d854be28ed8cc5b65577 - Sigstore transparency entry: 1521191561
- Sigstore integration time:
-
Permalink:
magnus919/hermes-cashew@f41cf76a531adb7df0c991f8b83bfde899f18028 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/magnus919
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f41cf76a531adb7df0c991f8b83bfde899f18028 -
Trigger Event:
push
-
Statement type: