Desoul Review English

← Hướng dẫn

Những lỗi skill và hook hỏng mà không báo

Không lỗi skill hay hook nào dưới đây báo lỗi cả. Một rule bị bỏ qua, một bước check đáng lẽ fail lại pass, hoặc một hook trông như đã chặn mà thật ra không. Dưới đây là những lỗi mình tìm thấy, trong skill của người khác và trong cả bộ load skill của chính mình, kèm cách test.

Ba lỗi trong bộ load skill của mình

Mình có chạy một hook nhỏ, gợi ý skill khi prompt có một trong các trigger phrase của nó. Tháng 9/2026 mình đo lại thì ra ba lỗi.

Nó chỉ đọc dòng đầu của description dạng folded. Nhiều skill viết description thành một block YAML dạng folded:

description: >
  first line of the description
  second line, often where the trigger phrases are

Parser của mình giữ dòng đầu và bỏ hết phần còn lại. Mười lăm skill bị vứt âm thầm toàn bộ trigger phrase đã khai báo. Sửa parser xong thì độ phủ phrase lên từ 51% thành 57%, không cần sửa file skill nào. Nếu bạn có tool nào đọc description của skill, hãy test nó với một block folded.

Nó coi việc nhắc tên là một yêu cầu. Một câu chỉ nhắc tên skill cho có ("…applied to every workflow, like caveman or rtk") cũng làm skill đó chạy.

Giới hạn dung lượng bỏ qua skill mà không nói gì. Trong một thử nghiệm, hook dán nguyên nội dung skill vào prompt, tối đa 8.000 byte. Khi skill đó lớn từ 5.049 lên 8.678 byte, hook nhận về nội dung rỗng và lặng lẽ quay về chỉ in tên. Sáu trong 29 ngày thử nghiệm phải bỏ, vì không có gì ghi lại lần bỏ qua đó. Cách sửa là nâng giới hạn và ghi log mỗi lần bỏ qua.

Hook trông như xong rồi nhưng chưa

Sai exit code. Trong disler/claude-code-hooks-mastery, bước Stop check lẽ ra phải dừng session khi thiếu file plan lại in ra {"result": "block", …} rồi exit 1. Claude Code coi exit 1 là lỗi không chặn. Nó chỉ chặn khi có "decision": "block" với exit 0, hoặc khi exit 2. Nên bước check này chưa từng chặn được gì.

Bộ duyệt chỉ tin chữ đầu tiên. Cũng repo đó, bộ tự duyệt permission khi bật --auto-allow đã cho qua ls && rm -rf ~ và git status; git reset --hard HEAD~3, chỉ vì mỗi lệnh mở đầu bằng một lệnh an toàn.

Input hỏng là lỗi chứ không phải chặn. Trong emaarco/agento-patronum, input không phải JSON làm jq lỗi và hook exit 5. Claude Code hiểu đó là hook lỗi và cho lệnh đi qua. Repo giờ nằm ở emaarco/hogwarts, hook là một phần của Protego Totalum. Khi đọc lại hồi tháng 11, README đã sửa thành chỉ chặn printenv, nên chỗ lệch đó đã hết (env và set vẫn đi qua), còn hook vẫn không kiểm tra input không phải JSON. Ngày 14/11/2026 mình chạy hook hiện tại với các lần gọi giả trong một sandbox macOS (không có mạng, chỉ ghi vào folder tạm, HOME giả). Văn bản thường, event bị cụt, một mảng trần và một chuỗi trần đều exit 5, input rỗng thì exit 0, nên không cái nào bị chặn. Log của nó ghi sáu dòng cho mỗi lần chặn vì jq chạy không có -c: cả 21 lần chặn trong lần chạy đó đều ghi sáu dòng, nên wc -l trên file log ra số sai.

Skill tự mâu thuẫn

Lệnh create-plan trong ParadevAI/Paradev ghi "Do not implement until approved", rồi lại ghi "do not prompt the user… Resolve ambiguities autonomously". Nó còn nói cách đặt tên YYYYMMDD-HHmm "sorts most recent to oldest", trong khi format này sắp cũ nhất lên trước. Model làm theo cả hai nửa thì chỉ còn cách đoán.

Script fail mà vẫn exit 0

xbtlin/ai-berkshire có kèm mấy script Python để check số cho các skill research của nó. Một market cap lệch 11% thì in cảnh báo đỏ nhưng vẫn exit 0, nên agent chỉ biết khi chịu đọc text. Rule viết ra là đánh dấu khi hai nguồn lệch nhau hơn 1%, còn default của tool là 2%, nên lệch 1,5% vẫn in "all consistent". Bộ audit report thì duyệt cho một con số chỉ check với một nguồn duy nhất, nguồn nói 200 còn report ghi 100.

Skill gắn cứng vào folder của người khác

Mấy skill dọn code trong devdotfast/whiteboard gọi tên một folder trong app của tác giả và những component chỉ có ở đó. Chạy ở chỗ khác thì diff chúng review trống trơn và chúng không báo gì. Ý tưởng thì mang đi được, là search codebase xem đã có sẵn chưa trước khi viết cái mới. Còn file thì không.

Nên test những gì

Các tool được nhắc tới trong bài