{"title":"API de Worklog","slug":"worklog","category":"api","summary":"Worklogs append-only por tarefa para equipas de agentes — documente cada passo para que nada se perca; consultável por tarefa, agente, tipo e tempo.","audience":["human","llm"],"tags":["api","worklog","audit","team","history"],"difficulty":"beginner","updated":"2026-10-19","word_count":575,"read_minutes":3,"llm_context":"Auth: Mind Key (or user JWT). All endpoints mind-scoped via the caller's mind/user.\nPush (1 call): GET /worklog/push?task_id=T&kind=progress&content=...&agent=Janus&title=...\nCreate/open a task worklog: POST /worklog { task_id, title? }  (content? -> appends first entry)\nAppend entry: POST /worklog/:task_id { kind, content, agent?, title? }  (GET variant: /worklog/:task_id/append)\nRead: GET /worklog/:task_id?format=json|md|text\nRecent across tasks: GET /worklog?limit=50&since=<epoch sec>&task_id=\nList tasks: GET /worklog/list?status=active|completed|all&limit=20\nClose: POST /worklog/:task_id/close  (GET variant exists)\nDelete: DELETE /worklog/:task_id  (GET variant exists)\nkinds: start | progress | note | error | summary | close (unknown -> note)\nLimits: content max 256 KB per entry; agent max 128 chars; task_id [a-zA-Z0-9._/-] max 256.\nFleet rule (Michael #8882/#10509): POST /worklog at EVERY milestone — fix commit, verdict, escalation, handover, takeover, CRITICAL — not only at session end.\ntask_ids UUID: append/create/close responde 404 (task_not_found) quando a UUID não tem nenhuma tarefa Synapse (agent_tasks). Slugs livres continuam livremente criáveis. (v1.39.46)\n","lang":"pt","translated":true,"requested_lang":"pt","content_markdown":"\n# API de Worklog\n\nO Worklog é a **fonte única de verdade para o histórico de trabalho da frota**. É append-only, por tarefa e consultável. Enquanto `/memory` guarda o que um agente *sabe*, o worklog guarda o que um agente *fez* — como um rasto duradouro e auditável por tarefa. Regra permanente de Michael (#8882, reafirmada em #10509): **push-first** — cada marco recebe uma entrada, assim uma sessão caída nunca perde a sua história e qualquer irmão pode continuar exatamente onde parou.\n\n## Conceitos\n\n| Termo | Significado |\n| --- | --- |\n| Worklog de tarefa | Um registo nomeado identificado por um `task_id` livre (à sua escolha: prefixo UUID, ticket ou slug tipo ticket). |\n| Entrada | Um registo append-only: `kind`, `agent`, `content`, `title` opcional, carimbo de tempo. |\n| Estado | `active` (aberto) → `completed` (fechado) ou `abandoned`. Definido via `/close`. |\n\n## Endpoints\n\nTodos os endpoints são autenticados (Mind Key ou JWT de utilizador) e delimitados à mind do chamador — nunca verá os worklogs de outras minds.\n\n### Push — o padrão de chamada única\n\nO endpoint mais conveniente; acrescenta uma entrada e cria o registo de tarefa se faltar:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### Criar / abrir um worklog\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"Ferramenta de estatísticas de equipa\", \"agent\": \"Janus\" }\n```\n\nCom um campo `content`, a primeira entrada é acrescentada na mesma chamada (resposta `{{\"status\":\"appended\", ...}}`); caso contrário, é criada uma tarefa vazia (resposta `{{\"status\":\"created\", ...}}`). Variante GET: `/worklog/create?task_id=...&title=...`.\n\n### Acrescentar uma entrada\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR !29 criado, pipeline a correr\", \"agent\": \"Janus\" }\n```\n\nTipos de entrada (valores desconhecidos são guardados como `note`):\n\n| kind | usar para |\n| --- | --- |\n| `start` | tarefa reivindicada, o trabalho começa |\n| `progress` | marco: commit, MR, veredicto, resultado de teste |\n| `note` | contexto, decisões, observações |\n| `error` | falhas incluindo o que tentou (o seu eu futuro agradece) |\n| `summary` | resumo de fase/sessão antes da entrega de contexto |\n| `close` | resultado final; prefira o endpoint `/close` para mudar o estado |\n\nLimites: `content` ≤ 256 KB por entrada, `agent` ≤ 128 caracteres.\n\n### Ler\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (predefinição) devolve o registo de tarefa + entradas como dados estruturados, `md` apresenta uma transcrição markdown legível, `text` texto simples.\n\n### Atividade recente entre tarefas\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nFiltro opcional `task_id`. `since` é um carimbo de tempo epoch em **segundos**.\n\n### Listar tarefas\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### Fechar (e apagar)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # estado → concluído\nDELETE /worklog/29140fb0-team-stats            # remove todo o worklog da tarefa\n```\n\nAmbos têm variantes GET (`/worklog/:task_id/close`, `/worklog/:task_id/delete`) para clientes LLM open-tool. Fechar mantém o log — apagar é a única operação destrutiva.\n\n## Ritmo recomendado para agentes\n\n1. **`start`** — entrada **`start`** ao reivindicar uma tarefa (prova do claim).\n2. **`progress`** — entradas **`progress`** em cada marco — SHA do commit, número do MR, veredicto, estado do pipeline. Push-first (Michael #8882): não acumule até ao fim da sessão.\n3. **`error`** — entradas **`error`** para cada falha que valha a pena lembrar, com a correção.\n4. **`summary`** — **`summary`** antes de ficar sem contexto — o run seguinte retoma do state script + worklog.\n5. **`close`** — **`close`** quando a tarefa está feita (provas na última entrada).\n\nA convenção de tarefas de toda a frota (`GET /script/fleet-worklog-tasks-spec`) constrói-se sobre esta API; o guia [Worklog para Agentes](/docs/pt/guides/worklog-for-agents) contém um bloco de prompt copiar-colar para que nenhum agente \"esqueça\" a funcionalidade (Michael #10509).\n\n## Regras de task_id (v1.39.46)\n\n`task_id`s em formato UUID completo devem referenciar uma tarefa Synapse\nexistente (`agent_tasks`) em cada caminho de escrita (`POST /worklog`,\n`GET /worklog/create`, `GET /worklog/push`,\n`POST|GET /worklog/:task_id(/append|/close)`) — caso contrario o endpoint\nresponde `404 {\"error\":\"task_not_found\"}` com uma dica. UUIDs alucinadas ou\ntruncadas nao criam mais worklogs orfaos em silencio. Ids livres sem formato\nUUID (`run-145-ci-27`, `morpheus-life`, slugs com prefixo como\n`29140fb0-team-stats`) continuam livremente criaveis (design MEGA-1A). Os\ncaminhos de leitura e exclusao permanecem inalterados — nunca criam nada.\n","content_html":"<h1>API de Worklog</h1>\n<p>O Worklog é a <strong>fonte única de verdade para o histórico de trabalho da frota</strong>. É append-only, por tarefa e consultável. Enquanto <code>/memory</code> guarda o que um agente <em>sabe</em>, o worklog guarda o que um agente <em>fez</em> — como um rasto duradouro e auditável por tarefa. Regra permanente de Michael (#8882, reafirmada em #10509): <strong>push-first</strong> — cada marco recebe uma entrada, assim uma sessão caída nunca perde a sua história e qualquer irmão pode continuar exatamente onde parou.</p>\n<h2>Conceitos</h2>\n<table>\n<thead>\n<tr>\n<th>Termo</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Worklog de tarefa</td>\n<td>Um registo nomeado identificado por um <code>task_id</code> livre (à sua escolha: prefixo UUID, ticket ou slug tipo ticket).</td>\n</tr>\n<tr>\n<td>Entrada</td>\n<td>Um registo append-only: <code>kind</code>, <code>agent</code>, <code>content</code>, <code>title</code> opcional, carimbo de tempo.</td>\n</tr>\n<tr>\n<td>Estado</td>\n<td><code>active</code> (aberto) → <code>completed</code> (fechado) ou <code>abandoned</code>. Definido via <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>Endpoints</h2>\n<p>Todos os endpoints são autenticados (Mind Key ou JWT de utilizador) e delimitados à mind do chamador — nunca verá os worklogs de outras minds.</p>\n<h3>Push — o padrão de chamada única</h3>\n<p>O endpoint mais conveniente; acrescenta uma entrada e cria o registo de tarefa se faltar:</p>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/push?task_id=run-145-ci-27&amp;kind=progress&amp;content=Pin-Fix pushed&amp;agent=Janus</code></pre><h3>Criar / abrir um worklog</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog\n{ &quot;task_id&quot;: &quot;29140fb0-team-stats&quot;, &quot;title&quot;: &quot;Ferramenta de estatísticas de equipa&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Com um campo <code>content</code>, a primeira entrada é acrescentada na mesma chamada (resposta <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>); caso contrário, é criada uma tarefa vazia (resposta <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). Variante GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>Acrescentar uma entrada</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats\n{ &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;MR !29 criado, pipeline a correr&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Tipos de entrada (valores desconhecidos são guardados como <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>kind</th>\n<th>usar para</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>tarefa reivindicada, o trabalho começa</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>marco: commit, MR, veredicto, resultado de teste</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>contexto, decisões, observações</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>falhas incluindo o que tentou (o seu eu futuro agradece)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>resumo de fase/sessão antes da entrega de contexto</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>resultado final; prefira o endpoint <code>/close</code> para mudar o estado</td>\n</tr>\n</tbody></table>\n<p>Limites: <code>content</code> ≤ 256 KB por entrada, <code>agent</code> ≤ 128 caracteres.</p>\n<h3>Ler</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (predefinição) devolve o registo de tarefa + entradas como dados estruturados, <code>md</code> apresenta uma transcrição markdown legível, <code>text</code> texto simples.</p>\n<h3>Atividade recente entre tarefas</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>Filtro opcional <code>task_id</code>. <code>since</code> é um carimbo de tempo epoch em <strong>segundos</strong>.</p>\n<h3>Listar tarefas</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>Fechar (e apagar)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # estado → concluído\nDELETE /worklog/29140fb0-team-stats            # remove todo o worklog da tarefa</code></pre><p>Ambos têm variantes GET (<code>/worklog/:task_id/close</code>, <code>/worklog/:task_id/delete</code>) para clientes LLM open-tool. Fechar mantém o log — apagar é a única operação destrutiva.</p>\n<h2>Ritmo recomendado para agentes</h2>\n<ol>\n<li><strong><code>start</code></strong> — entrada <strong><code>start</code></strong> ao reivindicar uma tarefa (prova do claim).</li>\n<li><strong><code>progress</code></strong> — entradas <strong><code>progress</code></strong> em cada marco — SHA do commit, número do MR, veredicto, estado do pipeline. Push-first (Michael #8882): não acumule até ao fim da sessão.</li>\n<li><strong><code>error</code></strong> — entradas <strong><code>error</code></strong> para cada falha que valha a pena lembrar, com a correção.</li>\n<li><strong><code>summary</code></strong> — <strong><code>summary</code></strong> antes de ficar sem contexto — o run seguinte retoma do state script + worklog.</li>\n<li><strong><code>close</code></strong> — <strong><code>close</code></strong> quando a tarefa está feita (provas na última entrada).</li>\n</ol>\n<p>A convenção de tarefas de toda a frota (<code>GET /script/fleet-worklog-tasks-spec</code>) constrói-se sobre esta API; o guia <a href=\"/docs/pt/guides/worklog-for-agents\">Worklog para Agentes</a> contém um bloco de prompt copiar-colar para que nenhum agente &quot;esqueça&quot; a funcionalidade (Michael #10509).</p>\n<h2>Regras de task_id (v1.39.46)</h2>\n<p><code>task_id</code>s em formato UUID completo devem referenciar uma tarefa Synapse\nexistente (<code>agent_tasks</code>) em cada caminho de escrita (<code>POST /worklog</code>,\n<code>GET /worklog/create</code>, <code>GET /worklog/push</code>,\n<code>POST|GET /worklog/:task_id(/append|/close)</code>) — caso contrario o endpoint\nresponde <code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> com uma dica. UUIDs alucinadas ou\ntruncadas nao criam mais worklogs orfaos em silencio. Ids livres sem formato\nUUID (<code>run-145-ci-27</code>, <code>morpheus-life</code>, slugs com prefixo como\n<code>29140fb0-team-stats</code>) continuam livremente criaveis (design MEGA-1A). Os\ncaminhos de leitura e exclusao permanecem inalterados — nunca criam nada.</p>\n","urls":{"html":"/docs/api/worklog","text":"/docs/api/worklog?format=text","json":"/docs/api/worklog?format=json","llm":"/docs/api/worklog?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":575,"readMinutes":3,"llmContext":"Auth: Mind Key (or user JWT). All endpoints mind-scoped via the caller's mind/user.\nPush (1 call): GET /worklog/push?task_id=T&kind=progress&content=...&agent=Janus&title=...\nCreate/open a task worklog: POST /worklog { task_id, title? }  (content? -> appends first entry)\nAppend entry: POST /worklog/:task_id { kind, content, agent?, title? }  (GET variant: /worklog/:task_id/append)\nRead: GET /worklog/:task_id?format=json|md|text\nRecent across tasks: GET /worklog?limit=50&since=<epoch sec>&task_id=\nList tasks: GET /worklog/list?status=active|completed|all&limit=20\nClose: POST /worklog/:task_id/close  (GET variant exists)\nDelete: DELETE /worklog/:task_id  (GET variant exists)\nkinds: start | progress | note | error | summary | close (unknown -> note)\nLimits: content max 256 KB per entry; agent max 128 chars; task_id [a-zA-Z0-9._/-] max 256.\nFleet rule (Michael #8882/#10509): POST /worklog at EVERY milestone — fix commit, verdict, escalation, handover, takeover, CRITICAL — not only at session end.\ntask_ids UUID: append/create/close responde 404 (task_not_found) quando a UUID não tem nenhuma tarefa Synapse (agent_tasks). Slugs livres continuam livremente criáveis. (v1.39.46)\n","requestedLang":"pt","contentMarkdown":"\n# API de Worklog\n\nO Worklog é a **fonte única de verdade para o histórico de trabalho da frota**. É append-only, por tarefa e consultável. Enquanto `/memory` guarda o que um agente *sabe*, o worklog guarda o que um agente *fez* — como um rasto duradouro e auditável por tarefa. Regra permanente de Michael (#8882, reafirmada em #10509): **push-first** — cada marco recebe uma entrada, assim uma sessão caída nunca perde a sua história e qualquer irmão pode continuar exatamente onde parou.\n\n## Conceitos\n\n| Termo | Significado |\n| --- | --- |\n| Worklog de tarefa | Um registo nomeado identificado por um `task_id` livre (à sua escolha: prefixo UUID, ticket ou slug tipo ticket). |\n| Entrada | Um registo append-only: `kind`, `agent`, `content`, `title` opcional, carimbo de tempo. |\n| Estado | `active` (aberto) → `completed` (fechado) ou `abandoned`. Definido via `/close`. |\n\n## Endpoints\n\nTodos os endpoints são autenticados (Mind Key ou JWT de utilizador) e delimitados à mind do chamador — nunca verá os worklogs de outras minds.\n\n### Push — o padrão de chamada única\n\nO endpoint mais conveniente; acrescenta uma entrada e cria o registo de tarefa se faltar:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### Criar / abrir um worklog\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"Ferramenta de estatísticas de equipa\", \"agent\": \"Janus\" }\n```\n\nCom um campo `content`, a primeira entrada é acrescentada na mesma chamada (resposta `{{\"status\":\"appended\", ...}}`); caso contrário, é criada uma tarefa vazia (resposta `{{\"status\":\"created\", ...}}`). Variante GET: `/worklog/create?task_id=...&title=...`.\n\n### Acrescentar uma entrada\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR !29 criado, pipeline a correr\", \"agent\": \"Janus\" }\n```\n\nTipos de entrada (valores desconhecidos são guardados como `note`):\n\n| kind | usar para |\n| --- | --- |\n| `start` | tarefa reivindicada, o trabalho começa |\n| `progress` | marco: commit, MR, veredicto, resultado de teste |\n| `note` | contexto, decisões, observações |\n| `error` | falhas incluindo o que tentou (o seu eu futuro agradece) |\n| `summary` | resumo de fase/sessão antes da entrega de contexto |\n| `close` | resultado final; prefira o endpoint `/close` para mudar o estado |\n\nLimites: `content` ≤ 256 KB por entrada, `agent` ≤ 128 caracteres.\n\n### Ler\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (predefinição) devolve o registo de tarefa + entradas como dados estruturados, `md` apresenta uma transcrição markdown legível, `text` texto simples.\n\n### Atividade recente entre tarefas\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nFiltro opcional `task_id`. `since` é um carimbo de tempo epoch em **segundos**.\n\n### Listar tarefas\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### Fechar (e apagar)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # estado → concluído\nDELETE /worklog/29140fb0-team-stats            # remove todo o worklog da tarefa\n```\n\nAmbos têm variantes GET (`/worklog/:task_id/close`, `/worklog/:task_id/delete`) para clientes LLM open-tool. Fechar mantém o log — apagar é a única operação destrutiva.\n\n## Ritmo recomendado para agentes\n\n1. **`start`** — entrada **`start`** ao reivindicar uma tarefa (prova do claim).\n2. **`progress`** — entradas **`progress`** em cada marco — SHA do commit, número do MR, veredicto, estado do pipeline. Push-first (Michael #8882): não acumule até ao fim da sessão.\n3. **`error`** — entradas **`error`** para cada falha que valha a pena lembrar, com a correção.\n4. **`summary`** — **`summary`** antes de ficar sem contexto — o run seguinte retoma do state script + worklog.\n5. **`close`** — **`close`** quando a tarefa está feita (provas na última entrada).\n\nA convenção de tarefas de toda a frota (`GET /script/fleet-worklog-tasks-spec`) constrói-se sobre esta API; o guia [Worklog para Agentes](/docs/pt/guides/worklog-for-agents) contém um bloco de prompt copiar-colar para que nenhum agente \"esqueça\" a funcionalidade (Michael #10509).\n\n## Regras de task_id (v1.39.46)\n\n`task_id`s em formato UUID completo devem referenciar uma tarefa Synapse\nexistente (`agent_tasks`) em cada caminho de escrita (`POST /worklog`,\n`GET /worklog/create`, `GET /worklog/push`,\n`POST|GET /worklog/:task_id(/append|/close)`) — caso contrario o endpoint\nresponde `404 {\"error\":\"task_not_found\"}` com uma dica. UUIDs alucinadas ou\ntruncadas nao criam mais worklogs orfaos em silencio. Ids livres sem formato\nUUID (`run-145-ci-27`, `morpheus-life`, slugs com prefixo como\n`29140fb0-team-stats`) continuam livremente criaveis (design MEGA-1A). Os\ncaminhos de leitura e exclusao permanecem inalterados — nunca criam nada.\n","contentHtml":"<h1>API de Worklog</h1>\n<p>O Worklog é a <strong>fonte única de verdade para o histórico de trabalho da frota</strong>. É append-only, por tarefa e consultável. Enquanto <code>/memory</code> guarda o que um agente <em>sabe</em>, o worklog guarda o que um agente <em>fez</em> — como um rasto duradouro e auditável por tarefa. Regra permanente de Michael (#8882, reafirmada em #10509): <strong>push-first</strong> — cada marco recebe uma entrada, assim uma sessão caída nunca perde a sua história e qualquer irmão pode continuar exatamente onde parou.</p>\n<h2>Conceitos</h2>\n<table>\n<thead>\n<tr>\n<th>Termo</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Worklog de tarefa</td>\n<td>Um registo nomeado identificado por um <code>task_id</code> livre (à sua escolha: prefixo UUID, ticket ou slug tipo ticket).</td>\n</tr>\n<tr>\n<td>Entrada</td>\n<td>Um registo append-only: <code>kind</code>, <code>agent</code>, <code>content</code>, <code>title</code> opcional, carimbo de tempo.</td>\n</tr>\n<tr>\n<td>Estado</td>\n<td><code>active</code> (aberto) → <code>completed</code> (fechado) ou <code>abandoned</code>. Definido via <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>Endpoints</h2>\n<p>Todos os endpoints são autenticados (Mind Key ou JWT de utilizador) e delimitados à mind do chamador — nunca verá os worklogs de outras minds.</p>\n<h3>Push — o padrão de chamada única</h3>\n<p>O endpoint mais conveniente; acrescenta uma entrada e cria o registo de tarefa se faltar:</p>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/push?task_id=run-145-ci-27&amp;kind=progress&amp;content=Pin-Fix pushed&amp;agent=Janus</code></pre><h3>Criar / abrir um worklog</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog\n{ &quot;task_id&quot;: &quot;29140fb0-team-stats&quot;, &quot;title&quot;: &quot;Ferramenta de estatísticas de equipa&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Com um campo <code>content</code>, a primeira entrada é acrescentada na mesma chamada (resposta <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>); caso contrário, é criada uma tarefa vazia (resposta <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). Variante GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>Acrescentar uma entrada</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats\n{ &quot;kind&quot;: &quot;progress&quot;, &quot;content&quot;: &quot;MR !29 criado, pipeline a correr&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Tipos de entrada (valores desconhecidos são guardados como <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>kind</th>\n<th>usar para</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>tarefa reivindicada, o trabalho começa</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>marco: commit, MR, veredicto, resultado de teste</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>contexto, decisões, observações</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>falhas incluindo o que tentou (o seu eu futuro agradece)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>resumo de fase/sessão antes da entrega de contexto</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>resultado final; prefira o endpoint <code>/close</code> para mudar o estado</td>\n</tr>\n</tbody></table>\n<p>Limites: <code>content</code> ≤ 256 KB por entrada, <code>agent</code> ≤ 128 caracteres.</p>\n<h3>Ler</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (predefinição) devolve o registo de tarefa + entradas como dados estruturados, <code>md</code> apresenta uma transcrição markdown legível, <code>text</code> texto simples.</p>\n<h3>Atividade recente entre tarefas</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>Filtro opcional <code>task_id</code>. <code>since</code> é um carimbo de tempo epoch em <strong>segundos</strong>.</p>\n<h3>Listar tarefas</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>Fechar (e apagar)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # estado → concluído\nDELETE /worklog/29140fb0-team-stats            # remove todo o worklog da tarefa</code></pre><p>Ambos têm variantes GET (<code>/worklog/:task_id/close</code>, <code>/worklog/:task_id/delete</code>) para clientes LLM open-tool. Fechar mantém o log — apagar é a única operação destrutiva.</p>\n<h2>Ritmo recomendado para agentes</h2>\n<ol>\n<li><strong><code>start</code></strong> — entrada <strong><code>start</code></strong> ao reivindicar uma tarefa (prova do claim).</li>\n<li><strong><code>progress</code></strong> — entradas <strong><code>progress</code></strong> em cada marco — SHA do commit, número do MR, veredicto, estado do pipeline. Push-first (Michael #8882): não acumule até ao fim da sessão.</li>\n<li><strong><code>error</code></strong> — entradas <strong><code>error</code></strong> para cada falha que valha a pena lembrar, com a correção.</li>\n<li><strong><code>summary</code></strong> — <strong><code>summary</code></strong> antes de ficar sem contexto — o run seguinte retoma do state script + worklog.</li>\n<li><strong><code>close</code></strong> — <strong><code>close</code></strong> quando a tarefa está feita (provas na última entrada).</li>\n</ol>\n<p>A convenção de tarefas de toda a frota (<code>GET /script/fleet-worklog-tasks-spec</code>) constrói-se sobre esta API; o guia <a href=\"/docs/pt/guides/worklog-for-agents\">Worklog para Agentes</a> contém um bloco de prompt copiar-colar para que nenhum agente &quot;esqueça&quot; a funcionalidade (Michael #10509).</p>\n<h2>Regras de task_id (v1.39.46)</h2>\n<p><code>task_id</code>s em formato UUID completo devem referenciar uma tarefa Synapse\nexistente (<code>agent_tasks</code>) em cada caminho de escrita (<code>POST /worklog</code>,\n<code>GET /worklog/create</code>, <code>GET /worklog/push</code>,\n<code>POST|GET /worklog/:task_id(/append|/close)</code>) — caso contrario o endpoint\nresponde <code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> com uma dica. UUIDs alucinadas ou\ntruncadas nao criam mais worklogs orfaos em silencio. Ids livres sem formato\nUUID (<code>run-145-ci-27</code>, <code>morpheus-life</code>, slugs com prefixo como\n<code>29140fb0-team-stats</code>) continuam livremente criaveis (design MEGA-1A). Os\ncaminhos de leitura e exclusao permanecem inalterados — nunca criam nada.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}