에이전트의 안전 검사가 이제 명령어당 모델 호출을 실행합니다
요약
Claude Code v2.1.283부터 자동 모드(auto mode)의 안전 검사 방식이 변경되어, 이제 모든 명령어 실행 시 모델 호출을 거칩니다. 이로 인해 단순한 키스트로크 기반 비용 청구가 아닌, API 사용 및 엔터프라이즈 계약에서는 셸 명령어와 네트워크 요청 등 전 과정에 걸쳐 토큰 사용량이 계산됩니다.
핵심 포인트
- 자동 모드 안전 검사가 모든 명령어 실행 시 모델 호출을 수행합니다.
- 비용은 키스트로크가 아닌, 셸 명령어/네트워크 요청 등의 API 호출 기반으로 청구됩니다.
- Anthropic의 분류기(classifier)는 Claude Sonnet 5를 사용하여 작동하며, 이는 토큰 사용량에 영향을 미칩니다.
에이전트의 안전 검사가 이제 명령어당 모델 호출을 실행합니다
(원래 이 포스트를 시작할 때 제목은 '승인 프롬프트의 4가지 옵션 중 영구적으로 권한을 확장하는 방법'이었습니다. 두 번째 옵션에 대한 '영구적(permanently)'이라는 단어를 찾을 수 없어 삭제했습니다. 하지만 확인하는 과정에서 더 좋은 것을 발견했습니다.)
승인 프롬프트는 사용자가 클릭하는 것입니다. 명령어를 읽고, 결정하고, 다음으로 넘어가며, 이 모든 게 주의력 1초와 청구서에는 아무것도 비용이 들지 않습니다.
더 이상 그렇게만은 아닙니다. Claude Code v2.1.283부터 자동 모드(auto mode)는 모든 플랜과 제공업체에서 내장된 기본 권한 모드가 되었습니다. 더 이상 기본 경로에 프롬프트가 없습니다. 그 자리에는 Claude Sonnet 5로 실행되는 백그라운드 분류기(background classifier)가 있으며, 일부 플랜의 경우 이 호출이 토큰 사용량으로 계산됩니다.
제공업체 자체 설명에 따른 비용
Anthropic의 권한 모드 문서에서:
분류기는 기본적으로 사용자의
/model선택 대신 Claude Sonnet 5로 실행됩니다.각 검사는 전사 기록(transcript) 일부와 보류 중인 작업(pending action)을 보내어, 실행 전에 왕복(round-trip) 과정을 추가합니다.
Enterprise 플랜 및 Claude API를 사용하거나 AWS의 Claude Platform, Amazon Bedrock, Google Cloud의 Agent Platform, 또는 Microsoft Foundry를 사용하는 계정에서는 분류기 호출이 토큰 사용량으로 계산됩니다.
세 번째 줄을 다시 읽어보세요. 이것이 청구서에 중요한 부분입니다. 소비자 구독(consumer subscription)의 경우 키스트로크당 비용을 부과하는 것이 아닙니다. API 키나 엔터프라이즈 계약의 경우, 모든 셸 명령어와 모든 네트워크 요청이 이제 첫 번째 모델이 완료되도록 허용되기 전에 전사 기록의 일부를 두 번째 모델로 끌고 갑니다.
그리고 오버헤드는 고르게 분산되지 않습니다:
보호된 경로 외부에서의 읽기 및 작업 디렉토리 편집은 분류기를 건너뛰므로, 오버헤드는 주로 셸 명령어와 네트워크 작업에서 발생합니다.
겉보기에는 저렴해 보이는 활동, 즉 셸 명령어의 루프가 사실은 가장 비용이 많이 드는 부분입니다. 저희 비용 분석(Our cost work)에서 오랫동안 지적해 왔듯이, 비용을 발생시키는 것은 모델 자체가 아니라 루프입니다. 이제 안전 검사(safety check)가 바로 이 루프 안에 포함되었으며, 이는 아무도 예산 책정을 하지 않았던 부분이었습니다.
저는 달러 금액을 제시하지 않을 것이며, 그렇게 하는 사람에게는 의심해야 합니다. 문서에는 트랜스크립트의 어느 부분이 검사에 사용되는지 명시되어 있지 않기 때문에, 총액은 제가 임의로 만든 숫자를 가지고 수행한 산술일 뿐입니다. 문서화된 것은 메커니즘입니다. 즉, 액션(action)당 두 번째 모델이 계정에 비용을 청구한다는 것입니다.
이것이 바꾸는 세 가지 점 (알리지 않고)
제가 누군가에게 듣고 싶었던 부분입니다.
첫째: 자동 모드(auto mode)에 진입하는 것만으로도 광범위한 허용 규칙(broad allow rules)이 사라집니다. 방해받지 않기 위해 Bash(npm *)을 구축하는 데 오후를 보냈다고 가정해 봅시다. 그런 다음 프롬프트 하나를 수락하고 자동 모드로 전환합니다:
자동 모드에 진입하면 임의 코드 실행을 허용하는 광범위한 허용 규칙이 삭제됩니다: 포괄적인
Bash(*)또는PowerShell(*),Bash(python*)와 같은 와일드카드 인터프리터, 패키지 관리자 실행 명령어,Agent허용 규칙,Monitor허용 규칙. 왜냐하면 Claude Code는 Monitor 명령을 셸을 통해 실행하기 때문입니다.Claude Code는 자동 모드를 벗어날 때 삭제된 규칙들을 복원합니다.
따라서 사용자의 규칙 세트는 현재 어떤 모드에 있는지에 따라 달라지며, 단 한 번의 클릭으로 변경되고 인터페이스 어느 곳에서도 이를 설명해주지 않습니다. 자동 모드를 벗어나면 규칙들이 돌아옵니다. 이는 단순히 삭제하는 것보다 훨씬 나은 설계이며, 여전히 사용자 아래에서 변동하는 규칙 세트입니다.
둘째: 판결(verdict)이 누락되는 것은 조용한 거부(silent refusal)를 의미합니다. 실패 모드들은 대칭적이지 않습니다:
행동 차단(A blocked action): Claude Code는 알림을 표시하고 /permissions의 '최근 거부됨(Recently denied)' 탭에 해당 행동을 나열하며, 여기서 r 키를 눌러 수동 승인과 함께 재시도할 수 있습니다.
분류기로부터 판결 없음(No verdict from the classifier): Claude Code는 알림이나 '최근 거부됨' 항목 없이 해당 행동을 거부합니다.
위험하다고 판단하여 차단된 경우는 눈에 보이지만, 분류기가 컨디션이 좋지 않아 거부된 경우는 그렇지 않습니다. 두 경우 모두 실행 결과에는 동일하지만, 전자는 키 입력 한 번으로 복구할 수 있는 반면 후자는 몇 시간을 들여 재구성해야 하는 미스터리입니다. 관련한 또 다른 제한 사항이 있습니다: 판결 없이 연속으로 10개의 응답이 발생하면 대화가 중단됩니다.
셋째: 채팅창에 입력하는 경계(boundaries)는 사라질 수 있습니다. 이것이 제가 가장 걱정하는 부분이며, 에이전트가 내일쯤 잊어버리는 이유와 직접적으로 연결됩니다.
대화에서 이 저장소(repo)가 절대 프로덕션에 배포되어서는 안 된다고 에이전트에게 알려줄 수 있습니다. 문서에는 분류기가 이를 존중한다고 명시되어 있습니다:
분류기는 대화에서 언급하는 경계(boundaries)를 차단 신호로 취급합니다... 경계는 나중에 메시지를 통해 해제될 때까지 유효합니다. Claude가 특정 조건이 충족되었다고 판단하더라도 그것을 해제하지 않습니다.
그리고:
경계는 규칙으로 저장되지 않습니다. 분류기는 매번 확인 시 대화 기록(transcript)에서 이를 다시 읽어오기 때문에, 컨텍스트 압축(context compaction)이 해당 메시지를 제거하면 경계가 손실될 수 있습니다. 확실한 보장을 원한다면 대신 거부 규칙(deny rule)을 추가하세요.
당신이 영어로 언급했으니, 영어로 재읽혀지고, 일상적인 유지보수 작업만으로도 그것을 사실로 만든 문장이 삭제될 수 있습니다. Anthropic의 자체 조언은 대신 거부 규칙을 작성하는 것이며, 그들이 옳습니다. 하지만 다음 사항에 주목하세요: 제약을 표현하는 부드러운 방식이 조용히 실패할 수 있는 방식이며, 이는 당신이 가지고 있다고 믿었던 보호 장치를 제거하는 방향으로 실패합니다.
제가 경고했던 것보다 더 나은 부분
제가 경고했던 것보다 더 나은 부분
저는 5주 전에 프롬프트 인젝션(prompt injection)은 에이전트의 도구들이 실제 공격 표면이라는 점에 대해 글을 썼고, 지난주 댓글에서 한 독자에게 해결책은 승인 화면이 명령어의 **출처(provenance)**를 담아야 한다고 말했습니다. 에이전트가 방금 가져온 페이지는 당신의 권한과 소통할 수 없어야 합니다.
Auto 모드는 그 반대 방향에서 공격하며, 이는 작동합니다:
도구 결과는 해당 요청에서 제거되므로, 파일이나 웹페이지에 있는 악성 콘텐츠가 분류기(classifier)를 직접 조작할 수 없습니다.
게이트웨이는 공격자의 텍스트를 볼 수 없으므로, 공격자의 텍스트가 투표할 수 없습니다. 이것은 제가 제안했던 어떤 것보다 나은 메커니즘입니다. 저는 인간에게 출처를 보여주는 것을 주장했지만, Anthropic은 그것을 심사관(judge)으로부터 숨기기로 했습니다. 어느 쪽도 완벽하지는 않지만, 두 번째 방법이 공격하기가 훨씬 더 어렵습니다.
따라서 저의 초기 조언은 잘못된 계층을 겨냥하고 있었습니다. 출처는 인간에게 동의를 요청하는 곳에 단순히 표시되는 것이 아니라, 결정이 내려지는 곳에서 강제되어야 합니다.
승인 화면은 여전히 존재합니다. 그것은 단지 폴백(fallback)일 뿐입니다.
문서가 이 부분에 대해 비정상적으로 솔직하기 때문에 분명히 언급할 가치가 있습니다: "Auto 모드는 권한 프롬프트를 줄여주지만 안전성을 보장하지는 않습니다. 일반적인 방향을 신뢰하는 작업에 사용하고, 민감한 작업의 검토를 대체재로 사용해서는 안 됩니다."
그리고 그것이 대체했던 인간용 프롬프트는 여전히 접근 가능하며, 당신이 가진 가장 날카로운 도구입니다. 바로 여기서 제가 처음 잘못 이해했던 부분이 다시 등장합니다.
Claude Code가 Bash 프롬프트를 보여줄 때, 네 가지 옵션을 나열합니다. 두 번째 옵션은 다음과 같습니다:
예, 그리고 다음 요청에 대해서는 다시 묻지 않기: npm test *
당신은 npm test를 읽습니다. 그리고 npm test *가 제안됩니다. 여기서 와일드카드(wildcard)는 기록되는 아티팩트이며, 'Bash 규칙에서 *는 공백을 포함한 모든 텍스트와 일치하므로, 하나의 규칙이 명령의 한 가족을 포괄합니다.' 단 한 번의 키 입력으로 오늘 실행할 명령어에 대한 결정이 그 명령의 가족 전체에 걸친 영구적인 권한으로 바뀝니다. 만약 당신이 그 옵션을 충분히 자주 사용한다면, 와일드카드는 실제 정책이 되고 당신은 그것을 구성했다는 사실조차 알지 못하게 됩니다.
절감되는 비용 역시 놓치기 쉬운 방식으로 한쪽으로 치우쳐 있습니다. Bash 승인은 '저장소 및 명령어별 영구적'입니다. 파일 수정 승인은 '세션 종료 시까지'입니다. 따라서 세션을 거치며 쌓이는 모든 권한은 셸(shell) 권한인 반면, 편집 권한은 하룻밤 사이에 증발합니다. 둘 다 승인했던 사람은 합리적으로 편집이 저장소 전체에서 허용되었다고 결론 내렸고, 프롬프트가 그렇지 않다고 말하지 않았기 때문에 그렇게 생각했습니다. 왜냐하면 그 비대칭성이 기록되는 곳이 프롬프트가 아니기 때문입니다.
규칙들은 읽는 것보다 더 좁습니다. git push를 거부하는 규칙은 git -C . push를 포착하지 못하는데, 이는 버그 보고서라기보다는 격차(gap)의 예시로 문서에 나타납니다.
월요일에 제가 할 일들
만약 당신이 API 키를 사용하고 있고 에이전트가 많은 셸 명령을 실행한다면, 이 부분이 가장 먼저 살펴봐야 할 항목입니다. 왜냐하면 찾아보지 않는 한 토큰 대시보드에서는 보이지 않기 때문입니다.
별것 아닌 세 가지 방법입니다:
- 저장한 규칙을 정책 진술로 취급하고, 변경될 때
settings.local.json을 감사(audit)하세요. 만약 당신이 소리 내어 무엇이npm test *를 포괄하는지 말할 수 없다면, 그것은 생각보다 더 많은 것을 포괄합니다. - 절대 깨뜨려서는 안 되는 것은 모두 거부 규칙에 넣으세요. 대화 속에서가 아니라 파일 안에 넣어야 합니다.
- 프롬프트 때문에 지루해질 만한 작업에서는 자동 모드(auto mode)로 실행하고, 프롬프트 자체가 핵심인 곳에서는 꺼두세요. 비용 오버헤드는 거의 전적으로 셸 및 네트워크 호출에 걸리며, 이는 어느 쪽이든 대략 같은 작업량이기 때문에 속도와 원장 기록(ledger entry)은 얻지만 그 외에는 별로 얻지 못합니다.
요약하자면: 안전 검사가 약해진 것이 아니라 더 조용하고 계량화되었을 뿐입니다. 대부분의 작업에 있어서는 좋은 교환이지만, 영어로 말씀하셨고 기록하지 않으신 제약 조건(constraint)에는 좋지 않은 교환입니다.
에이전트 루프 관련 자료 (Related on The Agent Loop)
- 당신의 에이전트 비용 문제는 모델이 아닙니다. 루프 문제입니다.
- 왜 당신의 MCP 승인 게이트가 작동하지 않는지 (그리고 대신 무엇을 할 수 있는지)
- 당신의 에이전트 승인은 만료 날짜가 필요합니다
- 60초 만에 알아보는 에이전트 메모리: 왜 당신의 에이전트는 내일쯤 잊어버리는가
자료 출처 (Sources)
- Claude Code: 권한 설정 구성하기: 권한 모드, 규칙 우선순위, 프롬프트가 보여주는 것, 어디에 지속되는지.
- Claude Code: 권한 모드: 자동(auto) 모드, 분류기(classifier), 비용 및 지연 시간, 폴백(fallbacks), 대화에서 명시된 경계.
- Claude Code: 자동 모드 규칙 편집하기: 차단 및 허용 규칙 재정의(overrides).
- Forem
skip_indexing?: 일부 게시물이noindex를 갖는 이유.
자주 묻는 질문 (FAQ)
이것은 Claude Code가 이제 내 권한을 무시한다는 의미인가요?
아닙니다. 문서에는
자주 묻는 질문 (FAQ)
명령어당 비용이 청구되나요?
위에서 언급된 Enterprise 플랜과 AWS Bedrock, Google Cloud의 Agent Platform 및 Microsoft Foundry에서의 Claude API와 Claude Platform에 한해서만 그렇습니다. 일반 소비자 구독은 분류기 요청별로 항목화되지 않습니다. 저는 트랜스크립트 부분 크기가 문서화되어 있지 않기 때문에 달러 금액을 공개하지 않는 것이 좋으며, 추측으로 채우는 것보다는 공백으로 두는 편이 낫다고 생각합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기