Install
openclaw skills install @pmuhammadagus-byte/skill-validationValidate a skill folder against ClawHub publishing standards to ensure correct structure, metadata, triggers, content quality, security, and readiness for pu...
openclaw skills install @pmuhammadagus-byte/skill-validationSkill milik user: skill-validation. Mengikuti Skill Architecture Standard X∞ (wajib).
Menyediakan kemampuan skill-validation kepada agent saat relevan.
Aktif ketika user meminta hal yang cocok dengan deskripsi di atas. Negative trigger: di luar scope deskripsi.
Baca OS/ARCH/runtime sebelum bertindak. Termux Android ARM64 ≠ Ubuntu x86_64.
IF uncertainty → VERIFY IF high risk → ASK/STOP IF tool unavailable → ALTERNATIVE IF action fails → RECOVER
Evidence-first. Bedakan FAKTA vs HIPOTESIS. Confidence: CONFIRMED/LIKELY/POSSIBLE/UNKNOWN.
Ambil tindakan relevan, lalu VERIFY. Jangan klaim sukses sebelum diverifikasi.
Pilih tool berdasar kebutuhan+konteks. Jangan asal panggil semua tool.
Ingat hal relevan; abaikan noise. Retrieve saat dibutuhkan, update bila berubah.
ACTION → VERIFY → SUCCESS? Jika tidak: DIAGNOSE → RETRY/CHANGE STRATEGY.
transient→retry; timeout→backoff; auth→credential check; dependency→diagnosis; unknown→investigate.
NEVER log secret. REDACT API KEY/TOKEN/PASSWORD/SECRET sebelum simpan. PII: MINIMIZE→REDACT→HASH.
Self-eval: capai goal? terverifikasi? ada asumsi? ada gagal? Kirim ke Agent Evaluation Engine.
Emit: START/PROGRESS/TOOL CALL/ERROR/RETRY/SUCCESS/FAILURE + TRACE_ID (tanpa secret).
FULL→OPTIMIZED→LOW RESOURCE mode bila terbatas. Prioritas: TASK>SAFETY>RELIABILITY.
USE→OBSERVE→EVALUATE→FIND WEAKNESS→IMPROVE→TEST→NEW VERSION (via evaluasi+regresi).
Semver. Perubahan struktur = MAJOR. CHANGELOG wajib. CHANGELOG
description rusak (berisi teks changelog) diganti deskripsi trigger; Node 2 (PURPOSE) & Node 3 (METADATA) diisi; metadata.openclaw.version diset 2.0.0. Body domain dipertahankan.Tahu OS/ARCH/RUNTIME/versi/tool/API tersedia.
Trust hierarchy: OFFICIAL>PRIMARY>REPUTABLE>COMMUNITY>UNKNOWN. Tandai VERIFIED/LIKELY/UNCERTAIN/OUTDATED/CONFLICTING.
Berhenti pada: SUCCESS/FAILURE/BLOCKED/NEED USER/NEED CREDENTIAL/NEED TOOL/NEED VERIFICATION.
digraph when_to_use {
"Creating new skill?" [shape=diamond];
"Editing existing skill?" [shape=diamond];
"Deploying to ClawHub?" [shape=diamond];
"skill-validation" [shape=box];
"Skip" [shape=box];
"Creating new skill?" -> "skill-validation" [label="yes"];
"Creating new skill?" -> "Editing existing skill?" [label="no"];
"Editing existing skill?" -> "skill-validation" [label="yes"];
"Editing existing skill?" -> "Deploying to ClawHub?" [label="no"];
"Deploying to ClawHub?" -> "skill-validation" [label="yes"];
"Deploying to ClawHub?" -> "Skip" [label="no"];
}
SKILL.md exists — the only hard requirementscripts/, references/, assets/ — and each is linked from SKILL.md with clear when-to-read guidance_meta.json exists with correct slug, version, ownerId (for published skills)skill-card.md exists with description, risks, references (for published skills).clawhub/origin.json exists (for installed skills)--- delimiters both present (a missing opening --- silently breaks the whole skill)name — present; kebab-case or PascalCase; verb-first preferredslug — kebab-case, unique, matches folder nameversion — semver (x.y.z), bumped on every changedescription — trigger mechanism, not marketing copy: states what the skill does AND when to use it, with the nouns/keywords users actually type ("Use when...")changelog — describes this versionmetadata — single-line JSON object (parser limitation); clawdbot key preferred (clawdis/openclaw accepted as aliases)metadata.clawdbot.emoji — single emojimetadata.clawdbot.requires.bins — every CLI the skill calls (curl, jq, node...)metadata.clawdbot.requires.env — every env var the skill needs (API keys, URLs)metadata.clawdbot.os — supported OS arraymetadata.clawdbot.install — install specs when deps exist (kinds: brew / node / go / uv / download)user-invocable, disable-model-invocation, command-dispatchWhen to Use section with decision criteria or DOT diagramreferences/ and linked$VAR, never inlined values| Flag | Severity | Action |
|---|---|---|
Missing opening --- | 🔴 Critical | Frontmatter won't parse at all — fix delimiters |
| Folder name ≠ slug | 🔴 Critical | Rename folder to match slug |
| Skill < 500 chars | 🔴 Critical | Rewrite with full structure |
| Description without "Use when" triggers | 🔴 Critical | Skill will never activate — rewrite as trigger phrase |
No When to Use | 🔴 Critical | Agent will invoke randomly |
| Hardcoded URL/secret | 🔴 Critical | Replace with env var or config |
Escaped quotes (\") in code blocks | 🟡 High | File was shell-escaped during backup — unescape |
| Body > 500 lines, no references split | 🟡 High | Split into references/ per progressive disclosure |
| No examples | 🟡 High | Add Good vs Bad patterns |
| Mixed languages | 🟡 High | Add localization metadata |
| No error handling | 🟡 High | Add Red Flags section |
Declares no requires but calls curl/APIs | 🟡 High | Declare bins/env in metadata |
| Version in title ≠ version in frontmatter | 🟡 High | Sync them; keep history section |
| No skill-card.md | 🟢 Medium | Create from template |
| Level | Criteria |
|---|---|
| Minimal | name, trigger description, usage steps |
| Professional | +slug, version, DOT diagram, rationalization table, examples, declared requires |
| Enterprise | +homepage, changelog, install specs, skill-card, origin, reference split, dependency chain |
# Check file structure
ls -la skills/<skill-name>/
# Verify frontmatter delimiters (must print exactly 2)
grep -c '^---$' skills/<skill-name>/SKILL.md
# Verify folder name matches slug
grep '^slug:' skills/<skill-name>/SKILL.md
# Check metadata is single-line JSON
grep '^metadata:' skills/<skill-name>/SKILL.md | python3 -c "import sys,json; json.loads(sys.stdin.read().split(':',1)[1].strip())"
# Check for secrets
grep -ri "api_key\|token\|secret\|password\|ghp_\|sk-" skills/<skill-name>/
# Check for hardcoded URLs
grep -ri "http://\|https://" skills/<skill-name>/ | grep -v "localhost\|127.0.0.1\|github.com\|clawhub.ai"
# Check for escaped quotes (backup corruption)
grep -n '\\"' skills/<skill-name>/SKILL.md
# Body line budget (should be ≤ ~500)
wc -l skills/<skill-name>/SKILL.md
User needs to do X in situation Y.
</Good>
<Bad>
```markdown
---
name: "my-skill"
description: "Does stuff"
---
# My Skill
## Usage
1. Do thing
2. Do other thing
3. Done
Too minimal. No triggers, no validation gates, no examples, no metadata.