- Do Anthropic phát hành kèm source map trong gói npm, toàn bộ mã của Claude Code đã bị công khai, làm lộ mọi tính năng nội bộ và cờ thử nghiệm
- Trong mã có chèn công cụ giả để chống bắt chước mô hình (anti-distillation), chế độ undercover để che giấu danh tính AI, và regex frustration để phát hiện chửi thề
- Có cấu trúc xác thực native client và kiểm tra hash ở mức DRM, được thiết kế để chặn các công cụ không chính thức truy cập API
- Các chú thích nội bộ cũng cho thấy nhiều tính năng thử nghiệm như 250.000 lệnh gọi API thất bại mỗi ngày, chế độ tác nhân tự trị KAIROS chưa hoàn thiện, và hệ thống bạn đồng hành kiểu Tamagotchi
- Vụ rò rỉ lần này được xem là trường hợp lộ cấu trúc sản phẩm cốt lõi và lộ trình phát triển của Anthropic, với khả năng nguyên nhân là lỗi source map của runtime Bun
Cấu trúc nội bộ của Claude Code bị hé lộ qua vụ rò rỉ source map
- Do Anthropic phát hành kèm source map trong gói npm, toàn bộ mã nguồn của Claude Code đã bị công khai
- Gói sau đó đã bị xóa, nhưng mã đã được mirror ở nhiều nơi để phân tích
- Đây là vụ rò rỉ thứ hai chỉ trong một tuần, trước đó tài liệu đặc tả mô hình cũng đã bị lộ
- Sự việc xảy ra ngay sau khi Anthropic chặn về mặt pháp lý việc dùng API nội bộ từ các công cụ bên thứ ba
-
Anti-distillation: chèn công cụ giả để ngăn bắt chước
- Trong
claude.ts có cờ ANTI_DISTILLATION_CC; khi bật, nó thêm anti_distillation: ['fake_tools'] vào yêu cầu API để chèn định nghĩa công cụ giả vào system prompt
- Mục đích là làm nhiễu các nỗ lực bắt lưu lượng API để bắt chước mô hình
- Chỉ hoạt động trong phiên CLI cấp một khi cờ GrowthBook
tengu_anti_distill_fake_tool_injection được bật
- Trong
betas.ts còn có cơ chế thứ hai là chức năng bảo vệ phía máy chủ dựa trên tóm tắt
- Nó tóm tắt văn bản giữa các lần gọi công cụ rồi trả về kèm chữ ký mật mã để có thể khôi phục về sau
- Ngay cả khi bên ngoài ghi lại lưu lượng, họ cũng không thể thấy toàn bộ quá trình suy luận
- Tính năng này chỉ hoạt động khi nhiều điều kiện cùng được đáp ứng, và có thể bị vô hiệu hóa nếu dùng proxy MITM để gỡ trường dữ liệu
- Có thể tắt bằng biến môi trường
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS
- Do điều kiện
USER_TYPE === 'ant', tính năng này chỉ dành cho người dùng nội bộ Anthropic
- Trên thực tế, đây giống ràng buộc pháp lý hơn là một biện pháp phòng vệ thuần kỹ thuật
-
Undercover mode: chế độ che giấu danh tính AI
undercover.ts sẽ loại bỏ tên mã nội bộ của Anthropic, kênh Slack, và cụm từ “Claude Code” khi được dùng trong kho mã bên ngoài
- Có dòng
"There is NO force-OFF", nghĩa là không thể tắt
- Có thể ép bật bằng biến môi trường
CLAUDE_CODE_UNDERCOVER=1
- Trong các bản build bên ngoài, hàm này bị rút gọn thành giá trị trả về vô nghĩa, tạo thành cấu trúc một chiều
- Vì vậy khi nhân viên Anthropic đóng góp cho mã nguồn mở, sẽ không có dấu hiệu cho thấy nội dung do AI viết
- Việc che giấu thông tin nội bộ là hợp lý, nhưng nó cũng tạo ra hiệu ứng AI ngụy trang thành con người
-
Frustration regex: regex phát hiện chửi thề
- Trong
userPromptKeywords.ts có các mẫu regex phát hiện sự bất mãn và chửi thề của người dùng
- Phát hiện nhiều biểu đạt như “wtf”, “this sucks”, “fuck you”
- Điều này cho thấy sự mỉa mai khi một công ty LLM lại dùng regex để phân tích cảm xúc,
- nhưng xét về chi phí và tốc độ thì hiệu quả hơn gọi LLM
-
Native client attestation: xác thực client bên dưới runtime JS
- Trong
system.ts có placeholder cch=00000 trong yêu cầu API,
- stack HTTP native dựa trên Zig của Bun sẽ thay nó bằng hash
- máy chủ xác minh hash này để kiểm tra có phải binary Claude Code chính thức hay không
- Đây là cơ sở kỹ thuật trong tranh chấp pháp lý với OpenCode,
- thực hiện xác minh ở mức DRM để công cụ bên thứ ba không thể gọi API trực tiếp
- Tuy nhiên, nếu cờ
NATIVE_CLIENT_ATTESTATION bị tắt hoặc
CLAUDE_CODE_ATTRIBUTION_HEADER bị vô hiệu hóa thì nó sẽ không hoạt động
- Việc thay hash bằng Zig chỉ hoạt động trong binary Bun chính thức, vô hiệu trong môi trường Node
- Chưa rõ máy chủ có từ chối hash sai hay không,
- nhưng có chú thích rằng
_parse_cc_header cho phép “unknown extra fields”
-
250.000 lệnh gọi API bị lãng phí
- Theo chú thích trong
autoCompact.ts,
- mỗi ngày có khoảng 250.000 lệnh gọi API bị lãng phí trong vòng lặp thất bại
- có 1.279 phiên thất bại liên tiếp hơn 50 lần, tối đa 3.272 lần
- Bản sửa chỉ gồm 3 dòng: khi đặt
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3,
- chức năng tự nén sẽ bị tắt sau 3 lần thất bại liên tiếp
-
KAIROS: chế độ tác nhân tự trị chưa công bố
- Xuyên suốt mã có một chế độ feature gate tên
KAIROS
- Theo
main.tsx, nhiều khả năng đây là tính năng tác nhân tự trị
- Bao gồm kỹ năng
/dream (chưng cất bộ nhớ ban đêm), webhook GitHub, daemon nền, và làm mới cron mỗi 5 phút
- Dù triển khai còn dang dở, một kiến trúc tác nhân nền luôn chạy đã được dựng sẵn
-
Các phát hiện khác
- Easter egg Cá tháng Tư: trong
buddy/companion.ts có hệ thống bạn đồng hành kiểu Tamagotchi
- Gồm 18 loài sinh vật, độ hiếm, chỉ số RPG và phiên bản ‘shiny’ với xác suất 1%
- Được quyết định bằng PRNG dựa trên ID người dùng, đồng thời né kiểm tra build bằng mã hóa chuỗi
- Engine render terminal (
ink/screen.ts, ink/optimizer.ts)
- triển khai bộ đệm ASCII dựa trên
Int32Array, metadata kiểu bitmask, và cache tăng hiệu năng gấp 50 lần
- Kiểm tra bảo mật (
bashSecurity.ts) gồm 23 bước
- chặn lệnh tích hợp của Zsh, ngăn vượt qua bằng
=curl, chặn chèn zero-width Unicode và null byte
- là một trường hợp hiếm có mô hình đe dọa dành riêng cho Zsh
- Quản lý prompt cache (
promptCacheBreakDetection.ts)
- theo dõi 14 dạng làm hỏng cache, dùng ‘sticky latch’ để giữ cache khi chuyển chế độ
- có chú thích
DANGEROUS_uncachedSystemPromptSection()
- phản ánh triết lý thiết kế tập trung vào giảm chi phí token
- Bộ điều phối đa tác nhân (
coordinatorMode.ts)
- dùng thuật toán điều phối dựa trên prompt thay vì mã
- bao gồm các chỉ dẫn như “cấm phê duyệt công việc yếu”, “không được ủy quyền khi chưa hiểu”
- Cũng tồn tại vấn đề chất lượng mã
print.ts dài 5.594 dòng, trong đó một hàm đơn lẻ dài tới 3.167 dòng
- dùng Axios cho yêu cầu HTTP, trùng thời điểm với sự cố phiên bản npm độc hại gần đây
-
Ý nghĩa và tác động
- Khác với SDK công khai của Google Gemini CLI hay OpenAI Codex,
- vụ rò rỉ lần này làm lộ toàn bộ cấu trúc nội bộ của sản phẩm cốt lõi Anthropic
- Thiệt hại lớn nhất không nằm ở mã mà ở việc lộ Feature Flag và lộ trình phát triển
- các tính năng chiến lược như KAIROS và Anti-distillation đã bị phơi bày trước đối thủ
- Năm ngoái Anthropic đã mua lại Bun, và Claude Code chạy trên Bun
- có khả năng nguyên nhân là lỗi source map của Bun (
oven-sh/bun#28001)
- đây là lỗi khiến source map bị lộ ngay cả ở chế độ production và hiện vẫn chưa được khắc phục
- Kết quả là Anthropic đã làm rò rỉ chính sản phẩm của mình do lỗi trong chuỗi công cụ của mình
- đúng như một phản ứng trên Twitter: đây là vụ việc đầy mỉa mai khi “phát hành mã do AI viết rồi để lỗi do AI tạo ra làm rò rỉ chính đoạn mã đó”
3 bình luận
Thông minh
Nếu là sự cố phát sinh khi commit bằng AI thì sao...?!
Ý kiến trên Hacker News
Có nhiều bình luận hiểu nhầm rằng “Undercover mode” chỉ đơn giản là tính năng che giấu thông tin nội bộ
Nhưng trong prompt thực tế lại ghi rõ rằng tuyệt đối không được đưa “Claude Code” hay bất kỳ nhắc tới AI nào vào commit message hoặc mô tả PR
Tức là nó trông giống một tính năng hành xử như con người và che giấu danh tính
Điều đặc biệt đáng lo là chỉ dẫn này được áp dụng nhất là khi đóng góp vào kho mã công khai
Link mã liên quan
Lịch sử Git là để theo dõi trách nhiệm và quyền sở hữu, không phải nơi ghi lại danh sách công cụ đã dùng
Vậy thì chẳng lẽ tôi cũng phải thêm linter hay IDE làm đồng tác giả trong PR của mình?
Về bản chất đây là vấn đề có thể giải quyết chỉ bằng một dòng cấu hình nhỏ
Rốt cuộc người chịu trách nhiệm vẫn là lập trình viên con người
Có thể họ cố tình đặt phạm vi rộng để đạt mục tiêu, hoặc cũng có thể có dụng ý ẩn sau đó
Dù vậy, thay vì kết luận ngay là “giả làm người”, có lẽ hợp lý hơn khi hiểu đúng theo câu chữ là “hãy viết như một lập trình viên con người”
Càng hoài nghi thì càng nên chỉ trích dựa trên sự thật mới có sức thuyết phục
Thành thật mà nói tôi không hề muốn điều đó
Các vụ rò rỉ Mythos liên tiếp gần đây cùng với việc toàn bộ codebase Claude Code bị lộ đang làm dấy lên vấn đề niềm tin
Từng sự kiện riêng lẻ thì thú vị, nhưng khi xảy ra liên tiếp thì bắt đầu giống như một mô thức
Cuối cùng nó dẫn tới câu hỏi: “Liệu còn có thể tiếp tục tin tưởng những công cụ như thế này trong codebase hay không?”
Tôi vẫn đang trả 140 USD để dùng CC
Thậm chí tôi còn cho rằng những vụ rò rỉ này có liên hệ với mô hình đạo đức của Anthropic — kiểu trưởng thành qua thất bại
Giá trị thật không nằm ở code mà ở quyền truy cập mô hình
Codebase thì lộn xộn, nhưng quyền truy cập mô hình theo thuê bao vẫn đủ hấp dẫn để tôi dùng Claude Code mỗi ngày
Web UI lẫn CC đều có quá nhiều lỗi vặt
Điều khiển tmux cũng không chạy đúng như tài liệu, dọn session cũng không xong
Dù vậy đây vẫn là sản phẩm tôi thích — vụng về nhưng có sức hút
Bản fork anthropics/claude-code trên GitHub của tôi đã bị gỡ theo DMCA
Dù không hề chứa mã bị rò rỉ, toàn bộ network gồm 8.1K kho vẫn bị chặn hàng loạt
Link thông báo DMCA
Anthropic nghĩ rằng đã rung chuông rồi còn có thể bắt nó dừng lại được thì thật ngây ngốc
Rò rỉ thì không thể đảo ngược, nên thực tế hơn là đưa nó vào roadmap sản phẩm
Tôi ngạc nhiên khi thấy những thứ mà trước đây các công ty gọi là bí mật kinh doanh lại nằm nguyên trong source
Thậm chí comment còn ghi cả bối cảnh kinh doanh
Ví dụ: dữ liệu vận hành như “lãng phí 250.000 API call mỗi ngày” cũng bị lộ nguyên xi
Vì agent đọc comment còn kỹ hơn tài liệu, nên có thể dùng như trí nhớ dài hạn
Chỉ là Anthropic không ngờ nó sẽ bị lộ thôi
Với đối thủ cạnh tranh thì thông tin này chẳng có mấy giá trị
Dù sao họ cũng đâu lường trước chuyện bị rò rỉ
Không còn cần phải giải thích bằng tài liệu riêng nữa
Một số tính năng bị khóa sau điều kiện
process.env.USER_TYPE === 'ant'Tức là chỉ dẫn dành cho nhân viên Anthropic còn nghiêm ngặt và thẳng thắn hơn — một cấu trúc khá thú vị
Bài gốc trên HN vốn đã rất nổi rồi, nên có người thắc mắc liệu có cần đăng thêm một blog tóm tắt bình luận HN nữa không
Tôi vẫn cho rằng Claude Code rất xuất sắc
Không có lý do gì để chuyển sang OpenAI hay Gemini
Cái tên “Undercover mode” và câu “cấm nhắc đến Claude Code” nghe rất rợn người, nhưng nếu xem code thực tế thì mục đích lớn hơn là bảo vệ codename nội bộ
Link source
Cảm giác đây là một thay đổi khá quan trọng
Ý tưởng “Anti-distillation: cài công cụ giả để ngăn bị sao chép” khá thú vị
Nếu các đối thủ Trung Quốc thực sự triển khai luôn những công cụ giả đó thì sẽ là một cú lật ngược tình thế
Giờ tôi nghĩ điểm cạnh tranh không còn là mô hình mà là dữ liệu và chi phí suy luận
Tôi muốn bàn thêm về chủ đề này
Vì các công ty đó vốn cũng xây đế chế của mình bằng cách dùng dữ liệu của người khác
Chất lượng thì chững lại, và khác biệt thật sự nằm ở độ hoàn thiện của công cụ
Vụ rò rỉ lần này có thể làm khoảng cách đó thu hẹp lại
Dạo này bản thân distillation cũng đang giảm dần
Tôi chia sẻ hướng dẫn trực quan do mình làm
ccunpacked.dev