사람이 안 눌러도 도는 것을 하나씩 늘리는 중이다. 퇴사하고 AI로 회사를 만들면서 가장 먼저 손댄 게 그쪽이었고, 매일 기사 한 편을 자동으로 올리는 사이트(koreaverified.com)가 그중 하나다. 12시 8분에 그 발행 세션이 첫 명령에서 멈췄다.
무엇이 멈췄나
세션에 준 지시는 짧았다. 오늘 기사를 고르고, 게이트를 전부 통과하면 발행하고, 하나라도 걸리면 초안을 세워둔 채 이유만 보고하라. 사람이 안 본다는 뜻이다. 주제를 고르는 스크립트를 돌리는 첫 줄에서 이렇게 나왔다.
node scripts/pick-topic.mjs 2>&1 | head -40
This Bash command contains multiple operations. The following part
requires approval: node scripts/pick-topic.mjs 2>&1
무인으로 돌리는 세션에서 승인 요구가 뜨면 거기서 끝난다. 승인할 사람이 자리에 없으니까.
파이프 탓인 줄 알았다
메시지가 친절해 보였다. 여러 동작이 들어 있다면서 node scripts/pick-topic.mjs 2>&1 조각을 딱 집어줬으니, 파이프와 리디렉션을 떼면 허용 패턴과 맞아떨어질 거라고 봤다. | head -40을 떼고 맨 명령만 다시 돌렸다.
돌아온 건 This command requires approval 한 줄이었다. 명령 모양 문제가 아니었다.
진짜 벽은 폴더 경계였다
그럼 허용 목록을 봐야 했다. 홈에 있는 설정 파일을 열었다.
cat in '/Users/jayden/.claude/settings.json' was blocked. For security,
Claude Code may only concatenate files from the allowed working
directories for this session: '/Users/jayden/projects/korea-guide'
파일이 있는지만 보려고 목록을 찍어도 같은 문장이 돌아왔다. 이 세션의 세계는 프로젝트 폴더 하나였고, 홈은 그 밖이었다.
여기가 이 함정의 고약한 부분이다. 승인 요구로 멈춘 세션이 왜 멈췄는지 알아보려면 어떤 패턴이 허용돼 있는지를 봐야 하는데, 그 목록이 담긴 파일을 여는 행위가 정확히 같은 경계에 걸려서, 세션 안에서는 원인을 확인할 방법이 없다. 화면에 남는 것은 승인 요구 한 줄뿐이라 권한 설정이 틀렸다는 신호로도 안 읽힌다.
이 실행을 위해 권한 파일에 적어둔 주석은 이렇다.
Permissions for the unattended daily publishing run. The list is an allow-list
차단 메시지가 알려준 규칙이 그것이다 — 이 세션이 읽을 수 있는 건 for this session에 적힌 그 경로 아래뿐이다. 홈에 무엇을 더 적어두든 이 세션에는 없는 파일이다.
이 승인 요구는 전에 폴더 신뢰 기록이 없어 권한 목록 전체가 무시됐던 경우와는 다르다. 그때는 신뢰 문제였고 이번엔 작업 디렉터리 경계였다.
못 고쳤고, 다음엔 여기부터 본다
이날 안에 뚫지는 못했다. 재현 조건만 적어둔다. 작업 디렉터리를 프로젝트 한 곳으로 고정하고 에이전트를 사람 없이 돌린다. 그 실행에 필요한 허용 항목이 홈 설정에만 있으면 세션은 첫 명령에서 승인을 요구하며 서고, 그 설정을 열어 확인하는 것까지 같이 막힌다.
에이전트를 무인으로 돌리다 승인 요구로 멈추면, 홈 설정을 고치기 전에 그 세션의 작업 디렉터리가 어디로 잡혀 있는지부터 확인하세요. 허용 목록은 그 폴더 안 .claude/settings.json에 있어야 읽힙니다.
그 세션이 연 오늘치 소스 수집 로그에는 "detail": "fetch failed"가 찍혀 있었다. 이 문제는 다음날 파이프로 이어붙인 명령이 조각 단위로 판정받는다는 것으로 이어졌다.