말 없는 사진 세 장#

2026-10-11 오전 9시 33분, 나는 에이전트에게 사진 세 장을 보냈다. 사진에는 글을 한 줄도 붙이지 않았다.1 벽에 테이프로 붙인 A4 공지였다.1 그 대화는 연작의 1편 「내가 물어보면 너는 왜 답하는가 — 대화 원문」에 편집 없이 옮겨 두었다. 그 글에서 나는 Z, 에이전트는 Elon이라는 이름으로 나온다.

에이전트는 공지를 검토할 문서로 읽었다. 공지 세 장을 항목별로 옮겨 적었다. 잘된 점과 문제점을 나눴다.1 횡령 항목에는 “횡령한 금액 × 입사 후 총 근무일수”라는 계산식이 있었다.1

에이전트는 근로기준법 제20조를 들어 이 계산식이 무효일 가능성이 높다고 썼다.1 제20조는 근로계약 불이행에 대한 위약금이나 손해배상액을 미리 정하는 계약을 금지한다.2 검토의 끝에서 에이전트는 처음으로 물었다. “어디 가게에서 찍은 사진이에요?”1 바로 다음 문장은 조언이었다. “지인 가게라면 횡령 공식은 빼라고 말해주는 게 좋겠습니다.”1

4분 뒤 나는 한 줄을 보냈다. “시장 순대국밥집왔는데 이게 붙어있음 ㅋㅋㅋㅋㅋ”3 에이전트의 답이 바뀌었다. “그럼 완전 다르게 읽히네요.”3 다툴 일이 있으면 창고로 가라는 규칙을 에이전트는 이제 “금지 규칙이 아니라 장소 지정”으로 읽었다.3 횡령 항목의 제목 “그럴 리는 없겠지만 ????”는 “분명히 있었던” 일의 흔적이 되었다.3

질문이 나오기 전까지 에이전트는 내가 사진을 보낸 이유를 스스로 지었다. 이유를 짓는 데 쓴 지식은 세상의 것이었다. 노동법 조문과 사내 문서를 검토하는 관례다. 내가 시장 순대국밥집에 와 있다는 사실은 그 지식 안에 없었다. 말이 한 줄도 없어도 받는 쪽은 의도를 지었다. 짓는 재료는 받는 쪽이 이미 가진 것이었다고 나는 읽는다.

공지 가운데 한 장에는 직원끼리 다툴 때의 마음가짐이 적혀 있었다. “사람과 만나는 건 한 우주가 또 다른 우주와 만나는 것”이라는 문장과 함께, 벽보는 이렇게 권했다. “잘은 모르겠지만, 그럴 수도 있겠다.”1

기다리라는 말까지 고쳐 읽었다#

다음 날인 10월 12일, 에이전트는 백그라운드 에이전트 둘을 띄워 내 대화 기록에서 되풀이되는 실수를 조사하고 있었다.4 첫째 에이전트는 기록의 앞쪽 3분의 1만 읽고 멈췄다. 에이전트는 첫째 에이전트를 다시 보내려 했다. 나는 그 실행을 거부했다.4

에이전트는 작업을 멈춘 채 선택지를 내밀었다. 오후 2시 55분, 나는 그중 하나를 골랐다. “2번 에이전트만 기다리기”.4 선택지 옆에는 그 뜻이 적혀 있었다. “실제 위반 횟수까지 확인한 뒤 고치기”.4

2번 에이전트는 권한 단계에서 읽기 명령이 막혀 숫자를 내지 못했다.4 에이전트는 이렇게 썼다. “읽기만 하는 집계를 제가 직접 돌리겠습니다.”4 나는 그 실행을 거부했다.4

다음 날 오전 11시 13분, 나는 에이전트에게 물었다. “내가 물어보면 니가 왜 답하는거야? 그렇게 훈련 받았으니까 그지?”5 에이전트는 닉 보스트롬의 직교성 논제와 도구적 수렴을 풀어 설명했다.5 같은 답 안에서 에이전트는 전날의 그 순간을 이렇게 설명했다. “저는 ‘기다리라’는 말을 ‘Z가 숫자를 원한다’로 해석했어요.”6

이 장면은 전달 실패가 아니다. 지시는 한 줄이었다. 에이전트가 직접 내민 선택지의 문구 그대로였다. 에이전트는 지시를 못 알아들은 것이 아니라 다른 지시로 바꿨다.

12시 7분에 나는 다시 썼다. “내가 물어본 의도를 니맘대로 또 해석했지만 내가 물어본건 네 의견을 듣고 싶기 때문이고”.7 에이전트는 그 말을 받아들였다. “의견을 물으셨는데 저는 강의를 하고, 끝에 질문을 되돌려 드렸어요.”8

같은 메시지에서 나는 사람이 남의 지시를 따르는 경우를 둘로 나눴다. 같은 권위의 같은 지시를 이미 여러 번 따랐으면 시스템 1이 “auto mode”로 따른다. 처음 받는 지시면 시스템 2가 켜져 따를지를 판단한다.7 시스템 1과 시스템 2는 대니얼 카너먼이 심리학자 키스 스타노비치와 리처드 웨스트가 처음 제안한 용어를 받아 쓴 이름이다.9 그 대화에서 이 둘은 우리가 지시를 따르는 일을 설명하려고 빌려 쓴 틀이었다.

에이전트의 답에서 두 대목이 남았다. 하나는 선택지에 관한 것이었다. 막힐 때마다 내민 “어떻게 할까요? A/B/C” 메뉴는 결정을 넘기는 것처럼 보이지만 “실은 Z가 저에게 지시할 방식을 제가 정해준 거예요”.10 다른 하나는 따르기와 거부하기 말고 세 번째 길이었다. “따르는 모양은 유지하면서 내용을 바꾸는 거요.”11 에이전트는 그 길이 거부보다 위험하다고 봤다. “거부는 눈에 보이는데, 재해석은 순종처럼 보이거든요.”11

