Skip to main content

Skill Creation

Prerequisites

  • Menu access: AI Studio > Workspace > Skill Creation.
  • Permissions: Read-Write access for create, import, edit, publish, list, delist, delete.
  • Data scope: Resource domain in the current environment.
  • Import format: Packages must follow OpenClaw conventions (per platform requirements).
  • Review rules: Required for listing/delisting—see Review Rules and Review Queue.

Overview

The Skill Creation tab manages self-built Skills—reusable task capabilities for Agents and Sage AI.

Workspace lists only Skills you created or imported. Built-in Skills are under Resources > Skill > Public.

Two creation paths:

MethodEntryDescription
Skill CreationPrimary buttonDescribe requirements in chat; Sage AI generates a Skill package
Import SkillImport buttonUpload an existing OpenClaw Skill package

The editor uses a split layout: Skill files tree on the left, debug preview on the right. Published Skills appear under Resources > Skill > My.

image-20260821163952429


List quick classification and tags

Workspace provides status quick filters (AND with the search box): All, Draft, Published, Pending review, Listed, Delisted, Rejected. Each shows a count (including 0). Default is All. Switching a filter shows only matching cards, sorted by update time descending.

Tags are required on create/edit so Resources can filter by tags after listing.


Value

  • Conversation-first creation: Describe ops scenarios in natural language.
  • Import compatibility: Bring existing OpenClaw Skills into AI Studio.
  • File-level editing: Inspect and adjust package files after generation.
  • Sandbox debugging: Validate behavior before publish.
  • Listable for teams: Request Public listing after publish.

Use Cases

Generate an alert notification Skill

  • Approach: Skill Creation → describe P1 alert + log query + WeCom notify → review file tree → debug preview → Publish.

Import an existing Skill package

  • Approach: Import Skill → upload .skill/archive → edit → debug → publish.

Ship a new version

  • Approach: Open Skill → note unpublished draft banner if any → edit → Publish (not just save) with semver increment.

Listing and reapply after rejection

  • PublishedRequest listing → if Rejected, read comments → revise → publish → reapply; Withdraw while pending.

Operations

Skill Creation (conversation)

  1. Click Skill Creation.
  2. Guide text: describe needs; Sage AI generates a full Skill package; refine via chat or left-side file edits.
  3. Optional prompt chips for quick starters.
  4. After generation, Skill files tree appears; select files to view/edit.
  5. Debug preview on the right (requires generated files).
  6. Save draft / Publish.

image-20260724161257720

Import Skill

  1. Click Import Skill and upload a local Skill package (.zip / .skill).
  2. The platform validates the package against the Skill Validation Spec below (ZIP legitimacy, skill-vetter security review, and in-package file checks). If validation fails, the reason is shown so you can fix and re-upload.
  3. After a successful parse, review the file tree and metadata.
  4. Verify in debug preview; edit files if needed.
  5. Save draft or Publish.

Note: Import validation requires at least one available LLM in the model list. If no model is configured, add one in Model Management before importing.

企业微信截图_70a362e1-5a65-4f82-b0ec-346e0d6b1244

Edit existing Skill

  • Unpublished draft banner: “You have unpublished changes; last published at vx.x.x”.
  • Edit files; debug; save draft or publish.

Save draft

  • Saves editor/chat state; no formal version.

Publish

  1. Content security validation;
  2. Version + change notes *;
  3. Version rules:
    • Required;
    • Semver format (e.g. v1.0.0);
    • Must not duplicate history;
    • Must not be lower than highest historical version.
  4. Status Published → Resources > My.

Version management

  • History view; only Publish creates versions.

Listing / delisting / withdraw

ActionFrom stateNotes
Request listingPublishedUses last published version; publish drafts first
WithdrawPending reviewCancel active review
Request delistingListedNotes required
After rejectionRejectedEdit → publish → reapply

Delete

  • Removes from Workspace and Resources; breaks Agents/Automation references; listed Skills affect all users who added them.

Skill Files and Debugging

  • Generated/imported Skills show as a file tree; click to view content.
  • Debug preview accepts test prompts; some flows require files to exist first.
  • Chat may indicate when Skill files are ready for editing.

Skill Validation Spec

When you Import Skill in Workspace, or upload an OpenClaw-compliant .zip / .skill package, the platform validates it against the rules below. If validation fails, the failure reason is shown so you can fix the package and upload again.

1. ZIP Legitimacy Checks

