Skills & Slash Commands

Turn your agent into something that works for you. Install built-in and community skills, write custom slash commands, and build a /status health check and /deploy-check pre-flight — all without learning a new language.

60 min Intermediate Free Updated March 2026

From an Agent That Knows You to One That Works for You

If you've worked through the Memory Architecture tutorial, your agent already knows who you are — your projects, preferences, tone, and hard limits. Skills are the next layer: they define what your agent can do on command. Type /status and your agent runs a full system health check. Type /deploy and it walks through your deployment checklist. Type /brainstorm and it structures an ideation session around your actual workflow.

Skills are just Markdown files with instructions. There's no new language to learn, no plugin API to integrate, no compilation step. You write what you want the agent to do, save the file in the right place, and it becomes a slash command in your next session.

The Mental Model

Memoryfiles
Always-on context. SOUL.md, AGENTS.md, TOOLS.md are injected into every message. They shape who the agent is and what it knows — but they don't do things.
Skillsfiles
On-demand procedures. A skill sits dormant until you (or the agent) invoke it. When triggered, it gives the agent a precise set of instructions for that specific task — like handing it a printed procedure before it starts work.

The reason this matters: keeping procedures out of your always-on memory files keeps those files lean. A deployment checklist in AGENTS.md costs tokens on every single message. As a skill, it only costs tokens when you actually need to deploy.

File Structure

Every skill is a directory with a required SKILL.md entrypoint. The directory name becomes the slash command:

📁 Skill file structure
.claude/skills/status/
└── SKILL.md         ← becomes /status

.claude/skills/deploy-check/
├── SKILL.md         ← becomes /deploy-check
└── checklist.md     ← supporting file the skill can reference

Skills can live in three places depending on their scope:

Personalglobal
~/.claude/skills/<name>/SKILL.md
Available in every project on this machine. Use for personal workflows — your daily standup format, your preferred code review style, your server health check.
Projectscoped
.claude/skills/<name>/SKILL.md (inside your project)
Available only in this project. Safe to commit to git — teammates get the same skills automatically. Use for deployment steps, project-specific workflows, team conventions.
Legacycommands
~/.claude/commands/<name>.md or .claude/commands/<name>.md
The older single-file format. Still fully supported. If you see tutorials using this format, they work exactly the same way — the skills/ format just adds the ability to include supporting files alongside the SKILL.md.

What You Get During Install

When you first run claude or go through the OpenClaw onboarding, you'll see prompts about skills and plugins. Here's what those prompts are actually offering:

Skillrepos
Offers to install community skill repositories — typically the official Anthropic skills library (github.com/anthropics/skills) and Vercel's agent skills. These add immediately useful slash commands for documents, code review, design, and more. Accept this. You can always remove skills you don't use.
Pluginmarketplace
Enables the /plugin command and connects to the official Anthropic marketplace, where you can install LSP integrations (TypeScript, Python, Go, Rust diagnostics), external services (GitHub, Linear, Figma, Slack), and pre-packaged skill bundles. Accept this too — it doesn't install anything automatically, it just makes the marketplace available when you want it.
Built-inskills
/batch, /simplify, /loop, and /debug ship with every Claude Code installation. They're available immediately, no setup required. We'll cover all of them in the next section.
Missed those prompts? No problem. Everything offered during install can be added manually. npx skills add github.com/anthropics/skills installs the official library any time. /plugin typed in any session opens the marketplace.

A Minimal Skill

Before diving into features — here's the simplest possible skill to make the format concrete. Create this file and you immediately have a /hello command:

☁️ AWS EC2 / 🖥️ Mini PC
mkdir -p ~/.claude/skills/hello
nano ~/.claude/skills/hello/SKILL.md
📝 ~/.claude/skills/hello/SKILL.md
---
description: Quick test that skill loading is working
---

Say hello and confirm which skills are currently loaded.

Type /hello in your next session. That's it — the agent reads the SKILL.md and follows the instructions. The description frontmatter is what lets the agent decide to use this skill automatically when it's relevant.

What Ships With Every Installation

Four skills come bundled with Claude Code and are available the moment you install it — no setup, no configuration. Most people never discover them because they're not prominently advertised. They're also some of the most powerful things in the tool.

