
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 · 사람의 판단으로 넘깁니다.
업무 시그널을 에이전트 지침으로 바꾸고, 유지보수 제안 · 사람의 승인 · 담당 배정 · 멈춘 실행의 복구를 서로 다른 단계로 잇습니다. 이 흐름을 기획하고 개발했습니다.
저장소 첫 기록 4월 3일 · pinxlab 참여 5월 26일까지
팀의 Paperclip 안에서 플러그인으로 동작하고, Slack 수집은 MCP 서버가 맡습니다.
시그널 → 지침
Slack 기록에서 프로필과 에이전트 지침을 만듭니다. 지침은 에이전트의 문맥이며, 제안의 원인으로 이어 그리지 않았습니다.
Slack 시그널데이터: 채널 기록패턴 추출 · bot 제외
시그널 수집접근할 수 있는 채널 기록을 모으고 bot · 입장 · 퇴장 메시지는 거릅니다. 원문 메시지는 이 페이지에 싣지 않습니다.
패턴 추출 · bot 제외
시그널 수집데이터: 프로필 병합회사별 프로필 병합회사 상태뽑은 패턴으로 프로필 patch를 만들어 회사 상태의 프로필에 병합합니다. 휴리스틱 패턴이며 직원 성과 점수가 아닙니다.
회사별 프로필 병합
회사 상태데이터: 지침 재생성에이전트별 지침에이전트 상태병합된 프로필로 에이전트별 지침을 다시 만들어 저장합니다.
에이전트별 지침
에이전트 상태실행 · 판정: 지침 주입담당 에이전트에이전트가 만들어질 때 지침이 문맥으로 들어갑니다. 특정 제안이 특정 Slack 시그널에서 나왔다는 뜻은 아닙니다.
제안 → 승인 → 배정
제안은 담당자 없는 backlog 이슈로 먼저 생기고, 사람의 반응이 상태 변경을 요청하며, 배정과 실행은 외부 시스템이 맡습니다.
대상 프로젝트데이터: 대상 범위PO 호출 · 범위 지시
유지보수 분석유지보수 작업은 대상 프로젝트로 범위를 정한 프롬프트로 PO 에이전트를 부릅니다. 소스 내용은 싣지 않습니다.
PO 호출 · 범위 지시
유지보수 분석데이터: 제안 이슈제안 · backlog이슈 트래커프롬프트는 확인된 경로만 담은 제안을 담당자 없는 backlog 이슈로 만들고, DB migration은 실행하지 말라고 지시합니다. 결정론적으로 강제하는 장치가 아니라 제품 에이전트에게 주는 지시입니다.
제안 · 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이슈 트래커이슈와 담당 에이전트, 설명 comment를 담아 배정을 다시 요청하고 HTTP 응답을 확인합니다. 옛 경로에서는 한 번 깨우는 호출로 대신합니다.
무응답 횟수 · 이슈별
무응답 상태실패 · 한도: 3회 뒤재호출 중단 · cooldown상한연속 무응답이 상한(기본 3회)에 닿으면 재호출을 멈춥니다. 상한은 횟수를 읽고 쓰는 상태 hook이 있을 때만 지켜지며, 저장이 실패하면 약해질 수 있습니다.
재호출 중단 · cooldown
상한실행 · 판정: 재배정 · 알림Lead · 운영자가능하면 Lead에게 재배정하고, 기능을 켠 경우에만 in_progress를 todo로 되돌립니다. 아니면 comment와 best-effort 알림을 남기고, 상한 뒤의 cooldown을 기록합니다.
정체 판정 · heartbeat
Stage reaper관측 · 보고: 경고만Lead · 운영자stage가 너무 오래 머물면 운영자에게 경고 comment만 남깁니다. 상태를 자동으로 바꾸지 않습니다.
모든 연결을 같은 굵기로 보여 줍니다. 흐름을 고르면 그 경로만 번호와 함께 강조됩니다.
- 실선 · 입력 · 결과 · 기록이 흐르는 방향
- 파선 · 실행 · 판정 · 요청
- 긴 점선 · 관측 · 보고, 판정과 별개
- 짧은 파선 · 실패 · 중단 · 한도
- 굵은 검은 선 · 고른 흐름, 번호는 순서
- 상자 · 코드 · 상태 경계, 머리말에 이름
- 안쪽 칩 · 그 경계의 구성 요소
- 점선 상자 · 그 경계 밖
- 주황 테두리 · 모델이 판단하는 곳
- 에이전트 호출 · 복구 호출
- 상태 · 기록
- 판정 · 상한
- 수집 · 게시
비공개 구현 · 개발 기록 기준으로 그렸습니다. 팀 · 이슈 · Slack 식별자와 원문 메시지는 싣지 않았고, 배포 · 컨테이너 · 자격 증명은 이 플러그인 밖의 담당입니다.
- 관측 1건
- April 28, 2026 보고서: 변경 전 수동 진단에서, 67시간 실행되지 않던 이슈 1건에 이슈와 담당자를 담아 배정을 다시 요청하자 5초 안에 새 실행이 대기열에 올랐습니다. 작업 완료 · 평균 복구 시간 · 배포 뒤 효과는 측정하지 않았습니다.
- 승인 처리의 한계
- 복구 호출과 달리 승인 처리는 응답 코드를 확인하지 않고 매핑을 승인으로 표시합니다. 원자적이거나 실패에 닫힌 승인 트랜잭션이라고 쓰지 않습니다.
- 상한의 조건
- 3회 상한은 상태 hook이 있을 때 지켜지는 구현입니다. 모든 실패에서 정확히 한 번의 에스컬레이션을 보장하지 않습니다.