tanacode 1.5.0 최적화 압축: /compact 없이 체크리스트로 재개하기
요약
Claude Code의 컨텍스트 압축 기능(/compact)은 긴 대화를 하나의 요약 문장으로 대체하여, 중요한 정보가 누락되거나 오류가 발생할 위험이 있습니다. 'tanacode' 1.5.0 버전은 이 문제를 해결하기 위해 요약본을 만들지 않는 최적화 압축 기능을 추가했습니다. 이는 체크리스트 기반 재개 방식을 통해 대화를 정확하게 복원합니다.
핵심 포인트
- /compact는 대화를 하나의 요약 문장으로 대체하여 정보 누락 위험이 있습니다.
- 요약은 모델에 의해 작성되므로, 의역이나 오류가 발생할 수 있습니다.
- 'tanacode' 1.5.0은 체크리스트 기반의 최적화 압축 기능을 제공합니다.
- 체크리스트와 원문 발언을 활용하여 대화를 정확하게 재개하는 노하우를 소개합니다.
Claude Code로 긴 작업을 계속하다 보면, 컨텍스트가 가득 차서 /compact로 압축하는 경우가 있습니다 (자동 압축도 요약본을 만든다는 점은 동일합니다). 그 후에 이런 일이 없었나요?
- 대화에서 결정했던 것을 Claude가 잊어버림
- 요약이 틀려서, 그 오류가 사실처럼 취급됨
- 압축 후, 사용자에게 확인받지 않고 작업이 임의로 재개됨
Claude Code의 작업을 옆에서 지켜보는 macOS 앱인 'tanacode'의 1.5.0 버전에서는 이를 '요약본을 만들지 않음'으로써 피하는 최적화 압축 기능을 추가했습니다.
- 작업에 필요한 것을 Claude에게 체크리스트로 작성하게 함
/clear로 대화를 통째로 지우기 - 체크리스트와 사람의 발언 원문으로부터 재개하기
이 글에서는, /compact가 실제로 무엇을 하는지, 최적화 압축의 메커니즘과 노하우를 소개합니다. tanacode를 사용하지 않고 같은 방식을 시도하는 방법도 마지막에 게재하겠습니다.
/compact는 대화를 하나의 요약 문장으로 대체한다
/compact 이후, Claude Code가 API로 보내는 요청을 살펴보았습니다 (Anthropic의 API인 척 하는 목업 서버를 ANTHROPIC_BASE_URL에 연결하여 내용을 기록했습니다). '소수점은 반올림해 주세요'라고 부탁한 대화를 /compact하면, 다음 발언 요청에서는 원래 대화가 사라지고 첫 번째 발언이 다음과 같이 되어 있었습니다.
This session is being continued from a previous conversation that ran out of context. The summary below covers the earlier portion of the conversation.
Summary:
(요약 문장)
...
긴 대화를 제한된 하나의 문장에 밀어 넣기
요약을 만들 때의 요청도 살펴보았습니다. Claude Code는 대화 전체를 모델에 전달하고, 정해진 9가지 헤드라인(부탁한 것・기술의 요점・파일과 코드・오류와 수정 방법・문제 해결 방법・사람의 발언 전부・남은 작업・현재 작업・다음 수순)에 따라 상세한 요약을 작성하도록 요청합니다. 요약의 길이는 이 한 번의 응답으로 쓸 수 있는 양(목업에서 확인했을 때 max_tokens가 128,000 토큰. 생각하는 과정도 포함)
ull을 초과할 수 없습니다.
실제 예시도 보겠습니다. 긴 작업 도중에 자동 압축이 발생했을 때, 대화 로그에 남은 기록(compact_boundary)은 다음과 같습니다.
| 토큰 수 | |
|---|---|
| 압축 전 | 786,466 |
| 압축 후 | 13,863 |
약 79만 토큰의 대화가 약 1.4만 토큰(요약은 14,895 문자)이 되었습니다. 이는 약 57분의 1입니다.
대화가 아무리 길어도 요약은 제한된 하나의 문장에 담겨야 합니다. 대화가 길수록 많은 것을 잘라내고 모아서 작성하게 됩니다. 이 무리한 압축이 누락이나, 너무 많이 정리하여 발생하는 오류를 만듭니다.
요약으로 인해 발생하는 문제점
여기서부터 처음에 언급된 어려움의 원인이 보입니다.
- 사람의 발언 원문이 남지 않음: '소수점은 반올림해 주세요'는 요약 문장을 통해서만 남습니다. 요약을 요청할 때 '사람의 발언 전부'라는 헤드라인도 있지만, 작성하는 것은 모델이며, 위의 압축 과정 속에서 작성됩니다. 누락되거나, 의역되어 의미가 바뀌면 그것이 새로운 사실이 됩니다 -
- 쌓일수록 희미해짐: 2차 압축에서는 1차 요약을 더욱 요약합니다 -
- 확인 없이 계속 진행함: 요약 뒤에 '질문하지 않고, 끊기지 않은 것처럼 계속 진행하라'는 내용이 추가됩니다. 요약이 틀렸더라도 Claude는 확인하지 않은 채 작업을 진행하게 됩니다.
시제품: Haiku에게 남길 것과 버릴 것을 선택하게 하기
최적화 압축을 만드는 과정에서, 요약에 남길 것을 고르는 시제품도 만들었습니다.
- 대화 로그에서 현재 컨텍스트에 들어와 있는 것(파일 로딩・커맨드 출력・주고받은 내용 등)의 목록과 내부 발췌를 모으기
- 일회용
claude -p
(Haiku)에게 전달하여 하나씩 '남기기', '버리기', '맡기기'를 선택하게 합니다. 선택한 표시를 바탕으로 tanacode가 "A의 내용과, B에서 시작하는 대화는 자세히 남긴다. C의 출력은 버려도 좋다"와 같은 문장을 구성하고, /compact에 첨부하여 보냅니다 (요약 요청 시 Additional Instructions:에 들어가는 부분). 요약할 때 무엇을 남길지 미리 정해두면 중요한 것을 놓치기 어려워진다는 생각입니다.
하지만 이 방식으로는 마지막에 대화가 하나의 요약 문장으로 되는 것은 변함이 없습니다. 요약의 오류가 사실이 되고, 쌓일수록 희미해지고, 요약 후에 '질문하지 않고 계속'이라는 내용이 추가되는 것은 그대로 남아있습니다. 요약할 내용을 다시 선택해도 문제의 원인인 요약 자체는 사라지지 않습니다.
그래서 최적화 압축은 요약을 만들지 않는 구조로 만들었습니다.
최적화 압축: 요약을 만들지 않고, 대화를 지우기
최적화 압축은 이 '요약 문장' 자체를 만들지 않습니다. 남겨야 할 것은 대화와 별도로 저장되는 체크리스트에 적어두고, 대화는 /clear로 지웁니다. 새로운 대화는 세션 시작과 같은 상태(CLAUDE.md 등을 로드한 상태)에서 시작하며, 체크리스트를 읽고 재개합니다.
체크리스트는 tanacode가 MCP 서버로서 Claude Code에 추가하는 것입니다. 사람과 Claude가 함께 보고 수정할 수 있으며, /clear해도 남아있습니다. 최적화 압축에서 사용하는 것은 다음 3가지 종류의 리스트입니다.
| 리스트 | 작성 내용 |
|---|---|
| 결정 사항 | 요청받은 것・결정・수정・허가(범위 포함)・거절한 안과 이유. 표현이 중요한 부분은 사람의 말을 그대로 |
| ... | |
| 결정 사항과 '현재 상태'는 평소 작업 과정에서 결정되거나 상태가 바뀔 때 Claude가 작성합니다. 압축 전에 모아서 떠올리게 하는 것이 아니라, 최적화 압축에서는 빠진 것을 채우고 최신으로 만드는 것만 합니다. |

