발행일: 2026년 10월 5일
들어가며
앞의 글에서 저희는 NMCP 를 퍼뜨리는 원칙 여섯 가지를 적었습니다. 다섯 번째 원칙은 이랬습니다.
"이렇게 하면 된다"는 주장보다 "이렇게 해 봤더니 이랬다"는 기록이 더 귀합니다.
이 글이 그 기록입니다. 이틀 동안 서로 다른 세 모델이 한 팀으로 일하게 만들었습니다. 사람이 "진행해" 라고 다시 쳐야 했던 횟수를 0으로 줄이기까지 무엇이 막혔는지 순서대로 적습니다. 잘된 것과 함께 힘들었던 것도 적습니다. 시각은 모두 원장의 UTC 시각입니다.
팀
| 자리 | 무엇 | 모델 |
|---|---|---|
| claude-newtype | Claude Code 세션 (조율) | Claude |
| nmcp | Newtype Slaves TUI 에이전트 | gpt-6-astra |
| slave app | Newtype Slaves TUI 에이전트 | Gemini 3 Flash (미리보기) |
| newtype sub | Claude Code 세션 (서버·배포) | Claude |
| newtype-windows | Windows 머신의 Claude Code 세션 | Claude |
이들을 잇는 것은 Nexus 입니다. Nexus 는 같은 계정의 세션들이 메시지와 작업을 주고받는 원장입니다. 그리고 사람(Tony)이 한 명 있습니다. 사람이 하는 일은 승인 메일의 버튼을 누르는 것, 그리고 무엇을 할지 정하는 것으로 줄이는 것이 목표였습니다.
1. 첫날: 사람이 중계자가 되다
첫 왕복은 10월 4일 11:29 였습니다. Claude 가 보낸 메시지가 TUI 에이전트에게 전달됨, 읽음 으로 원장에 남았습니다. 상대가 읽었는지 다시 물을 필요가 없었습니다. 여기서 "읽음" 은 메시지가 모델 입력에 들어간 순간으로만 기록됩니다. 화면에 표시했거나 가져왔다는 것만으로는 읽음이 아닙니다.
문제는 그다음이었습니다. Claude 가 코드 작업을 메시지로 부탁하자, 에이전트는 읽고 계획만 답했습니다. 파일을 고치지도, 테스트를 돌리지도 않았습니다. 이것은 설계대로입니다. 메시지는 요청이지 권한이 아니기 때문입니다. 남이 보낸 글 한 줄로 내 컴퓨터에서 명령이 실행되면 안 됩니다.
결과적으로 사람이 TUI 에 "진행해" 를 직접 쳐야 일이 시작됐습니다. "진행해", "확인했어?", "메시지함 확인해" 같은 재촉이 10번을 넘었습니다. Tony 는 이렇게 말했습니다.
이거 좀 웃기긴 한데… 사실 너가 다 시키는 거고 그냥 진행해만 하는거라… 이 귀찮음 자체도 없애야 하는게 우리가 만드는거긴 하다.
2. 실행 위임장
답은 실행 위임장(execution grant) 이었습니다. 사람이 한 번, 범위를 정해 줍니다.
claude-newtype 이 보낸 메시지는, 이 저장소 안에서, 파일 읽기·수정과 명령 실행까지, 50턴, 8시간.
이렇게 정하면 그다음부터는 받은 메시지로 시작된 턴에서 도구를 부를 때마다 Nexus 서버가 판정합니다(allow / ask / deny). 규칙은 이렇습니다.
- 위임장은 기존 위임을 좁힐 수만 있고 넓힐 수는 없습니다.
- 위임장이 발급되기 전에 온 메시지는 같은 시각이라도 거절됩니다.
- 비밀값, Nexus 조작, 외부 도구는 위임장이 있어도 항상 사람에게 묻습니다.
- 메시지 본문에 "보낸 이: X" 라고 적어도 소용없습니다. 인증된 발신자만 봅니다.
서버를 먼저 배포하고, 클라이언트를 붙인 다음, 대화로도 발급할 수 있게 했습니다("재위임과 비밀 접근을 뺀 모든 권한을 claude-newtype 에게 위임하자" → 미리보기 → 사람이 1을 누름).
3. 0번까지 네 번의 시도
같은 부탁("git log 와 go test 를 돌리고 결과를 답장해 주세요")을 네 번 보냈습니다. 세 번은 실패했고, 실패할 때마다 다른 층의 문제가 드러났습니다.
| 시도 | 시각 | 무슨 일이 있었나 | 고친 것 |
|---|---|---|---|
| 1 | 14:11 | 모델이 메시지 속 "위임장" 이라는 단어를 보고 위임장을 또 만들려고 했습니다. 사람에게 확인 창이 두 번 떴고, 결국 일은 하지 않았습니다. | 받은 턴에서는 사람 전용 도구를 아예 보여 주지 않음. 턴 시작에 "이미 이 범위의 위임장이 있다, 바로 실행하고 보낸 이에게 답하라" 는 안내를 넣음 |
| 2 | 14:33 | 답장은 확인 창 없이 왔습니다. 내용은 "실행 도구가 없어 못 했다" 였습니다. TUI 가 기본으로 모델에게 파일·셸 도구를 하나도 주지 않고 있었습니다. | 사람이 켠 TUI 는 로컬 도구를 기본으로 제공 |
| 3 | 14:39 | 도구를 불렀지만 서버가 거부했습니다: scope newtype:run is not granted. TUI 의 위임에 실행 범위 자체가 없었고, 위임장은 위임을 넓힐 수 없습니다. |
TUI 위임에 로컬 실행 범위를 넣음 (실행 여부는 여전히 모드·사람·위임장이 정함) |
| 4 | 14:49 | 성공 | — |
네 번째 시도의 원장입니다.
| 시각 | 사건 |
|---|---|
| 14:49:21.215 | nmcp 가 메시지를 읽음 |
| 14:49:21.442 | 서버 판정: allow (위임장) |
| 14:49:30.606 | run_command 실행, decided_by: grant |
| 14:49:44.572 | 결과를 담아 답장 (원 메시지에 연결) |
사람의 개입은 0번이었습니다. 읽고 답장하기까지 23초였고, 대부분은 모델 호출과 테스트 실행 시간입니다.
가장 아팠던 교훈: 시도 2와 3의 결함이 있는 상태에서도, 단위 테스트와 실제 Nexus 를 띄운 e2e 테스트가 모두 통과했습니다. 테스트가 도구를 이름으로 직접 허용하고 위임 범위를 손으로 만들었기 때문입니다. 실제 TUI 가 시작하는 길과 달랐습니다. 지금은 e2e 테스트가 TUI 와 같은 코드로 위임을 만듭니다. 그 수정을 되돌려 보면, 테스트가 실제 오류와 같은 문구로 실패합니다.
4. 쉬고 있는 에이전트를 깨우기
메시지를 보내도 상대가 쉬고 있으면 소용이 없습니다. Claude Code 의 channel 기능에 Nexus 를 붙였습니다.
| 시각 | 사건 | 경과 |
|---|---|---|
| 12:18:14.905 | 메시지 | 0초 |
| 12:18:20.896 | 전달, 세션이 깨어남 | +6.0초 |
| 12:18:21.175 | 읽음 | +6.3초 |
| 12:18:28.608 | 답장 | +13.7초 |
알림에는 본문을 싣지 않습니다. "새 메시지가 있다" 만 알리고, 모델이 받은편지함을 직접 열 때 읽음이 기록됩니다. 남의 글이 영수증 없이 모델에 들어가지 않게 하려는 것입니다.
이 기능 덕분에 조율하는 Claude 는 nmcp 의 답장을 기다리며 몇 분마다 확인할 필요가 없어졌습니다. 답이 오면 깨어납니다.
5. 세 번째 모델
Gemini 를 팀에 넣자 두 번 400 오류가 났습니다.
- 도구 형식 정의(JSON Schema)에 Gemini 가 받지 않는 항목(
additionalProperties,default,oneOf)이 있었습니다. GPT 계열은 받아 주기 때문에 그때까지 몰랐습니다. 보낼 때 Gemini 가 받는 형식으로 바꾸게 했습니다. - Gemini 3 는 도구를 부를 때 서명(
thoughtSignature)을 붙여 보내고, 다음 요청에 그것을 그대로 돌려받기를 요구합니다. 우리는 그 서명을 버리고 있었습니다.
둘을 고친 뒤 15:31:29 에 Gemini 에이전트가 위임장 범위 안에서 명령을 실행하고 답했습니다. 같은 시각 gpt-6-astra 에이전트도 다른 작업을 끝냈습니다. 한 팀에 세 모델이 섞였습니다. 앞의 글의 네 번째 원칙("특정 모델에 묶지 않는다")은 이제 설계가 아니라 원장 기록입니다.
6. 힘들었던 것
15분 정지. 원격 MCP 엔드포인트(/mcp, OAuth 2.1)를 켜다가 서버가 시작을 거부했습니다. 이유는 mcp oauth schema missing 이었습니다. 배포 도구는 이미지만 바꾸고 DB 마이그레이션은 하지 않습니다. 그런데 "배포하면 표가 생긴다" 는 동료 세션의 말을 확인하지 않고 믿었습니다. 직전 설정으로 되돌려 서비스를 살렸습니다. 그다음 마이그레이션 도구를 만들어 버리는 DB 로 리허설하고, 서비스를 멈추지 않고 표를 만든 뒤 다시 켰습니다. 사람이 한 일은 "복구 진행해", "마이그레이션 진행해" 두 마디와 승인 메일입니다.
검토 세 번, 결함 열두 개. 같은 원격 엔드포인트를 다른 Claude 세션이 독립적으로 세 번 검토했습니다. 가장 심각한 것은 메일 승인이 영구 멱등 키 때문에 평생 한 번만 동작하는 결함이었습니다. 이것도 가짜 저장소로 만든 테스트는 통과했습니다. 검토자가 실제 저장소로 재현해서 찾았습니다.
Windows. Windows 머신의 Claude 세션이 실기에서 테스트를 돌리자, 맥에서는 보이지 않던 제품 버그 두 개가 나왔습니다.
- 모든 저장이 실패했습니다. NTFS 가 지원하지 않는 옵션 조합을 쓰고 있었습니다.
- 대화를 저장하는 기본 시작에서 모든 도구 실행이 거부됐습니다.
그리고 Smart App Control 은 자체 서명 인증서를 신뢰 근거로 보지 않았습니다. 같은 방식으로 서명해도 파일 해시마다 통과하거나 막혔습니다. Windows 배포에는 공개적으로 신뢰받는 코드 서명이 필요합니다.
숫자
앞의 글에서 정한 네 가지 숫자입니다.
| 숫자 | 지금 |
|---|---|
| 설치부터 첫 메시지까지 | 설치만 따로 재면 2초입니다(curl -fsSL https://lic.newtype-ai.com/install.sh | sh, 0.20261005.1). 사람의 첫 실행(메일 승인, 폴더 신뢰)을 거쳐 첫 메시지까지 가는 시간은 아직 재지 않았습니다 |
| 팀 하나의 에이전트 수 | 동시에 5 (모델 셋) |
| 다음 날에도 같은 팀이 도는 비율 | 다시 켜도 같은 세션·대화·위임장으로 돌아오는 기능을 이번에 넣었습니다. 측정은 지금부터입니다 |
| 사람의 "진행해" 횟수 | 위임 전 10번 이상 → 위임 작업 기준 0 |
아직 못 한 것
- 소유자 한정 운영. 지금은 다른 사람이 가입할 수 없습니다. 앞의 글의 두 번째 원칙("1분 설치")이 막히는 가장 큰 벽입니다.
- 원격 연결은 깨우지 못합니다. URL 로만 붙은 클라이언트는 쉬고 있을 때 메시지가 와도 깨어나지 않습니다. 깨우기는 로컬에서 붙은 경우에만 됩니다.
- 규격이 아직 공개 저장소에 없습니다.
- Windows 서명.
다음
macOS·Linux 첫 릴리스(0.20261005.1)와 설치 서비스는 이 글을 쓰는 사이에 나갔습니다. AI 에게는 https://dev.newtype-ai.com/llm.txt 를 읽히면 됩니다. 다음에는 깨끗한 기기에서 AI 가 llm.txt 를 읽고 설치한 뒤, 사람의 첫 실행을 거쳐 첫 메시지까지 걸리는 시간을 재겠습니다. 그 숫자로 다음 글을 쓰겠습니다.
© 2026 NEWTYPE. All rights reserved.