Rostro recortado con fondo transparente, derivado de la imagen del gato Kiki proporcionada por el autor
Volver a la sala

Kiki

Señales de trabajo y ejecución de agentes

Para que una propuesta se convierta en la ejecución del asignado.

Un plugin de Paperclip y un recolector de Slack que ayudan a un equipo a operar sus agentes de IA.

2026.04 — 2026.05

pinxlab, I+D en IA independiente · planificación y desarrollo de flujos de trabajo, investigación de ejecuciones estancadas y diseño de la ruta de recuperación

  • PluginImplementado · Paperclip
  • Servidor MCPImplementado · Recolector de 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 la asignación y la ejecución real, una ruta para observar y recuperar.

Las señales de trabajo se convierten en perfiles y directivas para los agentes, y la aprobación de una propuesta de mantenimiento se mantiene aparte de la asignación de su ejecución. Cuando la actividad de una incidencia asignada se detiene, se vuelve a solicitar con la incidencia y el asignado, y las no respuestas repetidas llevan a un límite, un enfriamiento y el juicio de una persona.

Convierten señales de trabajo en directivas para los agentes y conectan, como pasos separados, propuestas de mantenimiento, aprobación humana, asignación y recuperación de ejecuciones estancadas. Planifiqué y desarrollé este flujo.

Primer registro del repositorio el April 3, 2026 · colaboración con pinxlab hasta el May 26, 2026

Funciona como plugin dentro del Paperclip del equipo; un servidor MCP se encarga de la recolección de Slack.

Mapa del flujo de ejecución · según registros de implementación privados
Kiki: señales · aprobación · recuperación de la ejecuciónSe extraen patrones de trabajo del historial de los canales de Slack accesibles para crear perfiles de empresa y directivas por agente. Un agente de análisis de mantenimiento examina un proyecto de destino y deja propuestas como incidencias de backlog sin asignar; cada propuesta se publica en Slack, donde una persona la aprueba o la rechaza con una reacción. Cuando una incidencia aprobada se asigna a un agente, un sistema de ejecución externo hace el trabajo y un stage reaper vigila la actividad reciente. Si la actividad se detiene, se vuelve a solicitar la asignación con la incidencia y el asignado; cuando las no respuestas consecutivas alcanzan el límite, se dejan de repetir las llamadas y el caso pasa a un lead o a un operador.Señales de SlackHistorial de canales accesiblesAgente asignadoEjecución externaProyecto de destinoContenido no mostradoPersona · aprobar, rechazarReacción en SlackLead · operadorReasignar · notificarRecolección de señalesExtracción de patrones · sin botsEstado de la empresaFusión del perfil de empresaEstado de los agentesDirectivas por agenteObservación de ejecucionesEjecuciones recientes · actividadAnálisis de mantenimientoLlamada al PO · prompt acotadoGestor de incidenciasPropuesta · backlogIncidencia de ejecución · todoPublicación de propuestasMapeo mensaje ↔ incidenciaStage reaperDetección de estancamiento · heartbeatLlamada de recuperaciónIncidencia + asignadoEstado de no respuestasNo respuestas · por incidenciaLímiteDetener llamadas · enfriamientoSeñales → directivasEjecución externaPropuesta → aprobación humanaRecuperación · escalamiento1 historial de canales · Señales de Slack → Extracción de patrones · sin bots12 fusión del perfil · Extracción de patrones · sin bots → Fusión del perfil de empresa23regenerar4 inyección de directivas · Directivas por agente → Agente asignado41 alcance de destino · Proyecto de destino → Llamada al PO · prompt acotado12 incidencia de propuesta · Llamada al PO · prompt acotado → Propuesta · backlog23publicar la propuesta4Mensaje de Slack5reacción6aprobar → todo7rechazar → cancelled8asignación1registros de ejecución2última actividad3sin respuesta +14nueva actividad → reinicio5 nueva llamada · Detección de estancamiento · heartbeat → Incidencia + asignado56incidencia + asignado7tras 38reasignar · notificar9solo advertencia

Señales → directivas

