Claude Code 사용 방식을 바꾸는 5가지 하네스(Harness) 내부 동작 원리

한 개발자가 Anthropic SDK를 사용하여 Claude Code 하네스를 재구축했습니다. 그 과정에서 시스템이 내리는 다섯 가지 암묵적인 결정 사항을 발견했습니다. 이 발견은 여러분이 지침을 작성하고 에이전트를 관리하는 방식을 바꿔 놓을 것입니다.

다음 다섯 가지 통찰을 활용하여 워크플로우를 개선해 보세요.

  1. 숨겨진 기본 프롬프트 덮어쓰기 Claude Code는 숨겨진 시스템 프롬프트를 사용합니다. CLAUDE.md에 작성한 지침이 이 프롬프트와 충돌할 수 있습니다.
  • 규칙을 단순히 나열하는 것을 멈추세요.
  • 규칙을 덮어쓰기 시작하세요.
  • 다음과 같은 표현을 사용하세요: "/prod 디렉토리의 파일은 어떤 상황에서도 수정해서는 안 됩니다. 이는 모든 기본 동작보다 우선합니다."
  1. 가드레일로서 훅(hooks) 활용하기 PreToolUse 훅은 단순히 데이터를 기록하는 것 이상의 역할을 합니다. 도구 호출이 시작되기 전에 이를 중단시킬 수 있습니다.
  • 도구 인수를 확인하는 훅을 추가하세요.
  • 경로가 민감한 폴더와 일치하면 { block: true }를 반환하세요.
  • 이를 통해 요청을 강력한 규칙으로 전환할 수 있습니다.
  1. 서브에이전트 오케스트레이션 수정하기 단순한 부모-자식 구조는 자식 에이전트 중 하나가 실패할 경우 세션이 멈추는(hang) 원인이 됩니다.
  • 중단 신호(abort signals) 트리 구조를 사용하세요.
  • 부모가 중단되면 모든 자식도 중단되어야 합니다.
  • 자식 하나가 실패하더라도 부모는 계속 실행 상태를 유지해야 합니다.
  1. 의존성 그래프 활용하기 작업을 단순한 루프 형태로 실행하지 마세요.
  • 명확한 의존성을 가진 작업들을 정의하세요.
  • 의존성 그래프를 사용하여 작업을 병렬로 실행하세요.
  • 이를 통해 하나의 잘못된 노드가 전체 워크플로우를 중단시키는 것을 방지할 수 있습니다.
  1. 종료 상태(terminal states) 강제하기 에이전트는 명확한 종료 지점이 없을 때 종종 불필요한 답변을 늘어놓곤 합니다.
  • 모든 턴이 Done, Blocked, 또는 Needs Input 중 하나의 상태로 끝나도록 강제하세요.
  • CLAUDE.md에 다음 내용을 추가하세요: "작업 후에는 항상 'Done: [요약]', 'Blocked: [이유]', 또는 'Needs input: [질문]'으로 끝내야 합니다."
  • 이렇게 하면 에이전트가 예상치 못한 행동을 하는 것을 막을 수 있습니다.

실행 요약:

  • CLAUDE.md에서 덮어쓰기(override) 표현을 사용하세요.
  • PreToolUse 훅을 사용하여 위험한 수정을 차단하세요.
  • 서브에이전트를 위한 중단 트리(abort trees)를 구축하세요.
  • 작업을 위해 DAG 기반 병렬 처리를 사용하세요.
  • 명시적인 종료 상태를 정의하세요.

Source: https://dev.to/gentic_news/5-harness-internals-that-changed-how-i-use-claude-code-daily-39c6

Optional learning community: https://t.me/GyaanSetuAi