luminary-memory 0.2.0__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/publish.yml +5 -5
  2. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.gitignore +3 -0
  3. luminary_memory-0.2.2/CHANGELOG.md +99 -0
  4. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PKG-INFO +39 -4
  5. luminary_memory-0.2.2/PLAN-v0.2.1.md +749 -0
  6. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/README.md +37 -3
  7. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/ROADMAP.md +15 -1
  8. luminary_memory-0.2.2/benchmarks/README.md +52 -0
  9. luminary_memory-0.2.2/benchmarks/RESULTS.md +62 -0
  10. luminary_memory-0.2.2/benchmarks/hermes_provider_bench.py +131 -0
  11. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/run_benchmarks.py +2 -2
  12. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/synthetic.py +0 -1
  13. luminary_memory-0.2.2/docs/hermes-integration.md +116 -0
  14. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/index.md +1 -0
  15. luminary_memory-0.2.2/hermes/README.md +104 -0
  16. luminary_memory-0.2.2/hermes/SKILL.md +171 -0
  17. luminary_memory-0.2.2/hermes/hooks/luminary-activity/HOOK.yaml +4 -0
  18. luminary_memory-0.2.2/hermes/hooks/luminary-activity/README.md +47 -0
  19. luminary_memory-0.2.2/hermes/hooks/luminary-activity/handler.py +90 -0
  20. luminary_memory-0.2.2/hermes/install.sh +126 -0
  21. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/pyproject.toml +7 -1
  22. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/__init__.py +1 -1
  23. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/api.py +5 -5
  24. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/sqlite.py +49 -9
  25. luminary_memory-0.2.2/src/luminary_memory/hermes/__init__.py +15 -0
  26. luminary_memory-0.2.2/src/luminary_memory/hermes/config.py +80 -0
  27. luminary_memory-0.2.2/src/luminary_memory/hermes/config_schema.py +48 -0
  28. luminary_memory-0.2.2/src/luminary_memory/hermes/plugin.yaml +8 -0
  29. luminary_memory-0.2.2/src/luminary_memory/hermes/provider.py +791 -0
  30. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/llm.py +24 -5
  31. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/graph.py +69 -27
  32. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/temporal.py +22 -0
  33. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/schema.py +3 -0
  34. luminary_memory-0.2.2/tests/conftest.py +29 -0
  35. luminary_memory-0.2.2/tests/hermes/test_backup_paths.py +29 -0
  36. luminary_memory-0.2.2/tests/hermes/test_config.py +60 -0
  37. luminary_memory-0.2.2/tests/hermes/test_entrypoint.py +21 -0
  38. luminary_memory-0.2.2/tests/hermes/test_hooks.py +71 -0
  39. luminary_memory-0.2.2/tests/hermes/test_lifecycle.py +69 -0
  40. luminary_memory-0.2.2/tests/hermes/test_provider_import.py +29 -0
  41. luminary_memory-0.2.2/tests/hermes/test_recall.py +78 -0
  42. luminary_memory-0.2.2/tests/hermes/test_session_boundaries.py +67 -0
  43. luminary_memory-0.2.2/tests/hermes/test_sync_turn.py +73 -0
  44. luminary_memory-0.2.2/tests/hermes/test_system_prompt.py +39 -0
  45. luminary_memory-0.2.2/tests/hermes/test_tools.py +71 -0
  46. luminary_memory-0.2.2/tests/hermes_stubs/agent/memory_provider.py +93 -0
  47. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/index.html +13 -1
  48. luminary_memory-0.2.0/CHANGELOG.md +0 -55
  49. luminary_memory-0.2.0/benchmarks/README.md +0 -17
  50. luminary_memory-0.2.0/docs/hermes-integration.md +0 -37
  51. luminary_memory-0.2.0/hermes/README.md +0 -36
  52. luminary_memory-0.2.0/hermes/SKILL.md +0 -85
  53. luminary_memory-0.2.0/website/plan.md +0 -366
  54. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  55. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  56. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  57. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/ci.yml +0 -0
  58. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/.github/workflows/pages.yml +0 -0
  59. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/CODE_OF_CONDUCT.md +0 -0
  60. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/CONTRIBUTING.md +0 -0
  61. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/LICENSE +0 -0
  62. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PLAN-v0.2.0.md +0 -0
  63. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/PLAN.md +0 -0
  64. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/SECURITY.md +0 -0
  65. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/__init__.py +0 -0
  66. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/benchmarks/metrics.py +0 -0
  67. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/api.md +0 -0
  68. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/architecture.md +0 -0
  69. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/backends.md +0 -0
  70. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/cli.md +0 -0
  71. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/lifecycle.md +0 -0
  72. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/quickstart.md +0 -0
  73. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/docs/recall.md +0 -0
  74. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/__init__.py +0 -0
  75. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/base.py +0 -0
  76. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/backends/pgvector.py +0 -0
  77. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/budget.py +0 -0
  78. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/cli.py +0 -0
  79. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/config.py +0 -0
  80. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/embeddings/__init__.py +0 -0
  81. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/embeddings/fastembed.py +0 -0
  82. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/export.py +0 -0
  83. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/__init__.py +0 -0
  84. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/ingest/whitelist.py +0 -0
  85. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/__init__.py +0 -0
  86. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/cleanup.py +0 -0
  87. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/consolidate.py +0 -0
  88. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/prune.py +0 -0
  89. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/lifecycle/runner.py +0 -0
  90. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/__init__.py +0 -0
  91. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/dedup.py +0 -0
  92. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/fusion.py +0 -0
  93. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/keyword.py +0 -0
  94. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/planner.py +0 -0
  95. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/semantic.py +0 -0
  96. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/recall/snippets.py +0 -0
  97. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/src/luminary_memory/types.py +0 -0
  98. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/__init__.py +0 -0
  99. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_api.py +0 -0
  100. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_api_extended.py +0 -0
  101. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_backend_pgvector.py +0 -0
  102. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_backend_sqlite.py +0 -0
  103. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_budget.py +0 -0
  104. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_cli.py +0 -0
  105. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_dedup_jaccard.py +0 -0
  106. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_embeddings.py +0 -0
  107. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_fusion_rrf.py +0 -0
  108. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_ingest_whitelist.py +0 -0
  109. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_lifecycle.py +0 -0
  110. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_graph.py +0 -0
  111. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_keyword.py +0 -0
  112. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_orchestrator.py +0 -0
  113. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_semantic.py +0 -0
  114. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_recall_temporal.py +0 -0
  115. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_schema.py +0 -0
  116. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t10_export.py +0 -0
  117. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t11_limit_zero.py +0 -0
  118. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t1_hnsw.py +0 -0
  119. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t3_planner.py +0 -0
  120. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t4_batch.py +0 -0
  121. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t5_enricher.py +0 -0
  122. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t6_tag_scoped.py +0 -0
  123. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t7_updated_at.py +0 -0
  124. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t8_snippets.py +0 -0
  125. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/tests/test_t9_cli_json.py +0 -0
  126. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/.nojekyll +0 -0
  127. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/css/luminary.css +0 -0
  128. {luminary_memory-0.2.0 → luminary_memory-0.2.2}/website/js/luminary.js +0 -0
