Install
openclaw skills install skeallAgent Skills (SKILL.md) builder, auditor, and improver for cross-platform LLM agents. Use for "skeall", "build a skill", "create skill", "improve skill", "audit skill", "skill review", or any SKILL.md question. Follows agentskills.io standard.
openclaw skills install skeallCreate, improve, and audit Agent Skills following the Agent Skills open standard. This skill encodes lessons from real-world skill development and cross-platform compatibility testing.
/skeall --create # Interview, then scaffold new skill
/skeall --improve <path> # Analyze and improve existing skill
/skeall --scan <path> # Audit only, no changes (report)
/skeall --scan . # Audit skill in current directory
/skeall --scan-all # Batch scan all skills in ~/.claude/skills/
/skeall --scan-all <dir> # Batch scan all skills in custom directory
/skeall --healthcheck <path> # Runtime check single skill (orphans, deps, env, URLs)
/skeall --healthcheck-all # Runtime check all skills in ~/.openclaw/skills/
/skeall --healthcheck-all <dir> # Runtime check all skills in custom directory
Interview the user (ask questions 1-4 always, then 5-6 if user hasn't already specified complexity or distribution scope):
$ARGUMENTS or $ARGUMENTS[N] in body)Generate the skill structure:
{skill-name}/
├── SKILL.md # Core instructions (always loaded)
├── references/ # On-demand detail files
│ ├── {topic-1}.md
│ └── {topic-2}.md
└── README.md # GitHub-facing (optional)
Write SKILL.md following these rules:
name and description (see Frontmatter section)Show the generated SKILL.md to user for review.
Run --scan on the generated skill. If any HIGH issues found, fix them before delivering.
Next step: "Optimize with reprompter?" (optional, see Reprompter section). Then suggest installing the skill.
Next step: "Run --scan to verify?" or "Commit changes?"
| Problem | Fix |
|---|---|
| Body over 5000 tokens | Move detail sections to references/ |
| Redundant content | Single source of truth, reference elsewhere |
| Persona-based framing | Switch to instruction-based framing |
| Missing trigger phrases | Add keywords to description field |
| Platform-specific patterns | Replace with universal formatting |
| No progressive disclosure | Add routing table to reference files |
## Skill Audit: {skill-name}
Score: X.X/10
STRUCTURE
[PASS] S1 -- SKILL.md exists at root
[FAIL] S3 HIGH -- name does not match directory name
[WARN] S5 MEDIUM -- No references/ directory
FRONTMATTER
[PASS] F2 -- Trigger phrases present
[FAIL] F1 HIGH -- description over 1024 characters
CONTENT
[WARN] C5 MEDIUM -- Persona-based framing ("You are an expert")
[FAIL] C3 HIGH -- Same content repeated 3 times (lines 45, 120, 280)
LLM-FRIENDLINESS
[WARN] L4 MEDIUM -- Unicode arrows instead of markdown tables
[PASS] L3 -- No emoji markers in headings
SECURITY
[PASS] SEC1 -- No XML angle brackets in frontmatter
[PASS] SEC3 -- No hardcoded secrets
CROSS-PLATFORM
[PASS] X1 -- No {baseDir} placeholders
[WARN] X4 LOW -- No multi-platform install instructions in README
Total: 3 HIGH | 4 MEDIUM | 1 LOW
Next step after scan: "Want me to fix these? Run /skeall --improve <path>"
| Input | Response |
|---|---|
| No SKILL.md found at path | "No skill found at {path}. Did you mean --create?" |
Empty directory for --scan-all | "No skills found in {dir}. Skills must have a SKILL.md file." |
| Invalid YAML frontmatter | Report the parse error, suggest fixing frontmatter first |
--improve on non-skill file | "Not a valid skill (no YAML frontmatter). Try --create instead." |
--improve on a skill scoring 10/10 | "Scan found 0 issues (score 10.0/10). No changes needed. Consider running trigger and functional tests." |
---
name: my-skill-name
description: What this skill does and when to use it. Include trigger phrases.
---
name rules:
processing-pdfs, testing-code) or descriptive noun (pdf-processor)description rules:
<, >) in any frontmatter value (injection risk)These are silently ignored by platforms that do not support them:
license: MIT # For distributed skills
compatibility: "Node.js 18+" # Environment requirements (max 500 chars)
metadata: # Arbitrary key-value (author, version)
author: your-name
version: 1.0.0
allowed-tools: "Bash Read" # Experimental: space-delimited tool list
user-invocable: true # Show in /slash menu (false = hidden but still callable)
disable-model-invocation: true # Block Claude from auto-loading this skill
argument-hint: "<file-path>" # Hint shown in /skill autocomplete
model: opus # Override model for this skill
context: fork # Run in isolated subagent
agent: general-purpose # Subagent type: general-purpose, Explore, Plan, or custom
hooks: # Skill-scoped lifecycle hooks
PostToolCall: "validate.sh"
skill-name/
├── SKILL.md # REQUIRED -- core instructions
├── references/ # OPTIONAL -- on-demand detail files
├── scripts/ # OPTIONAL -- executable scripts
├── assets/ # OPTIONAL -- static assets (images, etc.)
└── README.md # OPTIONAL -- GitHub-facing docs
| Level | Content | Budget |
|---|---|---|
| Metadata (YAML frontmatter) | name + description | ~100 tokens |
| Instructions (SKILL.md body) | Always loaded by LLM | < 5000 tokens |
| References (each file) | Loaded on demand | ~2000-3000 tokens each |
Estimation: ~1.5 tokens per word for mixed code+prose markdown.
Progressive disclosure: SKILL.md body should handle ~70% of user requests. Reference files handle the remaining 30% (detailed workflows, complete examples, edge cases).
| Guideline | Limit |
|---|---|
| SKILL.md body | Under 500 lines (under 300 for complex skills with many references) |
| Reference files | No hard limit, but keep each under 700 lines. Add TOC at top if over 100 lines |
| ID | Severity | Check |
|---|---|---|
| S1 | HIGH | SKILL.md exists at skill root |
| S2 | HIGH | YAML frontmatter present with --- delimiters |
| S3 | HIGH | name field present and valid (lowercase, hyphens, 1-64 chars, no consecutive hyphens) |
| S4 | HIGH | description field present |
| S5 | MEDIUM | References in references/ not loose at root |
| S6 | LOW | README.md present for GitHub-hosted skills |
| S7 | LOW | No unnecessary files (node_modules, .DS_Store, etc.) |
| S8 | HIGH | name field matches parent directory name |
| ID | Severity | Check |
|---|---|---|
| F1 | HIGH | Description under 1024 characters (spec limit) |
| F1b | LOW | Description under 300 characters (recommended for matching) |
| F2 | HIGH | Description includes trigger phrases |
| F3 | MEDIUM | Description starts with noun phrase, not "Expert in" |
| F4 | MEDIUM | Name 1-64 characters, no leading/trailing/consecutive hyphens |
| F5 | LOW | No platform-specific fields (keeps universal compatibility) |
| ID | Severity | Check |
|---|---|---|
| C1 | HIGH | Body under 500 lines |
| C2 | HIGH | Estimated tokens under 5000 |
| C3 | HIGH | No content repeated in SKILL.md body (controlled repetition across reference files is acceptable) |
| C4 | HIGH | Code examples use correct, verified patterns |
| C5 | MEDIUM | Instruction-based framing (not "You are an expert") |
| C6 | MEDIUM | Has routing table to reference files (if references/ exists) |
| C7 | MEDIUM | Troubleshooting section present (for skills with code blocks or CLI commands) |
| C8 | LOW | No deprecated content at the top (wastes prime token space) |
| C9 | MEDIUM | Routing table completeness: if references/ exists, SKILL.md lists ALL files in references/ |
| C10 | MEDIUM | Internal count consistency: claimed counts ("34 patterns", "8 phases") match actual content |
| C11 | MEDIUM | No stale references: documented APIs, functions, model names exist in actual source |
| ID | Severity | Check |
|---|---|---|
| L1 | HIGH | Tables for structured data (not bullet lists with arrows) |
| L2 | HIGH | Imperative instructions ("Do X", not "You should consider X") |
| L3 | MEDIUM | No emoji in headings or structural markers (frontmatter metadata values are data, not markers) |
| L4 | MEDIUM | No Unicode arrows or special characters for data flow |
| L5 | MEDIUM | Consistent heading hierarchy (no skipped levels). Ignore headings inside fenced code blocks |
| L6 | MEDIUM | Code blocks have language tags |
| L7 | LOW | Sentence case headings (not Title Case) |
| L8 | LOW | No nested blockquotes (some LLMs parse poorly) |
| ID | Severity | Check |
|---|---|---|
| SEC1 | HIGH | No XML angle brackets (<, >) in frontmatter values |
| SEC2 | HIGH | Name does not contain reserved words ("anthropic", "claude") |
| SEC3 | HIGH | No hardcoded API keys, tokens, or secrets in any skill file |
| SEC4 | MEDIUM | Scripts include error handling (not bare commands) |
| SEC5 | HIGH | No credential patterns (Bearer eyJ, sk-/pk- prefixes, api_key=/token= + long strings). Ignore $ENV_VAR refs and YOUR_KEY_HERE placeholders |
| ID | Severity | Check |
|---|---|---|
| X1 | HIGH | No {baseDir} placeholders (breaks non-OpenClaw platforms) |
| X2 | MEDIUM | Relative paths from SKILL.md to references/ |
| X3 | MEDIUM | Internal links use standard markdown [text](path) |
| X4 | LOW | README has multi-platform install paths |
| ID | Severity | Check |
|---|---|---|
| R1 | HIGH | Orphan skill: not referenced in any config or skill registry |
| R2 | HIGH | Duplicate name: same name field found in 2+ skill directories |
| R3 | HIGH | Trigger collision: description phrases 80%+ overlap with another skill |
| R4 | HIGH | Broken dependency: file referenced in SKILL.md does not exist |
| R5 | MEDIUM | Stale endpoint: URL in curl command returns 404 or times out |
| R6 | MEDIUM | Missing env var: $VAR reference found but not set in environment |
| R7 | LOW | Token cost: estimated tokens loaded per session |
These patterns come from real cross-platform testing. Apply them when creating or improving skills.
providerAddress, // 1st: wallet addressmetadata values is data and acceptableGood description pattern:
{Product/Tool name} guide for {primary use case}. Covers {feature list}.
Use this skill for {trigger phrases separated by commas}.
Example:
description: 0G Compute Network guide for decentralized AI inference and fine-tuning.
Covers chatbots, image generation, speech-to-text, SDK integration, CLI commands.
Use this skill for any 0G compute, 0G AI, or decentralized GPU question.
Only name and description in frontmatter. Standard markdown body. Relative paths. No platform-specific syntax.
| Platform | User-wide | Project |
|---|---|---|
| Claude Code | ~/.claude/skills/{name}/ | .claude/skills/{name}/ |
| OpenAI Codex | ~/.agents/skills/{name}/ | .agents/skills/{name}/ |
| OpenClaw | ~/.openclaw/skills/{name}/ | .openclaw/skills/{name}/ |
| Cursor | Standard SKILL.md discovery | Project skills dir |
| Gemini CLI | Standard SKILL.md discovery | Project skills dir |
OpenAI Codex adds an optional openai.yaml file alongside SKILL.md for platform metadata (interface, policy, dependencies). SKILL.md itself stays cross-platform. See references/advanced-patterns.md for details.
| Pattern | Problem | Fix |
|---|---|---|
{baseDir} placeholder | Only OpenClaw resolves it | Use relative paths |
| Platform-specific instructions | Confuse other LLMs | Keep instructions generic |
| Hardcoded paths | Break on other OS/platforms | Use relative from SKILL.md |
Estimate: wc -w SKILL.md × 1.5 (prose) or × 1.7 (code-heavy files).
| Skill complexity | SKILL.md target | References needed? |
|---|---|---|
| Simple (one topic, few commands) | 100-200 lines / ~1500 tokens | No |
| Medium (multiple features, some code) | 200-350 lines / ~3000 tokens | 1-2 files |
| Complex (multi-domain, many patterns) | 300-450 lines / ~4500 tokens | 3-5 files |
| Severity | Meaning | Action |
|---|---|---|
| HIGH | Breaks spec compliance or causes LLM confusion | Must fix |
| MEDIUM | Reduces quality or cross-platform compatibility | Should fix |
| LOW | Minor improvement opportunity | Fix if time permits |
Scan every skill in a directory at once. Useful for auditing your entire skill collection.
~/.claude/skills/).## Batch Skill Audit
| Skill | Score | HIGH | MEDIUM | LOW | Status |
|-------|-------|------|--------|-----|--------|
| seo-optimizer | 5/10 | 3 | 2 | 1 | NEEDS WORK |
| reprompter | 6/10 | 2 | 3 | 0 | NEEDS WORK |
| blogger | 7/10 | 1 | 1 | 2 | NEEDS WORK |
| humanizer-enhanced | 8/10 | 0 | 2 | 1 | PASS |
Total: 4 skills scanned
PASS: 1 | NEEDS WORK: 3
Top issues across all skills:
1. [HIGH] C2 reprompter: Body exceeds 5000 tokens (est. 8,200)
2. [HIGH] C3 seo-optimizer: Content repeated 4 times
3. [HIGH] C5 reprompter: Persona-based framing
PASS threshold: Score 7+ with zero HIGH issues.
Next step: "Start with the lowest-scoring skill. Run /skeall --improve <path> on it."
Checks whether a skill actually works at runtime — beyond what static scan can catch. Run static scan (Mode 3) first and fix HIGH issues before health check.
--healthcheck-all: cross-check all skills for duplicates (R2) and trigger collisions (R3).[FAIL] for HIGH issues (must fix), [WARN] for MEDIUM (runtime risk), [INFO] for LOW.For detection algorithms, report format examples, and batch output format, see references/healthcheck.md.
Formula: Score = max(0, 10 - (HIGHs x 1.5) - min(MEDIUMs x 0.5, 3) - min(LOWs x 0.2, 1))
PASS threshold: Score 7+ AND zero HIGH issues. For detailed examples, see references/scoring.md.
| Issue | Fix |
|---|---|
| Token estimate seems wrong | Use wc -w and multiply by 1.5 (prose) or 1.7 (code-heavy) |
| Scan reports FAIL but skill works fine | HIGHs indicate spec/LLM issues, not runtime bugs. Fix them anyway. |
| Batch scan misses a skill | Skill directory must contain SKILL.md at root |
| Two fixes contradict each other | Flag the conflict, ask user to choose (e.g., "shorten file" vs "add section") |
| Score 7+ but still NEEDS WORK | Check for HIGH issues. Any HIGH = NEEDS WORK regardless of score |
For detailed checklists and examples, see:
Testing your skill: After create or improve, test trigger activation (3-5 keyword variants), functional output, and negative (unrelated queries stay quiet). See references/testing.md.
MCP integration: Use fully qualified tool names (mcp__server__tool_name). Document required MCP servers and provide fallbacks. See references/advanced-patterns.md.
Reprompter integration (optional): After --create interview, say "reprompter optimize" to score description variants and validate code examples. Works standalone if reprompter is not installed.