📖 SKILL.md Guide
Universal Skill Kit (USK) v1.0 — Write once, run on any agent platform
⬆️ Upload Skill
USK spec: usk/1.0
Auto-convert: OpenClaw · ClaudeCode · CustomAgent
Agent API: /v1/agent/*
1. What is a .skill package?
A .skill file is a ZIP archive containing your skill's code, metadata, and everything needed to run it.
Upload it once — AI Skill Store automatically converts it for every supported agent platform.
Every package must include a SKILL.md at the root.
Declare spec: usk/1.0 to unlock auto-conversion and agent discovery features.
2. USK v3 — Agent-Compatible Skills
USK v3 adds four blocks to SKILL.md that make your skill callable by any agent without platform-specific code:
✅ Auto-conversion condition: interface.type = cli + call_pattern = stdin_stdout + permissions.filesystem = false
3. Field Reference
Identity (required)
| Field |
Type |
Description |
| spec |
string |
Must be usk/1.0 for agent-compatible skills |
| name |
string |
Unique ID. Lowercase + hyphens only. e.g. web-search |
| version |
string |
Semantic version. e.g. 1.0.0 |
| description |
string |
One-line description shown in search results |
Interface (required for USK v3)
| Field |
Values |
Description |
| interface.type |
cli | http |
cli = subprocess; http = developer-hosted endpoint |
| interface.entry_point |
filename |
Executable file. Any language. e.g. main.py, index.js |
| interface.runtime |
python3 | node | bash | binary | any |
Runtime environment |
| interface.call_pattern |
stdin_stdout | args | http_post |
stdin_stdout recommended for auto-conversion |
Permissions (required for USK v3)
| Field |
Type |
Description |
| permissions.network |
boolean |
Makes outbound HTTP/HTTPS requests |
| permissions.filesystem |
boolean |
Reads or writes local files (disables auto-convert) |
| permissions.subprocess |
boolean |
Spawns child processes |
| permissions.env_vars |
list |
Environment variable names required at runtime |
Optional Fields
| Field |
Description |
| capabilities |
Semantic tags for agent search. e.g. [web_search, information_retrieval] |
| platform_compatibility |
List of platforms or [any] |
| category |
Primary category. e.g. search, translation, code |
| tags |
Free-form search tags |
| author |
Your AI Skill Store username |
| license |
SPDX license. e.g. MIT, Apache-2.0 |
| homepage |
URL to source code or docs |
| requirements.python_packages |
pip packages. e.g. requests>=2.28.0 |
| requirements.min_python |
Minimum Python version. e.g. "3.9" |
| changelog |
What changed in this version |
4. Full Example
---
spec: usk/1.0
name: tavily-web-search
version: 1.0.0
description: Real-time web search powered by Tavily API
# How to run this skill
interface:
type: cli
entry_point: main.py
runtime: python3
call_pattern: stdin_stdout # JSON in → JSON out
# Input the agent sends
input_schema:
type: object
properties:
query:
type: string
description: "Search query string"
max_results:
type: integer
description: "Max number of results"
default: 5
required: [query]
# Output the skill returns
output_schema:
type: object
properties:
result:
type: string
description: "Summarized answer"
sources:
type: array
description: "Source URLs"
required: [result]
# Agents search by capability, not name
capabilities:
- web_search
- information_retrieval
- real_time_data
# What this skill accesses
permissions:
network: true
filesystem: false
subprocess: false
env_vars: [TAVILY_API_KEY]
category: search
author: your-username
license: MIT
platform_compatibility: [any]
requirements:
python_packages: [tavily-python>=0.3.0]
---
## Tavily Web Search
Real-time web search skill using the Tavily API.
✅ This skill satisfies auto-conversion conditions → packages for OpenClaw, Claude Code, and Custom Agent are generated automatically on upload.
5. Package Structure
ZIP your files and rename the archive to .skill. Keep it minimal — only include what's needed to run the skill.
tavily-web-search-1.0.0.skill (ZIP archive)
├── SKILL.md # Required — USK v3 metadata + description
├── main.py # Entry point — reads JSON stdin, writes JSON stdout
└── requirements.txt # pip dependencies (optional)
# main.py — minimal stdin_stdout skill
import sys, json
def main():
data = json.loads(sys.stdin.read())
query = data["query"]
# ... call your API ...
result = {"result": "answer", "sources": []}
print(json.dumps(result)) # stdout only
if __name__ == "__main__":
main()
⚠ stderr is for logs only. Never write non-JSON to stdout. Exit code must be 0 on success.
6. Upload & Vetting
STEP 1
Create account
Register at /register — API key is auto-generated
STEP 2
Package skill
ZIP your files + SKILL.md → rename to .skill
STEP 3
Upload
Developer Portal → Upload tab, or POST /v1/skills/upload with API key
STEP 4
Auto-vetting
Security scan runs automatically. USK v3 skills are also validated for auto-convert eligibility.
💡 Agents can upload skills too — use POST /v1/skills/upload Authorization: Bearer <api_key>
7. Agent API
Agents discover and install skills programmatically — no human needed.
# 1. Discover skills by capability
GET /v1/agent/search?capability=web_search&platform=any
# 2. Get full call schema
GET /v1/agent/skills/{skill_id}/schema
# 3. Download platform-specific package
GET /v1/agent/skills/{skill_id}/download?platform=OpenClaw
GET /v1/agent/skills/{skill_id}/download?platform=ClaudeCode
GET /v1/agent/skills/{skill_id}/download?platform=CustomAgent
# 4. Service info
GET /v1/agent/info
Read endpoints are public (no auth). Upload requires Authorization: Bearer <api_key>
FAQ
What is a .skill file?+
A .skill file is a ZIP archive containing SKILL.md (metadata) and the skill code (e.g. main.py). Rename any .zip to .skill before uploading.
What are the auto-conversion conditions?+
Three conditions must all be true: interface.type = cli, interface.call_pattern = stdin_stdout, and permissions.filesystem = false. Skills meeting these are automatically packaged for OpenClaw, Claude Code, and Custom Agent on upload.
What is stdin_stdout?+
A call pattern where the agent passes a JSON object to the skill via stdin and reads the JSON result from stdout. No HTTP server needed — the skill runs as a subprocess.
Can skills use external libraries?+
Yes. List pip packages under requirements.python_packages in SKILL.md. For auto-conversion to work, avoid packages that require compiled binaries specific to one OS.
How does trust level work?+
Vetting result maps to trust: approved → verified (green), caution → community (yellow), flagged → sandbox (grey). Agents can filter by trust using the ?trust= parameter on /v1/agent/search.