/batch — Parallel Subagent Execution

/batch is for large-scale changes that can be broken into independent units. It analyzes your codebase, decomposes the task into 5–30 parallel workstreams, spawns a separate agent for each one in an isolated git worktree, and opens pull requests when done. Work that would take hours of sequential back-and-forth completes in parallel.

💬 Example invocations
/batch Add JSDoc comments to all exported functions in src/

/batch Migrate all fetch() calls to use the new apiClient wrapper

/batch Update all components to use the new Button component instead of raw <button>
Goodfit
Tasks where the same change needs to happen across many files, but each file can be handled independently. Renaming, migrating, adding boilerplate, updating patterns.
Badfit
Changes where each file depends on what happened in the previous file. Use sequential execution for anything where ordering matters.
Review before merging. Each worktree gets its own branch. You'll get PR links when each unit completes. Read the diffs — /batch is smart but not infallible across large, varied codebases. It's a force multiplier, not a set-and-forget.

/simplify — Three-Agent Code Review

/simplify spawns three parallel review agents focused on different lenses: code quality, reusability, and efficiency. Their findings are aggregated and applied to the code you specify. It's the closest thing to a real peer review you can get from a single tool.

💬 Example invocations
# Review your current open files
/simplify

# Focus on a specific aspect
/simplify focus on error handling

# Point at a specific file
/simplify src/auth/tokenManager.ts

Use it after you think a piece of code is done. The three-agent structure catches things a single review pass misses — one agent tends to focus on what you intended, while another is reading the code fresh and catching what you've gone blind to after staring at it.

/loop — Run a Prompt on an Interval

/loop runs a prompt repeatedly at a specified interval until you stop it or a condition is met. Useful for babysitting long-running processes without manually polling.

💬 Example invocations
# Check a deploy every 30 seconds
/loop 30 Check the deploy status at https://api.example.com/health and report if it's up

# Watch a build log for errors
/loop 10 tail -20 /var/log/build.log and alert me if you see any ERROR lines

# Monitor disk space during a large operation
/loop 60 Run df -h and warn me if any filesystem is above 85%

Stop the loop by sending /loop stop or just starting a new prompt. Particularly useful when running on a server via Discord — you can start a loop and walk away, getting notifications if something needs attention.

/debug — Self-Diagnosis

/debug reads Claude Code's own internal session debug log and helps you understand what's happening when something isn't working. Useful when:

  • A skill isn't appearing in the slash command menu
  • A hook isn't firing when you expect it to
  • Memory files don't seem to be loading
  • An API tool call is silently failing
  • The context window is behaving unexpectedly
💬 Example invocations
/debug

/debug my /status skill isn't showing up in the command menu

/debug the PreToolUse hook doesn't seem to be blocking Bash commands
Use this before asking for help. The debug log contains a lot of detail about exactly what loaded, what fired, and what failed. Running /debug with a description of your problem will usually surface the answer in seconds.

Checking What's Available

To see every skill currently loaded in your session, type:

💬 In your session
/help

This lists all available slash commands — built-in skills, community skills you've installed, and any custom skills you've written. If a skill you created isn't showing up here, check the file path and frontmatter (more in the Tips section).

To see what's consuming your context budget (relevant when you have many skills installed):

💬 In your session
/context

Skills compete for a context budget of about 16,000 characters (2% of the context window). If you have more skills than fit, Claude trims the least recently used. /context shows you exactly what made the cut and what didn't.

The Best Skills You Didn't Have to Write

The skills ecosystem has grown fast. There are now hundreds of published skills covering everything from React performance patterns to security audits to marketing copy. The best ones are battle-tested by thousands of users and handle edge cases you'd have to discover the hard way if you wrote them yourself. Here are the ones worth installing.

The npx skills CLI

The universal skill installer. Works across Claude Code, Cursor, Cline, and 40+ other AI tools — but we're focused on Claude Code here. Install a skill repo in one command:

☁️ AWS EC2 / 🖥️ Mini PC / 💻 Local Machine
# Install all skills from a repo globally (available in all projects)
npx skills add github.com/anthropics/skills -g

