
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
割り当てと実際の実行のあいだの、観測と復旧の経路
業務シグナルをプロフィールとエージェントへの指示に変え、保守の提案の承認と実行の割り当てを分けています。割り当て済みのイシューの活動が止まると、イシューと担当者を含めて再び要求し、繰り返される無応答は上限、クールダウン、人の判断へと送ります。
業務シグナルをエージェントへの指示に変え、保守の提案、人による承認、担当の割り当て、停滞した実行の復旧を、それぞれ別の段階としてつなぎます。この流れを企画・開発しました。
リポジトリの最初の記録 April 3, 2026 · pinxlabへの参加 May 26, 2026まで
チームのPaperclip内でプラグインとして動作し、Slackの収集はMCPサーバーが担います。
シグナル → 指示
Slackの履歴からプロフィールとエージェントへの指示を作ります。指示はエージェントのコンテキストであり、どの提案の原因としても描いていません。
Slackのシグナルデータ: チャンネル履歴パターン抽出 · botを除外
シグナルの収集アクセスできるチャンネルの履歴を収集し、bot、参加、退出のメッセージは除外します。元のメッセージはこのページに載せていません。
パターン抽出 · botを除外
シグナルの収集データ: プロフィールのマージ会社プロフィールのマージ会社の状態抽出したパターンはプロフィールのパッチとなり、会社プロフィールにマージされます。ヒューリスティックなパターンであり、従業員の業績評価ではありません。
会社プロフィールのマージ
会社の状態データ: 再生成エージェントごとの指示エージェントの状態マージしたプロフィールから、エージェントごとの指示を再生成して保存します。
エージェントごとの指示
エージェントの状態実行 · 判定: 指示の注入担当エージェント指示は、エージェントの作成時にそのコンテキストに入ります。特定の提案が特定のSlackシグナルから生まれたという意味ではありません。
提案 → 承認 → 割り当て
提案はまず担当者のいないbacklogのイシューとして生まれ、人のリアクションが状態の変更を要求し、割り当てと実行は外部のシステムが担います。
対象プロジェクトデータ: 対象のスコープPO呼び出し · スコープを限ったプロンプト
保守分析保守ジョブは、対象プロジェクトにスコープを限ったプロンプトでPOエージェントを呼び出します。ソースの内容は表示しません。
PO呼び出し · スコープを限ったプロンプト
保守分析データ: 提案イシュー提案 · backlogイシュートラッカープロンプトは、確認済みのパスだけを含む提案を担当者のいないbacklogのイシューとして作り、DBの移行を実行しないよう求めます。決定論的に強制する仕組みではなく、製品のエージェントへの指示です。
提案 · backlog
イシュートラッカーデータ: 提案を投稿メッセージ ↔ イシューの対応表提案の投稿各提案をSlackに投稿し、メッセージとイシューの対応を保存します。投稿済みの提案は再投稿せず、保存する対応表は最新の50件です。
メッセージ ↔ イシューの対応表
提案の投稿データ: Slackメッセージ人 · 承認、却下人は投稿された提案をSlackで見ます。
人 · 承認、却下実行 · 判定: リアクションメッセージ ↔ イシューの対応表
提案の投稿メッセージへのリアクションから、対応表でイシューを見つけます。自動承認はありません。
メッセージ ↔ イシューの対応表
提案の投稿実行 · 判定: 承認 → todo実行イシュー · todoイシュートラッカー承認されると、保留中の提案イシューをtodoへ移すよう要求し、対応表とスレッドの通知を更新します。このハンドラはレスポンスコードを確認せずに対応表を承認済みにするため、フェイルクローズドのトランザクションではありません。
メッセージ ↔ イシューの対応表
提案の投稿実行 · 判定: 却下 → cancelled提案 · backlogイシュートラッカー却下されると、同じイシューをcancelledへ移すよう要求します。イシューは承認の前から存在し、承認がイシューを作るのではありません。
実行イシュー · todo
イシュートラッカー実行 · 判定: 割り当て担当エージェントtodoのイシューの割り当てと実行は、外部の実行システムが担います。イシューをtodoに移しても、作業が始まったことは保証されません。
停滞 → 復旧 → 人
活動が止まった割り当て済みのイシューは、イシューと担当者を含めて再要求し、連続した無応答が上限に達すると人に引き渡します。
担当エージェント観測 · 報告: 実行記録最近の実行 · 活動
実行の観測担当エージェントの実行と最近のシグナルが観測として記録されます。活動は完了の証拠ではありません。
最近の実行 · 活動
実行の観測観測 · 報告: 最後の活動停滞の判定 · heartbeatStage reaperreaperは、done、cancelled、blockedのいずれでもなく担当者のいるイシューだけを見て、最新のシグナルとstageの経過時間を計算します。
停滞の判定 · heartbeat
Stage reaperデータ: 無応答+1無応答回数 · イシューごと無応答の状態連続した無応答をエージェントとイシューの組ごとに数え、状態に保存します。
最近の実行 · 活動
実行の観測観測 · 報告: 新しい活動 → リセット無応答回数 · イシューごと無応答の状態新しい活動があると回数をリセットします。
停滞の判定 · heartbeat
Stage reaper実行 · 判定: 再呼び出しイシュー + 担当者復旧呼び出しheartbeatを超え、回数が上限未満であれば、復旧呼び出しを行います。
イシュー + 担当者
復旧呼び出し実行 · 判定: イシュー + 担当者実行イシュー · todoイシュートラッカーイシュー、担当エージェント、説明のコメントを含めて割り当てを再要求し、HTTPレスポンスを確認します。legacy経路では1回の起動呼び出しで代替します。
無応答回数 · イシューごと
無応答の状態失敗 · 上限: 3回の後再呼び出しを停止 · クールダウン上限連続した無応答が上限(既定3回)に達すると、再呼び出しを止めます。上限は状態フックが回数を読み書きする場合にのみ守られ、保存に失敗すると弱まることがあります。
再呼び出しを停止 · クールダウン
上限実行 · 判定: 再割り当て · 通知Lead · 運用者可能ならLeadに再割り当てし、その機能が有効な場合に限りin_progressをtodoに戻します。そうでなければコメントとベストエフォートの通知を残し、上限到達後のクールダウンを記録します。
停滞の判定 · heartbeat
Stage reaper観測 · 報告: 警告のみLead · 運用者stageが長く続きすぎると、運用者向けの警告コメントだけを残します。状態は自動では変えません。
すべての接続を同じ太さで表示します。フローを選ぶと、その経路だけを番号付きで強調します。
- 実線 · 入力、結果、記録の流れる方向
- 破線 · 実行、判定、要求
- 長い点線 · 観測と報告、判定とは別
- 短い破線 · 失敗、停止、上限
- 太い黒線 · 選んだフロー。番号は順序
- ボックス · コードまたは状態の境界、見出しに名前
- 内側のチップ · その境界の構成要素
- 点線ボックス · その境界の外
- オレンジの枠 · モデルが判断する場所
- エージェント呼び出し · 復旧呼び出し
- 状態 · 記録
- 停滞の判定 · 上限
- 収集 · 投稿
非公開の実装記録と開発記録から作図しました。チーム、イシュー、Slackの識別子と元のメッセージは表示していません。デプロイ、コンテナ、認証情報は、このプラグインの外の担当者のものです。
- 1件の観測
- 2026年4月28日のレポート:変更前の手動診断で、67時間実行されていなかったイシュー1件について、イシューと担当者を含めて割り当てを再要求したところ、5秒以内に新しい実行がキューに入りました。完了、平均復旧時間、デプロイ後の効果は測定していません。
- 承認処理の限界
- 復旧呼び出しと異なり、承認処理はレスポンスコードを確認せずに対応表を承認済みにします。アトミックな、あるいはフェイルクローズドの承認トランザクションとしては記述していません。
- 上限が守られる条件
- 3回の上限は、状態フックがある場合に守られる実装です。あらゆる失敗でエスカレーションがちょうど1回になることを保証するものではありません。