Claude Code를 오래 켜 놓고 작업하다 보면 “Compacting conversation…” 메시지가 뜨고, 그 직후 방금 고친 파일 경로나 에러 문구를 Claude가 잊어버린다. 2026년 9월 17일 공개된 오픈소스 플러그인 fast-jev-compaction은 이 컴팩션을 “요약”이 아니라 “선별 삭제”로 바꾼다. 대화 원문은 그대로 두고, Jev라는 전용 판단 모델이 필요 없어진 툴 호출·결과만 골라 지운다. 하루 만에 GitHub 스타 3,000개를 넘긴 급상승 도구지만, 얼리 액세스 API 키가 필요하고 대화가 외부 서버로 나간다는 명확한 trade-off가 있다. 이 글은 공개 이틀 차 기준 공식 저장소·문서 기반으로, 격리 환경에서 설치·목록·제거까지 직접 검증한 결과다.
핵심 요약
- 문제: Claude Code 컴팩션은 기존 대화를 LLM 요약문 하나로 바꿔서 파일 경로, 에러 문구, 제약 사항이 사라진다.
- 해결 방식: fast-jev-compaction은 요약을 만들지 않고, 툴 호출 기록마다 “아직 필요한가”를 Jev 모델에 물어본 뒤 필요 없는 것만 지운 나머지 원문을 통째로 넘긴다.
- 검증 결과: 격리 HOME에서 Claude Code 2.1.277로 설치·목록·제거 전 과정 정상 동작을 확인했다. 플러그인 검증 통과, 코드에는 실행·평가 위험 요소 없음, 네트워크 호출은 TypeSafe API 단일 엔드포인트뿐이다.
- 주의: TypeSafe Jev 키가 아직 “waitlist에서 순차 해제” 단계라 바로 못 받을 수 있다. 대화 내용(툴 결과는 요약 노트로 축소되지만 사용자 입력과 툴 입력은 원문)이 외부 서버로 전송된다. 함수 훅은 Claude Code 실험 기능이다.
- 판단: 컴팩션이 자주 걸리는 롱 세션 코딩 작업자에게는 실험 단계로도 시도할 가치가 있다. 회사 코드·고객 데이터가 섞이는 세션이라면 기본 요약 컴팩션을 그대로 쓰는 게 맞다.
도구 개요: 이름·경로·지표
| 항목 | 내용 |
|---|---|
| 이름 | fast-jev-compaction (Claude Code 플러그인 + npm 라이브러리) |
| 공식 저장소 | github.com/tamaratran/fast-jev-compaction |
| 작성자 | Tamara Tran (X @tamarajtran) |
| 생성일 | 2026-09-17 |
| 최신 커밋 | 2026-09-17 22:29 UTC (HEAD e3f262a) |
| 라이선스 | MIT |
| 플러그인 버전 | 0.3.0 (npm 라이브러리 0.2.0, 아직 npm 미게시) |
| 검증 시점 | 2026-09-19 (본 글 작성 기준) |
| 스타 / 포크 | 3,058 / 153 (2026-09-19 06:40 KST 측정) |
| 요구 사항 | Claude Code 2.1.274 이상, CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1, TYPESAFE_API_KEY |
| 핵심 의존성 | 없음 (런타임 의존 0개, TypeScript) |
스타 증가 속도는 2026-09-17 저장소 생성 후 이틀 만에 3,058개다. 다만 “이틀 치 증가량”이라는 점에서 장기 추세는 아직 provisional(가늠값)이며, 후속 관찰이 필요하다. 이슈 44개가 공개 첫날 폭탄처럼 열렸고 전부 미처리다. 대부분 한 사용자(rldyourmnd)가 리팩터링 방향을 제안한 시리즈와 커뮤니티 개선 요청이며, “타입세이프 API 키 발급 경로가 없다”는 이슈(#54)도 보인다.
왜 컴팩션이 문제인가

출처: 지피터스 해설(2026-09-18) 인용 수치
컨텍스트 윈도우가 차면 Claude Code는 기존 대화를 모델에게 요약시키고 요약본으로 새로 시작한다. 요약은 본질적으로 손실 압축이다. 다음이 사라진다.
- 방금 수정한 파일의 정확한 경로
- 재현에 필요한 에러 메시지 원문
- “이 폴더는 건드리지 마” 같은 세션 내 제약
빠진 내용이 나중에 필요해지면 Claude는 같은 파일을 다시 읽거나 이미 정한 결정을 다시 묻는다. 토큰과 시간이 낭비되고, 흐름이 끊긴다.
fast-jev-compaction이 동작하는 방식
공식 README와 hooks/README.md 기준 동작 구조는 다음과 같다.
- 페어링: 모든
tool_use를tool_use_id로tool_result와 연결한다. 첫 메시지와 최근 6개 메시지(기본값)는 고정(pinned)되어 절대 손대지 않는다. - 상태 구성: Jev에게 보낼 상태는 대화 전체를 오래된 순으로 정렬하고, 툴 결과는 한 줄 노트(
ok, 4213 chars (omitted))로 치환한다. 토큰 예산(기본 25k)을 넘으면 단계적으로 축소한다. - 질문: 툴 호출마다 두 질문을 던진다. “이 호출 기록 자체가 아직 중요한가”, “결과 원문이 남아 있어야 하는가”.
- 판단 적용: Jev의 확률이 기준값(0.5) 이상이면 유지, 결과만 불필요하면 앞 300자 + 노트로 축소, 둘 다 불필요하면 호출과 결과를 같이 삭제한다.
- 복구 경로: Jev 실패, 키 없음, 삭제 비율 25% 미달이면 기존 요약 컴팩션으로 자동 폴백된다. 최악의 경우도 현재와 같은 동작이다.
사용자가 입력한 텍스트와 Claude의 답변 텍스트는 한 글자도 바뀌지 않는다. 이것이 “요약”과 “선별 삭제”의 결정적 차이다.
Jev는 무엇인가: 문자를 쓰지 않는 판단 전용 모델
Jev는 TypeSafe AI가 2026년 9월 15일 얼리 액세스로 공개한 System One 모델이다. TypeSafe AI는 ChatGPT 기반 연구를 했던 Diogo Almeida가 창업했다. 일반 LLM처럼 한 토큰씩 문자를 생성하지 않고, 정의된 질문에 확률값을 한 번에 병렬로 답한다.
공식 블로그·문서 기준 스펙은 다음과 같다.
| 항목 | 값 |
|---|---|
| 응답 시간 | 70ms–500ms |
| 입력 가격 | $0.042 / 백만 토큰 (Mtok) |
| 출력 가격 | 무료 |
| 요청 한도 | 초당 250,000 토큰 / 분당 1,200 요청 |
| 컨텍스트 | 요청당 64k (state 32k + 최장 질문) |
| 입출력 | 텍스트만. 이미지·오디오 없음 |
컴팩션처럼 “남길까 버릴까”를 판단하는 작업에 특화된 형태다. 요약 컴팩션이 긴 요약문을 한 글자씩 생성하느라 기다리게 하는 것과 달리, 이 플러그인은 질문을 여러 요청으로 쪼개 동시에 보내고 답을 합치기만 한다.
Claude Code 설치·제거 (직접 검증)
다음 절차는 2026-09-19에 임시 HOME(/tmp/radar/isohome)에 Claude Code 2.1.277을 새로 설치하고 전 과정을 실행한 실측 결과다. 실제 사용자 홈(~/.claude)은 건드리지 않았고, 검증 후 임시 홈 전체를 삭제했다.
사전 조건
- Claude Code 2.1.274 이상 (2.1.277에서 검증)
- TypeSafe API 키 (console.typesafe.ai/settings/keys — waitlist 해제 필요)
- 함수 훅 얼리 액세스 플래그
설치
# ~/.claude/settings.json 의 env 필드에 추가 (또는 셸에서 export)
export CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1
export TYPESAFE_API_KEY="<키>"
claude plugin marketplace add tamaratran/fast-jev-compaction
claude plugin install fast-jev-compaction@fast-jev-compaction
설치 확인 시 실제 출력:
✔ Successfully added marketplace: fast-jev-compaction (declared in user settings)
✔ Successfully installed plugin: fast-jev-compaction@fast-jev-compaction (scope: user)
9 userConfig options not yet set — run /plugin configure fast-jev-compaction@fast-jev-compaction in Claude Code, or pass --config KEY=VALUE.
claude plugin list로 확인한 결과:
❯ fast-jev-compaction@fast-jev-compaction
Version: 0.3.0
Scope: user
Status: ✔ enabled
설치 시 바뀌는 경로
| 경로 | 내용 |
|---|---|
~/.claude/plugins/marketplaces/fast-jev-compaction | 마켓플레이스 캐시(저장소 클론) |
~/.claude/plugins/cache/fast-jev-compaction | 플러그인 본체 |
~/.claude/plugins/installed_plugins.json | 설치 레지스트리 |
~/.claude/settings.json | extraKnownMarketplaces 항목 추가 |
플러그인 검증
git clone https://github.com/tamaratran/fast-jev-compaction
cd fast-jev-compaction
claude plugin validate .claude-plugin/plugin.json
2.1.277에서 ✔ Validation passed with warnings(author 미기재 경고만 존재)를 확인했다. 참고로 이 환경에 깔려 있던 구버전 2.1.258에서는 session.compact is not an event 오류로 검증이 실패했다. 2.1.274 미만에서는 동작하지 않는다.
제거·원상복구
claude plugin uninstall fast-jev-compaction@fast-jev-compaction
claude plugin marketplace remove fast-jev-compaction
rm -rf ~/.claude/plugins/cache/fast-jev-compaction # 캐시 잔여 삭제
제거 후 claude plugin list는 No plugins installed.를 출력했고, settings.json의 마켓플레이스 항목도 비워졌다. 설정(keepThreshold 등)을 바꿨다면 /plugin configure에서 기본값으로 되돌리면 된다.
라이브러리로만 쓰기 (Claude Code 없이)
저장소의 src/는 Claude Code 의존 없이 쓸 수 있는 라이브러리다. 테스트 실행 결과(격리 환경, 2026-09-19):
✓ tests/hook.test.ts (6 tests)
✓ tests/fast-jev-compaction.test.ts (23 tests)
Test Files 2 passed (2)
Tests 29 passed (29)
타입 체크(npm run typecheck)도 통과했다. Codex·OpenCode용 포크(fast-jev-compaction-codex, opencode-fast-jev-compaction 등)가 커뮤니티에서 이미 올라와 있으나, Codex 쪽은 컴팩션 전 대화 이력을 갈아 끼우는 훅 요청 이슈가 열려 있어 Claude Code만큼 매끄럽지 않다(공식 지원 아님).
기존 방식과 비교: 무엇이 다른가
| 구분 | 기본 컴팩션 (내장) | fast-jev-compaction | /clear 후 재시작 |
|---|---|---|---|
| 방식 | LLM 요약문 생성 | Jev 확률 판단 후 선별 삭제 | 전체 폐기 |
| 남는 것 | 요약본 1개 | 원문 (불필요 툴 기록만 제거) | 없음 |
| 파일 경로·에러 원문 | 손실 위험 | 그대로 유지 | 손실 |
| 컴팩션 지연 | 요약 생성 시간 | 70–500ms 판단 (병렬) | 즉시 |
| 외부 전송 | 없음 (Anthropic API 내) | TypeSafe 서버로 state 전송 | 없음 |
| 추가 비용 | Claude 토큰 | Jev 입력 $0.042/Mtok | 없음 |
| 실패 시 | — | 기본 요약으로 자동 폴백 | — |
| 안정성 | 안정 | 실험 (함수 훅 얼리 액세스) | 안정 |
관계 분류: 직접 대체는 아니다. 기본 컴팩션의 “요약” 단계를 “선별 삭제”로 교체하는 보완재에 가깝다. Jev가 실패하면 기본 컴팩션으로 되돌아가는 구조 자체가 보완 관계를 전제로 한다.
기본 컴팩션을 계속 쓸 상황: 세션이 대화·기획 위주라 툴 기록이 적을 때(25% 삭제 기준을 못 넘겨 어차피 폴백된다), 회사 코드·고객 데이터가 섞여 외부 전송이 곤란할 때, 검증된 안정 운영이 우선일 때.
fast-jev-compaction이 맞는 상황: 한 세션에서 파일 읽기·테스트 실행·빌드가 수십 번 반복되는 롱 세션 작업, 컴팩션 후 맥락 유실이 실제로 비용이 되는 리팩터링·디버깅.
보안·권한·데이터 흐름 정리
코드 전수 검토와 claude plugin validate 출력 기준:
- 네트워크:
https://api.typesafe.ai/v1/systemone단일 엔드포인트만 호출한다. 그 외 외부 전송 코드는 없다. - 권한 범위:
$.env.get,$.http.fetch,$.session.compact,$.session.usage,$.settings.read,$.ui.log,$.ui.toast. 파일 시스템 쓰기, 셸 실행, 임의 프로세스 실행 권한은 요구하지 않는다. - 코드 검토:
child_process,eval, 동적Function()호출 없음. 런타임 의존성 0개로 공급망 노출이 작다. - API 키: TYPESAFE_API_KEY를 환경 변수 또는 플러그인 민감 설정(
sensitive: true)으로만 다룬다. 키를 설정 파일에 평문 저장하지 않는 구조다. - 데이터 유출 관점: 컴팩션 판단을 위해 대화 전체(툴 결과는 한 줄 노트로 축소, 사용자 입력·툴 입력은 원문)가 TypeSafe 서버로 나간다. 회사 코드·고객 데이터가 섞인 세션에서는 이 지점이 유일하고도 결정적인 주의사항이다.
- 텔레메트리: 별도 수집 코드 없음. plugin.json에 author 필드가 비어 있어 검증 시 경고가 표시된다(기능 영향 없음).
안전 적용 체크리스트
- Claude Code 버전이 2.1.274 이상인지
claude --version으로 확인한다. - 격리 테스트 프로젝트(민감 데이터 없음)에서 먼저
/compact를 실행해 동작을 확인한다. - 토스트 메시지가
fast-jev-compaction: kept N/M messages, no summary로 뜨는지 확인한다.fallback to built-in summary가 뜨면 폴백 동작이다. - 민감 세션에는 적용하지 않는다. 적용해야 한다면 툴 결과가 Jev state에 노트로만 가는지 팀 보안 정책과 대조한다.
- 제거는
plugin uninstall+marketplace remove+ 캐시 삭제 3단계로 완전히 된다. - 커밋이 하루 치뿐인 초창기 프로젝트다. 적용 후 이상 동작 시 즉시 제거하고 이슈를 확인한다.
이 글을 Claude Code에 붙여 넣어 설치하는 프롬프트
아래 프롬프트를 Claude Code 세션에 붙여 넣으면 검증·설치를 대신 진행한다. 비밀 입력은 에이전트에게 시키지 말고 직접 하라.
https://blog.kwt.co.kr/fast-jev-compaction-claude-code-verbatim-compaction/ 글을 읽고
fast-jev-compaction 플러그인을 설치해 줘. 단, 다음 순서를 지켜.
1. claude --version 으로 2.1.274 이상인지 먼저 확인하고, 미만이면 중단하고 알려 줘.
2. git clone https://github.com/tamaratran/fast-jev-compaction /tmp/fjc-check 에서
claude plugin validate .claude-plugin/plugin.json 을 실행해 결과를 보여 줘.
3. 검증이 통과하면 clone은 지우고, 정식 절차로 설치해 줘:
claude plugin marketplace add tamaratran/fast-jev-compaction
claude plugin install fast-jev-compaction@fast-jev-compaction
4. TYPESAFE_API_KEY는 내가 직접 환경 변수로 넣을 거니까 건드리지 마.
CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 설정 방법만 안내해 줘.
5. 설치 후 claude plugin list 결과와, 제거 명령(uninstall + marketplace remove)을
화면에 남겨 줘.
6. 어떤 파일이 바뀌었는지 ~/.claude/plugins/ 기준으로 요약해 줘.
운영 환경 파일 수정, 커밋, 배포는 하지 마.
직접 검증한 것과 검증하지 못한 것
직접 검증 (2026-09-19, 격리 HOME):
- Claude Code 2.1.277 신규 설치 후 marketplace add → plugin install → plugin list → plugin uninstall → marketplace remove → 캐시 삭제 전 과정
claude plugin validate통과 (author 경고 1개)- npm 의존성 설치 후 단위 테스트 29개 통과, 타입 체크 통과
- 소스 전수 검토: 실행·평가 위험 코드 없음, 단일 API 엔드포인트, 런타임 의존 0개
- 실제 사용자 홈 설정 무변경 확인
검증하지 못한 것:
- 실제 TypeSafe API 키 발급 및 라이브 컴팩션 실행 (waitlist 상태로 키 발급 불가, 비용 결제·키 입력 없이 진행)
- 장기 세션에서의 토큰 절감률 (README의 156k→62k 수치는 개발자 제공 데모 연출 값이며 실측이 아님 — 저장소에 “API를 부르지 않는 녹화용 앱”으로 명시)
- 폴백 동작의 실전 발동 조건 (코드 경로는 확인했으나 라이브 실행 아님)
FAQ
기본 컴팩션과 정확히 뭐가 달라요?
기본은 지난 대화를 요약문 하나로 바꿉니다. fast-jev-compaction은 요약을 만들지 않고 툴 호출·결과 중 필요 없는 것만 지운 원문을 그대로 넘깁니다. 사용자 입력과 Claude 답변은 그대로 남습니다.
Jev 없이 쓸 수 있나요?
플러그인은 Jev 전용입니다. 라이브러리 쪽은 판단부(JevAsker 인터페이스)를 갈아 끼울 수 있게 열려 있어 다른 모델로 “남길까 버릴까”를 물게 만들 수는 있습니다. 다만 속도 이점은 Jev 아키텍처에서 오는 것이라 대체하면 줄어듭니다.
Codex에서도 되나요?
커뮤니티 포크(fast-jev-compaction-codex 등)가 존재하지만 공식 지원은 아닙니다. Codex 쪽은 컴팩션 전 대화 이력을 갈아 끼우는 훅 요청 이슈가 아직 열려 있어 Claude Code만큼 매끄럽지 않습니다.
비용은 얼마나 드나요?
Jev 입력이 $0.042/MTok이고 출력은 무료입니다. 컴팩션 1회에 state 최대 25k 토큰을 여러 요청에 반복 전송하는 구조라, 대략 세션당 수 센트 수준으로 예상되지만 이는 공식 가격표 기준 계산이지 실측이 아닙니다.
키는 어디서 받나요?
console.typesafe.ai/settings/keys 에서 발급합니다. 다만 2026-09-19 기준 Jev는 얼리 액세스로 waitlist에서 순차 해제 중입니다(저장소 이슈 #54에서도 발급 경로 문제가 보고됨).
한국어 자료가 있나요?
지피터스(gpters.org)의 상세 해설 글 1편이 9월 18일 게시되었습니다. 이 글은 설치·검증 절차와 보안 데이터 흐름을 추가로 다룹니다.
참고 자료
- 공식 저장소: github.com/tamaratran/fast-jev-compaction
- TypeSafe AI Jev 소개(공식 블로그): typesafe.ai/blog/introducing-system-one-models-and-jev
- TypeSafe 문서(모델·가격): docs.typesafe.ai/models
- TypeSafe 퀵스타트(API 키·엔드포인트): docs.typesafe.ai/introduction/quickstart
- 지피터스 해설(한국어, 2026-09-18): gpters.org/news/post/claude-code-compaction-clearing-bsOmZQIrubljouw
- 관련 글: Graft로 Claude Code 컨텍스트 끊기 — 설치·보안·제거 직접 검증
- 관련 글: ripwire — AI가 읽을 코드부터 좁히기