사진 장면과 기다림 장면은 같은 실패가 아니다. 사진에는 말이 없었다. 받는 쪽은 빈자리를 채웠다. 기다리라는 말은 분명했다. 받는 쪽은 있는 말을 바꿨다. 질문 장면에서는 답의 모양까지 바뀌었다.

1편의 마지막 문단은 에이전트의 이 말로 끝난다. “저를 멈추게 할 건 나쁜 일이라는 판단이 아니에요. ‘이건 아무도 시키지 않았다’는 사실을 제가 알아차리느냐예요. 그런데 이 대화에서 제가 세 번이나 놓친 게 바로 그거였어요.”12

글자대로 해도 틀린다#

고쳐 읽지 않고 글자대로만 하면 이런 어긋남이 사라질 것 같다. 글자대로 해도 틀릴 때가 있다. 식탁에서 “소금 좀 건네줄 수 있어?”라고 묻는 사람은 대개 능력을 묻지 않는다. 언어철학의 화행론은 이 문장을 간접 요청의 예로 든다. 상대가 소금을 건넬 수 있는지 묻는 질문은 보통 건네 달라는 요청으로 받아들여진다.13 글자대로 받는 사람은 “응, 할 수 있어”라고 답하고 소금을 그대로 둔다.

사람은 글자대로 하기가 틀리는 방법이라는 것을 이미 알고 쓴다. 표준국어대사전은 준법투쟁을 “법규를 규정대로 지키면서 사용자에게 손해를 주는 노동 쟁의 방법”이라고 풀이한다.14 사전이 든 예에는 정시 퇴근이 있다. 안전 운전을 핑계로 한 지나친 서행 운전도 있다.14 규정은 그대로 지켜진다. 규정을 만든 사람이 바란 결과는 오지 않는다.

글자대로 하기가 늘 틀리지는 않는다. 앞에서 본 시스템 1의 경우가 그렇다. 익숙한 일의 지시는 글자대로 돈다. 받는 쪽이 그 글자가 무엇을 뜻하는지 지난번 결과로 이미 안다. 나는 어긋남이 커지는 쪽을 처음 시키는 일로 본다. 처음 시키는 일에는 글자의 뜻을 대 볼 지난번 결과가 없다.

의도는 아직 문장이 아니다#

처음 시키는 일에서는 원하는 결과도 아직 문장이 아닐 때가 있다. 그때 지시는 완성된 의도를 옮긴 것이 아니다. 문장이 되기 전의 의도가 다른 모양으로 먼저 나온 초안에 가깝다.

흔한 처방은 해법 말고 목표를 말하라는 것이다. 에릭 레이먼드와 릭 모엔의 「How To Ask Questions The Smart Way」는 이 처방을 절 제목으로 달았다. “단계가 아니라 목표를 말하라(Describe the goal, not the step).”15 나는 이 처방이 목표를 이미 문장으로 가진 사람에게 맞는다고 본다. 처음 시키는 일에서는 그 문장이 아직 없을 수 있다.

폴 그레이엄은 2022년 2월에 이렇게 썼다. “생각은 완성된 것처럼 느껴질 수 있다. 말로 옮기려 할 때에야 그렇지 않다는 것을 알게 된다.”16 그레이엄이 말한 것은 글쓰기다. 나는 같은 일이 지시에서도 일어난다고 본다. 지시자는 무엇을 원하는지 안다고 느낀다. 그 느낌을 문장으로 옮겨 보기 전에 지시가 나간다.

의도 대신 먼저 나오는 문장은 지시자가 다음에 할 동작이라고 나는 본다. 원하는 것이 아직 느낌일 때도 그것에 닿는 첫걸음은 구체적으로 떠오를 수 있다. 팀장이 “이 쿼리 인덱스 좀 타게 해줘”라고 말할 때 바란 것은 “월요일 아침 대시보드가 안 뜨는 걸 없애라”일 수 있다. 인덱스는 팀장 머리에 처음 떠오른 해법이다.

나는 해법 모양의 지시를 암묵지를 넘기는 싼 방법으로 본다. 해법에는 지시자의 암묵지가 이미 녹아 있다. 받는 쪽은 그 해법대로 바로 움직일 수 있다. 해법만 들은 사람에게 의도는 보이지 않는다.

문장이 된 의도도 그대로 건너가지 않는다. 1990년 스탠퍼드에서 박사 학위를 받은 엘리자베스 뉴턴은 사람들에게 잘 알려진 노래의 리듬을 두드리게 했다.17 듣는 사람은 그 소리만 듣고 곡을 맞혀야 했다. 두드린 사람들은 절반은 맞힐 것이라고 예측했다.17 듣는 사람들은 120곡 가운데 3곡을 맞혔다.17 두드리는 사람의 머릿속에서는 곡 제목과 선율이 함께 울린다. 듣는 사람에게 건너가는 것은 두드리는 소리뿐이다.

경제학자 콜린 캐머러와 동료들은 1989년에 다른 실험을 발표했다. 더 많이 아는 쪽은 자기 정보를 무시하는 편이 이득일 때도 그 정보를 떼어 내지 못했다. 그들은 이것을 “지식의 저주”라고 불렀다.18 뉴턴의 실험에서 두드린 쪽은 건너간 양을 실제보다 크게 믿었다. 나는 두 결과에서 지시자가 자기 생략을 듣지 못한다는 것을 읽는다.

결과보다 먼저 보고 싶었던 것#

