Rosto recortado com fundo transparente, derivado da imagem do gato Kiki fornecida pelo autor
Voltar à sala

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.

2026.04 — 2026.05

pinxlab, P&D em IA como freelancer · planejamento e desenvolvimento de fluxos de trabalho, investigação de execuções travadas e desenho do caminho de recuperação

  • PluginImplementado · Paperclip
  • Servidor MCPImplementado · Coletor do 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

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.

Mapa do fluxo de execução · a partir de registros de implementação privados
Kiki: sinais · aprovação · recuperação da execuçãoPadrões de trabalho são extraídos do histórico de canais do Slack acessíveis para criar perfis de empresa e diretivas por agente. Um agente de análise de manutenção examina um projeto-alvo e deixa propostas como issues de backlog sem responsável; cada proposta é publicada no Slack, onde uma pessoa a aprova ou recusa com uma reação. Quando uma issue aprovada é atribuída a um agente, um sistema de execução externo faz o trabalho e um stage reaper observa a atividade recente. Se a atividade para, a atribuição é pedida de novo com a issue e o responsável; quando as não respostas consecutivas atingem o limite, as novas chamadas param e o caso vai para um lead ou operador.Sinais do SlackHistórico de canais acessíveisAgente responsávelExecução externaProjeto-alvoConteúdo não mostradoPessoa · aprovar, recusarReação no SlackLead · operadorReatribuir · notificarColeta de sinaisExtração de padrões · sem botsEstado da empresaMesclagem do perfil da empresaEstado dos agentesDiretivas por agenteObservação das execuçõesExecuções recentes · atividadeAnálise de manutençãoChamada ao PO · prompt delimitadoRastreador de issuesProposta · backlogIssue de execução · todoPublicação de propostasMapeamento mensagem ↔ issueStage reaperDetecção de travamento · heartbeatChamada de recuperaçãoIssue + responsávelEstado de não respostasNão respostas · por issueLimiteParar novas chamadas · cooldownSinais → diretivasExecução externaProposta → aprovação humanaRecuperação · escalonamento1 histórico de canais · Sinais do Slack → Extração de padrões · sem bots12 mesclagem do perfil · Extração de padrões · sem bots → Mesclagem do perfil da empresa23regenerar4 injeção de diretivas · Diretivas por agente → Agente responsável41 escopo-alvo · Projeto-alvo → Chamada ao PO · prompt delimitado12 issue de proposta · Chamada ao PO · prompt delimitado → Proposta · backlog23publicar a proposta4Mensagem do Slack5reação6aprovar → todo7recusar → cancelled8atribuição1registros de execução2última atividade3sem resposta +14nova atividade → reset5 nova chamada · Detecção de travamento · heartbeat → Issue + responsável56issue + responsável7após 38reatribuir · notificar9só aviso

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.

  1. Sinais do SlackDados: histórico de canaisExtração de padrões · sem botsColeta de sinais

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

  2. Extração de padrões · sem botsColeta de sinaisDados: mesclagem do perfilMesclagem do perfil da empresaEstado da empresa

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

  3. Mesclagem do perfil da empresaEstado da empresaDados: regenerarDiretivas por agenteEstado dos agentes

    As diretivas por agente são regeneradas a partir do perfil mesclado e armazenadas.

  4. Diretivas por agenteEstado dos agentesExecução · julgamento: injeção de diretivasAgente responsável

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

  1. Projeto-alvoDados: escopo-alvoChamada ao PO · prompt delimitadoAnálise de manutenção

    O job de manutenção chama o agente PO com um prompt delimitado ao projeto-alvo. O conteúdo das fontes não é mostrado.

  2. Chamada ao PO · prompt delimitadoAnálise de manutençãoDados: issue de propostaProposta · backlogRastreador de issues

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

  3. Proposta · backlogRastreador de issuesDados: publicar a propostaMapeamento mensagem ↔ issuePublicação de propostas

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

  4. Mapeamento mensagem ↔ issuePublicação de propostasDados: Mensagem do SlackPessoa · aprovar, recusar

    Uma pessoa vê a proposta publicada no Slack.

  5. Pessoa · aprovar, recusarExecução · julgamento: reaçãoMapeamento mensagem ↔ issuePublicação de propostas

    Uma reação na mensagem encontra a issue pelo mapeamento. Não há aprovação automática.

  6. Mapeamento mensagem ↔ issuePublicação de propostasExecução · julgamento: aprovar → todoIssue de execução · todoRastreador de issues

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

  7. Mapeamento mensagem ↔ issuePublicação de propostasExecução · julgamento: recusar → cancelledProposta · backlogRastreador de issues

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

  8. Issue de execução · todoRastreador de issuesExecução · julgamento: atribuiçãoAgente responsável

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

  1. Agente responsávelObservação · relatório: registros de execuçãoExecuções recentes · atividadeObservação das execuções

    As execuções do agente responsável e os sinais recentes são registrados como observações. Atividade não é evidência de conclusão.

  2. Execuções recentes · atividadeObservação das execuçõesObservação · relatório: última atividadeDetecção de travamento · heartbeatStage reaper

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

  3. Detecção de travamento · heartbeatStage reaperDados: sem resposta +1Não respostas · por issueEstado de não respostas

    As não respostas consecutivas são contadas por agente e issue e armazenadas no estado.

  4. Execuções recentes · atividadeObservação das execuçõesObservação · relatório: nova atividade → resetNão respostas · por issueEstado de não respostas

    Uma nova atividade zera a contagem.

  5. Detecção de travamento · heartbeatStage reaperExecução · julgamento: nova chamadaIssue + responsávelChamada de recuperação

    Se o heartbeat for excedido e a contagem estiver abaixo do limite, é feita uma chamada de recuperação.

  6. Issue + responsávelChamada de recuperaçãoExecução · julgamento: issue + responsávelIssue de execução · todoRastreador de issues

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

  7. Não respostas · por issueEstado de não respostasFalha · limite: após 3Parar novas chamadas · cooldownLimite

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

  8. Parar novas chamadas · cooldownLimiteExecução · julgamento: reatribuir · notificarLead · operador

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

  9. Detecção de travamento · heartbeatStage reaperObservação · relatório: só avisoLead · operador

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