Variantă transparentă a feței din imaginea pisicii Kiki furnizată de autor
Înapoi în sală

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.

2026.04 — 2026.05

pinxlab AI R&D, freelance · planificarea și dezvoltarea fluxului de lucru, investigarea execuției blocate și proiectarea căii de recuperare

  • PluginImplementat · Paperclip
  • Server MCPImplementat · Colector 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

Î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.

Harta fluxului de execuție · după înregistrări private de implementare
Kiki: semnale · aprobare · recuperarea execuțieiDin istoricul accesibil al canalelor Slack sunt extrase tipare de lucru, transformate în profiluri ale companiei și directive pentru fiecare agent. Un agent de analiză a mentenanței examinează un proiect țintă și lasă propuneri ca tichete de backlog fără responsabil; fiecare propunere este publicată în Slack, unde o persoană o aprobă sau o respinge cu o reacție. Odată ce un tichet aprobat este atribuit unui agent, un sistem extern de execuție face lucrul, iar un stage reaper urmărește activitatea recentă. Dacă activitatea se oprește, atribuirea este cerută din nou cu tichetul și responsabilul; când lipsurile de răspuns consecutive ating limita, reapelurile se opresc, iar cazul ajunge la un lider sau operator.Semnale SlackIstoricul accesibil al canalelorAgentul atribuitExecuție externăProiectul țintăConținutul nu este afișatPersoană · aprobă, respingeReacție în SlackLider · operatorReatribuire · notificareColectarea semnalelorExtragerea tiparelor · fără boțiStarea companieiÎmbinarea profilului companieiStarea agentuluiDirective pentru fiecare agentObservarea rulărilorRulări recente · activitateAnaliza mentenanțeiApel PO · prompt cu domeniu limitatSistem de tichetePropunere · backlogTichet de rulare · todoPublicarea propunerilorMaparea mesaj ↔ tichetStage reaperDetectarea blocajului · heartbeatApel de recuperareTichet + responsabilStarea lipsei de răspunsLipsuri de răspuns · pe tichetLimităOprirea reapelurilor · răcireSemnale → directiveExecuție externăPropunere → aprobare umanăRecuperare · escaladare1 istoricul canalelor · Semnale Slack → Extragerea tiparelor · fără boți12 îmbinarea profilului · Extragerea tiparelor · fără boți → Îmbinarea profilului companiei23regenerare4 injectarea directivelor · Directive pentru fiecare agent → Agentul atribuit41 domeniul țintă · Proiectul țintă → Apel PO · prompt cu domeniu limitat12 tichet de propunere · Apel PO · prompt cu domeniu limitat → Propunere · backlog23publicarea propunerii4Mesaj Slack5reacție6aprobare → todo7respingere → cancelled8atribuire1înregistrări ale rulărilor2ultima activitate3fără răspuns +14activitate nouă → resetare5reapel6tichet + responsabil7după 38reatribuire · notificare9doar avertizare

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.

  1. Semnale SlackDate: istoricul canalelorExtragerea tiparelor · fără boțiColectarea semnalelor

    Istoricul 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ă.

  2. Extragerea tiparelor · fără boțiColectarea semnalelorDate: îmbinarea profiluluiÎmbinarea profilului companieiStarea companiei

    Tiparele extrase devin un patch de profil îmbinat în profilul companiei. Sunt tipare euristice, nu scoruri de performanță ale angajaților.

  3. Îmbinarea profilului companieiStarea companieiDate: regenerareDirective pentru fiecare agentStarea agentului

    Directivele pentru fiecare agent sunt regenerate din profilul îmbinat și stocate.

  4. Directive pentru fiecare agentStarea agentuluiRulare · judecată: injectarea directivelorAgentul atribuit

    Directivele 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.

  1. Proiectul țintăDate: domeniul țintăApel PO · prompt cu domeniu limitatAnaliza mentenanței

    Jobul de mentenanță apelează agentul PO cu un prompt limitat la proiectul țintă. Conținutul surselor nu este afișat.

  2. Apel PO · prompt cu domeniu limitatAnaliza mentenanțeiDate: tichet de propunerePropunere · backlogSistem de tichete

    Promptul 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.

  3. Propunere · backlogSistem de ticheteDate: publicarea propuneriiMaparea mesaj ↔ tichetPublicarea propunerilor

    Fiecare propunere este publicată în Slack, iar maparea mesaj–tichet este stocată. Propunerile deja publicate nu sunt republicate, iar maparea stocată păstrează ultimele 50.

  4. Maparea mesaj ↔ tichetPublicarea propunerilorDate: Mesaj SlackPersoană · aprobă, respinge

    O persoană vede propunerea publicată în Slack.

  5. Persoană · aprobă, respingeRulare · judecată: reacțieMaparea mesaj ↔ tichetPublicarea propunerilor

    O reacție la mesaj găsește tichetul prin mapare. Nu există aprobare automată.

  6. Maparea mesaj ↔ tichetPublicarea propunerilorRulare · judecată: aprobare → todoTichet de rulare · todoSistem de tichete

    La 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.

  7. Maparea mesaj ↔ tichetPublicarea propunerilorRulare · judecată: respingere → cancelledPropunere · backlogSistem de tichete

    La respingere se trimite o cerere de mutare a aceluiași tichet în cancelled. Tichetul exista înainte de aprobare; aprobarea nu îl creează.

  8. Tichet de rulare · todoSistem de ticheteRulare · judecată: atribuireAgentul atribuit

    Atribuirea ș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ă.

  1. Agentul atribuitObservare · raport: înregistrări ale rulărilorRulări recente · activitateObservarea rulărilor

    Rulările agentului atribuit și semnalele recente sunt înregistrate ca observații. Activitatea nu este o dovadă de finalizare.

  2. Rulări recente · activitateObservarea rulărilorObservare · raport: ultima activitateDetectarea blocajului · heartbeatStage reaper

    Reaperul 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.

  3. Detectarea blocajului · heartbeatStage reaperDate: fără răspuns +1Lipsuri de răspuns · pe tichetStarea lipsei de răspuns

    Lipsurile de răspuns consecutive sunt numărate pentru fiecare agent și tichet și stocate în stare.

  4. Rulări recente · activitateObservarea rulărilorObservare · raport: activitate nouă → resetareLipsuri de răspuns · pe tichetStarea lipsei de răspuns

    Activitatea nouă resetează numărătoarea.

  5. Detectarea blocajului · heartbeatStage reaperRulare · judecată: reapelTichet + responsabilApel de recuperare

    Dacă heartbeat-ul este depășit și numărătoarea este sub limită, se face un apel de recuperare.

  6. Tichet + responsabilApel de recuperareRulare · judecată: tichet + responsabilTichet de rulare · todoSistem de tichete

    Atribuirea 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.

  7. Lipsuri de răspuns · pe tichetStarea 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.

  8. Oprirea reapelurilor · răcireLimităRulare · judecată: reatribuire · notificareLider · operator

    Reatribuie 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ă.

  9. Detectarea blocajului · heartbeatStage reaperObservare · raport: doar avertizareLider · operator

    Câ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.