본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 27. 16:51

Devin for Terminal의 Hooks를 사용하여 '위험한 명령어'를 자동으로 차단하기: 가드레일 설계

요약

Devin for Terminal의 Hooks 기능을 활용하여 AI 에이전트의 위험한 명령어 실행을 차단하는 가드레일 설계 방법을 소개합니다. PreToolUse 이벤트를 통해 특정 명령어를 검사하고 차단함으로써 자동 승인 모드에서도 안전성을 확보할 수 있습니다.

핵심 포인트

  • Hooks를 통해 툴 실행 전후에 커스텀 로직 삽입 가능
  • PreToolUse 단계에서 종료 코드 2를 반환하여 위험 명령어 차단
  • Claude Code의 hooks 형식과 호환되어 기존 설정 활용 가능
  • 자동 승인 모드와 핀포인트 거부 리스트의 조합으로 안전성 확보

AI 에이전트에게 자동 승인(이전에 작성한 dangerous 모드 등)으로 작업을 맡길 때, 머릿속을 스치는 불안함은 "** rm -rf 나 git push --force 를 멋대로 실행하면 어떡하지**"라는 생각입니다.

"신뢰할 수 있는 상황에서만 사용한다"라고 말하는 것은 쉽지만, 인간의 주의력에는 한계가 있습니다. 정말로 필요한 것은 시스템으로서 위험한 조작을 차단하는 가드레일입니다.

Devin for Terminal의 Hooks는 툴 실행 전후에 명령어(command)나 체크를 삽입할 수 있는 메커니즘으로, 바로 이 가드레일 용도로 사용할 수 있습니다. 게다가 Claude Code의 hooks 형식과 호환되므로 기존 설정을 유용할 수 있습니다. 이번에는 이 Hooks를 "안전밸브"로서 설계하는 이야기에 대해 다룹니다.

내용은 공식 문서(Hooks Overview)와 devin 2026.5.x를 통해 확인했습니다. 버전에 따른 차이는 devin --help나 공식 문서로 보충하시기 바랍니다.

Hooks는 세션의 라이프사이클(lifecycle) 상의 7가지 이벤트에 반응합니다.

이벤트타이밍
PreToolUse툴이 실행되기 전
PostToolUse툴이 완료된 후
PermissionRequest권한 판단이 필요할 때
UserPromptSubmit사용자가 메시지를 전송했을 때
Stop에이전트가 정지하려고 할 때
SessionStart세션 시작 시
SessionEnd세션 종료 시

가드레일 용도로 주역이 되는 것은 PreToolUse입니다. 툴이 동작하기 에 개입하여 내용을 검사하고, 위험하면 차단할 수 있습니다.

Hooks 설정은 전용 파일이나 config에 작성합니다.

장소용도
.devin/hooks.v1.json권장. 단독 파일이며, 내용 전체가 hooks 객체
.devin/config.jsonhooksconfig에 함께 두는 경우
.devin/config.local.json개인용 로컬 덮어쓰기 (git 제외)
.claude/settings.jsonClaude Code 형식 (후술)

PreToolUse에서 쉘 실행(exec) 전에 검사 스크립트를 실행하는 설정입니다. .devin/hooks.v1.json에 작성합니다.

{
"PreToolUse": [
{
...

matcher로 대상 툴(여기서는 exec)을 좁히고, type: "command"인 훅이 검사 스크립트를 호출합니다. **스크립트에는 이벤트 데이터가 JSON 형태로 표준 입력(stdin)으로 전달되며, 종료 코드(exit code) 2를 반환하면 해당 조작을 차단(block)**할 수 있습니다.

검사 스크립트 측의 예시는 다음과 같은 이미지입니다.

#!/usr/bin/env bash
# 표준 입력으로부터 실행되려는 명령어를 받음
payload=$(cat)
...

이렇게 하면, dangerous 모드에서 자동 승인을 하고 있더라도, ** rm -rf 계열만은 절대로 통과시키지 않는** 안전밸브를 만들 수 있습니다. 저는 이 "자동 승인 × 핀포인트 거부 리스트"의 조합이 가장 현실적인 타협점이라고 느낍니다.

차단 이외에도 훅은 폭넓게 사용할 수 있습니다.

하고 싶은 것훅의 사용법
위험한 명령어를 차단PreToolUse에서 종료 코드 2 → 차단
편집 후 자동 포맷팅PostToolUse에서 formatter를 실행
컨텍스트 주입툴 호출 시 지시사항 추가
알림·로그부수 효과(side effect)로서 스크립트 실행
권한 동적 제어decisionapprove / block을 반환

type에는 쉘을 호출하는 command 외에도, LLM으로 판단하는 prompt 타입도 있습니다. "이 명령어가 문맥적으로 타당한가"를 AI에게 판단하게 하는 등의 부드러운 제어도 가능합니다.

Devin for Terminal의 hooks는 Claude Code의 hooks 형식과 호환됩니다. read_config_from.claude

가 유효(기본값)할 때, .claude/settings.json의 hooks를 자동으로 읽어옵니다.

이미 Claude Code에서 "rm -rf를 막는 훅"을 작성해 두었다면, Devin 측에서도 동일한 가드레일(Guardrail)이 그대로 적용됩니다. 세션 중에는 ** /hooks**를 통해 현재 로드된 훅과 그 설정 원본 파일 목록을 확인할 수 있으므로, "어떤 설정이 적용되고 있는지"를 확인할 수 있습니다.

자동 승인(Auto-approval)은 편리하지만, 무방비하게 사용하면 사고가 발생할 수 있습니다. Hooks의 PreToolUse에서 위험한 작업만을 확실하게 차단하는 안전장치를 하나 마련해 두면, "자동으로 실행하는 것"과 "사고를 방지하는 것"을 동시에 달성할 수 있습니다.

게다가 Claude Code의 hooks 자산을 그대로 사용할 수 있습니다. 우선 rm -rfpush --force를 막는 작은 훅부터 시작하여, 자동화의 안정성을 높여보시기 바랍니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0