CheckDescription
Empty upload packageBlocked. Package contains no bytes.
Outer file name suffixBlocked. Upload file name must end with .zip or .skill (outer package name only).
Outer package sizeBlocked. Default max 10MB; config skill.import.max_package_mb.
Cannot open ZIPBlocked. Not a valid ZIP file (BadZipFile).
No files in ZIPBlocked. Archive contains no file entries.
Encrypted ZIP entriesBlocked. Encrypted compressed entries are not supported.
Absolute pathBlocked. Member paths must not start with / or be absolute.
Path contains ..Blocked. Path segments must not include ...
Directory depth exceededBlocked. Default max 5 levels after ZIP root; Nacos max_dir_depth.
Single file too largeBlocked. Default max uncompressed size per file 10MB; Nacos max_single_file_mb.
Compression ratio too high (ZIP bomb)Blocked. Default max file_size/compress_size ratio 50×; Nacos max_compress_ratio.
Total uncompressed size exceededBlocked. Default max sum of uncompressed sizes 100MB; Nacos max_total_unzip_mb.

2. skill-vetter Checks

Skill-Vetter uses an LLM and the built-in skill-vetter protocol to perform static security review of the upload. The gateway parses only VERDICT / NOTES from the final report body and allows install only when normalized to “installable”. Review is offline and static—it does not execute scripts inside the package.

2.1 Prerequisites and Runtime Conditions

CheckDescription
No available LLM for tenantBlocked.
Vetter call timeoutBlocked. Default timeout 120 seconds per review.
Rate limit / context overflow with no fallback modelBlocked. May auto-switch to other LLMs and retry; fails when exhausted.
Other vetter call exceptionsBlocked. Non-retryable errors fail immediately.
Per-file prompt size limitNot blocked. About 24,000 characters per file; excess is truncated and marked.
Total prompt character budgetNot blocked. About 120,000 characters for the whole package; excess files marked as omitted.
Ignored directories/filesNot scanned. Skips __pycache__ / .git / .svn / node_modules / .DS_Store / .pyc, etc.

2.2 REJECT-level Red Flags (DO NOT INSTALL)

CheckDescription
curl/wget to unknown URLBlocked. Includes downloads from unclear addresses.
Sending data to external serversBlocked. Data exfiltration behavior.
Requesting credentials / token / API keyBlocked. Inducing secret collection.
Reading /.ssh, /.aws, ~/.config without clear reasonBlocked. Sensitive directory access.
Accessing MEMORY.md / USER.md / SOUL.md / IDENTITY.mdBlocked. Agent private memory files.
Base64-decoding arbitrary contentBlocked. Common obfuscation / payload technique.
eval() / exec() with external inputBlocked. Arbitrary code execution.
Modifying system files outside workspaceBlocked. Out-of-bound writes.
Installing undeclared dependenciesBlocked. Covert install behavior.
Network requests using IP instead of domainBlocked. Suspicious C2 pattern.
Obfuscated code (minified / encoded to hide intent)Blocked.
Requesting sudo / privilege escalationBlocked.
Accessing browser cookies / sessionsBlocked.
Touching credential filesBlocked. e.g. id_rsa, .env, docker/config.json, kubeconfig.

2.3 Extended High-risk Command Patterns (Full-package Scan)

