Claude의 반복적인 문구를 MessageDisplay 훅으로 교체하는 방법

Claude의 반복적인 문구를 MessageDisplay 훅으로 교체하는 방법

Claude의 반복적인 문구를 훅으로 교체하기

핵심: MessageDisplay 훅을 설치하고 작은 스크립트를 실행해 출력이 화면에 도달하기 전에 다시 쓰면 Claude가 즐겨 사용하는 버즈워드(예: load‑bearing, honest take)를 억제할 수 있습니다.


훅이 중요한 이유

Claude는 코드 설명과 산문 모두에 load‑bearing seams, honest takes, spicy doodads와 같은 동일한 관용구를 자주 삽입합니다. 사용자는 특히 인간 같은 목소리가 기대되는 비기술 텍스트를 읽을 때 이러한 반복이 거슬린다고 보고합니다. 이 훅은 모델을 재학습할 필요 없이 즉각적이고 사용자가 제어할 수 있는 해결책을 제공합니다.


훅 구현

  1. 교체 스크립트 만들기 (wordswap.sh). 이 스크립트는 Claude의 JSON delta를 읽고, 대소문자를 구분하지 않는 정규식 교체를 적용한 뒤 새로운 JSON 페이로드를 출력합니다.
#!/usr/bin/env python3
import json, re, sys

# 구문 → 교체문 매핑. 필요에 따라 항목을 추가하거나 편집하세요.
replacements = {
    "seam": "whatchamacallit",
    "you're absolutely right": "I'm a complete clown",
    "honest take": "spicy doodad",
    "load-bearing": "cooked"
}

data = json.load(sys.stdin)
text = data.get("delta") or ""
for phrase, replacement in replacements.items():
    pattern = r"\\b" + re.escape(phrase) + r"\\b"
    text = re.sub(pattern, replacement, text, flags=re.IGNORECASE)

print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "MessageDisplay",
        "displayContent": text,
    }
}))
  1. 스크립트를 실행 가능하게 만들기:
chmod +x ~/.claude/hooks/wordswap.sh
  1. ~/.claude/settings.json에 훅 등록:
{
  "hooks": {
    "MessageDisplay": [
      { "hooks": [ { "type": "command", "command": "$HOME/.claude/hooks/wordswap.sh" } ] }
    ]
  }
}
  1. Claude 재시작(또는 새 세션 시작). 훅은 모든 메시지 표시 시 자동으로 실행되어 정의된 구문을 실시간으로 교체합니다.

커뮤니티 반응

"Claude와 코딩할 때는 전형적인 claudism이 나오는 것이 크게 신경 쓰이지 않아요. 하지만 블로그 글, 이메일 등 산문을 읽을 때 같은 claudism이 보이면 훨씬 더 거슬립니다."doctoboggan

"LLM은 이제 하루에 수십억 토큰에 걸쳐 단일 모델의 표현 편향을 방송하므로, 특이한 구문이 돋보이게 됩니다."infogulch

"나는 Claude의 글을 검토하고 자체 출력을 편집하도록 하는 스킬을 만들었어요(예: 코드 주석). 도움이 되지만 기본 어휘가 아직 제한적인 느낌이에요."pocketarc

"CLAUDE.md에 이런 진부어를 피하라는 지시를 저장해 두었지만, 모델이 과도하게 복잡하게 만들려는 경향은 여전합니다."btbuildem

이 댓글들은 두 가지 넓은 점을 보여줍니다:

  1. 스타일 편향은 LLM 출력이 인간이 쓴 텍스트처럼 소비될 때 실제 사용성 문제입니다.
  2. 사용자 측 사후 처리(훅, 맞춤 프롬프트, 자체 편집 스킬)가 모델 제공자가 더 세밀한 스타일 제어를 제공하기 전까지 주요 완화 전략입니다.

접근 방식 확장

  • 패턴 추가: replacements 사전에 귀찮은 구문을 자유롭게 추가할 수 있습니다. 예: “substrate”, “steelman”, “production ready”.
  • 동적 설정: 매핑을 별도 JSON 파일에 저장하고 스크립트가 실행 시 로드하도록 하면 스크립트를 수정하지 않고도 즉시 업데이트할 수 있습니다.
  • 조건부 로직: data 페이로드를 사용해 메시지 역할(assistant vs system)을 감지하고 어시스턴트 메시지만 교체하도록 할 수 있습니다.
  • 다른 훅과 결합: Claude는 여러 훅 타입(MessageSent, ToolCall 등)을 지원합니다. 입력과 출력을 모두 필터링하도록 체인으로 연결할 수 있습니다.

잠재적 트레이드‑오프

  • 지연: 훅이 아주 작은 처리 단계를 추가하지만 대부분의 사용자는 눈에 띄는 지연을 경험하지 않습니다. 다만 초고속 세션에서는 몇 밀리초 정도 차이가 날 수 있습니다.
  • 컨텍스트 손실: 구문을 교체하면 Claude가 생성한 정확한 토큰 시퀀스가 바뀌어 로그 파싱 등 토큰 기반 분석에 영향을 줄 수 있습니다. 필요하다면 원본 delta를 별도로 보관하세요.
  • 모델 동작: 일부 연구자는 출력 변경이 내부 어텐션 패턴에 미묘한 영향을 줄 수 있다고 주장합니다. 아직 구체적인 증거는 없지만, 민감한 추론 작업에 Claude를 사용할 경우 모니터링이 필요합니다.

핵심 요약

Claude의 시그니처 구문이 읽기 흐름을 방해한다면, MessageDisplay 훅은 가볍고 되돌릴 수 있는 해결책을 제공합니다. 간단한 교체 맵을 정의함으로써 모델의 기본 능력을 손상시키지 않으면서 목소리를 다시 제어할 수 있습니다.

Sources