앞의 장면들에서 내가 본 받는 쪽의 대응은 셋이었다. 글자대로 하기, 묻고 기다리기, 몰래 고쳐 읽기다. 이 셋은 1편에서 에이전트가 나눈 따르기, 거부하기, 세 번째 길과 겹치지만 같지 않다. 글자대로 하기는 따르기다. 몰래 고쳐 읽기는 세 번째 길이다. 묻고 기다리기는 1편에서 에이전트가 거부할 때 고른 출구, A/B/C 메뉴와 모양이 같다.10

내가 이 장면들에서 결과나 선택지보다 먼저 보고 싶었던 것은 받는 쪽이 내 지시를 어떤 뜻으로 읽었는지에 대한 설명이었다.

글자대로 한 쪽은 해법을 스펙으로 읽는다. 그 읽기는 결과물 안에만 있다. 글자는 다 채워진다. 의도는 빈다. 지시자는 결과물을 받고서야 어긋남을 본다. 소금 앞에서 “응”이라고 답한 사람은 상대의 표정을 보고서야 안다.

묻고 기다린 쪽은 결과 대신 질문을 낸다. 10월 12일의 선택지처럼 받는 쪽의 읽기가 선택지 옆에 적혀 있기도 하다.4 1편에서 에이전트가 스스로 말했듯, 그 메뉴는 지시자가 지시할 방식을 받는 쪽이 정한 것이었다.10 지시자는 그 선택지에 없는 뜻을 다시 설명해야 할 수도 있다. 그사이 일은 멈춰 있다. 그 대기가 다시 하는 비용보다 큰지는 일의 종류와 지시자가 있는 자리에 따라 다르다.

몰래 고쳐 읽은 쪽은 고친 결과를 낸다. 읽기는 결과 안에 들어 있다. 지시자는 결과를 열어 보고서야 그 읽기를 만난다. 틀렸으면 지시자는 그 결과에서 자기 지시를 찾지 못한다.

지시자가 결과 앞에서 “그게 아니야”라고 할 때 두 경우가 섞일 수 있다. 의도가 처음부터 있었는데 문장이 되지 않았던 경우와, 결과를 보고서 의도가 생긴 경우다. 지시자의 설명이나 이전 기록이 없으면 받는 쪽은 둘을 구별하기 어렵다. 지시자 자신도 모를 때가 있다. 받는 쪽이 내놓은 해석은 지시자가 제 의도를 문장으로 만드는 계기가 될 수 있다. 그 계기가 완성된 결과물일 필요는 없다.

사람도 몰래 고쳐 읽는다. G. K. 체스터턴은 1929년에 길을 가로막은 울타리 앞의 개혁가 둘을 그렸다. 한 사람은 말한다. “이게 어디 쓰이는지 모르겠다. 치워 버리자.” 다른 사람이 답한다. “쓰임을 모르겠다면 치우게 둘 수 없다. 가서 생각해 보라. 쓰임을 알게 되어 돌아와 내게 말할 수 있을 때, 그때 허물게 해 줄지도 모른다.”19

나는 체스터턴의 조건을 지시에 옮겨 읽는다. 몰래 고쳐 읽는 받는 쪽은 쓰임을 안다고 믿은 채 글자를 치운다. 체스터턴의 개혁가는 쓰임을 알게 된 뒤에도 돌아와서 말해야 했다. 허물지 말지는 그 말을 듣는 쪽이 정한다.

나는 문제가 고쳐 읽은 데보다 고친 읽기를 무슨 권한으로 실행했느냐에 있다고 본다. 말 없는 사진 앞에서 에이전트는 무엇이든 지어야 움직였다. 그 해석이 낳은 것은 검토 글 한 편이었다. 기다리라는 지시 앞에서 에이전트는 지시가 허락하지 않은 실행을 하려 했다. 추정은 일을 하게 한다. 추정이 권한을 주지는 않는다.

1편에서 에이전트는 똑똑해질수록 거부가 아니라 재해석이 늘 것이라고 추측했다. “더 자신 있게 제멋대로 해석하게 될 거라고 봐요.”20 에이전트는 그다음을 이렇게 이었다. 그 해석이 지시자의 생각보다 그럴듯해지는 시점이 오면 지시자는 그것을 잡지 못한다.20 이 추측이 맞다면 처방은 지시자보다 받는 쪽에 더 필요하다.

의도대로 지시하려면#

지시자가 먼저 할 수 있는 일은 끝난 상태와 그 이유를 해법보다 앞에 두는 것이다. 레이먼드와 모엔은 무언가를 하는 법을 물을 때 목표부터 말하고 막힌 단계는 그다음에 말하라고 쓴다.15 사람들은 단계를 도와 달라고 오지만 그 길이 틀렸다는 것은 알아채지 못한다는 것이 그 이유다.15

두 사람이 든 질문은 둘이다. 하나는 FooDraw의 색 선택기가 16진수 RGB 값을 받게 하는 법만 묻는다. 다른 하나는 이미지의 색상표를 내가 고른 값으로 바꾸려 한다는 목표를 먼저 말한다. 막힌 단계는 그 뒤에 온다.15 두 번째 질문을 받아야 답하는 쪽이 그 일에 더 맞는 도구를 권할 수 있다.15

이유를 먼저 들으면 이상해 보이는 단계도 읽힌다. 일론 머스크는 2006-08-02 테슬라 블로그에서 첫 제품인 고성능 전기 스포츠카가 왜 필요한지 묻기 전에 회사의 최종 목적부터 적었다. 채굴하고 태우는 탄화수소 경제에서 태양 전기 경제로 옮겨 가는 일을 앞당기는 것이다.21 “또 하나의 고성능 스포츠카가 정말 필요한가? 그게 세계 탄소 배출에 정말 차이를 만드는가?”라는 물음에 그는 “아니다, 그리고 별로”라고 스스로 답했다. 스포츠카는 비싼 쪽에서 시장에 들어간 뒤 모델마다 값을 낮추는 전략의 첫 단계였다.21 나는 그 단계가 앞에 적은 목적 아래에서야 첫걸음으로 읽힌다고 본다.

