BUGI@Bugi952
Claude Code 소스코드가 유출됐길래 뜯어봄
npm source map에서 전체 소스가 나왔는데
궁금한 걸 못 참는 성격이라 바로 분석 들어감
목적은 하나였음
내가 만든 Think Tank 시스템이 내부적으로 어떻게 처리되는지 알면 설계를 더 잘할 수 있을 것 같았음
발견한 것들이 꽤 많았음
---
1. CLAUDE.md가 매 API 호출마다 통째로 주입됨
system prompt인 줄 알았는데 user message로 들어가고 있었음
= 길수록 매번 토큰 낭비
기존 Think Tank CLAUDE.md가 109줄이었음
세션 종료 절차, 검증 게이트, 스킬 연계 규칙 같은 게 전부 여기 있었는데
이게 매 호출마다 들어가고 있었던 거임
세션 종료 로직은 /save 스킬로 분리하고
검증 게이트는 각 스킬 안에 인라인하고
109줄 → 58줄로 줄임
---
2. 컴팩션(대화 요약)이 "Compact Instructions" 섹션명을 기대함
대화가 길어지면 클로드가 알아서 요약하는데
이때 CLAUDE.md에 "Compact Instructions"라는 섹션이 있으면 그 안의 지시를 참고함
근데 보존 지시는 코드 강제가 아니라 모델한테 부탁 수준이라
보존할 항목을 명확하게 나열해야 효과가 있음
기존에는 "컴팩션 보호"라는 이름으로 써놨었는데
소스코드가 기대하는 이름이 아니었으니 제대로 작동 안 했을 수도 있음
이름 바꾸고 보존 항목 9개를 구체적으로 나열함
-> Think Tank 장기 기억 철학에 적합
---
3. 스킬에 allowed-tools로 도구 제한 가능
기존에는 스킬에 도구 제한이 없었음
글쓰기 모드에서도 터미널 명령 실행이 가능했고
저널 모드에서도 웹 검색이 가능했음
소스코드 보니까 스킬 frontmatter에 allowed-tools를 넣으면
해당 스킬에서 쓸 수 있는 도구를 제한할 수 있었음
7개 스킬 전부에 목적별 도구 제한을 걸었음
글쓰기 스킬은 Read, Write, Edit, Glob만
공부 스킬은 거기에 WebSearch, WebFetch 추가
이런 식으로
---
4. !command로 스킬 로드 시 파일 자동 주입
기존에는 think 스킬 실행하면
매번 "CONTEXT.md 먼저 읽어"를 스킬이 알아서 해야 했음
= Read 도구 호출 1~2회 낭비
!cat CONTEXT.md 이렇게 써놓으면
스킬 로드되는 순간 파일 내용이 프롬프트에 바로 들어감
think, decision, review, insight 스킬에 각각 필요한 파일을 자동 주입하도록 바꿈
---
5. context: fork로 서브에이전트 격리
review 스킬은 전체 목표 대비 진행률을 분석하는 건데
이게 메인 대화 컨텍스트를 많이 잡아먹음
context: fork를 쓰면 별도 서브에이전트에서 실행되고
결과만 메인으로 돌아옴
review 스킬에 적용함
---
요약하면
소스코드 분석 전: 감으로 설계
소스코드 분석 후: 내부 동작에 맞춰서 설계
도구의 내부를 이해하면 사용법이 달라지는듯
참고로 인터넷에 떠도는 소스코드니까
각자의 기준으로 보안 유의해서 진행하길 바람
저는 궁금증을 못 참고 질러버렸을 뿐...