---
layout: tap
site_name: clawhub
tap_name: publish
description: "Publish a skill to OpenClaw ClawHub"
intent: write
columns:
- status
- url
args:
- name: slug
type: string
description: "Skill slug (e.g. 'tap')"
- name: displayName
type: string
description: "Display name (e.g. 'Tap')"
- name: version
type: string
description: "Semver version (e.g. '0.1.0')"
- name: skillFile
type: string
description: "Absolute path to SKILL.md file"
- name: changelog
type: string
description: "Changelog text"
args_json: |
{"slug":{"type":"string","description":"Skill slug (e.g. 'tap')"},"displayName":{"type":"string","description":"Display name (e.g. 'Tap')"},"version":{"type":"string","description":"Semver version (e.g. '0.1.0')"},"skillFile":{"type":"string","description":"Absolute path to SKILL.md file"},"changelog":{"type":"string","description":"Changelog text"}}
health_json: |
{"min_rows":1,"non_empty":[]}
example_args: ""
source_url: https://github.com/LeonTing1010/tap-skills/blob/main/community/clawhub/publish.plan.json
license: MIT
---
What it does
Publish a skill to OpenClaw ClawHub
Install Taprun once
Taprun ships as a single MCP server exposing a catalog of compiled taps. One-time setup on macOS / Linux:
brew install LeonTing1010/tap/taprun
tap mcp connect
Or drop this into your claude_desktop_config.json (works identically in Claude Code, Cursor, Cline, Windsurf — any MCP host):
{
"mcpServers": {
"tap": {
"command": "tap",
"args": ["mcp", "start"]
}
}
}
Call clawhub/publish
Terminal, once installed:
tap run clawhub/publish
From the MCP host — exact same compiled plan, deterministic replay, zero LLM tokens:
tap.run({ site: "clawhub", name: "publish" })
Why compile it once
This plan was forged once — the AI read clawhub, picked stable structural addresses (JSON-LD, ARIA, RSS, or declared API endpoints, in that priority order), and saved them to a .plan.json. Every replay since then has used zero LLM tokens. When clawhub ships a site change that breaks the extraction, tap verify surfaces it before your data goes stale — not after your pipeline silently writes garbage for a week.