--- 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.