본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 20. 09:18

Claude Code의 /clear가 더 이상 두렵지 않게 — Hook으로 정책을 자동 주입하는 구현

요약

Claude Code 사용 시 /clear 명령어로 세션이 초기화될 때 발생하는 컨텍스트 손실 문제를 Hook 기능을 통해 해결하는 방법을 소개합니다. SessionStart 이벤트를 활용해 정책 파일을 자동으로 주입하여 프로젝트 규칙과 선호도를 유지하는 구현 가이드를 제공합니다.

핵심 포인트

  • Hook(SessionStart)을 사용하여 세션 시작 시 정책 파일을 자동 주입 가능
  • 토큰 효율을 위해 정책 파일은 영어 전보(Telegraph) 형식으로 작성 권장
  • Hook 출력 제한(10KB) 문제를 해결하기 위해 스크립트 병렬 실행 및 청크 분할 방식 사용
  • 상시 읽기 파일은 4개 이내로 제한하여 세션 시작 비용 최적화

/clear를 할 때마다, 모든 것을 처음부터 다시 하고 계시나요?

Claude Code를 사용하다 보면 세션이 길어져 컨텍스트(Context)가 방대해집니다. /clear로 리셋하고 싶지만, 그렇게 하면 "이 프로젝트는 Nuxt3로...", "답변은 일본어로...", "테스트는 모크(Mock)를 사용하지 마세요..."와 같이 매번 똑같은 설명을 다시 해야 하는 상황에 처하게 됩니다.

이 문제는 파일에 적어두고, 세션 시작 시 자동으로 읽어오게 하는 것만으로 해결할 수 있습니다.

Claude Code의 Hook(SessionStart 이벤트)을 사용하면, 세션 시작 시 스크립트를 자동으로 실행하여 그 출력을 Claude의 컨텍스트에 주입할 수 있습니다. 즉, 정책(Policy) 파일을 준비해 두면 /clear를 하더라도 다음 세션에서 자동으로 복원됩니다.

이 기사에서는 실제로 동작하는 session-load Hook의 구현 방법을 공개합니다.

전제 지식

  • Claude Code CLI를 사용 중임 (Anthropic 구독)
  • CLAUDE.md를 작성해 본 적이 있음
  • Windows + PowerShell 5.1을 상정 (macOS/Linux에서는 bash로 대체 가능)

메커니즘 개요

세션 시작 (/clear 후 또는 신규 실행)
↓
.claude/settings.json에 등록한 Hook이 자동 발화
...

사용자가 아무것도 하지 않아도 매 세션마다 정책이 읽히는 상태를 만들 수 있습니다.

Step 1: 정책 파일 만들기

먼저, Claude가 매번 기억해 주었으면 하는 내용을 Markdown 파일에 작성합니다.

프로젝트 루트/
└── ai-memory/
└── policies/
...

예를 들어 response-prefs.md는 다음과 같은 내용입니다:

---
type: response_rule
always_load: true
...

두 가지 포인트가 있습니다.

1. 영어의 전보(Telegraph) 형식으로 작성할 것. 정책 파일은 Claude가 읽는 것이므로, 사람을 향한 정중한 일본어(또는 한국어)는 필요하지 않습니다. 영어가 토큰 효율(Token efficiency)이 더 높으며, 동일한 정보량을 더 적은 토큰으로 전달할 수 있습니다.

"정확성과 안전성을 최우선으로 합니다. 그다음으로 실용성을 중시해 주세요." → PRIORITY: accuracy > practicality.

이것만으로도 토큰 소비가 60-70% 감소합니다. 세션 시작 시마다 읽어들이는 파일이므로 이 차이는 매우 큽니다.

2. 파일 수를 제한할 것. 상시 읽기 파일이 늘어나면 세션 시작 비용이 커집니다. 4개 이내의 파일로 유지하는 것을 권장합니다. 모든 것을 다 넣고 싶은 마음은 이해하지만, "여기에 적어두지 않으면 매번 사라지는 정보"로만 한정하세요. 프로젝트 고유의 규칙은 .claude/rules/에 경로 기반(Path-triggered)으로 작성하면 필요한 시점에만 읽어옵니다.

Step 2: session-load Hook 작성하기

문제: Hook의 stdout은 약 10,000자에서 잘림

