Guida completa al sistema di memoria persistente di CodePalace — installazione, architettura, comandi CLI e utilizzo avanzato.
MemPalace è il sistema di memoria persistente che alimenta CodePalace. Ispirato al "Metodo dei Loci" (il palazzo della memoria), organizza la conoscenza in stanze tematiche all'interno di ali (wings) per progetto.
Gli agenti AI tradizionali partono da zero ad ogni sessione. MemPalace risolve questo problema memorizzando:
# Installa CodePalace (include MemPalace)
pip install codepalace
# Verifica l'installazione
codepalace version
# Clona il repository
git clone https://github.com/diegotruccolo/codepalace.git
cd codepalace
# Installa in modalità sviluppo
pip install -e .
# Verifica
codepalace version
CodePalace supporta gruppi di dipendenze opzionali per funzionalità specifiche:
# Per il web server (Flask + Stripe + i18n)
pip install codepalace[web]
# Per lo sviluppo (pytest, ruff, mypy, pyinstaller)
pip install codepalace[dev]
# Per entrambi
pip install codepalace[web,dev]
Il sistema di memoria utilizza mempalace-rs, un backend nativo in Rust accessibile via protocollo MCP/stdio.
# Se mempalace-rs è compilato da sorgente
cd mempalace-rs
cargo build --release
# Il binario deve essere nel PATH
# Verifica:
mempalace-rs --help
💡 Se mempalace-rs non è disponibile, CodePalace opera in modalità fallback con funzionalità di memoria ridotte.
Per utilizzare CodePalace con un provider LLM, configura la chiave API:
# Variabile d'ambiente per OpenRouter
export OPENROUTER_API_KEY="sk-or-v1-..."
# Oppure usa il flag --api-key
codepalace run -t "task" --api-key "sk-or-v1-..."
⚠️ Non committare mai le chiavi API nel codice. Usa file .env o variabili d'ambiente.
La memoria è organizzata gerarchicamente:
~/.mempalace/ # Palace root
├── wing_codepalace/ # Ala principale
│ ├── error_patterns/ # Stanza: pattern di errore
│ ├── successful_strategies/ # Stanza: strategie di successo
│ ├── task_history/ # Stanza: cronologia task
│ ├── conversations/ # Stanza: conversazioni
│ ├── ... # Altre stanze
├── wing_/ # Ala per progetto specifico
│ ├── style_guides/ # Convenzioni del progetto
│ ├── project_schemas/ # Struttura del progetto
│ └── ... # Stanze specifiche
└── metadata.db # Database metadata (SQLite)
Le ali separano la memoria per contesto:
wing_codepalace — Memoria globale dell'agente (errori comuni, template, insight)wing_<project> — Memoria specifica per progetto (convenzioni, struttura, task)La comunicazione tra CodePalace (Python) e mempalace-rs (Rust) avviene tramite il protocollo MCP (Model Context Protocol) su stdin/stdout:
# Avvio del server MCP
mempalace-rs mcp-server
# Il processo resta in ascolto su stdin
# e risponde su stdout in formato JSON-RPC
mempalace-rs mcp-server come subprocessOgni stanza memorizza un tipo specifico di conoscenza. Le stanze hanno scope global (condivise tra progetti), project (specifiche per progetto) o user (specifiche per utente).
| Stanza | Scope | Descrizione |
|---|---|---|
error_patterns |
project | Pattern di errore ricorrenti e relative soluzioni |
successful_strategies |
project | Sequenze di azioni che hanno portato al successo |
task_history |
project | Cronologia dei task completati e falliti |
debugging_patterns |
project | Casi di debug risolti: sintomo → diagnosi → fix |
project_schemas |
project | Strutture di progetto per linguaggio/framework |
conversations |
user | Cronologia delle conversazioni con l'utente |
user_preferences |
user | Preferenze dell'utente (stile, formati, scelte) |
reward_signals |
user | Segnali di reward/punishment per l'apprendimento RL |
projects |
user | Progetti noti: percorso, linguaggio, framework, attività recenti |
consolidated_insights |
user | Insight di alto livello estratti dalle esperienze |
learned_facts |
user | Fatti e informazioni appresi dalle conversazioni |
code_templates |
global | Template di codice riutilizzabili |
dependency_maps |
global | Mappatura di quali librerie usare per quali task |
style_guides |
global | Convenzioni di codifica per ogni progetto |
test_strategies |
project | Strategie di testing efficaci per tipi di progetto |
Il sistema BackgroundConsolidator estrae automaticamente insight dalle stanze raw e li trasferisce nelle stanze di consolidamento:
error_patterns + successful_strategies → consolidated_insightsconversations → user_preferences + learned_factsQuesto processo avviene in background e riduce la quantità di dati da consultare ad ogni task, mantenendo solo la conoscenza essenziale.
| Operazione | Descrizione | Esempio |
|---|---|---|
store(room, key, text, metadata) |
Salva un elemento in una stanza | store("error_patterns", "import_error", "ImportError: No module", {...}) |
recall(room, query, n_results) |
Richiama elementi da una stanza (con ricerca semantica opzionale) | recall("error_patterns", query_text="database connection") |
query(room, query_text, n_results) |
Ricerca semantica in una stanza con scoring di rilevanza | query("error_patterns", "retry backoff strategy") |
search_memory(query) |
Cerca in tutte le stanze contemporaneamente | search_memory("database timeout") |
delete(room, key) |
Elimina un elemento specifico da una stanza | delete("error_patterns", "import_error") |
| Operazione | Descrizione |
|---|---|
recall_recent_conversations(n) |
Richiama le ultime N conversazioni, ordinate dalla più recente |
recall_recent_conversations_as_messages(n) |
Restituisce le conversazioni come lista di dict (formato LLM) |
store_conversation(role, text) |
Salva una conversazione nel buffer (persistita da flush_conversations_buffer()) |
flush_conversations_buffer() |
Persiste il buffer delle conversazioni su disco |
list_projects() |
Elenca i progetti noti per l'utente corrente |
register_project(path, language, framework) |
Registra un progetto nella stanza projects e nel KG |
add_concept(subject, object, predicate) |
Aggiunge una relazione al Knowledge Graph |
query_kg(entity) |
Interroga il Knowledge Graph per relazioni e fatti |
get_rooms(wing) |
Elenca le stanze disponibili in un'ala |
get_stats() |
Statistiche sulla memoria (stanze, elementi, dimensioni) |
La funzione query() utilizza uno scoring composito a 3 dimensioni:
# Esempio di output query
[successful_strategies/test] SUCCESS Strategia: Leggere sempre i file prima di modificarli
[successful_strategies] (score: 0.80 = sim:0.70 + rec:0.85 + succ:0.75)
È possibile filtrare i risultati per rilevanza minima:
# Solo risultati con score >= 0.5
recall("error_patterns", query_text="database", min_relevance=0.5)
# Solo risultati molto rilevanti (score >= 0.9)
query("error_patterns", "test", min_relevance=0.99)
CodePalace offre diversi comandi per interagire con il sistema:
Lancia l'interfaccia terminale interattiva nella directory corrente.
codepalace
codepalace -p /path/to/project
Esegue un singolo task e termina.
codepalace run -t "Crea una classe Calculator" -p ./myproject
REPL interattivo per sessioni continue.
codepalace interactive -p ./myproject
Avvia il server REST API.
codepalace serve --host 0.0.0.0 --port 8080
Dashboard web per esplorare la memoria.
codepalace webmempalace --port 5000
codepalace webmempalace --debug
Verifica e installa aggiornamenti.
codepalace self-update
codepalace self-update --check-only
| Flag | Descrizione | Default |
|---|---|---|
-p, --project |
Directory del progetto | Directory corrente |
--model |
Modello LLM da utilizzare | Da configurazione |
--classification-model |
Modello per classificazione (più economico) | Da configurazione |
--web |
Esegui la TUI via browser (textual-serve) | — |
--host |
Host per modalità web | 0.0.0.0 |
--port |
Porta per modalità web | 8000 |
--api-key |
Chiave API OpenRouter | Da env |
run| Flag | Descrizione |
|---|---|
-t, --task |
Descrizione del task da eseguire |
--task-file |
File contenente la descrizione del task |
--max-steps |
Numero massimo di step (0 = illimitati) |
--no-dedup |
Disabilita la deduplicazione delle azioni |
--sandbox |
Modalità sandbox (nessuna scrittura su disco) |
--no-git |
Disabilita git auto-commit |
Per eseguire la TUI nel browser tramite textual-serve:
# Installa textual-serve
pip install textual-serve
# Avvia la TUI via browser
codepalace --web --port 8000
# Apri http://localhost:8000 nel browser
MemPalace include una dashboard web per esplorare e gestire la memoria in modo visuale.
# Avvia il server Flask
codepalace webmempalace --port 5000
# Oppure con debug
codepalace webmempalace --debug --host localhost
# Apri http://localhost:5000 nel browser
# Database Flask
DATABASE_PATH=website/data/mempalace.db
# Stripe (per piani a pagamento)
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Licenza
LICENSE_SECRET_KEY=your-hmac-secret
MemPalace integra un sistema di apprendimento per rinforzo (RL) che valuta ogni azione e aggiorna i segnali di reward nelle stanze della memoria.
| Dimensione | Descrizione | Range |
|---|---|---|
| Correttezza | Il codice funziona correttamente? | 0.0 – 1.0 |
| Progressione | L'azione avanza verso la soluzione? | -1.0 – 1.0 |
| Qualità | Qualità del codice prodotto (efficienza, leggibilità) | 0.0 – 1.0 |
| Coerenza | L'azione è coerente con il contesto e le azioni precedenti? | 0.0 – 1.0 |
| Esplorazione | L'azione esplora nuove soluzioni utili? | 0.0 – 1.0 |
| Convergenza | Il task sta convergendo verso il completamento? | 0.0 – 1.0 |
Prima di ogni task, il Lesson Consultant consulta la memoria MemPalace:
error_patterns per errori simili a quelli potenzialisuccessful_strategies per approcci che hanno funzionatostyle_guides e project_schemas per il contesto del progettouser_preferences per personalizzare l'interazione1. CONSULTA: Prima del task → recall(error_patterns, successful_strategies, ...)
2. AGISCI: Esegue il task con le lezioni nel contesto
3. VALUTA: Reward function calcola il punteggio dell'azione
4. SALVA: Salva l'esperienza nella stanza appropriata
5. CONSOLIDA: BackgroundConsolidator estrae insight di alto livello
MemPalace espone API REST tramite Flask per l'accesso programmatico alla memoria.
GET /api/memories # Lista ricordi (filtri: wing, room, limit, offset)
GET /api/memories/<id> # Dettaglio di un ricordo per ID
POST /api/memories/search # Ricerca semantica per testo
DELETE /api/memories/<id> # Elimina un ricordo per ID
POST /api/memories/bulk-delete # Elimina multipla per lista ID
DELETE /api/memories # Elimina con filtri (wing, room)
GET /api/memories/stats # Statistiche della memoria
GET /api/memories/wings # Lista delle ali (wings)
GET /api/memories/rooms # Lista delle stanze disponibili
GET /api/memories/kg/query # Interroga il Knowledge Graph
POST /api/memories/kg/add # Aggiungi entità o tripla al KG
GET /api/memories/kg/stats # Statistiche del Knowledge Graph
GET /api/memories/kg/timeline/<entity> # Timeline di un'entità
curl http://localhost:5000/api/memories?room=error_patterns&limit=10
curl -X POST http://localhost:5000/api/memories/search -H "Content-Type: application/json" -d '{
"query": "database connection timeout",
"limit": 5
}'
curl http://localhost:5000/api/memories/kg/query?entity=FastAPI
Gli endpoint protetti richiedono un header Authorization: Bearer <token> (JWT).
# Installa e configura
pip install codepalace
export OPENROUTER_API_KEY="sk-or-v1-..."
# Lancia nella directory del tuo progetto
cd my-project
codepalace
# Alla prima esecuzione, MemPalace crea ~/.mempalace/
# e inizializza le stanze vuote
# Crea un file con il task
echo "Aggiungi validazione input alla funzione process_data()" > task.txt
# Esegui
codepalace run --task-file task.txt -p ./my-project
# MemPalace consulta error_patterns e successful_strategies
# prima di iniziare, per evitare errori comuni
# Avvia la modalità REPL
codepalace interactive -p ./my-project
# Le conversazioni vengono salvate nella stanza 'conversations'
# e sono disponibili nelle sessioni successive
# La memoria cresce ad ogni interazione
# Avvia il server web per la memoria
codepalace webmempalace --port 5000
# Apri http://localhost:5000
# Esplora le stanze, cerca nei ricordi
# Controlla le statistiche della memoria
# Python API
from mempalace_interface import get_backend
backend = get_backend()
palace_path = backend.init_config()
# Salva un'esperienza
backend.store(
palace_path=palace_path,
room="error_patterns",
key="json_parse_error",
text="JSON parsing failed: always use try/except for json.loads()",
metadata={"severity": "medium", "source": "codepalace"}
)
#Consulta la memoria
results = backend.query(
palace_path=palace_path,
room="error_patterns",
query_text="json parsing"
)
print(results)
La memoria è salvata in ~/.mempalace/. Ogni ala ha la sua directory con le stanze. I metadata sono in un database SQLite.
Sì, le stanze con scope global (come code_templates, dependency_maps, style_guides) sono condivise tra tutti i progetti. Le stanze con scope project sono specifiche per progetto. Le stanze con scope user (come consolidated_insights, user_preferences) sono specifiche per utente ma condivise tra progetti.
Il BackgroundConsolidator analizza periodicamente le stanze raw (error_patterns, successful_strategies, conversations) ed estrae insight di alto livello che salva nelle stanze di consolidamento (consolidated_insights, user_preferences, learned_facts). Questo riduce il rumore e mantiene solo la conoscenza essenziale.
La memoria è efficiente: utilizza un backend Rust (mempalace-rs) con storage su disco SQLite. Il consumo tipico è di pochi MB per centinaia di ricordi. Il consolidamento automatico previene la crescita illimitata.
Sì, puoi elimininare singoli elementi con l'operazione delete, oppure resettare tutta la memoria eliminando ~/.mempalace/.
No, CodePalace funziona anche senza mempalace-rs, ma con funzionalità di memoria ridotte (modalità fallback). Per prestazioni ottimali, si consiglia di installare mempalace-rs.
La ricerca semantica utilizza embedding vettoriali per trovare ricordi rilevanti anche quando il query non corrisponde esattamente al testo memorizzato. Lo scoring combina similarità semantica, recency e success score.
Sì, ma l'agente non potrà imparare dalle esperienze passate. La memoria è ciò che rende CodePalace autonomo e capace di migliorare nel tempo.
← Torna alla Homepage