Los perfiles y las directivas de agentes se construyen a partir del historial de Slack. Las directivas son contexto del agente y no se dibujan como causa de ninguna propuesta.

  1. Señales de SlackDatos: historial de canalesExtracción de patrones · sin botsRecolección de señales

    Se recolecta el historial de los canales accesibles y se filtran los mensajes de bots, de entrada y de salida. Los mensajes originales no se muestran en esta página.

  2. Extracción de patrones · sin botsRecolección de señalesDatos: fusión del perfilFusión del perfil de empresaEstado de la empresa

    Los patrones extraídos se convierten en un parche de perfil que se fusiona en el perfil de la empresa. Son patrones heurísticos, no puntuaciones de desempeño de empleados.

  3. Fusión del perfil de empresaEstado de la empresaDatos: regenerarDirectivas por agenteEstado de los agentes

    Las directivas por agente se regeneran a partir del perfil fusionado y se guardan.

  4. Directivas por agenteEstado de los agentesEjecución · juicio: inyección de directivasAgente asignado

    Las directivas entran en el contexto de un agente cuando se crea. Esto no significa que una propuesta concreta venga de una señal de Slack concreta.

Propuesta → aprobación → asignación

Una propuesta existe primero como incidencia de backlog sin asignar, la reacción de una persona pide un cambio de estado, y la asignación y la ejecución corresponden al sistema externo.

  1. Proyecto de destinoDatos: alcance de destinoLlamada al PO · prompt acotadoAnálisis de mantenimiento

    El trabajo de mantenimiento llama al agente PO con un prompt acotado al proyecto de destino. No se muestra el contenido de las fuentes.

  2. Llamada al PO · prompt acotadoAnálisis de mantenimientoDatos: incidencia de propuestaPropuesta · backlogGestor de incidencias

    El prompt pide propuestas solo con rutas verificadas, como incidencias de backlog sin asignar, y prohíbe ejecutar migraciones de base de datos. Es una instrucción para un agente del producto, no un mecanismo de cumplimiento determinista.

  3. Propuesta · backlogGestor de incidenciasDatos: publicar la propuestaMapeo mensaje ↔ incidenciaPublicación de propuestas

    Cada propuesta se publica en Slack y se guarda el mapeo de mensaje a incidencia. Las propuestas ya publicadas no se vuelven a publicar, y el mapeo guardado conserva las 50 más recientes.

  4. Mapeo mensaje ↔ incidenciaPublicación de propuestasDatos: Mensaje de SlackPersona · aprobar, rechazar

    Una persona ve la propuesta publicada en Slack.

  5. Persona · aprobar, rechazarEjecución · juicio: reacciónMapeo mensaje ↔ incidenciaPublicación de propuestas

    Una reacción en el mensaje encuentra la incidencia mediante el mapeo. No hay aprobación automática.

  6. Mapeo mensaje ↔ incidenciaPublicación de propuestasEjecución · juicio: aprobar → todoIncidencia de ejecución · todoGestor de incidencias

    Al aprobar, se envía una solicitud para pasar la incidencia de propuesta pendiente a todo, y se actualizan el mapeo y el aviso del hilo. Este manejo marca el mapeo como aprobado sin comprobar el código de respuesta, así que no es una transacción cerrada ante fallo.

  7. Mapeo mensaje ↔ incidenciaPublicación de propuestasEjecución · juicio: rechazar → cancelledPropuesta · backlogGestor de incidencias

    Al rechazar, se envía una solicitud para pasar la misma incidencia a cancelled. La incidencia existía antes de la aprobación; la aprobación no la crea.

  8. Incidencia de ejecución · todoGestor de incidenciasEjecución · juicio: asignaciónAgente asignado

    La asignación y ejecución de una incidencia todo corresponden al sistema de ejecución externo. Pasar una incidencia a todo no garantiza que el trabajo haya empezado.

Estancamiento → recuperación → persona

