@rbalchii/anchor-engine 4.7.0 β 4.8.1
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.
- package/LICENSE +608 -608
- package/README.md +513 -317
- package/anchor.bat +5 -5
- package/docs/AGENT_CONTROLLED_ENGINE.md +581 -0
- package/docs/API.md +314 -314
- package/docs/DEPLOYMENT.md +448 -448
- package/docs/INDEX.md +226 -226
- package/docs/MD_FILES_INVENTORY.md +166 -0
- package/docs/STAR_Whitepaper_Executive.md +216 -216
- package/docs/TROUBLESHOOTING.md +535 -535
- package/docs/arxiv/BIBLIOGRAPHY.bib +145 -145
- package/docs/arxiv/RELATED_WORK.tex +38 -38
- package/docs/arxiv/compile.bat +48 -48
- package/docs/arxiv/joss_response.md +32 -32
- package/docs/arxiv/prepare-submission.bat +46 -46
- package/docs/arxiv/review.md +127 -127
- package/docs/arxiv/star-whitepaper.tex +656 -656
- package/docs/code-patterns.md +289 -289
- package/docs/daily/TODAY_SUMMARY.md +245 -0
- package/docs/guides/BUILDING.md +64 -0
- package/docs/guides/INSTALL_NPM.md +160 -0
- package/docs/guides/NPM_PUBLISH_SUMMARY.md +231 -0
- package/docs/paper.md +124 -0
- package/docs/project/PROJECT_STATE_ASSESSMENT.md +312 -0
- package/docs/reviews/code-review-v4.8.1-decision-record.md +165 -0
- package/docs/testing/TESTING.md +213 -0
- package/docs/testing/TESTING_FRAMEWORK_COMPLETE.md +271 -0
- package/docs/testing/search-test-report.md +76 -0
- package/docs/whitepaper.md +445 -445
- package/engine/dist/commands/distill.js +21 -21
- package/engine/dist/config/index.d.ts +7 -0
- package/engine/dist/config/index.d.ts.map +1 -1
- package/engine/dist/config/index.js +22 -0
- package/engine/dist/config/index.js.map +1 -1
- package/engine/dist/config/paths.d.ts +1 -1
- package/engine/dist/config/paths.js +3 -3
- package/engine/dist/config/paths.js.map +1 -1
- package/engine/dist/core/db.js +131 -131
- package/engine/dist/mcp/server.d.ts +44 -0
- package/engine/dist/mcp/server.d.ts.map +1 -0
- package/engine/dist/mcp/server.js +427 -0
- package/engine/dist/mcp/server.js.map +1 -0
- package/engine/dist/native/index.d.ts +20 -21
- package/engine/dist/native/index.d.ts.map +1 -1
- package/engine/dist/profiling/atomization-profiling.js +3 -3
- package/engine/dist/profiling/bottleneck-identification.js +35 -35
- package/engine/dist/profiling/content-sanitization-profiling.js +86 -86
- package/engine/dist/routes/monitoring.js +8 -8
- package/engine/dist/routes/v1/admin.js +8 -8
- package/engine/dist/routes/v1/atoms.js +15 -15
- package/engine/dist/routes/v1/ingest.d.ts.map +1 -1
- package/engine/dist/routes/v1/ingest.js +39 -0
- package/engine/dist/routes/v1/ingest.js.map +1 -1
- package/engine/dist/routes/v1/system.d.ts.map +1 -1
- package/engine/dist/routes/v1/system.js +305 -6
- package/engine/dist/routes/v1/system.js.map +1 -1
- package/engine/dist/routes/v1/tags.js +2 -2
- package/engine/dist/services/backup/backup-restore.js +23 -23
- package/engine/dist/services/backup/backup.js +14 -14
- package/engine/dist/services/distillation/radial-distiller.d.ts +1 -0
- package/engine/dist/services/distillation/radial-distiller.d.ts.map +1 -1
- package/engine/dist/services/distillation/radial-distiller.js +23 -16
- package/engine/dist/services/distillation/radial-distiller.js.map +1 -1
- package/engine/dist/services/ingest/github-ingest-service.js +18 -18
- package/engine/dist/services/ingest/ingest-atomic.js +79 -79
- package/engine/dist/services/ingest/ingest.d.ts.map +1 -1
- package/engine/dist/services/ingest/ingest.js +28 -25
- package/engine/dist/services/ingest/ingest.js.map +1 -1
- package/engine/dist/services/ingest/watchdog.d.ts.map +1 -1
- package/engine/dist/services/ingest/watchdog.js +14 -24
- package/engine/dist/services/ingest/watchdog.js.map +1 -1
- package/engine/dist/services/llm/reader.js +9 -9
- package/engine/dist/services/mirror/mirror.js +5 -5
- package/engine/dist/services/mirror/mirror.js.map +1 -1
- package/engine/dist/services/research/researcher.js +8 -8
- package/engine/dist/services/scribe/scribe.js +27 -27
- package/engine/dist/services/search/context-inflator.js +34 -34
- package/engine/dist/services/search/explore.js +20 -20
- package/engine/dist/services/search/physics-tag-walker.js +208 -208
- package/engine/dist/services/search/query-parser.js +5 -5
- package/engine/dist/services/search/search-utils.js +3 -3
- package/engine/dist/services/search/search.js +36 -36
- package/engine/dist/services/search/sovereign-system-prompt.js +22 -22
- package/engine/dist/services/semantic/semantic-ingestion-service.js +47 -47
- package/engine/dist/services/semantic/semantic-search.js +21 -21
- package/engine/dist/services/synonyms/auto-synonym-generator.js +35 -35
- package/engine/dist/services/system-status.d.ts +34 -0
- package/engine/dist/services/system-status.d.ts.map +1 -1
- package/engine/dist/services/system-status.js +57 -1
- package/engine/dist/services/system-status.js.map +1 -1
- package/engine/dist/services/tags/discovery.js +5 -5
- package/engine/dist/services/tags/infector.js +6 -6
- package/engine/dist/services/tags/tag-auditor.js +51 -51
- package/engine/dist/services/taxonomy/taxonomy-manager.js +6 -6
- package/engine/dist/utils/tag-cleanup.js +5 -5
- package/engine/dist/utils/tag-modulation.js +1 -1
- package/engine/dist/utils/tag-modulation.js.map +1 -1
- package/engine/package.json +104 -105
- package/mcp-server/README.md +404 -0
- package/mcp-server/dist/index.d.ts +16 -0
- package/mcp-server/dist/index.d.ts.map +1 -0
- package/mcp-server/dist/index.js +709 -0
- package/mcp-server/dist/index.js.map +1 -0
- package/mcp-server/package.json +34 -0
- package/package.json +10 -2
- package/docs/archive/GIT_BACKUP_VERIFICATION.md +0 -297
- package/docs/archive/adoption-guide.md +0 -264
- package/docs/archive/adoption-preparation.md +0 -179
- package/docs/archive/agent-harness-integration.md +0 -227
- package/docs/archive/api-reference.md +0 -106
- package/docs/archive/api_flows_diagram.md +0 -118
- package/docs/archive/architecture.md +0 -410
- package/docs/archive/architecture_diagram.md +0 -174
- package/docs/archive/broader-adoption-preparation.md +0 -175
- package/docs/archive/browser-paradigm-architecture.md +0 -163
- package/docs/archive/chat-integration.md +0 -124
- package/docs/archive/community-adoption-materials.md +0 -103
- package/docs/archive/community-adoption.md +0 -147
- package/docs/archive/comparison-with-siloed-solutions.md +0 -192
- package/docs/archive/comprehensive-docs.md +0 -156
- package/docs/archive/data_flow_diagram.md +0 -251
- package/docs/archive/enhancement-implementation-summary.md +0 -146
- package/docs/archive/evolution-summary.md +0 -141
- package/docs/archive/ingestion_pipeline_diagram.md +0 -198
- package/docs/archive/native-module-profiling-results.md +0 -135
- package/docs/archive/positioning-document.md +0 -158
- package/docs/archive/positioning.md +0 -175
- package/docs/archive/query-builder-documentation.md +0 -218
- package/docs/archive/quick-reference.md +0 -40
- package/docs/archive/quickstart.md +0 -63
- package/docs/archive/relationship-narrative-discovery.md +0 -141
- package/docs/archive/search-logic-improvement-plan.md +0 -336
- package/docs/archive/search_architecture_diagram.md +0 -212
- package/docs/archive/semantic-architecture-guide.md +0 -97
- package/docs/archive/sequence-diagrams.md +0 -128
- package/docs/archive/system_components_diagram.md +0 -296
- package/docs/archive/test-framework-integration.md +0 -109
- package/docs/archive/testing-framework-documentation.md +0 -397
- package/docs/archive/testing-framework-summary.md +0 -121
- package/docs/archive/testing-framework.md +0 -377
- package/docs/archive/ui-architecture.md +0 -75
package/README.md
CHANGED
|
@@ -1,317 +1,513 @@
|
|
|
1
|
-
# Anchor Engine β
|
|
2
|
-
|
|
3
|
-
**Deterministic semantic memory for LLMs β local-first, graph traversal, <1GB RAM**
|
|
4
|
-
|
|
5
|
-
[](https://github.com/RSBalchII/anchor-engine-node/releases)
|
|
6
|
-
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
7
|
-
[](http://makeapullrequest.com)
|
|
8
|
-
[](https://doi.org/10.5281/zenodo.18841399)
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## π Why Anchor Engine?
|
|
13
|
-
|
|
14
|
-
Modern AI memory is broken.
|
|
15
|
-
|
|
16
|
-
Vector databases demand GPUs, gigabytes of RAM, and cloud infrastructure. They're opaque, expensive, and fundamentally incompatible with personal, localβfirst AI.
|
|
17
|
-
|
|
18
|
-
**Anchor Engine takes a different path.**
|
|
19
|
-
|
|
20
|
-
It's a **deterministic, explainable, CPUβonly memory engine** that runs on anythingβfrom a $200 laptop to a workstationβand retrieves context using a physicsβinspired graph algorithm instead of dense vectors.
|
|
21
|
-
|
|
22
|
-
If you want:
|
|
23
|
-
- **Localβfirst AI** β your data stays yours
|
|
24
|
-
- **Explainable retrieval** β know *why* something was returned
|
|
25
|
-
- **Deterministic results** β same query, same answer, every time
|
|
26
|
-
- **Zero cloud dependency** β no API keys, no servers
|
|
27
|
-
- **<1GB RAM usage** β runs alongside your browser
|
|
28
|
-
- **Highβspeed ingestion** β 100MB in minutes
|
|
29
|
-
|
|
30
|
-
β¦then Anchor Engine is built for you.
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## β‘ Quick Start (5 Minutes)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
|
97
|
-
|
|
98
|
-
| **
|
|
99
|
-
| **
|
|
100
|
-
| **
|
|
101
|
-
| **
|
|
102
|
-
| **
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
1
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
1
|
+
# Anchor Engine β
|
|
2
|
+
|
|
3
|
+
**Deterministic semantic memory for LLMs β local-first, graph traversal, <1GB RAM**
|
|
4
|
+
|
|
5
|
+
[](https://github.com/RSBalchII/anchor-engine-node/releases)
|
|
6
|
+
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
7
|
+
[](http://makeapullrequest.com)
|
|
8
|
+
[](https://doi.org/10.5281/zenodo.18841399)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## π Why Anchor Engine?
|
|
13
|
+
|
|
14
|
+
Modern AI memory is broken.
|
|
15
|
+
|
|
16
|
+
Vector databases demand GPUs, gigabytes of RAM, and cloud infrastructure. They're opaque, expensive, and fundamentally incompatible with personal, localβfirst AI.
|
|
17
|
+
|
|
18
|
+
**Anchor Engine takes a different path.**
|
|
19
|
+
|
|
20
|
+
It's a **deterministic, explainable, CPUβonly memory engine** that runs on anythingβfrom a $200 laptop to a workstationβand retrieves context using a physicsβinspired graph algorithm instead of dense vectors.
|
|
21
|
+
|
|
22
|
+
If you want:
|
|
23
|
+
- **Localβfirst AI** β your data stays yours
|
|
24
|
+
- **Explainable retrieval** β know *why* something was returned
|
|
25
|
+
- **Deterministic results** β same query, same answer, every time
|
|
26
|
+
- **Zero cloud dependency** β no API keys, no servers
|
|
27
|
+
- **<1GB RAM usage** β runs alongside your browser
|
|
28
|
+
- **Highβspeed ingestion** β 100MB in minutes
|
|
29
|
+
|
|
30
|
+
β¦then Anchor Engine is built for you.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## β‘ Quick Start (5 Minutes)
|
|
35
|
+
|
|
36
|
+
### Option 1: npm Install (Recommended)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Install the package
|
|
40
|
+
npm install @rbalchii/anchor-engine
|
|
41
|
+
|
|
42
|
+
# Or globally for CLI access
|
|
43
|
+
npm install -g @rbalchii/anchor-engine
|
|
44
|
+
|
|
45
|
+
# Start the engine
|
|
46
|
+
anchor start
|
|
47
|
+
|
|
48
|
+
# Open your browser
|
|
49
|
+
open http://localhost:3160
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Option 2: From Source
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 1. Clone & Install
|
|
56
|
+
git clone https://github.com/RSBalchII/anchor-engine-node.git
|
|
57
|
+
cd anchor-engine-node
|
|
58
|
+
pnpm install
|
|
59
|
+
pnpm build
|
|
60
|
+
|
|
61
|
+
# 2. Start the engine
|
|
62
|
+
pnpm start
|
|
63
|
+
|
|
64
|
+
# 3. Open your browser
|
|
65
|
+
open http://localhost:3160
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
That's it! You now have a sovereign memory system for your LLM.
|
|
69
|
+
|
|
70
|
+
### Data Directory Structure
|
|
71
|
+
|
|
72
|
+
All user data is stored in the `local-data/` directory:
|
|
73
|
+
|
|
74
|
+
- **`local-data/inbox/`** - Your sovereign content (internal provenance, 3.0x boost)
|
|
75
|
+
- Files you create or write directly
|
|
76
|
+
- Higher priority in search results
|
|
77
|
+
|
|
78
|
+
- **`local-data/external-inbox/`** - External content (external provenance, 1.0x boost)
|
|
79
|
+
- Web scrapes, news articles, RSS feeds
|
|
80
|
+
- Content from external sources
|
|
81
|
+
|
|
82
|
+
- **`local-data/mirrored_brain/`** - Auto-generated mirror of ingested content
|
|
83
|
+
- Cleaned, processed versions of your files
|
|
84
|
+
- Stripped of noise, timestamps, and PII
|
|
85
|
+
|
|
86
|
+
**Note:** The `local-data/` directory is gitignored by default to protect your data and privacy.
|
|
87
|
+
|
|
88
|
+
**Full installation guide:** [docs/guides/INSTALL_NPM.md](docs/guides/INSTALL_NPM.md)
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## π Anchor Engine vs. Vector RAG
|
|
93
|
+
|
|
94
|
+
| Feature | Anchor Engine | Vector RAG |
|
|
95
|
+
|---------|---------------|------------|
|
|
96
|
+
| **Hardware** | CPUβonly | GPU preferred |
|
|
97
|
+
| **RAM Usage** | <1GB | 4β8GB |
|
|
98
|
+
| **Explainability** | Native (tags, hops, decay) | None (black box) |
|
|
99
|
+
| **Deterministic** | β
Yes | β No |
|
|
100
|
+
| **Cloud Required** | β No | Often |
|
|
101
|
+
| **Retrieval Complexity** | O(kΒ·dΜ) linear | O(n log n) |
|
|
102
|
+
| **License** | AGPL-3.0 (open) | Varies (often proprietary) |
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## π§ The STAR Algorithm
|
|
107
|
+
|
|
108
|
+
Anchor Engine uses **STAR** (Semantic Temporal Associative Retrieval)βa physicsβinspired scoring equation that combines:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
W(q,a) = |T(q) β© T(a)| Β· Ξ³^d(q,a) Γ e^(βΞ»Ξt) Γ (1 β H(h_q, h_a)/64)
|
|
112
|
+
β Semantic Gravity β Temporal Decay β Structural Gravity
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
| Component | What It Does |
|
|
116
|
+
|-----------|--------------|
|
|
117
|
+
| **Semantic Gravity** | Shared tags Γ hopβdistance damping (Ξ³ = 0.85) |
|
|
118
|
+
| **Temporal Decay** | Recent memories pull harder (half-life ~115 min) |
|
|
119
|
+
| **Structural Gravity** | SimHash proximity (64-bit fingerprints) |
|
|
120
|
+
|
|
121
|
+
**Result:** O(kΒ·dΜ) retrievalβdramatically faster than vector ANN for personal datasets. Every atom includes **provenance**: shared tags, hop distance, recency, and byteβrange pointers.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## β Why "Anchor"?
|
|
126
|
+
|
|
127
|
+
> **Drop a query into your memory graph.**
|
|
128
|
+
> **The Anchor finds the semantic bottom.**
|
|
129
|
+
> **The chain plays out to your chosen radius.**
|
|
130
|
+
> **What's retrieved is what's relevantβnothing more, nothing less.**
|
|
131
|
+
> **Same anchor, same spot, same result. Every time.**
|
|
132
|
+
> **This isn't a metaphor. It's the algorithm.**
|
|
133
|
+
|
|
134
|
+
| Anchor Quality | How It Maps to STAR |
|
|
135
|
+
|----------------|---------------------|
|
|
136
|
+
| **Drops to a point** | Query finds seed atoms (anchor discovery) |
|
|
137
|
+
| **Defines a radius** | Chain length = token budget (hop distance) |
|
|
138
|
+
| **Holds against drift** | Deterministic retrieval (no semantic drift) |
|
|
139
|
+
| **Connects to the ship** | Retrieved context β LLM (your ship) |
|
|
140
|
+
| **Works in deep water** | Scales from 10MB to 10GB graphs |
|
|
141
|
+
|
|
142
|
+
The name isn't marketing. It's architecture.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## π₯ Ingest Your Data
|
|
147
|
+
|
|
148
|
+
### Option 1: Web UI (Easiest)
|
|
149
|
+
1. Open http://localhost:3160
|
|
150
|
+
2. Click **"Manage Paths"** β Add folders to watch
|
|
151
|
+
3. Or use **"Paste & Ingest"** tab for quick text
|
|
152
|
+
|
|
153
|
+
### Option 2: API
|
|
154
|
+
```bash
|
|
155
|
+
curl -X POST http://localhost:3160/v1/research/upload-raw \
|
|
156
|
+
-H "Content-Type: application/json" \
|
|
157
|
+
-d '{
|
|
158
|
+
"content": "Your text here...",
|
|
159
|
+
"filename": "notes.md",
|
|
160
|
+
"bucket": "inbox"
|
|
161
|
+
}'
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Option 3: MCP (Claude, Cursor, Qwen Code)
|
|
165
|
+
```
|
|
166
|
+
/anchor_ingest_text content="Meeting notes..." filename="meeting.md" bucket="inbox"
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## π Search Your Memory
|
|
172
|
+
|
|
173
|
+
### Web UI
|
|
174
|
+
- Natural language queries
|
|
175
|
+
- Adjustable token budget slider
|
|
176
|
+
- Filter by buckets/tags
|
|
177
|
+
|
|
178
|
+
### API
|
|
179
|
+
```bash
|
|
180
|
+
curl -X POST http://localhost:3160/v1/memory/search \
|
|
181
|
+
-H "Content-Type: application/json" \
|
|
182
|
+
-d '{
|
|
183
|
+
"query": "What did we discuss about OAuth?",
|
|
184
|
+
"token_budget": 2048
|
|
185
|
+
}'
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### MCP Tools
|
|
189
|
+
```
|
|
190
|
+
/anchor_query query="OAuth authentication setup"
|
|
191
|
+
/anchor_search_index query="career planning"
|
|
192
|
+
/anchor_fetch_session session_id="abc-123"
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## π§ MCP Server β Memory for Your AI Agent
|
|
198
|
+
|
|
199
|
+
Anchor Engine can act as an **MCP (Model Context Protocol) server**, giving any MCPβcompatible agent persistent, deterministic memory.
|
|
200
|
+
|
|
201
|
+
### Install
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# Install globally for CLI access
|
|
205
|
+
npm install -g @rbalchii/anchor-engine
|
|
206
|
+
|
|
207
|
+
# Or use npx directly
|
|
208
|
+
npx @rbalchii/anchor-engine
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Start the MCP Server
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# Option 1: Use the dedicated MCP binary
|
|
215
|
+
anchor-mcp
|
|
216
|
+
|
|
217
|
+
# Option 2: Start via main CLI
|
|
218
|
+
anchor mcp
|
|
219
|
+
|
|
220
|
+
# Option 3: Run directly with npx
|
|
221
|
+
npx anchor-mcp
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
The server runs in **stdio mode**, communicating directly with your AI agent.
|
|
225
|
+
|
|
226
|
+
### Available Tools
|
|
227
|
+
|
|
228
|
+
| Tool | Description |
|
|
229
|
+
|------|-------------|
|
|
230
|
+
| `anchor_query` | Search memory with token budget and provenance tracking |
|
|
231
|
+
| `anchor_distill` | Create checkpoint summaries from sessions |
|
|
232
|
+
| `anchor_illuminate` | BFS graph traversal for exploration |
|
|
233
|
+
| `anchor_read_file` | Read files by line ranges (token-efficient) |
|
|
234
|
+
| `anchor_list_compounds` | List available source files |
|
|
235
|
+
| `anchor_get_stats` | Check engine health and database stats |
|
|
236
|
+
| `anchor_ingest_text` | Add raw text content (opt-in, disabled by default) |
|
|
237
|
+
| `anchor_ingest_file` | Ingest files from filesystem (opt-in) |
|
|
238
|
+
|
|
239
|
+
### Configuration
|
|
240
|
+
|
|
241
|
+
Create a `user_settings.json` in your project root:
|
|
242
|
+
|
|
243
|
+
```json
|
|
244
|
+
{
|
|
245
|
+
"server": {
|
|
246
|
+
"port": 3160,
|
|
247
|
+
"api_key": "your-secret-key"
|
|
248
|
+
},
|
|
249
|
+
"mcp": {
|
|
250
|
+
"allow_write_operations": false,
|
|
251
|
+
"default_bucket_for_writes": "external-inbox",
|
|
252
|
+
"rate_limit_requests_per_minute": 60,
|
|
253
|
+
"max_query_results": 50
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Or set environment variables:
|
|
259
|
+
```bash
|
|
260
|
+
export ANCHOR_API_URL="http://localhost:3160"
|
|
261
|
+
export ANCHOR_API_KEY="your-secret-key"
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Agent Examples
|
|
265
|
+
|
|
266
|
+
#### Claude Desktop
|
|
267
|
+
|
|
268
|
+
Add to `claude_desktop_config.json`:
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
{
|
|
272
|
+
"mcpServers": {
|
|
273
|
+
"anchor": {
|
|
274
|
+
"command": "npx",
|
|
275
|
+
"args": ["@rbalchii/anchor-engine", "mcp"]
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Or if installed globally:
|
|
282
|
+
```json
|
|
283
|
+
{
|
|
284
|
+
"mcpServers": {
|
|
285
|
+
"anchor": {
|
|
286
|
+
"command": "anchor-mcp"
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### Qwen Code
|
|
293
|
+
|
|
294
|
+
Qwen Code automatically detects MCP servers. Just run:
|
|
295
|
+
```bash
|
|
296
|
+
anchor-mcp
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Then use tools in chat:
|
|
300
|
+
```
|
|
301
|
+
/anchor_query query="What did we decide about authentication?"
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### Cursor
|
|
305
|
+
|
|
306
|
+
Add to Cursor MCP settings:
|
|
307
|
+
```json
|
|
308
|
+
{
|
|
309
|
+
"command": "anchor-mcp",
|
|
310
|
+
"env": {
|
|
311
|
+
"ANCHOR_API_URL": "http://localhost:3160"
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Quick-Start Demo (2 Minutes)
|
|
317
|
+
|
|
318
|
+
```bash
|
|
319
|
+
# 1. Start the MCP server
|
|
320
|
+
anchor-mcp &
|
|
321
|
+
|
|
322
|
+
# 2. Ingest some text (via API for demo)
|
|
323
|
+
curl -X POST http://localhost:3160/v1/research/upload-raw \
|
|
324
|
+
-H "Content-Type: application/json" \
|
|
325
|
+
-d '{
|
|
326
|
+
"content": "The STAR algorithm uses physics-based scoring with temporal decay.",
|
|
327
|
+
"filename": "star-notes.md",
|
|
328
|
+
"bucket": "inbox"
|
|
329
|
+
}'
|
|
330
|
+
|
|
331
|
+
# 3. Search for it
|
|
332
|
+
curl -X POST http://localhost:3160/v1/memory/search \
|
|
333
|
+
-H "Content-Type: application/json" \
|
|
334
|
+
-d '{
|
|
335
|
+
"query": "STAR algorithm physics scoring",
|
|
336
|
+
"token_budget": 1024
|
|
337
|
+
}'
|
|
338
|
+
|
|
339
|
+
# 4. Or use MCP tools in your AI agent
|
|
340
|
+
# In Claude/Qwen: "/anchor_query query=STAR algorithm"
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### Security
|
|
344
|
+
|
|
345
|
+
- **Write operations disabled by default** β Must explicitly enable in settings
|
|
346
|
+
- **Rate limiting** β Configurable requests per minute
|
|
347
|
+
- **API key authentication** β Optional but recommended
|
|
348
|
+
- **Localhost restriction** β Only accept local connections by default
|
|
349
|
+
- **Bucket safety** β Defaults to `external-inbox` for untrusted content
|
|
350
|
+
|
|
351
|
+
See full documentation: **[mcp-server/README.md](mcp-server/README.md)**
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## ποΈ Our Philosophy: AI Memory Should Work Like Your Brain
|
|
356
|
+
|
|
357
|
+
Human memory is remarkably efficient. It runs on ~20 watts, forgets irrelevant details, and over time clarifies core truths rather than drowning in noise. It doesn't store raw experiencesβit stores *patterns*, *relationships*, and *meaning*.
|
|
358
|
+
|
|
359
|
+
Most AI memory systems do the opposite: they hoard data, bruteβforce compute similarity, and require massive infrastructure.
|
|
360
|
+
|
|
361
|
+
**Anchor Engine was built on a different premise: AI memory should work like the human mindβlightweight, connected, and selfβclarifying.**
|
|
362
|
+
|
|
363
|
+
| Principle | What It Means | How Anchor Implements It |
|
|
364
|
+
|-----------|---------------|--------------------------|
|
|
365
|
+
| **π§ Forgetting is a feature** | The brain forgets constantly, leaving only what matters | `distill:` command removes redundancy; temporal decay |
|
|
366
|
+
| **π Meaning lives in relationships** | We store how concepts connect, not isolated facts | Graph model with typed edges; STAR algorithm |
|
|
367
|
+
| **β‘ Low power, high efficiency** | The brain achieves its magic on ~20 watts | Pointerβonly database; content on disk; <1GB RAM |
|
|
368
|
+
| **π Clarity through distillation** | Memory builds higherβlevel abstractions over time | Decision Records v2.0 extract the *why* |
|
|
369
|
+
| **π Explainability builds trust** | You know *why* a memory came to mind | Provenance tracking; receipts with timestamps |
|
|
370
|
+
|
|
371
|
+
> **Why This Matters:** Most AI memory systems are built for **scale**, not for **sense**. Anchor Engine is designed for **senseβmaking**βfor agents that need to remember not just *what* happened, but *why*, and to get *clearer* over time.
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## ποΈ Architecture at a Glance
|
|
376
|
+
|
|
377
|
+
```
|
|
378
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
379
|
+
β YOU β
|
|
380
|
+
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
|
|
381
|
+
β
|
|
382
|
+
βΌ
|
|
383
|
+
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
384
|
+
β β‘ ANCHOR ENGINE β
|
|
385
|
+
β (Deterministic Memory Layer) β
|
|
386
|
+
β β
|
|
387
|
+
β - Graph traversal (STAR algorithm) β
|
|
388
|
+
β - Pointer-only index (<1GB RAM) β
|
|
389
|
+
β - Deterministic retrieval (same query = same result) β
|
|
390
|
+
ββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββ
|
|
391
|
+
β
|
|
392
|
+
βββββββββββββΌββββββββββββ
|
|
393
|
+
β β β
|
|
394
|
+
βΌ βΌ βΌ
|
|
395
|
+
ββββββββββββββββ ββββββββββββ βββββββββββββββ
|
|
396
|
+
β PGlite β β mirrored β β MCP Clients β
|
|
397
|
+
β (WASM DB) β β _brain/ β β (Claude, β
|
|
398
|
+
β β β (Content)β β Cursor) β
|
|
399
|
+
ββββββββββββββββ ββββββββββββ βββββββββββββββ
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**Key Insight:** Content lives in `mirrored_brain/` filesystem. Database stores **pointers only** (byte offsets + metadata). This makes the database **disposable and rebuildable**βwipe it and restore in minutes.
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## π Benchmarks (Real Production Data)
|
|
407
|
+
|
|
408
|
+
**Dataset:** 91MB chat history (~25M tokens)
|
|
409
|
+
|
|
410
|
+
| Metric | Result |
|
|
411
|
+
|--------|--------|
|
|
412
|
+
| **Molecules** | 280,000 |
|
|
413
|
+
| **Atoms** | 151,876 |
|
|
414
|
+
| **Files** | 436 |
|
|
415
|
+
| **Ingestion Time** | 178 seconds |
|
|
416
|
+
| **Search Latency (p95)** | <200ms |
|
|
417
|
+
| **Memory (idle)** | ~600MB |
|
|
418
|
+
| **Memory (peak)** | ~1.6GB |
|
|
419
|
+
| **Restore Speed** | 281,690 atoms in 13.8 min |
|
|
420
|
+
|
|
421
|
+
**Hardware:** AMD Ryzen / Intel i7, 16GB RAM, NVMe SSD, no GPU.
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## π οΈ What's New in v4.8.0
|
|
426
|
+
|
|
427
|
+
### MCP Write Operations
|
|
428
|
+
- **`anchor_ingest_text`** - Ingest raw text directly
|
|
429
|
+
- **`anchor_ingest_file`** - Ingest files from filesystem
|
|
430
|
+
- Security toggle (opt-in via `user_settings.json`)
|
|
431
|
+
|
|
432
|
+
### Session Index
|
|
433
|
+
- **`anchor_search_index`** - Fast chat session lookup
|
|
434
|
+
- **`anchor_fetch_session`** - Targeted session retrieval
|
|
435
|
+
- Two-tier memory retrieval
|
|
436
|
+
|
|
437
|
+
### Web UI Improvements
|
|
438
|
+
- **Paste & Ingest** tab - Quick text ingestion
|
|
439
|
+
- Version badge (v4.8.0)
|
|
440
|
+
- Bucket selector (inbox vs external-inbox)
|
|
441
|
+
|
|
442
|
+
### Documentation Overhaul
|
|
443
|
+
- 5 new docs (API, Deployment, Troubleshooting, Source Overview, Testing)
|
|
444
|
+
- Philosophy embedded throughout
|
|
445
|
+
- 7 redundant files archived
|
|
446
|
+
|
|
447
|
+
---
|
|
448
|
+
|
|
449
|
+
## π Documentation
|
|
450
|
+
|
|
451
|
+
### Getting Started
|
|
452
|
+
- **[Quick Start](#-quick-start-5-minutes)** - Install & first query
|
|
453
|
+
- **[docs/API.md](docs/API.md)** - Complete API reference
|
|
454
|
+
- **[docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)** - Deployment guide (local, Docker, VPS, K8s)
|
|
455
|
+
- **[docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md)** - Common issues & fixes
|
|
456
|
+
|
|
457
|
+
### Deep Dive
|
|
458
|
+
- **[docs/whitepaper.md](docs/whitepaper.md)** - STAR algorithm whitepaper
|
|
459
|
+
- **[specs/spec.md](specs/spec.md)** - System specification with diagrams
|
|
460
|
+
- **[specs/current-standards/](specs/current-standards/)** - Active standards (001-010)
|
|
461
|
+
- **[engine/src/README.md](engine/src/README.md)** - Source code overview
|
|
462
|
+
|
|
463
|
+
### Integration
|
|
464
|
+
- **[mcp-server/README.md](mcp-server/README.md)** - MCP integration (Claude, Cursor, Qwen)
|
|
465
|
+
- **[tests/README.md](tests/README.md)** - Testing guide
|
|
466
|
+
- **[benchmarks/README.md](benchmarks/README.md)** - Performance benchmarks
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## π€ Contributing
|
|
471
|
+
|
|
472
|
+
We're building in the open and welcome your input!
|
|
473
|
+
|
|
474
|
+
- **Star the repo** β Helps others find it
|
|
475
|
+
- **Open an issue** β Bugs, features, questions
|
|
476
|
+
- **Start a discussion** β Share use cases
|
|
477
|
+
- **Contribute** β PRs welcome!
|
|
478
|
+
|
|
479
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for guidelines.
|
|
480
|
+
|
|
481
|
+
**Community Health:**
|
|
482
|
+
- [`CODEOWNERS`](.github/CODEOWNERS) - Automatic reviewer assignment
|
|
483
|
+
- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) - Community standards
|
|
484
|
+
- [`CONTRIBUTING.md`](CONTRIBUTING.md) - Contribution guide
|
|
485
|
+
|
|
486
|
+
---
|
|
487
|
+
|
|
488
|
+
## π License
|
|
489
|
+
|
|
490
|
+
AGPL-3.0 β see [LICENSE](LICENSE).
|
|
491
|
+
|
|
492
|
+
---
|
|
493
|
+
|
|
494
|
+
## π Acknowledgments
|
|
495
|
+
|
|
496
|
+
Built with β€οΈ by Robert Balch II and contributors.
|
|
497
|
+
Inspired by the r/LocalLLaMA and r/aiagents communities.
|
|
498
|
+
|
|
499
|
+
**Citation:**
|
|
500
|
+
```bibtex
|
|
501
|
+
@software{anchor_engine,
|
|
502
|
+
title = {STAR: Semantic Temporal Associative Retrieval},
|
|
503
|
+
author = {Balch II, R.S.},
|
|
504
|
+
version = {4.8.0},
|
|
505
|
+
date = {2026-03-18},
|
|
506
|
+
url = {https://github.com/RSBalchII/anchor-engine-node},
|
|
507
|
+
doi = {10.5281/zenodo.18841399}
|
|
508
|
+
}
|
|
509
|
+
```
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
*Your AI's anchor to reality.* β
|