From tenequm-skills
Creates slash command skills for Claude Code projects to automate multi-step workflows like deploys, commits, releases, migrations, with phases and approval gates.
npx claudepluginhub tenequm/skills --plugin gh-cliThis skill uses the workspace's default tool permissions.
Create 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.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Create 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