
Kiki
Werksignalen en uitvoering door agents
Zodat een voorstel uitmondt in uitvoering door de toegewezene.
Een Paperclip-plugin en een Slack-collector die een team helpen zijn AI-agents te laten draaien.
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
Tussen toewijzing en daadwerkelijke uitvoering een pad om te observeren en te herstellen.
Werksignalen worden profielen en agentrichtlijnen, en het goedkeuren van een onderhoudsvoorstel blijft gescheiden van het toewijzen van de uitvoering ervan. Stopt de activiteit van een toegewezen issue, dan wordt het opnieuw aangevraagd met het issue en de toegewezene, en herhaald uitblijven van een reactie leidt naar een limiet, een cooldown en het oordeel van een mens.
Ze zetten werksignalen om in agentrichtlijnen en verbinden onderhoudsvoorstellen, menselijke goedkeuring, toewijzing en het herstel van vastgelopen runs als aparte stappen. Ik heb deze stroom gepland en ontwikkeld.
Eerste vastlegging in de repository April 3, 2026 · opdracht bij pinxlab tot May 26, 2026
Draait als plugin binnen de Paperclip van het team; een MCP-server verzorgt het verzamelen uit Slack.
Signalen → richtlijnen
Profielen en agentrichtlijnen worden opgebouwd uit de Slack-geschiedenis. Richtlijnen zijn context voor agents en worden niet getekend als oorzaak van een voorstel.
Slack-signalenGegevens: kanaalgeschiedenisPatroonextractie · zonder bots
SignaalverzamelingToegankelijke kanaalgeschiedenis wordt verzameld en bot-, join- en leaveberichten worden eruit gefilterd. Oorspronkelijke berichten worden op deze pagina niet getoond.
Patroonextractie · zonder bots
SignaalverzamelingGegevens: profielsamenvoegingSamenvoegen van bedrijfsprofielenBedrijfstoestandGeëxtraheerde patronen worden een profielpatch die in het bedrijfsprofiel wordt samengevoegd. Het zijn heuristische patronen, geen prestatiescores van medewerkers.
Samenvoegen van bedrijfsprofielen
BedrijfstoestandGegevens: opnieuw genererenRichtlijnen per agentAgenttoestandRichtlijnen per agent worden opnieuw gegenereerd uit het samengevoegde profiel en opgeslagen.
Richtlijnen per agent
AgenttoestandUitvoeren · oordeel: richtlijnen injecterenToegewezen agentRichtlijnen komen in de context van een agent terecht wanneer die wordt aangemaakt. Dat betekent niet dat een bepaald voorstel uit een bepaald Slack-signaal voortkwam.
Voorstel → goedkeuring → toewijzing
Een voorstel bestaat eerst als niet-toegewezen backlog-issue, de reactie van een mens vraagt een statuswijziging aan, en toewijzing en uitvoering liggen bij het externe systeem.
DoelprojectGegevens: doelafbakeningPO-aanroep · afgebakende prompt
OnderhoudsanalyseDe onderhoudsjob roept de PO-agent aan met een prompt die is afgebakend tot het doelproject. Broninhoud wordt niet getoond.
PO-aanroep · afgebakende prompt
OnderhoudsanalyseGegevens: voorstelissueVoorstel · backlogIssuetrackerDe prompt vraagt om voorstellen met alleen geverifieerde paden, als niet-toegewezen backlog-issues, en verbiedt het uitvoeren van DB-migraties. Het is een instructie aan een productagent, geen deterministisch handhavingsmechanisme.
Voorstel · backlog
IssuetrackerGegevens: voorstel plaatsenKoppeling bericht ↔ issuePlaatsen van voorstellenElk voorstel wordt in Slack geplaatst en de koppeling van bericht naar issue wordt opgeslagen. Al geplaatste voorstellen worden niet opnieuw geplaatst, en de opgeslagen koppeling bewaart de laatste 50.
Koppeling bericht ↔ issue
Plaatsen van voorstellenGegevens: Slack-berichtMens · goedkeuren, afwijzenEen mens ziet het geplaatste voorstel in Slack.
Mens · goedkeuren, afwijzenUitvoeren · oordeel: reactieKoppeling bericht ↔ issue
Plaatsen van voorstellenEen reactie op het bericht vindt het issue via de koppeling. Er is geen automatische goedkeuring.
Koppeling bericht ↔ issue
Plaatsen van voorstellenUitvoeren · oordeel: goedkeuren → todoUitvoeringsissue · todoIssuetrackerBij goedkeuring wordt een verzoek verstuurd om het wachtende voorstelissue naar todo te zetten, en de koppeling en de threadmelding worden bijgewerkt. Deze handler markeert de koppeling als goedgekeurd zonder de responscode te controleren, dus het is geen fail-closed transactie.
Koppeling bericht ↔ issue
Plaatsen van voorstellenUitvoeren · oordeel: afwijzen → cancelledVoorstel · backlogIssuetrackerBij afwijzing wordt een verzoek verstuurd om hetzelfde issue naar cancelled te zetten. Het issue bestond al vóór de goedkeuring; goedkeuring maakt het niet aan.
Uitvoeringsissue · todo
IssuetrackerUitvoeren · oordeel: toewijzingToegewezen agentToewijzing en uitvoering van een todo-issue liggen bij het externe uitvoeringssysteem. Een issue naar todo zetten garandeert niet dat het werk is begonnen.
Stilstand → herstel → mens
Een toegewezen issue waarvan de activiteit is gestopt, wordt opnieuw aangevraagd met het issue en de toegewezene; bereikt het aantal opeenvolgende keren zonder reactie de limiet, dan gaat het naar een mens.
Toegewezen agentObservatie · rapport: runlogsRecente runs · activiteit
RunobservatieDe runs en recente signalen van de toegewezen agent worden vastgelegd als observaties. Activiteit is geen bewijs van voltooiing.
Recente runs · activiteit
RunobservatieObservatie · rapport: laatste activiteitStilstandscontrole · heartbeatStage reaperDe reaper kijkt alleen naar issues die niet done, cancelled of blocked zijn en een toegewezene hebben, en berekent de leeftijd van het laatste signaal en de stage.
Stilstandscontrole · heartbeat
Stage reaperGegevens: geen antwoord +1Geen reactie · per issueToestand bij geen reactieOpeenvolgende keren zonder reactie worden per agent en issue geteld en in de toestand opgeslagen.
Recente runs · activiteit
RunobservatieObservatie · rapport: nieuwe activiteit → resetGeen reactie · per issueToestand bij geen reactieNieuwe activiteit zet de teller terug.
Stilstandscontrole · heartbeat
Stage reaperUitvoeren · oordeel: opnieuw aanroepenIssue + toegewezeneHerstelaanroepIs de heartbeat overschreden en de teller onder de limiet, dan volgt een herstelaanroep.
Issue + toegewezene
HerstelaanroepUitvoeren · oordeel: issue + toegewezeneUitvoeringsissue · todoIssuetrackerDe toewijzing wordt opnieuw aangevraagd met het issue, de toegewezen agent en een toelichtend commentaar, en de HTTP-respons wordt gecontroleerd. Een legacypad valt terug op één enkele wake-aanroep.
Geen reactie · per issue
Toestand bij geen reactieMislukking · limiet: na 3Herhaalde aanroepen stoppen · cooldownBovengrensAls het aantal opeenvolgende keren zonder reactie de limiet bereikt (standaard 3), stoppen de herhaalde aanroepen. De limiet houdt alleen stand als state-hooks de teller lezen en schrijven, en een mislukte opslag kan haar verzwakken.
Herhaalde aanroepen stoppen · cooldown
BovengrensUitvoeren · oordeel: opnieuw toewijzen · meldenLead · operatorWijst waar mogelijk opnieuw toe aan een lead en zet in_progress alleen terug naar todo als die functie is ingeschakeld. Anders blijven een commentaar en een best-effort-melding achter, en na de limiet wordt een cooldown vastgelegd.
Stilstandscontrole · heartbeat
Stage reaperObservatie · rapport: alleen waarschuwingLead · operatorDuurt een stage te lang, dan blijft er alleen een waarschuwingscommentaar voor operators achter. De status wordt niet automatisch gewijzigd.
Alle verbindingen even zwaar. Kies een stroom om alleen het pad daarvan te markeren, met genummerde stappen.
- Doorgetrokken · richting van input, resultaten en vastleggingen
- Gestreept · uitvoeren, oordeel, verzoek
- Lange punten · observatie en rapportage, los van het oordeel
- Kort gestreept · mislukking, stop, limiet
- Dikke zwarte lijn · de gekozen stroom; nummers geven de volgorde
- Vak · code- of toestandsgrens, benoemd in de kop
- Binnenchip · een component binnen die grens
- Gestippeld vak · buiten die grens
- Oranje omlijning · waar een model beslist
- Agentaanroep · herstelaanroep
- Toestand · vastleggingen
- Stilstandscontrole · bovengrens
- Verzameling · plaatsing
Getekend op basis van niet-openbare implementatie- en ontwikkelverslagen. Team-, issue- en Slack-ID’s en oorspronkelijke berichten worden niet getoond; uitrol, containers en inloggegevens vallen onder een eigenaar buiten deze plugin.
- Eén observatie
- Rapport van April 28, 2026: bij een handmatige diagnose vóór de wijziging werd voor één issue dat 67 uur niet had gedraaid de toewijzing opnieuw aangevraagd met het issue en de toegewezene, en binnen 5 seconden stond er een nieuwe run in de wachtrij. Voltooiing, gemiddelde hersteltijd en effect na de uitrol zijn niet gemeten.
- Beperkingen van de goedkeuringsafhandeling
- Anders dan de herstelaanroep markeert de goedkeuringsafhandeling de koppeling als goedgekeurd zonder de responscode te controleren. Ze wordt niet beschreven als een atomaire of fail-closed goedkeuringstransactie.
- Wanneer de limiet standhoudt
- De limiet van 3 aanroepen is een implementatie die standhoudt als state-hooks aanwezig zijn. Ze garandeert niet precies één escalatie bij elke mislukking.