# Claudish Usage

> CRITICAL - Guide for using Claudish CLI ONLY through sub-agents to run Claude Code with OpenRouter models (Grok, GPT-5, Gemini, MiniMax). NEVER run Claudish directly in main context unless user explicitly requests it. Use when user mentions external AI models, Claudish, OpenRouter, or alternative models. Includes mandatory sub-agent delegation patterns, agent selection guide, file-based instructions, and strict rules to prevent context window pollution.

- Skill: `majiayu000/claudish-usage-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add majiayu000/claudish-usage-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/claudish-usage-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/majiayu000/claudish-usage-2

---


# Claudish Usage Skill

**Version:** 1.1.0
**Purpose:** Guide AI agents on how to use Claudish CLI to run Claude Code with OpenRouter models
**Status:** Production Ready

## ⚠️ CRITICAL RULES - READ FIRST

### 🚫 NEVER Run Claudish from Main Context

**Claudish MUST ONLY be run through sub-agents** unless the user **explicitly** requests direct execution.

**Why:**

- Running Claudish directly pollutes main context with 10K+ tokens (full conversation + reasoning)
- Destroys context window efficiency
- Makes main conversation unmanageable

**When you can run Claudish directly:**

- ✅ User explicitly says "run claudish directly" or "don't use a sub-agent"
- ✅ User is debugging and wants to see full output
- ✅ User specifically requests main context execution

**When you MUST use sub-agent:**

- ✅ User says "use Grok to implement X" (delegate to sub-agent)
- ✅ User says "ask GPT-5 to review X" (delegate to sub-agent)
- ✅ User mentions any model name without "directly" (delegate to sub-agent)
- ✅ Any production task (always delegate)

### 📋 Workflow Decision Tree

```
User Request
    ↓
Does it mention Claudish/OpenRouter/model name? → NO → Don't use this skill
    ↓ YES
    ↓
Does user say "directly" or "in main context"? → YES → Run in main context (rare)
    ↓ NO
    ↓
Find appropriate agent or create one → Delegate to sub-agent (default)
```

## 🤖 Agent Selection Guide

### Step 1: Find the Right Agent

**When user requests Claudish task, follow this process:**

1. **Check for existing agents** that support proxy mode or external model delegation
2. **If no suitable agent exists:**
   - Suggest creating a new proxy-mode agent for this task type
   - Offer to proceed with generic `general-purpose` agent if user declines
3. **If user declines agent creation:**
   - Warn about context pollution
   - Ask if they want to proceed anyway

### Step 2: Agent Type Selection Matrix

| Task Type                 | Recommended Agent                      | Fallback          | Notes                                            |
| ------------------------- | -------------------------------------- | ----------------- | ------------------------------------------------ |
| **Code implementation**   | Create coding agent with proxy mode    | `general-purpose` | Best: custom agent for project-specific patterns |
| **Code review**           | Use existing code review agent + proxy | `general-purpose` | Check if plugin has review agent first           |
| **Architecture planning** | Use existing architect agent + proxy   | `general-purpose` | Look for `architect` or `planner` agents         |
| **Testing**               | Use existing test agent + proxy        | `general-purpose` | Look for `test-architect` or `tester` agents     |
| **Refactoring**           | Create refactoring agent with proxy    | `general-purpose` | Complex refactors benefit from specialized agent |
| **Documentation**         | `general-purpose`                      | -                 | Simple task, generic agent OK                    |
| **Analysis**              | Use existing analysis agent + proxy    | `general-purpose` | Check for `analyzer` or `detective` agents       |
| **Other**                 | `general-purpose`                      | -                 | Default for unknown task types                   |

### Step 3: Agent Creation Offer (When No Agent Exists)

**Template response:**

```
I notice you want to use [Model Name] for [task type].

RECOMMENDATION: Create a specialized [task type] agent with proxy mode support.

This would:
✅ Provide better task-specific guidance
✅ Reusable for future [task type] tasks
✅ Optimized prompting for [Model Name]

Options:
1. Create specialized agent (recommended) - takes 2-3 minutes
2. Use generic general-purpose agent - works but less optimized
3. Run directly in main context (NOT recommended - pollutes context)