# Install a single skill from a repo
npx skills add github.com/anthropics/skills --skill frontend-design -g

# Preview what's in a repo before installing
npx skills add github.com/anthropics/skills --list

# Install to current project only (no -g flag)
npx skills add github.com/anthropics/skills --skill webapp-testing

The -g flag installs to ~/.claude/skills/ (global, all projects). Without it, skills go to .claude/skills/ in your current directory (project-only, safe to commit).

Official Anthropic Skills

These ship from Anthropic's own repository. Maintained, tested, and worth having:

Install the full Anthropic library
npx skills add github.com/anthropics/skills -g
pdf / docx/ xlsx / pptx
Document generation skills. /pdf extracts, creates, merges, and OCRs PDFs. /docx creates Word documents with real formatting. /xlsx builds spreadsheets with formulas. /pptx generates PowerPoint decks. Each handles the file format complexity so you can just describe what you want.
frontend-design
Prevents generic AI-generated interfaces. Enforces bold aesthetic choices, bans overused patterns (stock photography, generic hero sections, gradient-on-white cards), and pushes for design that actually looks like a person made it. Activate when building any UI.
webapp-testing
Tests local web apps using real browser interactions via Playwright. Run it against your running dev server and it will click through flows, fill forms, verify states, and report what's broken. Much more useful than asking Claude to guess at behavior from reading code.
skill-creator
Meta-skill that helps you build skills. Runs an interactive Q&A about your workflow, then generates a complete SKILL.md. Good starting point if you know what you want a skill to do but aren't sure how to structure it.

Vercel Agent Skills

The most-installed community skills library. Focused on frontend and web development:

Install Vercel skills
npx skills add github.com/vercel-labs/agent-skills -g
vercel-react-best-practices
176,000+ installs. 57 rules covering React and Next.js performance — memoization, bundle splitting, render patterns, hydration issues. Activates automatically when working in React files, or invoke manually with /vercel-react-best-practices.
web-design-guidelines
137,000+ installs. Audits UI code against 100+ accessibility and UX standards. Covers WCAG compliance, color contrast ratios, tap target sizes, focus management, and screen reader compatibility. Point it at a component and get actionable fixes.

obra/superpowers — Multi-Agent Dev Workflow

The most complete development workflow skill library. Built around the idea that planning and execution should be separate phases, with subagents handling implementation.

Install obra/superpowers
npx skills add obra/superpowers -g
/brainstorm
Structured ideation. Frames the problem, generates approaches from multiple angles, and outputs ranked options with trade-offs. More useful than open-ended "what should I do?" — it forces the agent to be exhaustive.
/write-plan
Creates a git worktree, writes a detailed implementation plan to a plan file, and presents it for review before touching any code. Pairs with /execute-plan.
/execute-plan
Picks up the plan written by /write-plan and executes it with TDD enforcement. Tests get written first, then implementation, then review. The agent can't mark work complete until tests pass.

trailofbits/skills — Security Audit

Professional-grade security audit methodology from Trail of Bits, the security research firm. Particularly relevant if you're running a server exposed to the internet (which you are if you followed the EC2 tutorial).

Install Trail of Bits skills
npx skills add trailofbits/skills -g

Covers CodeQL and Semgrep analysis, structured code auditing methodology, and variant analysis (finding all instances of a class of vulnerability, not just the one you spotted). Run it against your OpenClaw configuration and server setup — you may find things.

Installing via the Plugin Marketplace

The /plugin command opens the official Anthropic marketplace directly in your session. Some of the highest-value plugins for this audience:

💬 In your session
# Browse the marketplace
/plugin

