Compact Adviser: Claude Code /compact 실행 시점을 알려 주는 모드
작업 단위가 끝난 시점을 판단해 Claude Code에서 /compact를 실행하기 좋은 때를 힌트로 알려 줍니다.
권한
- 파일 읽기컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 파일 쓰기컴퓨터에 파일을 만들거나 덮어쓸 수 있습니다($.fs.write).
- 네트워크HTTP 요청을 보내거나 MCP 서버와 통신할 수 있습니다($.http.fetch / $.mcp.*).
- 프롬프트 읽기입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
- UI 변경Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
- 데이터 저장플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
- 테스트 버전
- v2.1.291
- 마지막 테스트
- 필요 버전
- Claude Code ≥ 2.1.287
- 표시 위치
- 상태 표시줄, 패널, 토스트
Claude Code 안에서 설치:
/plugin install compact-adviser --marketplace kunchenguid/compact-adviser이 모드는 무엇을 하나요?
Compact Adviser는 한 가지 질문, 즉 Claude Code /compact 실행 시점에 답합니다. 지금 /compact를 실행해야 할까요? 이 모드는 Kun Chen(kunchenguid)이 만들었으며, 하나의 저장소에서 Claude Code, Pi, Codex CLI, Grok용으로 배포됩니다. 이 페이지는 packages/claude-mod에 있는 Claude Code 모드를 다룹니다.
너무 일찍 압축하면 아직 필요한 컨텍스트를 버리게 되고, 너무 늦게 압축하면 매 턴이 긴 대화 기록을 짊어지게 됩니다. 모드는 턴이 끝날 때마다 비용이 적게 드는 로컬 조건 몇 가지를 확인하고, 조건을 통과하면 TypeSafe의 Jev 모델에 대화에 관한 짧은 질문 두 가지를 던집니다. 어시스턴트의 최근 작업 단위가 끝났는가, 그리고 어시스턴트가 직접 작업했는가 아니면 주로 조율만 했는가? 두 답은 하나의 점수로 합쳐집니다. 점수가 기준선을 넘으면 상태 줄이 나타납니다. "work appears completed or recorded. Run /compact to save tokens."
기준선은 컨텍스트가 대부분 비어 있을 때 엄격하고(0.90), 컨텍스트가 Claude Code의 자동 압축 지점에 가까워질수록 0.50 쪽으로 완화됩니다. 아직 여유가 있을 때 잘못된 힌트의 대가가 가장 크기 때문입니다. 자동 모드를 선택하면 모드는 힌트만 주는 대신 그런 체크포인트에서 직접 압축을 실행합니다.
사용자가 직접 마련한 TypeSafe API 키가 필요합니다.
데모
실제 힌트를 보려면 40,000토큰이 넘는 컨텍스트와 TypeSafe 키가 필요한데, 짧은 영상에는 맞지 않습니다. 녹화 영상에서는 모드를 불러온 채 Claude Code를 시작하고, /compact-adviser status(모드, 최솟값, 예산, 키 상태)를 실행한 다음, /compact-adviser 설정 패널을 열어 missing이 표시된 TypeSafe API 키 행으로 이동합니다.
설치
설치 블록의 두 방법 중 하나를 사용하십시오. 둘 다 작성자의 마켓플레이스에서 바로 설치합니다. Claude Code가 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1로 시작되지 않으면 모드는 아무 일도 하지 않으므로, 이 변수와 함께 실행한 뒤 /compact-adviser를 실행해 TypeSafe 키를 추가하십시오.
$ install compact-adviser
Claude Code 2.1.287 이상 필요
작성자의 마켓플레이스에서 설치: kunchenguid/compact-adviser
1.Claude Code 안에서 한 줄로
/plugin install compact-adviser --marketplace kunchenguid/compact-adviser실행 중인 세션(v2.1.275 이상)에 붙여 넣으세요. Claude Code가 먼저 마켓플레이스 추가 여부를 묻습니다.
2.셸에서 설치
claude plugin marketplace add kunchenguid/compact-adviser claude plugin install compact-adviser@compact-adviser그런 다음 이미 열려 있는 세션에서 /reload-plugins를 실행하세요.
3.설치하지 않고 사용해 보기
git clone https://github.com/kunchenguid/compact-adviser claude --plugin-dir ./compact-adviser/packages/claude-mod한 세션에서만 모드를 불러옵니다. 설정에는 아무것도 추가되지 않습니다.
작동 방식
모든 것은 hooks/register.ts의 turn.complete 훅에서 시작합니다.
on("turn.complete", async ($, e, next) => {
const result = await next(e);
if (!(await isActivated($)) || !interactive) return result;
if (e.agentId !== undefined || e.reason !== "answer" || e.isAborted || !e.answer.trim()) {
return result;
}
try {
await settle($);
} catch {
notice($, "Compact adviser could not inspect this checkpoint; context left unchanged.");
}
return result;
});실제 답변으로 끝난 메인 루프의 턴만 셉니다. 서브에이전트 턴과 중단된 턴은 건너뜁니다. settle은 대화 교환 수를 세고 비용이 적게 드는 관문을 확인합니다. 모드가 꺼져 있지 않을 것, 키가 있을 것, 컨텍스트가 minContextTokens 이상일 것, 쿨다운이나 일시 중지가 없을 것입니다. 통과하면 턴이 지연되지 않도록 $.clock.after(0, …)로 judgeCheckpoint를 예약합니다.
judgeCheckpoint는 $.session.messages()로부터 크기가 제한된 스냅샷을 만들고(lib/snapshot.ts 참고), 대화가 20,000토큰 미만이거나 같은 체크포인트를 이미 판단했다면 요청을 건너뛰며, 그렇지 않으면 $.http.fetch로 https://api.typesafe.ai/v1/systemone에 전송합니다. 요청은 2초 후 시간 초과되며, 오류·시간 초과·잘못된 응답은 절대 '예'로 간주되지 않습니다. 이 경우 모드는 물러나고 대신 토스트를 보여 줍니다. 점수가 기준을 충족하면 힌트 모드는 힌트와 함께 $.ui.status를 호출하고, 자동 모드는 현재 작업, 남은 작업, 다음 단계를 정확히 유지하라는 지시와 함께 $.session.compact를 호출합니다.
사용자가 했든 Claude Code가 했든, 모든 압축은 session.compact 훅을 통해 세션의 쿨다운을 초기화합니다.
사용자 지정
/compact-adviser를 실행해 설정 패널을 열거나 하위 명령을 사용하십시오. auto, hint, off는 모드를 바꾸고, threshold 60000은 최소 컨텍스트를 정하며, budget 450000은 기준선이 자동 압축 지점 대신 기준으로 삼을 컨텍스트 예산을 정합니다. snooze는 다음 세 번의 교환을 건너뛰고, dismiss는 현재 힌트를 지우며, status는 현재 상태를 출력합니다. 모드, 최솟값, 예산, 요청 로깅은 /config의 행으로도 있습니다. 판단 프로필(profile 설정의 JSON)로 질문, 점수 가중치, 기준선 일정을 바꿀 수 있습니다.
권한 및 안전
저희는 무엇이든 실행하기 전에 register.ts, lib/ 아래의 모든 파일, plugin.json, hooks.json, package.json, 테스트 헬퍼를 읽었습니다.
- 네트워크: 모드는 기준을 충족한 체크포인트마다 제3자 서비스인
https://api.typesafe.ai/v1/systemone에 요청 하나를 보내며, 사용자의 키는Authorization헤더에 담깁니다. 본문은 최근 대화의 스냅샷으로, 32,000바이트로 제한되며 키 패턴,.env,auth.json,id_rsa/id_ed25519,.pem,.key파일을 최선의 노력 방식으로 가린 뒤 전송됩니다.TYPESAFE_BASE로 다른 https 주소나 루프백 http 주소를 지정할 수 있습니다. 플러그인 설치는 키가 있을 때 이를 전송하는 데 대한 동의로 간주되므로, 기기 밖으로 나가면 안 되는 작업에서는 모드를 off로 설정하십시오. - 파일:
TYPESAFE_API_KEY를 찾기 위해 세션 폴더의.env를 읽습니다. 요청 로깅을 켰을 때만~/.claude/compact-adviser-requests-<session-id>.jsonl에 쓰며, 이 파일에는 키가 절대 들어가지 않습니다. - 설정: 패널에서 저장하면
$.config.set을 통해 플러그인 자체의userConfig행에 씁니다. 저장된 키는/config에서 숨겨집니다. - 압축: 자동 모드에서, 한 번의 확인 대화 상자를 거친 뒤에만 실행됩니다.
설치 스크립트, 번들되거나 압축된 코드는 없으며, TypeSafe 요청 자체 외에 원격 측정(telemetry)도 없습니다.
- 파일 읽기
- 컴퓨터의 파일을 읽고 디렉터리 목록을 볼 수 있습니다($.fs.read / list / stat / exists).
- 파일 쓰기
- 컴퓨터에 파일을 만들거나 덮어쓸 수 있습니다($.fs.write).
- 네트워크
- HTTP 요청을 보내거나 MCP 서버와 통신할 수 있습니다($.http.fetch / $.mcp.*).
- 프롬프트 읽기
- 입력한 내용과 대화 기록을 볼 수 있습니다(prompt.* / session.append / session.messages).
- UI 변경
- Claude Code 화면에 밴드, 패널, 상태 텍스트, 토스트를 그립니다(ui.render / $.ui.*).
- 명령어/도구 추가
- 사용자나 Claude가 호출할 수 있는 새 슬래시 명령어나 도구를 등록합니다($.command.register / $.tool.register).
- 데이터 저장
- 플러그인 전용 저장소에 세션 간 데이터를 보관합니다($.store.*).
호환성 및 문제 해결
Claude Code 2.1.291로 검증했습니다. claude plugin validate는 경고 없이 통과하고, claude plugin test는 114개 테스트를 실행해 모두 통과합니다. 작성자는 Claude Code 2.1.274 이상을 요구 사항으로 밝힙니다. 아무 일도 일어나지 않으면 다음을 순서대로 확인하십시오.
/compact-adviser가 없다면:CLAUDE_CODE_ENABLE_FUNCTION_HOOKS가 정확히1이 아니거나COMPACT_ADVISER_DISABLE이 설정되어 있습니다./compact-adviser status에Key: missing이 표시된다면: 패널, 환경 변수 또는./.env에 키를 추가하십시오.- 명령은 작동하지만 힌트가 나타나지 않는다면: 컨텍스트가 최솟값보다 작거나, 마지막 턴이 확정된 답변으로 끝나지 않았습니다.
- 토스트에 "nonessential network traffic"이 언급된다면:
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC이 TypeSafe 요청을 막고 있습니다. claude -p세션은 설계상 항상 비활성입니다.
자주 묻는 질문
- Compact Adviser에 API 키가 필요한가요?
- 네. 판단 요청은 사용자 자신의 키로 TypeSafe의 Jev API에 전송됩니다. 환경 변수 TYPESAFE_API_KEY를 설정하거나, 세션 폴더의 .env 파일에 넣거나, /compact-adviser 패널에 저장하십시오. 키가 없으면 모드는 아무 조언도 하지 않습니다.
- TypeSafe에 무엇이 전송되나요?
- 최근 대화를 32,000바이트로 제한한 스냅샷입니다. 사용자 제약 조건, 도구 결과를 잘라 낸 최대 64개의 최근 메시지, 기존 요약, 저장된 파일 이름이 담깁니다. 알려진 키 패턴과 .env, 개인 키 같은 민감한 파일은 최선의 노력(best-effort) 방식으로 가려집니다.
- 묻지 않고 세션을 압축하나요?
- 기본적으로는 아닙니다. 기본 모드는 힌트만 보여 줍니다. 자동 모드는 /compact-adviser auto로 선택하고 대화 상자에서 확인해야 하며, 그 경우에도 같은 판단을 통과한 체크포인트에서만 동작합니다.
- /compact-adviser 명령이 나타나지 않는 이유는 무엇인가요?
- 이 모드는 CLAUDE_CODE_ENABLE_FUNCTION_HOOKS가 정확히 1이고 COMPACT_ADVISER_DISABLE이 참 값으로 설정되지 않았을 때만 활성화됩니다. claude -p 같은 비대화형 세션에서도 비활성 상태로 남습니다.
- 힌트가 전혀 보이지 않는 이유는 무엇인가요?
- 컨텍스트가 최소 40,000토큰(기본 최솟값)이어야 하고, 마지막 턴이 확정된 답변으로 끝나야 합니다. 쿨다운과 일시 중지(snooze)도 적용되며, 힌트가 뜨려면 판단 점수가 0.90에서 0.50 사이의 기준선을 넘어야 합니다. 이 기준선은 컨텍스트가 찰수록 완화됩니다.
# 관련 모드
추천컨텍스트 미터
컨텍스트 창 사용률, 5시간·7일 요금제 사용량, 세션 비용을 상태 표시줄에 보여 주고 한도에 가까워지면 경고합니다.
- 상태 표시줄
- 토스트
- UI 변경
v2.1.310에서 테스트됨
더 보기: 타이머, 할 일, 스탠드업, 컨텍스트, 사용량, 비용.