Which would you prefer?
```

### Step 4: Common Agents by Plugin

**Frontend Plugin:**

- `typescript-frontend-dev` - Use for UI implementation with external models
- `frontend-architect` - Use for architecture planning with external models
- `senior-code-reviewer` - Use for code review (can delegate to external models)
- `test-architect` - Use for test planning/implementation

**Bun Backend Plugin:**

- `backend-developer` - Use for API implementation with external models
- `api-architect` - Use for API design with external models

**Code Analysis Plugin:**

- `codebase-detective` - Use for investigation tasks with external models

**No Plugin:**

- `general-purpose` - Default fallback for any task

### Step 5: Example Agent Selection

**Example 1: User says "use Grok to implement authentication"**

```
Task: Code implementation (authentication)
Plugin: Bun Backend (if backend) or Frontend (if UI)

Decision:
1. Check for backend-developer or typescript-frontend-dev agent
2. Found backend-developer? → Use it with Grok proxy
3. Not found? → Offer to create custom auth agent
4. User declines? → Use general-purpose with file-based pattern
```

**Example 2: User says "ask GPT-5 to review my API design"**

```
Task: Code review (API design)
Plugin: Bun Backend

Decision:
1. Check for api-architect or senior-code-reviewer agent
2. Found? → Use it with GPT-5 proxy
3. Not found? → Use general-purpose with review instructions
4. Never run directly in main context
```

**Example 3: User says "use Gemini to refactor this component"**

```
Task: Refactoring (component)
Plugin: Frontend

Decision:
1. No specialized refactoring agent exists
2. Offer to create component-refactoring agent
3. User declines? → Use typescript-frontend-dev with proxy
4. Still no agent? → Use general-purpose with file-based pattern
```

## Overview

**Claudish** is a CLI tool that allows running Claude Code with any OpenRouter model (Grok, GPT-5, MiniMax, Gemini, etc.) by proxying requests through a local Anthropic API-compatible server.

**Key Principle:** **ALWAYS** use Claudish through sub-agents with file-based instructions to avoid context window pollution.

## What is Claudish?

Claudish (Claude-ish) is a proxy tool that:

- ✅ Runs Claude Code with **any OpenRouter model** (not just Anthropic models)
- ✅ Uses local API-compatible proxy server
- ✅ Supports 100% of Claude Code features
- ✅ Provides cost tracking and model selection
- ✅ Enables multi-model workflows

**Use Cases:**

- Run tasks with different AI models (Grok for speed, GPT-5 for reasoning, Gemini for vision)
- Compare model performance on same task
- Reduce costs with cheaper models for simple tasks
- Access models with specialized capabilities

## Requirements

### System Requirements

- **OpenRouter API Key** - Required (set as `OPENROUTER_API_KEY` environment variable)
- **Claudish CLI** - Install with: `npm install -g claudish` or `bun install -g claudish`
- **Claude Code** - Must be installed

### Environment Variables

```bash
# Required
export OPENROUTER_API_KEY='sk-or-v1-...'  # Your OpenRouter API key

# Optional (but recommended)
export ANTHROPIC_API_KEY='${ANTHROPIC_API_KEY}'  # Prevents Claude Code dialog

# Optional - default model
export CLAUDISH_MODEL='x-ai/grok-code-fast-1'  # or ANTHROPIC_MODEL
```

**Get OpenRouter API Key:**

1. Visit https://openrouter.ai/keys
2. Sign up (free tier available)
3. Create API key
4. Set as environment variable

## Quick Start Guide

### Step 1: Install Claudish

```bash
# With npm (works everywhere)
npm install -g claudish

# With Bun (faster)
bun install -g claudish

# Verify installation
claudish --version
```

### Step 2: Get Available Models

```bash
# List ALL OpenRouter models grouped by provider
claudish --models

# Fuzzy search models by name, ID, or description
claudish --models gemini
claudish --models "grok code"

# Show top recommended programming models (curated list)
claudish --top-models

# JSON output for parsing
claudish --models --json
claudish --top-models --json

# Force update from OpenRouter API
claudish --models --force-update
```

### Step 3: Run Claudish

**Interactive Mode (default):**

```bash
# Shows model selector, persistent session
claudish
```

**Single-shot Mode:**

```bash
# One task and exit (requires --model)
claudish --model x-ai/grok-code-fast-1 "implement user authentication"
```

**With stdin for large prompts:**

```bash
# Read prompt from stdin (useful for git diffs, code review)
git diff | claudish --stdin --model openai/gpt-5-codex "Review these changes"
```

## Recommended Models

**Top Models for Development (verified from OpenRouter):**

1. **x-ai/grok-code-fast-1** - xAI's Grok (fast coding, visible reasoning)
   - Category: coding
   - Context: 256K
   - Best for: Quick iterations, agentic coding

2. **google/gemini-2.5-flash** - Google's Gemini (state-of-the-art reasoning)
   - Category: reasoning
   - Context: 1000K
   - Best for: Complex analysis, multi-step reasoning

3. **minimax/minimax-m2** - MiniMax M2 (high performance)
   - Category: coding
   - Context: 128K
   - Best for: General coding tasks

4. **openai/gpt-5** - OpenAI's GPT-5 (advanced reasoning)
   - Category: reasoning
   - Context: 128K
   - Best for: Complex implementations, architecture decisions

5. **qwen/qwen3-vl-235b-a22b-instruct** - Alibaba's Qwen (vision-language)
   - Category: vision
   - Context: 32K
   - Best for: UI/visual tasks, design implementation

**Get Latest Models:**

```bash
# List all models (auto-updates every 2 days)
claudish --models

