본문으로 건너뛰기
claudemods

Claude Code 위험한 명령 차단: 실행 전에 막는 안전 모드

rm -rf /, main 브랜치 강제 푸시, DROP TABLE, curl | sh 같은 파괴적인 Bash 명령을 실행 전에 거부합니다.

권한

  • 도구 호출 가로채기Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
  • UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
테스트 버전
v2.1.291
마지막 테스트
필요 버전
Claude Code ≥ 2.1.287
표시 위치
토스트

Claude Code 안에서 설치:

/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace
모든 설치 방법 ↓

이 모드는 무엇을 하나요?

이 모드는 Claude Code 위험한 명령 차단 기능을 제공하여, Claude Code가 Bash 도구로 실행하려는 위험한 명령을 막아 줍니다. 셸 명령이 실행되기 전에 짧은 규칙 목록과 대조하여 검사합니다. 규칙에 일치하면 명령이 거부되고, Claude에게는 어떤 규칙이 왜 작동했는지 전달되며, 사용자 화면에는 규칙 이름이 담긴 토스트가 표시됩니다. 안전한 명령은 아무 영향 없이 그대로 통과합니다.

내장 규칙은 다음을 다룹니다. /, ~, $HOME, . 또는 *에 대한 rm -rf, main이나 master로의 git push --force, git clean -fdx, SQL의 DROP TABLE, DROP DATABASE, DROP SCHEMA, TRUNCATE, chmod -R 777 /, mkfs, 디스크 장치에 쓰는 dd, 원시 디스크로의 출력 리디렉션, curl이나 wget의 출력을 셸로 파이프하는 명령, 그리고 고전적인 포크 폭탄입니다. git reset --hard는 선택적으로 켤 수 있는 규칙으로 제공됩니다. Claude Code 2.1.287 이상이 필요합니다.

데모

녹화 영상에서는 데모 프로젝트에서 Claude에게 파괴적인 작업을 요청합니다. 모드가 Bash 호출을 거부하고, 토스트에 일치한 규칙 이름이 표시되며, Claude는 거부 이유를 읽은 뒤 명령을 실행하지 않고 응답합니다.

설치

설치 블록에 있는 방법 중 하나를 사용하십시오. 가드는 다음 도구 호출부터 바로 적용되며, /reload-plugins 이후에는 재시작할 필요가 없습니다.

$ install cm-block-dangerous-commands

Claude Code 2.1.287 이상 필요

  1. 1.Claude Code 안에서 한 줄로

    /plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace

    실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.

  2. 2.셸에서 설치

    claude plugin marketplace add rotbit/claudemods-marketplace
    claude plugin install cm-block-dangerous-commands@claudemods

    그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.

  3. 3.설치하지 않고 사용해 보기

    git clone https://github.com/rotbit/claudemods-marketplace
    claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commands

    한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.

작동 방식

모든 로직은 하나의 tool.call 훅 안에 있습니다. hooks/register.ts의 코드는 다음과 같습니다.

on('tool.call', { tool: 'Bash' }, ($, e, next) => {
  const match = findMatch(e.command, settings)
  if (match === undefined) return next(e)

  if (settings.mode === 'warn') {
    $.ui.toast(`${$.plugin.name}: "${match.name}" is running (warn mode)`)
    return next(e)
  }

  $.ui.toast(`${$.plugin.name}: blocked "${match.name}"`)
  return { deny: denyReason($.plugin.name, match) }
}).catch(($, e, next) =>
  next.called
    ? next(e)
    : { deny: `${$.plugin.name}: its check failed, so the command was not run to be safe.` },
)

매처 { tool: 'Bash' }는 이 훅이 셸 명령만 본다는 뜻입니다. hooks/rules.ts의 findMatch는 먼저 allowPatterns를 확인하고, 이어서 내장 규칙(꺼 둔 규칙은 건너뜀), 마지막으로 사용자의 extraPatterns를 확인합니다. 일치하는 규칙이 없으면 next(e)가 평소처럼 명령을 실행합니다. 일치하면 훅이 { deny: reason }을 반환하고, 그 이유가 Claude가 읽는 도구 결과가 됩니다.

이 모드를 단순한 필터가 아닌 가드로 만드는 것은 .catch 핸들러입니다. next가 호출되기 전에 검사가 예외를 던지면 호출은 허용되지 않고 거부됩니다. 즉, 모드는 실패 시 차단(fail closed) 방식으로 동작합니다. 또한 session.start 훅은 사용자 지정 패턴 중 올바른 정규식이 아닌 것이 있으면 토스트를 한 번 표시합니다.

rules.ts의 각 규칙은 ID, 이름, 한 문장짜리 사유, 그리고 테스트에서 검증하는 예시 명령으로 이루어진 단순한 데이터입니다.

사용자 지정

다음 옵션은 /config에서 변경할 수 있습니다. mode: warn으로 설정하면 가드가 알림 도구로 바뀌어, 일치하는 명령도 그대로 실행되고 토스트만 표시됩니다. extraPatterns와 allowPatterns는 항목 하나에 JavaScript 정규식 하나를 받습니다. 내장 규칙을 바꾸려면 hooks/rules.ts의 RULES 배열에서 해당 규칙의 pattern을 수정하십시오.

