Claude Code에 큰 작업을 맡기려고 하면 3가지 벽에 부딪힙니다.
- 인력 부족: 작업을 나누어 여러 개의 세션에 병렬로 맡기면, 각각의 지시/상황 관찰/확인으로 사람이 정신이 없습니다.
- 방향성 이탈: 도중에 결정한 것을 세션별로 전달을 잊거나 다른 것을 전달하게 됩니다.
- 컨텍스트 부족: 대화가 길어지면서 컨텍스트(Claude가 한 번에 읽을 수 있는 대화량)의 상한선에 도달합니다.
Claude Code에도 각각에 대한 표준 기능이 있습니다. 서브 에이전트, 메모리 (CLAUDE.md 및 자동 메모리), 그리고 /compact입니다.
저는 이들을 대체하는 3가지 기능을 만들어 조합하여 사용해 보았습니다. 그러자 tanacode 2.0.0의 중심을 재구성하는 큰 작업을 지시 역할까지 Claude에게 맡겨서 하루 만에 끝낼 수 있었습니다.
| 벽 | Claude Code 표준 기능 | 대체한 기능 |
|---|
| 인력 부족 | 서브 에이전트 | 부모-자식 세션: 지시 역할을 하는 Claude가 일반 세션을 자식으로 구동합니다. |
| ... | /compact (요약) | 최적화 압축: 요약하지 않고 대화를 지우고 체크리스트에서 재개합니다. |
이 3가지 기능 중 어느 하나만으로는 부족했습니다. 부모-자식 세션만으로는 사람이 조금 편해지는 정도입니다. 지시 역할을 하는 Claude가 방향성을 기억하고 긴 작업을 계속할 수 있게 되었을 때 비로소 완전히 맡길 수 있습니다.
이 3가지는 제가 개인적으로 만든 macOS 앱 'tanacode'의 기능입니다. 'Claude Code의 내부를 볼 수 있다. 할 수 있는 것이 늘어난다.'는 슬로건을 가진, Claude Code의 세션들을 여러 개 목록으로 나열하고 채팅 화면에서 구동할 수 있는 앱입니다 (Anthropic의 공식 제품이 아닌 비공식 도구입니다). 이 글에서는 3가지 기능이 각각 무엇을 담당하는지, Claude Code의 표준 기능과 비교하며 재구성했을 때의 경험과 함께 소개합니다.
지시 역할(부모)이 하는 일
여기서는 작업을 나누어 지시를 내리고 정리하는 역할을 '부모', 맡겨지는 쪽의 세션을 '자식'이라고 부릅니다. 먼저, 사람이 부모 역할을 할 때 무엇을 하는지 나누어 보겠습니다.
| 부모의 역할 | 내용 |
|---|---| :--- |
| 분할하기 | 큰 작업을 자식이 맡길 수 있는 크기로 나눕니다. 병렬로 진행해도 되는 것과 순서대로 진행해야 할 것을 분류합니다. |
| ... |
제가 직접 부모 역할을 했을 때는 이 중 '분할하기', '충돌 방지하기', '일관된 지시를 계속 내리기', '진행 상황 관리하기'에서 실제로 어려움을 겪었습니다. 특히 '충돌 방지하기'와 '일관된 지시를 계속 내리기'는 자식이 늘어날수록 사람의 머리로는 따라가기 힘들어집니다.
부모-자식 세션: 부모의 손을 Claude에게 넘기다
Claude Code 표준 기능: 서브 에이전트
Claude Code에도 Claude가 작업을 나누어 맡기는 서브 에이전트가 있습니다. 서브 에이전트는 원래 대화 속에서 구동되며, 끝나면 결과를 원래 대화에 반환합니다. 간편하지만, 작동 중인 서브 에이전트를 사람이 열어서 직접 지시하거나 방향성을 전달할 수는 없습니다. 나눈 부분도 원래 대화 안에 닫혀 있습니다.
tanacode의 부모-자식 세션
tanacode의 부모-자식 세션에서는, 부모 세션의 Claude가 tanacode가 Claude Code에 추가하는 도구(MCP라는, Claude Code에 외부 도구를 추가하는 메커니즘을 사용합니다)를 통해 자식 세션을 구동하고, 지시를 내리고, 상황을 관찰하며 다음 지시를 내립니다. 자식은 서브 에이전트와 달리 tanacode의 일반 세션입니다. 목록에 나열되어 사람이 언제든지 열어서 직접 지시하거나 질문에 답할 수 있습니다.
사람은 '이 작업을 나누어 자식 세션으로 병렬 진행해 줘'처럼 부탁하고, 자식을 시작할 때 나오는 허가 확인에 응답합니다.
tanacode の画面。左のセッションの一覧で、親のセッション「メニューに税込価格を出す」の下に、子のセッション「アクセシビリティの点検」と「README に価格の表記を書く」がぶら下がっている。右のチャットの下のほうで、親の Claude が「2 つの子セッションを始めました。終わったら結果をまとめます」と答えている
tanacode 데모 화면 (아래 이미지도 동일). 자식은 목록에서 부모 아래에 나열되며, 줄 표시를 통해 자식이 무엇을 기다리는지(백그라운드 완료 대기/질문 답변 대기) 알 수 있습니다.
부모의 역할은 다음과 같이 Claude에게 전달됩니다.
| 부모의 역할 | 부모-자식 세션에서는 |
|---|---| :--- |
| 분할하기 | 부모의 Claude가 나누는 방법을 결정하고, 자식을 구동하여 첫 지시를 보냅니다. |
| ... |
子のセッションのチャット。上に「親セッション「メニューに税込価格を出す」からの指示」の見出しが付いた指示があり、その下に子の Claude からの質問のカードが出ている
자식 채팅. 부모로부터 온 지시에는 제목이 붙고, 자식의 질문에는 사람도 직접 답할 수 있습니다.
여기까지 오면 사람의 개입은 줄어듭니다. 다만, 표에 넣지 못한 '일관된 지시를 계속 내리는 것'이 남습니다. 부모 Claude 역시 대화가 길어지면 이전에 결정했던 것을 잊거나, 바꿔 말해서 다른 의미로 해석하는 경우가 있습니다.
체크리스트: 부모의 방침을 흔들림 없게 하는 방법
Claude Code 표준: 메모리
결정된 내용을 기억해 두는 시스템으로, Claude Code에는 메모리가 있습니다.
- CLAUDE.md: 프로젝트의 규칙을 사람이 작성해 놓는 파일. 세션 시작 시 로드됩니다.
- 자동 메모리: Claude가 프로젝트에 대해 스스로 기억하고 싶은 것을 적어두는 메모입니다. 목차(MEMORY.md)가 세션 시작 시 로드됩니다.
둘 다 세션을 넘어서 오래 유지해야 하는 지식에는 유용합니다. 다만, '이 작업에서는 안 1로 한다'와 같이 하나의 작업 내에서 결정된 내용을 여러 번 확실하게 상기시키는 구조는 아닙니다.
tanacode의 체크리스트
tanacode의 체크리스트는 세션마다 사람과 Claude가 함께 보고 수정하는 목록입니다. 대화와 별도로 tanacode가 저장하기 때문에, 대화가 압축되거나( /compact 또는 자동 압축으로 요약에 대체되어도), /clear를 해도 남아 있습니다.
부모-자식 세션에서 효과적인 것은 다음 3가지 목록입니다.
- 결정 사항: 대화로 결정된 것(사람의 요구/제약/수정, 선택하지 않기로 한 안과 이유)을 결정되는 시점에 Claude가 작성하는 목록. 체크해도 사라지지 않습니다.
- 현재 상태: 지금 진행하고 있는 일・다음 수순・사람의 답변을 기다리고 있는지 등을 Claude가 수정하여 최신으로 유지하는 목록. 최적화 압축에 사용됩니다(다음 절).
- 할 일: 부모가 전체적인 할 일이나, 어떤 자식에게 무엇을 맡겼는지 적는 목록.
tanacode のチェックリスト。「決定事項」に 3 件(1 件は取り消し)、「いまの状態」に 3 枚、「やること」に 4 件のカードが並んでいる
메모리와 비교했을 때 다음 부분이 다릅니다.
| 메모리 (CLAUDE.md・자동 메모리) | 체크리스트 |
|---|
| 무엇을 남길지 | 세션을 넘어서 지켜야 할 프로젝트의 지식 |
| ... | |
결정 사항이 대화 밖에 있고, 여러 번 Claude에게 전달되므로, 자식 A와 자식 B에게 다른 것을 전달하는 일이 발생하기 어렵습니다. 체크리스트는 역할 면에서는 메모리와 비슷하지만, 하나의 작업 내에서 방침을 지키게 하는 데 있어서는 메모리보다 기능도 많고 효과적이라고 느낍니다.
제가 부모-자식 세션을 사용하면서 '부모가 흔들리지 않는다'고 느낀 것은 이 목록 덕분이었습니다.
최적화 압축: 컨텍스트의 한계를 넘어 계속하기
Claude Code 표준: /compact
큰 작업을 할 때는 부모의 대화가 자식의 상황을 읽을 때마다 늘어나서, 컨텍스트를 100만 토큰까지 넓혀도 부족할 때가 있습니다.
한계를 넘어서 계속하는 것 자체는 Claude Code 표준 압축( /compact 또는 한계에 가까워지면 자동으로 시작되는 압축)으로도 가능합니다. 압축은 대화를 하나의 요약으로 대체합니다. 다만, 요약에 오류가 있으면 그것이 사실이 되고, 압축을 거듭할수록 처음에 결정했던 것이 희미해질 수 있습니다. 부모가 압축할 때마다 방침을 조금씩 잃으면, 자식에게 내리는 지시도 틀어지게 됩니다.
tanacode의 최적화 압축
tanacode의 최적화 압축은 요약을 만들지 않습니다.
- tanacode가 부모 Claude에게 결정 사항・현재 상태・할 일을 체크리스트에 적고 최신으로 유지하게 합니다.
- tanacode가
/clear를 보내 대화를 지웁니다. - 새로운 대화의 첫 발언으로서, tanacode가 결정 사항과 '현재 상태', 사람의 발언 원문(대화 로그에서 추출한 것)을 보냅니다(이것을 '재개 문'이라고 부릅니다).
- 부모 Claude가 체크리스트를 읽고 계속합니다.
컨텍스트가 차면(기본값 80%) 자동으로 시작됩니다. 자동 여부는 세션마다 헤더 스위치에서 선택할 수 있습니다. 자식의 최적화 압축에서는 부모로부터의 지시도 재개 문에 원문 그대로 들어갑니다.
결정 사항과 '현재 상태'가 대화 밖에 계속 남아있기 때문에, 부모는 몇 번 대화를 지워도 같은 방침을 유지하며 계속할 수 있습니다. 사용해 보니 컨텍스트 한계가 의미상 없다고 느껴질 정도였습니다. 요약을 만들지 않는 이유는 최적화 압축 글에서 자세히 설명하고 있습니다.
3가지를 조합한 예: tanacode 2.0.0 재작성
세 가지를 조합하면, 부모의 작업은 다음과 같이 나뉩니다.
tanacode 2.0.0에서는 채팅 메커니즘을 터미널에 출력되는 Claude Code 화면을 읽어들이는 방식에서 JSON 라인으로 주고받는 stream-json 방식으로 재설계했습니다 (stream-json은 이전 글에서 소개되었습니다). 앱의 핵심 부분을 교체하는 큰 작업이었습니다. 이를 세 가지를 조합하여 진행했습니다.
- 분류는 부모에게 맡겼습니다. 병렬로 진행할 것과 순차적으로 진행할 것을 구분하는 것도 부모 Claude가 결정했습니다.
- 자식들은 worktree로 분리되어 움직였습니다. 동시에 작동했던 것은 약 4개 정도입니다. 끝난 자식은 정리(아카이브)하고 다음 자식을 시작했기 때문에, 전체로는 10개가 넘는 자식이 작동했습니다.
- 부모는 그 사이에 최적화 압축을 6회 이상 했습니다.
- 걸린 시간은 1일이었습니다.
저에게 남은 작업은 다음과 같습니다.
- 자식 시작 허가 (자식을 시작할 때마다, 승인 확인이 나옵니다. 자식도 Claude의 이용 한도를 사용하기 때문입니다)
- 방침 판단 (부모가 물어보는, 판단이 필요한 질문에 답변하는 것)
- 최종 확인 (완성된 것을 구동하여 확인하는 것)
사람이 부모 역할을 할 때 어려움을 겪었던 충돌/지시 불일치/진행 상황 상실/병렬과 순차 분류는, 부모 Claude가 처리했습니다.
작은 작업에는 적합하지 않음
부모-자식 세션은 큰 작업을 위한 것이라고 생각합니다. 부모 세션만큼 토큰이 추가로 소모되기 때문입니다. 하나의 세션으로 끝날 크기의 작업이라면, 부모를 세우지 않고 그 세션에서 진행하는 것이 낭비가 없습니다. 자식으로 나누고 싶을 만큼 크고, 자식이 늘어나 사람의 손으로 감당하기 어려워지는 작업에 이 세 가지 조합이 생깁니다.
마무리
큰 작업을 하면서 수많은 세션의 지시 역할에 지쳤다면, 부모에게 '이 작업을 분할해서 자식 세션에서 병렬로 진행해 달라'고 요청해보세요. 설치 없이 브라우저 데모에서도 흐름을 확인할 수 있습니다.
tanashun
toB SaaS 개발부장입니다. 개발 조직의 매니지먼트와, 생성 AI를 개발에 통합하는 시스템 구축을 하고 있습니다. 개인적으로는 Claude Code의 내부가 보이는 macOS 앱 tanacode를 만들고 있습니다.
Claude Code 도입 지원/AI를 통합한 개발/웹 앱 개발/기술 컨설팅 업무를 받고 있습니다. 의뢰 및 상담은 여기로 해주세요.
Discussion