Claude Code 컴팩션이 요약 대신 지워도 원문을 남기는 법: fast-jev-compaction 직접 검증

  • Post last modified:2026년 09월 19일
  • Post category:기술

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)도 보인다.

왜 컴팩션이 문제인가

컴팩션으로 줄일 수 있는 세션 기록 비중: 툴 호출과 결과가 80%, 사용자 입력과 Claude 답변이 20%
세션 기록 중 툴 호출·결과 비중 (커뮤니티 실측 예시 기반 재구성)
출처: 지피터스 해설(2026-09-18) 인용 수치

컨텍스트 윈도우가 차면 Claude Code는 기존 대화를 모델에게 요약시키고 요약본으로 새로 시작한다. 요약은 본질적으로 손실 압축이다. 다음이 사라진다.

  • 방금 수정한 파일의 정확한 경로
  • 재현에 필요한 에러 메시지 원문
  • “이 폴더는 건드리지 마” 같은 세션 내 제약

빠진 내용이 나중에 필요해지면 Claude는 같은 파일을 다시 읽거나 이미 정한 결정을 다시 묻는다. 토큰과 시간이 낭비되고, 흐름이 끊긴다.

fast-jev-compaction이 동작하는 방식

공식 README와 hooks/README.md 기준 동작 구조는 다음과 같다.

  1. 페어링: 모든 tool_usetool_use_idtool_result와 연결한다. 첫 메시지와 최근 6개 메시지(기본값)는 고정(pinned)되어 절대 손대지 않는다.
  2. 상태 구성: Jev에게 보낼 상태는 대화 전체를 오래된 순으로 정렬하고, 툴 결과는 한 줄 노트(ok, 4213 chars (omitted))로 치환한다. 토큰 예산(기본 25k)을 넘으면 단계적으로 축소한다.
  3. 질문: 툴 호출마다 두 질문을 던진다. “이 호출 기록 자체가 아직 중요한가”, “결과 원문이 남아 있어야 하는가”.
  4. 판단 적용: Jev의 확률이 기준값(0.5) 이상이면 유지, 결과만 불필요하면 앞 300자 + 노트로 축소, 둘 다 불필요하면 호출과 결과를 같이 삭제한다.
  5. 복구 경로: 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)은 건드리지 않았고, 검증 후 임시 홈 전체를 삭제했다.

사전 조건

  1. Claude Code 2.1.274 이상 (2.1.277에서 검증)
  2. TypeSafe API 키 (console.typesafe.ai/settings/keys — waitlist 해제 필요)
  3. 함수 훅 얼리 액세스 플래그

설치

# ~/.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.jsonextraKnownMarketplaces 항목 추가

플러그인 검증

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 listNo 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 필드가 비어 있어 검증 시 경고가 표시된다(기능 영향 없음).

안전 적용 체크리스트

  1. Claude Code 버전이 2.1.274 이상인지 claude --version으로 확인한다.
  2. 격리 테스트 프로젝트(민감 데이터 없음)에서 먼저 /compact를 실행해 동작을 확인한다.
  3. 토스트 메시지가 fast-jev-compaction: kept N/M messages, no summary로 뜨는지 확인한다. fallback to built-in summary가 뜨면 폴백 동작이다.
  4. 민감 세션에는 적용하지 않는다. 적용해야 한다면 툴 결과가 Jev state에 노트로만 가는지 팀 보안 정책과 대조한다.
  5. 제거는 plugin uninstall + marketplace remove + 캐시 삭제 3단계로 완전히 된다.
  6. 커밋이 하루 치뿐인 초창기 프로젝트다. 적용 후 이상 동작 시 즉시 제거하고 이슈를 확인한다.

이 글을 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일 게시되었습니다. 이 글은 설치·검증 절차와 보안 데이터 흐름을 추가로 다룹니다.

참고 자료

답글 남기기