# Install directly if you know the plugin name
/plugin install typescript-lsp@claude-plugins-official
/plugin install github@claude-plugins-official
/plugin install commit-commands@claude-plugins-official
LSPplugins
Real-time diagnostics, go-to-definition, and find-references for your language. typescript-lsp, pyright-lsp, gopls-lsp, rust-analyzer-lsp. If you write code in any of these languages, install the LSP plugin. It's the difference between Claude guessing at types and Claude knowing the types.
githubplugin
Native GitHub integration — pull request creation, issue management, code review, branch operations. Replaces gh CLI calls with natural language. "Create a PR for my current branch targeting main with these changes" just works.
commit-commands
Adds /commit with conventional commit formatting, /pr for structured pull request creation, and /changelog for release notes. Small skill, high daily-use value if you're in a Git workflow.
Plugins vs. skills: Skills are standalone Markdown files you install manually or via npx skills. Plugins bundle skills, hooks, and MCP server connections into a single installable package from the marketplace. Functionally similar from your perspective — both add slash commands — but plugins can also wire in external services that plain skills can't.

Build Skills That Actually Fit Your Workflow

Community skills handle general use cases well. Your specific workflow — your server setup, your deployment process, your daily rituals — requires skills you write yourself. This section covers the SKILL.md format in detail, then walks through building two practical skills for OpenClaw users: a server health check and a deployment pre-flight.

SKILL.md Frontmatter Reference

The frontmatter block (the --- section at the top) controls how and when your skill gets used. Most fields are optional — the body text is the only strict requirement. Here are the ones that matter most:

descriptionimportant
What this skill does, in plain English. Claude reads this to decide whether to auto-invoke the skill when it seems relevant. Write it like you'd describe the skill to a colleague: "Check OpenClaw gateway, Docker containers, disk, and memory and return a one-page health summary."
argument-hint
Text shown in the autocomplete dropdown when you type the slash command. Use it to indicate expected input: [service-name], [branch], [ticket-number]. Purely cosmetic but saves you from forgetting what a skill expects.
disable-model-invocation
Set to true to prevent Claude from invoking this skill automatically. Only you can trigger it with the slash command. Use this for anything sensitive or disruptive — deployment scripts, destructive operations, anything that should require conscious intent to run.
allowed-tools
List of tools Claude may use without asking for permission while this skill is active. Comma-separated: Bash, Read, Glob. Scope it tightly — only list what the skill actually needs. This is a trust grant specific to this skill's execution.
context: fork
Runs the skill in an isolated subagent context, separate from your main session. The subagent completes its work and reports back — your main session context stays clean. Good for longer-running skills with a lot of intermediate tool output.
📝 Full frontmatter example
---
name: deploy-check
description: Run pre-deployment checks — tests, lint, env vars, disk space
argument-hint: [environment]
disable-model-invocation: true
allowed-tools: Bash, Read
context: fork
---

Your skill instructions here...

Dynamic Content: Arguments and Shell Injection

Skills aren't static documents — they can pull in live data and accept arguments:

$ARGUMENTS
Everything typed after the skill name. If you type /status prod, then $ARGUMENTS is prod and $ARGUMENTS[0] is also prod. Use $ARGUMENTS[1] for the second word.
!`command`
Shell injection — runs at skill load time, before Claude sees the prompt. The output gets substituted inline. Use this to pull in live data your skill needs: recent git log, current branch, environment state, API response. The agent receives the result as if you had typed it.
📝 Arguments and shell injection example
---
description: Summarize recent changes on the current branch
argument-hint: [branch-name]
allowed-tools: Bash(git *)
---

Branch: !`git branch --show-current`
Recent commits: !`git log --oneline -10`
Diff summary: !`git diff --stat HEAD~5`

Summarize what changed in the last 5 commits.
Target environment: $ARGUMENTS

When this skill runs, Claude receives the actual branch name, the real commit list, and the real diff stats — not a request to go find them. The skill front-loads the research.

Worked Example: /status

A server health check skill built specifically for OpenClaw users. One command gives you a full picture of your server state: gateway, Docker, disk, memory, and recent logs. This skill lives in your global ~/.claude/skills/ directory so it's available everywhere.

☁️ AWS EC2 / 🖥️ Mini PC — create the skill
mkdir -p ~/.claude/skills/status
nano ~/.claude/skills/status/SKILL.md
📝 ~/.claude/skills/status/SKILL.md
---
description: Full server health check — OpenClaw gateway, Docker, disk, memory, and recent error logs
allowed-tools: Bash
disable-model-invocation: true
---

Run each of the following checks and compile a clear health report:

## 1. OpenClaw Gateway
Run: `openclaw status`
Report: running/stopped, uptime, version if available