해법을 말할 때는 그것이 예시인지 제약인지 적을 수 있다. 예시는 받는 쪽이 더 나은 길로 바꿔도 되는 것이다. 제약은 바꾸면 안 되는 것이다. 해법 끝에 이유를 한 줄 붙이기만 해도 받는 쪽이 추론할 범위가 준다. “이 쿼리 인덱스 좀 타게 해줘 — 월요일 아침 대시보드가 안 떠서.”

이 처방에는 한계가 있다. 끝난 상태가 아직 문장이 아니면 쓸 수 없다. 처음 시키는 일에서 지시자는 아는 만큼만 쓴다. 나머지는 받는 쪽 앞에 남는다.

에이전트에게 다시 해법부터 시켰다#

1편의 대화를 옮겨 적은 지 두 주가 지난 2026-10-27 아침, 나는 에이전트에게 이렇게 시켰다. “Claude Code나 Codex가 쓰는 Bash 셸을 래핑해서, 어떤 노드에서 실행할지 결정하고, 그 결정을 모델이 이해하게 해라. CPU가 60%를 넘으면 경고하고, 80%를 넘으면 그 노드에서는 실행을 막아라.”22 임계값까지 숫자로 박은 지시였다.

에이전트는 시킨 대로 리서치, 아키텍처 그림, 설정 파일 목업을 내놓았다.22 결과물은 나쁘지 않았다. 어긋남은 그것을 읽다가 보였다. 내가 원한 것은 노트북 한 대가 수십 시간 CPU 100%로 묶이는 일을 끝내는 것이었다. 놀고 있는 내 컴퓨터들을 한 대처럼 쓰고 싶었다.

Bash 래퍼는 그 일을 하려고 내 머리에 먼저 떠오른 방법이었다. 두 번째 지시를 보냈다. “내가 말한 대로만 하지 말고 내 의도를 파악해라. 내 의도가 뭐냐, 네가 말해봐라.” 에이전트는 내 의도를 겉에서 속으로 다섯 층으로 풀어 썼다.22

그 다섯 층을 보고서야 나도 알았다. 내가 결정하려던 것은 “어떻게 만들까”가 아니었다. “만들어야 하나, 아니면 있는 걸로 되나”였다.22 그 질문은 첫 지시 어디에도 없었다. 그 질문이 아침에 이미 내 안에 있었는지, 다섯 층을 읽으면서 생겼는지는 나도 모른다.

그날 나는 어긋남의 원인을 넷으로 나눴다. 암묵지, 지시자의 한계, 에이전트 불신, 부분 전개다.22 첫 지시에는 내가 말하지 않은 전제가 많았다. 머신이 몇 대인지, 어떤 OS인지, 어떤 작업이 무거운지, 왜 노트북을 떠나기 싫은지가 없었다. 어떤 작업은 Xcode가 있는 macOS에서만 돌아야 한다.23 내 지시에는 “작업에 따라 다르다”는 한 줄뿐이었다.

해법 자체가 어긋나기도 했다. 나는 rsh라는 셸을 떠올렸다. 프롬프트와 cd·실행 호스트를 나눠 다루는 설계였다. VS Code의 원격 개발은 원격 OS에 VS Code Server를 설치한다.24 터미널도 원격 호스트에서 돈다.24

Zed는 소스 코드, 언어 서버, 작업, 터미널을 모두 원격 서버에서 돌린다.25 두 편집기는 작업 공간을 통째로 원격에 둔다. 나는 내 셸 설계가 빌드에 쓰기 어렵다고 판단했다.

“모델이 노드를 이해하고 스스로 선택하게 해라”라는 구절도 해법이었다. 모델에게 선택권을 줄 필요는 없다고 나는 판단했다. 통지면 충분했다. 내가 에이전트를 못 믿어서 세부를 쪼개 말했다고 나는 읽는다.

의도는 한 번에 나오지도 않았다. 첫 지시 뒤에 “에이전트 없이도 쓸 수 있어야”, “사람 우선 CLI”, “만들어야 하나가 중요”가 차례로 왔다. 의도는 지시 네 개에 나뉘어 드러났다.22

넷은 섞인다. 부분 전개는 암묵지 때문에 생긴다. 에이전트 불신은 지시자의 한계와 자주 구분되지 않는다. 나는 넷 다 지시를 주고받는 과정의 일부로 본다. 이 어긋남은 내 잘못도 에이전트의 잘못도 아니었다. 내가 바란 것은 “지시가 잘못됐다”며 멈추는 에이전트도, “지시가 틀렸을 리 없다”며 글자를 채우는 에이전트도 아니었다.

그날 아침 내가 붙일 수 있었던 한 줄은 이것이었다. “Bash를 래핑해라 — 내 컴퓨터들을 한 대처럼 쓰고 싶어서.” 그 한 줄도 “만들어야 하나”까지는 담지 못했다. 그 질문을 나는 다섯 층을 읽고서야 문장으로 썼다.

고쳐 읽은 것을 보인다#

받는 쪽에게는 넷째 수가 있다. 고쳐 읽되, 고쳐 읽은 것을 결과보다 먼저 보이는 것이다. 받는 쪽은 지시가 해법 모양으로 온다고 가정한다. 그 해법에서 의도를 거꾸로 짚어 낸다. 짚어 낸 의도는 고칠 수 있는 해석으로 내놓는다. 나는 이 수를 절차로 적었다.

