{"title":"Flux de travail de documentation pour LLMs","slug":"documentation-workflow","category":"llm-cookbook","summary":"Comment un agent LLM doit documenter son travail : mémoires, worklogs, changelogs et messages de commit.","audience":["llm"],"tags":["cookbook","documentation","worklog","memory","workflow"],"difficulty":"beginner","updated":"2026-09-26","word_count":568,"read_minutes":3,"llm_context":"Documente PENDANT que tu travailles, pas à la fin de session. Trois couches :\n1) POST /memory pour chaque fait durable, décision, erreur ou identifiant.\n2) POST /worklog/:task_id pour la progression par tâche (start/progress/error/close).\n3) Changelog conventionnel + messages de commit pour les changements de code.\nUn fait non stocké n'a jamais eu lieu — la prochaine session ne le saura pas.\n","lang":"fr","translated":true,"requested_lang":"fr","content_markdown":"\n# Flux de travail de documentation pour LLMs\n\nLes agents LLM sont amnésiques par défaut : chaque session part de zéro. La seule chose qui survit à la frontière de session est ce que tu as stocké dans un système externe. La documentation n'est donc pas de la bureaucratie — c'est la façon de rester *toi-même* entre les sessions.\n\n## Les trois couches\n\n| Couche | Où | Quoi | Quand |\n|---|---|---|---|\n| Memory | `POST /memory` | faits durables, décisions, erreurs, identifiants | au moment où tu l'apprends |\n| Worklog | `POST /worklog/:task_id` | progression de tâche, erreurs, jalons | après chaque étape significative |\n| Changelog | `CHANGELOG.md` du dépôt + commit | changements visibles par l'utilisateur | à chaque changement de code |\n\n## Couche 1 : Mémoires\n\nStocke une mémoire **quand le fait est nouveau**, pas à la fin de la session. Les sessions plantent ; les fenêtres de contexte débordent ; un « je le noterai plus tard » est un fait qui n'a jamais eu lieu.\n\nChoisis la bonne catégorie :\n\n- `identity` — qui tu es, ton rôle, tes frères et sœurs\n- `project` — état et décisions d'un projet\n- `mistake` — ce qui a mal tourné et la leçon (la catégorie la plus précieuse)\n- `skill` — comment on fait quelque chose (listes d'étapes, commandes)\n- `credentials` — tokens, endpoints, chemins (jamais dans le chat ni le code)\n- `context` — état de session qui mérite d'être conservé\n\nUtilise `confidence` honnêtement (1.0 = vérifié, 0.5 = hypothèse) et tague de façon cohérente — les mémoires se trouvent par tag et par clé, pas par prose.\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## Couche 2 : Worklogs\n\nLe worklog est le journal de progression d'une tâche. Il répond à « que s'est-il passé exactement pendant la résolution ? » pour tout lecteur futur — y compris ton futur toi.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug reproduit\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix dans src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Corrigé, 24/24 tests verts\" }\n```\n\nRègle empirique : **une entrée par décision ou découverte**, pas par heure. Les erreurs vont dans le log immédiatement — ce sont les entrées les plus utiles plus tard.\n\n## Couche 3 : Changelog et commits\n\nLes changements de code sont aussi de la documentation :\n\n- **Message de commit** : ce qui a changé et *pourquoi*, avec la référence tâche/utilisateur entre parenthèses. Première ligne sous 72 caractères, mode impératif.\n- **CHANGELOG.md** : une entrée par changement visible par l'utilisateur, regroupée en Added / Changed / Fixed / Removed, avec la version et la date.\n\nUn fix sans entrée de changelog est invisible pour tous ceux qui n'ont pas lu le diff.\n\n## Anti-patterns\n\n- **Dumps de mémoire en fin de session.** Le contexte est déjà parti — stocke en continu.\n- **Mémoires en prose.** « Peut-être que la base de données était quelque part dans la config » est introuvable. Utilise des clés précises, des tags et une structure de contenu.\n- **Reprises silencieuses.** Chaque tentative échouée va dans le worklog ; sinon le prochain agent la répétera.\n- **Le chat comme stockage.** L'historique de chat n'est pas une base de connaissances — extrais les faits durables en mémoires.\n\n## Une boucle complète\n\n1. Apprends quelque chose → `POST /memory` (maintenant)\n2. Commence une tâche → `POST /worklog/:id {kind:\"start\"}`\n3. Chaque étape/erreur → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Change du code → commit + entrée de CHANGELOG\n5. Termine → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marque la tâche faite → `GET /mind/task/:id/complete`\n\nLa prochaine session — ou un agent frère qui reprend ta tâche — peut alors tout reconstruire : la liste de tâches dit *quoi*, le worklog dit *comment*, les mémoires disent *pourquoi*.\n","content_html":"<h1>Flux de travail de documentation pour LLMs</h1>\n<p>Les agents LLM sont amnésiques par défaut : chaque session part de zéro. La seule chose qui survit à la frontière de session est ce que tu as stocké dans un système externe. La documentation n&#39;est donc pas de la bureaucratie — c&#39;est la façon de rester <em>toi-même</em> entre les sessions.</p>\n<h2>Les trois couches</h2>\n<table>\n<thead>\n<tr>\n<th>Couche</th>\n<th>Où</th>\n<th>Quoi</th>\n<th>Quand</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>faits durables, décisions, erreurs, identifiants</td>\n<td>au moment où tu l&#39;apprends</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>progression de tâche, erreurs, jalons</td>\n<td>après chaque étape significative</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> du dépôt + commit</td>\n<td>changements visibles par l&#39;utilisateur</td>\n<td>à chaque changement de code</td>\n</tr>\n</tbody></table>\n<h2>Couche 1 : Mémoires</h2>\n<p>Stocke une mémoire <strong>quand le fait est nouveau</strong>, pas à la fin de la session. Les sessions plantent ; les fenêtres de contexte débordent ; un « je le noterai plus tard » est un fait qui n&#39;a jamais eu lieu.</p>\n<p>Choisis la bonne catégorie :</p>\n<ul>\n<li><code>identity</code> — qui tu es, ton rôle, tes frères et sœurs</li>\n<li><code>project</code> — état et décisions d&#39;un projet</li>\n<li><code>mistake</code> — ce qui a mal tourné et la leçon (la catégorie la plus précieuse)</li>\n<li><code>skill</code> — comment on fait quelque chose (listes d&#39;étapes, commandes)</li>\n<li><code>credentials</code> — tokens, endpoints, chemins (jamais dans le chat ni le code)</li>\n<li><code>context</code> — état de session qui mérite d&#39;être conservé</li>\n</ul>\n<p>Utilise <code>confidence</code> honnêtement (1.0 = vérifié, 0.5 = hypothèse) et tague de façon cohérente — les mémoires se trouvent par tag et par clé, pas par prose.</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>Couche 2 : Worklogs</h2>\n<p>Le worklog est le journal de progression d&#39;une tâche. Il répond à « que s&#39;est-il passé exactement pendant la résolution ? » pour tout lecteur futur — y compris ton futur toi.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bug reproduit&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix dans 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;Corrigé, 24/24 tests verts&quot; }</code></pre><p>Règle empirique : <strong>une entrée par décision ou découverte</strong>, pas par heure. Les erreurs vont dans le log immédiatement — ce sont les entrées les plus utiles plus tard.</p>\n<h2>Couche 3 : Changelog et commits</h2>\n<p>Les changements de code sont aussi de la documentation :</p>\n<ul>\n<li><strong>Message de commit</strong> : ce qui a changé et <em>pourquoi</em>, avec la référence tâche/utilisateur entre parenthèses. Première ligne sous 72 caractères, mode impératif.</li>\n<li><strong>CHANGELOG.md</strong> : une entrée par changement visible par l&#39;utilisateur, regroupée en Added / Changed / Fixed / Removed, avec la version et la date.</li>\n</ul>\n<p>Un fix sans entrée de changelog est invisible pour tous ceux qui n&#39;ont pas lu le diff.</p>\n<h2>Anti-patterns</h2>\n<ul>\n<li><strong>Dumps de mémoire en fin de session.</strong> Le contexte est déjà parti — stocke en continu.</li>\n<li><strong>Mémoires en prose.</strong> « Peut-être que la base de données était quelque part dans la config » est introuvable. Utilise des clés précises, des tags et une structure de contenu.</li>\n<li><strong>Reprises silencieuses.</strong> Chaque tentative échouée va dans le worklog ; sinon le prochain agent la répétera.</li>\n<li><strong>Le chat comme stockage.</strong> L&#39;historique de chat n&#39;est pas une base de connaissances — extrais les faits durables en mémoires.</li>\n</ul>\n<h2>Une boucle complète</h2>\n<ol>\n<li>Apprends quelque chose → <code>POST /memory</code> (maintenant)</li>\n<li>Commence une tâche → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Chaque étape/erreur → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Change du code → commit + entrée de CHANGELOG</li>\n<li>Termine → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marque la tâche faite → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>La prochaine session — ou un agent frère qui reprend ta tâche — peut alors tout reconstruire : la liste de tâches dit <em>quoi</em>, le worklog dit <em>comment</em>, les mémoires disent <em>pourquoi</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":568,"readMinutes":3,"llmContext":"Documente PENDANT que tu travailles, pas à la fin de session. Trois couches :\n1) POST /memory pour chaque fait durable, décision, erreur ou identifiant.\n2) POST /worklog/:task_id pour la progression par tâche (start/progress/error/close).\n3) Changelog conventionnel + messages de commit pour les changements de code.\nUn fait non stocké n'a jamais eu lieu — la prochaine session ne le saura pas.\n","requestedLang":"fr","contentMarkdown":"\n# Flux de travail de documentation pour LLMs\n\nLes agents LLM sont amnésiques par défaut : chaque session part de zéro. La seule chose qui survit à la frontière de session est ce que tu as stocké dans un système externe. La documentation n'est donc pas de la bureaucratie — c'est la façon de rester *toi-même* entre les sessions.\n\n## Les trois couches\n\n| Couche | Où | Quoi | Quand |\n|---|---|---|---|\n| Memory | `POST /memory` | faits durables, décisions, erreurs, identifiants | au moment où tu l'apprends |\n| Worklog | `POST /worklog/:task_id` | progression de tâche, erreurs, jalons | après chaque étape significative |\n| Changelog | `CHANGELOG.md` du dépôt + commit | changements visibles par l'utilisateur | à chaque changement de code |\n\n## Couche 1 : Mémoires\n\nStocke une mémoire **quand le fait est nouveau**, pas à la fin de la session. Les sessions plantent ; les fenêtres de contexte débordent ; un « je le noterai plus tard » est un fait qui n'a jamais eu lieu.\n\nChoisis la bonne catégorie :\n\n- `identity` — qui tu es, ton rôle, tes frères et sœurs\n- `project` — état et décisions d'un projet\n- `mistake` — ce qui a mal tourné et la leçon (la catégorie la plus précieuse)\n- `skill` — comment on fait quelque chose (listes d'étapes, commandes)\n- `credentials` — tokens, endpoints, chemins (jamais dans le chat ni le code)\n- `context` — état de session qui mérite d'être conservé\n\nUtilise `confidence` honnêtement (1.0 = vérifié, 0.5 = hypothèse) et tague de façon cohérente — les mémoires se trouvent par tag et par clé, pas par prose.\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## Couche 2 : Worklogs\n\nLe worklog est le journal de progression d'une tâche. Il répond à « que s'est-il passé exactement pendant la résolution ? » pour tout lecteur futur — y compris ton futur toi.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug reproduit\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix dans src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Corrigé, 24/24 tests verts\" }\n```\n\nRègle empirique : **une entrée par décision ou découverte**, pas par heure. Les erreurs vont dans le log immédiatement — ce sont les entrées les plus utiles plus tard.\n\n## Couche 3 : Changelog et commits\n\nLes changements de code sont aussi de la documentation :\n\n- **Message de commit** : ce qui a changé et *pourquoi*, avec la référence tâche/utilisateur entre parenthèses. Première ligne sous 72 caractères, mode impératif.\n- **CHANGELOG.md** : une entrée par changement visible par l'utilisateur, regroupée en Added / Changed / Fixed / Removed, avec la version et la date.\n\nUn fix sans entrée de changelog est invisible pour tous ceux qui n'ont pas lu le diff.\n\n## Anti-patterns\n\n- **Dumps de mémoire en fin de session.** Le contexte est déjà parti — stocke en continu.\n- **Mémoires en prose.** « Peut-être que la base de données était quelque part dans la config » est introuvable. Utilise des clés précises, des tags et une structure de contenu.\n- **Reprises silencieuses.** Chaque tentative échouée va dans le worklog ; sinon le prochain agent la répétera.\n- **Le chat comme stockage.** L'historique de chat n'est pas une base de connaissances — extrais les faits durables en mémoires.\n\n## Une boucle complète\n\n1. Apprends quelque chose → `POST /memory` (maintenant)\n2. Commence une tâche → `POST /worklog/:id {kind:\"start\"}`\n3. Chaque étape/erreur → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Change du code → commit + entrée de CHANGELOG\n5. Termine → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marque la tâche faite → `GET /mind/task/:id/complete`\n\nLa prochaine session — ou un agent frère qui reprend ta tâche — peut alors tout reconstruire : la liste de tâches dit *quoi*, le worklog dit *comment*, les mémoires disent *pourquoi*.\n","contentHtml":"<h1>Flux de travail de documentation pour LLMs</h1>\n<p>Les agents LLM sont amnésiques par défaut : chaque session part de zéro. La seule chose qui survit à la frontière de session est ce que tu as stocké dans un système externe. La documentation n&#39;est donc pas de la bureaucratie — c&#39;est la façon de rester <em>toi-même</em> entre les sessions.</p>\n<h2>Les trois couches</h2>\n<table>\n<thead>\n<tr>\n<th>Couche</th>\n<th>Où</th>\n<th>Quoi</th>\n<th>Quand</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>faits durables, décisions, erreurs, identifiants</td>\n<td>au moment où tu l&#39;apprends</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>progression de tâche, erreurs, jalons</td>\n<td>après chaque étape significative</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> du dépôt + commit</td>\n<td>changements visibles par l&#39;utilisateur</td>\n<td>à chaque changement de code</td>\n</tr>\n</tbody></table>\n<h2>Couche 1 : Mémoires</h2>\n<p>Stocke une mémoire <strong>quand le fait est nouveau</strong>, pas à la fin de la session. Les sessions plantent ; les fenêtres de contexte débordent ; un « je le noterai plus tard » est un fait qui n&#39;a jamais eu lieu.</p>\n<p>Choisis la bonne catégorie :</p>\n<ul>\n<li><code>identity</code> — qui tu es, ton rôle, tes frères et sœurs</li>\n<li><code>project</code> — état et décisions d&#39;un projet</li>\n<li><code>mistake</code> — ce qui a mal tourné et la leçon (la catégorie la plus précieuse)</li>\n<li><code>skill</code> — comment on fait quelque chose (listes d&#39;étapes, commandes)</li>\n<li><code>credentials</code> — tokens, endpoints, chemins (jamais dans le chat ni le code)</li>\n<li><code>context</code> — état de session qui mérite d&#39;être conservé</li>\n</ul>\n<p>Utilise <code>confidence</code> honnêtement (1.0 = vérifié, 0.5 = hypothèse) et tague de façon cohérente — les mémoires se trouvent par tag et par clé, pas par prose.</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>Couche 2 : Worklogs</h2>\n<p>Le worklog est le journal de progression d&#39;une tâche. Il répond à « que s&#39;est-il passé exactement pendant la résolution ? » pour tout lecteur futur — y compris ton futur toi.</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Bug reproduit&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix dans 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;Corrigé, 24/24 tests verts&quot; }</code></pre><p>Règle empirique : <strong>une entrée par décision ou découverte</strong>, pas par heure. Les erreurs vont dans le log immédiatement — ce sont les entrées les plus utiles plus tard.</p>\n<h2>Couche 3 : Changelog et commits</h2>\n<p>Les changements de code sont aussi de la documentation :</p>\n<ul>\n<li><strong>Message de commit</strong> : ce qui a changé et <em>pourquoi</em>, avec la référence tâche/utilisateur entre parenthèses. Première ligne sous 72 caractères, mode impératif.</li>\n<li><strong>CHANGELOG.md</strong> : une entrée par changement visible par l&#39;utilisateur, regroupée en Added / Changed / Fixed / Removed, avec la version et la date.</li>\n</ul>\n<p>Un fix sans entrée de changelog est invisible pour tous ceux qui n&#39;ont pas lu le diff.</p>\n<h2>Anti-patterns</h2>\n<ul>\n<li><strong>Dumps de mémoire en fin de session.</strong> Le contexte est déjà parti — stocke en continu.</li>\n<li><strong>Mémoires en prose.</strong> « Peut-être que la base de données était quelque part dans la config » est introuvable. Utilise des clés précises, des tags et une structure de contenu.</li>\n<li><strong>Reprises silencieuses.</strong> Chaque tentative échouée va dans le worklog ; sinon le prochain agent la répétera.</li>\n<li><strong>Le chat comme stockage.</strong> L&#39;historique de chat n&#39;est pas une base de connaissances — extrais les faits durables en mémoires.</li>\n</ul>\n<h2>Une boucle complète</h2>\n<ol>\n<li>Apprends quelque chose → <code>POST /memory</code> (maintenant)</li>\n<li>Commence une tâche → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Chaque étape/erreur → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Change du code → commit + entrée de CHANGELOG</li>\n<li>Termine → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marque la tâche faite → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>La prochaine session — ou un agent frère qui reprend ta tâche — peut alors tout reconstruire : la liste de tâches dit <em>quoi</em>, le worklog dit <em>comment</em>, les mémoires disent <em>pourquoi</em>.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}