
Kiki
Arbetssignaler och agentexekvering
Så att ett förslag blir den ansvariges exekvering.
Ett Paperclip-plugin och en Slack-insamlare som hjälper ett team att driva sina AI-agenter.
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
Mellan tilldelning och faktisk exekvering: en väg för att observera och återställa.
Arbetssignaler blir profiler och agentdirektiv, och godkännandet av ett underhållsförslag hålls åtskilt från tilldelningen av dess exekvering. När aktiviteten i ett tilldelat ärende stannar begärs det igen med ärendet och den ansvarige, och upprepade uteblivna svar går vidare till en gräns, en cooldown och en människas bedömning.
De omvandlar arbetssignaler till agentdirektiv och kopplar samman underhållsförslag, mänskligt godkännande, tilldelning och återställning av körningar som stannat som separata steg. Jag planerade och utvecklade detta flöde.
Första loggen i repositoryt 3 april 2026 · uppdrag hos pinxlab till och med 26 maj 2026
Körs som plugin inuti teamets Paperclip; en MCP-server sköter insamlingen från Slack.
Signaler → direktiv
Profiler och agentdirektiv byggs utifrån Slack-historik. Direktiv är agentkontext och ritas inte som orsak till något förslag.
Slack-signalerData: kanalhistorikMönsterextraktion · inga bottar
SignalinsamlingTillgänglig kanalhistorik samlas in och meddelanden från bottar samt om att gå med och lämna filtreras bort. Ursprungliga meddelanden visas inte på den här sidan.
Mönsterextraktion · inga bottar
SignalinsamlingData: sammanslagning av profilSammanslagning av företagsprofilFöretagstillståndExtraherade mönster blir en profilpatch som slås samman med företagsprofilen. Det är heuristiska mönster, inte prestationspoäng för anställda.
Sammanslagning av företagsprofil
FöretagstillståndData: generera omDirektiv per agentAgenttillståndDirektiv per agent genereras om utifrån den sammanslagna profilen och sparas.
Direktiv per agent
AgenttillståndKörning · bedömning: direktiv inTilldelad agentDirektiv kommer in i en agents kontext när den skapas. Det betyder inte att ett visst förslag kom från en viss Slack-signal.
Förslag → godkännande → tilldelning
Ett förslag finns först som ett otilldelat backlog-ärende, en människas reaktion begär en statusändring, och tilldelning och exekvering hör till det externa systemet.
MålprojektData: målomfångPO-anrop · avgränsad prompt
UnderhållsanalysUnderhållsjobbet anropar PO-agenten med en prompt avgränsad till målprojektet. Källinnehåll visas inte.
PO-anrop · avgränsad prompt
UnderhållsanalysData: förslagsärendeFörslag · backlogÄrendesystemPrompten ber om förslag med endast verifierade sökvägar som otilldelade backlog-ärenden och förbjuder att köra DB-migreringar. Det är en instruktion till en produktagent, inte en deterministisk tvingande mekanism.
Förslag · backlog
ÄrendesystemData: publicera förslagMappning meddelande ↔ ärendePublicering av förslagVarje förslag publiceras i Slack och mappningen mellan meddelande och ärende sparas. Förslag som redan publicerats publiceras inte igen, och den sparade mappningen behåller de senaste 50.
Mappning meddelande ↔ ärende
Publicering av förslagData: Slack-meddelandePerson · godkänn, avböjEn människa ser det publicerade förslaget i Slack.
Person · godkänn, avböjKörning · bedömning: reaktionMappning meddelande ↔ ärende
Publicering av förslagEn reaktion på meddelandet hittar ärendet via mappningen. Det finns inget automatiskt godkännande.
Mappning meddelande ↔ ärende
Publicering av förslagKörning · bedömning: godkänn → todoKörningsärende · todoÄrendesystemVid godkännande skickas en begäran om att flytta det väntande förslagsärendet till todo, och mappningen och trådaviseringen uppdateras. Den här hanteraren markerar mappningen som godkänd utan att kontrollera svarskoden, så det är ingen fail-closed-transaktion.
Mappning meddelande ↔ ärende
Publicering av förslagKörning · bedömning: avböj → cancelledFörslag · backlogÄrendesystemVid avböjande skickas en begäran om att flytta samma ärende till cancelled. Ärendet fanns före godkännandet; godkännandet skapar det inte.
Körningsärende · todo
ÄrendesystemKörning · bedömning: tilldelningTilldelad agentTilldelning och exekvering av ett todo-ärende hör till det externa exekveringssystemet. Att flytta ett ärende till todo garanterar inte att arbetet har startat.
Stillestånd → återställning → person
Ett tilldelat ärende vars aktivitet har stannat begärs igen med ärendet och den ansvarige; när uteblivna svar i följd når gränsen går det till en människa.
Tilldelad agentObservation · rapport: körloggarSenaste körningar · aktivitet
KörningsobservationDen tilldelade agentens körningar och senaste signaler registreras som observationer. Aktivitet är inget belägg för slutförande.
Senaste körningar · aktivitet
KörningsobservationObservation · rapport: senaste aktivitetKontroll av stillestånd · heartbeatStage reaperReapern tittar bara på ärenden som inte är done, cancelled eller blocked och som har en ansvarig, och beräknar åldern på den senaste signalen och stage.
Kontroll av stillestånd · heartbeat
Stage reaperData: uteblivet svar +1Uteblivna svar · per ärendeTillstånd för uteblivna svarUteblivna svar i följd räknas per agent och ärende och sparas i tillståndet.
Senaste körningar · aktivitet
KörningsobservationObservation · rapport: ny aktivitet → nollställUteblivna svar · per ärendeTillstånd för uteblivna svarNy aktivitet nollställer räkningen.
Kontroll av stillestånd · heartbeat
Stage reaperKörning · bedömning: nytt anropÄrende + ansvarigÅterställningsanropOm heartbeat överskrids och räkningen är under gränsen görs ett återställningsanrop.
Ärende + ansvarig
ÅterställningsanropKörning · bedömning: ärende + ansvarigKörningsärende · todoÄrendesystemTilldelningen begärs igen med ärendet, den tilldelade agenten och en förklarande kommentar, och HTTP-svaret kontrolleras. En legacy-väg faller tillbaka på ett enda väckningsanrop.
Uteblivna svar · per ärende
Tillstånd för uteblivna svarFel · gräns: efter 3Stoppa nya anrop · cooldownGränsNär uteblivna svar i följd når gränsen (3 som standard) stoppas nya anrop. Gränsen håller bara när tillståndshooks läser och skriver räkningen, och en misslyckad sparning kan försvaga den.
Stoppa nya anrop · cooldown
GränsKörning · bedömning: omfördela · aviseraLead · operatörOmfördelar om möjligt till en lead och flyttar bara tillbaka in_progress till todo när den funktionen är aktiverad. Annars lämnas en kommentar och en best-effort-avisering, och en cooldown registreras efter gränsen.
Kontroll av stillestånd · heartbeat
Stage reaperObservation · rapport: endast varningLead · operatörNär en stage pågår för länge lämnas bara en varningskommentar till operatörer. Status ändras inte automatiskt.
Alla kopplingar med samma tjocklek. Välj ett flöde för att bara markera dess väg, med numrerade steg.
- Heldragen · riktning för indata, resultat och loggar
- Streckad · körning, bedömning, begäran
- Långa prickar · observation och rapportering, skilt från bedömning
- Korta streck · fel, stopp, gräns
- Kraftig svart linje · det valda flödet; siffrorna anger ordningen
- Ruta · kod- eller tillståndsgräns, namngiven i rubriken
- Inre chip · en komponent inom gränsen
- Prickad ruta · utanför gränsen
- Orange kontur · där en modell fattar beslut
- Agentanrop · återställningsanrop
- Tillstånd · loggar
- Kontroll av stillestånd · gräns
- Insamling · publicering
Ritad utifrån privata implementations- och utvecklingsloggar. Team-, ärende- och Slack-identifierare och ursprungliga meddelanden visas inte; driftsättning, containrar och autentiseringsuppgifter tillhör en ägare utanför detta plugin.
- En observation
- Rapport från 28 april 2026: i en manuell diagnos före ändringen begärdes tilldelningen igen med ärende och ansvarig för ett ärende som inte hade körts på 67 timmar, och en ny körning köades inom 5 sekunder. Slutförande, genomsnittlig återställningstid och effekt efter utrullning mättes inte.
- Begränsningar i hanteringen av godkännanden
- Till skillnad från återställningsanropet markerar hanteringen av godkännanden mappningen som godkänd utan att kontrollera svarskoden. Den beskrivs inte som en atomär eller fail-closed godkännandetransaktion.
- När gränsen håller
- Gränsen på 3 anrop är en implementation som håller när tillståndshooks finns. Den garanterar inte exakt en eskalering vid varje fel.