boring-agent-memory 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 (186) hide show
  1. boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  2. boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/config.yml +1 -0
  3. boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. boring_agent_memory-0.2.2/.github/PULL_REQUEST_TEMPLATE.md +16 -0
  5. boring_agent_memory-0.2.2/.github/workflows/publish.yml +45 -0
  6. boring_agent_memory-0.2.2/.github/workflows/tests.yml +35 -0
  7. boring_agent_memory-0.2.2/CODE_OF_CONDUCT.md +35 -0
  8. boring_agent_memory-0.2.2/CONTRIBUTING.md +60 -0
  9. boring_agent_memory-0.2.2/LICENSE +22 -0
  10. boring_agent_memory-0.2.2/MANIFEST.in +13 -0
  11. boring_agent_memory-0.2.2/PKG-INFO +162 -0
  12. boring_agent_memory-0.2.2/README.md +135 -0
  13. boring_agent_memory-0.2.2/SECURITY.md +40 -0
  14. boring_agent_memory-0.2.2/benchmarks/v1/cases.jsonl +120 -0
  15. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/alerts.md +4 -0
  16. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/analytics.md +4 -0
  17. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/backups.md +4 -0
  18. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/billing.md +4 -0
  19. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/browser.md +4 -0
  20. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/caching.md +4 -0
  21. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/database.md +4 -0
  22. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/deployments.md +4 -0
  23. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/exports.md +4 -0
  24. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/feature-flags.md +4 -0
  25. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/imports.md +4 -0
  26. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/incidents.md +4 -0
  27. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/queues.md +4 -0
  28. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/releases.md +4 -0
  29. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/search.md +4 -0
  30. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/sessions.md +4 -0
  31. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/storage.md +4 -0
  32. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/uploads.md +4 -0
  33. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/webhooks.md +4 -0
  34. boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/workers.md +4 -0
  35. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/alerts-legacy.md +4 -0
  36. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/analytics-legacy.md +4 -0
  37. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/backups-legacy.md +4 -0
  38. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/billing-legacy.md +4 -0
  39. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/browser-legacy.md +4 -0
  40. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/caching-legacy.md +4 -0
  41. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/database-legacy.md +4 -0
  42. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/deployments-legacy.md +4 -0
  43. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/exports-legacy.md +4 -0
  44. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/feature-flags-legacy.md +4 -0
  45. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/imports-legacy.md +4 -0
  46. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/incidents-legacy.md +4 -0
  47. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/queues-legacy.md +4 -0
  48. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/releases-legacy.md +4 -0
  49. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/search-legacy.md +4 -0
  50. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/sessions-legacy.md +4 -0
  51. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/storage-legacy.md +4 -0
  52. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/uploads-legacy.md +4 -0
  53. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/webhooks-legacy.md +4 -0
  54. boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/workers-legacy.md +4 -0
  55. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/alerts-credentials.md +5 -0
  56. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/analytics-credentials.md +5 -0
  57. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/backups-credentials.md +5 -0
  58. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/billing-credentials.md +5 -0
  59. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/browser-credentials.md +5 -0
  60. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/caching-credentials.md +5 -0
  61. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/database-credentials.md +5 -0
  62. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/deployments-credentials.md +5 -0
  63. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/exports-credentials.md +5 -0
  64. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/feature-flags-credentials.md +5 -0
  65. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/imports-credentials.md +5 -0
  66. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/incidents-credentials.md +5 -0
  67. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/queues-credentials.md +5 -0
  68. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/releases-credentials.md +5 -0
  69. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/search-credentials.md +5 -0
  70. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/sessions-credentials.md +5 -0
  71. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/storage-credentials.md +5 -0
  72. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/uploads-credentials.md +5 -0
  73. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/webhooks-credentials.md +5 -0
  74. boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/workers-credentials.md +5 -0
  75. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/alerts/operations.md +3 -0
  76. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/analytics/operations.md +3 -0
  77. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/backups/operations.md +3 -0
  78. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/billing/operations.md +3 -0
  79. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/browser/operations.md +3 -0
  80. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/caching/operations.md +3 -0
  81. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/database/operations.md +3 -0
  82. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/deployments/operations.md +3 -0
  83. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/exports/operations.md +3 -0
  84. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/feature-flags/operations.md +3 -0
  85. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/imports/operations.md +3 -0
  86. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/incidents/operations.md +3 -0
  87. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/queues/operations.md +3 -0
  88. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/releases/operations.md +3 -0
  89. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/search/operations.md +3 -0
  90. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/sessions/operations.md +3 -0
  91. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/storage/operations.md +3 -0
  92. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/uploads/operations.md +3 -0
  93. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/webhooks/operations.md +3 -0
  94. boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/workers/operations.md +3 -0
  95. boring_agent_memory-0.2.2/benchmarks/v1/results/python-3.14-macos-arm64.json +1157 -0
  96. boring_agent_memory-0.2.2/benchmarks/v2/cases.jsonl +12 -0
  97. boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/backups.md +3 -0
  98. boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/deployments.md +4 -0
  99. boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/invitations.md +9 -0
  100. boring_agent_memory-0.2.2/benchmarks/v2/corpus/code/routes.md +5 -0
  101. boring_agent_memory-0.2.2/benchmarks/v2/corpus/history/deployments-old.md +4 -0
  102. boring_agent_memory-0.2.2/benchmarks/v2/corpus/lifecycle/removed-source.md +4 -0
  103. boring_agent_memory-0.2.2/benchmarks/v2/corpus/privacy/credentials.md +12 -0
  104. boring_agent_memory-0.2.2/benchmarks/v2/mutations.jsonl +3 -0
  105. boring_agent_memory-0.2.2/benchmarks/v2/results/python-3.14-macos-arm64.json +1997 -0
  106. boring_agent_memory-0.2.2/docs/agent-prompt.md +129 -0
  107. boring_agent_memory-0.2.2/docs/architecture.md +93 -0
  108. boring_agent_memory-0.2.2/docs/benchmark-v1.md +99 -0
  109. boring_agent_memory-0.2.2/docs/benchmark-v2.md +65 -0
  110. boring_agent_memory-0.2.2/docs/canonical-first-memory.md +35 -0
  111. boring_agent_memory-0.2.2/docs/cli.md +135 -0
  112. boring_agent_memory-0.2.2/docs/comparison.md +76 -0
  113. boring_agent_memory-0.2.2/docs/configuration.md +82 -0
  114. boring_agent_memory-0.2.2/docs/evaluation.md +74 -0
  115. boring_agent_memory-0.2.2/docs/hermes-integration.md +150 -0
  116. boring_agent_memory-0.2.2/docs/privacy-model.md +36 -0
  117. boring_agent_memory-0.2.2/docs/python-api.md +56 -0
  118. boring_agent_memory-0.2.2/docs/release-checklist.md +71 -0
  119. boring_agent_memory-0.2.2/docs/release-notes-v0.2.0.md +20 -0
  120. boring_agent_memory-0.2.2/docs/research-notes.md +21 -0
  121. boring_agent_memory-0.2.2/docs/roadmap.md +29 -0
  122. boring_agent_memory-0.2.2/docs/status-and-gaps.md +56 -0
  123. boring_agent_memory-0.2.2/evals/README.md +42 -0
  124. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/canonical-first.md +5 -0
  125. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/local-route.md +5 -0
  126. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/mutable-policy.md +3 -0
  127. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/apple-mail.md +5 -0
  128. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/chrome-cdp.md +4 -0
  129. boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/job-scout.md +7 -0
  130. boring_agent_memory-0.2.2/evals/fixtures/privacy_docs/deployment.md +8 -0
  131. boring_agent_memory-0.2.2/evals/fixtures/stale_docs/old-workday-report.md +5 -0
  132. boring_agent_memory-0.2.2/evals/golden.jsonl +7 -0
  133. boring_agent_memory-0.2.2/examples/claude_code.md +11 -0
  134. boring_agent_memory-0.2.2/examples/claude_code_memory.yaml +17 -0
  135. boring_agent_memory-0.2.2/examples/codex.md +14 -0
  136. boring_agent_memory-0.2.2/examples/codex_memory.yaml +17 -0
  137. boring_agent_memory-0.2.2/examples/hermes_agent_instructions.md +36 -0
  138. boring_agent_memory-0.2.2/examples/hermes_memory.yaml +17 -0
  139. boring_agent_memory-0.2.2/examples/memory.yaml +14 -0
  140. boring_agent_memory-0.2.2/proposals/future_graph_layer.md +17 -0
  141. boring_agent_memory-0.2.2/proposals/future_vector_layer.md +16 -0
  142. boring_agent_memory-0.2.2/pyproject.toml +54 -0
  143. boring_agent_memory-0.2.2/scripts/demo.py +64 -0
  144. boring_agent_memory-0.2.2/scripts/generate_benchmark_v1.py +137 -0
  145. boring_agent_memory-0.2.2/scripts/run_benchmark_v1.py +51 -0
  146. boring_agent_memory-0.2.2/scripts/run_benchmark_v2.py +107 -0
  147. boring_agent_memory-0.2.2/scripts/run_incremental_scenario.py +64 -0
  148. boring_agent_memory-0.2.2/setup.cfg +4 -0
  149. boring_agent_memory-0.2.2/src/boring_agent_memory/__init__.py +12 -0
  150. boring_agent_memory-0.2.2/src/boring_agent_memory/api.py +23 -0
  151. boring_agent_memory-0.2.2/src/boring_agent_memory/benchmark.py +524 -0
  152. boring_agent_memory-0.2.2/src/boring_agent_memory/canonical.py +73 -0
  153. boring_agent_memory-0.2.2/src/boring_agent_memory/chunking.py +425 -0
  154. boring_agent_memory-0.2.2/src/boring_agent_memory/cli.py +298 -0
  155. boring_agent_memory-0.2.2/src/boring_agent_memory/config.py +162 -0
  156. boring_agent_memory-0.2.2/src/boring_agent_memory/embeddings.py +253 -0
  157. boring_agent_memory-0.2.2/src/boring_agent_memory/eval.py +271 -0
  158. boring_agent_memory-0.2.2/src/boring_agent_memory/index.py +449 -0
  159. boring_agent_memory-0.2.2/src/boring_agent_memory/ingest.py +175 -0
  160. boring_agent_memory-0.2.2/src/boring_agent_memory/privacy.py +84 -0
  161. boring_agent_memory-0.2.2/src/boring_agent_memory/query.py +233 -0
  162. boring_agent_memory-0.2.2/src/boring_agent_memory/schema.py +212 -0
  163. boring_agent_memory-0.2.2/src/boring_agent_memory/server.py +41 -0
  164. boring_agent_memory-0.2.2/src/boring_agent_memory/snippets.py +26 -0
  165. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/PKG-INFO +162 -0
  166. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/SOURCES.txt +184 -0
  167. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/dependency_links.txt +1 -0
  168. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/entry_points.txt +2 -0
  169. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/requires.txt +3 -0
  170. boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/top_level.txt +1 -0
  171. boring_agent_memory-0.2.2/tests/test_api.py +35 -0
  172. boring_agent_memory-0.2.2/tests/test_benchmark.py +178 -0
  173. boring_agent_memory-0.2.2/tests/test_canonical.py +44 -0
  174. boring_agent_memory-0.2.2/tests/test_chunking.py +288 -0
  175. boring_agent_memory-0.2.2/tests/test_cli.py +148 -0
  176. boring_agent_memory-0.2.2/tests/test_config_build.py +135 -0
  177. boring_agent_memory-0.2.2/tests/test_demo.py +35 -0
  178. boring_agent_memory-0.2.2/tests/test_embeddings.py +182 -0
  179. boring_agent_memory-0.2.2/tests/test_eval.py +87 -0
  180. boring_agent_memory-0.2.2/tests/test_index_build.py +94 -0
  181. boring_agent_memory-0.2.2/tests/test_index_update.py +216 -0
  182. boring_agent_memory-0.2.2/tests/test_privacy_filters.py +75 -0
  183. boring_agent_memory-0.2.2/tests/test_query_ranking.py +211 -0
  184. boring_agent_memory-0.2.2/tests/test_schema_migrations.py +220 -0
  185. boring_agent_memory-0.2.2/tests/test_silent_failures.py +288 -0
  186. boring_agent_memory-0.2.2/tests/test_version.py +35 -0
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: Bug report
3
+ about: Report a reproducible problem
4
+ title: "[Bug]: "
5
+ labels: bug
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Summary
10
+
11
+ Describe the bug.
12
+
13
+ ## Reproduction
14
+
15
+ ```bash
16
+ # commands
17
+ ```
18
+
19
+ ## Expected Behavior
20
+
21
+ What should have happened?
22
+
23
+ ## Actual Behavior
24
+
25
+ What happened instead?
26
+
27
+ ## Environment
28
+
29
+ - OS:
30
+ - Python version:
31
+ - Boring Agent Memory version or commit:
32
+
33
+ ## Sanitized Config Or Fixture
34
+
35
+ Paste only sanitized examples. Do not include secrets, `.env` files, raw inboxes, browser profiles, auth files, or private transcripts.
@@ -0,0 +1 @@
1
+ blank_issues_enabled: true
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: Feature request
3
+ about: Propose an improvement
4
+ title: "[Feature]: "
5
+ labels: enhancement
6
+ assignees: ""
7
+ ---
8
+
9
+ ## Problem
10
+
11
+ What user problem does this solve?
12
+
13
+ ## Proposed Solution
14
+
15
+ Describe the smallest useful implementation.
16
+
17
+ ## Alternatives Considered
18
+
19
+ What else did you consider?
20
+
21
+ ## Canonical-First Fit
22
+
23
+ Explain how this preserves source-grounded retrieval and avoids treating memory as truth.
@@ -0,0 +1,16 @@
1
+ ## Summary
2
+
3
+ Describe the change.
4
+
5
+ ## Validation
6
+
7
+ ```bash
8
+ python -m unittest discover -s tests
9
+ ```
10
+
11
+ ## Checklist
12
+
13
+ - [ ] Tests cover the changed behavior.
14
+ - [ ] Docs are updated for user-visible changes.
15
+ - [ ] No generated databases, caches, local secrets, or private files are included.
16
+ - [ ] The change preserves canonical-first retrieval semantics.
@@ -0,0 +1,45 @@
1
+ name: publish
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ release:
8
+ types: [published]
9
+
10
+ # Building runs third-party build tools, so it gets no publishing credential;
11
+ # only the upload job can request the PyPI OIDC token. Actions are pinned by SHA.
12
+ jobs:
13
+ build:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
17
+ with:
18
+ persist-credentials: false
19
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
20
+ with:
21
+ python-version: "3.14"
22
+ - name: Check the tag matches the package version
23
+ run: test "$GITHUB_REF_NAME" = "v$(python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
24
+ - name: Build package
25
+ run: |
26
+ python -m pip install build twine
27
+ python -m build
28
+ python -m twine check dist/*
29
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
30
+ with:
31
+ name: dist
32
+ path: dist/
33
+
34
+ pypi:
35
+ needs: build
36
+ runs-on: ubuntu-latest
37
+ environment: pypi
38
+ permissions:
39
+ id-token: write
40
+ steps:
41
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
42
+ with:
43
+ name: dist
44
+ path: dist/
45
+ - uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
@@ -0,0 +1,35 @@
1
+ name: tests
2
+
3
+ permissions:
4
+ contents: read
5
+
6
+ on:
7
+ push:
8
+ branches: ["main"]
9
+ pull_request:
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+ with:
17
+ persist-credentials: false
18
+ - uses: actions/setup-python@v6
19
+ with:
20
+ python-version: "3.14"
21
+ - name: Install package
22
+ run: python -m pip install -e . build
23
+ - name: Run tests
24
+ run: python -m unittest discover -s tests
25
+ - name: Run memory eval
26
+ run: >
27
+ bam eval --json
28
+ --min-recall-at-1 1.0
29
+ --min-recall-at-3 1.0
30
+ --min-source-accuracy 1.0
31
+ --min-snippet-term-rate 1.0
32
+ --min-stale-detection-rate 1.0
33
+ --max-privacy-leaks 0
34
+ - name: Build package
35
+ run: python -m build
@@ -0,0 +1,35 @@
1
+ # Code of Conduct
2
+
3
+ This project follows the Contributor Covenant Code of Conduct, version 2.1.
4
+
5
+ ## Our Pledge
6
+
7
+ We pledge to make participation in this project a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation.
8
+
9
+ ## Our Standards
10
+
11
+ Examples of behavior that contributes to a positive environment:
12
+
13
+ - using welcoming and inclusive language
14
+ - being respectful of differing viewpoints and experiences
15
+ - giving and gracefully accepting constructive feedback
16
+ - focusing on what is best for the community
17
+ - showing empathy toward other community members
18
+
19
+ Examples of unacceptable behavior:
20
+
21
+ - sexualized language or imagery
22
+ - insulting or derogatory comments
23
+ - public or private harassment
24
+ - publishing others' private information without permission
25
+ - other conduct which could reasonably be considered inappropriate in a professional setting
26
+
27
+ ## Enforcement
28
+
29
+ Project maintainers are responsible for clarifying and enforcing standards of acceptable behavior. Maintainers may remove, edit, or reject comments, commits, issues, and pull requests that are not aligned with this Code of Conduct.
30
+
31
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the project maintainers once a public contact path is available.
32
+
33
+ ## Attribution
34
+
35
+ This Code of Conduct is adapted from the Contributor Covenant, version 2.1.
@@ -0,0 +1,60 @@
1
+ # Contributing
2
+
3
+ Thanks for considering a contribution to Boring Agent Memory.
4
+
5
+ This project values small, auditable changes that preserve the canonical-first memory model.
6
+
7
+ ## Development Setup
8
+
9
+ ```bash
10
+ python -m venv .venv
11
+ . .venv/bin/activate
12
+ python -m pip install -e .
13
+ ```
14
+
15
+ ## Test
16
+
17
+ ```bash
18
+ python -m unittest discover -s tests
19
+ python -m pip install 'mypy>=1.14,<3' 'ruff>=0.9,<1'
20
+ ruff check src tests scripts
21
+ mypy src/boring_agent_memory
22
+ ```
23
+
24
+ CI runs the tests, the eval gates, and a package build on Python 3.14.
25
+ [docs/release-checklist.md](docs/release-checklist.md) lists the longer checks to run before a release.
26
+
27
+ ## Design Rules
28
+
29
+ - Keep memory retrieval local-first by default.
30
+ - Do not add hosted services or network calls to core retrieval.
31
+ - Do not auto-ingest raw conversations, raw tool output, inboxes, browser profiles, or secrets.
32
+ - Return source paths and snippets rather than unsupported conclusions.
33
+ - Keep the agent-facing tool surface small.
34
+ - Treat canonical files as truth and the index as rebuildable recall.
35
+
36
+ ## Pull Request Checklist
37
+
38
+ - Tests cover the changed behavior.
39
+ - Docs are updated for user-visible changes.
40
+ - New config fields are documented in `docs/configuration.md`.
41
+ - New CLI behavior is documented in `docs/cli.md`.
42
+ - Generated files, databases, caches, and local secrets are not included.
43
+
44
+ ## AI Assistance
45
+
46
+ AI tools are welcome.
47
+ Say in the pull request that you used one, run the change yourself, and be ready to explain every line.
48
+
49
+ ## Reporting Bugs
50
+
51
+ Include:
52
+
53
+ - operating system
54
+ - Python version
55
+ - command used
56
+ - expected result
57
+ - actual result
58
+ - minimal sanitized config or fixture
59
+
60
+ Do not include secrets, raw inboxes, private transcripts, browser profiles, or `.env` files.
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Boring Agent Memory contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,13 @@
1
+ include README.md
2
+ include LICENSE
3
+ include CONTRIBUTING.md
4
+ include SECURITY.md
5
+ include CODE_OF_CONDUCT.md
6
+ recursive-include docs *.md
7
+ recursive-include examples *.md *.yaml
8
+ recursive-include evals *.md *.jsonl
9
+ recursive-include benchmarks *.md *.json *.jsonl
10
+ recursive-include proposals *.md
11
+ recursive-include scripts *.py
12
+ recursive-include tests *.py
13
+ recursive-include .github *.md *.yml
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: boring-agent-memory
3
+ Version: 0.2.2
4
+ Summary: A boring, local-first BM25 memory layer for AI agents.
5
+ Author: Boring Agent Memory contributors
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/hskl18/boring-agent-memory
8
+ Project-URL: Repository, https://github.com/hskl18/boring-agent-memory
9
+ Project-URL: Issues, https://github.com/hskl18/boring-agent-memory/issues
10
+ Keywords: agent-memory,bm25,sqlite,fts5,rag,local-first,retrieval,source-grounded,privacy-preserving
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Programming Language :: Python :: 3.15
19
+ Classifier: Topic :: Database
20
+ Classifier: Topic :: Software Development :: Libraries
21
+ Requires-Python: >=3.11
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Provides-Extra: embeddings
25
+ Requires-Dist: fastembed<0.9,>=0.8.0; extra == "embeddings"
26
+ Dynamic: license-file
27
+
28
+ # Boring Agent Memory
29
+
30
+ [![tests](https://github.com/hskl18/boring-agent-memory/actions/workflows/tests.yml/badge.svg)](https://github.com/hskl18/boring-agent-memory/actions/workflows/tests.yml)
31
+
32
+ Local BM25 recall over the files your agent already trusts, with line citations and a check that each source still matches what was indexed.
33
+
34
+ **Status: alpha.** The CLI, Python API, and index schema may still change before 1.0.
35
+
36
+ Most agent memory failures are not failures of semantic search.
37
+ They are failures of trust: stale state, missing provenance, private data captured by default, and memory overriding the source of truth.
38
+
39
+ Boring Agent Memory indexes the docs, skills, runbooks, bug logs, and ADRs you choose with SQLite FTS5.
40
+ It returns source paths and snippets, and your agent reads the cited file before it acts.
41
+ It needs no hosted service, embedding API, vector database, model download, or account.
42
+
43
+ ## Install
44
+
45
+ ```bash
46
+ python -m pip install boring-agent-memory
47
+ ```
48
+
49
+ It needs Python 3.11 or newer.
50
+
51
+ ## Try It
52
+
53
+ ```bash
54
+ mkdir notes
55
+ printf '# Deploys\n\nRoll back database migrations within 15 minutes.\n' > notes/deploys.md
56
+
57
+ bam build --include notes
58
+ bam query "roll back migrations"
59
+ ```
60
+
61
+ ```text
62
+ deploys.md score=-3e-06
63
+ /path/to/notes/deploys.md
64
+ # Deploys
65
+
66
+ [Roll] [back] database [migrations] within 15 minutes.
67
+ ```
68
+
69
+ Now change the file and check whether the index still matches it:
70
+
71
+ ```bash
72
+ printf '# Deploys\n\nRoll back within 30 minutes.\n' > notes/deploys.md
73
+
74
+ bam inspect notes/deploys.md
75
+ bam update --include notes
76
+ ```
77
+
78
+ `bam inspect` reports `content_hash_match: False` until `bam update` picks up the edit.
79
+
80
+ ## Use Your Own Files
81
+
82
+ Point a config at the files you trust and save it as `memory.yaml`:
83
+
84
+ ```yaml
85
+ index_path: ~/.bam/memory.db
86
+ source_type: canonical_file
87
+ workspace: ~/project/app
88
+
89
+ include:
90
+ - ~/agent/skills
91
+ - ~/project/*/docs
92
+
93
+ exclude:
94
+ - "**/secrets/**"
95
+ ```
96
+
97
+ ```bash
98
+ bam build --config memory.yaml --json
99
+ bam update --config memory.yaml --dry-run --json
100
+ bam update --config memory.yaml --json
101
+
102
+ bam --db ~/.bam/memory.db query "rollback policy" --limit 5 --json
103
+ ```
104
+
105
+ A database that does not exist is an error, so a mistyped path cannot look like an empty memory.
106
+
107
+ ## Use It From An Agent
108
+
109
+ ```python
110
+ from boring_agent_memory import memory_query
111
+
112
+ results = memory_query(
113
+ "rollback policy for database migrations",
114
+ limit=5,
115
+ source_type="canonical_file",
116
+ db_path="~/.bam/memory.db",
117
+ )
118
+
119
+ for result in results:
120
+ print(result.citation)
121
+ print(result.snippet)
122
+ ```
123
+
124
+ Other processes can use `bam serve --stdio`, which speaks JSON lines. See the [CLI reference](https://github.com/hskl18/boring-agent-memory/blob/main/docs/cli.md).
125
+
126
+ Agent instructions to copy are in [docs/agent-prompt.md](https://github.com/hskl18/boring-agent-memory/blob/main/docs/agent-prompt.md), with setups for [Claude Code](https://github.com/hskl18/boring-agent-memory/blob/main/examples/claude_code.md), [Codex](https://github.com/hskl18/boring-agent-memory/blob/main/examples/codex.md), and [Hermes](https://github.com/hskl18/boring-agent-memory/blob/main/docs/hermes-integration.md).
127
+
128
+ ## Evidence
129
+
130
+ On Benchmark v2's 12 synthetic queries, chunked BM25 finds the right lines first every time, while whole-document BM25 finds the right file 91% of the time and never the right lines.
131
+ These are deterministic fixture results, not production traffic or a broad semantic-memory claim.
132
+ See [Benchmark v2](https://github.com/hskl18/boring-agent-memory/blob/main/docs/benchmark-v2.md) and [why BM25 comes first](https://github.com/hskl18/boring-agent-memory/blob/main/docs/canonical-first-memory.md#why-bm25-first).
133
+
134
+ ## What It Is Not
135
+
136
+ - Not a chatbot brain or an auto-capture memory system. It indexes only paths you name.
137
+ - Not a replacement for semantic search over vague queries.
138
+ - Not an authority over current files. Canonical files come first, BM25 recall second, model memory last.
139
+ - Not a hosted service or a vector database.
140
+
141
+ ## Privacy
142
+
143
+ Secret-bearing paths are skipped and common secret patterns are redacted before indexing, but these are guardrails, not a formal secret scanner.
144
+ Read the [privacy model](https://github.com/hskl18/boring-agent-memory/blob/main/docs/privacy-model.md) before choosing what to index.
145
+
146
+ ## Documentation
147
+
148
+ - [CLI reference](https://github.com/hskl18/boring-agent-memory/blob/main/docs/cli.md)
149
+ - [Configuration](https://github.com/hskl18/boring-agent-memory/blob/main/docs/configuration.md)
150
+ - [Python API](https://github.com/hskl18/boring-agent-memory/blob/main/docs/python-api.md)
151
+ - [Architecture](https://github.com/hskl18/boring-agent-memory/blob/main/docs/architecture.md)
152
+ - [Comparison with other memory tools](https://github.com/hskl18/boring-agent-memory/blob/main/docs/comparison.md)
153
+ - [Status and known limits](https://github.com/hskl18/boring-agent-memory/blob/main/docs/status-and-gaps.md)
154
+ - [Roadmap](https://github.com/hskl18/boring-agent-memory/blob/main/docs/roadmap.md)
155
+
156
+ ## Contributing
157
+
158
+ See [CONTRIBUTING.md](https://github.com/hskl18/boring-agent-memory/blob/main/CONTRIBUTING.md), and read [SECURITY.md](https://github.com/hskl18/boring-agent-memory/blob/main/SECURITY.md) before sharing logs, configs, or memory fixtures.
159
+
160
+ ## License
161
+
162
+ MIT
@@ -0,0 +1,135 @@
1
+ # Boring Agent Memory
2
+
3
+ [![tests](https://github.com/hskl18/boring-agent-memory/actions/workflows/tests.yml/badge.svg)](https://github.com/hskl18/boring-agent-memory/actions/workflows/tests.yml)
4
+
5
+ Local BM25 recall over the files your agent already trusts, with line citations and a check that each source still matches what was indexed.
6
+
7
+ **Status: alpha.** The CLI, Python API, and index schema may still change before 1.0.
8
+
9
+ Most agent memory failures are not failures of semantic search.
10
+ They are failures of trust: stale state, missing provenance, private data captured by default, and memory overriding the source of truth.
11
+
12
+ Boring Agent Memory indexes the docs, skills, runbooks, bug logs, and ADRs you choose with SQLite FTS5.
13
+ It returns source paths and snippets, and your agent reads the cited file before it acts.
14
+ It needs no hosted service, embedding API, vector database, model download, or account.
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ python -m pip install boring-agent-memory
20
+ ```
21
+
22
+ It needs Python 3.11 or newer.
23
+
24
+ ## Try It
25
+
26
+ ```bash
27
+ mkdir notes
28
+ printf '# Deploys\n\nRoll back database migrations within 15 minutes.\n' > notes/deploys.md
29
+
30
+ bam build --include notes
31
+ bam query "roll back migrations"
32
+ ```
33
+
34
+ ```text
35
+ deploys.md score=-3e-06
36
+ /path/to/notes/deploys.md
37
+ # Deploys
38
+
39
+ [Roll] [back] database [migrations] within 15 minutes.
40
+ ```
41
+
42
+ Now change the file and check whether the index still matches it:
43
+
44
+ ```bash
45
+ printf '# Deploys\n\nRoll back within 30 minutes.\n' > notes/deploys.md
46
+
47
+ bam inspect notes/deploys.md
48
+ bam update --include notes
49
+ ```
50
+
51
+ `bam inspect` reports `content_hash_match: False` until `bam update` picks up the edit.
52
+
53
+ ## Use Your Own Files
54
+
55
+ Point a config at the files you trust and save it as `memory.yaml`:
56
+
57
+ ```yaml
58
+ index_path: ~/.bam/memory.db
59
+ source_type: canonical_file
60
+ workspace: ~/project/app
61
+
62
+ include:
63
+ - ~/agent/skills
64
+ - ~/project/*/docs
65
+
66
+ exclude:
67
+ - "**/secrets/**"
68
+ ```
69
+
70
+ ```bash
71
+ bam build --config memory.yaml --json
72
+ bam update --config memory.yaml --dry-run --json
73
+ bam update --config memory.yaml --json
74
+
75
+ bam --db ~/.bam/memory.db query "rollback policy" --limit 5 --json
76
+ ```
77
+
78
+ A database that does not exist is an error, so a mistyped path cannot look like an empty memory.
79
+
80
+ ## Use It From An Agent
81
+
82
+ ```python
83
+ from boring_agent_memory import memory_query
84
+
85
+ results = memory_query(
86
+ "rollback policy for database migrations",
87
+ limit=5,
88
+ source_type="canonical_file",
89
+ db_path="~/.bam/memory.db",
90
+ )
91
+
92
+ for result in results:
93
+ print(result.citation)
94
+ print(result.snippet)
95
+ ```
96
+
97
+ Other processes can use `bam serve --stdio`, which speaks JSON lines. See the [CLI reference](https://github.com/hskl18/boring-agent-memory/blob/main/docs/cli.md).
98
+
99
+ Agent instructions to copy are in [docs/agent-prompt.md](https://github.com/hskl18/boring-agent-memory/blob/main/docs/agent-prompt.md), with setups for [Claude Code](https://github.com/hskl18/boring-agent-memory/blob/main/examples/claude_code.md), [Codex](https://github.com/hskl18/boring-agent-memory/blob/main/examples/codex.md), and [Hermes](https://github.com/hskl18/boring-agent-memory/blob/main/docs/hermes-integration.md).
100
+
101
+ ## Evidence
102
+
103
+ On Benchmark v2's 12 synthetic queries, chunked BM25 finds the right lines first every time, while whole-document BM25 finds the right file 91% of the time and never the right lines.
104
+ These are deterministic fixture results, not production traffic or a broad semantic-memory claim.
105
+ See [Benchmark v2](https://github.com/hskl18/boring-agent-memory/blob/main/docs/benchmark-v2.md) and [why BM25 comes first](https://github.com/hskl18/boring-agent-memory/blob/main/docs/canonical-first-memory.md#why-bm25-first).
106
+
107
+ ## What It Is Not
108
+
109
+ - Not a chatbot brain or an auto-capture memory system. It indexes only paths you name.
110
+ - Not a replacement for semantic search over vague queries.
111
+ - Not an authority over current files. Canonical files come first, BM25 recall second, model memory last.
112
+ - Not a hosted service or a vector database.
113
+
114
+ ## Privacy
115
+
116
+ Secret-bearing paths are skipped and common secret patterns are redacted before indexing, but these are guardrails, not a formal secret scanner.
117
+ Read the [privacy model](https://github.com/hskl18/boring-agent-memory/blob/main/docs/privacy-model.md) before choosing what to index.
118
+
119
+ ## Documentation
120
+
121
+ - [CLI reference](https://github.com/hskl18/boring-agent-memory/blob/main/docs/cli.md)
122
+ - [Configuration](https://github.com/hskl18/boring-agent-memory/blob/main/docs/configuration.md)
123
+ - [Python API](https://github.com/hskl18/boring-agent-memory/blob/main/docs/python-api.md)
124
+ - [Architecture](https://github.com/hskl18/boring-agent-memory/blob/main/docs/architecture.md)
125
+ - [Comparison with other memory tools](https://github.com/hskl18/boring-agent-memory/blob/main/docs/comparison.md)
126
+ - [Status and known limits](https://github.com/hskl18/boring-agent-memory/blob/main/docs/status-and-gaps.md)
127
+ - [Roadmap](https://github.com/hskl18/boring-agent-memory/blob/main/docs/roadmap.md)
128
+
129
+ ## Contributing
130
+
131
+ See [CONTRIBUTING.md](https://github.com/hskl18/boring-agent-memory/blob/main/CONTRIBUTING.md), and read [SECURITY.md](https://github.com/hskl18/boring-agent-memory/blob/main/SECURITY.md) before sharing logs, configs, or memory fixtures.
132
+
133
+ ## License
134
+
135
+ MIT
@@ -0,0 +1,40 @@
1
+ # Security Policy
2
+
3
+ Boring Agent Memory is local-first, but it can still index sensitive text if configured incorrectly.
4
+
5
+ ## Supported Versions
6
+
7
+ Security fixes target the latest release.
8
+
9
+ ## Reporting A Vulnerability
10
+
11
+ Report suspected vulnerabilities privately through [GitHub private vulnerability reporting](https://github.com/hskl18/boring-agent-memory/security/advisories/new).
12
+ Do not open a public issue containing secrets, credentials, or private content.
13
+
14
+ ## Sensitive Data Guidance
15
+
16
+ Do not share:
17
+
18
+ - `.env` files
19
+ - API keys or tokens
20
+ - private keys
21
+ - raw browser profiles
22
+ - raw email exports
23
+ - raw terminal logs
24
+ - unsanitized transcripts
25
+ - local SQLite memory databases that may contain private content
26
+
27
+ Use synthetic fixtures or sanitized snippets when reporting issues.
28
+
29
+ ## Security Model
30
+
31
+ The project provides privacy guardrails:
32
+
33
+ - explicit include paths
34
+ - default secret-bearing path excludes
35
+ - secret-pattern redaction
36
+ - local SQLite storage
37
+ - no hosted service dependency
38
+
39
+ These guardrails are not a formal data-loss-prevention system.
40
+ Users are responsible for selecting trusted include paths.