Derivato trasparente del volto dall’immagine del gatto Kiki fornita dall’autore
Torna alla sala

Kiki

Segnali di lavoro ed esecuzione degli agenti

Perché una proposta diventi l’esecuzione dell’assegnatario.

Un plugin di Paperclip e un collector di Slack che aiutano un team a gestire i propri agenti IA.

2026.04 — 2026.05

pinxlab AI R&D, libero professionista · pianificazione e sviluppo del workflow, indagine sulle esecuzioni in stallo e progettazione del percorso di ripristino

  • PluginImplementato · Paperclip
  • Server MCPImplementato · Collector di Slack

Kiki vocabulary

Lens
Agent Execution
Dispatch
Recovery
Work Signals
Signal Ingestion
Proposal
  1. assignment
  2. wake
  3. guardrail
  1. stage reaper
  2. zombie sweeper
  3. circuit breaker
  4. escalation
  1. observe
  2. signals
  3. profile
  4. directive
  1. proposal
  2. approval

Assignment: assigneeAgentId · PATCH /api/issues/:id · queueIssueAssignmentWakeup · issue.updated · CTO TRIAGE · AUTO-PROMOTE TO TODO · AUTO-REBALANCE · in_progress · REASSIGN WITHOUT WAKE · repatchAssignment · kiki-retry-issue · status: todoWake: queueIssueAssignmentWakeup · REASSIGN WITHOUT WAKE · ctx.agents.invoke · POST /api/agents/:id/wakeup · invokeOnce · INVOKE DEDUP · windowMs · HANDOFF-ACK · AT-LEAST-ONCE · HANDOFF_ACK_MAX_RETRIES · ORPHAN WAKE · lastRunAt · maxConsecutiveWakes · WAKE-STORM GUARD · heartbeat_runsGuardrail: issue.updated · in_progress · ORPHAN WAKE · SPEC COMPLETE · PO SPEC GATE · PO DELEGATION GATE · REVIEW SCORECARD · 30/30 · REWORK · PO ACCEPTANCE SCORECARD · findScorecardInComments · ANTI-DECEPTION RATCHET · WORKFLOW GUARDRAILStage Reaper: PATCH /api/issues/:id · lastRunAt · stage-reaper · repatchAssignment · heartbeatSeconds · maxConsecutiveWakes · COOLDOWN · lastSignalTime · stageEntryTime · LEVEL-TRIGGERED · WAKE-STORM GUARD · pipeline-reaper · stage-without-PATCH · kiki-retry-issue · LEAD REROUTEZombie Sweeper: zombie-sweeper · ZOMBIE_RUNNING_MAX_MIN · ZOMBIE_QUEUED_MAX_MIN · execution_run_id · RUN OWNERSHIP CONFLICT · heartbeat_runs · claude_local · execution_locked_at · SELF-HEALCircuit Breaker: CLOSED · HALF_OPEN · auth_fail · rate_limit · RETRY STORM · CB_FAILURE_THRESHOLD · KEY ROTATOR · HTTP 429 · process_lost · agent.run.failedEscalation: process_lost · agent.run.failed · ESCALATION COMMENT · LEAD REROUTE · QA FALLBACK · agent.status_changed · failed-run-escalator · PIPELINE NOTIFIER · pipeline-health-snapshot · SILENT STALLObserve: observe_channel · slack_read_channels · slack_read_thread · slack_read_reactions · slack_user_activity · .last_observed.json · DELTA TRACKING · oldest · SOCKET MODE · kiki-observe · NO RAW TEXTSignals: NO RAW TEXT · UserSignal · message_count · avg_response_time_minutes · active_hours · thread_participation_rate · topic_keywords · evidence_count · LLMExtractedSignal · FeedbackSignalProfile: FeedbackSignal · UserProfile · CommunicationStyle · DecisionPattern · WorkRhythm · focusBlocks · confidence · ContextMode · DELEGATION CHAINS · refresh-profilesDirective: AgentDirective · profileToDirectives · reportFormat · taskConstraints · directiveToSkillMarkdown · agent.created · PATCH /api/skills/{skillId} · grounding_policy · systemPrompt · NO USER PIIMaintenance Proposal: MaintenanceProposal · [MAINT] · daily-maintenance · run-maintenance · kiki-maintain · MAX 10 PROPOSALS · [SCHEMA APPROVAL REQUIRED] · P1/P2/P3 · DO NOT FABRICATE · BOUND TARGETHuman Approval: SOCKET MODE · [SCHEMA APPROVAL REQUIRED] · maint_approve · maint_deny · BLOCK KIT · reaction_added · white_check_mark · ProposalMapping · block_actions · approved · cancelled · status: todo