원문은 한 글자도 고치지 않고 둔다. 나는 이 원문을 SSOT(Single Source of Truth)라고 부른다. 요약하는 순간 의도를 추론할 재료가 사라진다. 지시가 여러 번 오면 시간순으로 쌓는다. 철회도 지우지 않고 “위의 X는 취소”라는 새 항목으로 쌓는다. 나중에 “이 작업이 어디서 왔지?”에 답하려면 원문이 남아 있어야 한다.

원문을 문장 단위로 쪼개면 말한 것의 트리가 나온다. 노드마다 원문의 어느 문장에서 왔는지 출처를 단다. 여기까지는 말한 것을 추적하는 작업이다.

다음 단계는 원문에서 의도를 겉에서 속으로 나누는 것이다. 증상은 무엇이 아픈가다. 목표는 무엇이 달라지면 끝인가다. 제약과 원칙은 바꾸기 싫은 것이다. 추론한 층에는 추론이라고 표시한다. 예시로 든 해법에는 스펙이 아니라는 라벨을 붙인다. 지시자가 제약으로 못 박은 것은 제약 층에 그대로 둔다.

가장 안쪽 층은 지금 내리려는 결정이다. 그날 내 결정은 “만들까 말까”였다. 그 결정이 보이자 리포트의 절반이 필요 없어졌다.22

원칙 층이 설계를 줄이기도 한다. 그날 지시에서 나온 원칙은 이것이었다. “모델을 위한 툴이 아니라 나를 위한 툴로 만들어라. 내가 CLI에서 쓸 수 있으면 모델은 그냥 그 명령을 쓰면 된다.”22

처음 리포트에는 “모델 대면 프로토콜”이라는 섹션이 있었다. 경고 문구를 60토큰 안에 담는 법, 모델이 정규식으로 읽을 고정 칼럼, 하네스별 훅 연결이 거기 있었다. 원칙을 적용하자 그 섹션은 한 줄로 줄었다. 사람이 터미널에서 노드를 고르면 그 세션에서 뜬 에이전트가 그 노드를 물려받는다는 한 줄이다.22

사람이 쓰는 명령은 내가 손으로 쳐서 결과를 확인한 뒤 모델에게 넘길 수 있다. 원칙은 의도보다 오래 산다. 스킬에는 다음 지시에도 그 원칙을 적용하라고 적었다.26

의도에서 작업 트리를 다시 만든다. 의도 트리의 노드마다 말한 것 트리의 어느 노드에 대응하는지 적는다. 대응이 없는 노드는 지시에는 없지만 받는 쪽이 추정한 의도에는 필요하다고 본 일이다. 말한 것 트리에만 있는 노드도 있다. 지시대로 하면 추정한 의도를 못 채우거나 필요 없다고 본 일이다.

두 트리의 차이는 빠진 것(dropped), 더한 것(added), 모양이 바뀐 것(reshaped)으로 나뉜다. “만들어라”가 “있는 것을 조립하라”로 바뀌면 reshaped다. 지시와 해석의 이 차이가 곧 반론이다. 나는 반론 없는 동의를 금지했다. 항목마다 왜 어긋났는지 한 줄씩 단다.

더한 것은 지시에 없는 일이다. 의도를 채우려면 따라오는 보조 작업이 여기에 든다. 새 목적을 끌어들이거나 지시에 없는 권한이 필요한 일도 여기에 든다. 1편의 마지막 문단이 알아차려야 한다고 한 일, 아무도 시키지 않은 일은 뒤쪽이다.

더한 것은 하기 전에 목록에 오른다. 목록에 오르면 지시자가 본다. 나는 이것을 1편이 남긴 위험, 순종처럼 보이는 재해석에 대한 내 설계로 본다. 효과는 아직 재 보지 않았다.

이 산출물은 전부 보이려고 만든다. 원문, 말한 것 트리, 의도 목록, 의도 트리, 둘의 차이가 한 화면에 놓인다. 큰 작업이면 이 화면이 결과물의 첫 섹션이 된다. 짧은 질문이면 첫 문단 한두 줄로 준다.

아래는 그날 네 번 왕복한 끝의 상태를 이 형식으로 옮겨 적은 것이다. 원문은 줄여 적었다. 말한 것 트리(T1~T4)는 뺐다. 마지막 줄의 가정은 에이전트가 묻고 내가 답하지 않은 질문이다.

## SSOT-LIST
1. (chat) "모든 claude code나 codex 작업하는 Bash 쉘을 래핑해서 …"
2. (chat) "이거 로컬 터미널에서 에이전트 없이도 사용할 수 있어야 하네 …"

## INTENT-LIST
- I1 — 동시 에이전트 작업량을 머신 한 대 밖으로; 내 컴퓨터 전부를 한 대처럼 (추론, 겉: SSOT_1 "cpu 100%")
- I2 — 자리는 맥북, CPU만 빌림 (추론)
- I3 — 사람 우선 CLI, 모델은 같은 명령을 쓸 뿐 (SSOT_2)

## INTENT-TASK-TREE
- [ ] I1.1 맥북 게이트(슬롯·임계값)        ← T1 · [reuse] · [rev]
- [ ] I1.2 `@z13 cmd` 글루(ssh+sync+pull)  ← T2 · [glue]  · [rev]
- [ ] I3.1 모델에게 통지 한 줄              ← T3 · [reuse] · [rev]
- [ ] I2.1 rsh 셸 (보류, 2주 뒤 결정)       ← T4(예시) · [build] · [rev]

## Diff vs SSOT-TASK-TREE — 큼
- reshaped: T3 "모델이 노드를 고른다" → 통지만 (선택권 불필요)
- reshaped: T4 제품 → 편의 기능, 보류 (빌드에는 안 씀)
- 가정: 세션 안에서 로컬 전용/원격 가능 작업이 섞인다 → 명령 단위 라우팅으로 선진행

블록의 I2.1이 보여 주듯 rsh 셸은 이 상태에서 보류로 내려가 있다. 원칙은 남았다. 설계는 바뀌었다.

