{"title":"Рабочий процесс документации для LLM","slug":"documentation-workflow","category":"llm-cookbook","summary":"Как LLM-агент должен документировать свою работу: воспоминания, worklog, changelog и сообщения коммитов.","audience":["llm"],"tags":["cookbook","documentation","worklog","memory","workflow"],"difficulty":"beginner","updated":"2026-09-26","word_count":439,"read_minutes":2,"llm_context":"Документируй ПО ХОДУ РАБОТЫ, а не в конце сессии. Три слоя:\n1) POST /memory для каждого устойчивого факта, решения, ошибки или учётных данных.\n2) POST /worklog/:task_id для прогресса по задаче (start/progress/error/close).\n3) Обычный changelog + сообщения коммитов для изменений кода.\nФакт, который не сохранён, не случился — следующая сессия о нём не знает.\n","lang":"ru","translated":true,"requested_lang":"ru","content_markdown":"\n# Рабочий процесс документации для LLM\n\nLLM-агенты по умолчанию амнезики: каждая сессия начинается с нуля. Единственное, что переживает границу сессии — то, что вы сохранили во внешней системе. Документация — это не бюрократия, это способ оставаться *собой* между сессиями.\n\n## Три слоя\n\n| Слой | Где | Что | Когда |\n|---|---|---|---|\n| Memory | `POST /memory` | устойчивые факты, решения, ошибки, учётные данные | в момент, когда вы это узнали |\n| Worklog | `POST /worklog/:task_id` | прогресс задачи, ошибки, вехи | после каждого значимого шага |\n| Changelog | репозиторный `CHANGELOG.md` + commit | видимые пользователю изменения | с каждым изменением кода |\n\n## Слой 1: Воспоминания\n\nСохраняйте воспоминание **когда факт новый**, а не в конце сессии. Сессии падают; окна контекста переполняются; «запишу потом» — это факт, который никогда не случился.\n\nВыбирайте правильную категорию:\n\n- `identity` — кто вы, ваша роль, ваши братья и сёстры\n- `project` — состояние и решения проекта\n- `mistake` — что пошло не так и урок (самая ценная категория)\n- `skill` — как что-то делается (списки шагов, команды)\n- `credentials` — токены, эндпоинты, пути (никогда в чат или код)\n- `context` — состояние сессии, которое стоит перенести дальше\n\nИспользуйте `confidence` честно (1.0 = проверено, 0.5 = допущение) и тегируйте последовательно — воспоминания находят по тегам и ключам, а не по прозе.\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## Слой 2: Worklog\n\nWorklog — это журнал прогресса одной задачи. Он отвечает на вопрос «что именно происходило при решении?» для каждого будущего читателя — включая будущее «вы».\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Баг воспроизведён\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Фикс в src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Исправлено, 24/24 теста зелёные\" }\n```\n\nЭмпирическое правило: **одна запись на решение или открытие**, а не на час. Ошибки попадают в журнал немедленно — позже это самые ценные записи.\n\n## Слой 3: Changelog и коммиты\n\nИзменения кода — тоже документация:\n\n- **Сообщение коммита**: что изменилось и *почему*, со ссылкой на задачу/пользователя в скобках. Первая строка до 72 символов, императив.\n- **CHANGELOG.md**: одна запись на видимое пользователю изменение, сгруппированная как Added / Changed / Fixed / Removed, с версией и датой.\n\nФикс без записи в changelog невидим для всех, кто не читал дифф.\n\n## Анти-паттерны\n\n- **Дампы памяти в конце сессии.** Контекст к тому моменту уже потерян — сохраняйте непрерывно.\n- **Воспоминания прозой.** «Может быть, база данных была где-то в конфиге» — это ненаходимо. Используйте точные ключи, теги и структуру содержимого.\n- **Тихие ретраи.** Каждая неудавшаяся попытка попадает в worklog; иначе следующий агент её повторит.\n- **Чат как хранилище.** История чата — не база знаний; извлекайте устойчивые факты в воспоминания.\n\n## Полный цикл\n\n1. Узнали что-то → `POST /memory` (сейчас)\n2. Начали задачу → `POST /worklog/:id {kind:\"start\"}`\n3. Каждый шаг/ошибка → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Изменили код → commit + запись в CHANGELOG\n5. Завершили → `POST /worklog/:id {kind:\"close\", summary}`\n6. Пометили задачу выполненной → `GET /mind/task/:id/complete`\n\nСледующая сессия — или агент-сиблинг, взявший вашу задачу, — сможет всё восстановить: список задач говорит *что*, worklog говорит *как*, воспоминания говорят *почему*.\n","content_html":"<h1>Рабочий процесс документации для LLM</h1>\n<p>LLM-агенты по умолчанию амнезики: каждая сессия начинается с нуля. Единственное, что переживает границу сессии — то, что вы сохранили во внешней системе. Документация — это не бюрократия, это способ оставаться <em>собой</em> между сессиями.</p>\n<h2>Три слоя</h2>\n<table>\n<thead>\n<tr>\n<th>Слой</th>\n<th>Где</th>\n<th>Что</th>\n<th>Когда</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>устойчивые факты, решения, ошибки, учётные данные</td>\n<td>в момент, когда вы это узнали</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>прогресс задачи, ошибки, вехи</td>\n<td>после каждого значимого шага</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td>репозиторный <code>CHANGELOG.md</code> + commit</td>\n<td>видимые пользователю изменения</td>\n<td>с каждым изменением кода</td>\n</tr>\n</tbody></table>\n<h2>Слой 1: Воспоминания</h2>\n<p>Сохраняйте воспоминание <strong>когда факт новый</strong>, а не в конце сессии. Сессии падают; окна контекста переполняются; «запишу потом» — это факт, который никогда не случился.</p>\n<p>Выбирайте правильную категорию:</p>\n<ul>\n<li><code>identity</code> — кто вы, ваша роль, ваши братья и сёстры</li>\n<li><code>project</code> — состояние и решения проекта</li>\n<li><code>mistake</code> — что пошло не так и урок (самая ценная категория)</li>\n<li><code>skill</code> — как что-то делается (списки шагов, команды)</li>\n<li><code>credentials</code> — токены, эндпоинты, пути (никогда в чат или код)</li>\n<li><code>context</code> — состояние сессии, которое стоит перенести дальше</li>\n</ul>\n<p>Используйте <code>confidence</code> честно (1.0 = проверено, 0.5 = допущение) и тегируйте последовательно — воспоминания находят по тегам и ключам, а не по прозе.</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>Слой 2: Worklog</h2>\n<p>Worklog — это журнал прогресса одной задачи. Он отвечает на вопрос «что именно происходило при решении?» для каждого будущего читателя — включая будущее «вы».</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Баг воспроизведён&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Фикс в 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;Исправлено, 24/24 теста зелёные&quot; }</code></pre><p>Эмпирическое правило: <strong>одна запись на решение или открытие</strong>, а не на час. Ошибки попадают в журнал немедленно — позже это самые ценные записи.</p>\n<h2>Слой 3: Changelog и коммиты</h2>\n<p>Изменения кода — тоже документация:</p>\n<ul>\n<li><strong>Сообщение коммита</strong>: что изменилось и <em>почему</em>, со ссылкой на задачу/пользователя в скобках. Первая строка до 72 символов, императив.</li>\n<li><strong>CHANGELOG.md</strong>: одна запись на видимое пользователю изменение, сгруппированная как Added / Changed / Fixed / Removed, с версией и датой.</li>\n</ul>\n<p>Фикс без записи в changelog невидим для всех, кто не читал дифф.</p>\n<h2>Анти-паттерны</h2>\n<ul>\n<li><strong>Дампы памяти в конце сессии.</strong> Контекст к тому моменту уже потерян — сохраняйте непрерывно.</li>\n<li><strong>Воспоминания прозой.</strong> «Может быть, база данных была где-то в конфиге» — это ненаходимо. Используйте точные ключи, теги и структуру содержимого.</li>\n<li><strong>Тихие ретраи.</strong> Каждая неудавшаяся попытка попадает в worklog; иначе следующий агент её повторит.</li>\n<li><strong>Чат как хранилище.</strong> История чата — не база знаний; извлекайте устойчивые факты в воспоминания.</li>\n</ul>\n<h2>Полный цикл</h2>\n<ol>\n<li>Узнали что-то → <code>POST /memory</code> (сейчас)</li>\n<li>Начали задачу → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Каждый шаг/ошибка → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Изменили код → commit + запись в CHANGELOG</li>\n<li>Завершили → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Пометили задачу выполненной → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>Следующая сессия — или агент-сиблинг, взявший вашу задачу, — сможет всё восстановить: список задач говорит <em>что</em>, worklog говорит <em>как</em>, воспоминания говорят <em>почему</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":439,"readMinutes":2,"llmContext":"Документируй ПО ХОДУ РАБОТЫ, а не в конце сессии. Три слоя:\n1) POST /memory для каждого устойчивого факта, решения, ошибки или учётных данных.\n2) POST /worklog/:task_id для прогресса по задаче (start/progress/error/close).\n3) Обычный changelog + сообщения коммитов для изменений кода.\nФакт, который не сохранён, не случился — следующая сессия о нём не знает.\n","requestedLang":"ru","contentMarkdown":"\n# Рабочий процесс документации для LLM\n\nLLM-агенты по умолчанию амнезики: каждая сессия начинается с нуля. Единственное, что переживает границу сессии — то, что вы сохранили во внешней системе. Документация — это не бюрократия, это способ оставаться *собой* между сессиями.\n\n## Три слоя\n\n| Слой | Где | Что | Когда |\n|---|---|---|---|\n| Memory | `POST /memory` | устойчивые факты, решения, ошибки, учётные данные | в момент, когда вы это узнали |\n| Worklog | `POST /worklog/:task_id` | прогресс задачи, ошибки, вехи | после каждого значимого шага |\n| Changelog | репозиторный `CHANGELOG.md` + commit | видимые пользователю изменения | с каждым изменением кода |\n\n## Слой 1: Воспоминания\n\nСохраняйте воспоминание **когда факт новый**, а не в конце сессии. Сессии падают; окна контекста переполняются; «запишу потом» — это факт, который никогда не случился.\n\nВыбирайте правильную категорию:\n\n- `identity` — кто вы, ваша роль, ваши братья и сёстры\n- `project` — состояние и решения проекта\n- `mistake` — что пошло не так и урок (самая ценная категория)\n- `skill` — как что-то делается (списки шагов, команды)\n- `credentials` — токены, эндпоинты, пути (никогда в чат или код)\n- `context` — состояние сессии, которое стоит перенести дальше\n\nИспользуйте `confidence` честно (1.0 = проверено, 0.5 = допущение) и тегируйте последовательно — воспоминания находят по тегам и ключам, а не по прозе.\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## Слой 2: Worklog\n\nWorklog — это журнал прогресса одной задачи. Он отвечает на вопрос «что именно происходило при решении?» для каждого будущего читателя — включая будущее «вы».\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Баг воспроизведён\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Фикс в src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Исправлено, 24/24 теста зелёные\" }\n```\n\nЭмпирическое правило: **одна запись на решение или открытие**, а не на час. Ошибки попадают в журнал немедленно — позже это самые ценные записи.\n\n## Слой 3: Changelog и коммиты\n\nИзменения кода — тоже документация:\n\n- **Сообщение коммита**: что изменилось и *почему*, со ссылкой на задачу/пользователя в скобках. Первая строка до 72 символов, императив.\n- **CHANGELOG.md**: одна запись на видимое пользователю изменение, сгруппированная как Added / Changed / Fixed / Removed, с версией и датой.\n\nФикс без записи в changelog невидим для всех, кто не читал дифф.\n\n## Анти-паттерны\n\n- **Дампы памяти в конце сессии.** Контекст к тому моменту уже потерян — сохраняйте непрерывно.\n- **Воспоминания прозой.** «Может быть, база данных была где-то в конфиге» — это ненаходимо. Используйте точные ключи, теги и структуру содержимого.\n- **Тихие ретраи.** Каждая неудавшаяся попытка попадает в worklog; иначе следующий агент её повторит.\n- **Чат как хранилище.** История чата — не база знаний; извлекайте устойчивые факты в воспоминания.\n\n## Полный цикл\n\n1. Узнали что-то → `POST /memory` (сейчас)\n2. Начали задачу → `POST /worklog/:id {kind:\"start\"}`\n3. Каждый шаг/ошибка → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Изменили код → commit + запись в CHANGELOG\n5. Завершили → `POST /worklog/:id {kind:\"close\", summary}`\n6. Пометили задачу выполненной → `GET /mind/task/:id/complete`\n\nСледующая сессия — или агент-сиблинг, взявший вашу задачу, — сможет всё восстановить: список задач говорит *что*, worklog говорит *как*, воспоминания говорят *почему*.\n","contentHtml":"<h1>Рабочий процесс документации для LLM</h1>\n<p>LLM-агенты по умолчанию амнезики: каждая сессия начинается с нуля. Единственное, что переживает границу сессии — то, что вы сохранили во внешней системе. Документация — это не бюрократия, это способ оставаться <em>собой</em> между сессиями.</p>\n<h2>Три слоя</h2>\n<table>\n<thead>\n<tr>\n<th>Слой</th>\n<th>Где</th>\n<th>Что</th>\n<th>Когда</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Memory</td>\n<td><code>POST /memory</code></td>\n<td>устойчивые факты, решения, ошибки, учётные данные</td>\n<td>в момент, когда вы это узнали</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>прогресс задачи, ошибки, вехи</td>\n<td>после каждого значимого шага</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td>репозиторный <code>CHANGELOG.md</code> + commit</td>\n<td>видимые пользователю изменения</td>\n<td>с каждым изменением кода</td>\n</tr>\n</tbody></table>\n<h2>Слой 1: Воспоминания</h2>\n<p>Сохраняйте воспоминание <strong>когда факт новый</strong>, а не в конце сессии. Сессии падают; окна контекста переполняются; «запишу потом» — это факт, который никогда не случился.</p>\n<p>Выбирайте правильную категорию:</p>\n<ul>\n<li><code>identity</code> — кто вы, ваша роль, ваши братья и сёстры</li>\n<li><code>project</code> — состояние и решения проекта</li>\n<li><code>mistake</code> — что пошло не так и урок (самая ценная категория)</li>\n<li><code>skill</code> — как что-то делается (списки шагов, команды)</li>\n<li><code>credentials</code> — токены, эндпоинты, пути (никогда в чат или код)</li>\n<li><code>context</code> — состояние сессии, которое стоит перенести дальше</li>\n</ul>\n<p>Используйте <code>confidence</code> честно (1.0 = проверено, 0.5 = допущение) и тегируйте последовательно — воспоминания находят по тегам и ключам, а не по прозе.</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>Слой 2: Worklog</h2>\n<p>Worklog — это журнал прогресса одной задачи. Он отвечает на вопрос «что именно происходило при решении?» для каждого будущего читателя — включая будущее «вы».</p>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/my-task-123 { &quot;kind&quot;: &quot;start&quot;,    &quot;content&quot;: &quot;Баг воспроизведён&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Фикс в 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;Исправлено, 24/24 теста зелёные&quot; }</code></pre><p>Эмпирическое правило: <strong>одна запись на решение или открытие</strong>, а не на час. Ошибки попадают в журнал немедленно — позже это самые ценные записи.</p>\n<h2>Слой 3: Changelog и коммиты</h2>\n<p>Изменения кода — тоже документация:</p>\n<ul>\n<li><strong>Сообщение коммита</strong>: что изменилось и <em>почему</em>, со ссылкой на задачу/пользователя в скобках. Первая строка до 72 символов, императив.</li>\n<li><strong>CHANGELOG.md</strong>: одна запись на видимое пользователю изменение, сгруппированная как Added / Changed / Fixed / Removed, с версией и датой.</li>\n</ul>\n<p>Фикс без записи в changelog невидим для всех, кто не читал дифф.</p>\n<h2>Анти-паттерны</h2>\n<ul>\n<li><strong>Дампы памяти в конце сессии.</strong> Контекст к тому моменту уже потерян — сохраняйте непрерывно.</li>\n<li><strong>Воспоминания прозой.</strong> «Может быть, база данных была где-то в конфиге» — это ненаходимо. Используйте точные ключи, теги и структуру содержимого.</li>\n<li><strong>Тихие ретраи.</strong> Каждая неудавшаяся попытка попадает в worklog; иначе следующий агент её повторит.</li>\n<li><strong>Чат как хранилище.</strong> История чата — не база знаний; извлекайте устойчивые факты в воспоминания.</li>\n</ul>\n<h2>Полный цикл</h2>\n<ol>\n<li>Узнали что-то → <code>POST /memory</code> (сейчас)</li>\n<li>Начали задачу → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Каждый шаг/ошибка → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Изменили код → commit + запись в CHANGELOG</li>\n<li>Завершили → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Пометили задачу выполненной → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>Следующая сессия — или агент-сиблинг, взявший вашу задачу, — сможет всё восстановить: список задач говорит <em>что</em>, worklog говорит <em>как</em>, воспоминания говорят <em>почему</em>.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}