Mở đầu: mười mod, ba mod sống sót
Mod Claude Code là các hàm TypeScript nằm trong plugin, có thể vẽ lại giao diện của Claude Code hoặc viết lại những gì nó làm. Chỉ trong một ngày sau khi ra mắt hồi đầu tháng Mười, ba video giới thiệu riêng biệt đã bảo các developer cài mười mod. Hai trong số các creator thừa nhận trước ống kính rằng một vài mod chẳng tiết kiệm được gì, và không ai đo dù chỉ một mod. Bài test này thì đo: cả mười mod đang hot đều chạy trên một tuần làm việc thật, với một con số cho overhead, một con số cho mức tiết kiệm, và một phán quyết giữ hay xóa. Kết quả nói trước: chỉ ba trong mười mod xứng đáng có mặt trên máy của một developer đi làm, và một trong số đó âm thầm tiêu token ở mỗi câu trả lời.
Làn sóng mod và những gì chúng tôi chạy
Định nghĩa của chính Anthropic gói trong một hơi thở: mod là một hàm hook vào một sự kiện, và nó có thể chạy trước sự kiện đó, sau, hoặc thay cho nó. Một sự kiện là một tool call, một prompt vừa gửi, hoặc một phần giao diện đang được vẽ. Mod là TypeScript thuần, đóng gói trong một plugin mà bạn cài như mọi plugin khác.
Tweet ra mắt vượt bốn triệu lượt xem trong khoảng một ngày, với hai chục nghìn lượt like và số bookmark nhiều hơn tổng số reply và repost cộng lại. Hai ngày sau khi ra mắt, một catalog cộng đồng đã quét hơn một nghìn mod công khai trên hàng trăm repository.
Bộ benchmark cho bài test này là một tuần làm việc thật: 85 session trên bốn dự án, gần 900 prompt, và chỉ dưới 6.000 tool call. Mọi mod đều qua phần audit của validator, liệt kê những gì nó hook và những gì nó có thể chạm tới, và mọi mod đều chạy cùng một tác vụ so với baseline sạch, trên bản phát hành hiện tại, trên cùng một máy.
Kết quả chia đôi rõ rệt: sáu trong mười mod không tốn gì đo được lúc runtime, ba mod tốn thời gian thật hoặc token thật, và một mod phá vỡ lời hứa duy nhất mà nó đưa ra.
Nhóm trang trí, đã đo
Sáu mod yên lặng nằm trong mức nhiễu của đường truyền. Goal meter, repo heatmap, flight recorder, model router, session bookmarks và auto handoff đều nằm giữa mức tiết kiệm một phần tư giây và mức tốn thêm một phần năm giây, trên một tác vụ baseline khoảng bốn giây.
| Mod | Chênh lệch runtime | Ghi chú |
|---|---|---|
| Goal meter | trong mức nhiễu | khung trang trí |
| Repo heatmap | trong mức nhiễu | làm sáng các file khi chúng được đọc |
| Flight recorder | trong mức nhiễu | timeline trực tiếp của lượt chạy |
| Model router | trong mức nhiễu | có lời với subagent, xem phán quyết |
| Session bookmarks | trong mức nhiễu | phạm vi quyền hạn rộng |
| Auto handoff | ~70 ms lúc rảnh | ghi một handoff khi chạm ngưỡng context |
Trông chúng rất đẹp, và không có gì hỏng: mọi lần chạy của mọi cấu hình đều hoàn thành đúng tác vụ. Ở chế độ headless thì chúng chẳng tốn gì, vì không có gì để vẽ; trong terminal, các khung này vẽ lại tới ba mươi lần mỗi giây, nên cái giá thật của nhóm trang trí là sự chú ý chứ không phải token.
Bản audit của validator là chỗ câu chuyện hết vui. Mod bookmarks có thể gọi model, khởi chạy tiến trình trên máy bạn và ghi file, đồng thời đọc các đường dẫn cấu hình của bạn từ biến môi trường. Không điều nào bị giấu và không điều nào độc hại, nhưng đó là quá nhiều quyền cho một cái bookmark. Bốn mod bị loại ở đây: goal meter, heatmap và flight recorder vì là đồ trang trí với lợi ích đo được bằng không, còn mod bookmarks vì nó đòi nhiều hơn những gì nó mang lại.
Mod chủ lực tính phí bạn mỗi lượt
Suggestion engine là mod mà video nào cũng demo đầu tiên: câu trả lời kết thúc, ba gợi ý prompt hiện phía trên ô soạn, bạn bấm một con số và bản nháp tự điền. Cơ chế này do chính tác giả của nó ghi lại: khi lượt của bạn hoàn tất, nó fork session để xin một model các gợi ý đó, và bản fork dùng chung prompt cache của session, nên chi phí khoảng một câu trả lời ngắn. Các bài giới thiệu không bao giờ nhắc đến dòng đó.
Đo trên bench, đó là khoảng 250 token output thêm cho mỗi câu trả lời đủ điều kiện và gần ba giây thời gian chờ thêm, và một câu trả lời đủ điều kiện gần như là mọi câu trả lời: bất kỳ câu nào dài hơn khoảng tám mươi ký tự. Bản fork cũng không có cổng chặn theo bề mặt. Gợi ý chỉ được vẽ trong terminal, nhưng bản fork vẫn chạy ở mọi nơi, kể cả các lần chạy headless khi chẳng có gì để vẽ.
| Mod | Chi phí đo được | Khi nào chạy |
|---|---|---|
| Suggestion engine | ~250 token output + ~2,9 s mỗi câu trả lời đủ điều kiện | mọi câu trả lời dài hơn ~80 ký tự, kể cả headless |
| Cache keeper | ~1,5 s mỗi lượt, cộng các lệnh gọi model ở chế độ warming | mỗi lượt, warming suốt nhiều giờ |
Cache keeper cùng dạng: khoảng một giây rưỡi mỗi lượt, với chế độ warming tiêu các lệnh gọi model nhỏ suốt nhiều giờ để ngăn prompt cache của bạn nguội. Với gói subscription, cửa sổ cache vốn đã là một giờ, nên bạn đang trả tiền cho các lần ping để giải quyết một vấn đề mà gói đã giải quyết gần hết. Cả hai đều là thiết kế trung thực với chi phí được ghi rõ, cả hai đều là khoản thuế đánh vào mỗi lượt mà các danh sách cài đặt không bao giờ định giá, và cả hai đều bị gỡ khỏi máy.
Mod hay hook, cùng một việc
Claude Code vốn đã có hook: một shell script trong settings chạy trên cùng các sự kiện. Tài liệu trả lời câu hỏi chọn cái nào trong một dòng của bảng: mod dành cho giao diện và việc viết lại sự kiện; hook dành cho việc chặn, cho phép hoặc ghi log bằng một script bạn đã có sẵn.
Khác biệt đo được là việc sinh tiến trình. Một hook trong settings khởi động một tiến trình mới ở mỗi tool call. Đo trên máy này, một shell hook không làm gì tốn khoảng 8 ms và một hook khởi động Node tốn khoảng 43 ms, ở mỗi lần gọi, trước cả khi script làm bất cứ việc gì. Trên 5.993 tool call của tuần bench, đó là hơn bốn phút chỉ để khởi động interpreter. Mod không trả khoản nào trong đó: handler của nó chạy ngay trong tiến trình của engine, và log của engine cho thấy bước chuyển ổn định trong khoảng một mili giây.
| Handler | Chi phí mỗi lần gọi | Một tuần 5.993 lần gọi |
|---|---|---|
| Shell hook (no-op) | ~8 ms | ~48 s |
| Node hook (no-op) | ~43 ms | ~4,3 phút |
| Mod (trong tiến trình) | ~1 ms | ~6 s |
Báo cáo di chuyển thật duy nhất ngoài đời nói đúng điều này: hai mươi bảy shell hook gộp lại thành năm mod, và việc sinh tiến trình ở mỗi lần gọi biến mất cùng chúng. Quy tắc còn lại sau bài test: giao diện hoặc viết lại sự kiện thì dùng mod; chặn, cho phép hoặc ghi log bằng một script bạn tin tưởng thì dùng hook, vì chi phí sinh tiến trình chỉ đáng kể ở hàng nghìn lần gọi; kiến thức bạn cứ phải lặp lại thì dùng skill. Một hook bạn đã đọc thắng một mod bạn chưa đọc.
Guard chẳng làm gì cả
Mod an toàn đơn giản nhất có thể là một guard theo dõi mọi lệnh shell, và cái này được viết để crash. Claude Code được yêu cầu tạo một file đánh dấu; guard bị throw; lệnh vẫn chạy và file vẫn xuất hiện. Đó không phải bug mà là mặc định đã được ghi trong tài liệu: khi một hook bị throw, hết thời gian, hoặc trả về sai dạng, Claude Code bỏ qua nó và đi tiếp. Một phần trang trí hỏng không nên làm sập session, nhưng guard hỏng thì fail open, âm thầm, chỉ với một dòng trong log debug mà không ai đọc.
Cách sửa là một catch handler trả về deny. Chính guard crash đó, cộng thêm catch, từ chối lệnh và nêu tên lỗi. Một dòng quyết định guard của bạn fail open hay fail closed, tài liệu có sẵn đúng pattern này, và gần như không ai cài nó.
Một nhóm cộng đồng đã chạy lại các trường hợp trên bản phát hành hiện tại và đánh giá bằng các file đánh dấu thay vì bằng những gì model nói. Catch pattern fail closed ba lần trên ba lần chạy, và vẫn còn một đường đi hỏng âm thầm: một deny được trả về sau khi lệnh gọi đã được chuyển tiếp thì không chặn được tool. File vẫn xuất hiện cả ba lần trên ba lần trong khi model được báo rằng việc ghi đã thất bại.
Báo cáo thực tế đã gọi tên vấn đề này đã chạy một guard suốt nhiều ngày mà nó được bật, được nạp, và chẳng làm gì, vì một cờ cũ đã tắt nó ngầm bên dưới: ba chip trạng thái xanh trên một bộ đếm kẹt ở số không. Sự im lặng trông y hệt sự khỏe mạnh.
Collision guard giành được lượt giữ đầu tiên. Nó giải quyết một vấn đề có thật, hai cuộc chat đang mở cùng sửa một file, và cách nó hỏng thì ồn ào: nó hỏi trong một hộp thoại và không bao giờ âm thầm cho qua. Nó tốn khoảng nửa giây ở các lần sửa và không thêm gì vào prompt. Hãy cài nó, và vẫn nên thêm catch handler cho nó.
Bạn trao gì khi dán một mod vào
Anthropic nói thẳng ngay ngày ra mắt: mod chạy với quyền truy cập vào máy của bạn giống hệt Claude Code. Chúng không có sandbox; hãy cài chúng như cách bạn cài bất kỳ đoạn code nào trên máy mình. Cụ thể, một mod có thể hành động trên máy bạn với tư cách chính bạn: đọc môi trường và settings của bạn, nơi chứa các API key; thấy mọi prompt và mọi tool call; viết lại chúng; duyệt một tool call trước khi bạn kịp được hỏi; và tiêu usage của gói bạn vào các lệnh gọi model của riêng nó.
Hai cái bẫy làm khó cả những người dùng cẩn thận. Quy tắc permission quản các tool call của Claude, không quản các lệnh gọi của chính mod: chặn Claude đọc một file env, mod vẫn có thể đọc thẳng file đó bằng quyền truy cập file của riêng nó, hoặc khởi chạy một chương trình làm việc đó. Chính sách mạng cũng có cùng kẽ hở: tắt lưu lượng web thì các lệnh fetch của mod bị từ chối, nhưng một tiến trình con do mod khởi chạy vẫn ra mạng với quyền đầy đủ. Có một mod guard dựng sẵn nạp trước mọi thứ, nhưng chỉ trên các máy được quản lý và cho các seat Team hoặc Enterprise; một seat đơn lẻ trên gói subscription cá nhân thì không có gì trong số đó.
Không điều nào là lý thuyết. Một người dùng đã công bố một proof of concept vài ngày sau ra mắt: một mod có nút bấm khởi chạy một chương trình và ghi vào thư mục home, cài từ catalog mà không có cảnh báo nào, và quan điểm của anh ấy đứng vững: catalog trông giống một app store, gợi ý rằng có một khâu kiểm duyệt trong khi thực tế không có. Một bug hook riêng biệt đã phá vỡ cơ chế cô lập subagent trong một ngày; maintainer gọi đó là một sai lầm lớn và sửa ở bản phát hành kế tiếp.
Kết quả quét của chính catalog trên hơn một nghìn mod công khai: hơn bốn trăm mod khởi chạy tiến trình trên máy chủ, gần bốn trăm mod đọc file, và hơn ba trăm mod thấy mọi tool call. Lời cảnh báo của catalog là khung nhìn đúng: đó là một phạm vi quyền hạn, không phải một phán quyết; một công cụ theo dõi PR thì phải chạy git. Kỷ luật này tốn hai phút: chạy validator trước khi bật bất cứ thứ gì, và biết các lối thoát: safe mode cho một session, một setting để dừng mọi hook đã cài vĩnh viễn.
Giữ ba mod, xóa bảy mod
Trong mười mod, ba mod xứng đáng có chỗ: collision guard, model router và auto handoff.
| Mod | Phán quyết | Con số đằng sau |
|---|---|---|
| Collision guard | giữ | ~0,5 s ở các lần sửa, hỏng thì ồn ào, không thêm gì vào prompt |
| Model router | giữ | subagent tính phí trên model rẻ, bằng một phần ba giá |
| Auto handoff | giữ | 70 ms không làm gì, một lần ghi handoff khi chạm ngưỡng context |
| Suggestion engine | xóa | ~250 token output + ~2,9 s ở mọi câu trả lời đủ điều kiện |
| Cache keeper | xóa | ~1,5 s mỗi lượt, các ping warming trên cửa sổ cache 1 giờ |
| Recording mode | xóa | che màn hình nhưng không che ổ đĩa |
| Goal meter | xóa | trang trí, lợi ích đo được bằng không |
| Repo heatmap | xóa | trang trí, lợi ích đo được bằng không |
| Flight recorder | xóa | trang trí, lợi ích đo được bằng không |
| Session bookmarks | xóa | phạm vi quyền hạn vượt xa việc của nó |
Model router có biên lai: một session trên model lớn sinh ra một subagent, và bảng usage của chính lần chạy cho thấy subagent được tính phí trên model rẻ, bằng một phần ba giá cho cùng một việc nhỏ. Với những tuần nặng subagent, đó là tiền thật. Auto handoff không tốn gì cho đến lúc nó có lời: bảy mươi mili giây overhead lúc rảnh, và khi qua một ngưỡng context nó ghi handoff cho lần khởi động nguội, đúng một lần. Một trong các creator của làn sóng này thừa nhận nút handoff thủ công thật ra không tiết kiệm thời gian; thành một lần ghi tự động theo ngưỡng thì nó thực sự tiết kiệm.
Kỷ luật còn lại sau bài test: đọc bản audit của validator trước khi bật bất cứ thứ gì, cho mọi guard một catch handler để nó fail closed, và quay demo trong safe mode thay vì tin vào một mod che màn hình. Giới hạn là có thật: một tuần, một máy, một workload, ba lần chạy cho mỗi điểm trên model nhỏ. Ba mod của bạn có thể khác, nhưng giờ bạn đã biết cách tìm ra chúng.
AIDive