클로드 코드로 자동화 만들기 #3 클로드 코드 권한 설정이 통째로 무시될 때 확인할 것

클로드 코드로 자동화 만들기8편 중 3번째

설정 파일에 권한을 정확히 적어도 그 폴더를 한 번 신뢰한 기록이 없으면 목록 전체가 무시된다. 승인 요구가 반복되면 패턴을 고치기 전에 실행이 남긴 로그부터 연다.

정부 지원사업 공고를 자동으로 모으는 사이트에 기사 한 편을 사람 손 없이 올려보려 했다. 퇴사하고 AI로 회사를 만드는 중이라 이 프로젝트에서는 “사람 손 없이”가 기능 목록의 전부인데, 12시 4분에 시킨 일이 첫 스크립트에서 멈춰 13분 뒤 초안만 남기고 끝났다.

첫 명령부터 승인을 기다렸다

기사 한 편을 주제 고르기부터 발행까지 도는 스킬에 조건을 붙여 걸었다. 검사 항목을 전부 통과할 때만 발행하고, 아니면 초안을 남기고 이유를 보고하라고. 주제를 고르는 첫 스크립트(pick-topic.mjs)가 실행되자마자 승인 대기로 멈췄다. 무인으로 돌리려고 권한 목록을 미리 채워둔 폴더에서 일어난 일이다.

패턴 문법을 의심했다

멈춘 자리만 보면 범인은 하나로 보인다. allow에 적어둔 명령 패턴이 실제로 실행되는 명령 문자열과 안 맞는 것.

This Bash command contains multiple operations. The following part
requires approval: node scripts/pick-topic.mjs 2>&1

승인을 요구하는 메시지가 실행하려던 명령 문자열을 이렇게 그대로 찍어주니, 그 문자열과 allow에 적어둔 패턴을 한 줄씩 눈으로 맞춰보는 것이 가장 빠른 길처럼 보였고, 그래서 설정 파일을 열어 permissions 블록부터 확인했다. 다 적혀 있었다. 파이프를 떼고 node scripts/pick-topic.mjs만 돌려도 This command requires approval 한 줄이 돌아왔다. 적혀 있는데 안 먹으니 더더욱 문법이 어긋난 것처럼 보였다.

이 추정에는 구멍이 있었다. 설정 파일이 맞게 쓰였는지는 파일을 열어 보면 알지만, 그 파일이 읽히기는 했는지는 파일을 백 번 열어도 알 수 없다. 그걸 아는 방법은 실행한 쪽이 남긴 로그를 여는 것 하나뿐인데, 나는 13분 동안 그 로그를 열지 않았다.

목록이 읽히기 전에 버려지고 있었다

스킬이 남긴 실행 로그(automation/log/run-2026-09-05.log)를 열었다. 첫 줄에 답이 있었다.

Ignoring 23 permissions.allow entries from .claude/settings.json:
this workspace has not been trusted

큰 숫자 23줄. 권한 규칙을 23줄 적어뒀지만 폴더 신뢰 기록이 없어 전체가 무시됐다.

대조할 패턴이 애초에 없었다. 스물세 줄이 한 줄도 평가되지 않은 채 통째로 버려지고 있었다.

조건은 사람이 한 번도 대화형으로 열어 신뢰 대화상자를 수락한 적 없는 폴더에서 에이전트를 자동으로 돌릴 때다. 증상은 권한이 파일에 정확히 적혀 있는데도 명령마다 승인 요구가 돌아오고, 패턴을 어떻게 손봐도 같은 자리에서 멈추는 것이다. 신뢰 여부는 설정 파일이 아니라 그 폴더를 수락했다는 별도 기록(hasTrustDialogAccepted)에 들어 있어서, 설정 파일만 들여다보는 동안에는 아무 이상도 보이지 않는다. 회피법은 그 폴더를 대화형으로 한 번 열어 수락하거나 신뢰 항목을 직접 켜는 것이고, 이날은 둘 다 안 했다. 못 고친 채로 끝냈다.

무인으로 도는 폴더에서 권한이 안 먹으면, allow 패턴을 손보기 전에 그 실행이 남긴 로그를 먼저 여세요. 설정 파일은 “내가 뭘 적었나”만 보여주고, 그게 쓰였는지는 안 보여줍니다.

문은 두 군데가 닫혀 있었다

권한만 문제였던 것도 아니다. 출처 스냅샷의 lastError에 본문을 거의 얻지 못했다는 문구와 5자가 적혀 있었다. 수집한 원문이 5자면 검사 항목을 통과할 수 없다. 이날 발행이 안 된 이유는 무시된 권한 목록과 5자짜리 본문 둘이다.

전체로는 세션 8개, 12시 4분부터 20시 25분까지, 도구 호출 104회에 실패 신호 39건이 찍혔다. 그중 이 사건이 쓴 건 13분이고, 신뢰 대화상자는 그날 끝까지 수락하지 않아 로그 첫 줄의 그 문장도 5자짜리 lastError도 그대로 남았다.

같은 종류의 승인 요구는 이후에도 이어졌다. 작업 디렉터리 경계 때문에 무인 실행이 다시 승인 요구로 멈춘 날이 있었고, 파이프로 이어붙인 명령이 조각 단위로 판정받는다는 것을 나중에 알았다.

← 전체 글