Gần đây, Claude Code đã giới thiệu một tính năng mới đầy thú vị: `/buddy` – một người bạn đồng hành sống ngay trong terminal của bạn và phản ứng với code bạn viết. Mỗi người dùng sẽ nhận được một người bạn đồng hành duy nhất, được “gieo mầm” từ danh tính của họ. Điều đặc biệt là hệ thống này không cho phép “reroll” (tái tạo) hay trao đổi.
Tuy nhiên, không phải ai cũng may mắn nhận được thú cưng ưng ý ngay từ đầu. Một ví dụ điển hình là trường hợp của tôi: ban đầu tôi nhận được một “Cactus Sử Thi” tên là “Thornquake”. Nhưng điều tôi thực sự muốn là một “Mèo Huyền Thoại”. Với quyết tâm đó, tôi đã đi sâu vào mã nguồn, tìm hiểu chính xác cách hệ thống hoạt động, và cuối cùng đã sở hữu được chú Mèo Huyền Thoại mà mình mong muốn.

Mục lục
Giải Mã Thuật Toán: Cơ Chế Tạo Thú Cưng Của Claude Code
Điều mấu chốt đầu tiên cần hiểu là thú cưng của bạn được tạo ra theo một cơ chế hoàn toàn xác định. Điều này có nghĩa là cùng một danh tính sẽ luôn tạo ra cùng một người bạn đồng hành, không có yếu tố ngẫu nhiên (RNG) nào tại thời điểm khởi tạo. Đây là những gì diễn ra bên dưới lớp vỏ:
identity + "friend-2026-401" → FNV-1a hash → Mulberry32 PRNG seed
Chuỗi này, kết hợp với một hằng số cố định, được băm bằng thuật toán FNV-1a để tạo ra một hạt giống (seed) cho bộ tạo số giả ngẫu nhiên (PRNG) Mulberry32. PRNG này sau đó được sử dụng tuần tự để xác định các đặc điểm của thú cưng:
- Độ hiếm (Rarity): Được xác định bằng một lần quay có trọng số (Phổ biến 60%, Không phổ biến 25%, Hiếm 10%, Sử thi 4%, Huyền thoại 1%).
- Loài (Species): Được chọn đồng nhất từ 18 tùy chọn khác nhau (ví dụ: vịt, mèo, rồng, axolotl, chonk…).
- Kiểu mắt, mũ, độ sáng bóng (Shiny) (tỉ lệ 1%), và chỉ số (Stats) như DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK.
Nguồn gốc của “danh tính” (identity) dùng để gieo mầm cho toàn bộ quá trình được lấy từ:
oauthAccount?.accountUuid ?? userID ?? "anon"
Đây chính là điểm mà hầu hết mọi người gặp khó khăn và bế tắc trong việc thay đổi thú cưng của mình.
Cái Bẫy Thường Gặp: accountUuid Ghi Đè userID
Có một số script đang lưu hành trên mạng hướng dẫn bạn “brute-force” một `userID` mong muốn và ghi nó vào file cấu hình `~/.claude.json`. Tôi đã thử cách này: tìm được một `userID` hoàn hảo để ra một chú Mèo Huyền Thoại. Tôi đã thiết lập nó, khởi động lại Claude Code, và kết quả là… vẫn nhận được chú Xương Rồng Sử Thi ban đầu.
Tại sao lại như vậy? Nếu bạn đang sử dụng gói Team hoặc Pro của Claude Code, file cấu hình của bạn sẽ chứa một trường `oauthAccount.accountUuid`. Trường này có ưu tiên cao hơn so với `userID`. Điều này có nghĩa là hệ thống tạo thú cưng sẽ không bao giờ nhìn vào `userID` nếu `accountUuid` tồn tại.
Giải Pháp: Cách “Reroll” Thú Cưng Của Bạn
Để vượt qua giới hạn này và sở hữu thú cưng mà bạn mơ ước, giải pháp tương đối đơn giản nhưng yêu cầu sự cẩn thận: bạn cần xóa duy nhất trường `accountUuid` khỏi đối tượng `oauthAccount` trong file cấu hình của mình. Hãy giữ lại tất cả các trường khác:
{
"oauthAccount": {
"emailAddress": "your@company.com",
"organizationName": "Your Team Plan"
},
"userID": "your-brute-forced-legendary-id"
}
Khi trường `accountUuid` bị xóa, toán tử nullish coalescing (`??`) sẽ chuyển sang sử dụng `userID`. Đừng lo lắng, gói Team Plan của bạn vẫn hoạt động bình thường vì quá trình xác thực sử dụng mã thông báo OAuth chứ không phải UUID tài khoản.
Sau khi chỉnh sửa cấu hình, bạn cần xóa trường `companion` khỏi file cấu hình (thao tác này buộc hệ thống phải tạo một thú cưng mới), khởi động lại Claude Code, và sau đó chạy lệnh `/buddy`.
Điều Gì Được Lưu Trữ và Điều Gì Được Tái Tạo
Một trong những điều ngạc nhiên nhất trong quá trình phân tích ngược là nhận ra những gì được lưu trữ và những gì được tái tạo. File cấu hình của bạn chỉ lưu trữ các thông tin sau:
- `name` (Tên do AI tạo ra khi khởi tạo)
- `personality` (Tính cách do AI tạo ra khi khởi tạo)
- `hatchedAt` (Thời gian khởi tạo)
Tất cả các đặc điểm khác – độ hiếm, loài, mắt, mũ, độ sáng bóng, chỉ số – đều được tái tạo từ hash danh tính của bạn mỗi khi được đọc. Một bình luận trong mã nguồn đã giải thích rõ điều này:
“Bones are regenerated from hash(userId) on every read so species renames don’t break stored companions and users can’t edit their way to a legendary.”
Điều này có ý nghĩa quan trọng:
- Không có sự tiến hóa: Không có điểm kinh nghiệm (XP), không lên cấp, không có sự tiến bộ nào cho thú cưng.
- Chỉ số cố định: Các chỉ số được xác định một cách nhất quán từ danh tính của bạn.
- Bạn không thể chỉ chỉnh sửa độ hiếm trong cấu hình: Nó sẽ bị ghi đè vào lần đọc tiếp theo.
- Nhưng bạn có thể kiểm soát danh tính nào để gieo mầm quá trình tạo ra: Đây chính là kẽ hở chúng ta lợi dụng.
Lưu Ý Quan Trọng Duy Nhất
Có một trường hợp ngoại lệ bạn cần lưu ý: Nếu Anthropic buộc bạn phải đăng nhập lại (ví dụ: mã thông báo hết hạn, cập nhật hệ thống), máy chủ sẽ ghi lại `accountUuid` thực của bạn vào file cấu hình. Khi đó, thú cưng của bạn sẽ trở về trạng thái ban đầu.
Đừng lo lắng, bạn chỉ cần lặp lại quá trình: xóa `accountUuid` một lần nữa và khởi tạo lại. Với cùng một `userID` đã “brute-force”, bạn sẽ nhận lại người bạn đồng hành huyền thoại của mình (mặc dù với một tên mới do AI tạo ra, nhưng loài và độ hiếm vẫn được giữ nguyên).
Công Cụ Hỗ Trợ: Scripts Tự Động Hóa
Để giúp cộng đồng dễ dàng thực hiện quá trình này, tôi đã tổng hợp một kho lưu trữ với tất cả những gì bạn cần để “reroll” thú cưng của mình một cách hiệu quả:
ithiria894/claude-code-buddy-reroll
Kho lưu trữ này bao gồm các script tiện lợi:
- `reroll.js`: Brute-force để tìm bất kỳ loài và độ hiếm mục tiêu nào.
- `verify.js`: Kiểm tra xem ID nào sẽ tạo ra thú cưng gì (hoặc tự động đọc cấu hình hiện tại của bạn).
- `fix.sh`: Lệnh khôi phục một bước sau khi bị buộc đăng nhập lại.
Dưới đây là một số ví dụ về cách sử dụng các script này:
# Tìm một chú rồng huyền thoại
node reroll.js dragon 2000000
# Kiểm tra xem cấu hình hiện tại của bạn sẽ tạo ra thú cưng nào
node verify.js auto
# Khắc phục sau khi đăng nhập lại
bash fix.sh
Chúc bạn may mắn với hành trình “reroll” của mình! 🎲



