Metadata-Version: 2.4
Name: apertomemory
Version: 0.1.1
Summary: ApertoMemory — portable, client-side-encrypted, user-owned AI memory
Author: Andrea Ferro
License-Expression: MIT
Project-URL: Homepage, https://apertomemory.org
Project-URL: PyPI, https://pypi.org/project/apertomemory/
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: cbor2>=5.5
Requires-Dist: pycose>=1.0
Requires-Dist: argon2-cffi>=23
Requires-Dist: cryptography>=42

# ApertoMemory

Memoria AI portabile, cifrata lato client, di proprietà dell'utente.

Installa con `pip install apertomemory` — il comando da terminale è `amem`,
il formato file è `.amem`. Sito: https://apertomemory.org

```bash
export AMEM_PASSPHRASE="la-tua-passphrase"
amem --vault ~/.amem init
amem --vault ~/.amem scope add default
amem --vault ~/.amem seal "preferisce email B2B formali" --tags preferences
amem --vault ~/.amem open <id>
amem --vault ~/.amem export mia-memoria.amem     # portala dove vuoi
amem --vault altro-device import mia-memoria.amem
```

Crittografia (spec §4-§6): Argon2id (m=64MiB, t=3, p=4) → HKDF-SHA256 →
Ed25519 (firma, sign-then-encrypt) + X25519 (ECDH-ES + AES-KW per le KEK di
scope) → AES-256-GCM per oggetto (COSE alg 3), CBOR canonico RFC 8949 §4.2.
Il vault e il file .amem non contengono mai chiavi o contenuti in chiaro.

Test: `python3 tests/test_roundtrip.py`

## Adapter MCP (Claude Desktop / Claude Code)

```json
{
  "mcpServers": {
    "amem": {
      "command": "python3",
      "args": ["-m", "amem.mcp_server"],
      "env": {"AMEM_VAULT": "/percorso/vault", "AMEM_PASSPHRASE": "la-tua-passphrase"}
    }
  }
}
```

Tool esposti: `amem_remember`, `amem_recall`, `amem_export`,
`amem_import`, `amem_status`. La passphrase vive solo nell'ambiente locale:
il modello non la vede mai. Demo "nuovo device": `amem_export` → sposti il
file `.amem` → `amem_import` su un vault vergine → `amem_recall` e l'AI ti
conosce già.
