세 가지 트리거 모드
trigger(event, payload). fire-and-forget. 리스너 오류는 로깅되며 격리됩니다.trigger_with_result(event, payload). 각 핸들러의 반환값을 캡처합니다.trigger_interceptor(event, payload). 핸들러가 이벤트를 차단하거나 수정할 수 있습니다.
구현은 core/hooks/system.py:200 class HookSystem에 있습니다. 동시 실행은 concurrent.futures를 통해 이루어지며, 핸들러 등록 시 재진입 가능한 락으로 보호됩니다.
이벤트 그룹
| 그룹 | 이벤트 |
|---|---|
| pipeline | PIPELINE_START, PIPELINE_END, PIPELINE_ERROR |
| node | NODE_ENTER, NODE_EXIT, NODE_ERROR, NODE_RETRY |
| analysis | ANALYST_START, ANALYST_COMPLETE, ANALYST_FAILED |
| verification | VERIFICATION_PASS, VERIFICATION_FAIL |
| automation | DRIFT_DETECTED, MODEL_PROMOTED, OUTCOME_COLLECTED, EXPERT_VOTE_CAST, FEEDBACK_PHASE_CHANGED |
| memory | MEMORY_SAVED, RULE_CREATED, RULE_UPDATED, RULE_DELETED |
| tool | TOOL_EXEC_START/END/FAILED, TOOL_RECOVERY_START/END, TOOL_APPROVAL_REQUEST/GRANTED/DENIED |
| session | SESSION_START, SESSION_END |
| model | MODEL_SWITCHED |
| llm | LLM_CALL_START, LLM_CALL_END, LLM_CALL_FAILED, LLM_CALL_RETRY |
| approval | APPROVAL_REQUEST, APPROVAL_GRANTED |
| context | CONTEXT_OVERFLOW, CONTEXT_RESET |
| prompt | PROMPT_ASSEMBLED |
| turn | TURN_COMPLETE |
표에는 주요 항목만 요약했습니다. core/hooks/system.py소스 주석은 이벤트를 더 세분화하여 (subagent 라이프사이클, agentic turn, 세션, LLM 호출, 도구 승인, serve 라이프사이클, MCP 서버) 분류하며, 표에서는 관련 하위 섹션을 묶어서 표시했습니다.
등록
from core.hooks.system import HookSystem, HookEvent
hooks = HookSystem()
hooks.register(
HookEvent.PROMPT_ASSEMBLED,
lambda event, data: print(f"assembled hash={data['assembled_hash']}"),
)매처
핸들러는 dispatch 전에 이벤트를 필터링하는 매처 predicate를 부착할 수 있습니다. 예를 들어 node="analyst"일 때만 발화시키는 방식입니다.core/hooks/system.py:_filter_by_matcher를 참고하세요.
PROMPT_ASSEMBLED payload
유일한 prompt 관련 이벤트. payload 구성:
node: “analyst”, “evaluator”, “synthesizer”, “router”role_type: 예) “game_mechanics”, “quality_judge”base_template_hash,assembled_hash(SHA-256[:12])fragment_count,total_chars,fragments_used- 조건부
skill_hashes(스킬별 본문 해시) - 조건부
truncation_events
payload에는 해시와 카운터만 담깁니다. 프롬프트 텍스트 자체는 포함되지 않습니다.