Tra assegnazione ed esecuzione effettiva, un percorso per osservare e ripristinare.

I segnali di lavoro diventano profili e direttive per gli agenti, e l’approvazione di una proposta di manutenzione resta separata dall’assegnazione della sua esecuzione. Quando l’attività di un’issue assegnata si ferma, viene richiesta di nuovo con issue e assegnatario, e le mancate risposte ripetute portano a un limite, a un cooldown e al giudizio di una persona.

Trasformano i segnali di lavoro in direttive per gli agenti e collegano come passi separati proposte di manutenzione, approvazione umana, assegnazione e ripristino delle esecuzioni bloccate. Ho pianificato e sviluppato questo flusso.

Primo registro nel repository April 3, 2026 · incarico presso pinxlab fino al May 26, 2026

Funziona come plugin all’interno del Paperclip del team; un server MCP gestisce la raccolta da Slack.

Mappa del flusso di esecuzione · da registri privati di implementazione
Segnali di Kiki · approvazione · ripristino dell’esecuzioneI pattern di lavoro vengono estratti dalla cronologia accessibile dei canali Slack in profili aziendali e direttive per agente. Un agente di analisi della manutenzione esamina un progetto target e lascia proposte come issue di backlog non assegnate; ogni proposta viene pubblicata su Slack, dove una persona la approva o la rifiuta con una reazione. Una volta assegnata un’issue approvata a un agente, un sistema di esecuzione esterno svolge il lavoro e uno stage reaper osserva l’attività recente. Se l’attività si ferma, l’assegnazione viene richiesta di nuovo con issue e assegnatario; quando le mancate risposte consecutive raggiungono il limite, le nuove chiamate si fermano e il caso passa a un lead o a un operatore.Segnali SlackCronologia accessibile dei canaliAgente assegnatoEsecuzione esternaProgetto targetContenuti non mostratiPersona · approva, rifiutaReazione su SlackLead · operatoreRiassegnazione · notificaRaccolta dei segnaliEstrazione di pattern · senza botStato aziendaleUnione dei profili aziendaliStato degli agentiDirettive per agenteOsservazione delle esecuzioniEsecuzioni recenti · attivitàAnalisi della manutenzioneChiamata al PO · prompt circoscrittoTracker delle issueProposta · backlogIssue di esecuzione · todoPubblicazione delle proposteMappatura messaggio ↔ issueStage reaperControllo di stallo · heartbeatChiamata di ripristinoIssue + assegnatarioStato delle mancate risposteMancate risposte · per issueTettoStop alle nuove chiamate · cooldownSegnali → direttiveEsecuzione esternaProposta → approvazione umanaRipristino · escalation1 cronologia dei canali · Segnali Slack → Estrazione di pattern · senza bot12 unione del profilo · Estrazione di pattern · senza bot → Unione dei profili aziendali23 rigenerazione · Unione dei profili aziendali → Direttive per agente34 iniezione delle direttive · Direttive per agente → Agente assegnato41 ambito del target · Progetto target → Chiamata al PO · prompt circoscritto12 issue di proposta · Chiamata al PO · prompt circoscritto → Proposta · backlog23pubblicazione della proposta4messaggio Slack5reazione6approvazione → todo7rifiuto → cancelled8assegnazione1registri delle esecuzioni2ultima attività3nessuna risposta +14nuova attività → azzeramento5 nuova chiamata · Controllo di stallo · heartbeat → Issue + assegnatario56issue + assegnatario7dopo 38riassegnazione · notifica9solo avviso

Segnali → direttive

Profili e direttive degli agenti sono costruiti dalla cronologia di Slack. Le direttive sono contesto per gli agenti e non sono disegnate come causa di alcuna proposta.

  1. Segnali SlackDati: cronologia dei canaliEstrazione di pattern · senza botRaccolta dei segnali

    Si raccoglie la cronologia accessibile dei canali e si filtrano i messaggi dei bot, di ingresso e di uscita. I messaggi originali non sono mostrati in questa pagina.

  2. Estrazione di pattern · senza botRaccolta dei segnaliDati: unione del profiloUnione dei profili aziendaliStato aziendale

    I pattern estratti diventano una patch del profilo unita al profilo aziendale. Sono pattern euristici, non punteggi di rendimento dei dipendenti.

  3. Unione dei profili aziendaliStato aziendaleDati: rigenerazioneDirettive per agenteStato degli agenti

    Le direttive per agente vengono rigenerate dal profilo unito e salvate.

  4. Direttive per agenteStato degli agentiEsecuzione · giudizio: iniezione delle direttiveAgente assegnato

    Le direttive entrano nel contesto di un agente al momento della sua creazione. Ciò non significa che una certa proposta provenga da un certo segnale Slack.

Proposta → approvazione → assegnazione

Una proposta esiste prima come issue di backlog non assegnata, la reazione di una persona richiede un cambio di stato, e assegnazione ed esecuzione spettano al sistema esterno.

  1. Progetto targetDati: ambito del targetChiamata al PO · prompt circoscrittoAnalisi della manutenzione

    Il job di manutenzione chiama l’agente PO con un prompt circoscritto al progetto target. I contenuti dei sorgenti non sono mostrati.

  2. Chiamata al PO · prompt circoscrittoAnalisi della manutenzioneDati: issue di propostaProposta · backlogTracker delle issue

    Il prompt chiede proposte con soli percorsi verificati, come issue di backlog non assegnate, e vieta di eseguire migrazioni del DB. È un’istruzione a un agente di prodotto, non un meccanismo di applicazione deterministico.

  3. Proposta · backlogTracker delle issueDati: pubblicazione della propostaMappatura messaggio ↔ issuePubblicazione delle proposte

    Ogni proposta viene pubblicata su Slack e la mappatura messaggio-issue viene salvata. Le proposte già pubblicate non vengono ripubblicate, e la mappatura salvata conserva le ultime 50.

  4. Mappatura messaggio ↔ issuePubblicazione delle proposteDati: messaggio SlackPersona · approva, rifiuta

    Una persona vede la proposta pubblicata su Slack.

  5. Persona · approva, rifiutaEsecuzione · giudizio: reazioneMappatura messaggio ↔ issuePubblicazione delle proposte

    Una reazione al messaggio trova l’issue tramite la mappatura. Non c’è approvazione automatica.

  6. Mappatura messaggio ↔ issuePubblicazione delle proposteEsecuzione · giudizio: approvazione → todoIssue di esecuzione · todoTracker delle issue

    In caso di approvazione si invia una richiesta per spostare a todo l’issue di proposta in attesa, e la mappatura e l’avviso nel thread vengono aggiornati. Questo handler segna la mappatura come approvata senza controllare il codice di risposta, quindi non è una transazione fail-closed.

  7. Mappatura messaggio ↔ issuePubblicazione delle proposteEsecuzione · giudizio: rifiuto → cancelledProposta · backlogTracker delle issue

    In caso di rifiuto si invia una richiesta per spostare la stessa issue a cancelled. L’issue esisteva già prima dell’approvazione; l’approvazione non la crea.

  8. Issue di esecuzione · todoTracker delle issueEsecuzione · giudizio: assegnazioneAgente assegnato

    Assegnazione ed esecuzione di un’issue todo spettano al sistema di esecuzione esterno. Spostare un’issue a todo non garantisce che il lavoro sia iniziato.

Stallo → ripristino → persona

Un’issue assegnata la cui attività si è fermata viene richiesta di nuovo con issue e assegnatario; quando le mancate risposte consecutive raggiungono il limite, passa a una persona.

  1. Agente assegnatoOsservazione · resoconto: registri delle esecuzioniEsecuzioni recenti · attivitàOsservazione delle esecuzioni

    Le esecuzioni e i segnali recenti dell’agente assegnato vengono registrati come osservazioni. L’attività non è una prova di completamento.

  2. Esecuzioni recenti · attivitàOsservazione delle esecuzioniOsservazione · resoconto: ultima attivitàControllo di stallo · heartbeatStage reaper

    Il reaper considera solo le issue che non sono done, cancelled o blocked e che hanno un assegnatario, e calcola l’età dell’ultimo segnale e dello stage.

  3. Controllo di stallo · heartbeatStage reaperDati: nessuna risposta +1Mancate risposte · per issueStato delle mancate risposte

    Le mancate risposte consecutive vengono contate per agente e issue e salvate nello stato.

  4. Esecuzioni recenti · attivitàOsservazione delle esecuzioniOsservazione · resoconto: nuova attività → azzeramentoMancate risposte · per issueStato delle mancate risposte

    Una nuova attività azzera il conteggio.

  5. Controllo di stallo · heartbeatStage reaperEsecuzione · giudizio: nuova chiamataIssue + assegnatarioChiamata di ripristino

    Se l’heartbeat è superato e il conteggio è sotto il limite, si effettua una chiamata di ripristino.

  6. Issue + assegnatarioChiamata di ripristinoEsecuzione · giudizio: issue + assegnatarioIssue di esecuzione · todoTracker delle issue

    L’assegnazione viene richiesta di nuovo con l’issue, l’agente assegnato e un commento esplicativo, e si controlla la risposta HTTP. Un percorso legacy ripiega su una singola chiamata di risveglio.

  7. Mancate risposte · per issueStato delle mancate risposteFallimento · limite: dopo 3Stop alle nuove chiamate · cooldownTetto

    Quando le mancate risposte consecutive raggiungono il limite (3 per impostazione predefinita), le nuove chiamate si fermano. Il limite regge solo se gli hook di stato leggono e scrivono il conteggio, e un salvataggio fallito può indebolirlo.

  8. Stop alle nuove chiamate · cooldownTettoEsecuzione · giudizio: riassegnazione · notificaLead · operatore

    Riassegna a un lead quando possibile e riporta in_progress a todo solo se quella funzione è attiva. Altrimenti lascia un commento e una notifica best-effort, e registra un cooldown dopo il limite.

  9. Controllo di stallo · heartbeatStage reaperOsservazione · resoconto: solo avvisoLead · operatore

    Quando uno stage dura troppo, resta solo un commento di avviso per gli operatori. Lo stato non viene cambiato automaticamente.

Tutte le connessioni con lo stesso peso. Scegliendo un flusso se ne evidenzia solo il percorso, con passi numerati.

  • Continua · direzione di input, risultati e registri
  • Tratteggiata · esecuzione, giudizio, richiesta
  • Punti lunghi · osservazione e resoconto, separati dal giudizio
  • Tratteggio corto · fallimento, arresto, limite
  • Linea nera spessa · il flusso scelto; i numeri danno l’ordine
  • Riquadro · confine di codice o di stato, nominato nell’intestazione
  • Chip interno · un componente di quel confine
  • Riquadro punteggiato · fuori da quel confine
  • Contorno arancione · dove decide un modello
  • Chiamata all’agente · chiamata di ripristino
  • Stato · registri
  • Controllo di stallo · tetto
  • Raccolta · pubblicazione

Disegnato da registri privati di implementazione e sviluppo. Identificativi di team, issue e Slack e messaggi originali non sono mostrati; deployment, container e credenziali spettano a un responsabile esterno a questo plugin.

Una sola osservazione
Rapporto del April 28, 2026: in una diagnosi manuale prima della modifica, per un’issue che non girava da 67 ore è stata richiesta di nuovo l’assegnazione con issue e assegnatario, e una nuova esecuzione è entrata in coda entro 5 secondi. Completamento, tempo medio di ripristino ed effetto dopo il rilascio non sono stati misurati.
Limiti della gestione delle approvazioni
A differenza della chiamata di ripristino, la gestione delle approvazioni segna la mappatura come approvata senza controllare il codice di risposta. Non viene descritta come una transazione di approvazione atomica o fail-closed.
Quando il limite regge
Il limite di 3 chiamate è un’implementazione che regge quando sono presenti gli hook di stato. Non garantisce esattamente un’escalation per ogni fallimento.