# Search for specific models
claudish --models grok
claudish --models "gemini flash"

# Show curated top models
claudish --top-models

# Force immediate update
claudish --models --force-update
```

## NEW: Direct Agent Selection (v2.1.0)

**Use `--agent` flag to invoke agents directly without the file-based pattern:**

```bash
# Use specific agent (prepends @agent- automatically)
claudish --model x-ai/grok-code-fast-1 --agent frontend:developer "implement React component"

# Claude receives: "Use the @agent-frontend:developer agent to: implement React component"

# List available agents in project
claudish --list-agents
```

**When to use `--agent` vs file-based pattern:**

**Use `--agent` when:**

- Single, simple task that needs agent specialization
- Direct conversation with one agent
- Testing agent behavior
- CLI convenience

**Use file-based pattern when:**

- Complex multi-step workflows
- Multiple agents needed
- Large codebases
- Production tasks requiring review
- Need isolation from main conversation

**Example comparisons:**

**Simple task (use `--agent`):**

```bash
claudish --model x-ai/grok-code-fast-1 --agent frontend:developer "create button component"
```

**Complex task (use file-based):**

```typescript
// multi-phase-workflow.md
Phase 1: Use api-architect to design API
Phase 2: Use backend-developer to implement
Phase 3: Use test-architect to add tests
Phase 4: Use senior-code-reviewer to review

then:
claudish --model x-ai/grok-code-fast-1 --stdin < multi-phase-workflow.md
```

## Best Practice: File-Based Sub-Agent Pattern

### ⚠️ CRITICAL: Don't Run Claudish Directly from Main Conversation

**Why:** Running Claudish directly in main conversation pollutes context window with:

- Entire conversation transcript
- All tool outputs
- Model reasoning (can be 10K+ tokens)

**Solution:** Use file-based sub-agent pattern

### File-Based Pattern (Recommended)

**Step 1: Create instruction file**

````markdown
# /tmp/claudish-task-{timestamp}.md

## Task

Implement user authentication with JWT tokens

## Requirements

- Use bcrypt for password hashing
- Generate JWT with 24h expiration
- Add middleware for protected routes

## Deliverables

Write implementation to: /tmp/claudish-result-{timestamp}.md

## Output Format

```markdown
## Implementation

[code here]

## Files Created/Modified

- path/to/file1.ts
- path/to/file2.ts

## Tests

[test code if applicable]

## Notes

[any important notes]
```
````

````

**Step 2: Run Claudish with file instruction**
```bash
# Read instruction from file, write result to file
claudish --model x-ai/grok-code-fast-1 --stdin < /tmp/claudish-task-{timestamp}.md > /tmp/claudish-result-{timestamp}.md
````

**Step 3: Read result file and provide summary**

```typescript
// In your agent/command:
const result = await Read({ file_path: '/tmp/claudish-result-{timestamp}.md' })

// Parse result
const filesModified = extractFilesModified(result)
const summary = extractSummary(result)

// Provide short feedback to main agent
return `✅ Task completed. Modified ${filesModified.length} files. ${summary}`
```

### Complete Example: Using Claudish in Sub-Agent

```typescript
/**
 * Example: Run code review with Grok via Claudish sub-agent
 */
async function runCodeReviewWithGrok(files: string[]) {
  const timestamp = Date.now()
  const instructionFile = `/tmp/claudish-review-instruction-${timestamp}.md`
  const resultFile = `/tmp/claudish-review-result-${timestamp}.md`

  // Step 1: Create instruction file
  const instruction = `# Code Review Task

## Files to Review
${files.map((f) => `- ${f}`).join('\n')}

## Review Criteria
- Code quality and maintainability
- Potential bugs or issues
- Performance considerations
- Security vulnerabilities

## Output Format
Write your review to: ${resultFile}

