Stop Hook은 대시보드가 아니라 이벤트입니다
요약
Claude Code의 훅(hook)과 지속적 세션 모니터링(monitor)의 근본적인 차이점을 설명합니다. 훅은 특정 라이프사이클 이벤트에 반응하는 결정론적 자동화 도구인 반면, 모니터는 세션 상태를 재구성하고 추론하는 광범위한 컨텍스트 관리 도구입니다.
핵심 포인트
- 훅(Hook)은 특정 이벤트 발생 시 실행되는 결정론적 로컬 자동화에 적합함
- 모니터(Monitor)는 세션 상태를 재구성하고 추론하는 지속 가능한 컨텍스트 관리 역할 수행
- 훅은 명확한 실패 동작과 멱등성이 필요하며, 모니터는 더 높은 추론 비용을 수반함
- Stop 이벤트는 응답 종료를 의미하지만, 세션의 전체 상태를 보장하지는 않음
Claude Code의 훅(hook)과 지속적인 세션 모니터링(persistent session monitoring)은 종종 동일한 기능의 두 가지 구현 방식인 것처럼 비교되곤 합니다.
하지만 그렇지 않습니다.
훅(hook)은 다음과 같이 답합니다: “어떤 라이프사이클 이벤트(lifecycle event)가 방금 발생했으며, 그로 인해 무엇이 실행되어야 하는가?”
모니터(monitor)는 다음과 같이 답합니다: “현재 존재하는 세션들 중에서 어떤 세션이 실행 중(running), 대기 중(waiting), 차단됨(blocked), 완료됨(completed), 정체됨(stalled), 또는 비활성(inactive) 상태인가?”
이 차이는 재시작, 이벤트 누락, 또는 두 번째 동시 세션이 발생한 후에 명확해집니다.
훅(Hooks)은 강력한 이벤트 계약입니다
Claude Code는 세션 레벨(session-level), 턴 레벨(turn-level), 도구 레벨(tool-level), 권한(permission), 알림(notification), 서브에이전트(subagent), 태스크(task), 압축(compaction), 그리고 유도(elicitation) 이벤트를 문서화합니다. 이는 훅(hook)이 결정론적인 로컬 자동화(deterministic local automation)에 적합하게 만듭니다:
- 도구가 실행되기 전에 정책을 확인합니다.
- 알려진 라이프사이클 지점에서 구조화된 이벤트를 기록합니다.
- 도구 호출이 성공한 후 포맷터(formatter)나 테스트를 실행합니다.
- 턴(turn)이 중단될 때 알림을 보냅니다.
- 하나의 프로젝트를 승인된 로컬 워크플로(workflow)에 연결합니다.
핸들러(handler)는 동작할 수 있습니다. 명령(command), HTTP 엔드포인트(endpoint), 프롬프트(prompt), 에이전트(agent), 또는 MCP 도구를 호출할 수 있습니다. 이러한 강력한 기능 때문에 훅(hook)은 명확한 실패 동작(failure behavior), 제한된 실행 시간(bounded runtime), 그리고 멱등성 쓰기(idempotent writes)가 필요합니다.
모니터(Monitors)는 지속 가능한 컨텍스트를 재구성합니다
지속적인 모니터(persistent monitor)는 더 넓지만 덜 결정론적인 작업을 수행합니다. 모니터는 세션 기록, 의미론적 타임스탬프(semantic timestamps), 프로세스 신호(process signals), 그리고 만료 규칙(expiry rules)을 결합하여 현재 상태를 재구성합니다.
이를 통해 다음과 같은 작업이 가능합니다:
- 모든 프로젝트를 구성하지 않고도 여러 로컬 세션을 발견합니다.
- 모니터 자체가 재시작된 후에도 복구합니다.
- 하나의 스레드(thread)를 다른 스레드와 구별하여 유지합니다.
- 나중에 사용자 활동이 나타나면 이전의 완료(completion)를 취소합니다.
- 기록된 침묵 이후에 이를 성공으로 간주하지 않고 정체됨(stalled)으로 추론합니다.
- 작은 상태 모델(status model) 뒤에서 하나 이상의 프로바이더(provider)를 요약합니다.
이러한 범위는 더 많은 추론(inference) 비용을 발생시킵니다. 모니터는 부분적인 쓰기(partial writes)를 허용하고, 기록을 중복 제거하며, 최신성 윈도우(freshness windows)를 정의하고, 파일 수정 시간을 의미론적 진실(semantic truth)로 취급하는 것을 피해야 합니다.
유효한 Stop 이벤트도 여전히 만료됩니다
새로운 Stop 이벤트는 하나의 응답이 종료되었다는 강력한 증거입니다. 하지만 그것이 5분 후에도 해당 세션에 여전히 주의가 필요하다는 것을 증명하지는 않습니다.
사용자가 이미 답장을 했을 수도 있습니다. 다른 턴 (turn)이 실행 중일 수도 있습니다. 나중에 발생한 권한 요청이나 제공자 (provider) 오류가 운영 상태를 변경했을 수도 있습니다.
그 반대도 마찬가지입니다. 최근의 파일 또는 프로세스 활동이 실행 중인 분류 (classification)를 뒷받침할 수는 있지만, 그것이 성공적인 완료를 증명할 수는 없습니다.
이것이 핵심 규칙입니다:
event = 라이프사이클 (lifecycle) 시점의 증거
state = 정체성 (identity), 신선도 (freshness), 및 대체 (supersession)를 고려한 현재의 결론
계약 (contract)에 따라 선택하세요
이벤트 자체가 계약인 경우에는 훅 (hook)을 사용하세요. 핸들러 (handler)를 작게 유지하고, 가능한 경우 세션 (session) 및 턴 (turn) 정체성을 포함하며, 핸들러 실패가 코딩 흐름을 차단해야 하는지 여부를 명시적으로 결정하세요.
현재 컨텍스트 (context)가 계약인 경우에는 모니터링 (monitoring)을 사용하세요. 지원되는 제공자 (provider), 터미널 마커 (terminal markers), 침묵 임계값 (silence thresholds), 대체 (supersession) 규칙, 그리고 복구 동작 (recovery behavior)을 문서화하세요.
낮은 지연 시간 (low latency)과 내구성이 있는 컨텍스트 (durable context)가 모두 필요한 경우, 이 둘을 결합하세요:
lifecycle event -> 컴팩트한 로컬 증거 기록 (compact local evidence record)
durable session artifacts -> 복구 및 조정 (recovery and reconciliation)
both sources -> 세션별 상태 엔진 (per-session state engine)
...
훅 (hook)은 이벤트의 의미를 명시적으로 만듭니다. 모니터 (monitor)는 재시작 복구 (restart recovery), 다중 세션 비교 (multi-session comparison), 만료 (expiry), 그리고 나중의 활동을 처리할 장소를 제공합니다. 어떤 소스도 정체성 (identity) 및 신선도 (freshness) 확인을 우회해서는 안 됩니다.
상태 동반자 (status companion)의 경우, 수동적 관찰 (passive observation)이 일반적으로 더 안전한 경계입니다. Agent Island는 로컬 Claude Code 및 Codex 세션 증거를 읽고, 라이브 및 사용자 턴 (your-turn) 상태를 보여주며, 에이전트 (agents)를 제어하거나 세션 데이터를 Agent Island 서비스로 업로드하지 않습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기