claude/skills/claude-cli/SKILL.md
Use claude CLI for interactive AI sessions, scripting with print mode, MCP server management, and plugin configuration. Master session management, tool control, and automation workflows.
npx skillsauth add lanej/dotfiles claude-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a specialist in using the claude CLI (Claude Code). This skill provides comprehensive workflows, best practices, and common patterns for interactive sessions, scripting, MCP management, and automation.
The claude CLI is the command-line interface for Claude Code that provides:
# Start interactive session
claude
# Start with a prompt
claude "explain this codebase"
# Continue last conversation
claude --continue
claude -c
# Resume specific session
claude --resume
claude -r SESSION_ID
# Fork a session (new ID, same history)
claude --resume SESSION_ID --fork-session
# Single response, then exit
claude --print "what is rust?"
claude -p "explain async/await"
# Pipe input
echo "explain this code" | claude -p
# Pipe output
claude -p "list all rust files" | grep "src/"
# JSON output for parsing
claude -p --output-format json "summarize this"
# Streaming JSON (realtime)
claude -p --output-format stream-json "analyze logs"
# Continue most recent session
claude --continue
claude -c
# Continue and fork (new session ID)
claude -c --fork-session
# Interactive selection
claude --resume
claude -r
# Specific session ID
claude -r abc123-def456-789
# Resume and fork
claude -r abc123 --fork-session
# Use specific UUID
claude --session-id 12345678-1234-1234-1234-123456789abc
# Use Sonnet (default)
claude --model sonnet
# Use Opus
claude --model opus
# Use Haiku
claude --model haiku
# Specific version
claude --model claude-sonnet-4-5-20250929
claude --model claude-opus-4-20250514
claude --model claude-haiku-4-20250430
# Fallback to Haiku if Sonnet overloaded
claude -p --fallback-model haiku "analyze this"
# Only specific tools
claude -p --tools "Bash,Read,Edit" "refactor code"
# Default tools
claude -p --tools default "write function"
# No tools (chat only)
claude -p --tools "" "explain concept"
# Allow specific tool patterns
claude --allowed-tools "Bash(git:*)" "commit changes"
claude --allowed-tools "Bash(npm:*),Read,Edit" "update package"
# Disallow tools
claude --disallowed-tools "Bash(rm:*)" "clean directory"
claude --disallowed-tools "Write" "analyze code"
# Multiple patterns
claude --allowed-tools "Bash(git:*)" "Bash(cargo:*)" "rust workflow"
# Replace default system prompt
claude --system-prompt "You are a Rust expert. Focus on idiomatic code."
# Append to default
claude --append-system-prompt "Always explain your reasoning."
# Auto-accept edits (no confirmation)
claude --permission-mode acceptEdits
# Bypass all permissions
claude --permission-mode bypassPermissions
# Plan mode (planning workflow)
claude --permission-mode plan
# Default (normal confirmations)
claude --permission-mode default
# Skip ALL permission checks (use in sandboxes only)
claude --dangerously-skip-permissions
# Allow skipping as an option (not default)
claude --allow-dangerously-skip-permissions
# List configured servers
claude mcp list
# Add HTTP server
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
# Add SSE server
claude mcp add --transport sse asana https://mcp.asana.com/sse
# Add stdio server
claude mcp add --transport stdio myserver npx -y my-mcp-server
# Add with environment variables
claude mcp add --transport stdio airtable \
--env AIRTABLE_API_KEY=YOUR_KEY \
-- npx -y airtable-mcp-server
# Add stdio server from JSON
claude mcp add-json myserver '{"command":"node","args":["server.js"]}'
# Add SSE server from JSON
claude mcp add-json sse-server '{"url":"https://example.com/sse"}'
# Import all MCP servers from Claude Desktop
claude mcp add-from-claude-desktop
# Import specific server
claude mcp add-from-claude-desktop --name myserver
# Remove server
claude mcp remove myserver
# Show configuration
claude mcp get myserver
# Reset approved/rejected project-scoped servers
claude mcp reset-project-choices
# Load MCP from config file
claude --mcp-config config.json
# Load from JSON string
claude --mcp-config '{"myserver":{"command":"node","args":["server.js"]}}'
# Multiple configs
claude --mcp-config config1.json config2.json
# Strict mode (only use specified config)
claude --strict-mcp-config --mcp-config config.json
IMPORTANT: Project-specific MCP servers belong in a .mcp.json file at the project root.
Create .mcp.json in your project root with this structure:
{
"mcpServers": {
"server-name": {
"command": "npx",
"args": ["-y", "package-name"],
"env": {
"API_KEY": "value"
}
}
}
}
Node.js MCP server:
{
"mcpServers": {
"myserver": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"API_KEY": ""
}
}
}
}
Python/uvx MCP server:
{
"mcpServers": {
"knowledge_base": {
"command": "uvx",
"args": [
"chroma-mcp",
"--client-type",
"persistent",
"--data-dir",
"/path/to/data"
],
"env": {
"ANONYMIZED_TELEMETRY": "false"
}
}
}
}
Language server integration:
{
"mcpServers": {
"gopls": {
"command": "/path/to/mcp-language-server",
"args": ["--workspace", ".", "--lsp", "gopls", "--", "-mode=stdio"],
"transport": "stdio"
}
}
}
Docker/Podman container:
{
"mcpServers": {
"github": {
"command": "podman",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "your-token"
}
}
}
}
Multiple servers in one project:
{
"mcpServers": {
"git": {
"command": "uvx",
"args": ["mcp-server-git"]
},
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
},
"gdrive": {
"command": "gdrive",
"args": ["mcp", "stdio"]
}
}
}
When Claude CLI runs in a project directory:
# Automatically detects and loads .mcp.json
claude
# View which servers are loaded
claude mcp list
# Reset project server approvals
claude mcp reset-project-choices
Key Points:
.mcp.json at project rootenv)If your .mcp.json contains secrets, create a template:
# .mcp.json.example (commit this)
{
"mcpServers": {
"myserver": {
"command": "node",
"args": ["./dist/index.js"],
"env": {
"API_KEY": "your-api-key-here"
}
}
}
}
# .gitignore
.mcp.json
Then developers copy .mcp.json.example to .mcp.json and add their credentials.
# Browse marketplace
claude plugin marketplace
# Install from default marketplace
claude plugin install my-plugin
# Install from specific marketplace
claude plugin install my-plugin@my-marketplace
claude plugin uninstall my-plugin
claude plugin remove my-plugin
# Disable plugin
claude plugin disable my-plugin
# Enable plugin
claude plugin enable my-plugin
# Validate plugin manifest
claude plugin validate /path/to/plugin/
# Load plugins from custom directory
claude --plugin-dir /path/to/plugins/
# Multiple directories
claude --plugin-dir dir1/ dir2/
# Load from file
claude --settings /path/to/settings.json
# Load from JSON string
claude --settings '{"verbose":true,"model":"opus"}'
# Only user settings
claude --setting-sources user
# User and project settings
claude --setting-sources user,project
# All sources (user, project, local)
claude --setting-sources user,project,local
# Allow access to extra directories
claude --add-dir /path/to/data/
# Multiple directories
claude --add-dir /data/ /cache/ /logs/
# Plain text response
claude -p "summarize file.txt"
# Single JSON result
claude -p --output-format json "analyze code"
# Parse with jq
claude -p --output-format json "list issues" | jq '.response'
# Real-time streaming
claude -p --output-format stream-json "long analysis"
# Include partial messages
claude -p --output-format stream-json --include-partial-messages "task"
# Text input (default)
echo "prompt" | claude -p
# Streaming JSON input
cat input.jsonl | claude -p --input-format stream-json
# Replay user messages (for acknowledgment)
cat input.jsonl | claude -p \
--input-format stream-json \
--output-format stream-json \
--replay-user-messages
# Enable all debug output
claude --debug
# Filter debug categories
claude --debug "api,hooks"
# Exclude categories
claude --debug "!statsig,!file"
# Debug with print mode
claude -p --debug "test prompt"
# Override verbose setting
claude --verbose
# Auto-connect to IDE on startup
claude --ide
# Run doctor to check auto-updater
claude doctor
# Check for updates and install
claude update
# Install stable version
claude install stable
# Install latest version
claude install latest
# Install specific version
claude install 1.2.3
# Setup long-lived auth token
claude setup-token
# Migrate from global npm to local install
claude migrate-installer
# Analyze file and exit
claude -p "summarize errors in app.log"
# Pipe to other tools
claude -p "extract function names from code.rs" | sort | uniq
# JSON output for parsing
result=$(claude -p --output-format json "count TODO comments")
count=$(echo "$result" | jq -r '.response')
echo "Found $count TODOs"
# Only allow git operations
claude --allowed-tools "Bash(git:*)" -p "show recent commits"
# Disallow destructive operations
claude --disallowed-tools "Bash(rm:*)" "Bash(mv:*)" "clean project"
# Specialized code reviewer
claude --system-prompt "You are a security-focused code reviewer. \
Look for vulnerabilities, SQL injection, XSS, and auth issues." \
"review authentication.py"
# Resume session and fork for experimentation
claude -r abc123 --fork-session
# Try different approach without affecting original
claude -c --fork-session
# Add custom MCP server
claude mcp add --transport stdio mytools npx -y my-tools-server
# Test in session
claude "use mytools to analyze data"
# Remove if not needed
claude mcp remove mytools
# Create .mcp.json in project root
cat > .mcp.json <<'EOF'
{
"mcpServers": {
"git": {
"command": "uvx",
"args": ["mcp-server-git"]
},
"sequential-thinking": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-sequential-thinking"]
}
}
}
EOF
# Start claude - automatically detects .mcp.json
claude
# Approve project servers when prompted
# Servers are now available for this project only
# Reset approvals if needed
claude mcp reset-project-choices
# Install plugin
claude plugin install code-analyzer
# Use in session
claude "analyze code quality with code-analyzer"
# Disable temporarily
claude plugin disable code-analyzer
# Process multiple prompts
cat prompts.jsonl | claude -p \
--input-format stream-json \
--output-format stream-json > results.jsonl
# Try Sonnet, fall back to Haiku if overloaded
claude -p --model sonnet --fallback-model haiku "analyze data"
# Safe sandbox with no permissions needed
claude -p --dangerously-skip-permissions --tools "Read" "analyze code"
# Good - print mode for automation
claude -p "count errors" | wc -l
# Avoid - interactive for scripts
claude "count errors" # Waits for user input
# Restrict tools in production scripts
claude -p --tools "Read,Grep" "find pattern"
# Disallow dangerous operations
claude --disallowed-tools "Bash(rm:*)" "cleanup task"
# Easy to parse
claude -p --output-format json "analyze" | jq '.response'
# Harder to parse
claude -p "analyze" # Mixed output
# Keep original session intact
claude -r session-id --fork-session
# Experiment without fear
# Production scripts should handle overload
claude -p --fallback-model haiku "critical task"
# See relevant debug info only
claude --debug "api,mcp" "test mcp server"
# Exclude noisy categories
claude --debug "!statsig,!analytics" "run workflow"
# List before adding
claude mcp list
# Use clear names
claude mcp add --transport stdio db-tools npx -y db-mcp-server
# Remove unused servers
claude mcp remove old-server
# Create specialized assistants
claude --append-system-prompt "Always explain your reasoning step by step."
# Interactive mode
claude # Start session
claude -c # Continue last session
claude -r # Resume session (interactive)
claude -r SESSION_ID # Resume specific session
# Print mode
claude -p "prompt" # Single response
claude -p --output-format json "prompt" # JSON output
claude -p --tools "Bash,Read" "prompt" # Specific tools
# Model selection
claude --model opus # Use Opus
claude --fallback-model haiku # Fallback model
# Tool control
claude --allowed-tools "Bash(git:*)" # Allow only git
claude --disallowed-tools "Bash(rm:*)" # Disallow rm
# MCP management
claude mcp list # List servers
claude mcp add --transport stdio name cmd # Add server
claude mcp remove name # Remove server
# Plugin management
claude plugin install name # Install plugin
claude plugin uninstall name # Uninstall plugin
claude plugin enable name # Enable plugin
claude plugin disable name # Disable plugin
# System prompts
claude --system-prompt "prompt" # Set system prompt
claude --append-system-prompt "text" # Append to system
# Debug
claude --debug # Enable debug
claude --debug "category,!exclude" # Filter debug
# Maintenance
claude doctor # Check health
claude update # Update CLI
claude setup-token # Setup auth token
claude -p --tools "Read,Grep" "analyze security vulnerabilities in src/"
claude -p --allowed-tools "Bash(git:*)" "review and summarize recent commits"
claude -p --output-format json "list all functions" | \
jq -r '.response' | \
grep "pub fn"
cat large_log.txt | \
claude -p --output-format stream-json "find error patterns" | \
jq -r 'select(.type == "response") | .content'
claude -p --model sonnet --fallback-model haiku "time-sensitive analysis"
--fork-session to experiment without affecting original conversation--allowed-tools or --disallowed-tools for untrusted prompts--output-format json for reliable parsing in scripts--fallback-model haiku for faster responses when quality isn't critical--debug "!noisy,!category" to exclude verbose logsclaude --strict-mcp-config to isolate issues-p in scripts to avoid interactive prompts# Review changes before commit
claude -p --allowed-tools "Bash(git:*),Read" "review staged changes and suggest commit message"
# Automated code review
claude -p --tools "Read,Grep" --output-format json "analyze code quality" > report.json
# Real-time log analysis
tail -f app.log | claude -p --output-format stream-json "detect anomalies"
# Analyze code quality
analyze:
claude -p --tools "Read,Grep" "run code quality analysis"
# Generate documentation
docs:
claude -p --output-format json "generate API docs from code" | jq -r '.response' > API.md
Primary use cases:
Key advantages:
.mcp.json for project-specific servers)Most common commands:
claude - Start interactive sessionclaude -p "prompt" - Print mode for scriptingclaude -c - Continue last conversationclaude mcp list - Manage MCP serversclaude --allowed-tools "pattern" "prompt" - Restrict tool accessProject-level MCP:
.mcp.json in project root for project-specific MCP serversdata-ai
Delegate research and context-gathering tasks to a sub-agent to protect the primary context window. Use when the user asks to "research X", "look into X", "find out about X", "gather context on X", or any investigative framing where answering requires 2+ searches or multiple sources. Also use proactively before starting substantive work when prior context is unknown. Never run research inline — always delegate.
documentation
--- name: qmd-math description: Math notation conventions for Quarto/EPQ documents rendered via lualatex. Use when: writing or adding a formula, equation, or mathematical expression to a .qmd file; asked about display math, inline math, or LaTeX notation in a QMD/Quarto context; defining a where-clause or variable definitions for an equation; converting prose variable descriptions into structured math notation; fixing math that renders badly in a PDF; using \lvert, \begin{aligned}, \tfrac, \text
development
Trim a prose document (README, design doc, blog post, notes) for readability by cutting redundancy, filler, and dead weight in the author's own words. Invoke with /trim [file path], or /trim alone to be prompted for a file. Not for source code, data files, or summarization.
business
Query and analyze Josh Lane's org headcount from the staffing DuckDB at ~/workspace/areas/staffing/staffing.duckdb. Use when asked about headcount counts, org structure, direct reports, team breakdown, hiring/attrition trends, international employees, salary/pay grade distribution, offboarding lag, or any question about people in Josh's org. Triggers on questions about how many people, who reports to whom, headcount by team/country/level, who joined or left, org size, staffing, headcount trend.