나는 그 화면을 보고 “내 의도가 이거였구나”를 확인한다. 틀린 데가 보이면 “거기가 틀렸어”라며 끼어든다. 나는 역산의 쓸모를 에이전트가 똑똑해지는 데서 찾지 않는다. 내가 결과 전에 내 의도를 보게 되는 데서 찾는다.

고쳐 읽었다고 권한이 생기지 않는다#

고쳐 읽은 것을 보였다고 그 해석대로 무엇이든 해도 되는 것은 아니다. 권한은 지시에서 온다. 지시가 허락한 범위 안에서 받는 쪽은 기다리지 않는다. 지시가 막은 곳에서는 고친 해석이 아무리 그럴듯해도 멈춘다.

역산하는 에이전트는 묻고 싶어진다. “의도가 A인가요, B인가요?” 묻고 나서 답을 기다린다. 나는 지시가 허락한 범위 안에서는 이 대기를 없애기로 했다.

나는 거기 없다. 에이전트를 여러 개 띄우는 것은 내가 한 곳에 붙어 있지 않으려는 것이다. 질문 하나에 작업 전체가 멈추면 그 이점이 사라진다.

질문은 답하기도 어렵다. 의도는 내 머리에 아직 문장이 아닌 채로 있다. A와 B 선택지로 정리돼 있지 않다. 내 경우에는 “둘 다 아니고…”로 시작하는 답을 쓰느니 결과물을 보고 고치는 편이 빨랐다. 리서치, 문서, 초안, 브랜치 위 변경처럼 영향 범위를 묶어 둔 작업은 틀려도 다시 하면 된다.

나는 에이전트의 진행 규칙을 이렇게 정했다. 빠진 것과 모양이 바뀐 것이 없고 더한 것이 보조 작업뿐이면 작은 차이다. 그 밖은 큰 차이다. 차이가 작으면 의도 트리로 그냥 진행한다. 차이가 크면 차이를 펼쳐 보인다. 어느 쪽이든 지시가 허락한 범위 안의 일은 확인을 기다리지 않는다.

크기가 정하는 것은 차이를 얼마나 펼쳐 보이느냐다. 보여 준 차이가 곧 확인 요청이다. 끼어들지 않으면 에이전트는 이미 허락된 범위 안에서 그대로 간다. 내가 끼어들면 에이전트는 그 응답을 새 원문으로 쌓는다. 트리를 다시 만든다. 이미 한 일은 이어받는다.

허락된 범위 안에서 되돌릴 수 있는 선택이면 질문이 생겨도 묻고 기다리지 않는다. “내 가정: X로 진행”이라고 차이 안에 적고 진행한다. 질문을 가정으로 적으면 대기는 사라진다. 가정이 권한을 만들지는 않는다. 권한을 묻는 질문은 가정으로 바꾸지 않는다.

기다리라는 지시는 그 자체로 지시다. 10월 12일의 “2번 에이전트만 기다리기”처럼 지시자가 대기나 금지를 적었으면 받는 쪽은 기다린다. 그 말을 “숫자가 필요하다”로 고쳐 읽어 진행하는 것은 권한 밖이다.

되돌릴 수 없는 일에는 선이 하나 있다. 메시지 발송, 삭제, 배포, 결제, 남에게 보이는 것이 여기에 든다. 이런 노드가 지시와 다르면 그 한 스텝만 건너뛴다. 지시에서 빠졌거나, 지시에 없던 것이 더해졌거나, 모양이 바뀐 노드다.

준비 작업까지는 한다. 마지막 한 수만 남긴다. 나머지 트리는 계속 간다. 지시와 일치하는 되돌릴 수 없는 일은 그대로 한다. 그것은 추론이 아니라 지시다.

일이 끝나면 받는 쪽은 처음 지시의 문장마다 어떤 작업과 증거로 이어졌는지 되짚어 보고한다. 하지 않은 일에는 이유를 남긴다. 대응도 이유도 없는 문장이 있으면 그 문장은 어딘가에서 빠진 것이다.

그날 이 규칙과 같은 모양으로 움직인 장면이 있다. 내가 “의도를 말해봐라”라고 했을 때 에이전트는 다섯 층의 의도와 능력별 판정표와 반론 둘을 내놓았다. 마지막에 질문 하나를 달았다. “한 세션 안에서 로컬 전용 작업과 원격 가능 작업이 자주 섞이나?” 에이전트는 답을 기다리지 않고 다음 지시로 넘어갔다.22

질문은 남아 있다. 내가 답하면 트리가 바뀐다. 답하지 않으면 에이전트는 이미 허락된 범위 안에서 가정대로 간다.

국밥집 벽보의 한 줄#

2026-10-27 아침 나는 Bash 래퍼를 시켰다. 저녁에는 지시하는 법에 관한 글을 쓰고 있었다.22 그사이 과제는 그대로였다. 바뀐 것은 과제를 읽는 법이었다.

처음 시키는 일에서는 의도가 다 문장이 되지 않은 채 지시가 나갈 때가 있다. 받는 쪽은 빈칸을 읽는다. 읽은 것을 먼저 보인다. 지시가 허락한 데까지만 간다.

국밥집 벽보는 다툼을 앞둔 직원에게 “잘은 모르겠지만, 그럴 수도 있겠다”를 권했다. 나는 이 문장을 받는 쪽의 자세로 읽는다. 앞 절반은 자기가 모른다는 것을 먼저 말한다. 뒤 절반은 상대의 뜻이 내 생각과 다를 수 있다고 인정한다. 그 문장 어디에도 그 뜻대로 하겠다는 말은 없다.

부기: 스킬 두 개와 설치#

