- Anthropic เผยแพร่แพ็กเกจ npm โดย แนบ source map มาด้วย ทำให้โค้ดทั้งหมดของ Claude Code ถูกเปิดเผย และฟีเจอร์ภายในกับแฟล็กทดลองทั้งหมดถูกเปิดโปง
- ในโค้ดมีทั้ง การแทรกเครื่องมือปลอมเพื่อป้องกันการเลียนแบบโมเดล (anti-distillation), โหมด undercover ที่ซ่อนตัวตนว่าเป็น AI, และ frustration regex สำหรับตรวจจับคำด่า
- มีโครงสร้าง native client attestation และ การตรวจสอบแฮชระดับ DRM ที่ออกแบบมาเพื่อบล็อกการเข้าถึง API จากเครื่องมือที่ไม่เป็นทางการ
- คอมเมนต์ภายในเผยให้เห็นทั้ง API call ที่ล้มเหลววันละ 250,000 ครั้ง, โหมดเอเจนต์อัตโนมัติ KAIROS ที่ยังไม่เสร็จ, และ ระบบเพื่อนร่วมทางสไตล์ Tamagotchi รวมถึงฟีเจอร์ทดลองอื่น ๆ
- การรั่วไหลครั้งนี้ถือเป็น กรณีที่โครงสร้างผลิตภัณฑ์หลักและโรดแมปของ Anthropic ถูกเปิดเผย โดยมีความเป็นไปได้ว่าสาเหตุมาจากบั๊ก source map ของรันไทม์ Bun
โครงสร้างภายในของ Claude Code ที่ถูกเปิดเผยจากการรั่วไหลของ source map
- Anthropic เผยแพร่แพ็กเกจ npm โดย แนบ source map มาด้วย ทำให้ซอร์สโค้ดทั้งหมดของ Claude Code ถูกเปิดเผย
- แม้แพ็กเกจจะถูกลบในภายหลัง แต่โค้ดยังถูก มิเรอร์ไว้หลายแห่งและกลายเป็นเป้าหมายการวิเคราะห์
- นี่เป็นเหตุรั่วไหลครั้งที่สองภายในหนึ่งสัปดาห์ ก่อนหน้านี้มีการเปิดเผยเอกสารสเปกของโมเดล
- เกิดขึ้นไม่นานหลังจากที่ Anthropic ปิดกั้นการใช้ internal API จากเครื่องมือของบุคคลที่สามด้วยมาตรการทางกฎหมาย
-
Anti-distillation: การแทรกเครื่องมือปลอมเพื่อป้องกันการเลียนแบบ
- ใน
claude.ts มีแฟล็ก ANTI_DISTILLATION_CC ซึ่งเมื่อเปิดใช้จะเพิ่ม anti_distillation: ['fake_tools'] ลงในคำขอ API เพื่อ แทรกคำนิยามเครื่องมือปลอมเข้าไปใน system prompt
- จุดประสงค์คือเพื่อ ทำให้ความพยายามเลียนแบบโมเดลจากการดักจับทราฟฟิก API ปนเปื้อน
- จะทำงานเฉพาะใน เซสชัน CLI แรก ที่เปิดแฟล็ก GrowthBook
tengu_anti_distill_fake_tool_injection
- ใน
betas.ts มีอีกกลไกหนึ่งคือ ระบบป้องกันฝั่งเซิร์ฟเวอร์แบบอิงสรุปข้อความ
- จะสรุปข้อความระหว่างการเรียกใช้เครื่องมือ แล้วส่งกลับพร้อมลายเซ็นเข้ารหัสเพื่อให้กู้คืนได้ภายหลัง
- แม้ภายนอกจะบันทึกทราฟฟิกไว้ ก็ ไม่สามารถเห็นกระบวนการให้เหตุผลทั้งหมดได้
- ฟีเจอร์นี้ต้องอาศัยหลายเงื่อนไขพร้อมกันจึงจะทำงาน และ สามารถถูกทำให้ใช้การไม่ได้หากลบฟิลด์ออกด้วย MITM proxy
- ปิดใช้งานได้ด้วยตัวแปรแวดล้อม
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS
- เงื่อนไข
USER_TYPE === 'ant' ทำให้ เป็นฟีเจอร์สำหรับผู้ใช้ภายใน Anthropic เท่านั้น
- มาตรการป้องกันที่แท้จริงจึงมีลักษณะ ใกล้เคียงข้อจำกัดทางกฎหมายมากกว่ากลไกทางเทคนิค
-
Undercover mode: โหมดซ่อนตัวตนว่าเป็น AI
undercover.ts จะลบ โค้ดเนมภายในของ Anthropic, ช่อง Slack, และข้อความ “Claude Code” ออกเมื่อใช้งานในรีโพซิทอรีภายนอก
- มีข้อความ
"There is NO force-OFF" ที่บ่งชี้ว่า ไม่สามารถปิดใช้งานได้
- และสามารถบังคับเปิดได้ด้วยตัวแปรแวดล้อม
CLAUDE_CODE_UNDERCOVER=1
- ในบิลด์ภายนอก ฟังก์ชันนี้ถูก ตัดทอนให้เหลือการคืนค่าแบบไร้ความหมาย กลายเป็นโครงสร้างแบบทางเดียว
- ผลคือเมื่อพนักงาน Anthropic มีส่วนร่วมกับโอเพนซอร์ส ก็ จะไม่แสดงว่าเนื้อหานั้นถูกเขียนโดย AI
- แม้จุดประสงค์เรื่องการปกปิดข้อมูลภายในจะฟังดูสมเหตุสมผล แต่ก็ทำให้เกิดผลแบบ AI ปลอมตัวเป็นมนุษย์
-
Frustration regex: regex สำหรับตรวจจับคำด่า
- ใน
userPromptKeywords.ts มีรูปแบบ regex สำหรับตรวจจับ ความไม่พอใจและคำด่าของผู้ใช้
- ตรวจจับวลีอย่าง “wtf”, “this sucks”, “fuck you” และสำนวนอื่น ๆ ได้หลากหลาย
- มันสะท้อนความย้อนแย้งที่บริษัท LLM ใช้ regex ในการวิเคราะห์อารมณ์ แต่
- ก็มี ต้นทุนต่ำและเร็วกว่า การเรียกใช้ LLM
-
Native client attestation: การยืนยันตัวตนไคลเอนต์ใต้ชั้น JS runtime
- ใน
system.ts มี placeholder cch=00000 อยู่ในคำขอ API ซึ่ง
- สแตก HTTP แบบ native ของ Bun ที่เขียนด้วย Zig จะ แทนที่ค่านี้ด้วยแฮช
- จากนั้นเซิร์ฟเวอร์จะตรวจสอบแฮชนี้เพื่อ ยืนยันว่าเป็นไบนารี Claude Code อย่างเป็นทางการหรือไม่
- นี่คือ ฐานทางเทคนิคของข้อพิพาททางกฎหมายกับ OpenCode
- โดยมีการตรวจสอบระดับ DRM เพื่อป้องกันไม่ให้เครื่องมือของบุคคลที่สามเรียก API ได้โดยตรง
- อย่างไรก็ตาม หากปิดแฟล็ก
NATIVE_CLIENT_ATTESTATION หรือ
- ปิดใช้งาน
CLAUDE_CODE_ATTRIBUTION_HEADER ก็จะไม่ทำงาน
- และการแทนที่แฮชด้วย Zig จะทำงาน เฉพาะในไบนารี Bun อย่างเป็นทางการ ส่วนในสภาพแวดล้อม Node จะไม่มีผล
- ยังไม่ชัดเจนว่าเซิร์ฟเวอร์ปฏิเสธแฮชที่ไม่ถูกต้องหรือไม่
- โดยมีคอมเมนต์ระบุว่า
_parse_cc_header อนุญาต “unknown extra fields”
-
API call ที่สูญเปล่า 250,000 ครั้ง
- ตามคอมเมนต์ใน
autoCompact.ts
- มี API call ราว 250,000 ครั้งต่อวัน ที่สูญเปล่าไปกับลูปความล้มเหลว
- พบ 1,279 เซสชันที่ล้มเหลวต่อเนื่องเกิน 50 ครั้ง และสูงสุดถึง 3,272 ครั้ง
- การแก้ไขใช้เพียง 3 บรรทัด โดยเมื่อกำหนด
MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3
- ระบบจะปิดฟังก์ชันบีบอัดอัตโนมัติหลังล้มเหลวติดต่อกัน 3 ครั้ง
-
KAIROS: โหมดเอเจนต์อัตโนมัติที่ยังไม่เปิดเผย
- ทั่วทั้งโค้ดมีโหมดแบบ feature gate ชื่อ
KAIROS
- จาก
main.tsx คาดว่าเป็น ฟีเจอร์เอเจนต์อัตโนมัติ
- มีทั้งสกิล
/dream (การกลั่นหน่วยความจำตอนกลางคืน), GitHub webhook, background daemon และการรีเฟรชแบบ cron ทุก 5 นาที
- แม้การพัฒนายังไม่เสร็จ แต่ก็มีโครงสร้างพื้นฐานของ เอเจนต์เบื้องหลังที่ทำงานตลอดเวลา อยู่แล้ว
-
สิ่งที่ค้นพบอื่น ๆ
- Easter egg วัน April Fools' Day: ใน
buddy/companion.ts มี ระบบเพื่อนร่วมทางสไตล์ Tamagotchi
- มีสิ่งมีชีวิต 18 ชนิด พร้อมความหายาก, ค่าสถานะแบบ RPG และเวอร์ชัน ‘shiny’ ที่มีโอกาส 1%
- กำหนดด้วย PRNG ตาม user ID และใช้การเข้ารหัสสตริงเพื่อหลบการตรวจสอบตอนบิลด์
- เอนจินเรนเดอร์เทอร์มินัล (
ink/screen.ts, ink/optimizer.ts)
- ใช้บัฟเฟอร์ ASCII แบบ
Int32Array, เมทาดาทาสไตล์ bitmask และแคชที่ เพิ่มประสิทธิภาพได้ 50 เท่า
- การตรวจสอบความปลอดภัย (
bashSecurity.ts) มี 23 ขั้นตอน
- เช่น บล็อกคำสั่ง built-in ของ Zsh, ป้องกันการเลี่ยงด้วย
=curl, และบล็อกการแทรก Unicode zero-width กับ null byte
- เป็นกรณีที่พบได้ยากของ threat model ที่ออกแบบมาสำหรับ Zsh โดยเฉพาะ
- การจัดการ prompt cache (
promptCacheBreakDetection.ts)
- ติดตามเวกเตอร์ความเสียหายของแคช 14 แบบ และใช้ ‘sticky latch’ เพื่อคงแคชไว้ระหว่างการสลับโหมด
- มีคอมเมนต์
DANGEROUS_uncachedSystemPromptSection()
- สะท้อน ปรัชญาการออกแบบที่เน้นลดต้นทุนโทเคน
- ตัวประสานงานหลายเอเจนต์ (
coordinatorMode.ts)
- ใช้อัลกอริทึม orchestration ที่อิง prompt ไม่ใช่โค้ด
- มีแนวทางอย่าง “ห้ามอนุมัติงานที่อ่อน”, “ห้ามมอบหมายงานโดยไม่เข้าใจ”
- ยังมี ปัญหาด้านคุณภาพโค้ด
print.ts ยาว 5,594 บรรทัด และมีฟังก์ชันเดียวที่ยาวถึง 3,167 บรรทัด
- ใช้ Axios สำหรับคำขอ HTTP ซึ่งมาในช่วงเวลาใกล้เคียงกับเหตุ npm เวอร์ชันอันตรายล่าสุด
-
ความหมายและผลกระทบ
- ต่างจาก SDK แบบเปิดของ Google Gemini CLI หรือ OpenAI Codex
- การรั่วไหลครั้งนี้คือกรณีที่ โครงสร้างภายในทั้งหมดของผลิตภัณฑ์หลักของ Anthropic ถูกเปิดเผย
- ความเสียหายที่ใหญ่ที่สุดอาจไม่ใช่ตัวโค้ด แต่เป็น การเปิดเผย Feature Flag และโรดแมป
- ทั้ง KAIROS และ Anti-distillation เป็น ฟีเจอร์เชิงกลยุทธ์ที่ถูกเปิดเผยต่อคู่แข่ง
- ปีที่แล้ว Anthropic เข้าซื้อ Bun และ Claude Code ทำงานอยู่บน Bun
- จึงมีความเป็นไปได้ว่าบั๊ก source map ของ Bun (
oven-sh/bun#28001) คือสาเหตุ
- ซึ่งเป็นปัญหาที่ source map ถูกเปิดเผยแม้ในโหมด production และยังไม่ได้รับการแก้ไข
- สุดท้ายแล้ว Anthropic จึงกลายเป็นกรณีที่ เครื่องมือในสายงานของตนเองทำให้ผลิตภัณฑ์ของตนเองรั่วไหล
- ดังที่มีปฏิกิริยาบน Twitter ว่า “ปล่อยโค้ดที่ AI เขียน แล้วโค้ดก็รั่วออกมาด้วยบั๊กที่ AI สร้างขึ้น” ซึ่งเป็นเหตุการณ์ที่ชวนประชดประชัน
3 ความคิดเห็น
ฉลาดนะ
ถ้าเป็นปัญหาที่เกิดขึ้นตอนคอมมิตด้วย AI ล่ะ?!
ความคิดเห็นจาก Hacker News
มีคอมเมนต์จำนวนมากที่เข้าใจผิดว่า “Undercover mode” เป็นแค่ฟังก์ชันสำหรับซ่อนข้อมูลภายใน
แต่ในพรอมป์ต์จริงระบุชัดว่าในข้อความ commit หรือคำอธิบาย PR ห้ามใส่คำว่า “Claude Code” หรือพูดถึง AI โดยเด็ดขาด
จึงดูเหมือนเป็นฟังก์ชันที่ทำตัวให้เหมือนมนุษย์และปกปิดตัวตน
น่ากังวลเป็นพิเศษตรงที่คำสั่งลักษณะนี้ถูกใช้เมื่อมีส่วนร่วมกับ public repository
ลิงก์โค้ดที่เกี่ยวข้อง
ประวัติ Git มีไว้ติดตามความรับผิดชอบและความเป็นเจ้าของ ไม่ใช่ที่สำหรับบันทึกรายชื่อเครื่องมือที่ใช้
ถ้าอย่างนั้นฉันก็ควรใส่ linter หรือ IDE เป็นผู้ร่วมเขียนใน PR ของตัวเองด้วยหรือเปล่า
เอาจริง ๆ มันเป็นปัญหาที่แก้ได้ด้วย บรรทัดตั้งค่าเล็ก ๆ แค่บรรทัดเดียว
สุดท้ายแล้วความรับผิดชอบก็ยังตกอยู่กับนักพัฒนาที่เป็นมนุษย์
อาจจะตั้งให้กว้างโดยตั้งใจเพื่อให้บรรลุเป้าหมาย หรืออาจมีเจตนาแฝงก็ได้
แต่แทนที่จะฟันธงว่า “กำลังแกล้งเป็นมนุษย์” การตีความตามข้อความที่ว่า “ให้เขียนเหมือนนักพัฒนามนุษย์” น่าจะสมเหตุสมผลกว่า
ยิ่งตั้งข้อสงสัย ก็ควร วิจารณ์บนฐานข้อเท็จจริง เพื่อให้โน้มน้าวได้มากกว่า
พูดตรง ๆ คือไม่อยากได้อะไรแบบนั้น
ช่วงนี้มีทั้ง กรณี Mythos รั่ว ต่อเนื่องและการที่โค้ดทั้งชุดของ Claude Code ถูกเปิดเผย ทำให้ปัญหาเรื่องความน่าเชื่อถือหนักขึ้น
แต่ละเหตุการณ์อาจน่าสนใจในตัวเอง แต่พอเกิดติด ๆ กันก็ดูเหมือนเป็นรูปแบบ
สุดท้ายจึงกลายเป็นคำถามว่า “เราจะยังไว้ใจให้เครื่องมือแบบนี้อยู่ใน codebase ได้หรือไม่”
ฉันก็ยังจ่าย 140 ดอลลาร์เพื่อใช้ CC อยู่
กลับกัน ฉันมองว่าการรั่วไหลแบบนี้ สอดคล้องกับโมเดลด้านจริยธรรมของ Anthropic — เหมือนเป็นบริษัทที่เติบโตจากความล้มเหลว
มูลค่าที่แท้จริงไม่ได้อยู่ที่โค้ด แต่อยู่ที่ สิทธิ์เข้าถึงโมเดล
codebase อาจจะเละเทะ แต่การเข้าถึงโมเดลแบบสมัครสมาชิกก็ยังน่าสนใจอยู่ เลยยังใช้ Claude Code ทุกวัน
ทั้งในเว็บ UI และ CC มีข้อผิดพลาดจุกจิกเยอะมาก
การควบคุม tmux ก็ไม่ทำงานตามเอกสาร และยังจัดการ session ไม่ได้
ถึงอย่างนั้นก็ยังเป็นผลิตภัณฑ์ที่ชอบอยู่ดี — เปิ่น ๆ แต่มีเสน่ห์
fork ของ anthropics/claude-code บน GitHub ของฉันถูกลบด้วย DMCA
ทั้งที่ไม่ได้มีโค้ดที่รั่วอยู่ด้วย แต่ทั้งเครือข่ายทั้งหมด (8.1K repositories) กลับถูกบล็อกทีเดียว
ลิงก์ประกาศ DMCA
การที่ Anthropic คิดว่าตัวเองจะลั่นระฆังแล้วหยุดมันได้ทีหลังเป็นเรื่อง โง่มาก
ของที่รั่วไปแล้วเอากลับคืนไม่ได้ งั้นสู้เอาเรื่องนี้ไปใส่ใน product roadmap เลยน่าจะสมจริงกว่า
รู้สึกแปลกใจที่สิ่งซึ่งเมื่อก่อนหลายบริษัทเรียกว่า ความลับทางการค้า กลับถูกใส่ไว้ในซอร์สตรง ๆ
ถึงขั้นมีคอมเมนต์อธิบายบริบทธุรกิจอยู่ด้วย
เช่น ข้อมูลปฏิบัติการอย่าง “สิ้นเปลือง API calls วันละ 250,000 ครั้ง” ก็ถูกเปิดเผยตรง ๆ
เพราะตัวเอเจนต์อ่านคอมเมนต์ได้ดีกว่าเอกสาร จึงใช้เหมือนความทรงจำระยะยาวได้
เพียงแต่ Anthropic ไม่คิดว่ามันจะรั่วออกมา
ถ้ามองจากฝั่งคู่แข่ง ข้อมูลพวกนี้แทบไม่มีค่าอะไรเลย
อย่างไรก็คงไม่ได้คาดว่าจะมีการรั่วไหลอยู่แล้ว
ไม่จำเป็นต้องไปอธิบายในเอกสารแยกอีกต่อไป
ฟีเจอร์บางส่วนถูกล็อกไว้ภายใต้เงื่อนไข
process.env.USER_TYPE === 'ant'หมายความว่า คำสั่งสำหรับพนักงาน Anthropic เข้มงวดและตรงไปตรงมามากกว่า — เป็นโครงสร้างที่น่าสนใจ
ในเมื่อโพสต์ต้นฉบับบน HN ก็ได้รับความนิยมอยู่แล้ว ก็สงสัยว่าจำเป็นไหมที่จะต้องมีบล็อกสรุปคอมเมนต์ HN แยกออกมาอีก
ฉันยังคิดว่า Claude Code ยอดเยี่ยมอยู่
ไม่มีเหตุผลให้ย้ายไป OpenAI หรือ Gemini
ชื่อ “Undercover mode” กับข้อความว่า “ห้ามพูดถึง Claude Code” ฟังดูน่าขนลุก แต่ถ้าไปดูโค้ดจริงจะเห็นว่าจุดประสงค์หลักคือการปกป้องชื่อโค้ดภายในมากกว่า
ลิงก์ซอร์ส
รู้สึกว่าเป็นความเปลี่ยนแปลงที่สำคัญพอสมควร
ไอเดียเรื่อง “Anti-distillation: ฝังเครื่องมือปลอมไว้เพื่อกันการก็อปปี้” น่าสนใจดี
ถ้าคู่แข่งจากจีนเอาเครื่องมือปลอมนั้นไปทำจริงขึ้นมาคงหักมุมดี
ทุกวันนี้ฉันคิดว่าจุดแข่งขันไม่ได้อยู่ที่โมเดล แต่อยู่ที่ ข้อมูลและต้นทุน inference
อยากคุยเรื่องนี้ต่อเหมือนกัน
เพราะบริษัทพวกนี้ก็สร้างอาณาจักรขึ้นมาจากการเอาข้อมูลคนอื่นไปใช้เหมือนกัน
คุณภาพแทบไม่ขยับ และความต่างที่แท้จริงอยู่ที่ ความสมบูรณ์ของ tooling
การรั่วครั้งนี้อาจทำให้ช่องว่างนั้นแคบลงได้
ทุกวันนี้กระแส distillation เองก็เริ่มลดลงแล้ว
ขอนำเสนอ คู่มือแบบภาพ ที่ฉันทำเอง
ccunpacked.dev