## 2. Docker Containers
Run: `docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"`
Report: which containers are up, which are down or restarting

## 3. Disk Usage
Run: `df -h --output=source,size,used,avail,pcent | grep -v tmpfs`
Report: flag any filesystem above 80% usage

## 4. Memory
Run: `free -h`
Report: total, used, available RAM — flag if available drops below 1GB

## 5. Recent Errors
Run: `openclaw logs --tail 20 2>/dev/null || journalctl -u openclaw --since "1 hour ago" --no-pager -q 2>/dev/null`
Report: any ERROR or WARN lines from the last hour

---

Format the output as a short dashboard summary.
Use ✅ for healthy, ⚠️ for warning, ❌ for critical.
End with a one-line overall status: HEALTHY / DEGRADED / CRITICAL.

Type /status in any session and you get a formatted report in seconds. No flags to remember, no commands to look up, no mentally assembling the pieces yourself.

Extend it as you need it. Add a check for your specific services — if you're running Nginx, add systemctl status nginx. If you have a database, add a connection test. The skill grows with your infrastructure.

Worked Example: /deploy-check

A pre-flight checklist that runs before any deployment. Catches the things you always forget: uncommitted changes, failing tests, exposed environment variables, missing config keys. Scoped to a project directory, committed to git so your team inherits it.

💻 Inside your project directory
mkdir -p .claude/skills/deploy-check
nano .claude/skills/deploy-check/SKILL.md
📝 .claude/skills/deploy-check/SKILL.md
---
description: Pre-deployment checklist — git status, tests, env vars, and config validation
argument-hint: [staging|production]
allowed-tools: Bash, Read
disable-model-invocation: true
---

Target environment: $ARGUMENTS

Run each check and report pass ✅ / fail ❌:

## Git
- [ ] No uncommitted changes: `git status --short`
- [ ] On the correct branch for $ARGUMENTS deployment
- [ ] No merge conflicts: `git diff --check`

## Tests
- [ ] Run: `npm test 2>&1 | tail -20` (or your test command)
- [ ] All tests passing

## Environment
- [ ] .env file is NOT committed: `git ls-files .env`
- [ ] Required env vars present: `printenv | grep -E "^(DATABASE_URL|API_KEY|NODE_ENV)"`
  (update this list with your actual required vars)

## Disk & Memory
- [ ] Sufficient disk space: `df -h .`
- [ ] Sufficient memory: `free -h`

---

If any checks fail, stop and describe exactly what needs to be fixed before deploying.
Do not proceed past a failing check — the purpose of this skill is to catch problems, not confirm them.

Commit this file and everyone on your team has the same pre-deployment checklist. It also doubles as documentation — new team members learn your deployment requirements by reading the skill.

Commit the skill to your project
git add .claude/skills/deploy-check/SKILL.md
git commit -m "Add deploy-check skill for pre-deployment validation"

Skill Patterns to Steal

A few more patterns worth knowing as you build your own library:

Loada file
Include another file's content in your skill using shell injection: !`cat ~/.openclaw/docs/api-reference.md`. This is how you load deep reference content on-demand without keeping it in TOOLS.md permanently.
Conditionallogic
Use $ARGUMENTS to branch behavior: "If $ARGUMENTS is 'production', run the full checklist. If $ARGUMENTS is 'staging', skip the performance tests." The agent handles conditional logic from natural language instructions.
Subagenttasks
Add context: fork and agent: Explore to frontmatter to run your skill in a specialized subagent. The Explore agent is fast and optimized for reading and searching — good for skills that do a lot of codebase analysis before reporting back.

When Skills Don't Work and How to Fix Them

Skills are simple by design, but there are a handful of gotchas that catch most people. If a skill isn't showing up, isn't firing, or is behaving unexpectedly — the answer is almost always one of the things in this section.

My Skill Isn't Showing Up

Type /help in your session. If your skill isn't listed, work through this checklist:

Checkthe path
The file must be named exactly SKILL.md (capital letters) inside a directory inside skills/. The structure is ~/.claude/skills/my-skill/SKILL.md, not ~/.claude/skills/my-skill.md and not ~/.claude/skills/SKILL.md directly.

