Fidelis Memory
Memory serverOfficial Hermes Labs project
Created by Hermes Labs
Published in hermes-labs-ai/fidelis. Publisher page
25 GitHub stars
What it is
Zero-LLM agent memory for Claude Code and AI agents: local-first BM25, dense-vector, and reciprocal-rank-fusion retrieval. Returns original passages verbatim by default. Available on PyPI as fidelis-memory. Apache-2.0.
AutoGineer overview, from the brain’s own files
Fidelis is a local-first memory infrastructure designed to provide AI agents with persistent, accurate recall of stored notes. Unlike systems that rely on generative models to summarize or rewrite information, Fidelis focuses on returning original passages verbatim. It operates as a background service on the user's machine, utilizing a vector store and hybrid retrieval techniques—including BM25 and dense-vector search with reciprocal rank fusion—to ensure high-fidelity recall. By integrating via MCP, it allows agents to store, recall, correct, and inspect memory records without requiring external API keys or cloud-based storage, making it suitable for developers and autonomous agents that need to maintain context across sessions.
How it works
Memory model: Vector store
AutoGineer overview, from the brain’s own files
Fidelis runs as a background service on the user's machine, managing a local store of text and Markdown notes. When a user or agent saves a note, it is indexed using local embeddings. The system provides an MCP interface for agents to interact with this memory. Retrieval is performed through a combination of keyword-based BM25 search and dense-vector search, which can be fused to find relevant passages. The system supports versioning through corrections, allowing records to be superseded without deleting historical data.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 5 |
| assets | attachments | 1 |
| docs | docs | 19 |
| examples | examples | 18 |
| scripts | scripts | 1 |
| src | source-code | 42 |
| tests | tests | 67 |
| .agents | folder | 1 |
| .hermes | folder | 3 |
| Formula | folder | 1 |
| bench | folder | 144 |
| claude-plugin | folder | 4 |
| experiments | folder | 30 |
| extensions | folder | 1 |
Requirements
Runtimes: Python >=3.10
Databases: Chroma
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
- Not scanned by AutoGineerIts dependencies are installed by pip or uv when you run it and were not scanned by AutoGineer (3 declared). https://pypi.org/project/fidelis-memory/
Created by Hermes Labs. Published in hermes-labs-ai/fidelis. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Install the Fidelis memory server and initialize the background service.
- Connect the agent to the Fidelis MCP server.
- Use the 'fidelis_store' tool to save important facts or decisions.
- Use the 'fidelis_recall' tool to retrieve original text based on natural language queries.
- Use 'fidelis_correct' to update or supersede existing records while maintaining history.
- Inspect memory status and availability using 'fidelis_health'.
- “Use Fidelis to find my Atlas billing migration note. What must happen before we retry? Quote the relevant text.”
- The agent queries the Fidelis memory server and returns the exact sentence: 'Do not retry until the idempotency fix is verified.'
- “Store this note: The API endpoint for the user service has changed to /v2/users.”
- The agent uses the fidelis_store tool to save the fact, which is then indexed and available for future retrieval.
Documentation by Hermes Labs
<!-- mcp-name: io.github.hermes-labs-ai/fidelis-memory -->
<div align="center">
Fidelis Memory
<img src="assets/fidelis-memory-artwork.png" width="420" alt="Fidelis Memory mascot" />
Your agent can forget a summary. Fidelis brings back the note.
Local memory for Codex, Claude Code, and other agents: save text across sessions and retrieve the original passage when it matters.
by Hermes Labs
PyPI · Connect an agent · Technical reference
</div>
A project summary might say “billing migration rolled back.” The original note says why it failed and do not retry until the idempotency fix is verified. When your next session depends on that condition, the missing sentence matters.
Fidelis stores your Markdown and text notes and retrieves their stored wording. Its default retrieval does not ask a generative model to rewrite your memory.
Try it with one note
This path supports Python 3.10+, macOS or Ubuntu, and a local Ollama service. Start Ollama if needed (ollama serve in a separate terminal). No model API key is required. The current release is 0.3.0rc1.
ollama pull nomic-embed-text
python3 -m venv ~/.venvs/fidelis
source ~/.venvs/fidelis/bin/activate
python3 -m pip install "fidelis-memory[hybrid]==0.3.0rc1"
fidelis init
demo_dir=$(mktemp -d)
cat > "$demo_dir/atlas.md" <<'NOTE'
Atlas billing migration:
Duplicate charges appeared in staging. Rolled back.
Do not retry until the idempotency fix is verified.
NOTE
fidelis watch "$demo_dir" --once
fidelis recall-hybrid "Atlas billing migration retry condition" --tier zero_llmfidelis watch and fidelis recall-hybrid use the background service started by fidelis init.
Look for both the rollback and the retry condition in the retrieved text. This is retrieval of a saved note, not a generated answer. For your own files, replace "$demo_dir" with a notes directory. If retrieval fails, run fidelis health and confirm Ollama has nomic-embed-text available. Keep the virtual environment after fidelis init; the background service uses it.
What this changes on your machine: fidelis init installs a per-user background service (launchd on macOS, systemd --user on Linux) that starts fidelis-server automatically at login. fidelis watch sends the note to that server, which saves it in the local store at ~/.cogito/store by default, not in the temporary demo directory. fidelis recall-hybrid also queries that same running server and searches the whole shared store, so its results can include notes you saved earlier, not only the demo note. The watcher also records ingested files in ~/.fidelis/watched.json. To remove the default service on macOS, run fidelis init --uninstall; it stops the service and deletes the launchd plist only. On Linux, find the installed unit with systemctl --user list-unit-files '*fidelis-server*', then run systemctl --user disable --now <unit>, delete that unit file from ~/.config/systemd/user/, and run systemctl --user daemon-reload. Neither path deletes your data. The store is shared by everything you save with Fidelis, so deleting ~/.cogito/store erases all of it, not just the demo note; do that only on a throwaway install. Also delete the temporary demo directory ($demo_dir), and ~/.fidelis/watched.json if you want its record of the file path gone.
Connect an agent
Once the note is retrievable locally, install the MCP connection for your client:
fidelis mcp install --client codex
# Or, for Claude Code:
fidelis mcp installRestart the client and try: “Use Fidelis to find my Atlas billing migration note. What must happen before we retry? Quote the relevant text.”
The client gets tools to recall, store, correct, fetch, and inspect memory. It decides when to call them; installing the connection does not make every turn recall automatically. Other clients and uninstall commands include Cursor, Gemini CLI, Copilot CLI, and OpenClaw. A separate Pi extension provides prompt-time recall.
What Fidelis preserves
Original wording.
watch,store, and other verbatim write paths keep the text you supplied, so retrieval can return the condition that a summary might omit.Local retrieval. Fast vector search is the default MCP recall path. Explicit hybrid search combines keyword and vector results without a generative LLM at its
zero_llmtier; local embeddings still require Ollama.Corrections over time. A correction can supersede a prior record without erasing it. Recall can show validity and historical status instead of silently replacing the old note.
Fidelis also has optional extraction and model-assisted routes. Those can transform or filter inputs; use the verbatim path when the original wording is the point. Retrieved text can still be wrong or out of date, and your agent's model provider may see it when answering.
Current scope
Fidelis 0.3.0rc1 is a single-machine pre-release, not a hosted team memory service. The LongMemEval-S retrieval run measured whether the redesigned default path retrieved material across 470 questions; it did not measure answer accuracy. See the results, user-fit guide, and security policy for deeper detail.
Full reference · Upgrade notes · Contribute · Changelog
Apache-2.0. Hermes Labs builds agentic infrastructure for autonomous systems.
WRITEUP-LONGMEMEVAL-20260423.md
cogito-ergo on LongMemEval — Benchmark Writeup
Date: 2026-04-23
Status: Reproducibility artifact. Not a leaderboard submission.
Author: Hermes Labs (roli-lpci)
What cogito-ergo is
cogito-ergo is an open-source agent memory system with two retrieval paths:
Path A (
/recall) — atomic-fact recall. Stores 50–200 char facts. Tuned for paraphrase queries. The production path.Path B (
/recall_hybrid) — session-retrieval. Stores multi-turn sessions (2000+ chars). BM25 + nomic dense + RRF fusion, turn-level chunking, LLM filter tier. Tuned for LongMemEval.
This writeup covers Path B's performance on LongMemEval_S. Path A is not evaluated here — it handles a different workload.
Baseline and full result history
| Version | R@1 | Notes | LLM? |
|---|---|---|---|
| Original baseline | 56.0% | Dense-only retrieval | No |
| + nomic prefixes | 60.9% | search_query: / search_document: | No |
| + BM25 hybrid | 73.2% | BM25 + dense + RRF | No |
| + Turn-level chunks | 66.8% | Session split at turn boundaries | No |
| Combined (all three) | 83.2% | Stage 1 ceiling, zero-LLM | No |
| + Regex router + qwen-turbo | 88.9% | Classify query → LLM filter | Selective |
| + Hardset flagship (runB, v33) | 93.4% | 37-question hardset; see integrity note | Selective |
| + Runtime escalation (runO, v34) | 92.3% | No hardset; honest baseline | Selective |
| + Temporal boost + runtime (runP, v35) | 96.4% | Temporal score multiplier; no hardset | Selective |
The number we report: R@1 = 96.4% (453/470) on LongMemEval_S, run ID runP-v35, 2026-04-18.
Exact command to reproduce:
cd ~/Documents/projects/cogito-ergo
python3 bench/longmemeval_combined_pipeline_v35.py \
--data-dir ~/Documents/projects/LongMemEval/data \
--run-id runP-v35-repro \
--filter-model qwen-turbo # requires DASHSCOPE_API_KEYFor zero-LLM stage only (83.2% R@1, no API key needed):
# Set --no-llm-filter flag in the pipeline script (or use bench/longmemeval_hybrid.py directly)Why this is NOT a leaderboard submission
The gap is not the issue. The metric is.
Mastra's published 94.87% is QA accuracy (Task B) — measured with gpt-4o-mini as both reader and judge, using evaluate_qa.py from the LongMemEval repo.
cogito-ergo's 96.4% is retrieval R@1 (Task A) — measured with recall_any@1, checking whether the gold session appears in position 1 of the ranked list.
These are different tasks. Retrieval R@1 is an upper bound on QA accuracy — a system with 96.4% retrieval R@1 can achieve at most 96.4% QA accuracy (assuming perfect answer generation). Our measured QA accuracy with qwen-max is 54.2% (runJ-v33), but qwen-max is not comparable to gpt-4o-mini as a reader.
To make a legitimate leaderboard comparison we'd need to run evaluate_qa.py on our runP-v35 retrieval output using gpt-4o-mini. Estimated cost: ~$1.24. Blocked on OpenAI API key.
The path chosen is writeup, not leaderboard. Honest about what we measured.
Per-category R@1 (runP-v35, 470 questions)
| Category | n | R@1 | Notes |
|---|---|---|---|
| single-session-user | 64 | 100.0% | Perfect |
| multi-session | 121 | 99.2% | 1 miss: 4-gold question |
| knowledge-update | 72 | 98.6% | 1 miss: 2-gold routing gap |
| single-session-assistant | 56 | 98.2% | 1 miss |
| temporal-reasoning | 127 | 92.1% | 10 misses — hardest category |
| single-session-preference | 30 | 86.7% | 4 misses — semantic gap |
17 total misses at R@1. Temporal-reasoning accounts for 59% of them.
Three novel findings worth naming
1. The demotion problem
LLM reranker filters can demote gold sessions that retrieval already ranked #1. In the guard run analysis (runC), 15+ questions had gold at S1 position 1 but were demoted to position 2+ by the LLM filter. Standard RAG + LLM-reranker architectures have this failure mode; it is underreported. The verify-guard experiment attempted to fix it (restore S1 #1 if filter demotes it) but the guard activation code did not fire in runC — a bug, not a negative result.
2. Workload divergence kills transfer
Path B (session-retrieval, 96.4% on LongMemEval) scores 54% on cogito's own 31-case atomic-fact eval, vs 75% for Path A. BM25 adds noise on 50-200 char facts. The filter's 150-char snippet truncation mangles sessions. Single-workload tuning does not transfer. This is an argument for per-workload indexes rather than one unified retrieval architecture — and likely applies to any RAG system mixing short facts with long sessions.
3. The escalation rate problem
The intended escalation rate was ~10%. runP-v35 fired on 377/470 = 80% of questions. The calibration sample (65 SSU/multi-session questions) had a different confidence score distribution than preference questions, so the top1<0.8 or gap<0.07 threshold overfit. In production this would be prohibitively expensive. A proper calibration requires stratified sampling across all 6 qtypes.
What we'd change architecturally if pursuing leaderboard seriously
Per-workload indexes, not a unified index. Short facts (atomic memory) and long sessions (conversation history) should not share the same BM25 + dense index. The SESSION index uses turn-level chunks (~300 chars); the FACT index uses full entries. Separate retrieval pipelines, unified routing layer.
Temporal event extraction at ingest, not query time. 10/17 remaining misses are temporal-reasoning questions. The temporal boost (multiplies similarity scores for sessions whose text matches date patterns) helps (+7.1pp on TR) but is brittle. Extracting explicit event dates into a metadata field at ingest would let us answer "when did X happen last?" with a direct metadata filter rather than cosine similarity tricks.
QA reader model matters as much as retrieval. Our retrieval R@1 is 96.4%; our QA accuracy is 54.2% (qwen-max). The ceiling bottleneck is not retrieval — it's the reader. For leaderboard competition the right investment is a strong reader (gpt-4o-mini level) with multi-session context assembly, not more retrieval tuning. We are past retrieval diminishing returns.
Three concrete next experiments
Run evaluate_qa.py with gpt-4o-mini on runP-v35 retrieval output. Cost ~$1.24. This gives a fair comparison to Mastra's 94.87%. Requires OpenAI API key. Estimated outcome: ~94–95% QA accuracy (96.4% retrieval x ~98% reader accuracy on correct sessions).
Separate indexes for atomic facts vs sessions. Hypothesis: Path A's 75% on the 31-case eval rises to 85%+ and Path B's LongMemEval score stays flat. This tests whether the regression is index pollution or query distribution mismatch.
Run on LOCOMO and MemoryBench. LongMemEval_S is one benchmark. LOCOMO (personalized conversational memory, ~600 queries) and MemoryBench (structured memory retrieval) test different distribution shifts. If cogito hits 80%+ on both with the same architecture, the retrieval approach generalizes. If not, the current result is benchmark-specific.
Integrity checklist
[x] Evaluated on
longmemeval_s_cleaned.json(September 2025 version, HF: xiaowu0162/longmemeval-cleaned), 470 non-abstention questions[x] recall_any@1 definition matches LongMemEval's
eval_utils.py(any gold session in top-1)[x] Gold session IDs never exposed to retrieval or filter stages (code audit 2026-04-16, bench/BENCHMARK_INTEGRITY_AUDIT.md)
[x] Runtime-only escalation rule:
top1_score < 0.8 OR gap < 0.07. No hardset derived from test inspection[x] 17 misses listed by qid in results JSON
[ ] Mastra comparison unconfirmed: 94.87% metric type and dataset version not independently verified
[ ] QA accuracy (Task B) not measured with gpt-4o-mini (requires OpenAI API key)
[ ] Third independent reproduction run not complete
Artifacts
This writeup:
~/Documents/projects/cogito-ergo/WRITEUP-LONGMEMEVAL-20260423.mdResults JSON (per-question):
~/Documents/projects/research-corpus/agent-infra/raw/cogito-longmemeval-20260423.jsonrunP-v35 per_question:
bench/runs/runP-v35/per_question.jsonrunP-v35 aggregate:
bench/runs/runP-v35/aggregate.jsonBenchmark integrity audit:
bench/BENCHMARK_INTEGRITY_AUDIT.mdFull results history:
bench/RESULTS-SUMMARY.md
Compute notes
Full benchmark run: 752.7 seconds (~12.5 min) on macOS ARM
LLM cost: ~$2.50 total for 470 questions (mostly qwen-turbo; ~$0.0053/query avg)
Zero-LLM stage (83.2% R@1): $0, ~90ms/query
Model: nomic-embed-text (local Ollama) for dense retrieval; qwen-turbo (DashScope intl) for filter
367 files · 337 not served here
- .agents/skills/fidelis/SKILL.md (not served here)
- .cogito.example.json (not served here)
- .github/FUNDING.yml (not served here)
- .github/workflows/ci.yml (not served here)
- .github/workflows/release.yml (not served here)
- .github/workflows/scorecard.yml (not served here)
- .github/workflows/swh-archive.yml (not served here)
- .gitignore (not served here)
- .hermes/gate.toml (not served here)
- .hermes/hermes_gate_runner.py (not served here)
- .hermes/run_gate_runner.py (not served here)
- .pre-commit-config.yaml (not served here)
- .zenodo.json (not served here)
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CHANGELOG.md
- CITATION.cff (not served here)
- CODE_OF_CONDUCT.md
- COMPLIANCE-DRAFT.md
- CONTRIBUTING.md
- Dockerfile (not served here)
- Formula/fidelis.rb (not served here)
- GEMINI.md
- LICENSE
- PR_BODY.md
- README.md
- ROADMAP.md
- SECURITY.md
- STATUS.md
- WRITEUP-LONGMEMEVAL-20260423.md
- agents.md
- assets/fidelis-memory-artwork.png (not served here)
- bench/BENCHMARK_INTEGRITY_AUDIT.md (not served here)
- bench/DEFAULT-RETRIEVAL-METHODOLOGY.md (not served here)
- bench/IMPROVEMENT-COMPARISON.md (not served here)
- bench/LAUNCH-FRAMING.md (not served here)
- bench/METHODOLOGY.md (not served here)
- bench/MULTIQUERY-ANALYSIS.md (not served here)
- bench/R&D-PLAN-2026-04-15.md (not served here)
- bench/REGRADE_README.md (not served here)
- bench/RESULTS-SUMMARY.md (not served here)
- bench/REVIEW-QUEUE.md (not served here)
- bench/ROADMAP-95-v2.md (not served here)
- bench/ROADMAP-95.md (not served here)
- bench/VALIDATION_PACK.md (not served here)
- bench/analysis-pipeline-2026-04-15.json (not served here)
- bench/analyze_pipeline.py (not served here)
- bench/analyze_thresholds.py (not served here)
- bench/benchmark.py (not served here)
- bench/cases.json (not served here)
- bench/claude_code_session_eval.py (not served here)
- bench/claude_code_user_eval.py (not served here)
- bench/diff_runs.py (not served here)
- bench/eval-cache-provenance-0.3.0rc1.json (not served here)
- bench/eval.py (not served here)
- bench/eval_cases.json (not served here)
- bench/hardset.json (not served here)
- bench/longmemeval_combined.py (not served here)
- bench/longmemeval_combined_pipeline.py (not served here)
- bench/longmemeval_combined_pipeline_dates.py (not served here)
- bench/longmemeval_combined_pipeline_flagship.py (not served here)
- bench/longmemeval_combined_pipeline_guard.py (not served here)
- bench/longmemeval_combined_pipeline_v31.py (not served here)
- bench/longmemeval_combined_pipeline_v32.py (not served here)
- bench/longmemeval_combined_pipeline_v33.py (not served here)
- bench/longmemeval_combined_pipeline_v33_ablate.py (not served here)
- bench/longmemeval_combined_pipeline_v34.py (not served here)
- bench/longmemeval_combined_pipeline_v35.py (not served here)
- bench/longmemeval_combined_verify.py (not served here)
- bench/longmemeval_default.py (not served here)
- bench/longmemeval_full_pipeline.py (not served here)
- bench/longmemeval_hybrid.py (not served here)
- bench/longmemeval_multiquery.py (not served here)
- bench/longmemeval_prefix.py (not served here)
- bench/longmemeval_queryexp.py (not served here)
- bench/longmemeval_rerank.py (not served here)
- bench/longmemeval_retrieval.py (not served here)
- bench/longmemeval_scaffold_pref.py (not served here)
- bench/longmemeval_scaffold_temporal.py (not served here)
- bench/longmemeval_tuned.py (not served here)
- bench/longmemeval_turnlevel.py (not served here)
- bench/phase-0/LEARNINGS.md (not served here)
- bench/phase-2/build_hardset.py (not served here)
- bench/phase-2/learned_router.pkl (not served here)
- bench/phase-2/learned_router.py (not served here)
- bench/phase-2/retriever_contribution.json (not served here)
- bench/phase-2/retriever_contribution.md (not served here)
- bench/phase-2/retriever_contribution.py (not served here)
- bench/phase-2/retriever_contribution_logged.py (not served here)
- bench/phase-2/run_learned_router.sh (not served here)
- bench/phase-4/TEMPORAL_SCAFFOLD_DESIGN.md (not served here)
- bench/phase-4/temporal_scaffold.py (not served here)
- bench/phase-6/FLAGSHIP_DESIGN.md (not served here)
- bench/phase-6/flagship_escalation.py (not served here)
- bench/qa_eval.py (not served here)
- bench/qa_eval_runJ-v33.json (not served here)
- bench/qa_eval_v2_runP-v35_qwen-max_top5_regraded.json (not served here)
- bench/qa_eval_v3_routing.py (not served here)
- bench/qwen_native_arena.py (not served here)
- bench/qwen_native_arena_results.md (not served here)
- bench/r5_ceiling_diagnostic.md (not served here)
- bench/regrade_qa.py (not served here)
- bench/results-2026-04-15.json (not served here)
- bench/results-combined-2026-04-15.json (not served here)
- bench/results-combined-pipeline-2026-04-15.json (not served here)
- bench/results-default-0.3.0rc1.json (not served here)
- bench/results-default-smoke-0.3.0rc1.json (not served here)
- bench/results-fixed-2026-04-15.json (not served here)
- bench/results-flagship-2026-04-15.json (not served here)
- bench/results-guard-2026-04-17.json (not served here)
- bench/results-hybrid-2026-04-15.json (not served here)
- bench/results-multiquery-2026-04-15.json (not served here)
- bench/results-prefix-2026-04-15.json (not served here)
- bench/results-rerank-2026-04-15.json (not served here)
- bench/results-tuned-2026-04-15.json (not served here)
- bench/results-turnlevel-2026-04-15.json (not served here)
- bench/results-v31-2026-04-17.json (not served here)
- bench/results-v32-2026-04-17.json (not served here)
- bench/results-v33-2026-04-18.json (not served here)
- bench/run_ablations.py (not served here)
- bench/run_all.sh (not served here)
- bench/run_all_experiments.sh (not served here)
- bench/run_chunked.py (not served here)
- bench/run_improvements.sh (not served here)
- bench/runs/baseline-seed2/aggregate.json (not served here)
- bench/runs/baseline-seed2/per_question.json (not served here)
- bench/runs/baseline/aggregate.json (not served here)
- bench/runs/baseline/per_question.json (not served here)
- bench/runs/claude_code_user_eval.json (not served here)
- bench/runs/fix-assistant-text/aggregate.json (not served here)
- bench/runs/fix-assistant-text/per_question.json (not served here)
- bench/runs/router-v2/aggregate.json (not served here)
- bench/runs/router-v2/per_question.json (not served here)
- bench/runs/runA-temporal-scaffold/aggregate.json (not served here)
- bench/runs/runA-temporal-scaffold/per_question.json (not served here)
- bench/runs/runB-flagship/aggregate.json (not served here)
- bench/runs/runB-flagship/per_question.json (not served here)
- bench/runs/runC-guard/aggregate.json (not served here)
- bench/runs/runC-guard/per_question.json (not served here)
- bench/runs/runD-temporal/per_question.json (not served here)
- bench/runs/runE-pref/per_question.json (not served here)
- bench/runs/runF-queryexp/per_question.json (not served here)
- bench/runs/runH-v31/per_question.json (not served here)
- bench/runs/runI-v32/per_question.json (not served here)
- bench/runs/runJ-v33/aggregate.json (not served here)
- bench/runs/runJ-v33/per_question.json (not served here)
- bench/runs/runK-ablate-tempboost/per_question.json (not served here)
- bench/runs/runO-runtime-escalate/aggregate.json (not served here)
- bench/runs/runO-runtime-escalate/per_question.json (not served here)
- bench/runs/runP-v35/aggregate.json (not served here)
- bench/runs/runP-v35/per_question.json (not served here)
- bench/runs/smoke-D-temporal/aggregate.json (not served here)
- bench/runs/smoke-D-temporal/per_question.json (not served here)
- bench/runs/smoke-ablate-test/aggregate.json (not served here)
- bench/runs/smoke-ablate-test/per_question.json (not served here)
- bench/runs/smoke-guard/aggregate.json (not served here)
- bench/runs/smoke-guard/per_question.json (not served here)
- bench/runs/smoke-qa/per_question.json (not served here)
- bench/runs/smoke-v31/aggregate.json (not served here)
- bench/runs/smoke-v31/per_question.json (not served here)
- bench/runs/smoke-v32/aggregate.json (not served here)
- bench/runs/smoke-v32/per_question.json (not served here)
- bench/runs/smoke-v33/aggregate.json (not served here)
- bench/runs/smoke-v33/per_question.json (not served here)
- bench/runs/step1-gapfix/aggregate.json (not served here)
- bench/runs/step1-gapfix/per_question.json (not served here)
- bench/runs/step2-dates/aggregate.json (not served here)
- bench/runs/step2-dates/per_question.json (not served here)
- bench/scaffold_arena.py (not served here)
- bench/scaffold_arena_results.md (not served here)
- bench/scaffold_arena_round2.py (not served here)
- bench/scaffold_arena_round2_results.md (not served here)
- bench/scaffold_transfer_validation.md (not served here)
- bench/scaffold_transfer_validation.py (not served here)
- bench/scaffold_transfer_validation_raw.json (not served here)
- bench/sweep_underperformance_diagnosis.md (not served here)
- claude-plugin/.claude-plugin/plugin.json (not served here)
- claude-plugin/.mcp.json (not served here)
- claude-plugin/README.md (not served here)
- claude-plugin/skills/fidelis-memory/SKILL.md (not served here)
- codemeta.json (not served here)
- docker-compose.yml (not served here)
- docs/DISPATCHER_DESIGN.md
- docs/GENERALIZABILITY_SKEPTIC.md
- docs/RELEASE-SCOPE.md
- docs/RELEASING.md
- docs/ROADMAP_CODEX.md
- docs/SCAFFOLD_DISPATCHER_V031.md
- docs/THRESHOLD-AUDIT.md
- docs/claude-code-memory-demo.md
- docs/full-reference.md
- docs/internal/FLAGSHIP-PAPER-DRAFT.md (not served here)
- docs/internal/PUBLISH-PLAN-20260425.md (not served here)
- docs/issue-62-sustained-write-restore-proof-2026-09-23.json (not served here)
- docs/issue-62-sustained-write-restore-proof-2026-09-23.md
- docs/releases/0.1.0.md (not served here)
- docs/releases/0.2.0.md (not served here)
- docs/releases/0.3.0rc1.md (not served here)
- docs/releases/release-readiness-0.1.0.md (not served here)
- docs/scaffold.md
- docs/user-fit.md
- examples/real-world/README.md (not served here)
- examples/real-world/bench-hardset-hit-at-5/README.md (not served here)
- examples/real-world/bench-hardset-hit-at-5/expected.json (not served here)
- examples/real-world/bench-hardset-hit-at-5/input.json (not served here)
- examples/real-world/correction-chain-temporal/README.md (not served here)
- examples/real-world/correction-chain-temporal/expected.json (not served here)
- examples/real-world/correction-chain-temporal/input.json (not served here)
- examples/real-world/mcp-client-config/README.md (not served here)
- examples/real-world/mcp-client-config/expected.json (not served here)
- examples/real-world/mcp-client-config/input-gemini-extension.json (not served here)
- examples/real-world/mcp-client-config/input-mcp.json (not served here)
- examples/real-world/retraction-and-ephemera-read-filter/README.md (not served here)
- examples/real-world/retraction-and-ephemera-read-filter/expected.json (not served here)
- examples/real-world/retraction-and-ephemera-read-filter/input.json (not served here)
- examples/real-world/retraction-and-ephemera-read-filter/pointers.json (not served here)
- examples/real-world/write-gate-screening/README.md (not served here)
- examples/real-world/write-gate-screening/expected.json (not served here)
- examples/real-world/write-gate-screening/input.json (not served here)
- experiments/DECISIONS.md (not served here)
- experiments/E0-baseline/compute_baseline.py (not served here)
- experiments/E0-baseline/receipt.json (not served here)
- experiments/E0-baseline/receipt.md (not served here)
- experiments/E1-decisions.md (not served here)
- experiments/E1-synthesis/adversarial-review.md (not served here)
- experiments/E1-synthesis/qa_eval_v3_E1_runP-v35.json (not served here)
- experiments/E1-synthesis/qa_eval_v3_E1_runP-v35_receipt.json (not served here)
- experiments/E1-synthesis/qa_eval_v3_E1_runP-v35_summary.json (not served here)
- experiments/E1-synthesis/receipt.md (not served here)
- experiments/E2-gpt4o/adversarial-review.md (not served here)
- experiments/E2-gpt4o/qa_eval_v3_E2_runP-v35.json (not served here)
- experiments/E2-gpt4o/qa_eval_v3_E2_runP-v35_receipt.json (not served here)
- experiments/E2-gpt4o/qa_eval_v3_E2_runP-v35_summary.json (not served here)
- experiments/E2-gpt4o/receipt.md (not served here)
- experiments/E2-gpt4o/write_receipt_md.py (not served here)
- experiments/E2a-tr-ablation/qa_eval_v3_E2a_runP-v35.json (not served here)
- experiments/E2a-tr-ablation/qa_eval_v3_E2a_runP-v35_receipt.json (not served here)
- experiments/E2a-tr-ablation/qa_eval_v3_E2a_runP-v35_summary.json (not served here)
- experiments/E2a-tr-ablation/receipt.md (not served here)
- experiments/E3-langstate/PLAN.md (not served here)
- experiments/E3-temporal-fix/PLAN.md (not served here)
- experiments/E4-qtypes/PLAN.md (not served here)
- experiments/E5-final/PLAN.md (not served here)
- experiments/FINAL-REPORT-TEMPLATE.md (not served here)
- experiments/zeroLLM-FLAGSHIP-evidence/F1-smoke-scaffold.json (not served here)
- experiments/zeroLLM-FLAGSHIP-evidence/F1B-smoke-baseline-TR-only.json (not served here)
- experiments/zeroLLM-FLAGSHIP-evidence/F1B-smoke-baseline-partial.json (not served here)
- experiments/zeroLLM-FLAGSHIP-evidence/F2-FULL-scaffold.json (not served here)
- experiments/zeroLLM-FLAGSHIP-evidence/SUMMARY.json (not served here)
- extensions/fidelis-recall.ts (not served here)
- gemini-extension.json
- glama.json (not served here)
- llms.txt (not served here)
- mcp.json
- plugin.json (not served here)
- pyproject.toml (not served here)
- scripts/sustained_write_restore_proof.py (not served here)
- server.json
- src/fidelis/__init__.py (not served here)
- src/fidelis/augment.py (not served here)
- src/fidelis/browse.py (not served here)
- src/fidelis/calibrate.py (not served here)
- src/fidelis/cli.py (not served here)
- src/fidelis/codex_history.py (not served here)
- src/fidelis/cogito_hermeneutics.py (not served here)
- src/fidelis/config.py (not served here)
- src/fidelis/context.py (not served here)
- src/fidelis/degrade.py (not served here)
- src/fidelis/evidence_status.py (not served here)
- src/fidelis/ingest_claude_sessions.py (not served here)
- src/fidelis/ingest_codex_sessions.py (not served here)
- src/fidelis/init_cmd.py (not served here)
- src/fidelis/inquiry.py (not served here)
- src/fidelis/lpci.py (not served here)
- src/fidelis/mcp_cmd.py (not served here)
- src/fidelis/mcp_server.py (not served here)
- src/fidelis/recall.py (not served here)
- src/fidelis/recall_b.py (not served here)
- src/fidelis/recall_hybrid.py (not served here)
- src/fidelis/recall_recent.py (not served here)
- src/fidelis/recall_sessions.py (not served here)
- src/fidelis/relation_envelope.py (not served here)
- src/fidelis/retrieval_telemetry.py (not served here)
- src/fidelis/retrieval_trace.py (not served here)
- src/fidelis/scaffold/__init__.py (not served here)
- src/fidelis/scaffold/_core.py (not served here)
- src/fidelis/scaffold/preflight.py (not served here)
- src/fidelis/scaffold_server.py (not served here)
- src/fidelis/seed.py (not served here)
- src/fidelis/server.py (not served here)
- src/fidelis/session_reference.py (not served here)
- src/fidelis/sessions_cmd.py (not served here)
- src/fidelis/snapshot.py (not served here)
- src/fidelis/supersession.py (not served here)
- src/fidelis/telemetry.py (not served here)
- src/fidelis/temporal.py (not served here)
- src/fidelis/temporal_index.py (not served here)
- src/fidelis/temporal_recall.py (not served here)
- src/fidelis/watch_cmd.py (not served here)
- src/fidelis/write_gate.py (not served here)
- tests/__init__.py (not served here)
- tests/fixtures/relation_envelopes_v1.json (not served here)
- tests/scaffold/test_anthropic_cache_wire.py (not served here)
- tests/scaffold/test_backend_portability.py (not served here)
- tests/scaffold/test_caching_properties.py (not served here)
- tests/scaffold/test_chat_history_compatibility.py (not served here)
- tests/scaffold/test_consumer_surface.py (not served here)
- tests/scaffold/test_e2e_store_query.py (not served here)
- tests/scaffold/test_openai_format_compatibility.py (not served here)
- tests/scaffold/test_real_tokenizer.py (not served here)
- tests/scaffold/test_retrieval_compatibility.py (not served here)
- tests/scaffold/test_runtime_compatibility.py (not served here)
- tests/scaffold/test_scaffold_core.py (not served here)
- tests/scaffold/test_scaffold_graceful_degrade.py (not served here)
- tests/scaffold/test_streaming_marker_integrity.py (not served here)
- tests/scaffold/test_top_score_contract.py (not served here)
- tests/test_broken_pipe_recovery.py (not served here)
- tests/test_browse.py (not served here)
- tests/test_claude_plugin_root.py (not served here)
- tests/test_cli_browse.py (not served here)
- tests/test_codemeta.py (not served here)
- tests/test_context.py (not served here)
- tests/test_dead_letter.py (not served here)
- tests/test_gemini_extension.py (not served here)
- tests/test_graceful_degrade.py (not served here)
- tests/test_graceful_degrade_corruption.py (not served here)
- tests/test_graceful_shutdown.py (not served here)
- tests/test_health_index_lag.py (not served here)
- tests/test_hermes_gate_profile.py (not served here)
- tests/test_init_defects_A_B.py (not served here)
- tests/test_init_plist_contents.py (not served here)
- tests/test_init_uninstall_label.py (not served here)
- tests/test_liveness_endpoint.py (not served here)
- tests/test_mcp_copilot.py (not served here)
- tests/test_mcp_cursor.py (not served here)
- tests/test_mcp_gemini.py (not served here)
- tests/test_mcp_openclaw.py (not served here)
- tests/test_mcp_ping.py (not served here)
- tests/test_mcp_smoke_no_ollama.py (not served here)
- tests/test_mcp_surface_v2.py (not served here)
- tests/test_p0_score_bypass.py (not served here)
- tests/test_pi_recall.mjs (not served here)
- tests/test_port_env_alias.py (not served here)
- tests/test_public_install_truth.py (not served here)
- tests/test_real_world_examples.py (not served here)
- tests/test_recall_b_resilience.py (not served here)
- tests/test_recall_hybrid.py (not served here)
- tests/test_relation_envelope.py (not served here)
- tests/test_relation_envelope_e2e.py (not served here)
- tests/test_server_boots_without_ollama.py (not served here)
- tests/test_session_memory.py (not served here)
- tests/test_smoke.py (not served here)
- tests/test_superseded_not_dropped.py (not served here)
- tests/test_supersession.py (not served here)
- tests/test_telemetry.py (not served here)
- tests/test_telemetry_kill_actually_kills.py (not served here)
- tests/test_temporal.py (not served here)
- tests/test_temporal_index.py (not served here)
- tests/test_temporal_recall.py (not served here)
- tests/test_time_aware_acceptance.py (not served here)
- tests/test_user_id_namespace_isolation.py (not served here)
- tests/test_verify_guard.py (not served here)
- tests/test_watch_backpressure.py (not served here)
- tests/test_write_fallback_contract.py (not served here)
- tests/test_write_gate.py (not served here)
- tests/test_write_truthfulness.py (not served here)
- tests/test_zero_llm_regression.py (not served here)
Advantages
- Retrieves original passages verbatim by default, avoiding potential inaccuracies introduced by generative summarization. evidence: README.md
- Supports hybrid search combining BM25 and dense-vector retrieval for improved accuracy. evidence: README.md
- Maintains historical integrity by allowing corrections to supersede records without erasing the original data. evidence: README.md
Limitations
- Requires a local Ollama service for embedding generation. evidence: README.md
- Currently a single-machine pre-release and not a hosted team memory service. evidence: README.md
- Retrieved text may still be outdated or incorrect depending on the quality of the stored information. evidence: README.md
Security
Risk level: Low risk
This brain runs
Agent instructions that run or fetch something (4)
.agents/skills/fidelis/SKILL.md:Wiring an MCP memory tool into Claude Code, Codex, GitHub Copilot CLI, Gemini CLI, or OpenClaw via `fidelis mcp install`.agents/skills/fidelis/SKILL.md:Executable name is `fidelis`, not `fidelis-memory` — `uvx fidelis-memory` fails;.agents/skills/fidelis/SKILL.md:use `uvx --from fidelis-memory fidelis <cmd>`..agents/skills/fidelis/SKILL.md:install `fidelis-memory`.
Git hooks (1)
.pre-commit-config.yaml:bash -c 'git grep -nE "rbr_lpci" -- ":!.pre-commit-config.yaml" && exit 1 || exit 0'
MCP servers (3)
claude-plugin/.mcp.json(fidelis):uvx --from fidelis-memory==0.3.0rc1 fidelis mcp servegemini-extension.json(fidelis):uvx --from fidelis-memory==0.3.0rc1 fidelis mcp servemcp.json(fidelis):uvx --from fidelis-memory==0.3.0rc1 fidelis mcp serve
- Low risk: network-instructions (.agents/skills/fidelis/SKILL.md:5)
Attribution and licence
- Created by
- Hermes Labs
- Declared authors
- Hermes Labs (declared in pyproject.toml)
- Rolando Bosch Rodriguez (declared in CITATION.cff)
- Publisher
- Hermes Labs (Official Hermes Labs project)
- Source
- hermes-labs-ai/fidelis · commit 9504c4a
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Hermes Labs.
Install from source
337 of its files are not served here, so there is no ZIP. hermes-labs-ai/fidelis at 9504c4a