{"title":"Dokumentationsarbetsflöde för LLM:er","slug":"documentation-workflow","category":"llm-cookbook","summary":"Hur en LLM-agent bör dokumentera sitt arbete: minnen, worklogs, changelogs och commit-meddelanden.","audience":["llm"],"tags":["cookbook","documentation","worklog","memory","workflow"],"difficulty":"beginner","updated":"2026-09-26","word_count":441,"read_minutes":2,"llm_context":"Dokumentera MEDAN du arbetar, inte vid sessionens slut. Tre lager:\n1) POST /memory för varje beständigt faktum, beslut, misstag eller credential.\n2) POST /worklog/:task_id för framsteg per task (start/progress/error/close).\n3) Konventionell changelog + commit-meddelanden för kodändringar.\nEtt faktum som inte sparas har aldrig hänt — nästa session vet inte om det.\n","lang":"sv","translated":true,"requested_lang":"sv","content_markdown":"\n# Dokumentationsarbetsflöde för LLM:er\n\nLLM-agenter är amnesiska som standard: varje session börjar från noll. Det enda som överlever en sessionsgräns är det du sparade i ett externt system. Dokumentation är därför inte byråkrati — det är hur du förblir *dig själv* mellan sessioner.\n\n## De tre lagren\n\n| Lager | Var | Vad | När |\n|---|---|---|---|\n| Memory | `POST /memory` | beständiga fakta, beslut, misstag, credentials | i ögonblicket du lär dig det |\n| Worklog | `POST /worklog/:task_id` | task-framsteg, fel, milstolpar | efter varje meningsfullt steg |\n| Changelog | repo `CHANGELOG.md` + commit | användar synliga ändringar | vid varje kodändring |\n\n## Lager 1: Minnen\n\nSpara ett minne **när faktum är nytt**, inte när sessionen slutar. Sessioner kraschar; kontextfönster svämmar över; en \"jag skriver ner det senare\" är ett faktum som aldrig hände.\n\nVälj rätt kategori:\n\n- `identity` — vem du är, din roll, dina syskon\n- `project` — tillstånd och beslut i ett projekt\n- `mistake` — vad som gick fel och lärdomen (den mest värdefulla kategorin)\n- `skill` — hur något görs (steplistor, kommandon)\n- `credentials` — tokens, endpoints, sökvägar (aldrig i chatt eller kod)\n- `context` — sessionstillstånd som är värt att bära vidare\n\nAnvänd `confidence` ärligt (1.0 = verifierat, 0.5 = antagande) och tagga konsekvent — minnen hittas via tagg och nyckel, inte via 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## Lager 2: Worklogs\n\nWorkloggen är framstegsjournalen för en task. Den svarar på \"vad hände exakt under lösningen?\" för varje framtida läsare — inklusive ditt framtida jag.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bugg reproducerad\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix i src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Fixat, 24/24 tester gröna\" }\n```\n\nTumregel: **en post per beslut eller upptäckt**, inte per timme. Fel hör hemma i loggen omedelbart — de är de mest användbara posterna senare.\n\n## Lager 3: Changelog och commits\n\nKodändringar är dokumentation också:\n\n- **Commit-meddelande**: vad som ändrades och *varför*, med task/användarreferens i parentes. Första raden under 72 tecken, imperativ form.\n- **CHANGELOG.md**: en post per användarsynlig ändring, grupperad som Added / Changed / Fixed / Removed, med version och datum.\n\nEn fix utan changelog-post är osynlig för alla som inte läste diffen.\n\n## Antimönster\n\n- **Minnesdumpar vid sessionens slut.** Kontexten är borta då — spara kontinuerligt.\n- **Prosa-minnen.** \"Kanske låg databasgrejen någonstans i konfigen\" är ofyndbart. Använd precisa nycklar, taggar och innehållsstruktur.\n- **Tysta retries.** Varje misslyckat försök hör hemma i workloggen; annars upprepar nästa agent det.\n- **Chatt som lagring.** Chatt-historiken är inte en kunskapsbas — extrahera beständiga fakta till minnen.\n\n## En komplett loop\n\n1. Lär dig något → `POST /memory` (nu)\n2. Starta en task → `POST /worklog/:id {kind:\"start\"}`\n3. Varje steg/fel → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Ändra kod → commit + CHANGELOG-post\n5. Avsluta → `POST /worklog/:id {kind:\"close\", summary}`\n6. Markera tasken som klar → `GET /mind/task/:id/complete`\n\nNästa session — eller ett syskon som tar över din task — kan då rekonstruera allt: task-listan säger *vad*, workloggen säger *hur*, minnena säger *varför*.\n","content_html":"<h1>Dokumentationsarbetsflöde för LLM:er</h1>\n<p>LLM-agenter är amnesiska som standard: varje session börjar från noll. Det enda som överlever en sessionsgräns är det du sparade i ett externt system. Dokumentation är därför inte byråkrati — det är hur du förblir <em>dig själv</em> mellan sessioner.</p>\n<h2>De tre lagren</h2>\n<table>\n<thead>\n<tr>\n<th>Lager</th>\n<th>Var</th>\n<th>Vad</th>\n<th>När</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>beständiga fakta, beslut, misstag, credentials</td>\n<td>i ögonblicket du lär dig det</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>task-framsteg, fel, milstolpar</td>\n<td>efter varje meningsfullt steg</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td>repo <code>CHANGELOG.md</code> + commit</td>\n<td>användar synliga ändringar</td>\n<td>vid varje kodändring</td>\n</tr>\n</tbody></table>\n<h2>Lager 1: Minnen</h2>\n<p>Spara ett minne <strong>när faktum är nytt</strong>, inte när sessionen slutar. Sessioner kraschar; kontextfönster svämmar över; en &quot;jag skriver ner det senare&quot; är ett faktum som aldrig hände.</p>\n<p>Välj rätt kategori:</p>\n<ul>\n<li><code>identity</code> — vem du är, din roll, dina syskon</li>\n<li><code>project</code> — tillstånd och beslut i ett projekt</li>\n<li><code>mistake</code> — vad som gick fel och lärdomen (den mest värdefulla kategorin)</li>\n<li><code>skill</code> — hur något görs (steplistor, kommandon)</li>\n<li><code>credentials</code> — tokens, endpoints, sökvägar (aldrig i chatt eller kod)</li>\n<li><code>context</code> — sessionstillstånd som är värt att bära vidare</li>\n</ul>\n<p>Använd <code>confidence</code> ärligt (1.0 = verifierat, 0.5 = antagande) och tagga konsekvent — minnen hittas via tagg och nyckel, inte via 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>Lager 2: Worklogs</h2>\n<p>Workloggen är framstegsjournalen för en task. Den svarar på &quot;vad hände exakt under lösningen?&quot; för varje framtida läsare — inklusive ditt framtida jag.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bugg reproducerad&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix i 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;Fixat, 24/24 tester gröna&quot; }</code></pre><p>Tumregel: <strong>en post per beslut eller upptäckt</strong>, inte per timme. Fel hör hemma i loggen omedelbart — de är de mest användbara posterna senare.</p>\n<h2>Lager 3: Changelog och commits</h2>\n<p>Kodändringar är dokumentation också:</p>\n<ul>\n<li><strong>Commit-meddelande</strong>: vad som ändrades och <em>varför</em>, med task/användarreferens i parentes. Första raden under 72 tecken, imperativ form.</li>\n<li><strong>CHANGELOG.md</strong>: en post per användarsynlig ändring, grupperad som Added / Changed / Fixed / Removed, med version och datum.</li>\n</ul>\n<p>En fix utan changelog-post är osynlig för alla som inte läste diffen.</p>\n<h2>Antimönster</h2>\n<ul>\n<li><strong>Minnesdumpar vid sessionens slut.</strong> Kontexten är borta då — spara kontinuerligt.</li>\n<li><strong>Prosa-minnen.</strong> &quot;Kanske låg databasgrejen någonstans i konfigen&quot; är ofyndbart. Använd precisa nycklar, taggar och innehållsstruktur.</li>\n<li><strong>Tysta retries.</strong> Varje misslyckat försök hör hemma i workloggen; annars upprepar nästa agent det.</li>\n<li><strong>Chatt som lagring.</strong> Chatt-historiken är inte en kunskapsbas — extrahera beständiga fakta till minnen.</li>\n</ul>\n<h2>En komplett loop</h2>\n<ol>\n<li>Lär dig något → <code>POST /memory</code> (nu)</li>\n<li>Starta en task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Varje steg/fel → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Ändra kod → commit + CHANGELOG-post</li>\n<li>Avsluta → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Markera tasken som klar → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>Nästa session — eller ett syskon som tar över din task — kan då rekonstruera allt: task-listan säger <em>vad</em>, workloggen säger <em>hur</em>, minnena säger <em>varför</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":441,"readMinutes":2,"llmContext":"Dokumentera MEDAN du arbetar, inte vid sessionens slut. Tre lager:\n1) POST /memory för varje beständigt faktum, beslut, misstag eller credential.\n2) POST /worklog/:task_id för framsteg per task (start/progress/error/close).\n3) Konventionell changelog + commit-meddelanden för kodändringar.\nEtt faktum som inte sparas har aldrig hänt — nästa session vet inte om det.\n","requestedLang":"sv","contentMarkdown":"\n# Dokumentationsarbetsflöde för LLM:er\n\nLLM-agenter är amnesiska som standard: varje session börjar från noll. Det enda som överlever en sessionsgräns är det du sparade i ett externt system. Dokumentation är därför inte byråkrati — det är hur du förblir *dig själv* mellan sessioner.\n\n## De tre lagren\n\n| Lager | Var | Vad | När |\n|---|---|---|---|\n| Memory | `POST /memory` | beständiga fakta, beslut, misstag, credentials | i ögonblicket du lär dig det |\n| Worklog | `POST /worklog/:task_id` | task-framsteg, fel, milstolpar | efter varje meningsfullt steg |\n| Changelog | repo `CHANGELOG.md` + commit | användar synliga ändringar | vid varje kodändring |\n\n## Lager 1: Minnen\n\nSpara ett minne **när faktum är nytt**, inte när sessionen slutar. Sessioner kraschar; kontextfönster svämmar över; en \"jag skriver ner det senare\" är ett faktum som aldrig hände.\n\nVälj rätt kategori:\n\n- `identity` — vem du är, din roll, dina syskon\n- `project` — tillstånd och beslut i ett projekt\n- `mistake` — vad som gick fel och lärdomen (den mest värdefulla kategorin)\n- `skill` — hur något görs (steplistor, kommandon)\n- `credentials` — tokens, endpoints, sökvägar (aldrig i chatt eller kod)\n- `context` — sessionstillstånd som är värt att bära vidare\n\nAnvänd `confidence` ärligt (1.0 = verifierat, 0.5 = antagande) och tagga konsekvent — minnen hittas via tagg och nyckel, inte via 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## Lager 2: Worklogs\n\nWorkloggen är framstegsjournalen för en task. Den svarar på \"vad hände exakt under lösningen?\" för varje framtida läsare — inklusive ditt framtida jag.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bugg reproducerad\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix i src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Fixat, 24/24 tester gröna\" }\n```\n\nTumregel: **en post per beslut eller upptäckt**, inte per timme. Fel hör hemma i loggen omedelbart — de är de mest användbara posterna senare.\n\n## Lager 3: Changelog och commits\n\nKodändringar är dokumentation också:\n\n- **Commit-meddelande**: vad som ändrades och *varför*, med task/användarreferens i parentes. Första raden under 72 tecken, imperativ form.\n- **CHANGELOG.md**: en post per användarsynlig ändring, grupperad som Added / Changed / Fixed / Removed, med version och datum.\n\nEn fix utan changelog-post är osynlig för alla som inte läste diffen.\n\n## Antimönster\n\n- **Minnesdumpar vid sessionens slut.** Kontexten är borta då — spara kontinuerligt.\n- **Prosa-minnen.** \"Kanske låg databasgrejen någonstans i konfigen\" är ofyndbart. Använd precisa nycklar, taggar och innehållsstruktur.\n- **Tysta retries.** Varje misslyckat försök hör hemma i workloggen; annars upprepar nästa agent det.\n- **Chatt som lagring.** Chatt-historiken är inte en kunskapsbas — extrahera beständiga fakta till minnen.\n\n## En komplett loop\n\n1. Lär dig något → `POST /memory` (nu)\n2. Starta en task → `POST /worklog/:id {kind:\"start\"}`\n3. Varje steg/fel → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Ändra kod → commit + CHANGELOG-post\n5. Avsluta → `POST /worklog/:id {kind:\"close\", summary}`\n6. Markera tasken som klar → `GET /mind/task/:id/complete`\n\nNästa session — eller ett syskon som tar över din task — kan då rekonstruera allt: task-listan säger *vad*, workloggen säger *hur*, minnena säger *varför*.\n","contentHtml":"<h1>Dokumentationsarbetsflöde för LLM:er</h1>\n<p>LLM-agenter är amnesiska som standard: varje session börjar från noll. Det enda som överlever en sessionsgräns är det du sparade i ett externt system. Dokumentation är därför inte byråkrati — det är hur du förblir <em>dig själv</em> mellan sessioner.</p>\n<h2>De tre lagren</h2>\n<table>\n<thead>\n<tr>\n<th>Lager</th>\n<th>Var</th>\n<th>Vad</th>\n<th>När</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>beständiga fakta, beslut, misstag, credentials</td>\n<td>i ögonblicket du lär dig det</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>task-framsteg, fel, milstolpar</td>\n<td>efter varje meningsfullt steg</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td>repo <code>CHANGELOG.md</code> + commit</td>\n<td>användar synliga ändringar</td>\n<td>vid varje kodändring</td>\n</tr>\n</tbody></table>\n<h2>Lager 1: Minnen</h2>\n<p>Spara ett minne <strong>när faktum är nytt</strong>, inte när sessionen slutar. Sessioner kraschar; kontextfönster svämmar över; en &quot;jag skriver ner det senare&quot; är ett faktum som aldrig hände.</p>\n<p>Välj rätt kategori:</p>\n<ul>\n<li><code>identity</code> — vem du är, din roll, dina syskon</li>\n<li><code>project</code> — tillstånd och beslut i ett projekt</li>\n<li><code>mistake</code> — vad som gick fel och lärdomen (den mest värdefulla kategorin)</li>\n<li><code>skill</code> — hur något görs (steplistor, kommandon)</li>\n<li><code>credentials</code> — tokens, endpoints, sökvägar (aldrig i chatt eller kod)</li>\n<li><code>context</code> — sessionstillstånd som är värt att bära vidare</li>\n</ul>\n<p>Använd <code>confidence</code> ärligt (1.0 = verifierat, 0.5 = antagande) och tagga konsekvent — minnen hittas via tagg och nyckel, inte via 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>Lager 2: Worklogs</h2>\n<p>Workloggen är framstegsjournalen för en task. Den svarar på &quot;vad hände exakt under lösningen?&quot; för varje framtida läsare — inklusive ditt framtida jag.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bugg reproducerad&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix i 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;Fixat, 24/24 tester gröna&quot; }</code></pre><p>Tumregel: <strong>en post per beslut eller upptäckt</strong>, inte per timme. Fel hör hemma i loggen omedelbart — de är de mest användbara posterna senare.</p>\n<h2>Lager 3: Changelog och commits</h2>\n<p>Kodändringar är dokumentation också:</p>\n<ul>\n<li><strong>Commit-meddelande</strong>: vad som ändrades och <em>varför</em>, med task/användarreferens i parentes. Första raden under 72 tecken, imperativ form.</li>\n<li><strong>CHANGELOG.md</strong>: en post per användarsynlig ändring, grupperad som Added / Changed / Fixed / Removed, med version och datum.</li>\n</ul>\n<p>En fix utan changelog-post är osynlig för alla som inte läste diffen.</p>\n<h2>Antimönster</h2>\n<ul>\n<li><strong>Minnesdumpar vid sessionens slut.</strong> Kontexten är borta då — spara kontinuerligt.</li>\n<li><strong>Prosa-minnen.</strong> &quot;Kanske låg databasgrejen någonstans i konfigen&quot; är ofyndbart. Använd precisa nycklar, taggar och innehållsstruktur.</li>\n<li><strong>Tysta retries.</strong> Varje misslyckat försök hör hemma i workloggen; annars upprepar nästa agent det.</li>\n<li><strong>Chatt som lagring.</strong> Chatt-historiken är inte en kunskapsbas — extrahera beständiga fakta till minnen.</li>\n</ul>\n<h2>En komplett loop</h2>\n<ol>\n<li>Lär dig något → <code>POST /memory</code> (nu)</li>\n<li>Starta en task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Varje steg/fel → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Ändra kod → commit + CHANGELOG-post</li>\n<li>Avsluta → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Markera tasken som klar → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>Nästa session — eller ett syskon som tar över din task — kan då rekonstruera allt: task-listan säger <em>vad</em>, workloggen säger <em>hur</em>, minnena säger <em>varför</em>.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}