Skillcraft
Design and build OpenClaw skills. Use when asked to "make/build/craft a skill", extract ad-hoc functionality into a skill, or package scripts/instructions for reuse. Covers OpenCla…
jmz1
@jmz1
What This Skill Does
Designs and builds OpenClaw skills by guiding users through a structured sequence of problem understanding, capability discovery, architecture planning, and specification. Covers OpenClaw-specific integration features like tool calling, memory, message routing, cron scheduling, canvas UI, and ClawHub publishing.
Replaces ad-hoc script packaging and manual skill authoring by providing a repeatable design sequence tailored to OpenClaw's platform primitives.
When to Use It
- Package a set of shell scripts or repeated instructions into a reusable OpenClaw skill
- Design a skill that monitors a system and sends scheduled notifications via cron
- Extract ad-hoc functionality from a conversation into a publishable skill
- Plan a skill that combines multiple OpenClaw features like message routing, memory, and canvas
- Create a skill that wraps a CLI tool or web API for use within OpenClaw
- Prepare a skill for ClawHub publishing with proper structure and documentation
Install
$ openclaw skills install @jmz1/skillcraftSkillcraft — OpenClaw Skill Designer
An opinionated guide for creating OpenClaw skills. Focuses on OpenClaw-specific integration — message routing, cron scheduling, memory persistence, channel formatting, frontmatter gating — not generic programming advice.
Docs: https://docs.openclaw.ai/tools/skills · https://docs.openclaw.ai/tools/creating-skills
Model Notes
This skill is written for frontier-class models (Opus, Sonnet). If you're running a cheaper model and find a stage underspecified, expand it yourself — the design sequence is a scaffold, not a script. Cheaper models should:
- Read the pattern files in
{baseDir}/patterns/more carefully before architecting - Spend more time on Stage 2 (capability discovery) — enumerate OpenClaw features explicitly
- Be more methodical in Stage 4 (spec) — write out the full structure before implementing
- Consult https://docs.openclaw.ai when unsure about any OpenClaw feature
The Design Sequence
Stage 0: Inventory (Extraction Only)
Skip if building from scratch. Use when packaging existing functionality (scripts, TOOLS.md sections, conversation patterns, repeated instructions) into a skill.
Gather what exists, where it lives, what works, what's fragile. Then proceed to Stage 1.
Stage 1: Problem Understanding
Work through with the user:
- What does this skill do? (one sentence)
- When should it load? Example phrases, mid-task triggers, scheduled triggers
- What does success look like? Concrete outcomes per example
Stage 2: Capability Discovery
Generalisability
Ask early: Is this for your setup, or should it work on any OpenClaw instance?
| Choice | Implications |
|---|---|
| Universal | Generic paths, no local assumptions, ClawHub-ready |
| Particular | Can reference local skills, tools, workspace config |
Skill Synergy (Particular Only)
Scan <available_skills> from the system prompt for complementary capabilities. Read promising skills to understand composition opportunities.
OpenClaw Features
Review the docs with the skill's needs in mind. Think compositionally — OpenClaw's primitives combine in powerful ways. Key docs to check:
| Need | Doc |
|---|---|
| Messages | /concepts/messages |
| Cron/scheduling | /automation/cron-jobs |
| Subagents | /tools/subagents |
| Browser | /tools/browser |
| Canvas UI | /tools/ (canvas) |
| Node devices | /nodes/ |
| Slash commands | /tools/slash-commands |
See {baseDir}/patterns/composable-examples.md for inspiration on combining these.
Stage 3: Architecture
Based on Stages 1–2, identify which patterns apply:
| If the skill... | Pattern |
|---|---|
| Wraps a CLI tool | {baseDir}/patterns/cli-wrapper.md |
| Wraps a web API | {baseDir}/patterns/api-wrapper.md |
| Monitors and notifies | {baseDir}/patterns/monitor.md |
Load all that apply and synthesise. Most skills combine patterns.
Script vs. instructions split: Scripts handle deterministic mechanics (API calls, data gathering, file processing). SKILL.md instructions handle judgment (interpreting results, choosing approaches, composing output). The boundary is: could a less intelligent system do this reliably? If yes → script.
Stage 4: Design Specification
Present proposed architecture for user review:
- Skill structure — files and directories
- SKILL.md outline — sections and key content
- Components — scripts, modules, wrappers
- State — stateless, session-stateful, or persistent (and where it lives)
- OpenClaw integration — which features, how they interact
- Secrets — env vars, keychain, config file (document in setup section, never hardcode)
State locations:
<workspace>/memory/— user-facing context{baseDir}/state.json— skill-internal state (travels with skill)<workspace>/state/<skill>.json— skill state in common workspace area
If extracting: include migration notes (what moves, what workspace files need updating).
Validate: Does it handle all Stage 1 examples? Any contradictions? Edge cases?
Iterate until the user is satisfied. This is where design problems surface cheaply.
Stage 5: Implementation
Default: same-session. Work through the spec with user review at each step. Reserve subagent handoff for complex script subcomponents only — SKILL.md and integration logic stay in the main session.
- Create skill directory + SKILL.md skeleton (frontmatter + sections)
- Scripts (if any) — get them working and tested
- SKILL.md body — complete instructions
- Test against Stage 1 examples
If extracting: update workspace files, clean up old locations, verify standalone operation.
Crafting the Frontmatter
The frontmatter determines discoverability and gating. Format follows the AgentSkills spec with OpenClaw extensions.
---
name: my-skill
description: [description optimised for discovery — see below]
homepage: https://github.com/user/repo # optional
metadata: {"openclaw":{"emoji":"🔧","requires":{"bins":["tool"],"env":["API_KEY"]},"primaryEnv":"API_KEY","install":[...]}}
---
Critical: metadata must be a single-line JSON object (parser limitation).
Description — Write for Discovery
The description determines whether the skill gets loaded. Include:
- Core capability — what it does
- Trigger keywords — terms users would say
- Contexts — situations where it applies
Test: would the agent select this skill for each of your Stage 1 example phrases?
Frontmatter Keys
| Key | Purpose |
|---|---|
name | Skill identifier (required) |
description | Discovery text (required) |
homepage | URL for docs/repo |
user-invocable | true/false — expose as slash command (default: true) |
disable-model-invocation | true/false — exclude from model prompt (default: false) |
command-dispatch | tool — bypass model, dispatch directly to a tool |
command-tool | Tool name for direct dispatch |
command-arg-mode | raw — forward raw args to tool |
Metadata Gating
OpenClaw filters skills at load time using metadata.openclaw:
| Field | Effect |
|---|---|
always: true | Skip all gates, always load |
emoji | Display in macOS Skills UI |
os | Platform filter (darwin, linux, win32) |
requires.bins | All must exist on PATH |
requires.anyBins | At least one must exist |
requires.env | Env var must exist or be in config |
requires.config | Config paths must be truthy |
primaryEnv | Maps to skills.entries.<name>.apiKey |
install | Installer specs for auto-setup (brew/node/go/uv/download) |
Sandbox note: requires.bins checks the host at load time. If sandboxed, the binary must also exist inside the container.
Token Budget
Each eligible skill adds ~97 chars + name + description + location path to the system prompt. Keep descriptions informative but not bloated — every character costs tokens on every turn.
Install Specs
"install": [
{"id": "brew", "kind": "brew", "formula": "tap/tool", "bins": ["tool"], "label": "Install via brew"},
{"id": "npm", "kind": "node", "package": "tool", "bins": ["tool"]},
{"id": "uv", "kind": "uv", "package": "tool", "bins": ["tool"]},
{"id": "go", "kind": "go", "package": "github.com/user/tool@latest", "bins": ["tool"]},
{"id": "dl", "kind": "download", "url": "https://...", "archive": "tar.gz"}
]
Path Conventions
| Token | Meaning |
|---|---|
{baseDir} | This skill's directory (OpenClaw resolves at runtime) |
<workspace>/ | Agent's workspace root |
- Use
{baseDir}for skill-internal references (scripts, state, patterns) - Use
<workspace>/for workspace files (TOOLS.md, memory/, etc.) - Never hardcode absolute paths — workspaces are portable
- For subagent scenarios, include path context in the task description (sandbox mounts differ)
References
- Pattern files:
{baseDir}/patterns/(cli-wrapper, api-wrapper, monitor, composable-examples) - OpenClaw docs: https://docs.openclaw.ai/tools/skills
- ClawHub: https://clawhub.com
Top skills in this category
postfast
@peturgeorgievvSchedule and manage social media posts across TikTok, Instagram, Facebook, X (Twitter), YouTube, LinkedIn, Threads, Bluesky, Pinterest, Telegram, and Google Business Profile using the PostFast API. Use when the user wants to schedule social media posts, manage social media content, upload media for social posting, list connected social accounts, check scheduled posts, delete scheduled posts, cross-post content to multiple platforms, manage Google Business Profile posts, geotag posts with real-world places, pick trending pre-cleared TikTok sounds for photo and carousel posts, read or reply to the comments on their posts (social inbox — TikTok, Instagram, Facebook, Threads), triage or moderate comment conversations, generate a connect link so an agency client or their own app's user can connect accounts without a PostFast account, or automate their social media workflow. PostFast is a SaaS tool — no self-hosting required.
YouTube
@byungkyuYouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login, or over raw HTTP with a Maton API key where the CLI cannot be installed. Every call is authenticated as the user's connection and reaches only what that connection's authorization allows, which the provider enforces on every request; the endpoints documented here are the ones this skill uses, and any other endpoint of this app needs the user to ask for it by name. Default to read and list calls, and confirm every write or new connection with the user. This file also documents the three constructs that turn a YouTube connection into automation, in the order they are used: the connection (the first step), a hosted function that runs a YouTube action through the Maton SDK, and a trigger that calls that function on a schedule or on an event. Those sections are the platform's own reference text, shared with the api-gateway skill, with YouTube examples; they add no YouTube capability - YouTube is not an event source, a trigger cannot read YouTube data, and the files under `references/<source>/triggers.md` are the platform's event catalogues for the sources Maton offers (time, Calendly, GitHub, Gmail, HubSpot, Linear, Notion, Slack, Stripe).
ATXP
@emilioaccAccess ATXP paid API tools for web search, AI image generation, music creation, video generation, X/Twitter search, email, and agent account management. Use...
Openai Whisper Api
@steipeteTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
Edge TTS
@i3130002Text-to-speech conversion using node-edge-tts npm package for generating audio from text. Supports multiple voices, languages, speed adjustment, pitch control, and subtitle generation. Use when: (1) User requests audio/voice output with the "tts" trigger or keyword. (2) Content needs to be spoken rather than read (multitasking, accessibility, driving, cooking). (3) User wants a specific voice, speed, pitch, or format for TTS output.