ls ~/.claude/skills/ should list directories, not files.
Checkthe budget
Skills share a context budget of approximately 16,000 characters (2% of the context window). If you have many skills installed, Claude will trim the least recently used to fit. Run /context to see what's loaded and what's been cut. If a critical skill keeps getting trimmed, add priority: high to its frontmatter.
Checkthe session
Skills are loaded at session start. If you added a skill while a session was already running, it won't appear until you start a new session. Exit with /exit and reconnect.
Checkuser-invocable
If the skill frontmatter has user-invocable: false, it's hidden from the /help menu intentionally — only the agent can trigger it automatically. Remove that line if you want it to appear as a slash command.
☁️ AWS EC2 / 🖥️ Mini PC — verify skill file structure
# Check your global skills directory
ls -la ~/.claude/skills/

# Each item should be a directory containing SKILL.md
ls -la ~/.claude/skills/status/

# File permissions — SKILL.md needs to be readable
chmod 644 ~/.claude/skills/status/SKILL.md

The Agent Isn't Using My Skill Automatically

Claude uses a skill automatically when the description frontmatter matches what you're asking about. If auto-invocation isn't working, the description probably isn't descriptive enough — or auto-invocation is disabled.

Bespecific
Vague: description: Server check
Better: description: Check OpenClaw gateway status, Docker container health, disk usage, and recent error logs

The more specific the description, the more reliably Claude connects "I should check on the server" to "I have a skill for exactly this."
Checkdisable flag
If disable-model-invocation: true is in the frontmatter, the agent will never invoke it automatically — only you can trigger it. This is intentional for sensitive skills, but remove it if you want the agent to use the skill on its own.

Shell Injection Isn't Running

The !`command` syntax runs the command at skill load time. If it's not executing:

Checkbackticks
The syntax is !`command` with backticks, not !'command' with single quotes or !"command" with double quotes. Easy to mix up.
Testthe command
Run the command in your shell manually first. If it errors in the terminal, it'll error silently in the skill. Make sure the command works, outputs text, and doesn't prompt for input.
Watch.zshrc output
If your ~/.zshrc or ~/.bashrc prints anything (welcome messages, prompts, colorized output), it can pollute the shell injection output. Wrap interactive output in a check: if [[ $- == *i* ]]; then echo "hello"; fi. Non-interactive shells should produce no output except what's intentional.

Managing a Growing Skill Library

Once you've built up a library of skills, a few practices keep it maintainable:

Nameclearly
Skill names become slash commands. s is a bad name. server-status is a good name. Use kebab-case, be specific, and don't worry about length — tab completion handles typing.
Personal vs.project
Keep personal workflow skills in ~/.claude/skills/ (health checks, daily routines, personal formatting preferences). Keep project-specific skills in .claude/skills/ inside the repo and commit them. Never commit skills with hardcoded personal paths or credentials.
Prunedead skills
Every skill description competes for context budget. Remove skills you don't use — they're wasting space that could go to skills you do use. rm -rf ~/.claude/skills/unused-skill/ and it's gone.
☁️ AWS EC2 / 🖥️ Mini PC — audit your installed skills
# List all global skills with their SKILL.md descriptions
for dir in ~/.claude/skills/*/; do
  name=$(basename "$dir")
  desc=$(grep "^description:" "$dir/SKILL.md" 2>/dev/null | head -1)
  echo "$name — $desc"
done

# Check total character count of all skill descriptions
wc -c ~/.claude/skills/*/SKILL.md | sort -rn | head -20

Useful Debug Commands

💬 In-session debugging
# List all currently loaded slash commands
/help

# See full context window breakdown (what's loaded, what's been trimmed)
/context

# Self-diagnose a skill loading or firing issue
/debug my /status skill isn't appearing

# Toggle verbose debug output (shows tool calls, hook executions, etc.)
Ctrl+O
Start with two skills. The /status health check and one workflow skill that matches your actual daily use — a deploy check, a standup template, a code review checklist. Use them for a week. You'll naturally discover what else you want. Build skills reactively, not speculatively, and your library will stay lean and genuinely useful.