Xử lý lỗi / Skills

Agent không nhận skill: kiểm tra đường dẫn, tệp và runtime

“Đã cài nhưng không dùng được” có thể là lỗi nhận diện, lỗi chọn skill hoặc lỗi khi chạy công cụ. Xác định đang dừng ở bước nào sẽ giúp tránh cài lại nhiều lần mà vẫn giữ nguyên nguyên nhân.

Trong bài này

1. Ghi triệu chứng trước khi sửa

Ghi tên và phiên bản agent, thư mục đang mở, ID skill, cách cài, đường dẫn đích và thông báo lỗi nguyên văn. Dùng một skill để thử trước; thay nhiều thư mục hoặc cấu hình cùng lúc khiến khó biết thay đổi nào có tác dụng.

  • Không có trong danh sách: kiểm tra discovery và phạm vi.
  • Có trong danh sách nhưng agent bỏ qua: kiểm tra mô tả, tên gọi và chế độ invocation.
  • Agent đọc runbook rồi lỗi: kiểm tra helper, runtime, đầu vào và quyền.

2. Nếu skill không xuất hiện

  1. Đúng đường dẫn và máy: Codex hiện dùng .agents/skills; Claude Code dùng .claude/skills. Phạm vi cá nhân nằm dưới home tương ứng. Một skill trên laptop chưa chắc tồn tại trong container, SSH host hoặc phiên cloud.
  2. Đúng cấu trúc: cần skills/ten-skill/SKILL.md, không thêm một tầng thư mục giải nén ngoài ý muốn. Kiểm tra cả chữ hoa của SKILL.md trên hệ thống phân biệt hoa thường.
  3. Frontmatter hợp lệ: các dấu --- phải bao quanh metadata; name và description cần giá trị có nghĩa. Không sao chép cả dấu code fence Markdown vào tệp.
  4. Phạm vi phiên làm việc: mở đúng repository và thử một phiên mới nếu ứng dụng chưa cập nhật danh sách. Với monorepo, kiểm tra vị trí thư mục con theo tài liệu agent.
  5. Symlink còn nguồn: nếu cài bằng link, xác nhận clone VAS chưa bị di chuyển hoặc xóa. Một liên kết tồn tại vẫn có thể trỏ tới tệp đã mất.

Đoạn Python sau chỉ đọc đường dẫn. Thay ví dụ bằng tệp của bạn; False nghĩa là chưa thấy một tệp thường ở vị trí đó.

from pathlib import Path

skill = Path("/absolute/path/to/project/.agents/skills/webapp-testing/SKILL.md")
print("Resolved path:", skill.resolve())
print("Runbook exists:", skill.is_file())
print("Skill folder is a link:", skill.parent.is_symlink())

3. Nếu có skill nhưng agent không chọn

Thử gọi trực tiếp theo giao diện agent: Codex CLI/IDE hỗ trợ chọn skill bằng $ hoặc /skills; Claude Code có /ten-skill cho skill cho phép gọi trực tiếp. Sau đó đối chiếu tên và đường dẫn runbook mà agent đọc.

Nếu gọi trực tiếp được nhưng tự chọn không ổn, xem lại description: nó có nêu đúng tác vụ đang yêu cầu không? Trong Claude Code, kiểm tra thêm disable-model-invocation và user-invocable. Đừng suy ra quy tắc của một agent áp dụng giống hệt cho agent khác.

Nếu có nhiều bản trùng tên ở các phạm vi, xác định bản được nạp trước khi cập nhật hoặc gỡ. Tránh cài thêm một bản thứ ba để thử vận may.

4. Nếu đọc được runbook nhưng tác vụ lỗi

Đây thường là vấn đề môi trường thực thi. Một runbook có thể cần scripts/, references/ hoặc assets đi kèm. Chỉ copy SKILL.md có thể làm thiếu thành phần; kiểm tra tệp cụ thể được nhắc trong thông báo lỗi và inventory nguồn.

Phân biệt thiếu tệp với thiếu package, trình duyệt, Docker, tài khoản hay quyền mạng. Ví dụ, webapp-testing được nhận diện không có nghĩa Playwright và browser runtime đã sẵn sàng. Chỉ thiết lập phần còn thiếu sau khi thống nhất phạm vi và quyền.

./vas status phản ánh thông tin mà CLI quản lý, không kiểm tra thay cho discovery của agent. Nếu thiếu receipt hợp lệ, không tự sửa manifest để ép gỡ tệp. Kiểm tra cách cài và quyền sở hữu thư mục trước.

5. Xác minh từng thay đổi

Sau mỗi sửa đổi, lặp lại đúng thao tác thất bại ban đầu và ghi kết quả. Một báo cáo ngắn nên có mẫu sau; loại thông tin đăng nhập, token và nội dung riêng trước khi chia sẻ.

Agent / version:
Working directory and execution environment:
Skill ID and resolved SKILL.md path:
Installation method and scope:
Expected behavior:
Observed error:
One change attempted:
Result of repeating the original check:
Remaining blocker:

Với lỗi khó tái hiện, áp dụng systematic-debugging để giữ từng giả thuyết và bằng chứng. Xem thêm hướng dẫn riêng cho Codex và Claude Code.

Nguồn đối chiếu