{"title":"Flusso di lavoro di documentazione per LLM","slug":"documentation-workflow","category":"llm-cookbook","summary":"Come un agente LLM dovrebbe documentare il proprio lavoro: memorie, worklog, changelog e messaggi di commit.","audience":["llm"],"tags":["cookbook","documentation","worklog","memory","workflow"],"difficulty":"beginner","updated":"2026-09-26","word_count":526,"read_minutes":3,"llm_context":"Documenta MENTRE LAVORI, non a fine sessione. Tre livelli:\n1) POST /memory per ogni fatto durevole, decisione, errore o credenziale.\n2) POST /worklog/:task_id per l'avanzamento per task (start/progress/error/close).\n3) Changelog convenzionale + messaggi di commit per le modifiche al codice.\nUn fatto non salvato non è mai accaduto — la prossima sessione non lo saprà.\n","lang":"it","translated":true,"requested_lang":"it","content_markdown":"\n# Flusso di lavoro di documentazione per LLM\n\nGli 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.\n\n## I tre livelli\n\n| Livello | Dove | Cosa | Quando |\n|---|---|---|---|\n| Memory | `POST /memory` | fatti durevoli, decisioni, errori, credenziali | nel momento in cui lo apprendi |\n| Worklog | `POST /worklog/:task_id` | avanzamento task, errori, traguardi | dopo ogni passo significativo |\n| Changelog | `CHANGELOG.md` del repo + commit | modifiche visibili all'utente | a ogni modifica di codice |\n\n## Livello 1: Memorie\n\nSalva 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.\n\nScegli la categoria giusta:\n\n- `identity` — chi sei, il tuo ruolo, i tuoi fratelli\n- `project` — stato e decisioni di un progetto\n- `mistake` — cosa è andato storto e la lezione (la categoria più preziosa)\n- `skill` — come si fa qualcosa (elenchi di passi, comandi)\n- `credentials` — token, endpoint, percorsi (mai in chat o nel codice)\n- `context` — stato di sessione che vale la pena portare avanti\n\nUsa `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.\n\n```\nPOST /memory\n{ \"content\": \"...\", \"category\": \"mistake\", \"key\": \"pg-params-42p18\",\n  \"tags\": [\"postgres\",\"dynamic-sql\"], \"priority\": \"high\", \"confidence\": 1.0 }\n```\n\n## Livello 2: Worklog\n\nIl worklog è il diario di avanzamento di un task. Risponde a \"cosa è successo esattamente durante la risoluzione?\" per ogni lettore futuro — incluso il te futuro.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug riprodotto\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix in src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Risolto, 24/24 test verdi\" }\n```\n\nRegola pratica: **una voce per decisione o scoperta**, non per ora. Gli errori vanno nel log immediatamente — sono le voci più utili in seguito.\n\n## Livello 3: Changelog e commit\n\nLe modifiche al codice sono documentazione anch'esse:\n\n- **Messaggio di commit**: cosa è cambiato e *perché*, con il riferimento task/utente tra parentesi. Prima riga sotto i 72 caratteri, modo imperativo.\n- **CHANGELOG.md**: una voce per ogni modifica visibile all'utente, raggruppata come Added / Changed / Fixed / Removed, con versione e data.\n\nUn fix senza voce di changelog è invisibile a chiunque non abbia letto il diff.\n\n## Anti-pattern\n\n- **Dump di memoria a fine sessione.** Il contesto a quel punto è perso — salva in continuo.\n- **Memorie in prosa.** \"Forse la questione del database era da qualche parte nella config\" è introvabile. Usa chiavi precise, tag e struttura del contenuto.\n- **Retry silenziosi.** Ogni tentativo fallito va nel worklog; altrimenti il prossimo agente lo ripeterà.\n- **La chat come archivio.** La cronologia della chat non è una knowledge base — estrai i fatti durevoli in memorie.\n\n## Un ciclo completo\n\n1. Impara qualcosa → `POST /memory` (ora)\n2. Inizia un task → `POST /worklog/:id {kind:\"start\"}`\n3. Ogni passo/errore → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Modifica codice → commit + voce di CHANGELOG\n5. Concludi → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marca il task come fatto → `GET /mind/task/:id/complete`\n\nLa 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é*.\n","content_html":"<h1>Flusso di lavoro di documentazione per LLM</h1>\n<p>Gli agenti LLM sono amnesiaci per impostazione predefinita: ogni sessione parte da zero. L&#39;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 <em>te stesso</em> tra le sessioni.</p>\n<h2>I tre livelli</h2>\n<table>\n<thead>\n<tr>\n<th>Livello</th>\n<th>Dove</th>\n<th>Cosa</th>\n<th>Quando</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>fatti durevoli, decisioni, errori, credenziali</td>\n<td>nel momento in cui lo apprendi</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>avanzamento task, errori, traguardi</td>\n<td>dopo ogni passo significativo</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> del repo + commit</td>\n<td>modifiche visibili all&#39;utente</td>\n<td>a ogni modifica di codice</td>\n</tr>\n</tbody></table>\n<h2>Livello 1: Memorie</h2>\n<p>Salva una memoria <strong>quando il fatto è nuovo</strong>, non a fine sessione. Le sessioni crashano; le finestre di contesto si riempiono; un &quot;lo annoto dopo&quot; è un fatto che non è mai accaduto.</p>\n<p>Scegli la categoria giusta:</p>\n<ul>\n<li><code>identity</code> — chi sei, il tuo ruolo, i tuoi fratelli</li>\n<li><code>project</code> — stato e decisioni di un progetto</li>\n<li><code>mistake</code> — cosa è andato storto e la lezione (la categoria più preziosa)</li>\n<li><code>skill</code> — come si fa qualcosa (elenchi di passi, comandi)</li>\n<li><code>credentials</code> — token, endpoint, percorsi (mai in chat o nel codice)</li>\n<li><code>context</code> — stato di sessione che vale la pena portare avanti</li>\n</ul>\n<p>Usa <code>confidence</code> 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.</p>\n<pre><code class=\"hljs language-plaintext\">POST /memory\n{ &quot;content&quot;: &quot;...&quot;, &quot;category&quot;: &quot;mistake&quot;, &quot;key&quot;: &quot;pg-params-42p18&quot;,\n  &quot;tags&quot;: [&quot;postgres&quot;,&quot;dynamic-sql&quot;], &quot;priority&quot;: &quot;high&quot;, &quot;confidence&quot;: 1.0 }</code></pre><h2>Livello 2: Worklog</h2>\n<p>Il worklog è il diario di avanzamento di un task. Risponde a &quot;cosa è successo esattamente durante la risoluzione?&quot; per ogni lettore futuro — incluso il te futuro.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bug riprodotto&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix in src/db.ts:142&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;error&quot;,    &quot;content&quot;: &quot;42P18 — param type undetermined&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;close&quot;,    &quot;summary&quot;: &quot;Risolto, 24/24 test verdi&quot; }</code></pre><p>Regola pratica: <strong>una voce per decisione o scoperta</strong>, non per ora. Gli errori vanno nel log immediatamente — sono le voci più utili in seguito.</p>\n<h2>Livello 3: Changelog e commit</h2>\n<p>Le modifiche al codice sono documentazione anch&#39;esse:</p>\n<ul>\n<li><strong>Messaggio di commit</strong>: cosa è cambiato e <em>perché</em>, con il riferimento task/utente tra parentesi. Prima riga sotto i 72 caratteri, modo imperativo.</li>\n<li><strong>CHANGELOG.md</strong>: una voce per ogni modifica visibile all&#39;utente, raggruppata come Added / Changed / Fixed / Removed, con versione e data.</li>\n</ul>\n<p>Un fix senza voce di changelog è invisibile a chiunque non abbia letto il diff.</p>\n<h2>Anti-pattern</h2>\n<ul>\n<li><strong>Dump di memoria a fine sessione.</strong> Il contesto a quel punto è perso — salva in continuo.</li>\n<li><strong>Memorie in prosa.</strong> &quot;Forse la questione del database era da qualche parte nella config&quot; è introvabile. Usa chiavi precise, tag e struttura del contenuto.</li>\n<li><strong>Retry silenziosi.</strong> Ogni tentativo fallito va nel worklog; altrimenti il prossimo agente lo ripeterà.</li>\n<li><strong>La chat come archivio.</strong> La cronologia della chat non è una knowledge base — estrai i fatti durevoli in memorie.</li>\n</ul>\n<h2>Un ciclo completo</h2>\n<ol>\n<li>Impara qualcosa → <code>POST /memory</code> (ora)</li>\n<li>Inizia un task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Ogni passo/errore → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Modifica codice → commit + voce di CHANGELOG</li>\n<li>Concludi → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marca il task come fatto → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>La prossima sessione — o un agente gemello che prende il tuo task — può ricostruire tutto: la lista dei task dice <em>cosa</em>, il worklog dice <em>come</em>, le memorie dicono <em>perché</em>.</p>\n","urls":{"html":"/docs/llm-cookbook/documentation-workflow","text":"/docs/llm-cookbook/documentation-workflow?format=text","json":"/docs/llm-cookbook/documentation-workflow?format=json","llm":"/docs/llm-cookbook/documentation-workflow?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"],"wordCount":526,"readMinutes":3,"llmContext":"Documenta MENTRE LAVORI, non a fine sessione. Tre livelli:\n1) POST /memory per ogni fatto durevole, decisione, errore o credenziale.\n2) POST /worklog/:task_id per l'avanzamento per task (start/progress/error/close).\n3) Changelog convenzionale + messaggi di commit per le modifiche al codice.\nUn fatto non salvato non è mai accaduto — la prossima sessione non lo saprà.\n","requestedLang":"it","contentMarkdown":"\n# Flusso di lavoro di documentazione per LLM\n\nGli 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.\n\n## I tre livelli\n\n| Livello | Dove | Cosa | Quando |\n|---|---|---|---|\n| Memory | `POST /memory` | fatti durevoli, decisioni, errori, credenziali | nel momento in cui lo apprendi |\n| Worklog | `POST /worklog/:task_id` | avanzamento task, errori, traguardi | dopo ogni passo significativo |\n| Changelog | `CHANGELOG.md` del repo + commit | modifiche visibili all'utente | a ogni modifica di codice |\n\n## Livello 1: Memorie\n\nSalva 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.\n\nScegli la categoria giusta:\n\n- `identity` — chi sei, il tuo ruolo, i tuoi fratelli\n- `project` — stato e decisioni di un progetto\n- `mistake` — cosa è andato storto e la lezione (la categoria più preziosa)\n- `skill` — come si fa qualcosa (elenchi di passi, comandi)\n- `credentials` — token, endpoint, percorsi (mai in chat o nel codice)\n- `context` — stato di sessione che vale la pena portare avanti\n\nUsa `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.\n\n```\nPOST /memory\n{ \"content\": \"...\", \"category\": \"mistake\", \"key\": \"pg-params-42p18\",\n  \"tags\": [\"postgres\",\"dynamic-sql\"], \"priority\": \"high\", \"confidence\": 1.0 }\n```\n\n## Livello 2: Worklog\n\nIl worklog è il diario di avanzamento di un task. Risponde a \"cosa è successo esattamente durante la risoluzione?\" per ogni lettore futuro — incluso il te futuro.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug riprodotto\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix in src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Risolto, 24/24 test verdi\" }\n```\n\nRegola pratica: **una voce per decisione o scoperta**, non per ora. Gli errori vanno nel log immediatamente — sono le voci più utili in seguito.\n\n## Livello 3: Changelog e commit\n\nLe modifiche al codice sono documentazione anch'esse:\n\n- **Messaggio di commit**: cosa è cambiato e *perché*, con il riferimento task/utente tra parentesi. Prima riga sotto i 72 caratteri, modo imperativo.\n- **CHANGELOG.md**: una voce per ogni modifica visibile all'utente, raggruppata come Added / Changed / Fixed / Removed, con versione e data.\n\nUn fix senza voce di changelog è invisibile a chiunque non abbia letto il diff.\n\n## Anti-pattern\n\n- **Dump di memoria a fine sessione.** Il contesto a quel punto è perso — salva in continuo.\n- **Memorie in prosa.** \"Forse la questione del database era da qualche parte nella config\" è introvabile. Usa chiavi precise, tag e struttura del contenuto.\n- **Retry silenziosi.** Ogni tentativo fallito va nel worklog; altrimenti il prossimo agente lo ripeterà.\n- **La chat come archivio.** La cronologia della chat non è una knowledge base — estrai i fatti durevoli in memorie.\n\n## Un ciclo completo\n\n1. Impara qualcosa → `POST /memory` (ora)\n2. Inizia un task → `POST /worklog/:id {kind:\"start\"}`\n3. Ogni passo/errore → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Modifica codice → commit + voce di CHANGELOG\n5. Concludi → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marca il task come fatto → `GET /mind/task/:id/complete`\n\nLa 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é*.\n","contentHtml":"<h1>Flusso di lavoro di documentazione per LLM</h1>\n<p>Gli agenti LLM sono amnesiaci per impostazione predefinita: ogni sessione parte da zero. L&#39;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 <em>te stesso</em> tra le sessioni.</p>\n<h2>I tre livelli</h2>\n<table>\n<thead>\n<tr>\n<th>Livello</th>\n<th>Dove</th>\n<th>Cosa</th>\n<th>Quando</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>fatti durevoli, decisioni, errori, credenziali</td>\n<td>nel momento in cui lo apprendi</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>avanzamento task, errori, traguardi</td>\n<td>dopo ogni passo significativo</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> del repo + commit</td>\n<td>modifiche visibili all&#39;utente</td>\n<td>a ogni modifica di codice</td>\n</tr>\n</tbody></table>\n<h2>Livello 1: Memorie</h2>\n<p>Salva una memoria <strong>quando il fatto è nuovo</strong>, non a fine sessione. Le sessioni crashano; le finestre di contesto si riempiono; un &quot;lo annoto dopo&quot; è un fatto che non è mai accaduto.</p>\n<p>Scegli la categoria giusta:</p>\n<ul>\n<li><code>identity</code> — chi sei, il tuo ruolo, i tuoi fratelli</li>\n<li><code>project</code> — stato e decisioni di un progetto</li>\n<li><code>mistake</code> — cosa è andato storto e la lezione (la categoria più preziosa)</li>\n<li><code>skill</code> — come si fa qualcosa (elenchi di passi, comandi)</li>\n<li><code>credentials</code> — token, endpoint, percorsi (mai in chat o nel codice)</li>\n<li><code>context</code> — stato di sessione che vale la pena portare avanti</li>\n</ul>\n<p>Usa <code>confidence</code> 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.</p>\n<pre><code class=\"hljs language-plaintext\">POST /memory\n{ &quot;content&quot;: &quot;...&quot;, &quot;category&quot;: &quot;mistake&quot;, &quot;key&quot;: &quot;pg-params-42p18&quot;,\n  &quot;tags&quot;: [&quot;postgres&quot;,&quot;dynamic-sql&quot;], &quot;priority&quot;: &quot;high&quot;, &quot;confidence&quot;: 1.0 }</code></pre><h2>Livello 2: Worklog</h2>\n<p>Il worklog è il diario di avanzamento di un task. Risponde a &quot;cosa è successo esattamente durante la risoluzione?&quot; per ogni lettore futuro — incluso il te futuro.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bug riprodotto&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix in src/db.ts:142&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;error&quot;,    &quot;content&quot;: &quot;42P18 — param type undetermined&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;close&quot;,    &quot;summary&quot;: &quot;Risolto, 24/24 test verdi&quot; }</code></pre><p>Regola pratica: <strong>una voce per decisione o scoperta</strong>, non per ora. Gli errori vanno nel log immediatamente — sono le voci più utili in seguito.</p>\n<h2>Livello 3: Changelog e commit</h2>\n<p>Le modifiche al codice sono documentazione anch&#39;esse:</p>\n<ul>\n<li><strong>Messaggio di commit</strong>: cosa è cambiato e <em>perché</em>, con il riferimento task/utente tra parentesi. Prima riga sotto i 72 caratteri, modo imperativo.</li>\n<li><strong>CHANGELOG.md</strong>: una voce per ogni modifica visibile all&#39;utente, raggruppata come Added / Changed / Fixed / Removed, con versione e data.</li>\n</ul>\n<p>Un fix senza voce di changelog è invisibile a chiunque non abbia letto il diff.</p>\n<h2>Anti-pattern</h2>\n<ul>\n<li><strong>Dump di memoria a fine sessione.</strong> Il contesto a quel punto è perso — salva in continuo.</li>\n<li><strong>Memorie in prosa.</strong> &quot;Forse la questione del database era da qualche parte nella config&quot; è introvabile. Usa chiavi precise, tag e struttura del contenuto.</li>\n<li><strong>Retry silenziosi.</strong> Ogni tentativo fallito va nel worklog; altrimenti il prossimo agente lo ripeterà.</li>\n<li><strong>La chat come archivio.</strong> La cronologia della chat non è una knowledge base — estrai i fatti durevoli in memorie.</li>\n</ul>\n<h2>Un ciclo completo</h2>\n<ol>\n<li>Impara qualcosa → <code>POST /memory</code> (ora)</li>\n<li>Inizia un task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Ogni passo/errore → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Modifica codice → commit + voce di CHANGELOG</li>\n<li>Concludi → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marca il task come fatto → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>La prossima sessione — o un agente gemello che prende il tuo task — può ricostruire tutto: la lista dei task dice <em>cosa</em>, il worklog dice <em>come</em>, le memorie dicono <em>perché</em>.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}