LLM CLI Skill
Purpose
This skill enables seamless interaction with multiple LLM providers (OpenAI, Anthropic, Google Gemini, Ollama) through the llm CLI tool. It processes textual and multimedia information with support for both one-off executions and interactive conversation modes.
When to Use This Skill
Trigger this skill when:
- User wants to process text/files with an LLM
- User needs to choose between multiple available LLMs
- User wants interactive conversation with an LLM
- User needs to pipe content through an LLM for processing
- User wants to use specific model aliases (e.g., "claude-opus", "gpt-4o")
Example user requests:
- "Process this file with Claude"
- "Analyze this text with the fastest available model"
- "Start an interactive chat with OpenAI"
- "Use Gemini to summarize this document"
- "Chat mode with my local Ollama instance"
Supported Providers & Models
OpenAI
- Latest Models (2025):
gpt-5 - Most advanced model
gpt-4-1 / gpt-4.1 - Latest high-performance
gpt-4-1-mini / gpt-4.1-mini - Smaller, faster version
gpt-4o - Multimodal omni model
gpt-4o-mini - Lightweight multimodal
o3 - Advanced reasoning
o3-mini / o3-mini-high - Reasoning variants
Aliases: openai, gpt
Anthropic
- Latest Models (2025):
claude-sonnet-4.5 - Latest flagship model
claude-opus-4.1 - Complex task specialist
claude-opus-4 - Coding specialist
claude-sonnet-4 - Balanced performance
claude-3.5-sonnet - Previous generation
claude-3.5-haiku - Fast & efficient
Aliases: anthropic, claude
Google Gemini
- Latest Models (2025):
gemini-2.5-pro - Most advanced
gemini-2.5-flash - Default fast model
gemini-2.5-flash-lite - Speed optimized
gemini-2.0-flash - Previous generation
gemini-2.5-computer-use - UI interaction
Aliases: google, gemini
Ollama (Local)
- Popular Models:
llama3.1 - Meta's latest (8b, 70b, 405b)
llama3.2 - Compact versions (1b, 3b)
mistral-large-2 - Mistral flagship
deepseek-coder - Code specialist
starcode2 - Code models
Aliases: ollama, local
Workflow Overview
User Input (with optional model)
↓
Check Available Providers (env vars)
↓
Determine Model to Use:
- If specified: Use provided model
- If ambiguous: Show selection menu
- Otherwise: Use last remembered choice
↓
Load/Create Config (~/.claude/llm-skill-config.json)
↓
Detect Input Type:
- stdin/piped
- file path
- inline text
↓
Execute llm CLI:
- Non-interactive: Process & return
- Interactive: Keep conversation loop
↓
Save Model Choice to Config
Features
1. Provider Detection
- Checks environment variables for API keys
- Suggests available LLM providers on first run
- Detects:
OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY, OLLAMA_BASE_URL
2. Model Selection
- Accept model aliases (
gpt-4o, claude-opus, gemini-2.5-pro)
- Accept provider aliases (
openai, anthropic, google, ollama)
- Interactive menu when selection is ambiguous
- Remembers last used model in
~/.claude/llm-skill-config.json
3. Input Processing
- Accepts stdin/piped input
- Processes file paths (detects: .txt, .md, .json, .pdf, images)
- Handles inline text prompts
- Supports multimedia files with appropriate encoding
4. Execution Modes
Non-Interactive (Default)
llm "Your prompt here"
llm --model gpt-4o "Process this text"
llm < file.txt
cat document.md | llm "Summarize"
Interactive Mode
llm --interactive
llm -i
llm --model claude-opus --interactive
5. Configuration
Persistent config location: ~/.claude/llm-skill-config.json
{
"last_model": "claude-sonnet-4.5",
"default_provider": "anthropic",
"available_providers": ["openai", "anthropic", "google", "ollama"]
}
Implementation Details
Core Files
llm_skill.py - Main skill orchestration
providers.py - Provider detection & config
models.py - Model definitions & aliases
executor.py - Execution logic (interactive/non-interactive)
input_handler.py - Input type detection
Key Functions
detect_providers()
- Scans environment for provider API keys
- Returns dict of available providers
get_model_selector(input_text, provider=None)
- Returns selected model, showing menu if needed
- Respects
last_model config preference
load_input(input_source)
- Handles stdin, file paths, or inline text
- Returns content string
execute_llm(content, model, interactive=False)
- Calls
llm CLI with appropriate parameters
- Manages stdin/stdout for interactive mode
Usage in Claude Code
When user invokes this skill, Claude should:
- Parse input for model specification (e.g.,
--model gpt-4o)
- Call skill with content and optional model parameter
- Wait for provider/model selection if needed
- Execute and return results
- For interactive mode, maintain conversation loop
Error Handling
- If no providers available: Suggest installing API keys
- If model not found: Show available models for chosen provider
- If llm CLI not installed: Suggest installation via
pip install llm
- If file not readable: Fall back to treating as inline text
Configuration
Users can pre-configure preferences:
{
"last_model": "claude-sonnet-4.5",
"default_provider": "anthropic",
"interactive_mode": false,
"available_providers": ["openai", "anthropic"]
}
Slash Command Integration
Support /llm command:
/llm process this text
/llm --interactive
/llm --model gpt-4o analyze this
1---2name: llm-cli3description: Process textual and multimedia files with various LLM providers using the llm CLI. Supports both non-interactive and interactive modes with model selection, config persistence, and file input handling.4---56# LLM CLI Skill78## Purpose910This skill enables seamless interaction with multiple LLM providers (OpenAI, Anthropic, Google Gemini, Ollama) through the `llm` CLI tool. It processes textual and multimedia information with support for both one-off executions and interactive conversation modes.1112## When to Use This Skill1314Trigger this skill when:15- User wants to process text/files with an LLM16- User needs to choose between multiple available LLMs17- User wants interactive conversation with an LLM18- User needs to pipe content through an LLM for processing19- User wants to use specific model aliases (e.g., "claude-opus", "gpt-4o")2021Example user requests:22- "Process this file with Claude"23- "Analyze this text with the fastest available model"24- "Start an interactive chat with OpenAI"25- "Use Gemini to summarize this document"26- "Chat mode with my local Ollama instance"2728## Supported Providers & Models2930### OpenAI31- **Latest Models (2025)**:32 - `gpt-5` - Most advanced model33 - `gpt-4-1` / `gpt-4.1` - Latest high-performance34 - `gpt-4-1-mini` / `gpt-4.1-mini` - Smaller, faster version35 - `gpt-4o` - Multimodal omni model36 - `gpt-4o-mini` - Lightweight multimodal37 - `o3` - Advanced reasoning38 - `o3-mini` / `o3-mini-high` - Reasoning variants3940**Aliases**: `openai`, `gpt`4142### Anthropic43- **Latest Models (2025)**:44 - `claude-sonnet-4.5` - Latest flagship model45 - `claude-opus-4.1` - Complex task specialist46 - `claude-opus-4` - Coding specialist47 - `claude-sonnet-4` - Balanced performance48 - `claude-3.5-sonnet` - Previous generation49 - `claude-3.5-haiku` - Fast & efficient5051**Aliases**: `anthropic`, `claude`5253### Google Gemini54- **Latest Models (2025)**:55 - `gemini-2.5-pro` - Most advanced56 - `gemini-2.5-flash` - Default fast model57 - `gemini-2.5-flash-lite` - Speed optimized58 - `gemini-2.0-flash` - Previous generation59 - `gemini-2.5-computer-use` - UI interaction6061**Aliases**: `google`, `gemini`6263### Ollama (Local)64- **Popular Models**:65 - `llama3.1` - Meta's latest (8b, 70b, 405b)66 - `llama3.2` - Compact versions (1b, 3b)67 - `mistral-large-2` - Mistral flagship68 - `deepseek-coder` - Code specialist69 - `starcode2` - Code models7071**Aliases**: `ollama`, `local`7273## Workflow Overview7475```76User Input (with optional model)77 ↓78Check Available Providers (env vars)79 ↓80Determine Model to Use:81 - If specified: Use provided model82 - If ambiguous: Show selection menu83 - Otherwise: Use last remembered choice84 ↓85Load/Create Config (~/.claude/llm-skill-config.json)86 ↓87Detect Input Type:88 - stdin/piped89 - file path90 - inline text91 ↓92Execute llm CLI:93 - Non-interactive: Process & return94 - Interactive: Keep conversation loop95 ↓96Save Model Choice to Config97```9899## Features100101### 1. Provider Detection102- Checks environment variables for API keys103- Suggests available LLM providers on first run104- Detects: `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, `GOOGLE_API_KEY`, `OLLAMA_BASE_URL`105106### 2. Model Selection107- Accept model aliases (`gpt-4o`, `claude-opus`, `gemini-2.5-pro`)108- Accept provider aliases (`openai`, `anthropic`, `google`, `ollama`)109- Interactive menu when selection is ambiguous110- Remembers last used model in `~/.claude/llm-skill-config.json`111112### 3. Input Processing113- Accepts stdin/piped input114- Processes file paths (detects: .txt, .md, .json, .pdf, images)115- Handles inline text prompts116- Supports multimedia files with appropriate encoding117118### 4. Execution Modes119120#### Non-Interactive (Default)121```bash122llm "Your prompt here"123llm --model gpt-4o "Process this text"124llm < file.txt125cat document.md | llm "Summarize"126```127128#### Interactive Mode129```bash130llm --interactive131llm -i132llm --model claude-opus --interactive133```134135### 5. Configuration136Persistent config location: `~/.claude/llm-skill-config.json`137```json138{139 "last_model": "claude-sonnet-4.5",140 "default_provider": "anthropic",141 "available_providers": ["openai", "anthropic", "google", "ollama"]142}143```144145## Implementation Details146147### Core Files148- `llm_skill.py` - Main skill orchestration149- `providers.py` - Provider detection & config150- `models.py` - Model definitions & aliases151- `executor.py` - Execution logic (interactive/non-interactive)152- `input_handler.py` - Input type detection153154### Key Functions155156#### `detect_providers()`157- Scans environment for provider API keys158- Returns dict of available providers159160#### `get_model_selector(input_text, provider=None)`161- Returns selected model, showing menu if needed162- Respects `last_model` config preference163164#### `load_input(input_source)`165- Handles stdin, file paths, or inline text166- Returns content string167168#### `execute_llm(content, model, interactive=False)`169- Calls `llm` CLI with appropriate parameters170- Manages stdin/stdout for interactive mode171172### Usage in Claude Code173174When user invokes this skill, Claude should:1751. Parse input for model specification (e.g., `--model gpt-4o`)1762. Call skill with content and optional model parameter1773. Wait for provider/model selection if needed1784. Execute and return results1795. For interactive mode, maintain conversation loop180181## Error Handling182183- If no providers available: Suggest installing API keys184- If model not found: Show available models for chosen provider185- If llm CLI not installed: Suggest installation via `pip install llm`186- If file not readable: Fall back to treating as inline text187188## Configuration189190Users can pre-configure preferences:191```json192{193 "last_model": "claude-sonnet-4.5",194 "default_provider": "anthropic",195 "interactive_mode": false,196 "available_providers": ["openai", "anthropic"]197}198```199200## Slash Command Integration201202Support `/llm` command:203```204/llm process this text205/llm --interactive206/llm --model gpt-4o analyze this207```