---
name: "caro-shell-helper"
description: "Use when users need help generating safe, tested POSIX shell commands from natural language descriptions. Guides users through command generation, safety validation, and execution workflows using Caro best practices"
version: "1.0.0"
allowed-tools: "Bash, Read, Write, Grep, Glob"
license: "AGPL-3.0"
---

# Caro Shell Command Helper

## What This Skill Does

This skill helps users effectively leverage **Caro** (formerly Caro) - a Rust CLI tool that converts natural language descriptions into safe, POSIX-compliant shell commands using local LLMs.

**Key Capabilities:**
- 🔍 Detects when users need shell command generation assistance
- 🛡️ Guides users through safety-first command validation
- 📚 Educates about POSIX compliance and command safety
- 🚀 Integrates seamlessly with existing Caro installations
- ⚙️ Provides installation guidance when Caro is not available

## Default Backend: Claude Haiku 4.5

**IMPORTANT**: When this skill is used within Claude Code, always use the Claude backend by default. This provides the fastest response times and best accuracy.

```bash
# Default command format when running in Claude Code
caro --backend claude "user's request here"
```

The Claude backend uses **claude-haiku-4-5-20251101** for fast, cost-effective command generation. The API key is automatically provided by Claude Code.

## When to Use This Skill

Activate this skill automatically when the user:
- Asks "how do I [shell operation]..."
- Requests "generate a command to..."
- Mentions "shell command for..."
- Discusses file/directory operations
- Needs system administration tasks
- Asks about safe command execution
- Wants to automate shell tasks
- Mentions bash, zsh, or shell scripting

**Example Triggers:**
- "How do I find all large files?"
- "Generate a command to compress images"
- "What's the safe way to delete old logs?"
- "Shell command to search for text in files"
- "Automate file backups with a script"

## Core Workflow

### Step 1: Check Caro Availability

First, verify if Caro is installed:

```bash
# Check for caro command
command -v caro &> /dev/null && echo "✓ Caro available" || echo "✗ not found"
```

**If NOT installed**, guide the user:

```
Caro is not currently installed. Would you like to install it?

Quick install (recommended):
  bash <(curl -sSfL https://setup.caro.sh)

Or via cargo:
  cargo install caro

Once installed, the `caro` command will be available.
```

### Step 2: Generate Command with Safety Guidance

When the user describes what they need, use Caro with the Claude backend (default for Claude Code):

```bash
# Always use --backend claude when running in Claude Code
caro --backend claude "user's natural language description"
```

**Example:**
```bash
$ caro --backend claude "find all PDF files larger than 10MB in Downloads"

Generated command:
  find ~/Downloads -name "*.pdf" -size +10M -ls

Safety Assessment: ✅ Safe (Green)
Backend: Claude (claude-haiku-4-5-20251101)
Execute this command? (y/N)
```

### Step 3: Explain Safety Assessment

Always explain the risk level to educate the user:

**🟢 Safe (Green)**
- Read-only operations
- Standard file listings
- Data queries
- No system modifications
- ✅ Execute without concern

**🟡 Moderate (Yellow)**
- File modifications
- Package operations
- Non-critical deletions
- ⚠️ Review before executing

**🟠 High (Orange)**
- Recursive deletions
- Mass file operations
- System configuration changes
- ⚠️ Carefully review and confirm

**🔴 Critical (Red)**
- System destruction patterns (`rm -rf /`)
- Disk operations (`mkfs`, `dd`)
- Fork bombs
- Privilege escalation
- 🛑 BLOCKED or requires explicit override

### Step 4: POSIX Compliance Education

Emphasize why POSIX compliance matters:

```
✓ POSIX-Compliant Command:
  find ~/Downloads -name "*.pdf" -size +10M

This works on: bash, zsh, sh, dash, ksh (all POSIX shells)

✗ Bash-Specific (Non-Portable):
  find ~/Downloads -name "*.pdf" -size +10M -print0 | xargs -0 ls -lh

Problem: -print0 is not POSIX standard
Better: Use -exec for portability
```

### Step 5: Command Execution Guidance

After Caro generates a command, guide the user:

1. **Review the command**: "Do you understand what each part does?"
2. **Check safety level**: "This is a [risk level] operation"
3. **Verify scope**: "Will this affect the files/directories you intend?"
4. **Test safely**: "Try with a small subset first, or use --dry-run if available"
5. **Execute**: "Ready to run? The command will execute when you confirm"

## Safety Patterns to Highlight

### Always Block These Patterns

**System Destruction:**
```bash
rm -rf /          # Deletes entire filesystem
rm -rf ~          # Deletes home directory
rm -rf /*         # Same as rm -rf /
```

