Metadata-Version: 2.4
Name: moot-memory
Version: 1.0.24
Summary: Drop-in /memories backend with governance for the Anthropic memory_20250818 tool
Author: Codedaptive
License: MIT
Project-URL: Homepage, https://github.com/codedaptive/mootx01-ce
Project-URL: Repository, https://github.com/codedaptive/mootx01-ce
Project-URL: Documentation, https://github.com/codedaptive/mootx01-ce/tree/stable/1.0.x/apps/moot-memory-adapter
Keywords: anthropic,claude,memory,mcp,mootx01,ai-memory
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.40.0; extra == "anthropic"

# MOOTx01 Memory Adapter

Drop-in `/memories` backend with governance for the Anthropic
`memory_20250818` tool.

## What it does

Any Claude 4+ / Fable 5 agent that thinks it is reading and writing
`/memories` files is actually reading and writing **governed MOOTx01
drawers** — with dedup, provenance, sensitivity floor, confirmation
state, and a full audit trail included.

## The differentiator

Every model-written memory lands as **unconfirmed** with derived trust.
A startup scan or audit pass can quarantine suspect lessons using the
estate's contained filter and anomaly lenses. This is the poisoning
defense the ecosystem currently lacks — the memory tool contract gives
models write access; MOOTx01 gives you the governance to trust (or not
trust) what they wrote.

## Two surfaces

### 1. MCP tool (built into mootx01)

The mootx01 daemon registers a `memory` tool on its MCP surface that
matches Anthropic's contract exactly. Claude Code and Claude Desktop
users already connected to mootx01 as an MCP server get the memory tool
for free — no adapter needed.

### 2. Python SDK handler (this package)

For Messages API users who run the tool-use loop themselves:

```python
from moot_memory import MootMemoryTool
import anthropic

client = anthropic.Anthropic()
memory = MootMemoryTool(base_url="http://127.0.0.1:4242")

runner = client.beta.messages.tool_runner(
    model="claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Remember that Acme prefers email."}],
    tools=[memory],
)
final = runner.until_done()
```

Or standalone without the SDK:

```python
from moot_memory import MootMemoryHandler

handler = MootMemoryHandler(base_url="http://127.0.0.1:4242")
result = handler.execute({"command": "view", "path": "/memories"})
```

## Op mapping

| memory_20250818 | Estate behavior |
|---|---|
| view (dir) | enumerate drawers in wing="memories" |
| view (file) | drawer content with line numbers |
| create | capture as unconfirmed drawer |
| str_replace | supersede: new content, old withdrawn (full lineage) |
| insert | supersede: content with insertion applied |
| delete | soft withdrawal (never hard-erase from model ops) |
| rename | capture at new location, withdraw old |

## Security

- **Path traversal protection**: all paths validated against `/memories`
- **Model writes land unconfirmed**: poisoning quarantine seam
- **Deletes are soft withdrawals**: reversible, audit trail preserved
- **Sensitivity floor**: adapter wing is Normal
- **File size cap**: 100KB per file
- **No hidden files**: dotfiles rejected

## Tests

```bash
# Against the running daemon
python -m pytest apps/moot-memory-adapter/tests/

# The poisoning quarantine test
python -m pytest apps/moot-memory-adapter/tests/test_memory_adapter.py::TestPoisoningQuarantine -v
```

## Requirements

- Running mootx01 daemon (v1.0.22+)
- Python 3.10+
- `anthropic` SDK (optional, for the BetaAbstractMemoryTool subclass)
