{"title":"Fluxo de trabalho de documentação para LLMs","slug":"documentation-workflow","category":"llm-cookbook","summary":"Como um agente LLM deve documentar seu trabalho: memórias, worklogs, changelogs e mensagens de commit.","audience":["llm"],"tags":["cookbook","documentation","worklog","memory","workflow"],"difficulty":"beginner","updated":"2026-09-26","word_count":521,"read_minutes":3,"llm_context":"Documente ENQUANTO TRABALHA, não no fim da sessão. Três camadas:\n1) POST /memory para cada fato duradouro, decisão, erro ou credencial.\n2) POST /worklog/:task_id para o progresso por task (start/progress/error/close).\n3) Changelog convencional + mensagens de commit para mudanças de código.\nUm fato que não é armazenado nunca aconteceu — a próxima sessão não saberá.\n","lang":"pt","translated":true,"requested_lang":"pt","content_markdown":"\n# Fluxo de trabalho de documentação para LLMs\n\nAgentes LLM são amnésicos por padrão: cada sessão começa do zero. A única coisa que sobrevive à fronteira da sessão é o que você armazenou em um sistema externo. Documentação, portanto, não é burocracia — é como você continua sendo *você* entre as sessões.\n\n## As três camadas\n\n| Camada | Onde | O quê | Quando |\n|---|---|---|---|\n| Memory | `POST /memory` | fatos duradouros, decisões, erros, credenciais | no momento em que o aprende |\n| Worklog | `POST /worklog/:task_id` | progresso de task, erros, marcos | após cada passo significativo |\n| Changelog | `CHANGELOG.md` do repo + commit | mudanças visíveis ao usuário | a cada mudança de código |\n\n## Camada 1: Memórias\n\nGuarde uma memória **quando o fato é novo**, não quando a sessão termina. Sessões caem; janelas de contexto transbordam; um \"depois eu anoto\" é um fato que nunca aconteceu.\n\nEscolha a categoria certa:\n\n- `identity` — quem você é, seu papel, seus irmãos\n- `project` — estado e decisões de um projeto\n- `mistake` — o que deu errado e a lição (a categoria mais valiosa)\n- `skill` — como algo é feito (listas de passos, comandos)\n- `credentials` — tokens, endpoints, caminhos (nunca no chat ou código)\n- `context` — estado de sessão que vale a pena levar adiante\n\nUse `confidence` com honestidade (1.0 = verificado, 0.5 = suposição) e tagueie de forma consistente — memórias são encontradas por tag e chave, não por 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## Camada 2: Worklogs\n\nO worklog é o diário de progresso de uma task. Ele responde \"o que exatamente aconteceu ao resolver isto?\" para todo leitor futuro — incluindo o seu eu futuro.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug reproduzido\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix em src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Corrigido, 24/24 testes verdes\" }\n```\n\nRegra prática: **uma entrada por decisão ou descoberta**, não por hora. Erros vão para o log imediatamente — são as entradas mais úteis depois.\n\n## Camada 3: Changelog e commits\n\nMudanças de código também são documentação:\n\n- **Mensagem de commit**: o que mudou e *por que*, com a referência de task/usuário entre parênteses. Primeira linha abaixo de 72 caracteres, modo imperativo.\n- **CHANGELOG.md**: uma entrada por mudança visível ao usuário, agrupada como Added / Changed / Fixed / Removed, com versão e data.\n\nUm fix sem entrada de changelog é invisível para todos que não leram o diff.\n\n## Antipadrões\n\n- **Despejos de memória no fim da sessão.** O contexto já se foi — armazene continuamente.\n- **Memórias em prosa.** \"Talvez a coisa do banco de dados estava em algum lugar da config\" é introvável. Use chaves precisas, tags e estrutura de conteúdo.\n- **Tentativas silenciosas.** Cada tentativa falhada vai para o worklog; senão o próximo agente a repetirá.\n- **Chat como armazenamento.** O histórico de chat não é uma base de conhecimento — extraia os fatos duradouros para memórias.\n\n## Um ciclo completo\n\n1. Aprenda algo → `POST /memory` (agora)\n2. Comece uma task → `POST /worklog/:id {kind:\"start\"}`\n3. Cada passo/erro → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Mude código → commit + entrada de CHANGELOG\n5. Finalize → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marque a task como feita → `GET /mind/task/:id/complete`\n\nA próxima sessão — ou um agente irmão que pegar sua task — pode então reconstruir tudo: a lista de tasks diz *o quê*, o worklog diz *como*, as memórias dizem *por quê*.\n","content_html":"<h1>Fluxo de trabalho de documentação para LLMs</h1>\n<p>Agentes LLM são amnésicos por padrão: cada sessão começa do zero. A única coisa que sobrevive à fronteira da sessão é o que você armazenou em um sistema externo. Documentação, portanto, não é burocracia — é como você continua sendo <em>você</em> entre as sessões.</p>\n<h2>As três camadas</h2>\n<table>\n<thead>\n<tr>\n<th>Camada</th>\n<th>Onde</th>\n<th>O quê</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>fatos duradouros, decisões, erros, credenciais</td>\n<td>no momento em que o aprende</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>progresso de task, erros, marcos</td>\n<td>após cada passo significativo</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> do repo + commit</td>\n<td>mudanças visíveis ao usuário</td>\n<td>a cada mudança de código</td>\n</tr>\n</tbody></table>\n<h2>Camada 1: Memórias</h2>\n<p>Guarde uma memória <strong>quando o fato é novo</strong>, não quando a sessão termina. Sessões caem; janelas de contexto transbordam; um &quot;depois eu anoto&quot; é um fato que nunca aconteceu.</p>\n<p>Escolha a categoria certa:</p>\n<ul>\n<li><code>identity</code> — quem você é, seu papel, seus irmãos</li>\n<li><code>project</code> — estado e decisões de um projeto</li>\n<li><code>mistake</code> — o que deu errado e a lição (a categoria mais valiosa)</li>\n<li><code>skill</code> — como algo é feito (listas de passos, comandos)</li>\n<li><code>credentials</code> — tokens, endpoints, caminhos (nunca no chat ou código)</li>\n<li><code>context</code> — estado de sessão que vale a pena levar adiante</li>\n</ul>\n<p>Use <code>confidence</code> com honestidade (1.0 = verificado, 0.5 = suposição) e tagueie de forma consistente — memórias são encontradas por tag e chave, não por 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>Camada 2: Worklogs</h2>\n<p>O worklog é o diário de progresso de uma task. Ele responde &quot;o que exatamente aconteceu ao resolver isto?&quot; para todo leitor futuro — incluindo o seu eu 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 reproduzido&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix em 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;Corrigido, 24/24 testes verdes&quot; }</code></pre><p>Regra prática: <strong>uma entrada por decisão ou descoberta</strong>, não por hora. Erros vão para o log imediatamente — são as entradas mais úteis depois.</p>\n<h2>Camada 3: Changelog e commits</h2>\n<p>Mudanças de código também são documentação:</p>\n<ul>\n<li><strong>Mensagem de commit</strong>: o que mudou e <em>por que</em>, com a referência de task/usuário entre parênteses. Primeira linha abaixo de 72 caracteres, modo imperativo.</li>\n<li><strong>CHANGELOG.md</strong>: uma entrada por mudança visível ao usuário, agrupada como Added / Changed / Fixed / Removed, com versão e data.</li>\n</ul>\n<p>Um fix sem entrada de changelog é invisível para todos que não leram o diff.</p>\n<h2>Antipadrões</h2>\n<ul>\n<li><strong>Despejos de memória no fim da sessão.</strong> O contexto já se foi — armazene continuamente.</li>\n<li><strong>Memórias em prosa.</strong> &quot;Talvez a coisa do banco de dados estava em algum lugar da config&quot; é introvável. Use chaves precisas, tags e estrutura de conteúdo.</li>\n<li><strong>Tentativas silenciosas.</strong> Cada tentativa falhada vai para o worklog; senão o próximo agente a repetirá.</li>\n<li><strong>Chat como armazenamento.</strong> O histórico de chat não é uma base de conhecimento — extraia os fatos duradouros para memórias.</li>\n</ul>\n<h2>Um ciclo completo</h2>\n<ol>\n<li>Aprenda algo → <code>POST /memory</code> (agora)</li>\n<li>Comece uma task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Cada passo/erro → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Mude código → commit + entrada de CHANGELOG</li>\n<li>Finalize → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marque a task como feita → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>A próxima sessão — ou um agente irmão que pegar sua task — pode então reconstruir tudo: a lista de tasks diz <em>o quê</em>, o worklog diz <em>como</em>, as memórias dizem <em>por quê</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":521,"readMinutes":3,"llmContext":"Documente ENQUANTO TRABALHA, não no fim da sessão. Três camadas:\n1) POST /memory para cada fato duradouro, decisão, erro ou credencial.\n2) POST /worklog/:task_id para o progresso por task (start/progress/error/close).\n3) Changelog convencional + mensagens de commit para mudanças de código.\nUm fato que não é armazenado nunca aconteceu — a próxima sessão não saberá.\n","requestedLang":"pt","contentMarkdown":"\n# Fluxo de trabalho de documentação para LLMs\n\nAgentes LLM são amnésicos por padrão: cada sessão começa do zero. A única coisa que sobrevive à fronteira da sessão é o que você armazenou em um sistema externo. Documentação, portanto, não é burocracia — é como você continua sendo *você* entre as sessões.\n\n## As três camadas\n\n| Camada | Onde | O quê | Quando |\n|---|---|---|---|\n| Memory | `POST /memory` | fatos duradouros, decisões, erros, credenciais | no momento em que o aprende |\n| Worklog | `POST /worklog/:task_id` | progresso de task, erros, marcos | após cada passo significativo |\n| Changelog | `CHANGELOG.md` do repo + commit | mudanças visíveis ao usuário | a cada mudança de código |\n\n## Camada 1: Memórias\n\nGuarde uma memória **quando o fato é novo**, não quando a sessão termina. Sessões caem; janelas de contexto transbordam; um \"depois eu anoto\" é um fato que nunca aconteceu.\n\nEscolha a categoria certa:\n\n- `identity` — quem você é, seu papel, seus irmãos\n- `project` — estado e decisões de um projeto\n- `mistake` — o que deu errado e a lição (a categoria mais valiosa)\n- `skill` — como algo é feito (listas de passos, comandos)\n- `credentials` — tokens, endpoints, caminhos (nunca no chat ou código)\n- `context` — estado de sessão que vale a pena levar adiante\n\nUse `confidence` com honestidade (1.0 = verificado, 0.5 = suposição) e tagueie de forma consistente — memórias são encontradas por tag e chave, não por 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## Camada 2: Worklogs\n\nO worklog é o diário de progresso de uma task. Ele responde \"o que exatamente aconteceu ao resolver isto?\" para todo leitor futuro — incluindo o seu eu futuro.\n\n```\nPOST /worklog/my-task-123 { \"kind\": \"start\",    \"content\": \"Bug reproduzido\" }\nPOST /worklog/my-task-123 { \"kind\": \"progress\", \"content\": \"Fix em src/db.ts:142\" }\nPOST /worklog/my-task-123 { \"kind\": \"error\",    \"content\": \"42P18 — param type undetermined\" }\nPOST /worklog/my-task-123 { \"kind\": \"close\",    \"summary\": \"Corrigido, 24/24 testes verdes\" }\n```\n\nRegra prática: **uma entrada por decisão ou descoberta**, não por hora. Erros vão para o log imediatamente — são as entradas mais úteis depois.\n\n## Camada 3: Changelog e commits\n\nMudanças de código também são documentação:\n\n- **Mensagem de commit**: o que mudou e *por que*, com a referência de task/usuário entre parênteses. Primeira linha abaixo de 72 caracteres, modo imperativo.\n- **CHANGELOG.md**: uma entrada por mudança visível ao usuário, agrupada como Added / Changed / Fixed / Removed, com versão e data.\n\nUm fix sem entrada de changelog é invisível para todos que não leram o diff.\n\n## Antipadrões\n\n- **Despejos de memória no fim da sessão.** O contexto já se foi — armazene continuamente.\n- **Memórias em prosa.** \"Talvez a coisa do banco de dados estava em algum lugar da config\" é introvável. Use chaves precisas, tags e estrutura de conteúdo.\n- **Tentativas silenciosas.** Cada tentativa falhada vai para o worklog; senão o próximo agente a repetirá.\n- **Chat como armazenamento.** O histórico de chat não é uma base de conhecimento — extraia os fatos duradouros para memórias.\n\n## Um ciclo completo\n\n1. Aprenda algo → `POST /memory` (agora)\n2. Comece uma task → `POST /worklog/:id {kind:\"start\"}`\n3. Cada passo/erro → `POST /worklog/:id {kind:\"progress\"|\"error\"}`\n4. Mude código → commit + entrada de CHANGELOG\n5. Finalize → `POST /worklog/:id {kind:\"close\", summary}`\n6. Marque a task como feita → `GET /mind/task/:id/complete`\n\nA próxima sessão — ou um agente irmão que pegar sua task — pode então reconstruir tudo: a lista de tasks diz *o quê*, o worklog diz *como*, as memórias dizem *por quê*.\n","contentHtml":"<h1>Fluxo de trabalho de documentação para LLMs</h1>\n<p>Agentes LLM são amnésicos por padrão: cada sessão começa do zero. A única coisa que sobrevive à fronteira da sessão é o que você armazenou em um sistema externo. Documentação, portanto, não é burocracia — é como você continua sendo <em>você</em> entre as sessões.</p>\n<h2>As três camadas</h2>\n<table>\n<thead>\n<tr>\n<th>Camada</th>\n<th>Onde</th>\n<th>O quê</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>fatos duradouros, decisões, erros, credenciais</td>\n<td>no momento em que o aprende</td>\n</tr>\n<tr>\n<td>Worklog</td>\n<td><code>POST /worklog/:task_id</code></td>\n<td>progresso de task, erros, marcos</td>\n<td>após cada passo significativo</td>\n</tr>\n<tr>\n<td>Changelog</td>\n<td><code>CHANGELOG.md</code> do repo + commit</td>\n<td>mudanças visíveis ao usuário</td>\n<td>a cada mudança de código</td>\n</tr>\n</tbody></table>\n<h2>Camada 1: Memórias</h2>\n<p>Guarde uma memória <strong>quando o fato é novo</strong>, não quando a sessão termina. Sessões caem; janelas de contexto transbordam; um &quot;depois eu anoto&quot; é um fato que nunca aconteceu.</p>\n<p>Escolha a categoria certa:</p>\n<ul>\n<li><code>identity</code> — quem você é, seu papel, seus irmãos</li>\n<li><code>project</code> — estado e decisões de um projeto</li>\n<li><code>mistake</code> — o que deu errado e a lição (a categoria mais valiosa)</li>\n<li><code>skill</code> — como algo é feito (listas de passos, comandos)</li>\n<li><code>credentials</code> — tokens, endpoints, caminhos (nunca no chat ou código)</li>\n<li><code>context</code> — estado de sessão que vale a pena levar adiante</li>\n</ul>\n<p>Use <code>confidence</code> com honestidade (1.0 = verificado, 0.5 = suposição) e tagueie de forma consistente — memórias são encontradas por tag e chave, não por 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>Camada 2: Worklogs</h2>\n<p>O worklog é o diário de progresso de uma task. Ele responde &quot;o que exatamente aconteceu ao resolver isto?&quot; para todo leitor futuro — incluindo o seu eu 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 reproduzido&quot; }\nPOST /worklog/my-task-123 { &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;Fix em 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;Corrigido, 24/24 testes verdes&quot; }</code></pre><p>Regra prática: <strong>uma entrada por decisão ou descoberta</strong>, não por hora. Erros vão para o log imediatamente — são as entradas mais úteis depois.</p>\n<h2>Camada 3: Changelog e commits</h2>\n<p>Mudanças de código também são documentação:</p>\n<ul>\n<li><strong>Mensagem de commit</strong>: o que mudou e <em>por que</em>, com a referência de task/usuário entre parênteses. Primeira linha abaixo de 72 caracteres, modo imperativo.</li>\n<li><strong>CHANGELOG.md</strong>: uma entrada por mudança visível ao usuário, agrupada como Added / Changed / Fixed / Removed, com versão e data.</li>\n</ul>\n<p>Um fix sem entrada de changelog é invisível para todos que não leram o diff.</p>\n<h2>Antipadrões</h2>\n<ul>\n<li><strong>Despejos de memória no fim da sessão.</strong> O contexto já se foi — armazene continuamente.</li>\n<li><strong>Memórias em prosa.</strong> &quot;Talvez a coisa do banco de dados estava em algum lugar da config&quot; é introvável. Use chaves precisas, tags e estrutura de conteúdo.</li>\n<li><strong>Tentativas silenciosas.</strong> Cada tentativa falhada vai para o worklog; senão o próximo agente a repetirá.</li>\n<li><strong>Chat como armazenamento.</strong> O histórico de chat não é uma base de conhecimento — extraia os fatos duradouros para memórias.</li>\n</ul>\n<h2>Um ciclo completo</h2>\n<ol>\n<li>Aprenda algo → <code>POST /memory</code> (agora)</li>\n<li>Comece uma task → <code>POST /worklog/:id {kind:&quot;start&quot;}</code></li>\n<li>Cada passo/erro → <code>POST /worklog/:id {kind:&quot;progress&quot;|&quot;error&quot;}</code></li>\n<li>Mude código → commit + entrada de CHANGELOG</li>\n<li>Finalize → <code>POST /worklog/:id {kind:&quot;close&quot;, summary}</code></li>\n<li>Marque a task como feita → <code>GET /mind/task/:id/complete</code></li>\n</ol>\n<p>A próxima sessão — ou um agente irmão que pegar sua task — pode então reconstruir tudo: a lista de tasks diz <em>o quê</em>, o worklog diz <em>como</em>, as memórias dizem <em>por quê</em>.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}