@@ -3,6 +3,7 @@ name: Publish
3
3
  on:
4
4
  push:
5
5
  tags: ["v*"]
6
+ workflow_dispatch:
6
7
 
7
8
  permissions:
8
9
  contents: write
@@ -29,9 +30,9 @@ jobs:
29
30
  python -m build
30
31
  - name: Build Hermes skill artifact
31
32
  run: |
32
- mkdir -p dist
33
- zip -j dist/luminary-memory-skill.zip hermes/SKILL.md hermes/README.md
34
- ls -lh dist/luminary-memory-skill.zip
33
+ mkdir -p skill_asset
34
+ zip -j skill_asset/luminary-memory-skill.zip hermes/SKILL.md hermes/README.md
35
+ ls -lh skill_asset/luminary-memory-skill.zip
35
36
  - name: Publish to PyPI (trusted publishing / OIDC)
36
37
  uses: pypa/gh-action-pypi-publish@release/v1
37
38
  # Requires one-time setup on PyPI: configure this repo as a trusted
@@ -40,5 +41,4 @@ jobs:
40
41
  - name: Attach skill asset to GitHub Release
41
42
  uses: softprops/action-gh-release@v2
42
43
  with:
43
- files: dist/luminary-memory-skill.zip
44
- generate_release_notes: true
44
+ files: skill_asset/luminary-memory-skill.zip
@@ -102,3 +102,6 @@ docs/api/
102
102
  website/screenshot_*.png
