How to Create a Custom Slash Command to Invoke a Skill in Claude Financial Services
Create a markdown file in plugins/vertical-plugins/<vertical>/commands/<name>.md with YAML frontmatter declaring the description and argument hint, followed by a directive to load the target skill, and commit it—no build step or code changes required.
The anthropics/financial-services repository implements a plugin architecture where slash commands act as the primary entry point for triggering specific skills within Claude Cowork sessions. These commands are declarative markdown files that map user input (e.g., /tlh) to skill implementations without requiring compilation or deployment. This guide explains the exact file structure, content format, and registration process needed to create a working custom slash command.
Understanding the Command Architecture
In the financial-services framework, commands and skills are decoupled components connected by convention-based file paths. The runtime discovers commands by scanning the commands/ directory within each vertical plugin.
The architecture follows this flow:
- User input: Typing
/command-namein the chat interface - File resolution: The runtime locates
plugins/vertical-plugins/<vertical>/commands/command-name.md - Manifest parsing: The YAML frontmatter provides metadata (description, argument hints)
- Skill delegation: The markdown body instructs the system to load a specific skill from
plugins/vertical-plugins/<vertical>/skills/<skill-name>/SKILL.md - Execution: The skill logic runs with any provided arguments streamed back to the user
This design means adding a new command is purely a file-creation operation.
Step-by-Step: Creating a Custom Slash Command
1. Create the Command Definition File
Navigate to your vertical's commands directory (e.g., plugins/vertical-plugins/wealth-management/commands/) and create a new markdown file. The filename determines the command name—quick-review.md creates the /quick-review command.
Every command file requires two sections:
- YAML frontmatter: Contains
descriptionand optionalargument-hint - Body content: Contains the instruction to load the specific skill
---
description: Run a quick client review
argument-hint: "[client name]"
---
Load the `client-review` skill to generate a concise review of the indicated client’s portfolio.
The runtime parses the frontmatter to populate UI help text, while the body text triggers the skill resolution.
2. Verify the Skill Implementation Path
Ensure the skill referenced in your command file exists at the expected path:
plugins/vertical-plugins/<vertical>/skills/<skill-name>/SKILL.md
For the example above, the file must exist at:
plugins/vertical-plugins/wealth-management/skills/client-review/SKILL.md
The skill file itself contains its own YAML frontmatter declaring arguments it accepts:
---
description: Prepare a client-review briefing pack
arguments:
- client
- account
---
... (skill logic) ...
The runtime automatically maps arguments from the slash command invocation to the skill's declared parameters.
3. Register the Vertical Plugin
Confirm that your vertical contains a valid plugin manifest at:
plugins/vertical-plugins/<vertical>/.claude-plugin/plugin.json
This JSON file registers the vertical with the runtime, enabling discovery of its commands and skills subdirectories. Without this manifest, the commands directory will not be scanned.
4. Update the Marketplace Documentation (Optional)
To surface the new command in the plugin catalog, add an entry to the top-level README.md in the "Vertical Plugins" table:
| Plugin | What it adds |
|---|---|
| **[wealth-management](plugins/vertical-plugins/wealth-management)** | `/quick-review` – fast client review, `/tlh` – tax-loss harvesting |
After committing changes, run the repository lint script to validate the manifest:
python3 scripts/check.py
Working Examples from the Repository
The wealth-management vertical provides two canonical implementations demonstrating this pattern.
Tax-Loss Harvesting Command
File: plugins/vertical-plugins/wealth-management/commands/tlh.md
This command loads the tax-loss-harvesting skill. It demonstrates standard frontmatter structure and concise skill invocation.
Portfolio Rebalance Command
File: plugins/vertical-plugins/wealth-management/commands/rebalance.md
This command invokes the portfolio-rebalance skill, showing how commands map to distinct skill implementations within the same vertical.
Both files follow the identical structure: YAML metadata followed by a single-line instruction to load the corresponding skill by exact folder name.
Summary
- Custom slash commands are markdown files placed in
plugins/vertical-plugins/<vertical>/commands/<name>.md - Each command requires YAML frontmatter with
descriptionand optionalargument-hint - The file body must contain
Load the \` skill` to trigger the correct implementation - Skills reside at
plugins/vertical-plugins/<vertical>/skills/<skill-name>/SKILL.md - No build step or application restart is required—commands are active immediately upon commit
- Update
README.mdand runpython3 scripts/check.pyto publish the command to the marketplace
Frequently Asked Questions
Do slash commands support passing arguments to skills?
Yes. Include an argument-hint in the command file's YAML frontmatter (e.g., argument-hint: "[client name]"). When users type /quick-review Alice, the runtime passes "Alice" to the skill's declared arguments list as defined in the skill's own SKILL.md frontmatter.
Can one slash command invoke multiple skills?
No. Each command file targets exactly one skill via the Load the \` skill` directive. To chain multiple operations, create a composite skill that orchestrates sub-tasks, or create separate slash commands for each discrete skill.
What happens if the skill folder name does not match the command file reference?
The runtime will fail to resolve the skill and return an error. The skill name inside the command file's body (the text between the backticks after Load the) must exactly match the folder name containing SKILL.md under the skills/ directory, including hyphenation and casing.
Is a plugin manifest required for every vertical?
Yes. Each vertical must contain a plugin.json file at plugins/vertical-plugins/<vertical>/.claude-plugin/plugin.json. This manifest registers the vertical with the Claude Cowork platform, enabling the runtime to discover and index its commands and skills directories.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →