
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.
Kiki vocabulary
- assignment
- wake
- guardrail
- stage reaper
- zombie sweeper
- circuit breaker
- escalation
- observe
- signals
- profile
- directive
- proposal
- 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.
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.
Segnali SlackDati: cronologia dei canaliEstrazione di pattern · senza bot
Raccolta dei segnaliSi 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.
Estrazione di pattern · senza bot
Raccolta dei segnaliDati: unione del profiloUnione dei profili aziendaliStato aziendaleI pattern estratti diventano una patch del profilo unita al profilo aziendale. Sono pattern euristici, non punteggi di rendimento dei dipendenti.
Unione dei profili aziendali
Stato aziendaleDati: rigenerazioneDirettive per agenteStato degli agentiLe direttive per agente vengono rigenerate dal profilo unito e salvate.
Direttive per agente
Stato degli agentiEsecuzione · giudizio: iniezione delle direttiveAgente assegnatoLe 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.
Progetto targetDati: ambito del targetChiamata al PO · prompt circoscritto
Analisi della manutenzioneIl job di manutenzione chiama l’agente PO con un prompt circoscritto al progetto target. I contenuti dei sorgenti non sono mostrati.
Chiamata al PO · prompt circoscritto
Analisi della manutenzioneDati: issue di propostaProposta · backlogTracker delle issueIl 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.
Proposta · backlog
Tracker delle issueDati: pubblicazione della propostaMappatura messaggio ↔ issuePubblicazione delle proposteOgni 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.
Mappatura messaggio ↔ issue
Pubblicazione delle proposteDati: messaggio SlackPersona · approva, rifiutaUna persona vede la proposta pubblicata su Slack.
Persona · approva, rifiutaEsecuzione · giudizio: reazioneMappatura messaggio ↔ issue
Pubblicazione delle proposteUna reazione al messaggio trova l’issue tramite la mappatura. Non c’è approvazione automatica.
Mappatura messaggio ↔ issue
Pubblicazione delle proposteEsecuzione · giudizio: approvazione → todoIssue di esecuzione · todoTracker delle issueIn 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.
Mappatura messaggio ↔ issue
Pubblicazione delle proposteEsecuzione · giudizio: rifiuto → cancelledProposta · backlogTracker delle issueIn 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.
Issue di esecuzione · todo
Tracker delle issueEsecuzione · giudizio: assegnazioneAgente assegnatoAssegnazione 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.
Agente assegnatoOsservazione · resoconto: registri delle esecuzioniEsecuzioni recenti · attività
Osservazione delle esecuzioniLe esecuzioni e i segnali recenti dell’agente assegnato vengono registrati come osservazioni. L’attività non è una prova di completamento.
Esecuzioni recenti · attività
Osservazione delle esecuzioniOsservazione · resoconto: ultima attivitàControllo di stallo · heartbeatStage reaperIl 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.
Controllo di stallo · heartbeat
Stage reaperDati: nessuna risposta +1Mancate risposte · per issueStato delle mancate risposteLe mancate risposte consecutive vengono contate per agente e issue e salvate nello stato.
Esecuzioni recenti · attività
Osservazione delle esecuzioniOsservazione · resoconto: nuova attività → azzeramentoMancate risposte · per issueStato delle mancate risposteUna nuova attività azzera il conteggio.
Controllo di stallo · heartbeat
Stage reaperEsecuzione · giudizio: nuova chiamataIssue + assegnatarioChiamata di ripristinoSe l’heartbeat è superato e il conteggio è sotto il limite, si effettua una chiamata di ripristino.
Issue + assegnatario
Chiamata di ripristinoEsecuzione · giudizio: issue + assegnatarioIssue di esecuzione · todoTracker delle issueL’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.
Mancate risposte · per issue
Stato delle mancate risposteFallimento · limite: dopo 3Stop alle nuove chiamate · cooldownTettoQuando 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.
Stop alle nuove chiamate · cooldown
TettoEsecuzione · giudizio: riassegnazione · notificaLead · operatoreRiassegna 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.
Controllo di stallo · heartbeat
Stage reaperOsservazione · resoconto: solo avvisoLead · operatoreQuando 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.