
Kiki
Робочі сигнали й виконання агентами
Щоб пропозиція стала виконанням у відповідального.
Плагін Paperclip і збирач Slack, що допомагають команді керувати своїми AI-агентами.
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
Між призначенням і фактичним виконанням — шлях для спостереження й відновлення.
Робочі сигнали стають профілями й директивами агентам, а схвалення пропозиції з обслуговування тримається окремо від призначення її виконання. Коли активність призначеної задачі зупиняється, її запитують знову із задачею й відповідальним, а повторна відсутність відповіді веде до ліміту, cooldown і рішення людини.
Вони перетворюють робочі сигнали на директиви агентам і з’єднують пропозиції з обслуговування, схвалення людиною, призначення й відновлення завислих запусків як окремі кроки. Я спланував і розробив цей потік.
Перший запис у репозиторії April 3, 2026 · співпраця з pinxlab до May 26, 2026
Працює як плагін усередині Paperclip команди; збиранням зі Slack займається MCP-сервер.
Сигнали → директиви
Профілі й директиви агентам будуються з історії Slack. Директиви — це контекст агента, і їх не показано як причину будь-якої пропозиції.
Сигнали SlackДані: історія каналівВитягування шаблонів · без ботів
Збирання сигналівЗбирається доступна історія каналів, а повідомлення ботів, про приєднання й вихід відфільтровуються. Оригінальні повідомлення на цій сторінці не показано.
Витягування шаблонів · без ботів
Збирання сигналівДані: об’єднання профілюОб’єднання профілю компаніїСтан компаніїВитягнуті шаблони стають патчем профілю, що об’єднується з профілем компанії. Це евристичні шаблони, а не оцінки продуктивності працівників.
Об’єднання профілю компанії
Стан компаніїДані: перегенеруванняДирективи для кожного агентаСтан агентаДирективи для кожного агента перегенеровуються з об’єднаного профілю й зберігаються.
Директиви для кожного агента
Стан агентаЗапуск · рішення: директиви на вхідПризначений агентДирективи потрапляють у контекст агента під час його створення. Це не означає, що певна пропозиція походить від певного сигналу Slack.
Пропозиція → схвалення → призначення
Пропозиція спершу існує як непризначена задача в backlog, реакція людини запитує зміну статусу, а призначення й виконання належать зовнішній системі.
Цільовий проєктДані: обсяг ціліВиклик PO · обмежений промпт
Аналіз обслуговуванняЗавдання з обслуговування викликає агента PO з промптом, обмеженим цільовим проєктом. Вміст джерел не показано.
Виклик PO · обмежений промпт
Аналіз обслуговуванняДані: задача-пропозиціяПропозиція · backlogТрекер задачПромпт вимагає пропозицій лише з перевіреними шляхами, у вигляді непризначених задач у backlog, і забороняє запускати міграції БД. Це інструкція продуктовому агентові, а не детермінований механізм примусу.
Пропозиція · backlog
Трекер задачДані: публікація пропозиціїВідповідність повідомлення ↔ задачіПублікація пропозиційКожну пропозицію публікують у Slack, а відповідність повідомлення задачі зберігають. Уже опубліковані пропозиції повторно не публікуються, а збережена відповідність тримає останні 50.
Відповідність повідомлення ↔ задачі
Публікація пропозиційДані: повідомлення SlackЛюдина · схвалення, відхиленняЛюдина бачить опубліковану пропозицію в Slack.
Людина · схвалення, відхиленняЗапуск · рішення: реакціяВідповідність повідомлення ↔ задачі
Публікація пропозиційРеакція на повідомлення знаходить задачу через відповідність. Автоматичного схвалення немає.
Відповідність повідомлення ↔ задачі
Публікація пропозиційЗапуск · рішення: схвалити → todoЗадача на виконання · todoТрекер задачУ разі схвалення надсилається запит перевести задачу-пропозицію, що очікує, у todo, а відповідність і сповіщення в треді оновлюються. Цей обробник позначає відповідність як схвалену, не перевіряючи код відповіді, тож це не транзакція, що закривається на збої.
Відповідність повідомлення ↔ задачі
Публікація пропозиційЗапуск · рішення: відхилити → cancelledПропозиція · backlogТрекер задачУ разі відхилення надсилається запит перевести ту саму задачу в cancelled. Задача існувала до схвалення; схвалення її не створює.
Задача на виконання · todo
Трекер задачЗапуск · рішення: призначенняПризначений агентПризначення й виконання задачі в todo належать зовнішній системі виконання. Переведення задачі в todo не гарантує, що робота почалася.
Застій → відновлення → людина
Призначену задачу, активність якої зупинилася, запитують знову із задачею й відповідальним; коли кількість поспіль відсутніх відповідей досягає ліміту, вона переходить до людини.
Призначений агентСпостереження · звіт: записи запусківНещодавні запуски · активність
Спостереження запусківЗапуски призначеного агента й нещодавні сигнали записуються як спостереження. Активність не є доказом завершення.
Нещодавні запуски · активність
Спостереження запусківСпостереження · звіт: остання активністьПеревірка застою · heartbeatStage reaperReaper переглядає лише задачі, що не мають статусу done, cancelled чи blocked і мають відповідального, та обчислює вік останнього сигналу й етапу.
Перевірка застою · heartbeat
Stage reaperДані: немає відповіді +1Відсутні відповіді · за задачеюСтан відсутніх відповідейПоспіль відсутні відповіді рахуються для кожної пари агент–задача й зберігаються в стані.
Нещодавні запуски · активність
Спостереження запусківСпостереження · звіт: нова активність → скиданняВідсутні відповіді · за задачеюСтан відсутніх відповідейНова активність скидає лічильник.
Перевірка застою · heartbeat
Stage reaperЗапуск · рішення: повторний викликЗадача + відповідальнийВиклик відновленняЯкщо heartbeat перевищено, а лічильник нижчий за ліміт, виконується виклик відновлення.
Задача + відповідальний
Виклик відновленняЗапуск · рішення: задача + відповідальнийЗадача на виконання · todoТрекер задачПризначення запитують знову із задачею, призначеним агентом і пояснювальним коментарем, і HTTP-відповідь перевіряється. Застарілий шлях замість цього робить один виклик пробудження.
Відсутні відповіді · за задачею
Стан відсутніх відповідейЗбій · ліміт: після 3Припинити повторні виклики · cooldownЛімітКоли кількість поспіль відсутніх відповідей досягає ліміту (типово 3), повторні виклики припиняються. Ліміт діє лише тоді, коли hooks стану читають і записують лічильник, і невдале збереження може його послабити.
Припинити повторні виклики · cooldown
ЛімітЗапуск · рішення: перепризначення · сповіщенняКерівник · операторЯкщо можливо, перепризначає керівникові й повертає in_progress у todo лише тоді, коли цю функцію ввімкнено. Інакше залишає коментар і сповіщення best-effort, а після ліміту записує cooldown.
Перевірка застою · heartbeat
Stage reaperСпостереження · звіт: лише попередженняКерівник · операторКоли етап триває надто довго, операторам лишається тільки коментар-попередження. Статус автоматично не змінюється.
Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.
- Суцільна · напрямок входів, результатів і записів
- Штрихова · запуск, рішення, запит
- Довга пунктирна · спостереження й звітування, окремо від рішення
- Коротка штрихова · збій, зупинка, ліміт
- Товста чорна лінія · обраний потік; номери показують порядок
- Рамка · межа коду чи стану, названа в заголовку
- Внутрішня плашка · компонент цієї межі
- Пунктирна рамка · поза цією межею
- Помаранчевий контур · де вирішує модель
- Виклик агента · виклик відновлення
- Стан · записи
- Перевірка застою · ліміт
- Збирання · публікація
Накреслено за закритими записами реалізації й розробки. Ідентифікатори команди, задач і Slack та оригінальні повідомлення не показано; розгортання, контейнери й облікові дані належать власникові поза цим плагіном.
- Одне спостереження
- Звіт від April 28, 2026: під час ручної діагностики до зміни для однієї задачі, яка не виконувалася 67 годин, призначення запитали знову із задачею й відповідальним, і новий запуск став у чергу протягом 5 секунд. Завершення, середній час відновлення й ефект після впровадження не вимірювали.
- Межі обробки схвалення
- На відміну від виклику відновлення, обробка схвалення позначає відповідність як схвалену, не перевіряючи код відповіді. Її не описано як атомарну чи закриту на збої транзакцію схвалення.
- Коли діє ліміт
- Ліміт у 3 виклики — реалізація, що діє за наявності hooks стану. Він не гарантує рівно однієї ескалації за будь-якого збою.