The Skills API enables agents to extend their capabilities through Python, Node.js, WASM, or prompt-only modules. Skills are installed from FangHub (OpenFang marketplace) or ClawHub (OpenClaw ecosystem compatibility).
List Installed Skills
Retrieve all skills installed on the system.
curl http://127.0.0.1:4200/api/skills
Runtime: prompt_only, python, nodejs, or wasm
true if skill is bundled with OpenFang
Tools provided by this skill
{
"skills" : [
{
"name" : "github" ,
"version" : "1.0.0" ,
"runtime" : "prompt_only" ,
"description" : "GitHub integration for issues, PRs, and repos" ,
"bundled" : true ,
"author" : "OpenFang Team" ,
"tools" : [ "github_list_issues" , "github_create_pr" ]
},
{
"name" : "docker" ,
"version" : "1.0.0" ,
"runtime" : "prompt_only" ,
"description" : "Docker container management" ,
"bundled" : true ,
"author" : "OpenFang Team" ,
"tools" : [ "docker_ps" , "docker_logs" ]
}
],
"total" : 60
}
Install Skill
Install a skill from a local path or URL.
curl -X POST http://127.0.0.1:4200/api/skills/install \
-H "Content-Type: application/json" \
-d '{
"source": "/path/to/skill",
"verify": true
}'
Skill source:
Local path: /path/to/skill
URL: https://example.com/skill.zip
Git repository: https://github.com/user/skill.git
Verify SHA256 checksum and scan for prompt injection
201 Created
400 Bad Request
{
"status" : "installed" ,
"skill" : "my-custom-skill" ,
"version" : "1.0.0"
}
Uninstall Skill
Remove an installed skill. Bundled skills cannot be uninstalled.
curl -X POST http://127.0.0.1:4200/api/skills/uninstall \
-H "Content-Type: application/json" \
-d '{"name": "my-custom-skill"}'
{
"status" : "uninstalled" ,
"skill" : "my-custom-skill"
}
Create Skill
Generate a new skill from a template.
curl -X POST http://127.0.0.1:4200/api/skills/create \
-H "Content-Type: application/json" \
-d '{
"name": "my-skill",
"runtime": "python",
"description": "A custom skill"
}'
Skill name (lowercase, hyphen-separated)
Runtime: prompt_only, python, nodejs, or wasm
{
"status" : "created" ,
"skill" : "my-skill" ,
"path" : "/home/user/.openfang/skills/my-skill"
}
FangHub Marketplace
Search and install skills from FangHub (community marketplace).
Search FangHub
curl "http://127.0.0.1:4200/api/marketplace/search?q=weather&page=1"
{
"results" : [
{
"name" : "weather-api" ,
"author" : "community" ,
"description" : "Real-time weather data integration" ,
"downloads" : 1250 ,
"version" : "2.1.0" ,
"rating" : 4.5
}
],
"total" : 1 ,
"page" : 1
}
ClawHub Integration
Install skills from ClawHub (OpenClaw ecosystem compatibility). All ClawHub skills are automatically converted from SKILL.md format to OpenFang skill.toml format.
Search ClawHub
curl "http://127.0.0.1:4200/api/clawhub/search?q=data-pipeline"
{
"results" : [
{
"slug" : "data-pipeline" ,
"name" : "Data Pipeline" ,
"description" : "ETL data pipeline automation" ,
"author" : "clawhub-community" ,
"version" : "1.2.0"
}
],
"total" : 1
}
Browse ClawHub
Browse skills by category.
curl "http://127.0.0.1:4200/api/clawhub/browse?category=data&page=1"
Category filter: data, web, ai, devops, finance, etc.
{
"skills" : [
{
"slug" : "data-pipeline" ,
"name" : "Data Pipeline" ,
"category" : "data" ,
"description" : "ETL data pipeline automation"
}
],
"total" : 15 ,
"page" : 1
}
Get ClawHub Skill Details
curl http://127.0.0.1:4200/api/clawhub/skill/{slug}
Install ClawHub Skill
Install a skill from ClawHub. Automatically converts from OpenClaw format.
curl -X POST http://127.0.0.1:4200/api/clawhub/install \
-H "Content-Type: application/json" \
-d '{"slug": "data-pipeline"}'
{
"status" : "installed" ,
"skill" : "data-pipeline" ,
"version" : "1.2.0" ,
"converted_from" : "SKILL.md"
}
Skill Manifest
Skills are defined by a skill.toml manifest:
name = "my-skill"
version = "1.0.0"
author = "Your Name"
description = "A custom skill"
runtime = "python" # or nodejs, wasm, prompt_only
# Tool definitions
[[ tools ]]
name = "my_tool"
description = "Does something useful"
parameters = [
{ name = "input" , type = "string" , required = true },
{ name = "options" , type = "object" , required = false }
]
# Runtime configuration (for python/nodejs/wasm)
[ runtime_config ]
entry_point = "main.py"
dependencies = [ "requests" , "beautifulsoup4" ]
Security
All skill installations go through a multi-layer security pipeline:
SHA256 verification — Checksum validation
Prompt injection scanning — Detects malicious prompts
Sandbox execution — Skills run in isolated processes
Capability grants — Skills must declare required permissions
Audit logging — All installations logged to Merkle audit trail
Skill Capabilities
Skills must declare capabilities in their manifest:
[ capabilities ]
network = [ "*.example.com" ] # Network access
filesystem = [ "read" ] # File access
memory = [ "read" ] # Memory access
subprocess = false # Subprocess spawning
Agent Skill Configuration
Agents can configure which skills they use:
# Allowlist mode (explicit list)
skills = [ "github" , "docker" , "my-custom-skill" ]
# Default mode (all skills)
skills = [] # Empty = all available skills
API endpoint to update agent skills:
curl -X PUT http://127.0.0.1:4200/api/agents/{id}/skills \
-H "Content-Type: application/json" \
-d '{
"skills": ["github", "docker"],
"mode": "allowlist"
}'
Best Practices
Review skill source before installing
Always inspect the skill’s code or manifest before installing: # Clone the skill repository
git clone https://github.com/user/skill.git
cd skill
cat skill.toml
cat README.md
Check for suspicious network access, filesystem operations, or subprocess calls.
Use version pinning for production
Pin skill versions in agent manifests: This prevents unexpected behavior from auto-updates.
Test skills in isolated agents first
Before deploying to production agents, test skills in a dedicated test agent: # Spawn test agent
openfang spawn --name test-agent --skills my-new-skill
# Test the skill
openfang chat test-agent "Use my_new_tool to..."
Monitor skill execution logs
Check logs for skill errors or suspicious behavior: openfang logs --follow | grep "skill_runner"
Regularly update skills to get bug fixes and security patches: # Check for updates
curl http://127.0.0.1:4200/api/skills | jq '.skills[] | select(.bundled == false)'
# Reinstall with latest version
curl -X POST http://127.0.0.1:4200/api/skills/install \
-d '{"source": "https://github.com/user/skill.git"}'
Next Steps
Agents API Configure agent skills
Create Skills Build custom skills
FangHub Browse community skills
Security Skill security model