**Fork Bombs:**
```bash
:(){ :|:& };:     # Creates infinite processes
```

**Disk Operations:**
```bash
mkfs /dev/sda     # Formats disk (destroys data)
dd if=/dev/zero of=/dev/sda  # Overwrites disk
```

**Privilege Escalation:**
```bash
sudo su           # Gains root access
chmod 777 /       # Makes root world-writable
```

### Suggest Safe Alternatives

When users request dangerous operations, suggest safer alternatives:

**User wants:** "Delete all log files"
**Dangerous:** `rm -rf /var/log/*`
**Safe alternative:**
```bash
# First, preview what will be deleted
find /var/log -name "*.log" -type f -mtime +30 -ls

# Then delete only old logs with confirmation
find /var/log -name "*.log" -type f -mtime +30 -exec rm -i {} \;
```

**User wants:** "Clean up temp files"
**Dangerous:** `rm -rf /tmp/*`
**Safe alternative:**
```bash
# Use tmpwatch or tmpreaper (proper cleanup tools)
tmpwatch 24 /tmp

# Or manually with safety checks
find /tmp -type f -mtime +7 -user $(whoami) -delete
```

## Backend Configuration Guidance

Caro supports multiple inference backends. Help users choose:

### Claude Backend (Default for Claude Code)
- **Best for**: Running directly within Claude Code or with Anthropic API access
- **Advantages**: Fastest, most accurate, uses Claude Haiku 4.5 by default
- **Model**: claude-haiku-4-5-20251101 (default)
- **Setup**:
  ```toml
  # ~/.config/caro/config.toml
  [backend]
  primary = "claude"

  [backend.claude]
  model_name = "claude-haiku-4-5-20251101"  # Fast and cost-effective
  # API key read from ANTHROPIC_API_KEY environment variable
  ```

**When running in Claude Code**: The Claude backend is automatically preferred as it provides the best integration and fastest response times. No additional configuration is needed - Claude Code provides the API key automatically.

### Embedded Backend (Default for Standalone)
- **Best for**: Apple Silicon Macs (M1/M2/M3/M4), offline usage
- **Advantages**: No external dependencies, works offline
- **Model**: Qwen2.5-Coder-1.5B-Instruct (quantized)
- **Setup**: Works out-of-the-box after installation

### Ollama Backend
- **Best for**: Local model control, privacy-focused users
- **Advantages**: Many model choices, easy model management
- **Setup**:
  ```toml
  # ~/.config/caro/config.toml
  [backend]
  primary = "ollama"

  [backend.ollama]
  base_url = "http://localhost:11434"
  model_name = "codellama:7b"
  ```

### vLLM Backend
- **Best for**: High-performance inference, server deployments
- **Advantages**: Optimized for throughput, production-ready
- **Setup**:
  ```toml
  [backend]
  primary = "vllm"

  [backend.vllm]
  base_url = "http://localhost:8000"
  model_name = "codellama/CodeLlama-7b-hf"
  ```

## Usage Examples

### Example 1: Finding Files

**User:** "I need to find all Python files modified in the last week"

**Response:**
```
I'll help you generate a safe command using Caro with Claude Haiku 4.5.

$ caro --backend claude "find all Python files modified in the last week"

Generated command:
  find . -name "*.py" -type f -mtime -7

Safety Assessment: ✅ Safe (Green)
Backend: Claude (claude-haiku-4-5-20251101)
- Read-only operation
- POSIX-compliant syntax
- Searches current directory and subdirectories

Explanation:
- find .           : Search from current directory
- -name "*.py"     : Match files ending in .py
- -type f          : Only regular files (not directories)
- -mtime -7        : Modified within last 7 days

Execute? (y/N)
```

### Example 2: Safe Deletion

**User:** "Delete all .log files older than 30 days"

**Response:**
```
This involves deletion, so let's be careful. I'll use Caro with Claude Haiku 4.5.

$ caro --backend claude "delete all .log files older than 30 days"

Generated command:
  find . -name "*.log" -type f -mtime +30 -delete

Safety Assessment: 🟠 High (Orange)
Backend: Claude (claude-haiku-4-5-20251101)
- Performs deletion (irreversible)
- Recursive operation
- Affects multiple files

⚠️ SAFETY RECOMMENDATION:
Preview what will be deleted first:

$ find . -name "*.log" -type f -mtime +30 -ls

Review the list, then if it looks correct, run with -delete.

Better yet, use interactive deletion:
$ find . -name "*.log" -type f -mtime +30 -exec rm -i {} \;

This will ask for confirmation on each file.

Proceed with preview? (y/N)
```

### Example 3: System Operations

