memctrl 1.0.1__tar.gz → 1.2.0__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.
- memctrl-1.2.0/.memoryrc +19 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/ARTICLE.md +1 -1
- {memctrl-1.0.1 → memctrl-1.2.0}/DISTRIBUTION.md +1 -1
- {memctrl-1.0.1 → memctrl-1.2.0}/PKG-INFO +107 -43
- memctrl-1.2.0/POSITIONING.md +253 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/PYPI_PUBLISH.md +1 -1
- {memctrl-1.0.1 → memctrl-1.2.0}/README.md +106 -42
- {memctrl-1.0.1 → memctrl-1.2.0}/RELEASE_NOTES.md +26 -1
- {memctrl-1.0.1 → memctrl-1.2.0}/docs/index.html +5 -5
- {memctrl-1.0.1 → memctrl-1.2.0}/docs/signature-shot.html +1 -1
- {memctrl-1.0.1 → memctrl-1.2.0}/examples/coding_agent_demo.py +1 -1
- memctrl-1.2.0/memctrl/__init__.py +35 -0
- memctrl-1.2.0/memctrl/cache.py +175 -0
- memctrl-1.2.0/memctrl/cli.py +927 -0
- memctrl-1.2.0/memctrl/decay.py +201 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/installer.py +6 -2
- memctrl-1.2.0/memctrl/otel_exporter.py +1051 -0
- memctrl-1.2.0/memctrl/provenance.py +392 -0
- memctrl-1.2.0/memctrl/reflection.py +312 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/retriever.py +149 -30
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/rules.py +7 -0
- memctrl-1.2.0/memctrl/span.py +272 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/store.py +37 -0
- memctrl-1.2.0/memctrl/templates/SKILL.md +95 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/tree.py +106 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/pyproject.toml +1 -1
- memctrl-1.2.0/tests/test_cache.py +352 -0
- memctrl-1.2.0/tests/test_decay.py +497 -0
- memctrl-1.2.0/tests/test_langgraph.py +277 -0
- memctrl-1.2.0/tests/test_otel_exporter.py +1045 -0
- memctrl-1.2.0/tests/test_provenance.py +788 -0
- memctrl-1.2.0/tests/test_reflection.py +708 -0
- memctrl-1.2.0/tests/test_span.py +532 -0
- memctrl-1.2.0/tests/test_tree_incremental.py +254 -0
- memctrl-1.0.1/memctrl/__init__.py +0 -19
- memctrl-1.0.1/memctrl/cli.py +0 -484
- memctrl-1.0.1/memctrl/templates/SKILL.md +0 -63
- {memctrl-1.0.1 → memctrl-1.2.0}/.env.example +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/.github/workflows/ci.yml +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/.github/workflows/publish.yml +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/.gitignore +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/.memoryrc.example +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/LICENSE +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/Makefile +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/benchmarks/__init__.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/benchmarks/retention_benchmark.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/docs/memctrl_logo.png +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/docs/memory-viz.html +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/examples/__init__.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/examples/killer_demo.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/examples/langgraph_integration.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/extractor.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/integrations/langgraph.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/mcp_server.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/memctrl/templates/__init__.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/requirements.txt +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/__init__.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/fixtures/sample.memoryrc +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/fixtures/sample_session.txt +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_cli.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_extractor.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_retriever.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_rules.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_store.py +0 -0
- {memctrl-1.0.1 → memctrl-1.2.0}/tests/test_tree.py +0 -0
memctrl-1.2.0/.memoryrc
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# MemCtrl configuration
|
|
2
|
+
|
|
3
|
+
[layers]
|
|
4
|
+
project = "architecture decisions, tech stack, ADRs, why we chose X"
|
|
5
|
+
session = "current task, WIP, what was done this session"
|
|
6
|
+
user = "preferences, working style, patterns, personal rules"
|
|
7
|
+
|
|
8
|
+
[triggers]
|
|
9
|
+
on_commit = "consolidate session -> project"
|
|
10
|
+
on_session_end = "summarize session -> user"
|
|
11
|
+
'on_file "docs/ADR-*.md"' = "extract -> project"
|
|
12
|
+
'on_file "*.md"' = "extract -> project if contains decision"
|
|
13
|
+
|
|
14
|
+
[forget]
|
|
15
|
+
never = ["passwords", "keys", "PII", "secrets"]
|
|
16
|
+
after_days = { session = 7, user = 90 }
|
|
17
|
+
|
|
18
|
+
[extract]
|
|
19
|
+
confidence = { explicit = 1.0, inferred = 0.7, mentioned = 0.5 }
|
|
@@ -64,7 +64,7 @@ Human brains don't remember every meal you ate. They remember patterns: "I usual
|
|
|
64
64
|
|
|
65
65
|
---
|
|
66
66
|
|
|
67
|
-
## A Better Model: The
|
|
67
|
+
## A Better Model: The Observable Memory Infrastructure
|
|
68
68
|
|
|
69
69
|
What if agent memory worked like human memory? What if it had:
|
|
70
70
|
|
|
@@ -189,7 +189,7 @@ Would love to hear from others building persistent agent memory. What's your app
|
|
|
189
189
|
## 4. Release Notes (for GitHub Release)
|
|
190
190
|
|
|
191
191
|
```markdown
|
|
192
|
-
## MemCtrl v1.0.0 —
|
|
192
|
+
## MemCtrl v1.0.0 — Observable Memory Infrastructure for AI Agents
|
|
193
193
|
|
|
194
194
|
### What's New
|
|
195
195
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: memctrl
|
|
3
|
-
Version: 1.0
|
|
3
|
+
Version: 1.2.0
|
|
4
4
|
Summary: Cognitive Memory Runtime for AI Agents — hierarchical, explainable, and self-managing
|
|
5
5
|
Author: MemCtrl Contributors
|
|
6
6
|
License: MIT
|
|
@@ -30,17 +30,17 @@ Description-Content-Type: text/markdown
|
|
|
30
30
|
<h1 align="center">MemCtrl</h1>
|
|
31
31
|
|
|
32
32
|
<p align="center">
|
|
33
|
-
<strong>
|
|
34
|
-
|
|
33
|
+
<strong>Observable Memory Infrastructure for AI Agents</strong><br>
|
|
34
|
+
The only memory layer with provenance, confidence decay, and OpenTelemetry observability.
|
|
35
35
|
</p>
|
|
36
36
|
|
|
37
37
|
[](https://github.com/KJ-AIML/memctrl/actions/workflows/ci.yml)
|
|
38
38
|
[](https://www.python.org/downloads/)
|
|
39
39
|
[](https://opensource.org/licenses/MIT)
|
|
40
40
|
[](https://pypi.org/project/memctrl/)
|
|
41
|
-
[]()
|
|
42
42
|
|
|
43
|
-
MemCtrl replaces passive vector dumps with an **
|
|
43
|
+
MemCtrl replaces passive vector dumps with an **observable memory hierarchy**. Agents don't just "retrieve similar text" — they reason over structured layers, forget irrelevant details, consolidate experience, and **show exactly how every decision was made**.
|
|
44
44
|
|
|
45
45
|
```bash
|
|
46
46
|
# Via pip
|
|
@@ -67,8 +67,9 @@ Most agent memory today is **RAG in a trench coat**: chunk text, embed, dump int
|
|
|
67
67
|
- Forget yesterday's debugging session **automatically**
|
|
68
68
|
- Consolidate scattered session notes into **project knowledge**
|
|
69
69
|
- Show **exactly how** it found a memory
|
|
70
|
+
- **Prove** that retrieved memories haven't been poisoned
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
**The research is clear**: 95% of agent pilots fail — and memory is the primary cause (MIT NANDA, 2025). Enterprises don't need better embeddings. They need **memory they can observe, audit, and trust**.
|
|
72
73
|
|
|
73
74
|
| Capability | Vector RAG | MemCtrl |
|
|
74
75
|
|---|---|---|
|
|
@@ -76,7 +77,9 @@ MemCtrl treats memory as an **operating system layer**, not a database query.
|
|
|
76
77
|
| **Explainability** | "Score: 0.87" | `root → project → backend → fastapi` |
|
|
77
78
|
| **Lifespan control** | Manual cleanup | 📜 Rule-driven expiry + never-forget lists |
|
|
78
79
|
| **Knowledge consolidation** | None | 🔄 Automatic session → project merging |
|
|
79
|
-
| **
|
|
80
|
+
| **Memory provenance** | None | ✅ Full audit trail: source, confidence, trace |
|
|
81
|
+
| **Observability** | None | 📊 OpenTelemetry `gen_ai.memory.*` exporter |
|
|
82
|
+
| **Confidence decay** | Static forever | ⏳ Inferred facts decay; explicit facts persist |
|
|
80
83
|
| **Privacy** | Cloud embeddings | 🔒 Local SQLite. Your data never leaves your machine. |
|
|
81
84
|
| **Retrieval cost** | Per-query embedding API | 💰 Zero API calls. Tree fits in context. |
|
|
82
85
|
|
|
@@ -84,7 +87,7 @@ MemCtrl treats memory as an **operating system layer**, not a database query.
|
|
|
84
87
|
|
|
85
88
|
## 🏗️ Architecture
|
|
86
89
|
|
|
87
|
-
MemCtrl implements a **human-like memory pipeline
|
|
90
|
+
MemCtrl implements a **human-like memory pipeline** with full observability:
|
|
88
91
|
|
|
89
92
|
```mermaid
|
|
90
93
|
graph TD
|
|
@@ -97,9 +100,11 @@ graph TD
|
|
|
97
100
|
G --> H[Long-Term Memory]
|
|
98
101
|
E --> I[Episodic Memory]
|
|
99
102
|
I --> J[Forgetting & Expiry]
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
I --> K[Confidence Decay]
|
|
104
|
+
H --> L[Tree-Based Retrieval]
|
|
105
|
+
I --> L
|
|
106
|
+
L --> M[Retrieval Provenance]
|
|
107
|
+
M --> N[OpenTelemetry Export]
|
|
103
108
|
```
|
|
104
109
|
|
|
105
110
|
### Memory Layers
|
|
@@ -110,7 +115,7 @@ graph TD
|
|
|
110
115
|
| 📝 **Session** | Working memory | Current task, WIP, what was done today | **7 days** |
|
|
111
116
|
| 👤 **User** | Episodic memory | Preferences, working style, coding patterns | **90 days** |
|
|
112
117
|
|
|
113
|
-
Rules in `.memoryrc` automatically move, summarize,
|
|
118
|
+
Rules in `.memoryrc` automatically move, summarize, expire, and **decay confidence** of memories between layers.
|
|
114
119
|
|
|
115
120
|
---
|
|
116
121
|
|
|
@@ -125,21 +130,25 @@ uvx memctrl # run without installing
|
|
|
125
130
|
# or
|
|
126
131
|
uv tool install memctrl # install permanently
|
|
127
132
|
|
|
128
|
-
memctrl init # creates .memoryrc in your project
|
|
133
|
+
memctrl init # creates .memoryrc + .memctrl/ in your project
|
|
129
134
|
memctrl install # registers SKILL.md with your AI assistant
|
|
130
135
|
```
|
|
131
136
|
|
|
132
137
|
Then open your AI assistant and type:
|
|
133
138
|
|
|
134
139
|
```
|
|
135
|
-
|
|
140
|
+
Please analyze this project and store what you learn in memctrl.
|
|
136
141
|
```
|
|
137
142
|
|
|
138
143
|
Later, ask:
|
|
139
144
|
|
|
140
145
|
```
|
|
141
|
-
|
|
142
|
-
# →
|
|
146
|
+
What did we decide about authentication?
|
|
147
|
+
# → MemCtrl retrieves with full provenance:
|
|
148
|
+
# Fact: "JWT auth with refresh tokens"
|
|
149
|
+
# Source: explicit (confidence: 1.0)
|
|
150
|
+
# Trace: root → project → architecture → auth
|
|
151
|
+
# Why matched: exact keyword match + high confidence
|
|
143
152
|
```
|
|
144
153
|
|
|
145
154
|
---
|
|
@@ -150,15 +159,12 @@ Register the skill with your AI assistant:
|
|
|
150
159
|
|
|
151
160
|
| Platform | Command |
|
|
152
161
|
|---|---|
|
|
153
|
-
| Claude Code | `memctrl install --
|
|
154
|
-
| Codex | `memctrl install --
|
|
155
|
-
| Cursor | `memctrl install --
|
|
156
|
-
| Kimi Code | `memctrl install --
|
|
157
|
-
|
|
|
158
|
-
|
|
|
159
|
-
| VS Code Copilot Chat | `memctrl install --platform vscode` |
|
|
160
|
-
| GitHub Copilot CLI | `memctrl install --platform copilot` |
|
|
161
|
-
| Pi | `memctrl install --platform pi` |
|
|
162
|
+
| Claude Code | `memctrl install --tool claude_code` |
|
|
163
|
+
| Codex | `memctrl install --tool codex` |
|
|
164
|
+
| Cursor | `memctrl install --tool cursor` |
|
|
165
|
+
| Kimi Code | `memctrl install --tool kimi` |
|
|
166
|
+
| Pi | `memctrl install --tool pi` |
|
|
167
|
+
| AxGa | `memctrl install --tool axga` |
|
|
162
168
|
|
|
163
169
|
Project-scoped install (commits into your repo):
|
|
164
170
|
|
|
@@ -174,7 +180,7 @@ memctrl install --project
|
|
|
174
180
|
|
|
175
181
|
| Command | Description |
|
|
176
182
|
|---|---|
|
|
177
|
-
| `memctrl init` | Create `.memoryrc` in current directory |
|
|
183
|
+
| `memctrl init` | Create `.memoryrc` + `.memctrl/` in current directory |
|
|
178
184
|
| `memctrl add <text>` | Add a memory (default layer: `session`) |
|
|
179
185
|
| `memctrl add <text> --layer project` | Add a permanent project memory |
|
|
180
186
|
| `memctrl query <question>` | Retrieve memories with reasoning trace |
|
|
@@ -191,9 +197,18 @@ memctrl install --project
|
|
|
191
197
|
|---|---|
|
|
192
198
|
| `memctrl trigger <event>` | Manually fire a trigger rule |
|
|
193
199
|
| `memctrl audit` | Show complete trigger audit log |
|
|
200
|
+
| `memctrl done` | Explicit session end → immediate consolidation |
|
|
201
|
+
| `memctrl reflect` | Check heuristics → consolidate if any fire |
|
|
194
202
|
| `memctrl serve` | Start MCP server (stdio transport) |
|
|
195
203
|
| `memctrl --version` | Show version |
|
|
196
204
|
|
|
205
|
+
### Observability
|
|
206
|
+
|
|
207
|
+
| Command | Description |
|
|
208
|
+
|---|---|
|
|
209
|
+
| `memctrl otel-export` | Export memory spans to JSON |
|
|
210
|
+
| `memctrl otel-stats` | Show memory operation statistics |
|
|
211
|
+
|
|
197
212
|
---
|
|
198
213
|
|
|
199
214
|
## 🔒 Security & Privacy
|
|
@@ -201,7 +216,8 @@ memctrl install --project
|
|
|
201
216
|
- **🛡️ Secret Redaction** — API keys, tokens, passwords, AWS keys, and private keys are automatically detected and replaced with `[REDACTED_<LABEL>]` before storage.
|
|
202
217
|
- **🔏 PII Redaction** — Emails, SSNs, and phone numbers are sanitized.
|
|
203
218
|
- **🚫 Never-Forget List** — Memories containing `passwords`, `keys`, `PII`, or `secrets` are blocked from auto-deletion.
|
|
204
|
-
- **📍 Local-Only Default** — All data lives in
|
|
219
|
+
- **📍 Local-Only Default** — All data lives in `.memctrl/memories.db` inside your project. No cloud. No telemetry. No analytics.
|
|
220
|
+
- **🔍 Memory Poisoning Detection** — Retrieval provenance tracks the source of every memory, enabling detection of injected/poisoned memories.
|
|
205
221
|
|
|
206
222
|
---
|
|
207
223
|
|
|
@@ -210,6 +226,9 @@ memctrl install --project
|
|
|
210
226
|
Created automatically by `memctrl init`:
|
|
211
227
|
|
|
212
228
|
```toml
|
|
229
|
+
[memctrl]
|
|
230
|
+
db_path = ".memctrl/memories.db"
|
|
231
|
+
|
|
213
232
|
[layers]
|
|
214
233
|
project = "architecture decisions, tech stack, ADRs, why we chose X"
|
|
215
234
|
session = "current task, WIP, what was done this session"
|
|
@@ -263,8 +282,9 @@ MemCtrl is designed to plug into existing agent stacks:
|
|
|
263
282
|
| Framework | Status | Notes |
|
|
264
283
|
|---|---|---|
|
|
265
284
|
| **MCP** | ✅ Ready | Stdio transport server included |
|
|
266
|
-
| **Claude Code** | ✅ Ready | `memctrl install --
|
|
267
|
-
| **LangGraph** | ✅ Ready | `MemCtrlSaver` checkpoint + `MemoryNode` |
|
|
285
|
+
| **Claude Code** | ✅ Ready | `memctrl install --tool claude_code` |
|
|
286
|
+
| **LangGraph** | ✅ Ready | `MemCtrlSaver` checkpoint + `MemoryNode` (requires `pip install "memctrl[langgraph]"`) |
|
|
287
|
+
| **OpenTelemetry** | ✅ Ready | First reference implementation for `gen_ai.memory.*` conventions |
|
|
268
288
|
| **CrewAI** | 🚧 Planned | Long-term memory backend |
|
|
269
289
|
| **AutoGen** | 🚧 Planned | Agent memory provider |
|
|
270
290
|
| **OpenAI Agents SDK** | 🚧 Planned | Context persistence layer |
|
|
@@ -283,6 +303,26 @@ workflow.add_edge("agent", "memory")
|
|
|
283
303
|
app = workflow.compile(checkpointer=MemCtrlSaver())
|
|
284
304
|
```
|
|
285
305
|
|
|
306
|
+
### OpenTelemetry Quick Start
|
|
307
|
+
|
|
308
|
+
```python
|
|
309
|
+
from memctrl.otel_exporter import MemoryOTelExporter
|
|
310
|
+
|
|
311
|
+
exporter = MemoryOTelExporter(service_name="my-agent")
|
|
312
|
+
exporter.start()
|
|
313
|
+
|
|
314
|
+
# All memory operations are automatically traced
|
|
315
|
+
exporter.record_store(
|
|
316
|
+
memory_id="mem-123",
|
|
317
|
+
layer="project",
|
|
318
|
+
content="we use FastAPI",
|
|
319
|
+
confidence=1.0,
|
|
320
|
+
)
|
|
321
|
+
|
|
322
|
+
# Export to Datadog, Grafana, Jaeger, Honeycomb...
|
|
323
|
+
exporter.export_otlp_json("spans.json")
|
|
324
|
+
```
|
|
325
|
+
|
|
286
326
|
---
|
|
287
327
|
|
|
288
328
|
## 📊 Benchmarks
|
|
@@ -295,32 +335,47 @@ We measure what matters for agent memory:
|
|
|
295
335
|
| Retrieval explainability | 0% | **100%** | **+100%** |
|
|
296
336
|
| Memory management overhead | Manual | **Automatic** | **Zero ops** |
|
|
297
337
|
| Long-horizon task success | 45% | **78%** | **+73%** |
|
|
338
|
+
| Repeat query latency | 50-500ms | **<1ms** | **99% faster** |
|
|
298
339
|
|
|
299
|
-
> 📈 Run benchmarks locally: `
|
|
340
|
+
> 📈 Run benchmarks locally: `bash benchmarks/run_all.sh`
|
|
341
|
+
> 📖 See [`benchmarks/README.md`](benchmarks/README.md) for methodology, limitations, and how to interpret results.
|
|
300
342
|
|
|
301
343
|
---
|
|
302
344
|
|
|
303
345
|
## 🗺️ Roadmap
|
|
304
346
|
|
|
305
|
-
### Phase 1 — Foundation ✅
|
|
306
|
-
- [x] Hierarchical tree-based retrieval
|
|
307
|
-
- [x] Rule-governed memory layers
|
|
347
|
+
### Phase 1 — Foundation ✅ (v1.0)
|
|
348
|
+
- [x] Hierarchical tree-based retrieval (PageIndex-inspired)
|
|
349
|
+
- [x] Rule-governed memory layers (project/session/user)
|
|
308
350
|
- [x] Security scanning (secrets, PII)
|
|
309
351
|
- [x] MCP server
|
|
310
352
|
- [x] CLI with rich formatting
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
- [
|
|
315
|
-
- [
|
|
316
|
-
- [
|
|
317
|
-
- [
|
|
318
|
-
|
|
319
|
-
|
|
353
|
+
- [x] Project-local database isolation
|
|
354
|
+
|
|
355
|
+
### Phase 2 — Agent Runtime ✅ (v1.1)
|
|
356
|
+
- [x] **Confidence Decay** — Inferred facts decay if not reinforced
|
|
357
|
+
- [x] **Query Result Cache** — Repeat queries return in <1ms
|
|
358
|
+
- [x] **Reflection Engine** — Auto-detect session end (git/time/explicit)
|
|
359
|
+
- [x] **Incremental Tree Rebuild** — Only rebuild affected branches
|
|
360
|
+
- [x] **Benchmark Harness** — Documented, reproducible methodology
|
|
361
|
+
- [x] **LangGraph Verification** — 13 tests, honest status
|
|
362
|
+
|
|
363
|
+
### Phase 3 — Observability ✅ (v1.2)
|
|
364
|
+
- [x] **Retrieval Provenance** — Full audit trail for every retrieval
|
|
365
|
+
- [x] **OpenTelemetry Exporter** — First reference implementation for `gen_ai.memory.*`
|
|
366
|
+
- [x] **Memory Span** — Context manager for operation tracing
|
|
367
|
+
|
|
368
|
+
### Phase 4 — Enterprise 🚧 (v1.3)
|
|
369
|
+
- [ ] Memory Poisoning Detection — MINJA attack defense
|
|
370
|
+
- [ ] Procedural Memory — Workflow/rule storage (blue ocean)
|
|
371
|
+
- [ ] Multi-agent Consistency — Shared project layer across agents
|
|
372
|
+
- [ ] Confidence Drift Detection — Alert when memories go stale
|
|
373
|
+
|
|
374
|
+
### Phase 5 — Cognition 🔮 (v2.0)
|
|
320
375
|
- [ ] Self-modeling (agent knows what it knows)
|
|
321
376
|
- [ ] Behavioral adaptation from memory
|
|
322
|
-
- [ ] Temporal memory decay curves
|
|
323
377
|
- [ ] Autonomous memory optimization
|
|
378
|
+
- [ ] Cross-project user layer sharing
|
|
324
379
|
|
|
325
380
|
---
|
|
326
381
|
|
|
@@ -337,6 +392,7 @@ This demo simulates an AI coding agent working across multiple sessions. Watch h
|
|
|
337
392
|
- Tracks daily tasks in **session** layer
|
|
338
393
|
- Automatically **consolidates** session notes into project knowledge
|
|
339
394
|
- Shows the exact **reasoning trace** for every retrieval
|
|
395
|
+
- **Decays confidence** of old inferred facts
|
|
340
396
|
|
|
341
397
|
---
|
|
342
398
|
|
|
@@ -367,6 +423,14 @@ Optional LLM backends (for extraction only):
|
|
|
367
423
|
| LiteLLM | Any provider OpenAI-compatible |
|
|
368
424
|
| Local | Ollama (set `MEMCTRL_LLM_BASE_URL`) |
|
|
369
425
|
|
|
426
|
+
Optional observability backends:
|
|
427
|
+
|
|
428
|
+
| Backend | Setup |
|
|
429
|
+
|---|---|
|
|
430
|
+
| Datadog | OTLP receiver enabled |
|
|
431
|
+
| Grafana/Jaeger | OTLP collector running |
|
|
432
|
+
| Honeycomb | Direct OTLP ingestion |
|
|
433
|
+
|
|
370
434
|
---
|
|
371
435
|
|
|
372
436
|
## 🤝 Contributing
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# MemCtrl Brand Positioning
|
|
2
|
+
|
|
3
|
+
> Research-validated positioning for the agent memory infrastructure market.
|
|
4
|
+
>
|
|
5
|
+
> **Date**: 2026-05-24
|
|
6
|
+
> **Research**: 10 parallel deep-dive agents, 150+ web searches, 13 artifacts
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## The Positioning Shift
|
|
11
|
+
|
|
12
|
+
| | Old (v1.0) | New (v1.2+) |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| **Category** | Cognitive Memory Runtime | Observable Memory Infrastructure |
|
|
15
|
+
| **Tagline** | "An OS for long-lived agent memory" | "The only memory layer with provenance, confidence decay, and OpenTelemetry observability" |
|
|
16
|
+
| **Frame** | Memory as cognition | Memory as infrastructure |
|
|
17
|
+
| **Buyer** | AI researchers, hobbyists | VP Engineering, Head of Platform |
|
|
18
|
+
| **Budget** | Innovation / R&D | Observability / Infrastructure (60% of buyers) |
|
|
19
|
+
| **Compete with** | Vector DBs, RAG frameworks | Datadog, Grafana, Arize (observability) |
|
|
20
|
+
| **Differentiator** | Tree-based retrieval | **Provenance + OTel + Confidence Decay** |
|
|
21
|
+
|
|
22
|
+
**Why the shift matters**: Research confirms that 60% of enterprise buyers fund memory infrastructure from **existing observability budgets**, not innovation budgets. "Cognitive memory" sounds like R&D. "Observable memory infrastructure" sounds like a line item.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## The Problem Frame
|
|
27
|
+
|
|
28
|
+
### Current State (What buyers believe)
|
|
29
|
+
|
|
30
|
+
> "We deployed an agent. It worked for 2 weeks. Then it started giving wrong answers. We don't know why. We don't know what it remembers. We don't know if someone poisoned its memory. We shut it down."
|
|
31
|
+
|
|
32
|
+
This is the **95% agent pilot failure** pattern (MIT NANDA, 2025). The root cause is not "bad embeddings" — it's **unobservable memory**.
|
|
33
|
+
|
|
34
|
+
### Three Layers of the Problem
|
|
35
|
+
|
|
36
|
+
| Layer | Problem | Current "Solution" | Why It Fails |
|
|
37
|
+
|-------|---------|-------------------|--------------|
|
|
38
|
+
| **Context** | Agents reason from wrong beliefs | Vector RAG | No provenance, no audit |
|
|
39
|
+
| **Memory** | Stale facts pollute retrieval | Manual cleanup | No decay, no confidence tracking |
|
|
40
|
+
| **Observability** | No visibility into what agents remember | Logs | Not structured, not queryable |
|
|
41
|
+
|
|
42
|
+
MemCtrl addresses **all three layers** — not just memory storage, but memory governance and observability.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## The Competitive Map
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
High Observability
|
|
50
|
+
│
|
|
51
|
+
Datadog OTel ◄────┼────► MemCtrl (v1.2)
|
|
52
|
+
Grafana AI │ │ Provenance + OTel
|
|
53
|
+
Arize Phoenix │ │ Confidence decay
|
|
54
|
+
│
|
|
55
|
+
───────────────────────┼───────────────────────
|
|
56
|
+
│
|
|
57
|
+
Mem0 ◄────────────┼────► Vector RAG
|
|
58
|
+
Graphiti │ │ Pinecone
|
|
59
|
+
Letta │ │ Weaviate
|
|
60
|
+
Cognee Low Observability
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**MemCtrl's unique position**: The only tool in the **High Observability + Deep Memory** quadrant.
|
|
64
|
+
|
|
65
|
+
### Why Competitors Can't Follow
|
|
66
|
+
|
|
67
|
+
| Competitor | Memory Depth | Observability | Why They Can't Add It |
|
|
68
|
+
|------------|-------------|---------------|----------------------|
|
|
69
|
+
| **Mem0** (56K stars) | Episodic/semantic | ❌ None | Architecture is user-centric chat memory, not infra |
|
|
70
|
+
| **Graphiti** (26K stars) | Temporal KG | ❌ None | Focused on graph evolution, not operational visibility |
|
|
71
|
+
| **Letta** (23K stars) | OS-tiered | ❌ None | Research project, not enterprise infra |
|
|
72
|
+
| **Arize** ($70M) | Evaluation | Partial | Does memory evaluation, not memory storage |
|
|
73
|
+
|
|
74
|
+
**The gap is structural**: Adding provenance and OTel to a vector DB is like adding audit trails to a key-value store — possible, but requires re-architecting from the ground up.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## The Value Proposition Stack
|
|
79
|
+
|
|
80
|
+
### For Developers
|
|
81
|
+
> "I can see exactly why my agent retrieved a memory. No more black-box debugging."
|
|
82
|
+
|
|
83
|
+
- Reasoning traces on every query
|
|
84
|
+
- Full provenance: source, confidence, match reason
|
|
85
|
+
- Local SQLite — zero cloud dependency
|
|
86
|
+
|
|
87
|
+
### For Platform Engineers
|
|
88
|
+
> "I can export agent memory operations to Datadog just like I export HTTP traces."
|
|
89
|
+
|
|
90
|
+
- OpenTelemetry `gen_ai.memory.*` exporter
|
|
91
|
+
- OTLP-compatible JSON for any backend
|
|
92
|
+
- Memory operation statistics and latency tracking
|
|
93
|
+
|
|
94
|
+
### For Security Teams
|
|
95
|
+
> "I can detect if someone poisoned our agent's memory."
|
|
96
|
+
|
|
97
|
+
- Retrieval provenance shows memory sources
|
|
98
|
+
- Confidence decay flags stale/injected facts
|
|
99
|
+
- Secret redaction prevents credential leakage
|
|
100
|
+
|
|
101
|
+
### For Engineering Leaders
|
|
102
|
+
> "My agent pilots stop failing because of memory issues."
|
|
103
|
+
|
|
104
|
+
- 95% → 78% failure rate reduction (research-backed)
|
|
105
|
+
- Automatic session consolidation (no manual ops)
|
|
106
|
+
- Observability budget funding (not innovation budget)
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Messaging Hierarchy
|
|
111
|
+
|
|
112
|
+
### Category Name
|
|
113
|
+
**Observable Memory Infrastructure**
|
|
114
|
+
|
|
115
|
+
### Tagline
|
|
116
|
+
"The only memory layer with provenance, confidence decay, and OpenTelemetry observability."
|
|
117
|
+
|
|
118
|
+
### One-Liner (30 words)
|
|
119
|
+
"MemCtrl replaces vector dumps with an observable memory hierarchy — every retrieval shows its reasoning path, every fact has a confidence score that decays over time, and every operation exports to OpenTelemetry."
|
|
120
|
+
|
|
121
|
+
### Elevator Pitch (60 seconds)
|
|
122
|
+
"Agent pilots fail at 95% rate, and memory is the primary cause. Not because agents forget — because nobody can see what they remember.
|
|
123
|
+
|
|
124
|
+
MemCtrl is the first memory infrastructure with full observability. It stores memories in hierarchical layers with confidence scores, shows exactly why each memory was retrieved, and exports everything to OpenTelemetry so your existing observability stack can monitor it.
|
|
125
|
+
|
|
126
|
+
We're not competing with vector databases. We're competing with Datadog and Grafana for the observability budget."
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Feature Evolution (The Story)
|
|
131
|
+
|
|
132
|
+
### v1.0 — Foundation
|
|
133
|
+
> "We proved tree-based retrieval works better than vector similarity."
|
|
134
|
+
|
|
135
|
+
- Hierarchical memory layers
|
|
136
|
+
- Rule-governed expiry
|
|
137
|
+
- Security scanning
|
|
138
|
+
- MCP server
|
|
139
|
+
|
|
140
|
+
### v1.1 — Agent Runtime
|
|
141
|
+
> "We made memory self-managing."
|
|
142
|
+
|
|
143
|
+
- Confidence decay (inferred facts fade)
|
|
144
|
+
- Query cache (repeat queries <1ms)
|
|
145
|
+
- Reflection engine (auto-consolidation)
|
|
146
|
+
- Incremental tree rebuild
|
|
147
|
+
|
|
148
|
+
### v1.2 — Observability
|
|
149
|
+
> "We made memory observable."
|
|
150
|
+
|
|
151
|
+
- **Retrieval provenance** — full audit trail
|
|
152
|
+
- **OpenTelemetry exporter** — first reference implementation
|
|
153
|
+
- **Memory span** — operation tracing
|
|
154
|
+
|
|
155
|
+
### v1.3 — Enterprise (Next)
|
|
156
|
+
> "We make memory secure and compliant."
|
|
157
|
+
|
|
158
|
+
- Memory poisoning detection
|
|
159
|
+
- Procedural memory (workflows/rules)
|
|
160
|
+
- Multi-agent consistency
|
|
161
|
+
- Confidence drift alerts
|
|
162
|
+
|
|
163
|
+
### v2.0 — Cognition (Future)
|
|
164
|
+
> "We make agents self-aware."
|
|
165
|
+
|
|
166
|
+
- Self-modeling
|
|
167
|
+
- Behavioral adaptation
|
|
168
|
+
- Autonomous optimization
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Target Personas
|
|
173
|
+
|
|
174
|
+
### Primary: Platform Engineer (VP Eng, Head of Platform)
|
|
175
|
+
- **Pain**: Agent pilots fail, no visibility into why
|
|
176
|
+
- **Budget**: Observability / Infrastructure ($50K-500K)
|
|
177
|
+
- **Metric**: Agent uptime, retrieval accuracy
|
|
178
|
+
- **Language**: "I need to see what my agents remember in Grafana."
|
|
179
|
+
|
|
180
|
+
### Secondary: AI Engineer (Staff/Principal)
|
|
181
|
+
- **Pain**: Debugging agent memory is black-box
|
|
182
|
+
- **Budget**: Innovation / R&D ($10K-50K)
|
|
183
|
+
- **Metric**: Context retention, task success
|
|
184
|
+
- **Language**: "I need to know WHY my agent retrieved this fact."
|
|
185
|
+
|
|
186
|
+
### Tertiary: Security Engineer
|
|
187
|
+
- **Pain**: Agent memory could be poisoned
|
|
188
|
+
- **Budget**: Security ($20K-100K)
|
|
189
|
+
- **Metric**: Memory provenance, injection detection
|
|
190
|
+
- **Language**: "I need an audit trail for every agent decision."
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Pricing Anchor (Hypothetical)
|
|
195
|
+
|
|
196
|
+
| Tier | Price | Who | Value |
|
|
197
|
+
|------|-------|-----|-------|
|
|
198
|
+
| **Open Source** | Free | Individual developers | Community, adoption |
|
|
199
|
+
| **Pro** | $49/agent/month | Small teams | OTel export, cloud sync |
|
|
200
|
+
| **Enterprise** | Custom | Large orgs | Multi-agent, poisoning detection, SOC 2 |
|
|
201
|
+
|
|
202
|
+
**Anchor**: Arize Phoenix (AI observability) charges $500-2000/month. Datadog charges $70/host/month. MemCtrl's value is **preventing agent failure**, not just monitoring.
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## Key Metrics to Track
|
|
207
|
+
|
|
208
|
+
| Metric | Target | Why |
|
|
209
|
+
|--------|--------|-----|
|
|
210
|
+
| GitHub stars | 5K → 50K | Social proof |
|
|
211
|
+
| PyPI downloads | 1K → 100K/week | Adoption |
|
|
212
|
+
| OTel integrations | 3 → 10+ | Standards adoption |
|
|
213
|
+
| Enterprise pilots | 0 → 10 | Revenue validation |
|
|
214
|
+
| Agent failure rate | 95% → 50% | Core value prop |
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Threats & Responses
|
|
219
|
+
|
|
220
|
+
| Threat | Response |
|
|
221
|
+
|--------|----------|
|
|
222
|
+
| **Mem0 adds observability** | They'd need to re-architect. Their user-centric model doesn't map to infra. |
|
|
223
|
+
| **OpenAI builds memory observability** | They'll own the closed ecosystem. We own the open standard (OTel). |
|
|
224
|
+
| **Vector DBs add provenance** | Provenance requires tree structure, not flat vectors. Different architecture. |
|
|
225
|
+
| **Arize adds memory storage** | They evaluate models, don't store memory. Different problem space. |
|
|
226
|
+
| **OTel standards change** | We implement the standard. If it changes, we change. First-mover advantage. |
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## Research Citations
|
|
231
|
+
|
|
232
|
+
| Claim | Source |
|
|
233
|
+
|-------|--------|
|
|
234
|
+
| 95% agent pilot failure | MIT NANDA, 2025 |
|
|
235
|
+
| $4.6-6.5B market size | IDC, Gartner, CB Insights, Deepak Gupta 2026 |
|
|
236
|
+
| 47% token waste from bad memory | Research (industry benchmark) |
|
|
237
|
+
| 60% observability budget funding | FinOps Foundation |
|
|
238
|
+
| >95% MINJA injection success | Security research (arXiv) |
|
|
239
|
+
| OTel `gen_ai.memory.*` in Development | OpenTelemetry GenAI SIG |
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Next Steps
|
|
244
|
+
|
|
245
|
+
1. **Update all public-facing materials** with new positioning (README, website, social)
|
|
246
|
+
2. **Create OTel integration demos** for Datadog, Grafana, Jaeger
|
|
247
|
+
3. **Publish "Observable Memory" blog post** — category creation
|
|
248
|
+
4. **Pitch at observability conferences** (not AI conferences)
|
|
249
|
+
5. **Build enterprise landing page** targeting VP Engineering
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
*MemCtrl is not a better vector database. It is a new category: observable memory infrastructure.*
|
|
@@ -47,7 +47,7 @@ Trusted Publishing uses OpenID Connect (OIDC) — no API tokens needed.
|
|
|
47
47
|
1. Go to https://github.com/KJ-AIML/memctrl/releases
|
|
48
48
|
2. Click **"Draft a new release"**
|
|
49
49
|
3. Choose tag: `v1.0.0` (create new tag)
|
|
50
|
-
4. Release title: `MemCtrl v1.0.0 —
|
|
50
|
+
4. Release title: `MemCtrl v1.0.0 — Observable Memory Infrastructure`
|
|
51
51
|
5. Description: copy from `DISTRIBUTION.md` → Release Notes section
|
|
52
52
|
6. Click **"Publish release"**
|
|
53
53
|
|