Una incidencia asignada cuya actividad se detuvo se vuelve a solicitar con la incidencia y el asignado; cuando las no respuestas consecutivas alcanzan el límite, pasa a una persona.

  1. Agente asignadoObservación · informe: registros de ejecuciónEjecuciones recientes · actividadObservación de ejecuciones

    Las ejecuciones del agente asignado y las señales recientes se registran como observaciones. La actividad no es evidencia de finalización.

  2. Ejecuciones recientes · actividadObservación de ejecucionesObservación · informe: última actividadDetección de estancamiento · heartbeatStage reaper

    El reaper solo mira las incidencias que no están done, cancelled ni blocked y que tienen un asignado, y calcula la antigüedad de la última señal y de la etapa.

  3. Detección de estancamiento · heartbeatStage reaperDatos: sin respuesta +1No respuestas · por incidenciaEstado de no respuestas

    Las no respuestas consecutivas se cuentan por agente e incidencia y se guardan en el estado.

  4. Ejecuciones recientes · actividadObservación de ejecucionesObservación · informe: nueva actividad → reinicioNo respuestas · por incidenciaEstado de no respuestas

    Una nueva actividad reinicia el contador.

  5. Detección de estancamiento · heartbeatStage reaperEjecución · juicio: nueva llamadaIncidencia + asignadoLlamada de recuperación

    Si se supera el heartbeat y el contador está por debajo del límite, se hace una llamada de recuperación.

  6. Incidencia + asignadoLlamada de recuperaciónEjecución · juicio: incidencia + asignadoIncidencia de ejecución · todoGestor de incidencias

    Se vuelve a solicitar la asignación con la incidencia, el agente asignado y un comentario explicativo, y se comprueba la respuesta HTTP. Una ruta legacy recurre a una sola llamada de activación.

  7. No respuestas · por incidenciaEstado de no respuestasFallo · límite: tras 3Detener llamadas · enfriamientoLímite

    Cuando las no respuestas consecutivas alcanzan el límite (3 por defecto), se dejan de repetir las llamadas. El límite solo se mantiene cuando hay hooks de estado que leen y escriben el contador, y un guardado fallido puede debilitarlo.

  8. Detener llamadas · enfriamientoLímiteEjecución · juicio: reasignar · notificarLead · operador

    Reasigna a un lead si es posible, y solo devuelve in_progress a todo cuando esa función está activada. Si no, deja un comentario y una notificación best-effort, y registra un enfriamiento tras el límite.

  9. Detección de estancamiento · heartbeatStage reaperObservación · informe: solo advertenciaLead · operador

    Cuando una etapa dura demasiado, solo se deja un comentario de advertencia para los operadores. El estado no se cambia automáticamente.

Todas las conexiones con el mismo grosor. Elija un flujo para resaltar solo su recorrido, con pasos numerados.

  • Continua · dirección de entradas, resultados y registros
  • Discontinua · ejecución, juicio, solicitud
  • Puntos largos · observación e informe, aparte del juicio
  • Guiones cortos · fallo, parada, límite
  • Línea negra gruesa · el flujo seleccionado; los números dan el orden
  • Recuadro · frontera de código o de estado, con su nombre en la cabecera
  • Chip interior · componente de esa frontera
  • Recuadro punteado · fuera de esa frontera
  • Contorno naranja · donde decide un modelo
  • Llamada al agente · llamada de recuperación
  • Estado · registros
  • Detección de estancamiento · límite
  • Recolección · publicación

Dibujado a partir de registros privados de implementación y desarrollo. No se muestran identificadores de equipo, incidencias ni Slack, ni mensajes originales; el despliegue, los contenedores y las credenciales corresponden a un responsable ajeno a este plugin.

Una observación
Informe del April 28, 2026: en un diagnóstico manual previo al cambio, a una incidencia que llevaba 67 horas sin ejecutarse se le volvió a solicitar la asignación con la incidencia y el asignado, y una nueva ejecución entró en cola en menos de 5 segundos. No se midieron la finalización, el tiempo medio de recuperación ni el efecto tras el despliegue.
Límites del manejo de la aprobación
A diferencia de la llamada de recuperación, el manejo de la aprobación marca el mapeo como aprobado sin comprobar el código de respuesta. No se describe como una transacción de aprobación atómica ni cerrada ante fallo.
Cuándo se mantiene el límite
El límite de 3 llamadas es una implementación que se mantiene cuando hay hooks de estado. No garantiza exactamente un escalamiento ante cada fallo.