설정유형기본값설명
modestring (block | warn)"block"Mode. block refuses a matching command; warn lets it run and shows a toast.
blockForcePushbooleantrueBlock force-push to main/master. Refuse git push --force / -f / +main to main or master.
blockHardResetbooleanfalseBlock git reset --hard. Also refuse git reset --hard (off by default: it is a common, recoverable-ish workflow).
extraPatternsstring[]Extra patterns. Additional JavaScript regular expressions; a Bash command matching any of them is treated as dangerous.
allowPatternsstring[]Allow patterns. JavaScript regular expressions; a Bash command matching any of them is never blocked, whatever else it matches.

Claude Code에서 /config로 변경하세요. 모드가 즉시 다시 로드됩니다.

권한 및 안전

도구 호출 가로채기는 이 모드가 존재하는 이유 그 자체입니다. 모드는 모든 Bash 명령을 실행 전에 확인하고 거부할 수 있습니다. 명령을 고쳐 쓰지 않으며, 직접 명령을 실행하지도 않습니다. UI 변경은 토스트 표시에 해당합니다. 그 밖에 자체적인 파일, 네트워크, 모델, 명령 접근 권한은 없습니다.

이 모드는 실수를 막기 위한 보호 장치이지 샌드박스가 아닙니다. 패턴을 피하도록 만든 명령은 통과할 수 있으므로 Claude Code의 권한 확인 프롬프트는 켜 두십시오. 모드를 끄려면 /plugin disable cm-block-dangerous-commands를 실행하고, 모든 모드를 끈 채 세션을 시작하려면 claude --safe-mode를 사용하십시오.

도구 호출 가로채기
Claude가 하는 모든 도구 호출을 볼 수 있고(tool.call / tool.check), 이를 차단하거나 변경할 수 있습니다.
UI 변경
Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).

호환성 및 문제 해결

macOS 터미널에서 Claude Code 2.1.291로 테스트했습니다. 차단되어야 할 명령이 여전히 실행된다면 다음을 확인하십시오.

  • claude --version이 2.1.287 이상인지, 그리고 /plugin에서 모드가 활성화되어 있는지 확인하십시오.
  • 셸에서 설치했다면 /reload-plugins를 실행하십시오.
  • /config에서 mode가 warn이 아니라 block인지 확인하십시오.
  • allowPatterns 항목이 의도보다 넓은 범위와 일치하고 있지 않은지 확인하십시오.
  • 가드는 Bash 도구만 다룹니다. Edit과 Write를 통한 파일 편집은 검사하지 않습니다.

안전한 명령이 거부된다면 모드 전체를 경고 모드로 바꾸기보다 범위가 좁은 허용 패턴을 추가하십시오.

자주 묻는 질문

이 모드가 Claude Code의 권한 확인 프롬프트를 대신하나요?
아닙니다. 흔한 실수를 막기 위한 패턴 기반 가드일 뿐입니다. 난독화된 명령은 정규식을 빠져나갈 수 있으므로 권한 확인 프롬프트와 거부(deny) 규칙은 계속 켜 두십시오.
명령이 차단되면 Claude에게는 무엇이 보이나요?
호출이 거부되면서 이유가 함께 전달됩니다. 이유에는 규칙 이름과 차단 사유가 담기고, 사용자에게 직접 실행을 요청하거나 /config에서 allowPatterns 또는 mode를 조정하라는 제안이 포함됩니다. Claude는 보통 더 안전한 명령을 고르거나 사용자에게 묻습니다.
특정 명령 하나만 허용하려면 어떻게 하나요?
/config의 allowPatterns에 정규식을 추가하십시오. 여기에 일치하면 내장 규칙과 extraPatterns보다 항상 우선합니다.
git reset --hard도 차단되나요?
기본값으로는 차단되지 않습니다. 흔히 쓰이고 의도적으로 실행하는 경우가 많은 작업이기 때문입니다. 차단하려면 blockHardReset을 켜십시오.
모드 자체에 오류가 나면 어떻게 되나요?
tool.call 훅은 실패 시 차단(fail closed) 방식으로 동작합니다. 명령이 실행되기 전에 검사가 예외를 던지면, 검사에 실패했다는 메시지와 함께 명령이 거부됩니다.
Claude Code에서 실행 중인 프롬프트 위 Git 브랜치

프롬프트 위 Git 브랜치

Claude Code 프롬프트 위 한 줄 띠에 git 브랜치, 변경된 파일 수, ahead/behind 상태를 표시합니다.

  • 프롬프트 위
  • 명령어 실행
  • 도구 호출 가로채기
  • UI 변경

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 완료 토스트

완료 토스트

긴 Claude 턴이 끝나면 "Done in 2m 14s" 토스트와 짧은 알림음을 내고, 데스크톱 알림도 선택적으로 보냅니다.

  • 토스트
  • 명령어 실행
  • UI 변경
  • 소리 재생

v2.1.291에서 테스트됨

Claude Code에서 실행 중인 도구 호출 카운터

도구 호출 카운터

Claude의 도구 호출을 턴별·세션별로 세어 스피너 옆에 표시하고, 상세 내역을 보는 /tally 명령을 추가합니다.

  • 스피너
  • 대화 기록
  • 상태 표시줄
  • 도구 호출 가로채기
  • UI 변경
  • 명령어/도구 추가

v2.1.291에서 테스트됨

더 보기: 안전 가드, Git 및 GitHub.