당신은 Claude Code를 프롬프팅하는 것이 아니라, 제어 평면(Control Plane)을 운영하는 것입니다
요약
Claude Code를 단순한 프롬프팅 도구가 아닌, 제어 평면(Control Plane)을 운영하는 관점에서 바라봐야 함을 설명합니다. 권한 프롬프트, 플랜 모드, 훅(Hooks) 등을 활용해 에이전트의 행동을 정밀하게 제어하는 방법을 다룹니다.
핵심 포인트
- 에이전트 루프의 핵심은 지능이 아닌 제어(Control)에 있음
- 권한 프롬프트와 플랜 모드를 통한 실행 중단 및 승인 메커니즘 활용
- 권한 규칙(Permission rules) 설정을 통한 제어 결정의 사전 로드
- Hooks를 이용해 도구 호출 전후의 동작을 프로그래밍 가능하게 제어
- Esc 키를 통한 수동 오버라이드로 즉각적인 제어권 회수 가능
내가 처음 작성한 에이전트 루프(Agent loop)는 영원히 돌아갔습니다. 모델이 멍청해서가 아니었습니다. 언제 멈춰야 하는지 말해주는 것을 잊었기 때문이며, 모델은 이미 막혀버린 도구(Tool)를 즐겁게 계속 호출했습니다.
그 버그 때문에 나는 이제 Claude Code를 지금과 같은 방식으로 생각하게 되었습니다. 루프(Loop)는 쉬운 부분입니다. 무엇을 만질 수 있게 허용할지, 언제 일시 중지할지, 그리고 언제 당신이 개입할지가 어려운 부분이며, 그것이 당신이 실제로 운영하는 부분입니다.
모두가 상상하는 루프는 다음과 같습니다. 모델이 컨텍스트(Context)를 수집하고, 행동을 취하고(파일 읽기, 명령 실행, 수정 수행), 결과를 확인한 뒤, 작업이 완료될 때까지 다시 반복합니다. 이 루프를 직접 작성하는 것은 100줄도 채 되지 않습니다. 데모 수준을 벗어날 때 가장 먼저 고장 나는 것은 지능이 아닙니다. 바로 제어(Control)입니다. 너무 오래 실행되거나, 잘못된 파일을 수정하거나, 되돌릴 수 없는 작업을 수행하게 됩니다.
Claude Code는 이 모든 제어 계층(Control layer)을 당신을 위해 제공합니다. 이를 이해하고 나면, 당신은 스스로를 모델을 "프롬프팅(Prompting)"하는 사람이 아니라 제어 평면(Control plane)을 운영하는 사람으로 생각하게 될 것입니다. 문서에 명시된 제어 레버(Levers)들은 다음과 같습니다:
- 권한 프롬프트(Permission prompts)는 기본 정지 조건입니다. 기본 설정 상태에서 Claude Code는 파일을 수정하거나 bash 명령을 실행하기 전에 일시 중지하고 질문합니다. 당신이 각각의 중대한 행동을 승인하는 것이 말 그대로 루프의 정지 조건입니다. 당신이 회로 차단기(Circuit breaker) 역할을 하는 것입니다.
- 플랜 모드(Plan mode)는 모든 행동 전의 관문입니다. Shift+Tab을 눌러 플랜 모드로 전환하거나(또는 --permission-mode plan으로 시작), Claude는 접근 방식을 도출하기 위해 파일을 읽고 읽기 전용 명령을 실행할 수 있지만, 당신이 플랜을 승인할 때까지 소스 코드를 건드릴 수 없습니다. 이는 "가서 해"와 "먼저 무엇을 할지 말해줘"의 차이입니다.
- 권한 규칙(Permission rules)을 통해 매번 결정하는 대신 한 번에 결정할 수 있습니다. 설정에서 허용(Allow) / 거부(Deny) / 요청(Ask) 목록을 설정하여, Bash(rm *)는 미리 거부하고 npm test와 같은 것은 귀찮게 묻지 않고 실행되도록 할 수 있습니다. 당신은 제어 결정을 미리 로드(Pre-loading)하는 것입니다.
- 훅(Hooks)은 제어를 프로그래밍 가능하게 만듭니다. PreToolUse 훅은 도구 호출이 실행되기 전에 이를 차단할 수 있습니다.
Stop 훅은 Claude가 작업을 마쳤을 때 실행되며, Claude가 계속 진행하도록 밀어붙일 수 있습니다. 이 지점에서 "당신은 제어 평면(Control Plane)입니다"라는 말은 더 이상 은유가 아니라 당신이 작성한 코드가 됩니다.
Esc 키는 수동 오버라이드(Manual Override)입니다. 실행 도중 키 하나만 누르면 현재의 도구 호출(Tool Call)을 취소하고 제어권을 다시 당신에게 넘겨줍니다.
그리고 맞습니다, 제어의 문턱을 낮출 수도 있습니다. acceptEdits는 수정 사항에 대해 묻는 것을 중단하며, bypassPermissions는 프롬프트를 완전히 건너뜁니다. 이것은 제어 평면에서 벗어나는 것이 아닙니다. 그것은 당신이 제어 평면을 설정하는 것입니다. 얼마나 많은 권한을 위임할지 선택하는 것이 바로 운영(Operation)입니다.
누군가 당연히 제기할 수 있는 정직한 참고 사항을 하나 말씀드리자면, 대화형(Interactive) Claude Code는 스스로의 턴(Turn) 수를 조용히 제한하지 않습니다. --max-turns 옵션이 있지만, 이는 프린트/헤드리스(Headless) 모드를 위한 것이지 대화형 세션을 위한 것이 아닙니다. 세션에서의 설계는 숨겨진 제한과는 정반대이며, 루프는 계속해서 제어권을 당신에게 돌려줍니다. 이것이 핵심입니다. 당신이 바로 반복(Iteration)의 한계치입니다.
따라서 관점을 재정의하자면: 프롬프팅은 여기서 가장 작은 기술일 뿐입니다. 레버리지는 제어 표면(Control Surface)에 있으며, 그 대부분은 당신의 몫입니다. 동일한 루프라도 당신이 제어의 문턱(Gates)을 어떻게 설정하느냐에 따라 통제 불능의 상태가 될 수도 있고, 신뢰할 수 있는 팀원이 될 수도 있습니다. 이것은 모델의 속성이 아닙니다. 당신이 운영하는 하네스(Harness, 제어 장치)입니다.
(이것은 하네스의 제어 측면입니다. 모델이 매 턴마다 보는 컨텍스트(Context) 측면은 별개의 문제이며, 이에 대해서는 이전 포스트에서 다루었습니다.)
요약(TL;DR): Claude Code는 당신을 위해 에이전트 루프(Agent Loop)를 실행하지만, 루프 자체가 어려운 부분은 아니었습니다. 어려운 부분은 제어 계층(Control Layer)이며, 이는 대부분 당신이 운영해야 할 영역입니다: 권한 프롬프트(당신이 기본 중단 조건임), 계획 모드(Plan Mode, 실행 전의 관문), 허용/거부/질문 규칙, 훅(Hooks, PreToolUse는 호출을 차단할 수 있고, Stop은 계속 진행을 강제할 수 있음), 그리고 중단을 위한 Esc 키. 대화형 세션에는 숨겨진 턴 제한이 없으며, 대신 루프가 제어권을 당신에게 돌려줍니다. 프롬프팅은 사소합니다. 제어의 문턱을 운영하는 것이 기술입니다.
Claude Code를 강력하게 활용하는 분들께 묻습니다: 여러분의 제어 설정은 어떤 모습인가요? 실제 중단 조건을 강제하기 위해 훅(Hooks)에 의존해 보신 분이 계신가요, 아니면 주로 권한 프롬프트와 Esc 키를 사용하여 실행하시나요?
출처: Claude Code의 작동 방식 (에이전틱 루프 (agentic loop)) · Claude Code 권한 모드 (default / plan / acceptEdits / bypassPermissions) · Claude Code 권한 (allow / deny / ask 규칙) · Claude Code 훅 (Hooks) (PreToolUse, Stop) · Claude Code 대화형 모드 (Esc 키로 중단)
제출자: /u/bit_forge007
[링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/ClaudeAI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기