Tóm tắt nhanh
- Ngày 31/3/2026, Chaofan Shou phát hiện toàn bộ mã nguồn của Claude Code bị lộ qua file sourcemap trong gói npm
- File sourcemap chứa toàn bộ mã nguồn gốc trong trường
sourcesContent - Lỗi xảy ra do không thêm
*.mapvào.npmignorehoặc không tắt tính năng sourcemap khi build production - Mã nguồn đã được cộng đồng backup lên GitHub để lưu trữ

Sourcemap là gì và tại sao nó chứa toàn bộ mã nguồn?
Sourcemap là file JSON dùng để ánh xạ giữa mã đã được rút gọn (minify/bundle) và mã nguồn gốc. Khi xuất bản gói JavaScript/TypeScript lên npm, quy trình build thường tự động tạo ra các file .map này. Mục đích là khi xảy ra lỗi trong môi trường production, stack trace có thể chỉ đúng dòng code trong file gốc thay vì dòng code bị rút gọn.
Tuy nhiên, ít người biết rằng: file sourcemap chứa toàn bộ mã nguồn gốc. Cấu trúc cơ bản của một file .map như sau:
{
"version": 3,
"sources": ["../src/main.tsx", "../src/tools/BashTool.ts", "..."],
"sourcesContent": ["// TOÀN BỘ mã nguồn gốc của từng file", "..."],
"mappings": "AAAA sausages mởm..."
}Trường sourcesContent chứa tất cả mọi thứ: toàn bộ file, comment, hằng số nội bộ, system prompt… Tất cả đều được nhúng dưới dạng chuỗi JSON và npm sẽ phục vụ công khai cho bất kỳ ai chạy lệnh npm pack hoặc xem nội dung gói.

Sự cố lộ mã nguồn xảy ra như thế nào?
Đây là một lỗi khá phổ biến trong cộng đồng lập trình. Khi xuất bản gói lên npm, nhiều người quên thêm *.map vào file .npmignore hoặc không tắt sourcemap trong bản build production. Với Bun bundler (công cụ mà Claude Code sử dụng), sourcemap được tạo mặc định trừ khi bạn chủ động tắt nó.
Điều đáng chú ý là Anthropic có hệ thống “Undercover Mode” được thiết kế để ngăn chặn thông tin nội bộ bị lộ. Họ thậm chí xây dựng cơ chế riêng để tránh AI vô tình tiết lộ codename nội bộ trong git commit… nhưng lại vô tình để lộ toàn bộ mã nguồn qua file .map.

Claude Code là gì?
Claude Code là công cụ dòng lệnh (CLI) chính thức của Anthropic hỗ trợ lập trình bằng Claude — đồng thời là AI coding agent phổ biến nhất hiện nay.
Nếu bạn chưa quen với các công cụ AI hỗ trợ lập trình, có thể tham khảo bài viết MCP (Model Context Protocol) để hiểu cách các AI agent kết nối với hệ thống. Hoặc đọc thêm về Agentic AI trong thiết kế website để nắm xu hướng hiện tại.
Bên ngoài, đây là một công cụ CLI khá mượt mà và dễ sử dụng. Bên trong lại là một hệ thống rất phức tạp:
- Điểm vào chính
main.tsxnặng 785KB - Trình render terminal tùy chỉnh dựa trên React
- Hơn 40 công cụ (tools) được tích hợp
- Hệ thống điều phối đa agent
- Engine “dream” dùng để củng cố bộ nhớ
Trong các phần sau, mình sẽ chia sẻ chi tiết hơn về những phát hiện thú vị từ mã nguồn, bao gồm hệ thống Buddy Tamagotchi, chế độ KAIROS always-on, Dream system và nhiều tính năng chưa công bố [1].
Những thông tin đã bị lộ?
Qua việc phân tích mã nguồn bị lộ, cộng đồng đã khám phá được nhiều nội dung thú vị:
Buddy — Tamagotchi trong Terminal
Claude Code có một hệ thống thú cưng đồng hành hoàn chỉnh kiểu Tamagotchi mang tên “Buddy” với các tính năng:
- Hệ thống gacha xác định (deterministic) gồm 18 loài, có cả phiên bản shiny
- 5 chỉ số: DEBUGGING, PATIENCE, CHAOS, WISDOM, SNARK
- Sprite ASCII art với nhiều khung hình động
- Mô tả “Soul” do Claude tự viết khi Buddy lần đầu tiên được tạo ra