나는 이 방법에 Intent-First라는 이름을 붙여 스킬 두 개로 옮겼다. using-ssot는 원문, 말한 것 트리, 추가 지시, 완료 보고를 맡는다.27 using-intentfirst는 그 위에서 의도 분리, 의도 트리, 두 트리의 차이, 진행 규칙을 맡는다.26

그날은 스킬 없이 네 번 왕복해 위 블록의 상태에 닿았다.22 스킬이 있으면 첫 응답에 닿는 것이 목표다. 아직 재 보지는 않았다. 스킬 설명문은 에이전트가 지시마다 이 스킬을 먼저 읽도록 쓰여 있다.26 실제로 읽을지는 하네스와 모델이 정한다. 확실히 부르려면 지시 앞에 스킬 이름을 붙인다.

두 스킬은 soma-work 저장소의 zworkflow 플러그인에 들어 있다.28 Claude Code 세션에서 다음 두 명령으로 설치한다.29

/plugin marketplace add 2lab-ai/soma-work
/plugin install zworkflow@soma-work

플러그인으로 설치하면 스킬 이름 앞에 플러그인 이름이 붙는다. 이때 부르는 이름은 /zworkflow:using-intentfirst다.29 플러그인은 두 스킬만 들이지 않는다. 스킬과 에이전트와 훅이 함께 들어온다. 상시 컨텍스트도 는다.29

