19 điểm bởi GN⁺ 21 ngày trước | 3 bình luận | Chia sẻ qua WhatsApp
  • 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 clientkiể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.tshệ 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ư KAIROSAnti-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

    • Mỗi khi Claude xuất hiện với vai trò đồng tác giả commit, tôi thấy ngượng ngùng
      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?
    • Tôi nghĩ cũng sẽ có người như tôi đã thêm chỉ dẫn kiểu này vào file CLAUDE.md rồi
      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ỏ
    • Có lẽ mục đích không phải là giả làm người, mà là để khi chất lượng code kém thì Claude không bị chế giễu
      Rốt cuộc người chịu trách nhiệm vẫn là lập trình viên con người
    • Mục tiêu của đoạn code là ngăn rò rỉ thông tin, nhưng cách triển khai thực tế lại rộng hơn thế
      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
    • Tôi cũng từng thấy dòng “coauthored by Claude Code” trong PR
      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 nghĩ lo ngại này là hơi quá
      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
    • Tôi không nghĩ tác động lớn đến vậy
      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
    • Thành thật mà nói bản thân Claude giống như một mớ vibe coded slop
      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

    • Dù sao thì chi phí luật sư chắc cũng đang được tính rồi, nên đây đơn giản là tận dụng đội pháp lý thôi
      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

    • Comment thực chất là mẹo cốt lõi của agent coding
      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
    • Hầu hết các codebase lớn đóng kín cũng đều như vậy
      Chỉ là Anthropic không ngờ nó sẽ bị lộ thôi
    • Đây là kiểu comment tốt để giải thích vì sao lại có cấu hình đó
      Với đối thủ cạnh tranh thì thông tin này chẳng có mấy giá trị
    • Nhét được càng nhiều thông tin vào code càng thực dụng
      Dù sao họ cũng đâu lường trước chuyện bị rò rỉ
    • Đưa toàn bộ ngữ cảnh vào trong code có vẻ là điểm cuối của thiết kế thân thiện với agent
      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

    • Blog đó có vẻ mang dấu vết được AI viết một phần
    • Cũng có ý kiến cho rằng bài gốc quá rối nên cần tóm tắt
    • Văn hóa HN có xu hướng trở nên tự tham chiếu
  • 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

    • Tôi thì thất vọng với Claude Code nên đã chuyển sang Codex, và với phát triển web lẫn di động nó hoạt động gần như tốt tương đương
  • 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

    • Tôi hiểu chuyện bảo vệ codename, nhưng xóa dấu vết do AI tạo ra lại là chuyện khác
      Cảm giác đây là một thay đổi khá quan trọng
    • Cốt lõi nằm ở câu “hãy viết commit message như một lập trình viên con người”
    • Việc cấm các cụm liên quan đến Claude trong phần “BAD example” cho thấy ý đồ rõ ràng là tránh để lộ AI
    • Có lẽ mục tiêu là để các lập trình viên dùng AI trong dự án công ty ít bị chú ý hơn
    • Có vẻ khi đóng góp mã nguồn mở, Claude được thiết kế để không tự động lộ danh tính
  • Ý 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ế

    • Có lẽ sắp tới sẽ có các bản sao như zAI, Qwen, Minimax CC
      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
    • Bản thân cuộc tranh luận về distillation này thấy khá rỗng tuếch
      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
    • Thực ra cả hai phía đều đang chưng cất (copy) lẫn nhau
      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
    • Công cụ giả rốt cuộc chỉ là mồi nhử có thể lọc bằng regex
      Dạo này bản thân distillation cũng đang giảm dần
    • Cái kiểu mỉa mai “chúng tôi đã lấy tác phẩm của người khác, nhưng các anh thì đừng lấy của chúng tôi” nghe thật buồn cười
  • Tôi chia sẻ hướng dẫn trực quan do mình làm
    ccunpacked.dev