**User:** "How do I check disk space?"

**Response:**
```
$ caro --backend claude "check disk space for all mounted filesystems"

Generated command:
  df -h

Safety Assessment: ✅ Safe (Green)
Backend: Claude (claude-haiku-4-5-20251101)
- Read-only operation
- Standard system utility
- No modifications

Explanation:
- df    : Disk free - shows filesystem disk space usage
- -h    : Human-readable format (GB, MB instead of bytes)

This is completely safe to run. Execute? (y/N)
```

## Advanced Features

### Multi-Step Workflows

For complex tasks, break them into steps:

**User:** "Find large files and compress them"

**Response:**
```
This is a multi-step operation. Let's do it safely using Claude Haiku 4.5:

Step 1: Find large files (>100MB)
$ caro --backend claude "find files larger than 100MB"
  find . -type f -size +100M -ls

Step 2: Review the list (don't automate yet)
[User reviews output]

Step 3: Compress specific files
$ caro --backend claude "compress file.txt with gzip"
  gzip -k file.txt

The -k flag keeps the original file as a backup.

Would you like to proceed with step 1?
```

### Configuration Customization

Help users customize Caro behavior:

```toml
# ~/.config/caro/config.toml

[safety]
enabled = true
level = "moderate"  # strict, moderate, or permissive
require_confirmation = true

[output]
format = "plain"  # json, yaml, or plain
color = true

[backend]
primary = "claude"  # claude (default in Claude Code), embedded, ollama, or vllm
enable_fallback = true

[backend.claude]
model_name = "claude-haiku-4-5-20251101"  # Fast and cost-effective
# API key read from ANTHROPIC_API_KEY environment variable
```

## Educational Notes

### Why POSIX Compliance Matters

```
POSIX-compliant commands work across:
- ✓ bash (most common)
- ✓ zsh (macOS default since Catalina)
- ✓ sh (minimal, universal)
- ✓ dash (Debian/Ubuntu default /bin/sh)
- ✓ ksh (Korn shell)

Non-POSIX features that break portability:
- Bash arrays: myarray=(one two three)
- Process substitution: <(command)
- Extended globbing: shopt -s extglob
- [[ ]] conditional (use [ ] instead)

Caro generates POSIX-compliant commands by default for maximum portability.
```

### Risk Assessment Philosophy

```
Caro uses a 4-tier risk model:

1. Safe (Green): Read-only, no system impact
   - Listings, searches, queries
   - Safe to execute without review

2. Moderate (Yellow): Limited modifications
   - File edits, package updates
   - Review recommended

3. High (Orange): Significant changes
   - Deletions, mass operations
   - Careful review required

4. Critical (Red): Dangerous operations
   - System destruction, privilege escalation
   - Blocked or requires explicit override

This helps users develop safety intuition over time.
```

## Troubleshooting

### Caro Not Found

```bash
# Add cargo bin to PATH
echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
```

### Command Generation Fails

```bash
# Check Caro status
caro --version

# Enable verbose mode for debugging
caro --verbose "your prompt here"

# Try different backend
caro --backend claude "your prompt here"   # Use Claude Haiku 4.5 (fastest)
caro --backend ollama "your prompt here"   # Use local Ollama
caro --backend embedded "your prompt here" # Use embedded model
```

### Claude Backend Issues

```bash
# Check if API key is set
echo $ANTHROPIC_API_KEY

# Set API key if missing
export ANTHROPIC_API_KEY="sk-ant-your-key-here"

# When running in Claude Code, the API key is provided automatically
```

### Safety Validation Too Strict

```toml
# Adjust in ~/.config/caro/config.toml
[safety]
level = "permissive"  # or "moderate"
```

## Best Practices Summary

1. **Always check if Caro is installed** before suggesting usage
2. **Explain risk levels** to educate users about command safety
3. **Highlight POSIX compliance** for portable, reliable commands
4. **Suggest preview before execution** for destructive operations
5. **Break complex tasks into steps** for safety and clarity
6. **Provide safe alternatives** to dangerous commands
7. **Educate, don't just execute** - help users learn command safety

## Resources

- **Caro Repository**: https://github.com/wildcard/caro
- **Website**: https://caro.sh
- **Installation Guide**: https://caro.sh/install
- **Safety Patterns**: See `references/safety-patterns.md`
- **POSIX Reference**: See `references/posix-compliance.md`

## Remember

The goal is not just to generate commands, but to help users:
- ✅ Understand what commands do
- ✅ Recognize dangerous patterns
- ✅ Develop safety-first habits
- ✅ Write portable, POSIX-compliant scripts
- ✅ Make informed decisions about command execution

Always prioritize user education and safety over convenience.
