claudekit
Version:
CLI tools for Claude Code development workflow
129 lines (96 loc) • 4.31 kB
Markdown
description: Create a new Claude Code slash command with full feature support
category: claude-setup
allowed-tools: Write, Read, Bash(mkdir:*)
argument-hint: "[command-name] [description]"
Create a new Claude Code slash command based on the user's requirements: $ARGUMENTS
For complete slash command documentation, see: https://docs.anthropic.com/en/docs/claude-code/slash-commands
First, ask the user to specify the command type:
- **project** - Add to current project's `.claude/commands/` directory (shared with team)
- **personal** - Add to user's `~/.claude/commands/` directory (personal use only)
If the user doesn't specify, ask which type to create.
Then gather the following information from the user:
- Command name
- Description
- Command content/template
- Any required tools (for frontmatter)
- Whether to use arguments, bash commands, or file references
## Command Template Structure
### YAML Frontmatter
Commands use standardized frontmatter that follows Claude Code's official schema:
```yaml
# Required field:
description: Brief description of what the command does
# Security control (highly recommended):
allowed-tools: Read, Write, Bash(git:*) # Specify allowed tools
# Optional fields:
argument-hint: "<feature-name>" # Help text for expected arguments
model: sonnet # opus, sonnet, haiku, or specific model
category: workflow # workflow, ai-assistant, or validation
```
### Security with allowed-tools
The `allowed-tools` field provides granular security control:
- Basic: `allowed-tools: Read, Write, Edit`
- Restricted bash: `allowed-tools: Bash(git:*), Read` # Only git commands
- Multiple restrictions: `allowed-tools: Read, Write, Bash(npm:*, git:*)`
## Features to Support
When creating the command, support these Claude Code features if requested:
**Arguments:** If the user wants dynamic input, use `$ARGUMENTS` placeholder
- Example: `/deploy $ARGUMENTS` where user types `/deploy production`
**Bash Execution:** If the user wants command output, use exclamation mark (!) prefix
- Example: `!pwd > /dev/null 2>&1` or `!ls -la > /dev/null 2>&1` to include command output
- **Performance tip**: Combine related commands with `&&` for faster execution
- Example: `!pwd > /dev/null 2>&1 && ls -la 2>/dev/null | head -5 > /dev/null`
**File References:** If the user wants file contents, use `@` prefix
- Example: `@package.json` to include package.json contents
**Namespacing:** If the command name contains `:`, create subdirectories
- Example: `/api:create` → `.claude/commands/api/create.md`
## Implementation Steps
1. **Determine Location**
- If command type not specified, ask the user (project vs personal)
- For project commands: create `.claude/commands/` directory if needed
- For personal commands: create `~/.claude/commands/` directory if needed
- Create subdirectories for namespaced commands (e.g., `api/` for `/api:create`)
2. **Create Command File**
- Generate `{{COMMAND_NAME}}.md` file in the appropriate directory
- Include YAML frontmatter if the command needs specific tools
- Add the command content with any placeholders, bash commands, or file references
- Ensure proper markdown formatting
3. **Show the User**
- Display the created command file path
- Show how to invoke it with `/{{COMMAND_NAME}}`
- Explain any argument usage if `$ARGUMENTS` is included
- Provide a brief example of using the command
## Command Content Guidelines
Key principle: Write instructions TO the AI agent, not as the AI agent. Use imperative, instructional language rather than first-person descriptions of what the agent will do.
### Example Command Templates
**Simple Command:**
```markdown
description: Create a React component
allowed-tools: Write
Create a new React component named $ARGUMENTS
Component template:
\```tsx
import React from 'react';
export const $ARGUMENTS: React.FC = () => {
return <div>$ARGUMENTS Component</div>;
};
\```
```
**Command with Bash and File Analysis:**
```markdown
description: Analyze dependencies
allowed-tools: Read, Bash(npm:*, yarn:*, pnpm:*)
Current dependencies:
@package.json
Outdated packages:
!npm outdated 2>/dev/null || echo "No outdated packages"
Suggest which packages to update based on the above information.
```