앞 편의 자동화, 워크트리, 스킬에 이어 남은 부품 둘과 토대 하나입니다. 커넥터는 에이전트가 현실의 도구에 닿게 해서 검증의 힘을 키우고, 서브에이전트는 만드는 쪽과 판정하는 쪽을 갈라 자기 승인을 막고, 기억은 세션이 끝나도 남아 다음 바퀴의 출발점이 됩니다. 다음 편은 이 여섯 요소를 Claude Code와 Codex의 실제 기능에 대응시킵니다.
핵심 요약
- 커넥터의 가치는 "할 수 있는 일"이 아니라 "확인할 수 있는 일"의 수로 잽니다.
- 자기가 만들고 자기가 판정하면 놓칩니다. 우리는 제작자(Claude)와 채점자(Codex)를 분리해 62라운드를 돌렸습니다.
- Claude Code 서브에이전트는 자기 컨텍스트 창에서 돌고 요약만 돌려주며,
memory:필드로 세션 간 기억을 가질 수 있습니다. - 모델은 세션 사이에 잊습니다. 기억은 CLAUDE.md, 자동 메모리, 스킬, 볼트처럼 디스크에 남깁니다.
플러그인과 커넥터: MCP로 이어서 검증력을 키운다
에이전트가 현실의 도구를 다룰 수 있게
파일만 읽고 쓸 수 있는 에이전트는 "코드를 고쳤다"까지는 하지만 "고친 코드가 실제 화면에서 맞게 보인다"는 확인하지 못합니다. 커넥터가 이 간격을 메웁니다. MCP 서버, CLI 도구, API가 전부 커넥터입니다. 디자인 루프의 커넥터는 Playwright(같은 폭으로 풀페이지 캡처), sips(채점용 축소), codex exec(캡처 두 장을 첨부해 채점)였고, 결제 코드 루프의 커넥터는 Supabase(RPC와 유니크 인덱스가 실제로 동시 주문을 막는지 실측)였습니다.
6주차 교재의 MCP 10항 체크리스트가 "붙일 수 있는가"가 아니라 "붙여서 무엇을 확인할 것인가"를 먼저 묻게 하는 이유가 이것입니다. 검증에 쓰이지 않는 커넥터는 컨텍스트만 먹으므로 비활성화합니다.
커넥터가 늘수록 확인하는 힘이 커진다
커넥터가 하나 늘 때마다 검증이 한 층 깊어집니다. 브라우저가 붙으면 "CSS를 바꿨다"가 "390px에서 scrollWidth 실측, 가로 스크롤 0건"이 되고, 채점자가 붙으면 사람의 눈대중이 라운드 간 비교 가능한 점수가 되며, DB가 붙으면 "쿼리를 썼다"가 "동시 주문 두 건 중 하나만 통과"가 되고, 배포 대상이 붙으면 "빌드가 됐다"가 "도메인 200 응답"이 됩니다.
다만 커넥터마다 함정이 있습니다. Playwright는 페이드인이 끝나기 전에 캡처하면 대비가 낮다는 오판을 만들고, 고정 네비게이션이 원본에만 겹치면 없는 컴포넌트를 요구합니다. 채점자에게 큰 이미지를 주면 타임아웃이 납니다. 이런 함정은 스킬에 적어 둡니다. 커넥터의 힘은 함정을 기록한 만큼만 커집니다.
서브에이전트: 생성과 검증을 나눈다
자기가 만들고 자기가 좋다고 하면 놓친다
같은 모델이 같은 컨텍스트에서 만들고 판정하면, 만들 때 한 가정이 판정에도 들어갑니다. 트랜잭션을 뺀 이유를 아는 쪽은 그것이 구멍이라는 것을 보지 못합니다. 우리 전역 규칙에 "같은 활성 컨텍스트에서 자기 승인 금지"가 있는 이유입니다.
결제 diff 교차 리뷰가 그 증거입니다. Claude가 만든 diff를 Codex에 넘기며 불변 규칙 다섯 개를 번호로 적고 "각 규칙 유지 O/X, 트랜잭션 제거로 생긴 구멍, 경쟁 조건, 에러 노출"을 항목별로 묻게 했습니다. 3라운드에서 동시 주문과 비원자적 승인이 나왔습니다. 제작자에게 같은 질문을 했다면 "의도된 설계"라는 답이 나왔을 가능성이 큽니다.
서브에이전트는 역할을 분담시키는 구조
Claude Code의 서브에이전트는 .claude/agents/<이름>.md(프로젝트) 또는 ~/.claude/agents/<이름>.md(개인)에 두는 마크다운입니다. name과 description만 필수이고, tools와 disallowedTools로 도구를 제한하고, model로 sonnet, opus, haiku, fable 중 하나를 고르며, maxTurns로 상한을 둡니다. 자기 컨텍스트 창에서 돌고 주 대화에는 요약만 돌려줍니다.
---
name: payment-reviewer
description: 결제 코드 diff를 불변 규칙에 대조해 O/X와 경쟁 조건을 보고한다. orders·payments 수정 후 호출.
tools: Read, Grep, Glob, Bash
disallowedTools: Write, Edit
model: opus
maxTurns: 20
---
당신은 시니어 백엔드 리뷰어다. 코드를 고치지 말고 판정만 한다.
disallowedTools: Write, Edit가 핵심입니다. 판정자가 고치기 시작하면 다시 자기 승인이 됩니다. 다른 회사 모델로 두는 것이 가장 강한 분리이고, 같은 모델이라도 도구를 막은 별도 서브에이전트가 그다음입니다.
기억: 에이전트는 잊고, 리포지터리는 잊지 않는다
모델은 실행과 실행 사이에 잊는다
Claude Code 문서의 첫 문장이 답입니다. "각 Claude Code 세션은 새로운 컨텍스트 윈도우로 시작됩니다." 오늘 62라운드를 돌며 알아낸 "스티키 헤더는 좌표로 확인해야 한다"는 내일 세션에 없습니다. /compact가 돌면 세션 안에서도 일부가 사라집니다.
그래서 기억은 디스크에 남긴다
남기는 자리는 네 층입니다.
- CLAUDE.md: 사람이 쓰는 지속 지침.
./CLAUDE.md,~/.claude/CLAUDE.md, 경로별.claude/rules/*.md. 매 세션 로드되므로 200줄 이하로 유지합니다. - 자동 메모리: Claude가 스스로 쓰는 노트.
~/.claude/projects/<project>/memory/MEMORY.md의 처음 200줄 또는 25KB만 세션 시작 시 로드됩니다. 서브에이전트도memory: user|project|local로 자기 메모리를 가질 수 있습니다. - 스킬: 절차형 지식. 호출될 때만 로드됩니다.
- 프로젝트 밖의 기록: 옵시디언 볼트와
.omc/wiki/의 방법론 문서와 라운드 표.
Codex는 AGENTS.md가 1번 역할을 합니다. Claude Code는 AGENTS.md를 직접 읽지 않으므로 두 도구를 함께 쓰면 CLAUDE.md 첫 줄에 @AGENTS.md를 적어 가져옵니다.
주어를 정확히 짚자
"에이전트는 잊고, 리포지터리는 잊지 않는다"에서 잊는 주어는 에이전트(모델의 컨텍스트)이고, 잊지 않는 주어는 리포지터리(디스크 위의 파일)입니다. 에이전트를 탓하는 말이 아니라 기억의 책임이 어디 있는지 정하는 말입니다. 기억을 에이전트에게 맡기면 매일 처음부터 시작하고, 리포지터리에 맡기면 라운드가 쌓입니다. 루프가 "쓸수록 나아지는" 유일한 경로입니다.
정리
- 커넥터는 검증에 쓰이는 것만 남기고, 커넥터마다의 함정을 스킬에 기록합니다.
- 제작자와 판정자를 분리합니다. 다른 회사 모델이 가장 강한 분리, 도구를 막은 서브에이전트가 그다음입니다.
- 서브에이전트는
.claude/agents/*.md에 정의하고disallowedTools로 판정자가 고치지 못하게 합니다. - 기억은 CLAUDE.md, 자동 메모리, 스킬, 볼트 네 층의 디스크에 남깁니다.
자주 묻는 질문
커넥터가 많아지면 루프에 무엇이 좋아지나요?
검증이 깊어집니다. 브라우저가 붙으면 뷰포트 실측이, 채점자가 붙으면 라운드 간 비교 가능한 점수가, DB가 붙으면 동시성 실측이 가능해집니다. 검증에 쓰이지 않는 커넥터는 비활성화하고, 각 커넥터의 함정은 스킬에 적어 둡니다.
서브에이전트로 생성과 검증을 나누는 이유는 무엇인가요?
만들 때 한 가정이 판정에 그대로 들어가 구멍을 못 보기 때문입니다. 결제 diff를 Codex에 넘겨 4라운드를 돌리자 제작자가 "의도된 설계"로 넘겼을 경쟁 조건이 3라운드에서 나왔습니다. 판정자에게는 disallowedTools: Write, Edit를 주어 고치지 못하게 합니다.
에이전트의 기억은 왜 컨텍스트에 두면 안 되나요?
세션이 끝나면 컨텍스트가 새로 시작되고, /compact가 돌면 세션 안에서도 일부가 사라지기 때문입니다. CLAUDE.md, 자동 메모리, 스킬, 볼트처럼 디스크에 남겨야 다음 세션의 출발점이 됩니다.
"에이전트는 잊고 리포지터리는 잊지 않는다"에서 주어는 무엇인가요?
잊는 쪽은 에이전트, 즉 모델의 컨텍스트이고, 잊지 않는 쪽은 리포지터리, 즉 디스크 위의 파일입니다. 기억의 책임을 에이전트가 아니라 파일에 두라는 뜻입니다.