my-skill — Claude Code skill: features and installation
my-skill outlines a skill’s structure, from metadata and arguments to injected command output and supporting files. Use it as a guide when shaping a custom skill.
npx skills add LukeRenton/explore-claude-code --skill my-skill -a claude-codeWhat my-skill does
This is a skill structure guide, not a set of instructions for a particular task. A SKILL.md file holds the name and description, followed by the instructions the agent receives. Optional settings can control argument hints, tool access, or whether the skill runs in an isolated subagent.
The guide covers positional argument substitutions and shell commands whose output is inserted before the skill content reaches Claude. Longer references, templates, and scripts can live in separate files linked by relative paths. Keep SKILL.md under 500 lines, with reference links no more than one level deep.
Install it in Claude Code with npx skills add LukeRenton/explore-claude-code --skill my-skill -a claude-code. The installed file is at ~/.claude/skills/my-skill/SKILL.md. One detail matters when passing arguments: if the content has no $ARGUMENTS placeholder, the supplied value is appended as ARGUMENTS: <value>.
What it helps with
- define instructions in a
SKILL.mdfile - address arguments by their position
- insert shell command output when the skill loads
- keep reference material and scripts in separate files
Example prompts for the agent
- Explain how to structure a
SKILL.mdfor my project. - Show me how to pass two arguments to a skill and refer to each one.
- Set up a substitution that inserts the changed-file list from
git diff --name-only.
How to install my-skill
1Skills CLI (Vercel)
npx skills add LukeRenton/explore-claude-code --skill my-skill -a claude-code2Manually: put the files in place
~/.claude/skills/my-skill/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/my-skill/
1Skills CLI (Vercel)
npx skills add LukeRenton/explore-claude-code --skill my-skill -a codex2Manually: put the files in place
.agents/skills/my-skill/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add LukeRenton/explore-claude-code --skill my-skill -a cursor2Manually: put the files in place
.cursor/skills/my-skill/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install LukeRenton/explore-claude-code my-skill2Manually: put the files in place
.github/skills/my-skill/SKILL.md1Skills CLI (Vercel)
npx skills add LukeRenton/explore-claude-code --skill my-skill -a gemini-cli2Platform CLI
gemini skills install https://github.com/LukeRenton/explore-claude-code --path site/content/.claude/skills/my-skillManually: put the files in place
.devin/skills/my-skill/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add LukeRenton/explore-claude-code --skill my-skill -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about my-skill
How do I install my-skill in Claude Code?
Run npx skills add LukeRenton/explore-claude-code --skill my-skill -a claude-code. The skill file is placed at ~/.claude/skills/my-skill/SKILL.md.
What does my-skill do?
It explains how to lay out a skill: its metadata, instruction body, argument substitutions, and supporting files. Use the guidance when creating or editing a skill.
What happens if a skill omits $ARGUMENTS?
The supplied value is added at the end of the skill content as ARGUMENTS: <value>. Positional values can instead be referenced with $ARGUMENTS[N] or $N.
Source text
SKILL.md · MIT
---
name: my-skill
description: What this skill does and when to use it. Claude reads this to decide relevance. Include keywords users would naturally say.
---
These two fields are the only ones required. `name` must be lowercase with hyphens, max 64 characters, and match the parent directory name. `description` is what Claude reads at startup to decide when the skill is relevant (max 1024 characters).
## Optional Frontmatter Fields
Add any of these to the `---` block above to customise behaviour:
| Field | Example | Purpose |
|---|---|---|
| `argument-hint` | `[issue-number]` | Hint shown during autocomplete to indicate expected arguments |
| `disable-model-invocation` | `true` | Prevent Claude from auto-loading. User must type `/name` explicitly. Use for deploys, sends, destructive ops |
| `user-invocable` | `false` | Hide from the `/` menu. Claude can still load it automatically. Use for background knowledge |
| `allowed-tools` | `Read, Grep, Bash(npm *)` | Tools Claude can use without asking permission. Space-delimited, supports patterns |
| `model` | `claude-sonnet-4-6` | Override the model when this skill is active. Useful for cost control |
| `context` | `fork` | Run in an [isolated subagent](^A separate Claude instance with its own context. The skill content becomes the subagent's system prompt). Skill content becomes the subagent's prompt |
| `agent` | `Explore` | Which subagent runs when `context: fork`. Built-in: `Explore`, `Plan`, `general-purpose`, or custom from `.claude/agents/` |
| `license` | `Apache-2.0` | License name or reference to a bundled LICENSE file |
| `compatibility` | `Requires git, docker` | Environment requirements (max 500 chars) |
| `metadata` | key-value pairs | Arbitrary metadata (author, version, etc.) |
---
# Body Content
Everything below the frontmatter is the instruction body. Claude reads this when the skill is activated. Write whatever helps Claude perform the task. There are no format restrictions.
Good body content includes:
- Step-by-step instructions for the task
- Examples of inputs and expected outputs
- Common edge cases and how to handle them
- References to supporting files in this skill folder
## String Substitutions
[Placeholders](^Variables in your SKILL.md that get replaced with real values before Claude sees the content) are replaced with real values before Claude sees the content:
| Placeholder | Resolves To |
|---|---|
| `$ARGUMENTS` | Everything the user typed after the skill name |
| `$ARGUMENTS[N]` or `$N` | A specific argument by index (0-based) |
| `${CLAUDE_SESSION_ID}` | The current session ID |
| `${CLAUDE_SKILL_DIR}` | Path to this skill's directory |
Example: `/my-skill SearchBar React Vue` gives `$0` = "SearchBar", `$1` = "React", `$2` = "Vue".
If `$ARGUMENTS` is not present in the content, arguments are appended as `ARGUMENTS: <value>`.
## Dynamic Context Injection
The `!` backtick syntax runs shell commands before the content reaches Claude. Output replaces the placeholder:
- PR diff: `` !`gh pr diff` ``
- Dependencies: `` !`cat package.json | jq .dependencies` ``
- Changed files: `` !`git diff --name-only` ``
This is [preprocessing](^The commands run at skill load time, not during conversation. Claude only sees the final output, not the commands themselves). Claude only sees the final output, not the commands.
---
# Supporting Files
Keep SKILL.md under 500 lines. Move detailed material to separate files and reference them from the body:
- [references/REFERENCE.md](references/REFERENCE.md): Detailed documentation loaded on demand
- [assets/template.md](assets/template.md): Templates and static resources
- [scripts/helper.sh](scripts/helper.sh): Executable code Claude can run
Use relative paths from SKILL.md. Keep references one level deep. Navigate into these folders to learn more about each.
© LukeRenton · MIT · LukeRenton/explore-claude-code