'장소와 절차'에는 파일・함수・브랜치・PR 번호 외에도 빌드나 테스트 커맨드를 친 그대로 옵션까지 적게 합니다. 파일 내용은 복사하지 않고, 장소만 적게 합니다. 디스크에서 다시 읽으면 돌아올 수 있기 때문입니다.
흐름
채팅 헤더의 '최적화 압축'을 누르면 확인 과정을 거치지 않고 다음과 같이 진행됩니다.
- 마무리: tanacode가 Claude에게 "이제 대화를 지울 것이다. 요약은 만들지 않는다. 계속하는 데 필요한 것을 체크리스트에 적어 최신으로 해달라"고 요청하고, Claude가 체크리스트를 작성합니다.
- 전환: 마무리가 끝난 턴이 끝나면, tanacode가
/clear를 보냅니다. - 재개 문장: 새로운 대화의 첫 발언으로, tanacode가 재개 문장을 보냅니다.
- Claude가 리스트를 읽고 인계받았음을 간략히 보고하고, 기다립니다 (임의로 작업을 계속하지 않습니다).
채팅 화면은 지우지 않습니다. 사라지는 것은 Claude의 대화만이며, 화면에는 이전 대화가 남아있고, '최적화 압축: 대화를 지우고 체크리스트에서 재개했습니다'라는 줄이 구분선 역할을 합니다. 이 줄을 열면, 재개 문장의 전문 전체를 읽을 수 있습니다.
재개 문장에 넣는 것
재개 문장(전체 4만 자까지)은 tanacode가 대화 로그와 체크리스트에서 구성합니다.
- 확정된 문장: 체크리스트가 정확한지. 모순되면, 결정 사항 → 프로젝트 지침(CLAUDE.md 등) 순서를 따를 것. 먼저 모든 리스트를 읽을 것.
- 결정 사항과 '현재 상태' 카드 (제목과 본문). 다른 리스트는 이름・설명・진행 정도만 하고, 내용은 Claude가 툴로 읽습니다.
- 사람의 발언 원문: 대화 로그에서 tanacode가 기계적으로 추출한 것입니다. 새로운 발언부터 추가하고, 몇 번을 전환해도 이전 재개 문장에 있던 발언은 인계받습니다.
- 백그라운드에서 작동하는 태스크 (Bash・서브 에이전트 등).
/clear후에도 계속 움직이기 때문입니다. - 전환 전 Claude의 마지막 응답. 응답이 질문으로 끝났을 때, 전환 후에 'B로'라고 짧게 답해도 통용되도록 하기 위함입니다.
개선한 부분
사람의 발언은 모델에게 작성하게 하지 않기
사람의 발언 원문은 Claude에게 받아쓰게 하지 않고, tanacode가 대화 로그에서 추출합니다. 모델이 작성하게 하면 요약과 마찬가지로 받아쓰기 오류가 들어갈 수 있기 때문입니다. '이전 대화 기록으로 인해 지금 다시 요청한 것은 아니다'라는 제목을 붙여서 이전의 부탁을 반복 실행하지 않도록 합니다.
붙여넣은 긴 문장(로그나 웹 문서 등)은 사람의 말이 아닐 수도 있으므로 포함하지 않고, 붙여넣기가 있었다는 사실만 전달합니다.
권한은 상속하지 않는다
이전 대화에서 받은 권한('force push 해도 좋다' 등)은 결정 사항에 쓰여 있지 않으면 상속하지 않는다고 재개 문에서 전달합니다. 이는 대화 흐름 속에서 나온 권한이 범위가 불분명하게 확장되는 것을 막기 위함입니다.
의심스러울 때는, 대화를 지우지 않는다
대화를 지우는 것은 되돌릴 수 없습니다. 그래서 다음부터는 /clear를 보내지 않고 취소합니다.
- 마무리 과정 중에 사람이 중단(Esc)하거나 발언한 경우
- 마무리 과정 중에 Claude가 체크리스트 도구를 한 번도 호출하지 않은 경우 (요청을 무시했거나, 체크리스트의 MCP가 없는 세션)
다만, 목록이 이미 최신이라고 해서 Claude가 도구를 호출하지 않고 '최신입니다'라고만 답하며 취소되는 경우가 있었습니다. 그래서 마무리 요청에서는 '최신이라고 생각하더라도, 반드시 처음에 목록을 읽어보세요. 한 번도 도구를 사용하지 않았다면, 대화를 지우는 것을 취소하세요'라고 전달하고 있습니다.
자동으로 시작하기
헤더의 '자동' 스위치가 켜져 있으면, 컨텍스트 사용률이 설정한 비율(기본값은 80%. 40% 또는 60%도 선택 가능)을 초과했을 때 최적화 압축이 자동으로 시작됩니다. 시작되는 시점은 두 가지입니다.
- 턴의 끝: Claude가 응답을 마쳤을 때 초과하면 시작합니다. 전환된 후에는 보고하고 기다립니다.
- 턴 도중: 하나의 턴이 길어서 설정보다 10 포인트 이상(최대 90%) 초과하면, 다음 도구 경계에서 턴을 멈추고 전환합니다. 전환된 후에는 멈춘 곳부터 계속 진행합니다. 다만, 새로운 작업을 시작하지 않으며, 결정 사항에 없는 권한이나 판단이 필요할 때는 멈춰서 질문합니다.
여기서는 Claude Code의 hooks를 두 가지 사용하고 있습니다.
| hooks | 사용법 |
|---|---|
PostToolUse (도구 사용 후) | tanacode가 '멈출' 파일을 작성해 두고, hook이 그것을 발견하면 `{ |
- 컨텍스트가 가득 차면, 이렇게 요청하세요.
지금부터 대화를 지울게요. 요약은 만들지 마세요. 다음 진행에 필요한 내용을 HANDOFF.md에 적어주세요. - 결정 사항: 제가 요청한 것・결정된 것・수정/허가(범위 포함)・거절된 안과 이유. 표현이 중요한 부분은, 제 말 그대로 - 현재 상태: 무엇을 왜・완료된 것과 남은 것・커밋되지 않은 변경・다음 할 일 - 시도해보고 실패한 것: 방법과 이유 - 장소와 절차: 파일・함수・브랜치・PR 번호, 빌드 및 테스트 명령어까지 옵션까지 파일을 적지 말고, 위치를 적어주세요. 작업은 계속하지 마세요.
작성된 HANDOFF.md를 읽고, 빠진 것이 없는지 수정해 달라고 요청하세요.
/clear
을 치고 -
"HANDOFF.md를 읽고, 인계받은 내용을 짧게 보고하고 기다려 주세요."라고 요청하세요.
수동으로 할 경우, 사람의 발언 원문은 인계되지 않습니다. 중요한 결정 사항은, 절차 2에서 결정 사항에 포함되어 있는지 확인해 주세요.
사용해 보기
설치는 Homebrew를 추천합니다.
brew install --cask sny-tanaka/tanacode/tanacode
이미 Homebrew로 설치된 분은, 메뉴의 "파일 → Claude Code도 멈추고 종료"에서 종료한 후, 다음을 실행해 주세요.
brew update && brew upgrade --cask tanacode
최적화 압축(最適化圧縮)은, 메뉴의 "Claude에게 체크리스트를 처리하게 하기"가 켜져 있을 때 사용할 수 있습니다.
맺음말
요약의 오류를 줄이는 것이 아니라, 요약을 만들지 않음으로써, 압축 과정에서 누락되거나 틀리는 문제 자체를 없애려고 한 것이 최적화 압축입니다. 긴 작업으로 /compact
이후 행동에 어려움을 겪는 분들은 시도해 보세요.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기