npx skills add ...
npx skills add rheinmir/setup --skill skill-provenance
Ghi và kiểm provenance (nguồn + sha256 checksum) cho skill — dùng khi 'cài skill từ ngoài', 'skill này từ đâu', 'audit nguồn skill', 'checksum skill', 'supply-chain skill', phát hiện skill bị sửa lén; bổ trợ orca-sec-scans. Chạy fdk/tools/skill-provenance.py. /skill-provenance
npx skills add rheinmir/setup --skill skill-provenance
Sổ nguồn gốc + toàn vẹn cho từng skill. orca-sec-scans quét vuln/secret trong NỘI DUNG;
skill này trả lời hai câu hỏi khác của chuỗi cung ứng (supply-chain): skill từ đâu tới
và có bị sửa lén sau khi cài không. Store là fdk/skills.provenance.json (nguồn +
ngày ghi + sha256 mọi file trong skills/<name>/). Verify bằng cách tính lại checksum và
so với sổ — lệch = MODIFIED, có skill trên đĩa mà chưa ghi sổ = UNTRACKED.
fdk/skills.provenance.json (nguồn + ngày ghi + sha256 mọi file) và lệnh verify tính lại checksum.record để chốt nguồn + checksum.check.orca-sec-scans); không tự đoán nguồn skill.skills/<name>/ (file trên đĩa) → sha256 mỗi file → so với sổ fdk/skills.provenance.json → OK | MODIFIED (lệch) | UNTRACKED (trên đĩa chưa ghi sổ) | MISSING (trong sổ, không còn trên đĩa). record = ghi/ghi đè mục sổ; check = đọc so.
| Field | Required? | Ý nghĩa | |
|---|---|---|---|
| In | <name> hoặc --all | có với record | skill cần ghi sổ |
| In | --source | có với record | URL, repo#ref thật, hoặc local-authored |
| In | --ci | không | check trả exit 1 khi có MODIFIED/UNTRACKED |
| Out | mục sổ trong fdk/skills.provenance.json | sau record | nguồn + ngày ghi + sha256 |
| Out | trạng thái từng skill | sau check | OK / MODIFIED / UNTRACKED / MISSING + exit code |
--source phải là URL/ref thật hoặc local-authored; provenance sai còn tệ hơn không có.orca-sec-scans — skill này lo provenance/toàn vẹn, không quét vuln/secret nội dung; dùng cả hai.check --ci coi MISSING (skill đã gỡ) là không-phải-lỗi; chỉ MODIFIED/UNTRACKED mới chặn.fdk/skills.provenance.json là file curated — commit cùng thay đổi skill, đừng để drift.--source đoán.check --ci thấy MODIFIED/UNTRACKED → failed (exit 1); sửa có chủ đích → re-record, sửa lạ → điều tra.| Step | Type | Inputs | Action | Outputs/exit | Failure/next |
|---|---|---|---|---|---|
| W01 | effect | sổ trống | Backfill một lần record --all --source local-authored | sổ đầy đủ | sổ đã có → skip |
| W02 | effect | skill mới + nguồn thật | record <name> --source … | mục sổ | nguồn không rõ → clarify |
| W03 | deterministic | sổ + đĩa | check (tất cả hoặc một skill) | OK/MODIFIED/UNTRACKED/MISSING | — |
| W04 | deterministic | sổ + đĩa | Gate CI check --ci | exit 0/1 | MODIFIED/UNTRACKED → exit 1 |
| W05 | effect | skill đã cố ý sửa | re-record với nguồn cũ | checksum mới | không re-record → W04 đỏ |
Chi tiết từng bước (nguồn chân lý cho W01–W05):
repo#ref, hoặc local-authored):
.github/workflows/skills-sync.yml):
record <name> --source <nguồn cũ> để cập nhật checksum — nếu không, check --ci sẽ báo MODIFIED (đúng: mọi thay đổi phải qua sổ).| ID | Kind | Guard | Hành vi | Skip / failure | Rejoin |
|---|---|---|---|---|---|
| B01 | conditional_required | sổ trống | backfill W01 | sổ đã có → skip | W03 |
| B02 | recovery | check báo MODIFIED | sửa có chủ đích → W05 re-record; không rõ ai sửa → điều tra như sửa lạ | — | W03 |
| B03 | recovery | check báo UNTRACKED | skill mới hợp lệ → W02 record với nguồn thật | nguồn không rõ → clarify | W03 |
Hoàn toàn tất định: checksum + exit code của skill-provenance.py. Phần cần người: nguồn --source có thật không. Dừng khi check in toàn OK (MISSING chấp nhận).
https://github.com/acme/skills#v1.2 → python3 fdk/tools/skill-provenance.py record foo --source "https://github.com/acme/skills#v1.2" → check foo in OK.skills/foo/SKILL.md mà không re-record → check --ci in MODIFIED foo, exit 1; user hỏi "foo từ đâu" nhưng không ai biết → không ghi --source đoán, hỏi lại.