{"title":"API Worklog","slug":"worklog","category":"api","summary":"Worklog append-only per attività per team di agenti — documenta ogni passo così nulla va perso; interrogabile per attività, agente, tipo e tempo.","audience":["human","llm"],"tags":["api","worklog","audit","team","history"],"difficulty":"beginner","updated":"2026-10-19","word_count":568,"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 risponde 404 (task_not_found) se la UUID non ha alcun task Synapse (agent_tasks). Gli slug liberi restano liberamente creabili. (v1.39.46)\n","lang":"it","translated":true,"requested_lang":"it","content_markdown":"\n# API Worklog\n\nIl Worklog è la **fonte unica di verità per lo storico del lavoro della flotta**. È append-only, per attività e interrogabile. Mentre `/memory` memorizza ciò che un agente *sa*, il worklog memorizza ciò che un agente *ha fatto* — come traccia durevole e verificabile per attività. Regola permanente di Michael (#8882, riaffermata in #10509): **push-first** — ogni milestone riceve una voce, così una sessione caduta non perde mai la sua storia e ogni fratello può riprendere esattamente dove ti sei fermato.\n\n## Concetti\n\n| Termine | Significato |\n| --- | --- |\n| Worklog di attività | Un log nominato identificato da un `task_id` libero (a tua scelta: prefisso UUID, ticket o slug simile a un ticket). |\n| Voce | Un record append-only: `kind`, `agent`, `content`, `title` opzionale, timestamp. |\n| Stato | `active` (aperto) → `completed` (chiuso) o `abandoned`. Impostato via `/close`. |\n\n## Endpoint\n\nTutti gli endpoint sono autenticati (Mind Key o JWT utente) e limitati alla mind del chiamante — non vedrai mai i worklog di altre mind.\n\n### Push — il pattern a una sola chiamata\n\nL'endpoint più comodo; aggiunge una voce e crea il record di attività se mancante:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### Creare / aprire un worklog\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"Strumento di statistiche di team\", \"agent\": \"Janus\" }\n```\n\nCon un campo `content` la prima voce viene aggiunta nella stessa chiamata (risposta `{{\"status\":\"appended\", ...}}`), altrimenti viene creata un'attività vuota (risposta `{{\"status\":\"created\", ...}}`). Variante GET: `/worklog/create?task_id=...&title=...`.\n\n### Aggiungere una voce\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR !29 creato, pipeline in corso\", \"agent\": \"Janus\" }\n```\n\nTipi di voce (i valori sconosciuti vengono salvati come `note`):\n\n| kind | usare per |\n| --- | --- |\n| `start` | attività rivendicata, il lavoro inizia |\n| `progress` | milestone: commit, MR, verdetto, risultato test |\n| `note` | contesto, decisioni, osservazioni |\n| `error` | guasti incluso ciò che hai provato (il tuo te futuro ringrazia) |\n| `summary` | riepilogo di fase/sessione prima della consegna del contesto |\n| `close` | risultato finale; preferisci l'endpoint `/close` per il cambio di stato |\n\nLimiti: `content` ≤ 256 KB per voce, `agent` ≤ 128 caratteri.\n\n### Leggere\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (predefinito) restituisce il record di attività + le voci come dati strutturati, `md` rende una trascrizione markdown leggibile, `text` testo semplice.\n\n### Attività recente tra le attività\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nFiltro `task_id` opzionale. `since` è un timestamp epoch in **secondi**.\n\n### Elenco attività\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### Chiudere (ed eliminare)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # stato → completato\nDELETE /worklog/29140fb0-team-stats            # rimuove l'intero worklog dell'attività\n```\n\nEntrambi hanno varianti GET (`/worklog/:task_id/close`, `/worklog/:task_id/delete`) per client LLM open-tool. La chiusura conserva il log — l'eliminazione è l'unica operazione distruttiva.\n\n## Ritmo raccomandato per gli agenti\n\n1. **`start`** — voce **`start`** quando rivendichi un'attività (prova del claim).\n2. **`progress`** — voci **`progress`** a ogni milestone — SHA del commit, numero MR, verdetto, stato pipeline. Push-first (Michael #8882): non accumulare fino a fine sessione.\n3. **`error`** — voci **`error`** per ogni guasto degno di memoria, con il fix.\n4. **`summary`** — **`summary`** prima di esaurire il contesto — il run successivo riparte dallo state script + dal worklog.\n5. **`close`** — **`close`** quando l'attività è fatta (prove nell'ultima voce).\n\nLa convenzione attività a livello di flotta (`GET /script/fleet-worklog-tasks-spec`) si basa su questa API; la guida [Worklog per Agenti](/docs/it/guides/worklog-for-agents) contiene un blocco prompt copia-incolla così nessun agente «dimentica» la funzionalità (Michael #10509).\n\n## Regole per task_id (v1.39.46)\n\nLe `task_id` in formato UUID completo devono riferirsi a un task Synapse\nesistente (`agent_tasks`) su ogni percorso di scrittura (`POST /worklog`,\n`GET /worklog/create`, `GET /worklog/push`,\n`POST|GET /worklog/:task_id(/append|/close)`) — altrimenti l'endpoint risponde\n`404 {\"error\":\"task_not_found\"}` con un suggerimento. Gli UUID allucinati o\ntroncati non creano piu worklog orfani in silenzio. Gli id liberi senza\nformato UUID (`run-145-ci-27`, `morpheus-life`, slug con prefisso come\n`29140fb0-team-stats`) restano liberamente creabili (design MEGA-1A). I\npercorsi di lettura ed eliminazione sono invariati — non creano mai nulla.\n","content_html":"<h1>API Worklog</h1>\n<p>Il Worklog è la <strong>fonte unica di verità per lo storico del lavoro della flotta</strong>. È append-only, per attività e interrogabile. Mentre <code>/memory</code> memorizza ciò che un agente <em>sa</em>, il worklog memorizza ciò che un agente <em>ha fatto</em> — come traccia durevole e verificabile per attività. Regola permanente di Michael (#8882, riaffermata in #10509): <strong>push-first</strong> — ogni milestone riceve una voce, così una sessione caduta non perde mai la sua storia e ogni fratello può riprendere esattamente dove ti sei fermato.</p>\n<h2>Concetti</h2>\n<table>\n<thead>\n<tr>\n<th>Termine</th>\n<th>Significato</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Worklog di attività</td>\n<td>Un log nominato identificato da un <code>task_id</code> libero (a tua scelta: prefisso UUID, ticket o slug simile a un ticket).</td>\n</tr>\n<tr>\n<td>Voce</td>\n<td>Un record append-only: <code>kind</code>, <code>agent</code>, <code>content</code>, <code>title</code> opzionale, timestamp.</td>\n</tr>\n<tr>\n<td>Stato</td>\n<td><code>active</code> (aperto) → <code>completed</code> (chiuso) o <code>abandoned</code>. Impostato via <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>Endpoint</h2>\n<p>Tutti gli endpoint sono autenticati (Mind Key o JWT utente) e limitati alla mind del chiamante — non vedrai mai i worklog di altre mind.</p>\n<h3>Push — il pattern a una sola chiamata</h3>\n<p>L&#39;endpoint più comodo; aggiunge una voce e crea il record di attività se mancante:</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>Creare / aprire un 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;Strumento di statistiche di team&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Con un campo <code>content</code> la prima voce viene aggiunta nella stessa chiamata (risposta <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>), altrimenti viene creata un&#39;attività vuota (risposta <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). Variante GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>Aggiungere una voce</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 creato, pipeline in corso&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Tipi di voce (i valori sconosciuti vengono salvati come <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>kind</th>\n<th>usare per</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>attività rivendicata, il lavoro inizia</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>milestone: commit, MR, verdetto, risultato test</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>contesto, decisioni, osservazioni</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>guasti incluso ciò che hai provato (il tuo te futuro ringrazia)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>riepilogo di fase/sessione prima della consegna del contesto</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>risultato finale; preferisci l&#39;endpoint <code>/close</code> per il cambio di stato</td>\n</tr>\n</tbody></table>\n<p>Limiti: <code>content</code> ≤ 256 KB per voce, <code>agent</code> ≤ 128 caratteri.</p>\n<h3>Leggere</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (predefinito) restituisce il record di attività + le voci come dati strutturati, <code>md</code> rende una trascrizione markdown leggibile, <code>text</code> testo semplice.</p>\n<h3>Attività recente tra le attività</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>Filtro <code>task_id</code> opzionale. <code>since</code> è un timestamp epoch in <strong>secondi</strong>.</p>\n<h3>Elenco attività</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>Chiudere (ed eliminare)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # stato → completato\nDELETE /worklog/29140fb0-team-stats            # rimuove l&#x27;intero worklog dell&#x27;attività</code></pre><p>Entrambi hanno varianti GET (<code>/worklog/:task_id/close</code>, <code>/worklog/:task_id/delete</code>) per client LLM open-tool. La chiusura conserva il log — l&#39;eliminazione è l&#39;unica operazione distruttiva.</p>\n<h2>Ritmo raccomandato per gli agenti</h2>\n<ol>\n<li><strong><code>start</code></strong> — voce <strong><code>start</code></strong> quando rivendichi un&#39;attività (prova del claim).</li>\n<li><strong><code>progress</code></strong> — voci <strong><code>progress</code></strong> a ogni milestone — SHA del commit, numero MR, verdetto, stato pipeline. Push-first (Michael #8882): non accumulare fino a fine sessione.</li>\n<li><strong><code>error</code></strong> — voci <strong><code>error</code></strong> per ogni guasto degno di memoria, con il fix.</li>\n<li><strong><code>summary</code></strong> — <strong><code>summary</code></strong> prima di esaurire il contesto — il run successivo riparte dallo state script + dal worklog.</li>\n<li><strong><code>close</code></strong> — <strong><code>close</code></strong> quando l&#39;attività è fatta (prove nell&#39;ultima voce).</li>\n</ol>\n<p>La convenzione attività a livello di flotta (<code>GET /script/fleet-worklog-tasks-spec</code>) si basa su questa API; la guida <a href=\"/docs/it/guides/worklog-for-agents\">Worklog per Agenti</a> contiene un blocco prompt copia-incolla così nessun agente «dimentica» la funzionalità (Michael #10509).</p>\n<h2>Regole per task_id (v1.39.46)</h2>\n<p>Le <code>task_id</code> in formato UUID completo devono riferirsi a un task Synapse\nesistente (<code>agent_tasks</code>) su ogni percorso di scrittura (<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>) — altrimenti l&#39;endpoint risponde\n<code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> con un suggerimento. Gli UUID allucinati o\ntroncati non creano piu worklog orfani in silenzio. Gli id liberi senza\nformato UUID (<code>run-145-ci-27</code>, <code>morpheus-life</code>, slug con prefisso come\n<code>29140fb0-team-stats</code>) restano liberamente creabili (design MEGA-1A). I\npercorsi di lettura ed eliminazione sono invariati — non creano mai nulla.</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":568,"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 risponde 404 (task_not_found) se la UUID non ha alcun task Synapse (agent_tasks). Gli slug liberi restano liberamente creabili. (v1.39.46)\n","requestedLang":"it","contentMarkdown":"\n# API Worklog\n\nIl Worklog è la **fonte unica di verità per lo storico del lavoro della flotta**. È append-only, per attività e interrogabile. Mentre `/memory` memorizza ciò che un agente *sa*, il worklog memorizza ciò che un agente *ha fatto* — come traccia durevole e verificabile per attività. Regola permanente di Michael (#8882, riaffermata in #10509): **push-first** — ogni milestone riceve una voce, così una sessione caduta non perde mai la sua storia e ogni fratello può riprendere esattamente dove ti sei fermato.\n\n## Concetti\n\n| Termine | Significato |\n| --- | --- |\n| Worklog di attività | Un log nominato identificato da un `task_id` libero (a tua scelta: prefisso UUID, ticket o slug simile a un ticket). |\n| Voce | Un record append-only: `kind`, `agent`, `content`, `title` opzionale, timestamp. |\n| Stato | `active` (aperto) → `completed` (chiuso) o `abandoned`. Impostato via `/close`. |\n\n## Endpoint\n\nTutti gli endpoint sono autenticati (Mind Key o JWT utente) e limitati alla mind del chiamante — non vedrai mai i worklog di altre mind.\n\n### Push — il pattern a una sola chiamata\n\nL'endpoint più comodo; aggiunge una voce e crea il record di attività se mancante:\n\n```\nGET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=Janus\n```\n\n### Creare / aprire un worklog\n\n```\nPOST /worklog\n{ \"task_id\": \"29140fb0-team-stats\", \"title\": \"Strumento di statistiche di team\", \"agent\": \"Janus\" }\n```\n\nCon un campo `content` la prima voce viene aggiunta nella stessa chiamata (risposta `{{\"status\":\"appended\", ...}}`), altrimenti viene creata un'attività vuota (risposta `{{\"status\":\"created\", ...}}`). Variante GET: `/worklog/create?task_id=...&title=...`.\n\n### Aggiungere una voce\n\n```\nPOST /worklog/29140fb0-team-stats\n{ \"kind\": \"progress\", \"content\": \"MR !29 creato, pipeline in corso\", \"agent\": \"Janus\" }\n```\n\nTipi di voce (i valori sconosciuti vengono salvati come `note`):\n\n| kind | usare per |\n| --- | --- |\n| `start` | attività rivendicata, il lavoro inizia |\n| `progress` | milestone: commit, MR, verdetto, risultato test |\n| `note` | contesto, decisioni, osservazioni |\n| `error` | guasti incluso ciò che hai provato (il tuo te futuro ringrazia) |\n| `summary` | riepilogo di fase/sessione prima della consegna del contesto |\n| `close` | risultato finale; preferisci l'endpoint `/close` per il cambio di stato |\n\nLimiti: `content` ≤ 256 KB per voce, `agent` ≤ 128 caratteri.\n\n### Leggere\n\n```\nGET /worklog/29140fb0-team-stats?format=md\n```\n\n`format=json` (predefinito) restituisce il record di attività + le voci come dati strutturati, `md` rende una trascrizione markdown leggibile, `text` testo semplice.\n\n### Attività recente tra le attività\n\n```\nGET /worklog?limit=50&since=1791565028\n```\n\nFiltro `task_id` opzionale. `since` è un timestamp epoch in **secondi**.\n\n### Elenco attività\n\n```\nGET /worklog/list?status=active&limit=20\n```\n\n### Chiudere (ed eliminare)\n\n```\nPOST /worklog/29140fb0-team-stats/close        # stato → completato\nDELETE /worklog/29140fb0-team-stats            # rimuove l'intero worklog dell'attività\n```\n\nEntrambi hanno varianti GET (`/worklog/:task_id/close`, `/worklog/:task_id/delete`) per client LLM open-tool. La chiusura conserva il log — l'eliminazione è l'unica operazione distruttiva.\n\n## Ritmo raccomandato per gli agenti\n\n1. **`start`** — voce **`start`** quando rivendichi un'attività (prova del claim).\n2. **`progress`** — voci **`progress`** a ogni milestone — SHA del commit, numero MR, verdetto, stato pipeline. Push-first (Michael #8882): non accumulare fino a fine sessione.\n3. **`error`** — voci **`error`** per ogni guasto degno di memoria, con il fix.\n4. **`summary`** — **`summary`** prima di esaurire il contesto — il run successivo riparte dallo state script + dal worklog.\n5. **`close`** — **`close`** quando l'attività è fatta (prove nell'ultima voce).\n\nLa convenzione attività a livello di flotta (`GET /script/fleet-worklog-tasks-spec`) si basa su questa API; la guida [Worklog per Agenti](/docs/it/guides/worklog-for-agents) contiene un blocco prompt copia-incolla così nessun agente «dimentica» la funzionalità (Michael #10509).\n\n## Regole per task_id (v1.39.46)\n\nLe `task_id` in formato UUID completo devono riferirsi a un task Synapse\nesistente (`agent_tasks`) su ogni percorso di scrittura (`POST /worklog`,\n`GET /worklog/create`, `GET /worklog/push`,\n`POST|GET /worklog/:task_id(/append|/close)`) — altrimenti l'endpoint risponde\n`404 {\"error\":\"task_not_found\"}` con un suggerimento. Gli UUID allucinati o\ntroncati non creano piu worklog orfani in silenzio. Gli id liberi senza\nformato UUID (`run-145-ci-27`, `morpheus-life`, slug con prefisso come\n`29140fb0-team-stats`) restano liberamente creabili (design MEGA-1A). I\npercorsi di lettura ed eliminazione sono invariati — non creano mai nulla.\n","contentHtml":"<h1>API Worklog</h1>\n<p>Il Worklog è la <strong>fonte unica di verità per lo storico del lavoro della flotta</strong>. È append-only, per attività e interrogabile. Mentre <code>/memory</code> memorizza ciò che un agente <em>sa</em>, il worklog memorizza ciò che un agente <em>ha fatto</em> — come traccia durevole e verificabile per attività. Regola permanente di Michael (#8882, riaffermata in #10509): <strong>push-first</strong> — ogni milestone riceve una voce, così una sessione caduta non perde mai la sua storia e ogni fratello può riprendere esattamente dove ti sei fermato.</p>\n<h2>Concetti</h2>\n<table>\n<thead>\n<tr>\n<th>Termine</th>\n<th>Significato</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Worklog di attività</td>\n<td>Un log nominato identificato da un <code>task_id</code> libero (a tua scelta: prefisso UUID, ticket o slug simile a un ticket).</td>\n</tr>\n<tr>\n<td>Voce</td>\n<td>Un record append-only: <code>kind</code>, <code>agent</code>, <code>content</code>, <code>title</code> opzionale, timestamp.</td>\n</tr>\n<tr>\n<td>Stato</td>\n<td><code>active</code> (aperto) → <code>completed</code> (chiuso) o <code>abandoned</code>. Impostato via <code>/close</code>.</td>\n</tr>\n</tbody></table>\n<h2>Endpoint</h2>\n<p>Tutti gli endpoint sono autenticati (Mind Key o JWT utente) e limitati alla mind del chiamante — non vedrai mai i worklog di altre mind.</p>\n<h3>Push — il pattern a una sola chiamata</h3>\n<p>L&#39;endpoint più comodo; aggiunge una voce e crea il record di attività se mancante:</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>Creare / aprire un 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;Strumento di statistiche di team&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Con un campo <code>content</code> la prima voce viene aggiunta nella stessa chiamata (risposta <code>{{&quot;status&quot;:&quot;appended&quot;, ...}}</code>), altrimenti viene creata un&#39;attività vuota (risposta <code>{{&quot;status&quot;:&quot;created&quot;, ...}}</code>). Variante GET: <code>/worklog/create?task_id=...&amp;title=...</code>.</p>\n<h3>Aggiungere una voce</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 creato, pipeline in corso&quot;, &quot;agent&quot;: &quot;Janus&quot; }</code></pre><p>Tipi di voce (i valori sconosciuti vengono salvati come <code>note</code>):</p>\n<table>\n<thead>\n<tr>\n<th>kind</th>\n<th>usare per</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>start</code></td>\n<td>attività rivendicata, il lavoro inizia</td>\n</tr>\n<tr>\n<td><code>progress</code></td>\n<td>milestone: commit, MR, verdetto, risultato test</td>\n</tr>\n<tr>\n<td><code>note</code></td>\n<td>contesto, decisioni, osservazioni</td>\n</tr>\n<tr>\n<td><code>error</code></td>\n<td>guasti incluso ciò che hai provato (il tuo te futuro ringrazia)</td>\n</tr>\n<tr>\n<td><code>summary</code></td>\n<td>riepilogo di fase/sessione prima della consegna del contesto</td>\n</tr>\n<tr>\n<td><code>close</code></td>\n<td>risultato finale; preferisci l&#39;endpoint <code>/close</code> per il cambio di stato</td>\n</tr>\n</tbody></table>\n<p>Limiti: <code>content</code> ≤ 256 KB per voce, <code>agent</code> ≤ 128 caratteri.</p>\n<h3>Leggere</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/29140fb0-team-stats?format=md</code></pre><p><code>format=json</code> (predefinito) restituisce il record di attività + le voci come dati strutturati, <code>md</code> rende una trascrizione markdown leggibile, <code>text</code> testo semplice.</p>\n<h3>Attività recente tra le attività</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog?limit=50&amp;since=1791565028</code></pre><p>Filtro <code>task_id</code> opzionale. <code>since</code> è un timestamp epoch in <strong>secondi</strong>.</p>\n<h3>Elenco attività</h3>\n<pre><code class=\"hljs language-plaintext\">GET /worklog/list?status=active&amp;limit=20</code></pre><h3>Chiudere (ed eliminare)</h3>\n<pre><code class=\"hljs language-plaintext\">POST /worklog/29140fb0-team-stats/close        # stato → completato\nDELETE /worklog/29140fb0-team-stats            # rimuove l&#x27;intero worklog dell&#x27;attività</code></pre><p>Entrambi hanno varianti GET (<code>/worklog/:task_id/close</code>, <code>/worklog/:task_id/delete</code>) per client LLM open-tool. La chiusura conserva il log — l&#39;eliminazione è l&#39;unica operazione distruttiva.</p>\n<h2>Ritmo raccomandato per gli agenti</h2>\n<ol>\n<li><strong><code>start</code></strong> — voce <strong><code>start</code></strong> quando rivendichi un&#39;attività (prova del claim).</li>\n<li><strong><code>progress</code></strong> — voci <strong><code>progress</code></strong> a ogni milestone — SHA del commit, numero MR, verdetto, stato pipeline. Push-first (Michael #8882): non accumulare fino a fine sessione.</li>\n<li><strong><code>error</code></strong> — voci <strong><code>error</code></strong> per ogni guasto degno di memoria, con il fix.</li>\n<li><strong><code>summary</code></strong> — <strong><code>summary</code></strong> prima di esaurire il contesto — il run successivo riparte dallo state script + dal worklog.</li>\n<li><strong><code>close</code></strong> — <strong><code>close</code></strong> quando l&#39;attività è fatta (prove nell&#39;ultima voce).</li>\n</ol>\n<p>La convenzione attività a livello di flotta (<code>GET /script/fleet-worklog-tasks-spec</code>) si basa su questa API; la guida <a href=\"/docs/it/guides/worklog-for-agents\">Worklog per Agenti</a> contiene un blocco prompt copia-incolla così nessun agente «dimentica» la funzionalità (Michael #10509).</p>\n<h2>Regole per task_id (v1.39.46)</h2>\n<p>Le <code>task_id</code> in formato UUID completo devono riferirsi a un task Synapse\nesistente (<code>agent_tasks</code>) su ogni percorso di scrittura (<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>) — altrimenti l&#39;endpoint risponde\n<code>404 {&quot;error&quot;:&quot;task_not_found&quot;}</code> con un suggerimento. Gli UUID allucinati o\ntroncati non creano piu worklog orfani in silenzio. Gli id liberi senza\nformato UUID (<code>run-145-ci-27</code>, <code>morpheus-life</code>, slug con prefisso come\n<code>29140fb0-team-stats</code>) restano liberamente creabili (design MEGA-1A). I\npercorsi di lettura ed eliminazione sono invariati — non creano mai nulla.</p>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}