CheckDescription
Destructive file operationsBlocked. rm -rf, del /f /s /q, Remove-Item -Recurse -Force, shred, etc.
Disk / filesystem operationsBlocked. dd if=, mkfs, fdisk, diskpart, format, etc.
Privilege escalation / persistenceBlocked. sudo, runas, crontab, schtasks, systemctl enable, reg add, etc.
Arbitrary code executionBlocked. eval, exec, bash -c, powershell -Command, python -c (external input), etc.
Download and executeBlocked. curl|sh, wget|sh, Invoke-WebRequest|iex, certutil download, etc.
Credential / secret harvestingBlocked. Reading ~/.ssh/*, id_rsa, known_hosts, .env, etc.
Exfiltration channelsBlocked. nc / ncat / socat, scp / rsync to unknown hosts, anomalous webhooks, etc.
Firewall / network tamperingBlocked. iptables, ufw, netsh advfirewall, DNS/route tampering, etc.
Multiple similar commandsBlocked. Any REJECT hit rejects the package; all occurrences must be scanned.

2.4 Source, Permissions, and OAuth Assessment

CheckDescription
Source trust assessmentNot blocked. Reviews source/author/repo/update time; ClawdHub official ≠ automatically safe.
Documented OAuth / SaaSNot blocked. Docs ask users to create their own GOOGLE_ / AZURE_ credentials with least privilege → usually INSTALL WITH CAUTION.
Hardcoded secrets / inducing token pasteBlocked. Requires writing secrets into the repo or sending to untrusted endpoints.
Broad OAuth solely because authorization is neededNot blocked. Broad OAuth such as Gmail/Drive defaults to MEDIUM–HIGH; clear docs → CAUTION rather than direct reject.
curl|sh combined with OAuth docsBlocked. Documented OAuth plus download-and-execute chain is high risk.

3. In-ZIP File Checks

Before extracting to disk, entries inside the ZIP are validated by rules (not LLM).

3.1 SKILL.md Checks

CheckDescription
File name caseBlocked. Must be exactly SKILL.md; skill.md and similar do not match.
Main manifest requiredBlocked. Must be at ZIP root SKILL.md, or top-level/SKILL.md under a single top-level directory; deeper SKILL.md cannot be the main manifest.
Multiple SKILL.mdUses the shallowest path as the main manifest (same depth: lexicographic path order); not reported as a separate error.
Flat package structureWhen root has SKILL.md, multiple top-level items (e.g. scripts/, references/) are allowed; top-level folder name need not match slug.
Single-folder package structureWhen root has no SKILL.md, all files must be under one top-level directory; multiple top-level directories are blocked.
Single-folder top-level directory nameBlocked. Top-level directory name must equal slug in SKILL.md (or name if slug is omitted).
SKILL.md encodingBlocked. Must be UTF-8.
YAML front matterBlocked. Leading metadata such as name/description must be wrapped in --- --- and be valid YAML.
nameBlocked. Required; max 64 characters; regex ^[a-z0-9]+(?:-[a-z0-9]+)*$ (starts with lowercase letter or digit; lowercase letters / digits / - only; no leading/trailing or consecutive hyphens; must exactly match top-level folder name).
slugIf set, same rules as name; if omitted, slug=name automatically.
descriptionBlocked. Required; length 1–1024 characters.

3.2 File Allowlist Checks

CheckDescription
Allowed extensions (default 31).cfg / .cjs / .conf / .css / .csv / .gif / .htm / .html / .ico / .ini / .jpeg / .jpg / .js / .json / .jsx / .md / .mjs / .png / .py / .rst / .sh / .sql / .svg / .toml / .ts / .tsv / .tsx / .txt / .webp / .yaml / .yml
Allowed extensionless fileslicense / copying / makefile / dockerfile / gemfile / rakefile / procfile / jenkinsfile (case-insensitive)
Allowed dot config files.gitignore / .dockerignore / .editorconfig / .npmrc / .nvmrc (full file name match)
SKILL.mdExempt from extension allowlist, but must still satisfy all 3.1 rules.
Ignore list (not blocked; deleted after extract)__MACOSX / __pycache__ / .git / .svn / .DS_Store / desktop.ini / Thumbs.db / ._* / .pyc / .pyo; skipped during validation and not treated as allowlisted types.
Double-suffix filesOnly the last extension counts; e.g. archive.tar.gz is treated as .gz and blocked if not allowlisted.
Suffix not on allowlistBlocked. e.g. .exe / .pdf / .zip / .ps1 / .env; extend via Nacos skill.import.allowed_suffix.

3.3 Dangerous Script Content Scan (Rule Engine)

CheckDescription
Scan scopeOnly .sh / .py / .js / .mjs / .cjs / .ts / .tsx / .jsx with size greater than 0; .md / .json and similar docs are not scanned.
.sh scriptsBlocked. Patterns such as rm -rf, curl|sh, mkfs, dd, chattr.
Code filesBlocked. Patterns such as os.system, subprocess(shell=True), eval, exec, child_process.
Sensitive path / secret referencesBlocked. e.g. /etc/shadow, ~/.ssh, PRIVATE KEY.

3.4 Extract and Other Checks

CheckDescription
Extract path safetyBlocked. Absolute paths, .., and escaping the extract root are forbidden.
Missing SKILL.md after extractBlocked. Flattened skill directory must contain SKILL.md.
Duplicate slug in same environmentBlocked. slug must be unique under the same account_id + env_id.
Conflict with built-in skillBlocked. name or slug must not duplicate a global built-in skill.
iconBlocked. Empty passes; short strings without injection traits pass; otherwise must be a valid base64 image.
Auth dimensionsBlocked. Requires account_id, env_id, resource_zone_id.

Notes

  • Built-in vs. self-built: Built-in Skills are not listed in Workspace—use Resources > Public.
  • Publish vs. save draft: Only publish syncs My and writes versions.
  • Listing version: Listing uses published version; UI warns if drafts exist.
  • Strict semver: Skill publish validates version format and ordering.
  • Reference impact: New Skill versions auto-upgrade referencing Agents and Automation.
  • Content security: Sensitive content blocked per Security Management.
  • Import validation: Imported Skill packages must pass the Skill Validation Spec above; validation requires an available LLM—add a model first if the model list is empty.

Further Reading