Install
openclaw skills install command-skill-creatorCreate automation command skills (slash commands) for Claude Code projects. Use when building `/slash-commands` that automate multi-step workflows - deploys, commits, releases, migrations, cross-repo operations, or any repeatable process. Triggers on "create a command", "make a slash command", "automate this workflow", "turn this into a command", "build a command skill", or when designing phased execution skills with approval gates. For command-type skills (imperative prompts in `.claude/skills/`), NOT knowledge/reference skills.
openclaw skills install command-skill-creatorCreate command-type skills - imperative prompts that guide Claude through phased execution of multi-step workflows. These are /slash-commands users invoke explicitly, not passive reference material.
Command skills live in project-level .claude/skills/<name>/SKILL.md and are invoked as /name [arguments].
Establish what the command automates. Ask (or extract from conversation context):
opus)If the user says "turn this into a command," extract the workflow from conversation history - tools used, sequence, corrections made.
Choose fields based on the command's nature. See the frontmatter reference table below.
Minimum viable frontmatter:
---
name: my-command
description: What it does and when to use it
disable-model-invocation: true
---
The reason disable-model-invocation: true is the default for command skills: commands have side effects by definition. If it had no side effects, it would be a knowledge skill instead. Setting this to true ensures the command only runs when the user explicitly invokes it, preventing Claude from autonomously deploying, committing, or mutating state.
Add more fields based on characteristics:
argument-hint: "[arg-name]"model: opusallowed-tools: Read, Bash(specific-cmd *)context: fork + agent: ExploreBreak the command into numbered phases with markdown headers (##). Claude follows numbered sequences with headers reliably - dense paragraphs get lost.
Common phase progression:
Not every command needs all phases. A simple formatter might just be execute + verify.
For each phase with side effects:
These aren't bureaucracy - they prevent the command from autonomously deploying broken code or committing garbage. A 2-second approval pause costs nothing compared to rolling back a bad deploy.
Generate the complete skill file. Keep it under 200 lines - command skills are prompts, not documentation. If the command needs extensive reference material, use supporting files.
Always start with the argument guard:
The target is: $ARGUMENTS
If no argument was provided, ask the user for one and stop.
Then: rules section, phases, summary template.
Run through every item on the audit checklist below. Fix failures before finalizing. Present the audit results to the user.
Save the skill to the target project:
<project>/.claude/skills/<command-name>/SKILL.md
If supporting files are needed, they go alongside SKILL.md.
| Field | Type | Default | When to Use |
|---|---|---|---|
name | string | dir name | Always. Lowercase, hyphens, max 64 chars |
description | string | required | Action-oriented: what it does + when to trigger |
model | string | inherit | Complex reasoning: opus. Cost savings: haiku |
disable-model-invocation | bool | false | Always true for command skills (they have side effects) |
argument-hint | string | none | If command takes args: [service-name], [model-id] |
allowed-tools | string | all | Restrict: Read, Bash(npm *), mcp__github__* |
context | string | inline | fork for isolated subagent (read-only exploration) |
agent | string | general | With context: fork: Explore, Plan |
user-invocable | bool | true | false hides from menu (background knowledge only) |
$ARGUMENTS is replaced with the user's full argument string. Positional access via $0, $1, or $ARGUMENTS[N] (0-based).
/deploy twitter staging
# $ARGUMENTS = "twitter staging", $0 = "twitter", $1 = "staging"
Don't over-specify argument parsing. Trust Claude to understand natural language - describe what you expect and let Claude validate, rather than writing brittle format parsers.
Never hardcode absolute paths. Use:
${CLAUDE_PROJECT_DIR} - project root${CLAUDE_SKILL_DIR} - skill's own directory (for bundled scripts)See references/design-patterns.md for detailed patterns with full examples. Quick reference:
| Scenario | Pattern |
|---|---|
| One action, no approval needed | Simple Task |
| Multiple steps, some irreversible | Phased Workflow with Approval Gate |
| Need info from multiple sources | Parallel Research + Sequential Implementation |
| Modifying another project | Cross-Repo with Adaptive Discovery |
| Command exceeds 200 lines | Progressive Disclosure with supporting files |
Watch for these when reviewing command skills:
/Users/someone/... → use ${CLAUDE_PROJECT_DIR} or relativedisable-model-invocation on commands with side effectsEvery command skill must pass before finalizing:
disable-model-invocation: true if any side effects existargument-hint present if command takes arguments$ARGUMENTS${CLAUDE_PROJECT_DIR} or relative paths, never absolute