
Kiki
Semnale de lucru și execuția agenților
Pentru ca o propunere să devină execuția responsabilului.
Un plugin Paperclip și un colector Slack care ajută o echipă să își ruleze agenții AI.
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
Între atribuire și execuția reală, o cale de observare și recuperare.
Semnalele de lucru devin profiluri și directive pentru agenți, iar aprobarea unei propuneri de mentenanță este ținută separat de atribuirea execuției ei. Când activitatea unui tichet atribuit se oprește, este cerută din nou cu tichetul și responsabilul, iar lipsa repetată de răspuns duce la o limită, o perioadă de răcire și judecata unei persoane.
Transformă semnalele de lucru în directive pentru agenți și leagă, ca pași separați, propunerile de mentenanță, aprobarea umană, atribuirea și recuperarea rulărilor blocate. Am planificat și dezvoltat acest flux.
Prima înregistrare din depozit: 3 aprilie 2026 · colaborarea cu pinxlab până pe 26 mai 2026
Rulează ca plugin în Paperclip-ul echipei; un server MCP se ocupă de colectarea din Slack.
Semnale → directive
Profilurile și directivele agenților sunt construite din istoricul Slack. Directivele sunt contextul agentului și nu sunt desenate drept cauză a vreunei propuneri.
Semnale SlackDate: istoricul canalelorExtragerea tiparelor · fără boți
Colectarea semnalelorIstoricul accesibil al canalelor este colectat, iar mesajele boților, de intrare și de ieșire sunt filtrate. Mesajele originale nu sunt afișate pe această pagină.
Extragerea tiparelor · fără boți
Colectarea semnalelorDate: îmbinarea profiluluiÎmbinarea profilului companieiStarea companieiTiparele extrase devin un patch de profil îmbinat în profilul companiei. Sunt tipare euristice, nu scoruri de performanță ale angajaților.
Îmbinarea profilului companiei
Starea companieiDate: regenerareDirective pentru fiecare agentStarea agentuluiDirectivele pentru fiecare agent sunt regenerate din profilul îmbinat și stocate.
Directive pentru fiecare agent
Starea agentuluiRulare · judecată: injectarea directivelorAgentul atribuitDirectivele intră în contextul unui agent când acesta este creat. Nu înseamnă că o anumită propunere provine dintr-un anumit semnal Slack.
Propunere → aprobare → atribuire
O propunere există mai întâi ca tichet de backlog fără responsabil, reacția unei persoane cere o schimbare de stare, iar atribuirea și execuția aparțin sistemului extern.
Proiectul țintăDate: domeniul țintăApel PO · prompt cu domeniu limitat
Analiza mentenanțeiJobul de mentenanță apelează agentul PO cu un prompt limitat la proiectul țintă. Conținutul surselor nu este afișat.
Apel PO · prompt cu domeniu limitat
Analiza mentenanțeiDate: tichet de propunerePropunere · backlogSistem de tichetePromptul cere doar propuneri cu căi verificate, ca tichete de backlog fără responsabil, și interzice rularea migrărilor de baze de date. Este o instrucțiune pentru un agent al produsului, nu un mecanism determinist de impunere.
Propunere · backlog
Sistem de ticheteDate: publicarea propuneriiMaparea mesaj ↔ tichetPublicarea propunerilorFiecare propunere este publicată în Slack, iar maparea mesaj–tichet este stocată. Propunerile deja publicate nu sunt republicate, iar maparea stocată păstrează ultimele 50.
Maparea mesaj ↔ tichet
Publicarea propunerilorDate: Mesaj SlackPersoană · aprobă, respingeO persoană vede propunerea publicată în Slack.
Persoană · aprobă, respingeRulare · judecată: reacțieMaparea mesaj ↔ tichet
Publicarea propunerilorO reacție la mesaj găsește tichetul prin mapare. Nu există aprobare automată.
Maparea mesaj ↔ tichet
Publicarea propunerilorRulare · judecată: aprobare → todoTichet de rulare · todoSistem de ticheteLa aprobare se trimite o cerere de mutare a tichetului de propunere în așteptare în todo, iar maparea și notificarea din fir sunt actualizate. Acest handler marchează maparea ca aprobată fără să verifice codul de răspuns, deci nu este o tranzacție care eșuează închis.
Maparea mesaj ↔ tichet
Publicarea propunerilorRulare · judecată: respingere → cancelledPropunere · backlogSistem de ticheteLa respingere se trimite o cerere de mutare a aceluiași tichet în cancelled. Tichetul exista înainte de aprobare; aprobarea nu îl creează.
Tichet de rulare · todo
Sistem de ticheteRulare · judecată: atribuireAgentul atribuitAtribuirea și execuția unui tichet todo aparțin sistemului extern de execuție. Mutarea unui tichet în todo nu garantează că lucrul a început.
Blocaj → recuperare → persoană
Un tichet atribuit a cărui activitate s-a oprit este cerut din nou cu tichetul și responsabilul; când lipsurile de răspuns consecutive ating limita, ajunge la o persoană.
Agentul atribuitObservare · raport: înregistrări ale rulărilorRulări recente · activitate
Observarea rulărilorRulările agentului atribuit și semnalele recente sunt înregistrate ca observații. Activitatea nu este o dovadă de finalizare.
Rulări recente · activitate
Observarea rulărilorObservare · raport: ultima activitateDetectarea blocajului · heartbeatStage reaperReaperul se uită doar la tichetele care nu sunt done, cancelled sau blocked și care au un responsabil și calculează vechimea ultimului semnal și a ultimei etape.
Detectarea blocajului · heartbeat
Stage reaperDate: fără răspuns +1Lipsuri de răspuns · pe tichetStarea lipsei de răspunsLipsurile de răspuns consecutive sunt numărate pentru fiecare agent și tichet și stocate în stare.
Rulări recente · activitate
Observarea rulărilorObservare · raport: activitate nouă → resetareLipsuri de răspuns · pe tichetStarea lipsei de răspunsActivitatea nouă resetează numărătoarea.
Detectarea blocajului · heartbeat
Stage reaperRulare · judecată: reapelTichet + responsabilApel de recuperareDacă heartbeat-ul este depășit și numărătoarea este sub limită, se face un apel de recuperare.
Tichet + responsabil
Apel de recuperareRulare · judecată: tichet + responsabilTichet de rulare · todoSistem de ticheteAtribuirea este cerută din nou cu tichetul, agentul atribuit și un comentariu explicativ, iar răspunsul HTTP este verificat. O cale veche revine la un singur apel de trezire.
Lipsuri de răspuns · pe tichet
Starea lipsei de răspunsEșec · limită: după 3Oprirea reapelurilor · răcireLimităCând lipsurile de răspuns consecutive ating limita (implicit 3), reapelurile se opresc. Limita se respectă doar când hookurile de stare citesc și scriu numărătoarea, iar o salvare eșuată o poate slăbi.
Oprirea reapelurilor · răcire
LimităRulare · judecată: reatribuire · notificareLider · operatorReatribuie unui lider unde se poate și mută in_progress înapoi în todo doar când acea funcție este activată. Altfel lasă un comentariu și o notificare fără garanție și înregistrează o perioadă de răcire după limită.
Detectarea blocajului · heartbeat
Stage reaperObservare · raport: doar avertizareLider · operatorCând o etapă durează prea mult, se lasă doar un comentariu de avertizare pentru operatori. Starea nu este schimbată automat.
Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.
- Continuă · direcția intrărilor, rezultatelor și înregistrărilor
- Întreruptă · rulare, judecată, cerere
- Puncte lungi · observare și raportare, separate de judecată
- Liniuțe scurte · eșec, oprire, limită
- Linie neagră groasă · fluxul selectat; numerele dau ordinea
- Casetă · graniță de cod sau de stare, cu numele în antet
- Etichetă interioară · o componentă a acelei granițe
- Casetă punctată · în afara acelei granițe
- Contur portocaliu · locul în care decide un model
- Apel de agent · apel de recuperare
- Stare · înregistrări
- Detectarea blocajului · limită
- Colectare · publicare
Desenat după înregistrări private de implementare și dezvoltare. Identificatorii echipei, tichetelor și Slack și mesajele originale nu sunt afișate; implementarea, containerele și credențialele aparțin unui responsabil din afara acestui plugin.
- O observație
- Raportul din 28 aprilie 2026: într-un diagnostic manual de dinaintea schimbării, pentru un tichet care nu rulase de 67 de ore atribuirea a fost cerută din nou cu tichetul și responsabilul, iar o nouă rulare a intrat în coadă în 5 secunde. Finalizarea, timpul mediu de recuperare și efectul de după lansare nu au fost măsurate.
- Limitele tratării aprobării
- Spre deosebire de apelul de recuperare, tratarea aprobării marchează maparea ca aprobată fără să verifice codul de răspuns. Nu este descrisă ca tranzacție de aprobare atomică sau care eșuează închis.
- Când se respectă limita
- Limita de 3 apeluri este o implementare care se respectă când există hookuri de stare. Nu garantează exact o escaladare la fiecare eșec.