ClOr

ClOr

백엔드 실무 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.

Claude Code 해부학 (완결)

51만 줄 소스코드를 19편에 걸쳐 분석한 완결 시리즈

전체 시리즈 보기 →

백엔드 트러블슈팅

실무에서 겪은 장애와 해결 과정 기록

전체 시리즈 보기 →

최신 글

article thumbnail

Claude Code에서 /buddy를 쳐보면 터미널에 ASCII 아트 캐릭터가 하나 뜬다. 일종의 다마고치 같은 건데, 종(species), 희귀도, 눈, 모자, 스탯까지 전부 갖추고 있다. 문제는 이게 완전 랜덤이라 내가 고를 수 없다는 것이다.

buddy-pick이라는 도구가 나왔다. 바이너리를 직접 패치해서 원하는 buddy를 리롤 없이 확정적으로 뽑을 수 있다. 실제로 써서 Legendary Shiny까지 뽑아봤다.

 

buddy-pick으로 뽑은 Legendary Shiny 고양이

 

★★★★★ Legendary + Shiny 고양이. tinyduck 모자에 DEBUGGING 100. buddy-pick이 찾아준 SALT 하나로 이게 나온다.

목차

  • buddy는 어떻게 결정되는가
  • buddy 확률은 어떻게 되나
  • 전체 18종 species
  • buddy-pick 동작 원리
  • 사용법
  • Claude Code 업데이트하면 사라지나?
  • 비슷한 도구들
  • 요약

buddy는 어떻게 결정되는가

Claude Code의 buddy는 해시 기반 결정론적 파이프라인으로 만들어진다.

userId + SALT → wyhash → mulberry32 PRNG → rarity → species → eyes → hat → shiny → stats

바이너리에 하드코딩된 15바이트 SALT 값이 핵심이다. 이 SALT와 사용자 ID를 합쳐서 해시를 돌리면, 그 결과로 희귀도부터 스탯까지 전부 결정된다.

같은 SALT + 같은 userId = 항상 같은 buddy. 다시 말해, SALT만 바꾸면 buddy가 바뀐다.

buddy-pick 동작 원리

buddy 확률은 어떻게 되나

"내 buddy 왜 이렇게 구린데?"라고 생각했다면, 확률 때문이다.

등급 확률
★ Common 60%
★★ Uncommon 25%
★★★ Rare 10%
★★★★ Epic 4%
★★★★★ Legendary 1%

여기에 모든 등급에 독립적으로 1% 확률로 Shiny 버전이 존재한다. Legendary Shiny를 자연적으로 받을 확률은 0.01%다. 즉 만 명 중 한 명. 운에 맡기면 사실상 불가능하고, 이걸 확정적으로 뽑으려면 buddy-pick이 필요하다.

전체 18종 species

선택할 수 있는 buddy는 총 18종이다.

 

Claude Code buddy 전체 18종 species 갤러리

 

동물 판타지/자연 사물/기타
Duck (오리) Dragon (드래곤) Blob (블롭)
Goose (거위) Ghost (유령) Cactus (선인장)
Cat (고양이) Axolotl (아홀로틀) Robot (로봇)
Owl (부엉이) Mushroom (버섯) Chonk (뚱냥이)
Penguin (펭귄) Snail (달팽이)  
Turtle (거북) Capybara (카피바라)  
Rabbit (토끼) Octopus (문어)  

종마다 눈(eyes), 모자(hat) 조합이 다르고, 각 buddy에는 DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK 다섯 가지 스탯이 붙는다.

buddy-pick 동작 원리

buddy-pick의 동작은 세 단계다.

1단계: Salt 탐색

Claude Code 바이너리 내부에서 현재 SALT 값의 위치를 찾는다. 특정 문자열을 직접 검색하는 게 아니라, 근처의 불변 상수를 구조적 앵커로 활용해서 SALT 위치를 특정한다. Claude Code가 업데이트되어도 앵커 구조가 유지되는 한 동작한다.

2단계: 브루트포스 매칭

후보 SALT를 초당 수천 개씩 생성하면서, 각 SALT가 어떤 buddy를 만드는지 계산한다. Bun 서브프로세스로 wyhash를 빠르게 돌린다. 사용자가 지정한 조건(종, 희귀도, 눈, 모자, 반짝이)에 맞는 SALT를 찾으면 멈춘다.

3단계: 바이너리 패치

찾은 SALT를 Claude Code 바이너리의 해당 위치에 직접 써넣는다. 패치 전에 .buddy-pick.bak 백업 파일을 자동 생성하므로, 문제가 생기면 복원할 수 있다.

사용법

npx buddy-pick

실행하면 메뉴가 뜬다.

? What would you like to do?
❯ Bruteforce search for specific companion
  Preview species gallery
  Preview custom salt
  Rename companion
  Restore from Claudex
  View Claudex collection

원하는 buddy 뽑는 순서:

  1. Bruteforce search for specific companion 선택
  2. 종(species) 선택 — 예: Cat
  3. 희귀도, 눈 모양, 모자, 반짝이 여부 필터링
  4. 브루트포스가 돌면서 조건에 맞는 SALT를 찾아준다
  5. 찾은 buddy를 미리보기한 뒤 패치 적용

패치된 buddy 정보는 ~/.config/buddy-pick/claudex.json에 자동 저장된다. 일종의 도감이라고 보면 된다.

Claude Code 업데이트하면 사라지나?

사라진다. Claude Code를 업데이트하면 바이너리가 새로 깔리면서 패치가 덮어쓰기된다.

하지만 Claudex에 저장해뒀으니 복원은 간단하다.

? What would you like to do?
❯ Restore from Claudex

Restore from Claudex를 선택하면 저장된 SALT를 새 바이너리에 다시 패치해준다. 원클릭 복원이다.

바이너리를 직접 수정하는 방식이므로, Anthropic 공식 기능이 아니다. 향후 바이너리 구조가 크게 바뀌면 buddy-pick도 업데이트가 필요할 수 있다. 요구 사항은 Claude Code >= 2.1.89, Node.js >= 18.

비슷한 도구들

buddy-pick 외에도 비슷한 리롤 도구가 있다.

  • cc-buddy — 대화형 리롤러, 중국어 지원 포함
  • buddy-reroll — 비슷한 리롤 방식의 도구

필자 기준으로는 buddy-pick이 Claudex 백업 시스템과 세밀한 필터링(종 + 희귀도 + 눈 + 모자 + 반짝이 개별 지정)을 갖추고 있어서 가장 실용적이었다.

요약

  • Claude Code buddy는 바이너리 내부 SALT 기반 해시로 결정된다 — 운이 아니라 수학이다
  • 일반적으로 받는 buddy의 60%는 Common 등급, Legendary는 1%
  • buddy-pick은 원하는 조건의 SALT를 브루트포스로 찾아 바이너리를 직접 패치한다
  • 18종 species, 5단계 희귀도, Shiny 여부까지 필터링 가능
  • 업데이트로 초기화돼도 Claudex 백업으로 원클릭 복원
  • 사용법: npx buddy-pickBruteforce search for specific companion

관련글:

profile

ClOr

@ClOr

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

ClOr · 백엔드 트러블슈팅과 AI 에이전트 구조 분석을 기록합니다.