Vì sao skill của bạn không được gọi
Mình từng cài rất nhiều skill mà phần lớn chưa từng được gọi. Nhìn kỹ mấy skill im lặng đó thì đa số không phải do routing hỏng. Có cái là một pack marketing được link vào một project chẳng liên quan gì tới nó. Có cái là pack chuyên ngành đã có sẵn một skill làm cửa vào chạy tốt, nên router có hoàn hảo cỡ nào cũng không gọi tới. Thứ mình suýt build để sửa, một router phân loại mọi request rồi load đúng skill, lại là cách sửa sai. Vấn đề của mình nằm ở chuyện cài sai chỗ, chứ không phải ở routing. Đây là những gì mình tìm thêm được và những gì thật sự có ích.
Có khi "không được gọi" mới là đúng
description của skill quyết định khi nào nó được load. cloudflare/security-audit-skill tự mô tả là dành cho câu hỏi bảo mật, review, audit và pen test. Đưa cho nó một yêu cầu làm feature bình thường ("thêm retry có backoff cho hàm này, viết test trước") thì không khớp gì cả nên nó không load, và đó đúng là điều bạn muốn. Skill deep research trong jordan-gibbs/hyperresearch cũng không trigger với cùng task code đó. Bạn đọc description trước rồi hẵng gọi đó là bug.
Những lý do skill không tự load
- Nó bị tắt với model. ayghri/i-have-adhd đặt
disable-model-invocation: true, nên nó chỉ load khi bạn gõ/i-have-adhd. Session không tự bật nó lên được. - Tool của nó cần hook đi kèm. ashlr-plugin có 54 tool. Load mà không có hook thì Haiku không gọi cái nào, vậy mà phần definition vẫn làm session đắt hơn 50%.
- Chỉ nhớ lại khi được yêu cầu. claude-mem đưa cho session mới một danh sách tiêu đề ghi chú. Khi bị chặn dùng tool, Claude trả lời UNKNOWN. Khi được dùng tool search của claude-mem thì nó tìm ra câu trả lời, nhưng tốn thêm hai lượt.
- Description không tới được tool của bạn. Nếu setup của bạn có thứ gì đọc description để gợi ý skill, kiểm tra xem nó có đọc hết không. Cái của mình bỏ mọi dòng sau dòng đầu trong description YAML dạng folded, làm 15 skill bị câm.
Những cách mình đã test mà không ăn thua
Nhờ model đề xuất trigger phrase mới. Mình cho Claude gợi ý phrase từ những prompt chưa khớp, rồi chạy lại từng phrase trên prompt thật, chỉ giữ cái nào bắt được ít nhất hai prompt. Mình chạy ba lần. Không phrase nào qua được.
Dán nguyên skill vào prompt. Trong một tháng (10/9 tới 9/10/2026), một hook dán toàn bộ nội dung của một skill mỗi khi phrase của nó khớp. Nó gần như không chạy, và hầu như lần nào chạy cũng là sai: thông báo của task chạy nền, một prompt của pipeline tình cờ có chữ đó, một câu chỉ nhắc tên. Lần thật duy nhất là lúc mình hỏi tại sao skill không được dùng, tức là gõ sau khi chuyện đã lỡ rồi.
Cái gì thật sự sửa được
Lần lỡ đó đến từ các session của job chạy theo lịch, mấy session này chưa từng được giao skill. Đưa thẳng file skill cho các session đó là xong. Nên:
- Đếm số lần gọi từng skill trước khi build bất cứ thứ gì.
- Gỡ hoặc dời những pack không hợp với project đang chứa nó.
- Đọc description và xem nó có phủ những request bạn mong đợi không.
- Với run headless hay chạy theo lịch, ghi tên skill hoặc đưa file của nó vào prompt.
Có một paper đi tới cùng kết luận về routing này, nhưng từ hướng ngược lại. The Router Within thấy rằng load description của skill vào context là cách routing yếu nhất trong các cách họ so, và họ thắng nó bằng cách đọc hidden state của model. Cách đó cần truy cập vào bên trong model, mà API như của Claude thì không cho.
English