KAIROS — “Always-On Claude”
Đây là chế độ hoàn toàn mới mang tên KAIROS — một trợ lý Claude liên tục hoạt động, không cần chờ người dùng nhập lệnh. Nó chủ động theo dõi, ghi log và thực hiện hành động khi phát hiện điều thú vị. Chế độ này được ẩn sau các feature flag PROACTIVE/KAIROS và chưa xuất hiện trong phiên bản công khai.

ULTRAPLAN — Lập kế hoạch từ xa trong 30 phút
Claude Code có khả năng chuyển giao nhiệm vụ lập kế hoạch phức tạp sang môi trường Cloud Container Runtime (CCR) chạy mô hình Opus 4.6, cho phép suy nghĩ tối đa 30 phút trước khi trả kết quả để người dùng duyệt qua trình duyệt.
“Dream” System — Claude mơ
Đây là engine củng cố bộ nhớ hoạt động như một subagent riêng biệt. Nó thực hiện quá trình “dream” mỗi 24 giờ sau khi có ít nhất 5 phiên làm việc. Hệ thống gồm 4 giai đoạn: Orient → Gather Recent Signal → Consolidate → Prune and Index.
Bài học rút ra
Bảo mật là việc khó. Nhưng việc cấu hình .npmignore dường như còn khó hơn :P
Đây không phải lần đầu và chắc chắn cũng không phải lần cuối. Lỗi thường lặp lại ở việc quên thêm *.map vào .npmignore hoặc không tắt sourcemap khi build production.
Điều đáng suy ngẫm là chính Anthropic — một trong những công ty hàng đầu về an ninh AI — lại mắc phải lỗi bảo mật cơ bản như vậy. Điều này nhắc nhở rằng ngay cả những tổ chức rất chú trọng đến bảo mật cũng có thể bỏ sót những vấn đề tưởng chừng đơn giản.
Trong phần tiếp theo, mình sẽ phân tích sâu hơn về cấu trúc multi-agent, Undercover Mode, cùng các mô hình sắp ra mắt như Capybara, Opus 4.7, Sonnet 4.8. Đừng bỏ lỡ!
Nếu bạn muốn tìm hiểu chi tiết hơn về các tính năng nội bộ như Multi-Agent Orchestration, Undercover Mode và các mô hình sắp ra mắt, hãy xem bài: Phân Tích Chi Tiết Source Code Claude Code Bị Leak.
Nguồn tham khảo
Các câu hỏi thường gặp
Claude Code là gì?
Claude Code là công cụ dòng lệnh (CLI) chính thức của Anthropic, giúp lập trình viên sử dụng Claude AI ngay trong terminal. Đây là một trong những AI coding agent phổ biến nhất hiện nay.
Sourcemap là gì?
Sourcemap là file JSON dùng để kết nối giữa mã đã được rút gọn và mã nguồn gốc. Nó giúp debug dễ dàng hơn nhưng lại chứa toàn bộ mã nguồn trong trường sourcesContent.
Sự cố lộ mã nguồn xảy ra như thế nào?
Sự cố xảy ra vì gói npm không loại trừ file sourcemap (.map) khi xuất bản. Người phát triển quên thêm *.map vào .npmignore hoặc không tắt việc tạo sourcemap trong bản build production.
Buddy trong Claude Code là gì?
Buddy là hệ thống thú cưng đồng hành kiểu Tamagotchi trong Claude Code, bao gồm 18 loài, hệ thống gacha, các chỉ số, sprite ASCII art và mô tả “Soul” do Claude tự viết khi Buddy được tạo ra.
KAIROS là gì?
KAIROS là chế độ “always-on” của Claude Code – một trợ lý liên tục hoạt động, chủ động theo dõi và thực hiện hành động khi phát hiện điều thú vị, thay vì chỉ chờ người dùng nhập lệnh.
Làm sao để tránh lộ sourcemap?
Để tránh lộ sourcemap, hãy thêm *.map vào file .npmignore hoặc cấu hình bundler tắt sourcemap khi build production. Với Bun, bạn có thể dùng các tùy chọn để loại trừ sourcemap khỏi bản build production.
