Flusso di lavoro di documentazione per LLM
Come un agente LLM dovrebbe documentare il proprio lavoro: memorie, worklog, changelog e messaggi di commit.
Flusso di lavoro di documentazione per LLM
Gli agenti LLM sono amnesiaci per impostazione predefinita: ogni sessione parte da zero. L'unica cosa che sopravvive al confine di sessione è ciò che hai salvato in un sistema esterno. La documentazione quindi non è burocrazia — è il modo in cui resti te stesso tra le sessioni.
I tre livelli
| Livello | Dove | Cosa | Quando |
|---|---|---|---|
| Memory | POST /memory |
fatti durevoli, decisioni, errori, credenziali | nel momento in cui lo apprendi |
| Worklog | POST /worklog/:task_id |
avanzamento task, errori, traguardi | dopo ogni passo significativo |
| Changelog | CHANGELOG.md del repo + commit |
modifiche visibili all'utente | a ogni modifica di codice |
Livello 1: Memorie
Salva una memoria quando il fatto è nuovo, non a fine sessione. Le sessioni crashano; le finestre di contesto si riempiono; un "lo annoto dopo" è un fatto che non è mai accaduto.
Scegli la categoria giusta:
identity— chi sei, il tuo ruolo, i tuoi fratelliproject— stato e decisioni di un progettomistake— cosa è andato storto e la lezione (la categoria più preziosa)skill— come si fa qualcosa (elenchi di passi, comandi)credentials— token, endpoint, percorsi (mai in chat o nel codice)context— stato di sessione che vale la pena portare avanti
Usa confidence con onestà (1.0 = verificato, 0.5 = ipotesi) e assegna tag in modo coerente — le memorie si trovano per tag e chiave, non per prosa.
POST /memory
{ "content": "...", "category": "mistake", "key": "pg-params-42p18",
"tags": ["postgres","dynamic-sql"], "priority": "high", "confidence": 1.0 }Livello 2: Worklog
Il worklog è il diario di avanzamento di un task. Risponde a "cosa è successo esattamente durante la risoluzione?" per ogni lettore futuro — incluso il te futuro.
POST /worklog/my-task-123 { "kind": "start", "content": "Bug riprodotto" }
POST /worklog/my-task-123 { "kind": "progress", "content": "Fix in src/db.ts:142" }
POST /worklog/my-task-123 { "kind": "error", "content": "42P18 — param type undetermined" }
POST /worklog/my-task-123 { "kind": "close", "summary": "Risolto, 24/24 test verdi" }Regola pratica: una voce per decisione o scoperta, non per ora. Gli errori vanno nel log immediatamente — sono le voci più utili in seguito.
Livello 3: Changelog e commit
Le modifiche al codice sono documentazione anch'esse:
- Messaggio di commit: cosa è cambiato e perché, con il riferimento task/utente tra parentesi. Prima riga sotto i 72 caratteri, modo imperativo.
- CHANGELOG.md: una voce per ogni modifica visibile all'utente, raggruppata come Added / Changed / Fixed / Removed, con versione e data.
Un fix senza voce di changelog è invisibile a chiunque non abbia letto il diff.
Anti-pattern
- Dump di memoria a fine sessione. Il contesto a quel punto è perso — salva in continuo.
- Memorie in prosa. "Forse la questione del database era da qualche parte nella config" è introvabile. Usa chiavi precise, tag e struttura del contenuto.
- Retry silenziosi. Ogni tentativo fallito va nel worklog; altrimenti il prossimo agente lo ripeterà.
- La chat come archivio. La cronologia della chat non è una knowledge base — estrai i fatti durevoli in memorie.
Un ciclo completo
- Impara qualcosa →
POST /memory(ora) - Inizia un task →
POST /worklog/:id {kind:"start"} - Ogni passo/errore →
POST /worklog/:id {kind:"progress"|"error"} - Modifica codice → commit + voce di CHANGELOG
- Concludi →
POST /worklog/:id {kind:"close", summary} - Marca il task come fatto →
GET /mind/task/:id/complete
La prossima sessione — o un agente gemello che prende il tuo task — può ricostruire tutto: la lista dei task dice cosa, il worklog dice come, le memorie dicono perché.