
Kiki
Sinais de trabalho e execução de agentes
Para que uma proposta vire a execução do responsável.
Um plugin do Paperclip e um coletor do Slack que ajudam uma equipe a operar seus agentes de 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
Entre a atribuição e a execução real, um caminho para observar e recuperar.
Os sinais de trabalho viram perfis e diretivas para os agentes, e a aprovação de uma proposta de manutenção fica à parte da atribuição de sua execução. Quando a atividade de uma issue atribuída para, ela é pedida de novo com a issue e o responsável, e não respostas repetidas levam a um limite, a um cooldown e ao julgamento de uma pessoa.
Eles transformam sinais de trabalho em diretivas para agentes e conectam, como etapas separadas, propostas de manutenção, aprovação humana, atribuição e recuperação de execuções travadas. Planejei e desenvolvi este fluxo.
Primeiro registro do repositório em April 3, 2026 · contrato com a pinxlab até May 26, 2026
Roda como plugin dentro do Paperclip da equipe; um servidor MCP cuida da coleta do Slack.
Sinais → diretivas
Perfis e diretivas de agentes são construídos a partir do histórico do Slack. As diretivas são contexto do agente e não são desenhadas como causa de nenhuma proposta.
Sinais do SlackDados: histórico de canaisExtração de padrões · sem bots
Coleta de sinaisO histórico dos canais acessíveis é coletado e mensagens de bots, de entrada e de saída são filtradas. As mensagens originais não são mostradas nesta página.
Extração de padrões · sem bots
Coleta de sinaisDados: mesclagem do perfilMesclagem do perfil da empresaEstado da empresaOs padrões extraídos viram um patch de perfil mesclado ao perfil da empresa. São padrões heurísticos, não pontuações de desempenho de funcionários.
Mesclagem do perfil da empresa
Estado da empresaDados: regenerarDiretivas por agenteEstado dos agentesAs diretivas por agente são regeneradas a partir do perfil mesclado e armazenadas.
Diretivas por agente
Estado dos agentesExecução · julgamento: injeção de diretivasAgente responsávelAs diretivas entram no contexto de um agente quando ele é criado. Isso não significa que uma proposta específica veio de um sinal específico do Slack.
Proposta → aprovação → atribuição
Uma proposta existe primeiro como issue de backlog sem responsável, a reação de uma pessoa pede uma mudança de status, e a atribuição e a execução cabem ao sistema externo.
Projeto-alvoDados: escopo-alvoChamada ao PO · prompt delimitado
Análise de manutençãoO job de manutenção chama o agente PO com um prompt delimitado ao projeto-alvo. O conteúdo das fontes não é mostrado.
Chamada ao PO · prompt delimitado
Análise de manutençãoDados: issue de propostaProposta · backlogRastreador de issuesO prompt pede propostas só com caminhos verificados, como issues de backlog sem responsável, e proíbe executar migrations de banco de dados. É uma instrução a um agente do produto, não um mecanismo de imposição determinístico.
Proposta · backlog
Rastreador de issuesDados: publicar a propostaMapeamento mensagem ↔ issuePublicação de propostasCada proposta é publicada no Slack e o mapeamento mensagem-issue é armazenado. Propostas já publicadas não são publicadas de novo, e o mapeamento armazenado guarda as 50 mais recentes.
Mapeamento mensagem ↔ issue
Publicação de propostasDados: Mensagem do SlackPessoa · aprovar, recusarUma pessoa vê a proposta publicada no Slack.
Pessoa · aprovar, recusarExecução · julgamento: reaçãoMapeamento mensagem ↔ issue
Publicação de propostasUma reação na mensagem encontra a issue pelo mapeamento. Não há aprovação automática.
Mapeamento mensagem ↔ issue
Publicação de propostasExecução · julgamento: aprovar → todoIssue de execução · todoRastreador de issuesNa aprovação, é enviado um pedido para mudar a issue de proposta pendente para todo, e o mapeamento e o aviso da thread são atualizados. Esse tratamento marca o mapeamento como aprovado sem verificar o código de resposta, então não é uma transação fechada em caso de falha.
Mapeamento mensagem ↔ issue
Publicação de propostasExecução · julgamento: recusar → cancelledProposta · backlogRastreador de issuesNa recusa, é enviado um pedido para mudar a mesma issue para cancelled. A issue existia antes da aprovação; a aprovação não a cria.
Issue de execução · todo
Rastreador de issuesExecução · julgamento: atribuiçãoAgente responsávelA atribuição e a execução de uma issue todo cabem ao sistema de execução externo. Mudar uma issue para todo não garante que o trabalho começou.
Travamento → recuperação → pessoa
Uma issue atribuída cuja atividade parou é pedida de novo com a issue e o responsável; quando as não respostas consecutivas atingem o limite, ela vai para uma pessoa.
Agente responsávelObservação · relatório: registros de execuçãoExecuções recentes · atividade
Observação das execuçõesAs execuções do agente responsável e os sinais recentes são registrados como observações. Atividade não é evidência de conclusão.
Execuções recentes · atividade
Observação das execuçõesObservação · relatório: última atividadeDetecção de travamento · heartbeatStage reaperO reaper só olha issues que não estão done, cancelled ou blocked e que têm responsável, e calcula a idade do último sinal e da etapa.
Detecção de travamento · heartbeat
Stage reaperDados: sem resposta +1Não respostas · por issueEstado de não respostasAs não respostas consecutivas são contadas por agente e issue e armazenadas no estado.
Execuções recentes · atividade
Observação das execuçõesObservação · relatório: nova atividade → resetNão respostas · por issueEstado de não respostasUma nova atividade zera a contagem.
Detecção de travamento · heartbeat
Stage reaperExecução · julgamento: nova chamadaIssue + responsávelChamada de recuperaçãoSe o heartbeat for excedido e a contagem estiver abaixo do limite, é feita uma chamada de recuperação.
Issue + responsável
Chamada de recuperaçãoExecução · julgamento: issue + responsávelIssue de execução · todoRastreador de issuesA atribuição é pedida de novo com a issue, o agente responsável e um comentário explicativo, e a resposta HTTP é verificada. Um caminho legado recorre a uma única chamada de acionamento.
Não respostas · por issue
Estado de não respostasFalha · limite: após 3Parar novas chamadas · cooldownLimiteQuando as não respostas consecutivas atingem o limite (3 por padrão), as novas chamadas param. O limite só vale quando hooks de estado leem e gravam a contagem, e uma falha ao salvar pode enfraquecê-lo.
Parar novas chamadas · cooldown
LimiteExecução · julgamento: reatribuir · notificarLead · operadorReatribui a um lead quando possível, e só volta in_progress para todo quando esse recurso está ativado. Senão, deixa um comentário e uma notificação best-effort, e registra um cooldown após o limite.
Detecção de travamento · heartbeat
Stage reaperObservação · relatório: só avisoLead · operadorQuando uma etapa dura demais, só um comentário de aviso é deixado para os operadores. O status não é alterado automaticamente.
Todas as conexões com a mesma espessura. Escolha um fluxo para destacar só o caminho dele, com etapas numeradas.
- Contínua · direção de entradas, resultados e registros
- Tracejada · execução, julgamento, requisição
- Pontos longos · observação e relatório, à parte do julgamento
- Traços curtos · falha, parada, limite
- Linha preta grossa · o fluxo selecionado; os números dão a ordem
- Caixa · fronteira de código ou de estado, com o nome no cabeçalho
- Chip interno · componente dessa fronteira
- Caixa pontilhada · fora dessa fronteira
- Contorno laranja · onde um modelo decide
- Chamada ao agente · chamada de recuperação
- Estado · registros
- Detecção de travamento · limite
- Coleta · publicação
Desenhado a partir de registros privados de implementação e desenvolvimento. Identificadores de equipe, issues e Slack e mensagens originais não são mostrados; implantação, contêineres e credenciais cabem a um responsável fora deste plugin.
- Uma observação
- Relatório de April 28, 2026: em um diagnóstico manual antes da mudança, uma issue que não rodava havia 67 horas teve a atribuição pedida de novo com a issue e o responsável, e uma nova execução entrou na fila em menos de 5 segundos. Conclusão, tempo médio de recuperação e efeito após a implantação não foram medidos.
- Limites do tratamento da aprovação
- Ao contrário da chamada de recuperação, o tratamento da aprovação marca o mapeamento como aprovado sem verificar o código de resposta. Ele não é descrito como uma transação de aprovação atômica ou fechada em caso de falha.
- Quando o limite vale
- O limite de 3 chamadas é uma implementação que vale quando há hooks de estado. Não garante exatamente um escalonamento em toda falha.