Use this format:
\`\`\`markdown
## Summary
[Brief overview]

## Issues Found
### Critical
- [issue 1]

### Medium
- [issue 2]

### Low
- [issue 3]

## Recommendations
- [recommendation 1]

## Files Reviewed
- [file 1]: [status]
\`\`\`
`

  await Write({ file_path: instructionFile, content: instruction })

  // Step 2: Run Claudish with stdin
  await Bash(`claudish --model x-ai/grok-code-fast-1 --stdin < ${instructionFile}`)

  // Step 3: Read result
  const result = await Read({ file_path: resultFile })

  // Step 4: Parse and return summary
  const summary = extractSummary(result)
  const issueCount = extractIssueCount(result)

  // Step 5: Clean up temp files
  await Bash(`rm ${instructionFile} ${resultFile}`)

  // Step 6: Return concise feedback
  return {
    success: true,
    summary,
    issueCount,
    fullReview: result, // Available if needed, but not in main context
  }
}

function extractSummary(review: string): string {
  const match = review.match(/## Summary\s*\n(.*?)(?=\n##|$)/s)
  return match ? match[1].trim() : 'Review completed'
}

function extractIssueCount(review: string): { critical: number; medium: number; low: number } {
  const critical = (review.match(/### Critical\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || [])
    .length
  const medium = (review.match(/### Medium\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || []).length
  const low = (review.match(/### Low\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || []).length

  return { critical, medium, low }
}
```

## Sub-Agent Delegation Pattern

When running Claudish from an agent, use the Task tool to create a sub-agent:

### Pattern 1: Simple Task Delegation

```typescript
/**
 * Example: Delegate implementation to Grok via Claudish
 */
async function implementFeatureWithGrok(featureDescription: string) {
  // Use Task tool to create sub-agent
  const result = await Task({
    subagent_type: 'general-purpose',
    description: 'Implement feature with Grok',
    prompt: `
Use Claudish CLI to implement this feature with Grok model:

${featureDescription}

INSTRUCTIONS:
1. Search for available models:
   claudish --models grok

2. Run implementation with Grok:
   claudish --model x-ai/grok-code-fast-1 "${featureDescription}"

3. Return ONLY:
   - List of files created/modified
   - Brief summary (2-3 sentences)
   - Any errors encountered

DO NOT return the full conversation transcript or implementation details.
Keep your response under 500 tokens.
    `,
  })

  return result
}
```

### Pattern 2: File-Based Task Delegation

```typescript
/**
 * Example: Use file-based instruction pattern in sub-agent
 */
async function analyzeCodeWithGemini(codebasePath: string) {
  const timestamp = Date.now()
  const instructionFile = `/tmp/claudish-analyze-${timestamp}.md`
  const resultFile = `/tmp/claudish-analyze-result-${timestamp}.md`

  // Create instruction file
  const instruction = `# Codebase Analysis Task

## Codebase Path
${codebasePath}

## Analysis Required
- Architecture overview
- Key patterns used
- Potential improvements
- Security considerations

## Output
Write analysis to: ${resultFile}

Keep analysis concise (under 1000 words).
`

  await Write({ file_path: instructionFile, content: instruction })

  // Delegate to sub-agent
  const result = await Task({
    subagent_type: 'general-purpose',
    description: 'Analyze codebase with Gemini',
    prompt: `
Use Claudish to analyze codebase with Gemini model.

Instruction file: ${instructionFile}
Result file: ${resultFile}

STEPS:
1. Read instruction file: ${instructionFile}
2. Run: claudish --model google/gemini-2.5-flash --stdin < ${instructionFile}
3. Wait for completion
4. Read result file: ${resultFile}
5. Return ONLY a 2-3 sentence summary

DO NOT include the full analysis in your response.
The full analysis is in ${resultFile} if needed.
    `,
  })

  // Read full result if needed
  const fullAnalysis = await Read({ file_path: resultFile })

  // Clean up
  await Bash(`rm ${instructionFile} ${resultFile}`)

  return {
    summary: result,
    fullAnalysis,
  }
}
```

### Pattern 3: Multi-Model Comparison

```typescript
/**
 * Example: Run same task with multiple models and compare
 */
async function compareModels(task: string, models: string[]) {
  const results = []

  for (const model of models) {
    const timestamp = Date.now()
    const resultFile = `/tmp/claudish-${model.replace('/', '-')}-${timestamp}.md`

    // Run task with each model
    await Task({
      subagent_type: 'general-purpose',
      description: `Run task with ${model}`,
      prompt: `
Use Claudish to run this task with ${model}:

${task}

STEPS:
1. Run: claudish --model ${model} --json "${task}"
2. Parse JSON output
3. Return ONLY:
   - Cost (from total_cost_usd)
   - Duration (from duration_ms)
   - Token usage (from usage.input_tokens and usage.output_tokens)
   - Brief quality assessment (1-2 sentences)

DO NOT return full output.
      `,
    })

    results.push({
      model,
      resultFile,
    })
  }

  return results
}
```

## Common Workflows

### Workflow 1: Quick Code Generation with Grok

```bash
# Fast, agentic coding with visible reasoning
claudish --model x-ai/grok-code-fast-1 "add error handling to api routes"
```

### Workflow 2: Complex Refactoring with GPT-5

```bash
# Advanced reasoning for complex tasks
claudish --model openai/gpt-5 "refactor authentication system to use OAuth2"
```

### Workflow 3: UI Implementation with Qwen (Vision)

```bash
# Vision-language model for UI tasks
claudish --model qwen/qwen3-vl-235b-a22b-instruct "implement dashboard from figma design"
```

### Workflow 4: Code Review with Gemini

```bash
# State-of-the-art reasoning for thorough review
git diff | claudish --stdin --model google/gemini-2.5-flash "Review these changes for bugs and improvements"
```

### Workflow 5: Multi-Model Consensus

```bash
# Run same task with multiple models
for model in "x-ai/grok-code-fast-1" "google/gemini-2.5-flash" "openai/gpt-5"; do
  echo "=== Testing with $model ==="
  claudish --model "$model" "find security vulnerabilities in auth.ts"
done
```

## Claudish CLI Flags Reference

### Essential Flags

| Flag              | Description                   | Example                                           |
| ----------------- | ----------------------------- | ------------------------------------------------- |
| `--model <model>` | OpenRouter model to use       | `--model x-ai/grok-code-fast-1`                   |
| `--stdin`         | Read prompt from stdin        | `git diff \| claudish --stdin --model grok`       |
| `--models`        | List all models or search     | `claudish --models` or `claudish --models gemini` |
| `--top-models`    | Show top recommended models   | `claudish --top-models`                           |
| `--json`          | JSON output (implies --quiet) | `claudish --json "task"`                          |
| `--help-ai`       | Print AI agent usage guide    | `claudish --help-ai`                              |

### Advanced Flags

| Flag                   | Description                         | Default                        |
| ---------------------- | ----------------------------------- | ------------------------------ |
| `--interactive` / `-i` | Interactive mode                    | Auto (no prompt = interactive) |
| `--quiet` / `-q`       | Suppress log messages               | Quiet in single-shot           |
| `--verbose` / `-v`     | Show log messages                   | Verbose in interactive         |
| `--debug` / `-d`       | Enable debug logging to file        | Disabled                       |
| `--port <port>`        | Proxy server port                   | Random (3000-9000)             |
| `--no-auto-approve`    | Require permission prompts          | Auto-approve enabled           |
| `--dangerous`          | Disable sandbox                     | Disabled                       |
| `--monitor`            | Proxy to real Anthropic API (debug) | Disabled                       |
| `--force-update`       | Force refresh model cache           | Auto (>2 days)                 |

### Output Modes

1. **Quiet Mode (default in single-shot)**

   ```bash
   claudish --model grok "task"
   # Clean output, no [claudish] logs
   ```

2. **Verbose Mode**

   ```bash
   claudish --verbose "task"
   # Shows all [claudish] logs for debugging
   ```

3. **JSON Mode**
   ```bash
   claudish --json "task"
   # Structured output: {result, cost, usage, duration}
   ```

## Cost Tracking

Claudish automatically tracks costs in the status line:

```
directory • model-id • $cost • ctx%
```

**Example:**

```
my-project • x-ai/grok-code-fast-1 • $0.12 • 67%
```

Shows:

- 💰 **Cost**: $0.12 USD spent in current session
- 📊 **Context**: 67% of context window remaining

**JSON Output Cost:**

```bash
claudish --json "task" | jq '.total_cost_usd'
# Output: 0.068
```

## Error Handling

### Error 1: OPENROUTER_API_KEY Not Set

**Error:**

```
Error: OPENROUTER_API_KEY environment variable is required
```

**Fix:**

```bash
export OPENROUTER_API_KEY='sk-or-v1-...'
# Or add to ~/.zshrc or ~/.bashrc
```

### Error 2: Claudish Not Installed

**Error:**

```
command not found: claudish
```

**Fix:**

```bash
npm install -g claudish
# Or: bun install -g claudish
```

### Error 3: Model Not Found

**Error:**

```
Model 'invalid/model' not found
```

**Fix:**

```bash
# List available models
claudish --models

# Use valid model ID
claudish --model x-ai/grok-code-fast-1 "task"
```

### Error 4: OpenRouter API Error

**Error:**

```
OpenRouter API error: 401 Unauthorized
```

**Fix:**

1. Check API key is correct
2. Verify API key at https://openrouter.ai/keys
3. Check API key has credits (free tier or paid)

### Error 5: Port Already in Use

**Error:**

```
Error: Port 3000 already in use
```

**Fix:**

```bash
# Let Claudish pick random port (default)
claudish --model grok "task"

# Or specify different port
claudish --port 8080 --model grok "task"
```

## Best Practices

### 1. ✅ Use File-Based Instructions

**Why:** Avoids context window pollution

**How:**

```bash
# Write instruction to file
echo "Implement feature X" > /tmp/task.md

# Run with stdin
claudish --stdin --model grok < /tmp/task.md > /tmp/result.md

# Read result
cat /tmp/result.md
```

### 2. ✅ Choose Right Model for Task

**Fast Coding:** `x-ai/grok-code-fast-1`
**Complex Reasoning:** `google/gemini-2.5-flash` or `openai/gpt-5`
**Vision/UI:** `qwen/qwen3-vl-235b-a22b-instruct`

### 3. ✅ Use --json for Automation

**Why:** Structured output, easier parsing

**How:**

```bash
RESULT=$(claudish --json "task" | jq -r '.result')
COST=$(claudish --json "task" | jq -r '.total_cost_usd')
```

### 4. ✅ Delegate to Sub-Agents

**Why:** Keeps main conversation context clean

**How:**

```typescript
await Task({
  subagent_type: 'general-purpose',
  description: 'Task with Claudish',
  prompt: "Use claudish --model grok '...' and return summary only",
})
```

### 5. ✅ Update Models Regularly

**Why:** Get latest model recommendations

**How:**

```bash
# Auto-updates every 2 days
claudish --models

# Search for specific models
claudish --models deepseek

# Force update now
claudish --models --force-update
```

### 6. ✅ Use --stdin for Large Prompts

**Why:** Avoid command line length limits

**How:**

```bash
git diff | claudish --stdin --model grok "Review changes"
```

## Anti-Patterns (Avoid These)

### ❌❌❌ NEVER Run Claudish Directly in Main Conversation (CRITICAL)

**This is the #1 mistake. Never do this unless user explicitly requests it.**

**WRONG - Destroys context window:**

```typescript
// ❌ NEVER DO THIS - Pollutes main context with 10K+ tokens
await Bash("claudish --model grok 'implement feature'")

// ❌ NEVER DO THIS - Full conversation in main context
await Bash("claudish --model gemini 'review code'")

// ❌ NEVER DO THIS - Even with --json, output is huge
const result = await Bash("claudish --json --model gpt-5 'refactor'")
```

**RIGHT - Always use sub-agents:**

```typescript
// ✅ ALWAYS DO THIS - Delegate to sub-agent
const result = await Task({
  subagent_type: 'general-purpose', // or specific agent
  description: 'Implement feature with Grok',
  prompt: `
Use Claudish to implement the feature with Grok model.

CRITICAL INSTRUCTIONS:
1. Create instruction file: /tmp/claudish-task-${Date.now()}.md
2. Write detailed task requirements to file
3. Run: claudish --model x-ai/grok-code-fast-1 --stdin < /tmp/claudish-task-*.md
4. Read result file and return ONLY a 2-3 sentence summary

DO NOT return full implementation or conversation.
Keep response under 300 tokens.
  `,
})

// ✅ Even better - Use specialized agent if available
const result = await Task({
  subagent_type: 'backend-developer', // or frontend-dev, etc.
  description: 'Implement with external model',
  prompt: `
Use Claudish with x-ai/grok-code-fast-1 model to implement authentication.
Follow file-based instruction pattern.
Return summary only.
  `,
})
```

**When you CAN run directly (rare exceptions):**

```typescript
// ✅ Only when user explicitly requests
// User: "Run claudish directly in main context for debugging"
if (userExplicitlyRequestedDirect) {
  await Bash("claudish --model grok 'task'")
}
```

### ❌ Don't Ignore Model Selection

**Wrong:**

```bash
# Always using default model
claudish "any task"
```

**Right:**

```bash
# Choose appropriate model
claudish --model x-ai/grok-code-fast-1 "quick fix"
claudish --model google/gemini-2.5-flash "complex analysis"
```

### ❌ Don't Parse Text Output

**Wrong:**

```bash
OUTPUT=$(claudish --model grok "task")
COST=$(echo "$OUTPUT" | grep cost | awk '{print $2}')
```

**Right:**

```bash
# Use JSON output
COST=$(claudish --json --model grok "task" | jq -r '.total_cost_usd')
```

### ❌ Don't Hardcode Model Lists

**Wrong:**

```typescript
const MODELS = ['x-ai/grok-code-fast-1', 'openai/gpt-5']
```

**Right:**

```typescript
// Query dynamically
const { stdout } = await Bash('claudish --models --json')
const models = JSON.parse(stdout).models.map((m) => m.id)
```

### ✅ Do Accept Custom Models From Users

**Problem:** User provides a custom model ID that's not in --top-models

**Wrong (rejecting custom models):**

```typescript
const availableModels = ['x-ai/grok-code-fast-1', 'openai/gpt-5']
const userModel = 'custom/provider/model-123'

if (!availableModels.includes(userModel)) {
  throw new Error('Model not in my shortlist') // ❌ DON'T DO THIS
}
```

**Right (accept any valid model ID):**

```typescript
// Claudish accepts ANY valid OpenRouter model ID, even if not in --top-models
const userModel = 'custom/provider/model-123'

// Validate it's a non-empty string with provider format
if (!userModel.includes('/')) {
  console.warn('Model should be in format: provider/model-name')
}

// Use it directly - Claudish will validate with OpenRouter
await Bash(`claudish --model ${userModel} "task"`)
```

**Why:** Users may have access to:

- Beta/experimental models
- Private/custom fine-tuned models
- Newly released models not yet in rankings
- Regional/enterprise models
- Cost-saving alternatives

**Always accept user-provided model IDs** unless they're clearly invalid (empty, wrong format).

### ✅ Do Handle User-Preferred Models

**Scenario:** User says "use my custom model X" and expects it to be remembered

**Solution 1: Environment Variable (Recommended)**

```typescript
// Set for the session
process.env.CLAUDISH_MODEL = userPreferredModel

// Or set permanently in user's shell profile
await Bash(`echo 'export CLAUDISH_MODEL="${userPreferredModel}"' >> ~/.zshrc`)
```

**Solution 2: Session Cache**

```typescript
// Store in a temporary session file
const sessionFile = '/tmp/claudish-user-preferences.json'
const prefs = {
  preferredModel: userPreferredModel,
  lastUsed: new Date().toISOString(),
}
await Write({ file_path: sessionFile, content: JSON.stringify(prefs, null, 2) })

// Load in subsequent commands
const { stdout } = await Read({ file_path: sessionFile })
const prefs = JSON.parse(stdout)
const model = prefs.preferredModel || defaultModel
```

**Solution 3: Prompt Once, Remember for Session**

```typescript
// In a multi-step workflow, ask once
if (!process.env.CLAUDISH_MODEL) {
  const { stdout } = await Bash('claudish --models --json')
  const models = JSON.parse(stdout).models

  const response = await AskUserQuestion({
    question: 'Select model (or enter custom model ID):',
    options: models
      .map((m, i) => ({ label: m.name, value: m.id }))
      .concat([{ label: 'Enter custom model...', value: 'custom' }]),
  })

  if (response === 'custom') {
    const customModel = await AskUserQuestion({
      question: 'Enter OpenRouter model ID (format: provider/model):',
    })
    process.env.CLAUDISH_MODEL = customModel
  } else {
    process.env.CLAUDISH_MODEL = response
  }
}

// Use the selected model for all subsequent calls
const model = process.env.CLAUDISH_MODEL
await Bash(`claudish --model ${model} "task 1"`)
await Bash(`claudish --model ${model} "task 2"`)
```

**Guidance for Agents:**

1. ✅ **Accept any model ID** user provides (unless obviously malformed)
2. ✅ **Don't filter** based on your "shortlist" - let Claudish handle validation
3. ✅ **Offer to set CLAUDISH_MODEL** environment variable for session persistence
4. ✅ **Explain** that --top-models shows curated recommendations, --models shows all
5. ✅ **Validate format** (should contain "/") but not restrict to known models
6. ❌ **Never reject** a user's custom model with "not in my shortlist"

### ❌ Don't Skip Error Handling

**Wrong:**

```typescript
const result = await Bash("claudish --model grok 'task'")
```

**Right:**

```typescript
try {
  const result = await Bash("claudish --model grok 'task'")
} catch (error) {
  console.error('Claudish failed:', error.message)
  // Fallback to embedded Claude or handle error
}
```

## Agent Integration Examples

### Example 1: Code Review Agent

```typescript
/**
 * Agent: code-reviewer (using Claudish with multiple models)
 */
async function reviewCodeWithMultipleModels(files: string[]) {
  const models = [
    'x-ai/grok-code-fast-1', // Fast initial scan
    'google/gemini-2.5-flash', // Deep analysis
    'openai/gpt-5', // Final validation
  ]

  const reviews = []

  for (const model of models) {
    const timestamp = Date.now()
    const instructionFile = `/tmp/review-${model.replace('/', '-')}-${timestamp}.md`
    const resultFile = `/tmp/review-result-${model.replace('/', '-')}-${timestamp}.md`

    // Create instruction
    const instruction = createReviewInstruction(files, resultFile)
    await Write({ file_path: instructionFile, content: instruction })

    // Run review with model
    await Bash(`claudish --model ${model} --stdin < ${instructionFile}`)

    // Read result
    const result = await Read({ file_path: resultFile })

    // Extract summary
    reviews.push({
      model,
      summary: extractSummary(result),
      issueCount: extractIssueCount(result),
    })

    // Clean up
    await Bash(`rm ${instructionFile} ${resultFile}`)
  }

  return reviews
}
```

### Example 2: Feature Implementation Command

```typescript
/**
 * Command: /implement-with-model
 * Usage: /implement-with-model "feature description"
 */
async function implementWithModel(featureDescription: string) {
  // Step 1: Get available models
  const { stdout } = await Bash('claudish --models --json')
  const models = JSON.parse(stdout).models

  // Step 2: Let user select model
  const selectedModel = await promptUserForModel(models)

  // Step 3: Create instruction file
  const timestamp = Date.now()
  const instructionFile = `/tmp/implement-${timestamp}.md`
  const resultFile = `/tmp/implement-result-${timestamp}.md`

  const instruction = `# Feature Implementation

## Description
${featureDescription}

## Requirements
- Write clean, maintainable code
- Add comprehensive tests
- Include error handling
- Follow project conventions

## Output
Write implementation details to: ${resultFile}

Include:
- Files created/modified
- Code snippets
- Test coverage
- Documentation updates
`

  await Write({ file_path: instructionFile, content: instruction })

  // Step 4: Run implementation
  await Bash(`claudish --model ${selectedModel} --stdin < ${instructionFile}`)

  // Step 5: Read and present results
  const result = await Read({ file_path: resultFile })

  // Step 6: Clean up
  await Bash(`rm ${instructionFile} ${resultFile}`)

  return result
}
```

## Troubleshooting

### Issue: Slow Performance

**Symptoms:** Claudish takes long time to respond

**Solutions:**

1. Use faster model: `x-ai/grok-code-fast-1` or `minimax/minimax-m2`
2. Reduce prompt size (use --stdin with concise instructions)
3. Check internet connection to OpenRouter

### Issue: High Costs

**Symptoms:** Unexpected API costs

**Solutions:**

1. Use budget-friendly models (check pricing with `--models` or `--top-models`)
2. Enable cost tracking: `--cost-tracker`
3. Use --json to monitor costs: `claudish --json "task" | jq '.total_cost_usd'`

### Issue: Context Window Exceeded

**Symptoms:** Error about token limits

**Solutions:**

1. Use model with larger context (Gemini: 1000K, Grok: 256K)
2. Break task into smaller subtasks
3. Use file-based pattern to avoid conversation history

### Issue: Model Not Available

**Symptoms:** "Model not found" error

**Solutions:**

1. Update model cache: `claudish --models --force-update`
2. Check OpenRouter website for model availability
3. Use alternative model from same category

## Additional Resources

**Documentation:**

- Full README: `mcp/claudish/README.md` (in repository root)
- AI Agent Guide: Print with `claudish --help-ai`
- Model Integration: `skills/claudish-integration/SKILL.md` (in repository root)

**External Links:**

- Claudish GitHub: https://github.com/MadAppGang/claude-code
- OpenRouter: https://openrouter.ai
- OpenRouter Models: https://openrouter.ai/models
- OpenRouter API Docs: https://openrouter.ai/docs

**Version Information:**

```bash
claudish --version
```

**Get Help:**

```bash
claudish --help        # CLI usage
claudish --help-ai     # AI agent usage guide
```

---

**Maintained by:** MadAppGang
**Last Updated:** November 25, 2025
**Skill Version:** 1.1.0

