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.
- boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/config.yml +1 -0
- boring_agent_memory-0.2.2/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- boring_agent_memory-0.2.2/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- boring_agent_memory-0.2.2/.github/workflows/publish.yml +45 -0
- boring_agent_memory-0.2.2/.github/workflows/tests.yml +35 -0
- boring_agent_memory-0.2.2/CODE_OF_CONDUCT.md +35 -0
- boring_agent_memory-0.2.2/CONTRIBUTING.md +60 -0
- boring_agent_memory-0.2.2/LICENSE +22 -0
- boring_agent_memory-0.2.2/MANIFEST.in +13 -0
- boring_agent_memory-0.2.2/PKG-INFO +162 -0
- boring_agent_memory-0.2.2/README.md +135 -0
- boring_agent_memory-0.2.2/SECURITY.md +40 -0
- boring_agent_memory-0.2.2/benchmarks/v1/cases.jsonl +120 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/alerts.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/analytics.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/backups.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/billing.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/browser.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/caching.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/database.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/deployments.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/exports.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/feature-flags.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/imports.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/incidents.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/queues.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/releases.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/search.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/sessions.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/storage.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/uploads.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/webhooks.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/canonical/workers.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/alerts-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/analytics-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/backups-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/billing-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/browser-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/caching-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/database-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/deployments-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/exports-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/feature-flags-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/imports-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/incidents-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/queues-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/releases-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/search-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/sessions-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/storage-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/uploads-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/webhooks-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/history/workers-legacy.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/alerts-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/analytics-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/backups-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/billing-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/browser-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/caching-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/database-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/deployments-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/exports-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/feature-flags-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/imports-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/incidents-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/queues-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/releases-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/search-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/sessions-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/storage-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/uploads-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/webhooks-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/privacy/workers-credentials.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/alerts/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/analytics/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/backups/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/billing/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/browser/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/caching/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/database/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/deployments/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/exports/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/feature-flags/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/imports/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/incidents/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/queues/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/releases/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/search/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/sessions/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/storage/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/uploads/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/webhooks/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/corpus/runbooks/workers/operations.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v1/results/python-3.14-macos-arm64.json +1157 -0
- boring_agent_memory-0.2.2/benchmarks/v2/cases.jsonl +12 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/backups.md +3 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/deployments.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/canonical/invitations.md +9 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/code/routes.md +5 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/history/deployments-old.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/lifecycle/removed-source.md +4 -0
- boring_agent_memory-0.2.2/benchmarks/v2/corpus/privacy/credentials.md +12 -0
- boring_agent_memory-0.2.2/benchmarks/v2/mutations.jsonl +3 -0
- boring_agent_memory-0.2.2/benchmarks/v2/results/python-3.14-macos-arm64.json +1997 -0
- boring_agent_memory-0.2.2/docs/agent-prompt.md +129 -0
- boring_agent_memory-0.2.2/docs/architecture.md +93 -0
- boring_agent_memory-0.2.2/docs/benchmark-v1.md +99 -0
- boring_agent_memory-0.2.2/docs/benchmark-v2.md +65 -0
- boring_agent_memory-0.2.2/docs/canonical-first-memory.md +35 -0
- boring_agent_memory-0.2.2/docs/cli.md +135 -0
- boring_agent_memory-0.2.2/docs/comparison.md +76 -0
- boring_agent_memory-0.2.2/docs/configuration.md +82 -0
- boring_agent_memory-0.2.2/docs/evaluation.md +74 -0
- boring_agent_memory-0.2.2/docs/hermes-integration.md +150 -0
- boring_agent_memory-0.2.2/docs/privacy-model.md +36 -0
- boring_agent_memory-0.2.2/docs/python-api.md +56 -0
- boring_agent_memory-0.2.2/docs/release-checklist.md +71 -0
- boring_agent_memory-0.2.2/docs/release-notes-v0.2.0.md +20 -0
- boring_agent_memory-0.2.2/docs/research-notes.md +21 -0
- boring_agent_memory-0.2.2/docs/roadmap.md +29 -0
- boring_agent_memory-0.2.2/docs/status-and-gaps.md +56 -0
- boring_agent_memory-0.2.2/evals/README.md +42 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/canonical-first.md +5 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/local-route.md +5 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/docs/mutable-policy.md +3 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/apple-mail.md +5 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/chrome-cdp.md +4 -0
- boring_agent_memory-0.2.2/evals/fixtures/canonical_docs/skills/job-scout.md +7 -0
- boring_agent_memory-0.2.2/evals/fixtures/privacy_docs/deployment.md +8 -0
- boring_agent_memory-0.2.2/evals/fixtures/stale_docs/old-workday-report.md +5 -0
- boring_agent_memory-0.2.2/evals/golden.jsonl +7 -0
- boring_agent_memory-0.2.2/examples/claude_code.md +11 -0
- boring_agent_memory-0.2.2/examples/claude_code_memory.yaml +17 -0
- boring_agent_memory-0.2.2/examples/codex.md +14 -0
- boring_agent_memory-0.2.2/examples/codex_memory.yaml +17 -0
- boring_agent_memory-0.2.2/examples/hermes_agent_instructions.md +36 -0
- boring_agent_memory-0.2.2/examples/hermes_memory.yaml +17 -0
- boring_agent_memory-0.2.2/examples/memory.yaml +14 -0
- boring_agent_memory-0.2.2/proposals/future_graph_layer.md +17 -0
- boring_agent_memory-0.2.2/proposals/future_vector_layer.md +16 -0
- boring_agent_memory-0.2.2/pyproject.toml +54 -0
- boring_agent_memory-0.2.2/scripts/demo.py +64 -0
- boring_agent_memory-0.2.2/scripts/generate_benchmark_v1.py +137 -0
- boring_agent_memory-0.2.2/scripts/run_benchmark_v1.py +51 -0
- boring_agent_memory-0.2.2/scripts/run_benchmark_v2.py +107 -0
- boring_agent_memory-0.2.2/scripts/run_incremental_scenario.py +64 -0
- boring_agent_memory-0.2.2/setup.cfg +4 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/__init__.py +12 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/api.py +23 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/benchmark.py +524 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/canonical.py +73 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/chunking.py +425 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/cli.py +298 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/config.py +162 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/embeddings.py +253 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/eval.py +271 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/index.py +449 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/ingest.py +175 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/privacy.py +84 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/query.py +233 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/schema.py +212 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/server.py +41 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory/snippets.py +26 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/PKG-INFO +162 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/SOURCES.txt +184 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/dependency_links.txt +1 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/entry_points.txt +2 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/requires.txt +3 -0
- boring_agent_memory-0.2.2/src/boring_agent_memory.egg-info/top_level.txt +1 -0
- boring_agent_memory-0.2.2/tests/test_api.py +35 -0
- boring_agent_memory-0.2.2/tests/test_benchmark.py +178 -0
- boring_agent_memory-0.2.2/tests/test_canonical.py +44 -0
- boring_agent_memory-0.2.2/tests/test_chunking.py +288 -0
- boring_agent_memory-0.2.2/tests/test_cli.py +148 -0
- boring_agent_memory-0.2.2/tests/test_config_build.py +135 -0
- boring_agent_memory-0.2.2/tests/test_demo.py +35 -0
- boring_agent_memory-0.2.2/tests/test_embeddings.py +182 -0
- boring_agent_memory-0.2.2/tests/test_eval.py +87 -0
- boring_agent_memory-0.2.2/tests/test_index_build.py +94 -0
- boring_agent_memory-0.2.2/tests/test_index_update.py +216 -0
- boring_agent_memory-0.2.2/tests/test_privacy_filters.py +75 -0
- boring_agent_memory-0.2.2/tests/test_query_ranking.py +211 -0
- boring_agent_memory-0.2.2/tests/test_schema_migrations.py +220 -0
- boring_agent_memory-0.2.2/tests/test_silent_failures.py +288 -0
- 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
|
+
[](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
|
+
[](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.
|