정책 파일의 합계가 10KB 이상이 되면, 한 번의 Hook 실행으로는 전부를 출력할 수 없습니다.

해결책: 동일한 스크립트를 파트 번호를 바꿔가며 여러 번 병렬 실행하여, 각각이 담당하는 청크(Chunk)만 출력하도록 합니다.

코드

# .claude/hooks/session-load.ps1
param(
[int]$Part = 0,
...

settings.json에 등록

{
"hooks": {
"SessionStart": [
...

hooks 배열에 동일한 스크립트를 -Part 0-Part 1로 두 번 등록합니다. 이것들은 병렬 실행되므로 도착 순서는 불확정적입니다. 출력의 서두에 [session-load part 1/2]와 같은 헤더를 붙여 Claude가 순서를 재구성할 수 있도록 합니다.

정책이 늘어나 2개의 청크로 부족해지면, -Part 2 항목을 추가하기만 하면 됩니다.

macOS / Linux의 경우: powershell.exebash로, .ps1.sh로 바꿔서 생각하세요. $1, $2로 Part와 Of를 받고, cat으로 파일을 읽어 echo로 출력하면 됩니다.

형태가 됩니다.

Step 3: 동작 확인

세션을 시작하여 컨텍스트에 [session-load part 1/2]와 같은 헤더가 포함되어 있다면 성공입니다.

포함되어 있지 않다면, 스크립트를 수동으로 실행하여 디버깅합니다:

powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File .claude/hooks/session-load.ps1 -Part 0 -Of 2

출력이 없다면 스크립트에 에러가 있는 것입니다. try {} catch {}를 일시적으로 catch { $_ | Out-File error.log }로 변경하여 에러 내용을 확인하세요.

흔한 함정: PowerShell 5.1의 문자 인코딩 (Character Encoding)

Windows의 PowerShell 5.1은 기본적으로 일본어 환경에서 cp932 (Shift-JIS)를 사용합니다. UTF-8 파일을 읽으면 글자가 깨질 수 있습니다. 스크립트 서두에 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8를 넣는 것이 필수적입니다.

보너스: guard Hook으로 위험한 조작을 차단하기

session-load와 조합했을 때 효과적인 것이 PreToolUse 이벤트의 guard Hook입니다. force push나 --no-verify를 물리적으로 차단합니다.

# .claude/hooks/guard.ps1 (요점만)
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
...

settings.json에 추가:

{
"hooks": {
"PreToolUse": [
...

guard의 응답은 deny (완전 차단), ask (사용자 확인), allow (즉시 실행)의 3종류입니다. 아무것도 출력하지 않으면 일반적인 permission 흐름으로 진행됩니다.

설계 원칙: fail-open. 모든 Hook에 try {} catch {} + exit 0를 넣었습니다. Hook이 에러로 인해 중단되더라도 Claude Code는 멈추지 않습니다. 안전장치가 해제될 뿐, 사용할 수 없게 되는 것은 아닙니다.

앞으로 나아갈 방향

이 기사에서 소개한 것은 session-load와 guard라는 두 가지 Hook입니다. 실제로 운용 중인 시스템에서는 여기에 더해 다음과 같은 것들을 사용합니다:

  • reminder Hook — 사용자가 메시지를 보낼 때마다 중요 규칙을 재주입 (긴 세션에서의 "망각" 방지)
  • AI 기억 시스템 — 결정 기록, 실수의 교훈, 프로젝트 상태를 파일로 영속화. 확신도에 따라 Tier A / Tier B로 분류하여, 불확실한 정보는 인간의 필터를 거치게 함
  • Skill (자작 커맨드)/ingest로 외부 기사를 wiki로 증류, /daily-brief로 뉴스 요약
  • Nightly 파이프라인 — 야간에 자동으로 뉴스 수집 → 기사 증류 → wiki 업데이트 → Git push

이것들을 조합하여, 세션 시작 시의 토큰 소비를 72KB → 23KB로 감소(69% 감소)시키면서도, /clear를 해도 지식이 사라지지 않는 시스템을 만들고 있습니다.

전체 설계 사상과 구현 코드는 Zenn의 책에 정리해 두었습니다:

제1장(Before/After)과 제2장(설계의 전체상)은 무료로 읽을 수 있습니다.

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0