Slash commands vs skills in Claude Code
Definitie
Claude Code kent twee soorten herbruikbare gedragspatronen: slash commands (~/.claude/commands/) zijn gebruikers-getriggerde prompt-templates die Claude uitvoert bij het typen van /naam, en skills (~/.claude/skills/) zijn Claude-getriggerde reference-documenten die Claude zelf aanroept wanneer een taak matcht met de skill-description.
Context
Bij het bouwen van de project-handoff skill was het niet meteen duidelijk hoe je een skill via een /commando kon aanroepen. De reden: dat kan niet direct. Je maakt een slash command die de skill aanroept als tussenlaag. Dit onderscheid is belangrijk om de tooling bewust in te zetten.
Kernpunten
Slash commands
- Locatie:
~/.claude/commands/*.md - Frontmatter: geen verplichte; de body is een prompt-template
- Aanroep: gebruiker typt
/commando-naam [arguments] - Argumenten:
$ARGUMENTSin de body wordt vervangen door wat de gebruiker na het commando typt - Gebruik: Claude krijgt de body als system-injected instructie en voert hem uit
- Goed voor: herhaalbare prompts, korte workflows, argument-gebaseerde taken (research, factcheck, transcript)
Skills
- Locatie:
~/.claude/skills/naam/SKILL.md(mag ook symlink zijn) - Frontmatter: verplicht
nameendescription(onder 1024 chars, description begint met “Use when…“) - Aanroep: Claude zelf besluit de skill te laden via de Skill tool wanneer de taak matcht met de description
- Argumenten: geen; context komt uit de conversation
- Gebruik: skill wordt geladen, Claude volgt de workflow erin
- Goed voor: complexe workflows, discipline-afdwingende regels, reference documenten
Hoe combineer je ze
Als je een skill via /commando wil laten triggeren: maak een slash command die in de body verwijst naar de skill en de workflow beknopt beschrijft. Voorbeeld:
# ~/.claude/commands/project-handoff.md
Genereer een project handoff voor: $ARGUMENTS (default: cwd).
Roep de `project-handoff` skill aan en volg de workflow uit
`~/.claude/skills/project-handoff/SKILL.md`.Claude krijgt dan het commando binnen, leest de skill, en volgt de workflow. Het beste van beide: gebruiker triggert expliciet, skill bepaalt het hoe.
Waarom niet alles als command schrijven
Slash commands zijn statische prompt-templates. Ze hebben geen test-flow, geen pressure scenarios, geen versioning via frontmatter. Voor simpele herhalingen prima. Voor disciplinair gedrag (secrets filter, TDD, verificatie-voor-klaar) wil je een skill met expliciete red flags en rationalization table.
Waarom niet alles als skill schrijven
Skills worden automatisch door Claude geladen op basis van description-matching. Dat maakt ze reactief op conversatie-inhoud. Als je expliciete gebruikers-controle wil (alleen uitvoeren als iemand typt /commando), is een slash command beter.
In plugins: commands/ en skills/ parallel
Een Claude Code plugin heeft zijn eigen commands/ en skills/ mappen, los van de user-level ~/.claude/commands/ en ~/.claude/skills/. De plugin-structuur:
mijn-plugin/
.claude-plugin/
plugin.json
commands/
foo.md -- slash command, invocable als /foo
bar.md
skills/
foo/SKILL.md -- skill, auto-triggered op description
bar/SKILL.md
Plugin-skills en plugin-commands zijn alleen beschikbaar wanneer de plugin geïnstalleerd is. Ze worden niet gekopieerd naar ~/.claude/; ze blijven in de plugin-map en worden door Claude Code uit die context geladen.
Valkuil: commando’s die na refactor verdwijnen
Als je tijdens development een commands/foo.md vervangt door een volwaardige skills/foo/SKILL.md, werkt de skill wel (auto-trigger) maar werkt /foo niet meer. Voor externe gebruikers die de README lezen en /foo verwachten is dat een regressie. Dit overkwam eindredacteur tussen v0.3.0 en v0.4.0: skills waren uitgebreid naar 13 stuks maar de oude commands/ was leeggemaakt zonder de README aan te passen.
Thin wrapper pattern
Als je wil dat een plugin zowel /foo als auto-trigger ondersteunt, schrijf een minimale command-wrapper die naar de skill verwijst via ${CLAUDE_PLUGIN_ROOT}:
---
description: <overgenomen uit de skill>
allowed-tools: <overgenomen uit de skill>
---
Voer de `foo` skill uit: `${CLAUDE_PLUGIN_ROOT}/skills/foo/SKILL.md`.
Volg de werkvolgorde, regels en outputformat exact zoals daar beschreven staan.${CLAUDE_PLUGIN_ROOT} is een runtime-variabele die Claude Code vult met het absolute pad naar de geïnstalleerde plugin. Het wrapper-bestand bevat geen gedupliceerde workflow-inhoud, alleen de opdracht om de skill te laden. De skill blijft de single source of truth voor het gedrag; het commando is puur een alternatieve invocatie-laag.
Dit patroon schaalt: 13 commands voor 13 skills betekent 13 thin wrappers van elk ~10 regels. Onderhoud concentreert zich in de skill-bestanden. Voor eindredacteur v0.4.1 is dit patroon gebruikt voor alle journalistieke skills (/eindredactie, /transcriptie, /kopij-check, /koppen, /herschrijf, /interviewprep, /invalshoek, /itemsheet, /script, /montage, /sum-aiauth, /sumai, /leguit).
README documentatie-conventie
Noem in de README expliciet dat zowel slash commands als skill-triggers werken, bijvoorbeeld:
De functies zijn aanroepbaar als slash command (
/eindredactie) of triggeren automatisch wanneer een matchende opdracht gegeven wordt (“beoordeel dit artikel”).
Zonder die regel raakt een externe gebruiker verward: de commando’s in de README zijn dan een subset van de werkelijke invocatie-mogelijkheden.
Verbanden
- Zie ook: wiki-tdd-claude-code-skills
- Zie ook: wiki-agent-entrypoint-conventies
- Zie ook: wiki-pre-publicatie-checklist-github (blok 4: README matcht werkelijkheid, precies waar het wrapper-patroon van pas komt)
- Zie ook: wiki-eindredacteur-plugin (concreet voorbeeld van 13 commands + 13 skills parallel)
- Gerelateerd project: project-handoff-skill
- Gerelateerd project: eindredacteur
Bronnen
- Claude Code docs. (2026). Slash commands and skills. https://code.claude.com/docs/en/overview