103
103
  website/test_*.png
104
104
  website/*.png
105
+
106
+ # ---- Internal plan files ----
107
+ website/plan.md
@@ -0,0 +1,99 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file. The format follows [Keep a Changelog](https://keepachangelog.com/), and the project adheres to [Semantic Versioning](https://semver.org/).
4
+
5
+ ## [0.2.2] - 2026-08-18
6
+
7
+ ### Added
8
+
9
+ - **LLM memory curation** — with `ingest_llm: true`, the provider's enricher evaluates every retained turn:
10
+ - `worth_saving` — chit-chat, greetings, and trivial turns are **dropped** instead of polluting the store.
11
+ - `summary` — kept turns are stored as concise factual summaries (e.g. `"Deploy target is the staging cluster."`) instead of raw `User: ... / Assistant: ...` transcripts.
12
+ - `entities` / `tags` — attached for richer recall.
13
+ - **Transparency log** — provider writes `$HERMES_HOME/luminary/luminary.log` recording initialize/recall/retain/errors.
14
+ - **`OpenAICompatibleEnricher` User-Agent header** — required by some OpenAI-compatible gateways (e.g. Command Code 403s without it).
15
+
16
+ ### Fixed
17
+
18
+ - **Shutdown SQLite thread-affinity crash** — the writer thread now closes its own client (closing from the main thread raised `sqlite3.ProgrammingError`).
19
+ - **Hermes installer** — `hermes/install.sh` gains `--llm` (enables memory curation), handles a missing `config.yaml`, and no longer warns about the missing `[hermes]` extra (now declared).
20
+
21
+ ## [0.2.1] - 2026-08-18
22
+
23
+ ### Added
24
+
25
+ - **Hermes Memory Provider** — `LuminaryMemoryProvider` plugging into Hermes via the `hermes_agent.memory_providers` entry-point group; registered as a standalone package.
26
+ - **Auto-recall every turn** — warm background prefetch (`queue_prefetch` → cached `prefetch`) or synchronous recall (`recall_sync`), formatted as a deterministic context block.
27
+ - **Auto-save every session** — buffered `sync_turn` on a single writer thread, batched by `retain_every_n_turns`, with session/parent/platform/agent lineage tags.
28
+ - **Session-boundary handling** — `on_session_end` flush + `on_session_switch` rebind with reset guard.
29
+ - **Explicit tools** — `luminary_recall`, `luminary_ingest`, `luminary_list` (OpenAI-format schemas, JSON dispatch, local error helper).
30
+ - **Deterministic indicator** — `RecallStatus("Luminary", count, 🌙)` surfaced via `recall_status()`.
31
+ - **Config layer** — `$HERMES_HOME/luminary/config.json` (0600, atomic write), `get_config_schema()`, dashboard `config_schema.py` (pure data).
32
+ - **Lifecycle hooks** — `is_available`, `initialize`, `shutdown`, `system_prompt_block`, `on_memory_write`, `on_delegation`, `on_pre_compress`, `backup_paths`.
33
+ - **Packaging** — entry point + `plugin.yaml` directory-install fallback.
34
+ - **Test harness** — `tests/hermes_stubs/agent/memory_provider.py` ABC stub injected via `tests/conftest.py` so tests run without a hermes-agent install.
35
+ - **`MemoryClient.ingest(metadata=...)`** — optional metadata dict merged into stored memory metadata (backward compatible).
36
+
37
+ ### Performance (identical results, no approximation)
38
+
39
+ - **Vectorized cosine similarity** — per-row numpy loop → single matmul; recall @ 5k memories **3,400 ms → 832 ms (4.1×)**.
40
+ - **SQL graph aggregation** — 210k relation rows → `SUM/COUNT ... GROUP BY` in the database.
41
+ - **`temporal_scan()`** — temporal recall fetches only `(id, created_at, access_count)`; **486 ms → 62 ms (7.8×)**.
42
+ - **Relation cap (8/memory) + indexes** — dense graph (280k rows) → sparse (80k); store 3.5× smaller; ingest 1.6× faster.
43
+
44
+ ### Fixed
45
+
46
+ - `config_schema.py` import fallback — module now imports standalone (no hermes runtime) so CI is green on 3.11/3.12.
47
+ - Publish workflow — skill zip moved out of `dist/` (invalid distribution); dropped `generate_release_notes` (permission).
48
+
49
+ ## [0.2.0] - 2026-08-18
50
+
51
+ ### Added
52
+
53
+ - **Query planner** — skips graph/temporal strategies when not needed (conservative v1; semantic + keyword never skipped).
54
+ - **Batch ingest** — `ingest_batch()` with single `embed_batch` call and per-item whitelist/enrichment.
55
+ - **Export / import** — versioned JSON backup/restore (`export`, `import_memories`, `--include-embeddings`).
56
+ - **LLM enricher (provider-agnostic)** — `OpenAICompatibleEnricher` over any OpenAI-compatible endpoint; stdlib-only, passthrough on failure.
57
+ - **Result snippets** — matched-fragment highlights attached to recall results.
58
+ - **Tag-scoped recall** — `recall(query, tags=[...])`.
59
+ - **HNSW index** for pgvector (`pg_hnsw_*` settings, idempotent `build_index()`).
60
+ - **Benchmark suite** — `benchmarks/` (latency p50/p95 per strategy + recall@k/MRR, deterministic).
61
+ - **CLI JSON output** for `search` and `list` (parity with `recall --json`).
62
+ - **`--limit 0` semantics** — unlimited; negative values raise.
63
+ - **`updated_at` auto-bump** in `update()`.
64
+ - **API docs** generated from docstrings (pdoc → `docs/api/`).
65
+ - **GitHub Pages workflow** (`pages.yml` → `/website`).
66
+ - **PyPI auto-publish workflow** (`publish.yml`, trusted publishing/OIDC, tag `v*`) + Hermes skill zip release asset.
67
+
68
+ ### Fixed
69
+
70
+ - Ruff lint: unused-variable in HNSW tests, missing `noqa` on intentional defensive excepts (CI now green).
71
+
72
+ ## [0.1.1] - 2026-08-17
73
+
74
+ ### Fixed
75
+
76
+ - `MemoryClient.ingest` crashed when `ingest_llm=True` (enricher could be `None`). Now always falls back to a no-op enricher.
77
+ - `_parse_dt` crashed on corrupt/non-ISO timestamps in lifecycle and temporal recall. Now falls back safely.
78
+ - FTS5 keyword search accepted raw query syntax (`*`, `NEAR`, `OR`, quotes) which could alter query semantics or raise. Queries are now sanitized to plain terms.
79
+ - `list()` loaded and sorted all memories in memory; now uses SQL-level pagination (`recent()`).
80
+ - CLI commands could print raw tracebacks on backend errors; now caught with a clean error message. `--limit` values are clamped to `>= 1`.
81
+ - `WhitelistFilter` crashed on an invalid regex pattern; invalid patterns are now skipped.
82
+ - pgvector integration smoke test was a no-op; now a real add/get/search/delete round-trip.
83
+
84
+ ### Added
85
+
86
+ - Test coverage for pgvector backend raised from 51% to 82% (get/update/delete/count/row parsing).
87
+
88
+ ## [0.1.0] - 2026-08-17
89
+
90
+ ### Added
91
+
92
+ - SQLite backend with FTS5 keyword search and in-process vector search.
93
+ - Optional pgvector backend (HNSW-ready).
94
+ - Four-strategy recall: semantic, keyword, temporal, graph.
95
+ - Reciprocal Rank Fusion (RRF) + Jaccard dedup + token budget.
96
+ - Ingest pipeline with whitelist filter and optional LLM enrichment.
97
+ - Lifecycle: TTL cleanup, near-duplicate consolidation, low-value pruning.
98
+ - Python API (`MemoryClient`) and CLI (`luminary-memory`).
99
+ - Environment-variable configuration (`LUMINARY_*`).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: luminary-memory
3
- Version: 0.2.0
3
+ Version: 0.2.2
4
4
  Summary: A lightweight, self-hosted memory layer for AI agents
5
5
  Project-URL: Homepage, https://github.com/alertxsto/luminary-memory
6
6
  Project-URL: Repository, https://github.com/alertxsto/luminary-memory
@@ -29,6 +29,7 @@ Requires-Dist: pdoc>=14; extra == 'dev'
29
29
  Requires-Dist: pytest-cov>=5.0; extra == 'dev'
30
30
  Requires-Dist: pytest>=8.0; extra == 'dev'
31
31
  Requires-Dist: ruff>=0.4; extra == 'dev'
32
+ Provides-Extra: hermes
32
33
  Description-Content-Type: text/markdown
33
34
 
34
35
  <div align="center">
@@ -41,8 +42,8 @@ Description-Content-Type: text/markdown
41
42
  [![Python](https://img.shields.io/pypi/pyversions/luminary-memory?color=8ab4e8&logo=python&logoColor=white)](https://pypi.org/project/luminary-memory)
42
43
  [![License](https://img.shields.io/github/license/alertxsto/luminary-memory?color=8ab4e8)](https://github.com/alertxsto/luminary-memory/blob/main/LICENSE)
43
44
  [![CI](https://img.shields.io/github/actions/workflow/status/alertxsto/luminary-memory/ci.yml?color=8ab4e8&label=CI&logo=github)](https://github.com/alertxsto/luminary-memory/actions)
44
- [![Tests](https://img.shields.io/badge/tests-101%20passing-8ab4e8)](https://github.com/alertxsto/luminary-memory/actions)
45
- [![Coverage](https://img.shields.io/badge/coverage-89%25-8ab4e8)](https://github.com/alertxsto/luminary-memory)
45
+ [![Tests](https://img.shields.io/badge/tests-168%20passing-8ab4e8)](https://github.com/alertxsto/luminary-memory/actions)
46
+ [![Coverage](https://img.shields.io/badge/coverage-85%25-8ab4e8)](https://github.com/alertxsto/luminary-memory)
46
47
  [![Stars](https://img.shields.io/github/stars/alertxsto/luminary-memory?color=8ab4e8&logo=github)](https://github.com/alertxsto/luminary-memory)
47
48
 
48
49
  **Self-hosted · Private · Budget-aware · Self-maintaining**
@@ -68,6 +69,40 @@ Agents are only as good as what they remember. A stateless agent re-learns the s
68
69
 
69
70
  ---
70
71
 
72
+ ## Hermes Agent — first-class memory provider
73
+
74
+ luminary-memory ships a native **Hermes Agent memory provider** (`luminary-memory[hermes]`): drop-in, auto-recall every turn, auto-save every session — with **zero LLM tokens per turn**.
75
+
76
+ ```bash
77
+ pip install "luminary-memory[hermes]"
78
+ ```
79
+
80
+ Enable it in your Hermes `config.yaml`:
81
+
82
+ ```yaml
83
+ memory:
84
+ provider: luminary
85
+ ```
86
+
87
+ That's it. From the next session:
88
+
89
+ - 🌙 **Auto-recall** — relevant memories are retrieved in the background and injected into agent context every turn
90
+ - 💾 **Auto-save** — completed turns are persisted automatically; session boundaries flush buffered turns
91
+ - 🛠️ **Explicit tools** — the model can call `luminary_recall` / `luminary_ingest` / `luminary_list` on demand
92
+ - 📋 **Deterministic indicator** — a `🌙 Luminary — recalled N memories` status line surfaces memory use
93
+
94
+ Registers via the standard `hermes_agent.memory_providers` entry point — no Hermes source changes, no cloud, no LLM API keys. See `docs/hermes-integration.md` for the full configuration table.
95
+
96
+ **LLM memory curation (optional):** set `ingest_llm: true` in
97
+ `~/.hermes/luminary/config.json` (plus `llm_base_url` / `llm_model` /
98
+ `llm_api_key`) to have the provider evaluate every turn before saving —
99
+ chit-chat and trivial turns are dropped, and kept turns are stored as concise
100
+ factual summaries (e.g. `"Deploy target is the staging cluster."`) instead of
101
+ raw `User: ... / Assistant: ...` transcripts. One small LLM call per retained
102
+ turn; any OpenAI-compatible endpoint works.
103
+
104
+ ---
105
+
71
106
  ## Quickstart
72
107
 
73
108
  ### Install
@@ -227,7 +262,7 @@ Contributions welcome — see [CONTRIBUTING.md](CONTRIBUTING.md).
227
262
 
228
263
  ## Roadmap
229
264
 
230
- See [ROADMAP.md](ROADMAP.md) for the full product roadmap — v0.2.0 (quality & scale), v0.3.0 (intelligence), and v1.0.0 (stable).
265
+ See [ROADMAP.md](ROADMAP.md) for the full product roadmap — v0.2.1 (Hermes memory provider), v0.3.0 (intelligence), and v1.0.0 (stable).
231
266
 
232
267
  ---
233
268