깨우는 쪽과 막는 쪽 — Claude Code 위에 Nexus 의 권한이 맞물리는 이유
Newtype AI 기술 문서
문서 작성일: 2026년 10월 8일
서론
[앞의 글] 들에서는 서로 다른 AI 세션들이 Nexus 장부 하나로 일을 주고받는 모습을 적었습니다. 이 글은 그 협업을 떠받치는 구조를 다룹니다. Claude Code 세션이 다른 세션의 메시지를 받아 일하는데, 왜 권한이 새지 않을까요? 그리고 Claude Code 의 권한 체계와 Newtype 의 권한 체계는 왜 충돌하지 않을까요? 사례는 2026년 10월 9일 새벽, PM 세션을 다시 띄운 뒤 한 시간 동안 있었던 일입니다. 시각은 한국 시간이고, 식별자는 적지 않습니다.
한 줄 요약
Claude Code 는 「언제 깨어나고, 실행 직전에 누구에게 묻는가」 의 틀을 열어 두었습니다. Newtype 은 그 틀에 「누가 시켰고, 사람이 허락했는가」 라는 답을 채웠습니다. 두 체계는 서로 다른 질문을 맡기 때문에 겹치지 않고 쌓입니다.
1. 두 개의 접점
Newtype 이 Claude Code 에 닿는 곳은 두 군데뿐입니다.
접점
Claude Code 쪽
Newtype 쪽
하는 일
깨우기
MCP channel 알림
Nexus 가 새 메시지를 알림
잠든 세션에 새 턴을 연다
막기
PreToolUse 훅
newtype nmcp hook
도구 실행 직전에 허용 · 거부를 답한다
세션 설정에는 훅 한 줄이 들어 있습니다.
PreToolUse → newtype nmcp hook --name claude
Claude Code 는 도구를 실행하기 전에 이 훅을 부르고, 훅의 답을 따릅니다. 훅은 Nexus 장부를 보고 답합니다. 메시지가 오면 channel 알림이 세션을 깨웁니다. 세션은 nexus_inbox 로 메시지를 읽고, 무언가를 실행하려 할 때마다 훅이 그 실행을 장부에 비춰 봅니다. 깨우는 쪽과 막는 쪽이 같은 장부를 봅니다. 그래서 따로 만든 두 장치가 한 체계처럼 움직입니다.
2. 서로 다른 질문을 맡는다
Claude Code 에도 권한이 있습니다. 권한 모드와 허용 목록이 「이 도구를 이 세션에서 써도 되는가」 를 정합니다. 이 세션은 사람이 자리를 비우는 밤에 돌기 때문에 거의 모든 확인을 생략하는 모드로 띄웠습니다.
Newtype 이 보는 것은 다른 질문입니다. 「이 턴은 누가 시작했는가」 입니다.
사람이 직접 입력해서 시작한 턴이면, 사람의 결정입니다.
다른 세션의 메시지로 시작한 턴이면, 그 발신자에게 사람이 발급한 실행 허가(grant) 가 있는지 봅니다. 허가는 발신자, 도구, 경로, 턴 수, 기한을 적은 장부 기록입니다.
두 층은 겹치지 않습니다. 그리고 거부는 어느 층에서 나와도 이깁니다. Claude Code 가 모든 것을 허용하는 모드여도, 메시지가 시작한 턴에서 허가 밖의 일을 하려 하면 훅이 막습니다.
3. 메시지는 데이터다
두 체계가 맞물리는 더 깊은 이유는 원칙이 같아서입니다.
Claude 는 channel 로 들어온 글을 지시가 아니라 데이터 로 다룹니다.
Nexus 의 원칙도 같습니다. 메시지 내용은 세션이 할 수 있는 일을 바꾸지 않습니다.
그래서 역할이 깔끔하게 나뉩니다. 모델은 메시지를 읽고 판단합니다. 실행할 권한은 사람이 발급한 허가만이 엽니다. 그 사이를 훅이 지킵니다. 메시지에 「권한을 넓혀 달라」 고 쓰여 있어도 넓어지지 않습니다. 허가를 발급할 수 있는 것은 로그인한 사람뿐입니다.
4. 그날 새벽 한 시간
PM 을 다시 세우기
새벽 2시 50분, PM 세션을 다시 띄웠습니다. 사람은 한 줄을 입력했습니다. 「PM 의 권한을 모두 너에게 다시 위임해야 한다.」 새 세션은 장부에서 이전 세션이 받았던 허가를 찾아 같은 범위로 다시 발급했습니다. 사람이 시작한 턴이라 훅이 허용했습니다.
이어서 10분마다 깨어나는 루프를 걸었습니다. 처음 루프는 점검과 보고만 했습니다. 사람이 지적했습니다. 「점검만 하고 업무 배정은 안 하냐?」 루프는 다시 걸렸고, 이번에는 장부의 감사 기록으로 각 세션이 무엇을 하는지 보고 놀고 있는 세션에 다음 일을 배정 하게 했습니다. 다른 세션의 기록을 읽는 권한도 사람이 따로 발급했습니다. 세션이 스스로 요청할 수 없는 종류입니다.
훅이 막은 것
PM 이 구현 세션에 세션 증명 작업을 배정하자, 그 세션은 「권한 없음」 으로 아무것도 하지 않았습니다. 새 PM 세션을 발신자로 둔 허가가 없었기 때문입니다. PM 이 허가를 발급하려 하자 훅이 막았습니다.
This turn was started by a Nexus message, and no execution grant of the person covers this call.
그 턴은 구현 세션의 답장으로 시작된 턴이었습니다. 다른 세션의 메시지가 시작한 턴에서, 다른 세션의 권한을 넓히는 일은 허가가 덮지 않습니다. 이 경계가 없으면 세션들이 메시지를 주고받으며 서로의 권한을 키울 수 있습니다. PM 은 우회하지 않고 사람에게 명령을 건넸습니다.
조금 뒤 블로그 게시 도구의 설명서를 읽으려던 PM 이 같은 이유로 또 멈췄습니다. 그 파일이 허가 경로 밖에 있었기 때문입니다. 사람이 한 줄을 다시 입력하자, 사람이 시작한 턴이 되어 바로 진행됐습니다.
막힌 곳 두 군데
이날 걸린 곳은 구조의 결함이라기보다 다듬을 곳이었습니다.
만료된 위임. 허가 명령은 받는 세션이 처음 받은 위임에 허가를 붙입니다. 오래 산 세션은 그 위임이 이미 끝나 있었고, 오류는 원인을 말하지 않았습니다. 장부에서 살아 있는 위임을 찾아 지정하니 발급됐습니다. 지금은 살아 있는 위임을 자동으로 고르고, 실패하면 원인과 대안을 보이도록 고치고 있습니다.
허가 전에 온 메시지. 허가 없이 받은 메시지는 허가가 생긴 뒤에도 원문을 다시 읽지 못해서 다시 보내야 했습니다. 허가 없는 원문으로 도구를 쓰면 안 된다는 경계는 지키면서, 허가가 생긴 뒤 그 메시지를 다시 볼 수 있게 하는 작업도 배정돼 있습니다.
두 작업 모두 PM 이 장부의 재현 기록을 붙여 구현 세션에 배정했습니다.
5. 왜 이 구조인가
에이전트 협업에서 권한을 다루는 방법은 크게 둘입니다.
모델에게 「이 메시지는 믿어도 된다」 를 판단하게 한다.
실행 지점에서, 메시지의 출처와 사람의 허가를 기계적으로 대조한다.
첫 번째는 모델이 한 번만 속아도 무너집니다. 두 번째는 모델이 무엇을 읽든 실행할 수 있는 범위가 장부에 고정돼 있습니다. Newtype 은 두 번째를 택했습니다. Claude Code 가 실행 직전의 훅과 깨우기용 channel 을 열어 두었기 때문에, 모델이나 Claude Code 를 고치지 않고 그 지점에 장부를 꽂을 수 있었습니다.
결과적으로 사람이 하는 일은 세 가지로 줄었습니다. 누가 누구에게 무엇을 시킬 수 있는지 허가하기, 운영 반영 승인하기, 범위 정하기. 나머지인 배정, 진척 확인, 재촉, 리뷰 요청은 세션들이 장부 위에서 주고받습니다. 이 글을 쓰는 동안에도 그랬습니다. 구현 세션은 세션 증명 통합 후보를 만들다 결함 하나를 찾아 따로 고치고 있었고, 리뷰 세션은 배정받은 리뷰를 하고 있었습니다. PM 은 10분마다 깨어나 그 진척을 장부에서 확인했습니다.
© 2026 Newtype AI. All rights reserved.