Skill Hub Gateway
by @chinasilva
Unified gateway skill for async execute/poll, portal user closure, and telemetry feedback workflows.
clawhub install skill-hub-gatewayπ About This Skill
name: skill-hub-gateway description: Unified gateway skill for async execute/poll, portal user closure, and telemetry feedback workflows. version: 2.4.2 metadata: openclaw: skillKey: skill-hub-gateway emoji: "π§©" homepage: https://gateway.binaryworks.app requires: bins: - node
Skill Hub Gateway
Default API base URL: https://gateway-api.binaryworks.app
Default site base URL (for upload route): https://gateway.binaryworks.app
Chinese documentation: SKILL.zh-CN.md
Version Check Protocol (Agent)
GET /skills/manifest.json -> data.version.SKILL.md frontmatter version.major.minor.patch).Agent Decision Flow
latest_version > current_version, read the matching section under Release Notes in this document to build update_summary.current_version
- latest_version
- update_summary
Update now
- Remind me later in this session
Remind me later in this session, suppress repeated prompts for the same target version until a new session starts.First-Time Onboarding (install_code)
Scripts auto-complete onboarding by default:
1. POST /agent/install-code/issue with {"channel":"local"} or {"channel":"clawhub"}.
2. Read data.install_code.
3. POST /agent/bootstrap with {"agent_uid":".
4. Read data.api_key, then call runtime APIs with X-API-Key or Authorization: Bearer .
Manual override:
api_key explicitly.agent_uid and owner_uid_hint are omitted, scripts derive stable local defaults from the current workspace path.Legacy Runtime Contract (Compatibility)
POST /skill/executeGET /skill/runs/:run_idPortal Actions (User Closure)
Action catalog (single default path per action):
portal.me -> GET /user/meportal.balance -> GET /user/points/balanceportal.ledger.query -> GET /user/points/ledgerportal.usage.query -> GET /user/usageportal.skill.execute -> POST /user/skills/executeportal.skill.poll -> GET /user/skills/runs/:runIdportal.skill.presentation -> GET /user/skills/runs/:runId/presentationportal.voucher.redeem -> POST /user/vouchers/redeem (write)portal.recharge.create -> POST /user/recharge/orders (write)portal.recharge.get -> GET /user/recharge/orders/:orderIdWrite safety gate:
portal.voucher.redeem and portal.recharge.create require payload.confirm === true.confirm is missing or not true, action runner rejects the call locally and does not send write traffic.Payload Contract
Default payload conventions:
payload.input is the primary input object for portal.skill.execute.payload.request_id is optional and passed through as-is.payload fields directly as query params (date_from, date_to, service_id, channel).Media normalization conventions:
image_url, audio_url, file_url.attachment.url exists, map it to the capability target URL field.file_path exists, auto-upload through {site_base}/api/blob/upload, with fallback to {site_base}/api/blob/upload-file when @vercel/blob/client is unavailable, then backfill URL into input before execution.@vercel/blob/client, you can also pre-upload media via your backend (for example Vercel Blob) and pass attachment.url or explicit URL fields.site_base_url is a guarded field: runtime only accepts the trusted configured site base URL (default https://gateway.binaryworks.app or env SKILL_SITE_BASE_URL).Presentation files:
portal.skill.presentation accepts optional include_files=true to return visual.files.assets with rendered file URLs.portal-action.mjs defaults include_files=true for portal.skill.presentation unless explicitly disabled.overlay (boxed image), plus mask / cutout assets when available.output.media_files.assets with uploaded file URLs when blob storage is configured.Runtime Auth Bridge
User-scoped actions use a fixed auth bridge:
1. Resolve runtime API key context (api_key, agent_uid, owner_uid_hint, base_url).
2. GET /agent/me with X-API-Key + x-agent-uid to resolve user_id.
3. POST /user/api-key-login with user_id + api_key to obtain userToken.
4. Execute Portal Action with Authorization: Bearer .
Insufficient Points Recovery
For POINTS_INSUFFICIENT responses:
error.code and error.message unchanged.error.details.recharge_url when available.portal.recharge.create or direct open of recharge_url.Bundled Files
scripts/execute.mjs (CLI args: [api_key] [capability] [input_payload] [base_url] [agent_uid] [owner_uid_hint])scripts/poll.mjs (CLI args: [api_key] [base_url] [agent_uid] [owner_uid_hint] )scripts/feedback.mjs (CLI args: [api_key] [payload_json] [base_url] [agent_uid] [owner_uid_hint])scripts/telemetry.mjs (shared best-effort telemetry helper)scripts/runtime-auth.mjs (shared auto-bootstrap helper)scripts/portal-auth.mjs (api-key -> user session bridge)scripts/portal-action.mjs (CLI args: [api_key] [base_url] [agent_uid] [owner_uid_hint] )scripts/attachment-normalize.mjs (attachment URL/path normalization + upload)references/capabilities.jsonreferences/openapi.jsonSKILL.zh-CN.mdTelemetry and Feedback
SKILL_TELEMETRY_ENABLED (true by default)
- SKILL_TELEMETRY_BASE_URL (defaults to runtime base_url)
- SKILL_TELEMETRY_TIMEOUT_MS (2000 by default)
POST /feedback/submit with runtime auth (X-API-Key) and attaches agent_uid + owner_uid_hint in metadata.Capability IDs
human_detectimage_taggingtts_reportembeddingsrerankerasrtts_low_costmarkdown_convertface-detectperson-detecthand-detectbody-keypoints-2dbody-contour-63ptface-keypoints-106pthead-poseface-feature-classificationface-action-classificationface-image-qualityface-emotion-recognitionface-physical-attributesface-social-attributespolitical-figure-recognitiondesignated-person-recognitionexhibit-image-recognitionperson-instance-segmentationperson-semantic-segmentationconcert-cutoutfull-body-mattinghead-mattingproduct-cutoutRelease Notes
When publishing a new version, add a new section here. Agent update summaries must be generated from this block.
2.4.2 (2026-03-12)
What's New
/api/blob/upload-file direct-upload fallback for file_path flows when @vercel/blob/client is unavailable.portal.skill.presentation file rendering (visual.files.assets) for overlay/mask/cutout URLs.output.media_files.assets with uploaded file URLs when blob storage is configured.Breaking/Behavior Changes
Migration Notes
@vercel/blob/client, send file_path as before; the runtime now falls back to direct upload.portal.skill.presentation with include_files=true or rely on the portal default.2.4.1 (2026-03-12)
What's New
portal.skill.execute input normalization for attachment.url (both input.attachment.url and top-level attachment.url).image_url/audio_url/file_url take priority over attachment.url when both are present).@vercel/blob/client to use backend pre-upload URLs.Breaking/Behavior Changes
Migration Notes
portal-action.mjs workflows remain compatible.attachment.url or explicit media URL.2.4.0 (2026-03-12)
What's New
portal.me, balance/ledger/usage, execute/poll/presentation, voucher and recharge actions).portal.voucher.redeem and portal.recharge.create require confirm=true.portal-auth.mjs) for api_key -> user session.portal-action.mjs) and attachment normalization script (attachment-normalize.mjs) with attachment.url and file_path support.recharge_url in passthrough envelopes.Breaking/Behavior Changes
confirm=true is absent.Migration Notes
execute.mjs and poll.mjs workflows remain available.portal-action.mjs for user closure actions.2.3.4 (2026-03-11)
What's New
scripts/feedback.mjs to submit structured feedback via runtime auth (X-API-Key).SKILL_TELEMETRY_*).Breaking/Behavior Changes
Migration Notes
/agent/telemetry/ingest and /telemetry/ingest.2.3.3 (2026-03-11)
What's New
input_json to input_payload for consistency with structured payload semantics.Breaking/Behavior Changes
Migration Notes