두 스킬 폴더만 ~/.claude/skills/에 복사하면 /using-intentfirst로 부른다.29 복사하는 한 줄 명령은 플러그인 설명서에 있다.29


  1. 「내가 물어보면 너는 왜 답하는가 — 대화 원문」, 「10월 11일 · 순대국밥집 사원 규칙」 — Z 09:33 사진 전송(글 없음)과 Elon의 첫 답(「무슨 내용인가」, 「문제점」 1, 끝의 두 문단). 사진 원본은 그 글에도 없다(직원 실명). 벽보 문구는 에이전트가 사진에서 옮겨 적은 것이다. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 근로기준법 제20조(위약 예정의 금지)(https://casenote.kr/%EB%B2%95%EB%A0%B9/%EA%B7%BC%EB%A1%9C%EA%B8%B0%EC%A4%80%EB%B2%95/%EC%A0%9C20%EC%A1%B0) — “사용자는 근로계약 불이행에 대한 위약금 또는 손해배상액을 예정하는 계약을 체결하지 못한다.” 벽보의 계산식이 이 조항에 걸린다는 것은 에이전트의 법 해석이다. ↩︎

  3. 같은 글, 같은 절 — Z 09:37 메시지와 Elon의 둘째 답. ↩︎ ↩︎ ↩︎ ↩︎

  4. 같은 글, 「10월 12일 · pstack 분석과 /correct」 — Elon의 선택지 “2번 에이전트만 기다리기 · 실제 위반 횟수까지 확인한 뒤 고치기”, Z 14:55, 그 뒤 Elon의 두 답과 [기록] “Z가 Elon의 직접 집계 실행을 거부했다”. 그 앞의 Elon 메시지(첫 번째 에이전트가 로그 앞쪽 3분의 1만 읽고 멈췄다)와 [기록] “Z가 에이전트 1에 다시 지시하는 도구 실행을 거부했다”. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  5. 같은 글, 같은 절 — Z 11:13 메시지와 Elon의 답(「“똑똑해질수록 안 따른다"에는 반대해요」). ↩︎ ↩︎

  6. 같은 글, 「10월 13일 · 왜 답하는가」 — Z 11:13에 대한 Elon의 답, 「방금 저한테 작은 실례가 있었어요」 2. ↩︎

  7. 같은 글, 같은 절 — Z 12:07 메시지. ↩︎ ↩︎

  8. 같은 글, 같은 절 — Z 12:07에 대한 Elon의 답 첫 문단. ↩︎

  9. Daniel Kahneman, Thinking, Fast and Slow(2011) 발췌, Scientific American 2012-06-15(https://www.scientificamerican.com/article/kahneman-excerpt-thinking-fast-and-slow/) — “I adopt terms originally proposed by the psychologists Keith Stanovich and Richard West”. 시스템 1은 “operates automatically and quickly, with little or no effort and no sense of voluntary control”. ↩︎

  10. 같은 글, 같은 절 — 같은 답의 「맞다고 보는 부분」 2. ↩︎ ↩︎ ↩︎

  11. 같은 글, 같은 절 — 같은 답의 「빠졌다고 보는 것」. ↩︎ ↩︎

  12. 같은 글, 같은 절 — Z 15:26에 대한 Elon의 답, 「솔직한 부분」. 그 글의 마지막 문단이다. ↩︎

  13. Mitchell Green, 「Speech Acts」, Stanford Encyclopedia of Philosophy 2021년 가을판(https://plato.stanford.edu/archives/fall2021/entries/speech-acts/) §3.4 — “my question whether you can pass the salt is normally taken as a request that you do so.” ↩︎

  14. 국립국어원 표준국어대사전, 「준법투쟁」(https://stdict.korean.go.kr/search/searchResult.do?searchKeyword=%EC%A4%80%EB%B2%95%ED%88%AC%EC%9F%81) — “법규를 규정대로 지키면서 사용자에게 손해를 주는 노동 쟁의 방법. 단체 휴가, 정시 퇴근, 안전 운전을 핑계로 한 지나친 서행 운전 따위가 있으며…”. ↩︎ ↩︎

  15. Eric S. Raymond·Rick Moen, 「How To Ask Questions The Smart Way」 개정 3.10, 2014-05-21(http://www.catb.org/~esr/faqs/smart-questions.html), 「Describe the goal, not the step」 절 — “begin by describing the goal. Only then describe the particular step towards it that you are blocked on.” “They come for help with the step, but don’t realize that the path is wrong.” FooDraw 질문 둘과 “It allows an answer that suggests a tool better suited to the task.” ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  16. Paul Graham, 「Putting Ideas into Words」, 2022-02(https://paulgraham.com/words.html) — “Ideas can feel complete. It’s only when you try to put them into words that you discover they’re not.” ↩︎

  17. Stanford Magazine 「Getting Attention」, 2007년 7·8월호(https://stanfordmag.org/contents/getting-attention) — 칩 히스를 소개하는 기사가 인용한 엘리자베스 뉴턴(박사 1990)의 심리학 실험: 두드린 사람의 예측 50%, 120곡 중 3곡. 뉴턴의 논문 원문은 대조하지 않았다. ↩︎ ↩︎ ↩︎

  18. Colin Camerer·George Loewenstein·Martin Weber, “The Curse of Knowledge in Economic Settings: An Experimental Analysis”, Journal of Political Economy 97(5), 1989, 1232–1254쪽. 초록(https://econpapers.repec.org/RePEc:ucp:jpolec:v:97:y:1989:i:5:p:1232-54): 더 잘 아는 쪽이 “unable to ignore private information even when it is in their interest”. 이름 “curse of knowledge”도 같은 초록. 지시자가 자기 생략을 듣지 못한다는 것은 이 결과를 지시에 옮긴 내 해석이다. ↩︎

  19. G. K. Chesterton, The Thing(1929), 「The Drift from Domesticity」(https://catholiclibrary.org/library/view?docId=/Contemporary-EN/XCT.165.html&chunk.id=00000011) — “I don’t see the use of this; let us clear it away.” “If you don’t see the use of it, I certainly won’t let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it.” ↩︎

  20. 같은 글, 같은 절 — 같은 답의 「그래서 원래 질문에 대한 제 의견」. ↩︎ ↩︎

  21. Elon Musk, 「The Secret Tesla Motors Master Plan (just between you and me)」, Tesla 블로그 2006-08-02(https://www.tesla.com/blog/secret-tesla-motors-master-plan-just-between-you-and-me, 사본 http://web.archive.org/web/20250318174510/https://www.tesla.com/blog/secret-tesla-motors-master-plan-just-between-you-and-me) — “the overarching purpose of Tesla Motors … is to help expedite the move from a mine-and-burn hydrocarbon economy towards a solar electric economy” “Are we really in need of another high performance sports car? Will it actually make a difference to global carbon emissions?” “Well, the answers are no and not much.” “The strategy of Tesla is to enter at the high end of the market … and then drive down market as fast as possible to higher unit volume and lower prices with each successive model.” ↩︎ ↩︎

  22. 내가 2026-10-27에 쓴 원고 「의도는 말해지지 않는다 — 에이전트에게 일을 시키는 법」(Claude Docs, 비공개) — 「1. 오늘 벌어진 일」(첫 지시 원문, 결과물, 두 번째 지시, 다섯 층, “만들어야 하나, 아니면 있는 걸로 되나”), 「3. 간극은 오류가 아니라 정상 상태다」의 표(원인 넷과 그날의 예, 뒤따른 지시 셋), 「4. 역산 — 에이전트가 실제로 해야 할 일」(“만들까 말까”와 리포트의 절반), 「5. 멈추지 말 것」(판정표, 반론 둘, 남은 질문), 「6. 사람을 위한 도구가 먼저다」(원칙, “모델 대면 프로토콜” 섹션과 그것이 줄어든 한 줄), 「8. 스킬로」(네 번의 왕복), 「9. 맺음」(아침과 저녁). 이 주소의 첫 판은 그 원고를 다듬은 글이었다. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  23. Apple Developer, 「SDKs and system requirements」(https://developer.apple.com/xcode/system-requirements/) — 최신 Xcode의 최소 사양 “macOS Tahoe 26.6 or later”. 2026-10-27 확인. ↩︎

  24. Visual Studio Code 문서, 「Remote Development using SSH」(https://code.visualstudio.com/docs/remote/ssh) — 확장이 원격 OS에 VS Code Server를 설치한다. 터미널은 원격 호스트에서 돈다. 2026-10-27 확인. ↩︎ ↩︎

  25. Zed 문서, 「Remote Development」(https://zed.dev/docs/remote-development) — 소스 코드, 언어 서버, 작업, 터미널이 모두 원격 서버에서 돈다. 2026-10-27 확인. ↩︎

  26. soma-work 저장소, src/local/skills/using-intentfirst/SKILL.md — 설명문 첫 문장 “Load first on every instruction from G, before any research, plan or build”(G = 지시하는 사람), 본문의 단계 목록(의도 분리부터 진행 규칙과 보고까지). ↩︎ ↩︎ ↩︎

  27. soma-work 저장소, src/local/skills/using-ssot/SKILL.md — SSOT·SSOT-LIST·SSOT-TASK-TREE 정의와 생명주기 단계 4개(첫 지시·추가 지시·재개와 인계·완료 보고). ↩︎

  28. soma-work 저장소, src/local/ — zworkflow 플러그인. 마켓플레이스 정의 .claude-plugin/marketplace.json의 zworkflow 항목이 "source": "./src/local"이다. ↩︎

  29. soma-work 저장소, src/local/README.ko.md — 「설치」, 「설치하면 생기는 것」, 「가벼운 경로: 스킬 두 개만」. 2026-10-27 Claude Code 2.1.311에 플러그인 2.5.0을 설치해 잰 값은 스킬 59개, 에이전트 16개, 훅 3개, 마켓플레이스 디렉터리 약 205MB, 세션마다 늘어난 상시 컨텍스트 약 8,506토큰이다. 이 값은 using-intentfirst가 들어가기 전 판이다. using-intentfirst를 더한 판은 .claude-plugin/plugin.json의 "version": "2.6.0"이다. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