claudish 1.8.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1279 @@
1
+ ---
2
+ name: claudish-usage
3
+ description: 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.
4
+ ---
5
+
6
+ # Claudish Usage Skill
7
+
8
+ **Version:** 1.0.0
9
+ **Purpose:** Guide AI agents on how to use Claudish CLI to run Claude Code with OpenRouter models
10
+ **Status:** Production Ready
11
+
12
+ ## ⚠️ CRITICAL RULES - READ FIRST
13
+
14
+ ### 🚫 NEVER Run Claudish from Main Context
15
+
16
+ **Claudish MUST ONLY be run through sub-agents** unless the user **explicitly** requests direct execution.
17
+
18
+ **Why:**
19
+ - Running Claudish directly pollutes main context with 10K+ tokens (full conversation + reasoning)
20
+ - Destroys context window efficiency
21
+ - Makes main conversation unmanageable
22
+
23
+ **When you can run Claudish directly:**
24
+ - ✅ User explicitly says "run claudish directly" or "don't use a sub-agent"
25
+ - ✅ User is debugging and wants to see full output
26
+ - ✅ User specifically requests main context execution
27
+
28
+ **When you MUST use sub-agent:**
29
+ - ✅ User says "use Grok to implement X" (delegate to sub-agent)
30
+ - ✅ User says "ask GPT-5 to review X" (delegate to sub-agent)
31
+ - ✅ User mentions any model name without "directly" (delegate to sub-agent)
32
+ - ✅ Any production task (always delegate)
33
+
34
+ ### 📋 Workflow Decision Tree
35
+
36
+ ```
37
+ User Request
38
+
39
+ Does it mention Claudish/OpenRouter/model name? → NO → Don't use this skill
40
+ ↓ YES
41
+
42
+ Does user say "directly" or "in main context"? → YES → Run in main context (rare)
43
+ ↓ NO
44
+
45
+ Find appropriate agent or create one → Delegate to sub-agent (default)
46
+ ```
47
+
48
+ ## 🤖 Agent Selection Guide
49
+
50
+ ### Step 1: Find the Right Agent
51
+
52
+ **When user requests Claudish task, follow this process:**
53
+
54
+ 1. **Check for existing agents** that support proxy mode or external model delegation
55
+ 2. **If no suitable agent exists:**
56
+ - Suggest creating a new proxy-mode agent for this task type
57
+ - Offer to proceed with generic `general-purpose` agent if user declines
58
+ 3. **If user declines agent creation:**
59
+ - Warn about context pollution
60
+ - Ask if they want to proceed anyway
61
+
62
+ ### Step 2: Agent Type Selection Matrix
63
+
64
+ | Task Type | Recommended Agent | Fallback | Notes |
65
+ |-----------|------------------|----------|-------|
66
+ | **Code implementation** | Create coding agent with proxy mode | `general-purpose` | Best: custom agent for project-specific patterns |
67
+ | **Code review** | Use existing code review agent + proxy | `general-purpose` | Check if plugin has review agent first |
68
+ | **Architecture planning** | Use existing architect agent + proxy | `general-purpose` | Look for `architect` or `planner` agents |
69
+ | **Testing** | Use existing test agent + proxy | `general-purpose` | Look for `test-architect` or `tester` agents |
70
+ | **Refactoring** | Create refactoring agent with proxy | `general-purpose` | Complex refactors benefit from specialized agent |
71
+ | **Documentation** | `general-purpose` | - | Simple task, generic agent OK |
72
+ | **Analysis** | Use existing analysis agent + proxy | `general-purpose` | Check for `analyzer` or `detective` agents |
73
+ | **Other** | `general-purpose` | - | Default for unknown task types |
74
+
75
+ ### Step 3: Agent Creation Offer (When No Agent Exists)
76
+
77
+ **Template response:**
78
+ ```
79
+ I notice you want to use [Model Name] for [task type].
80
+
81
+ RECOMMENDATION: Create a specialized [task type] agent with proxy mode support.
82
+
83
+ This would:
84
+ ✅ Provide better task-specific guidance
85
+ ✅ Reusable for future [task type] tasks
86
+ ✅ Optimized prompting for [Model Name]
87
+
88
+ Options:
89
+ 1. Create specialized agent (recommended) - takes 2-3 minutes
90
+ 2. Use generic general-purpose agent - works but less optimized
91
+ 3. Run directly in main context (NOT recommended - pollutes context)
92
+
93
+ Which would you prefer?
94
+ ```
95
+
96
+ ### Step 4: Common Agents by Plugin
97
+
98
+ **Frontend Plugin:**
99
+ - `typescript-frontend-dev` - Use for UI implementation with external models
100
+ - `frontend-architect` - Use for architecture planning with external models
101
+ - `senior-code-reviewer` - Use for code review (can delegate to external models)
102
+ - `test-architect` - Use for test planning/implementation
103
+
104
+ **Bun Backend Plugin:**
105
+ - `backend-developer` - Use for API implementation with external models
106
+ - `api-architect` - Use for API design with external models
107
+
108
+ **Code Analysis Plugin:**
109
+ - `codebase-detective` - Use for investigation tasks with external models
110
+
111
+ **No Plugin:**
112
+ - `general-purpose` - Default fallback for any task
113
+
114
+ ### Step 5: Example Agent Selection
115
+
116
+ **Example 1: User says "use Grok to implement authentication"**
117
+ ```
118
+ Task: Code implementation (authentication)
119
+ Plugin: Bun Backend (if backend) or Frontend (if UI)
120
+
121
+ Decision:
122
+ 1. Check for backend-developer or typescript-frontend-dev agent
123
+ 2. Found backend-developer? → Use it with Grok proxy
124
+ 3. Not found? → Offer to create custom auth agent
125
+ 4. User declines? → Use general-purpose with file-based pattern
126
+ ```
127
+
128
+ **Example 2: User says "ask GPT-5 to review my API design"**
129
+ ```
130
+ Task: Code review (API design)
131
+ Plugin: Bun Backend
132
+
133
+ Decision:
134
+ 1. Check for api-architect or senior-code-reviewer agent
135
+ 2. Found? → Use it with GPT-5 proxy
136
+ 3. Not found? → Use general-purpose with review instructions
137
+ 4. Never run directly in main context
138
+ ```
139
+
140
+ **Example 3: User says "use Gemini to refactor this component"**
141
+ ```
142
+ Task: Refactoring (component)
143
+ Plugin: Frontend
144
+
145
+ Decision:
146
+ 1. No specialized refactoring agent exists
147
+ 2. Offer to create component-refactoring agent
148
+ 3. User declines? → Use typescript-frontend-dev with proxy
149
+ 4. Still no agent? → Use general-purpose with file-based pattern
150
+ ```
151
+
152
+ ## Overview
153
+
154
+ **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.
155
+
156
+ **Key Principle:** **ALWAYS** use Claudish through sub-agents with file-based instructions to avoid context window pollution.
157
+
158
+ ## What is Claudish?
159
+
160
+ Claudish (Claude-ish) is a proxy tool that:
161
+ - ✅ Runs Claude Code with **any OpenRouter model** (not just Anthropic models)
162
+ - ✅ Uses local API-compatible proxy server
163
+ - ✅ Supports 100% of Claude Code features
164
+ - ✅ Provides cost tracking and model selection
165
+ - ✅ Enables multi-model workflows
166
+
167
+ **Use Cases:**
168
+ - Run tasks with different AI models (Grok for speed, GPT-5 for reasoning, Gemini for vision)
169
+ - Compare model performance on same task
170
+ - Reduce costs with cheaper models for simple tasks
171
+ - Access models with specialized capabilities
172
+
173
+ ## Requirements
174
+
175
+ ### System Requirements
176
+ - **OpenRouter API Key** - Required (set as `OPENROUTER_API_KEY` environment variable)
177
+ - **Claudish CLI** - Install with: `npm install -g claudish` or `bun install -g claudish`
178
+ - **Claude Code** - Must be installed
179
+
180
+ ### Environment Variables
181
+
182
+ ```bash
183
+ # Required
184
+ export OPENROUTER_API_KEY='sk-or-v1-...' # Your OpenRouter API key
185
+
186
+ # Optional (but recommended)
187
+ export ANTHROPIC_API_KEY='sk-ant-api03-placeholder' # Prevents Claude Code dialog
188
+
189
+ # Optional - default model
190
+ export CLAUDISH_MODEL='x-ai/grok-code-fast-1' # or ANTHROPIC_MODEL
191
+ ```
192
+
193
+ **Get OpenRouter API Key:**
194
+ 1. Visit https://openrouter.ai/keys
195
+ 2. Sign up (free tier available)
196
+ 3. Create API key
197
+ 4. Set as environment variable
198
+
199
+ ## Quick Start Guide
200
+
201
+ ### Step 1: Install Claudish
202
+
203
+ ```bash
204
+ # With npm (works everywhere)
205
+ npm install -g claudish
206
+
207
+ # With Bun (faster)
208
+ bun install -g claudish
209
+
210
+ # Verify installation
211
+ claudish --version
212
+ ```
213
+
214
+ ### Step 2: Get Available Models
215
+
216
+ ```bash
217
+ # List all available models (auto-updates if cache >2 days old)
218
+ claudish --list-models
219
+
220
+ # JSON output for parsing
221
+ claudish --list-models --json
222
+
223
+ # Force update from OpenRouter API
224
+ claudish --list-models --force-update
225
+ ```
226
+
227
+ ### Step 3: Run Claudish
228
+
229
+ **Interactive Mode (default):**
230
+ ```bash
231
+ # Shows model selector, persistent session
232
+ claudish
233
+ ```
234
+
235
+ **Single-shot Mode:**
236
+ ```bash
237
+ # One task and exit (requires --model)
238
+ claudish --model x-ai/grok-code-fast-1 "implement user authentication"
239
+ ```
240
+
241
+ **With stdin for large prompts:**
242
+ ```bash
243
+ # Read prompt from stdin (useful for git diffs, code review)
244
+ git diff | claudish --stdin --model openai/gpt-5-codex "Review these changes"
245
+ ```
246
+
247
+ ## Recommended Models
248
+
249
+ **Top Models for Development (verified from OpenRouter):**
250
+
251
+ 1. **x-ai/grok-code-fast-1** - xAI's Grok (fast coding, visible reasoning)
252
+ - Category: coding
253
+ - Context: 256K
254
+ - Best for: Quick iterations, agentic coding
255
+
256
+ 2. **google/gemini-2.5-flash** - Google's Gemini (state-of-the-art reasoning)
257
+ - Category: reasoning
258
+ - Context: 1000K
259
+ - Best for: Complex analysis, multi-step reasoning
260
+
261
+ 3. **minimax/minimax-m2** - MiniMax M2 (high performance)
262
+ - Category: coding
263
+ - Context: 128K
264
+ - Best for: General coding tasks
265
+
266
+ 4. **openai/gpt-5** - OpenAI's GPT-5 (advanced reasoning)
267
+ - Category: reasoning
268
+ - Context: 128K
269
+ - Best for: Complex implementations, architecture decisions
270
+
271
+ 5. **qwen/qwen3-vl-235b-a22b-instruct** - Alibaba's Qwen (vision-language)
272
+ - Category: vision
273
+ - Context: 32K
274
+ - Best for: UI/visual tasks, design implementation
275
+
276
+ **Get Latest Models:**
277
+ ```bash
278
+ # Auto-updates every 2 days
279
+ claudish --list-models
280
+
281
+ # Force immediate update
282
+ claudish --list-models --force-update
283
+ ```
284
+
285
+ ## NEW: Direct Agent Selection (v2.1.0)
286
+
287
+ **Use `--agent` flag to invoke agents directly without the file-based pattern:**
288
+
289
+ ```bash
290
+ # Use specific agent (prepends @agent- automatically)
291
+ claudish --model x-ai/grok-code-fast-1 --agent frontend:developer "implement React component"
292
+
293
+ # Claude receives: "Use the @agent-frontend:developer agent to: implement React component"
294
+
295
+ # List available agents in project
296
+ claudish --list-agents
297
+ ```
298
+
299
+ **When to use `--agent` vs file-based pattern:**
300
+
301
+ **Use `--agent` when:**
302
+ - Single, simple task that needs agent specialization
303
+ - Direct conversation with one agent
304
+ - Testing agent behavior
305
+ - CLI convenience
306
+
307
+ **Use file-based pattern when:**
308
+ - Complex multi-step workflows
309
+ - Multiple agents needed
310
+ - Large codebases
311
+ - Production tasks requiring review
312
+ - Need isolation from main conversation
313
+
314
+ **Example comparisons:**
315
+
316
+ **Simple task (use `--agent`):**
317
+ ```bash
318
+ claudish --model x-ai/grok-code-fast-1 --agent frontend:developer "create button component"
319
+ ```
320
+
321
+ **Complex task (use file-based):**
322
+ ```typescript
323
+ // multi-phase-workflow.md
324
+ Phase 1: Use api-architect to design API
325
+ Phase 2: Use backend-developer to implement
326
+ Phase 3: Use test-architect to add tests
327
+ Phase 4: Use senior-code-reviewer to review
328
+
329
+ then:
330
+ claudish --model x-ai/grok-code-fast-1 --stdin < multi-phase-workflow.md
331
+ ```
332
+
333
+ ## Best Practice: File-Based Sub-Agent Pattern
334
+
335
+ ### ⚠️ CRITICAL: Don't Run Claudish Directly from Main Conversation
336
+
337
+ **Why:** Running Claudish directly in main conversation pollutes context window with:
338
+ - Entire conversation transcript
339
+ - All tool outputs
340
+ - Model reasoning (can be 10K+ tokens)
341
+
342
+ **Solution:** Use file-based sub-agent pattern
343
+
344
+ ### File-Based Pattern (Recommended)
345
+
346
+ **Step 1: Create instruction file**
347
+ ```markdown
348
+ # /tmp/claudish-task-{timestamp}.md
349
+
350
+ ## Task
351
+ Implement user authentication with JWT tokens
352
+
353
+ ## Requirements
354
+ - Use bcrypt for password hashing
355
+ - Generate JWT with 24h expiration
356
+ - Add middleware for protected routes
357
+
358
+ ## Deliverables
359
+ Write implementation to: /tmp/claudish-result-{timestamp}.md
360
+
361
+ ## Output Format
362
+ ```markdown
363
+ ## Implementation
364
+
365
+ [code here]
366
+
367
+ ## Files Created/Modified
368
+ - path/to/file1.ts
369
+ - path/to/file2.ts
370
+
371
+ ## Tests
372
+ [test code if applicable]
373
+
374
+ ## Notes
375
+ [any important notes]
376
+ ```
377
+ ```
378
+
379
+ **Step 2: Run Claudish with file instruction**
380
+ ```bash
381
+ # Read instruction from file, write result to file
382
+ claudish --model x-ai/grok-code-fast-1 --stdin < /tmp/claudish-task-{timestamp}.md > /tmp/claudish-result-{timestamp}.md
383
+ ```
384
+
385
+ **Step 3: Read result file and provide summary**
386
+ ```typescript
387
+ // In your agent/command:
388
+ const result = await Read({ file_path: "/tmp/claudish-result-{timestamp}.md" });
389
+
390
+ // Parse result
391
+ const filesModified = extractFilesModified(result);
392
+ const summary = extractSummary(result);
393
+
394
+ // Provide short feedback to main agent
395
+ return `✅ Task completed. Modified ${filesModified.length} files. ${summary}`;
396
+ ```
397
+
398
+ ### Complete Example: Using Claudish in Sub-Agent
399
+
400
+ ```typescript
401
+ /**
402
+ * Example: Run code review with Grok via Claudish sub-agent
403
+ */
404
+ async function runCodeReviewWithGrok(files: string[]) {
405
+ const timestamp = Date.now();
406
+ const instructionFile = `/tmp/claudish-review-instruction-${timestamp}.md`;
407
+ const resultFile = `/tmp/claudish-review-result-${timestamp}.md`;
408
+
409
+ // Step 1: Create instruction file
410
+ const instruction = `# Code Review Task
411
+
412
+ ## Files to Review
413
+ ${files.map(f => `- ${f}`).join('\n')}
414
+
415
+ ## Review Criteria
416
+ - Code quality and maintainability
417
+ - Potential bugs or issues
418
+ - Performance considerations
419
+ - Security vulnerabilities
420
+
421
+ ## Output Format
422
+ Write your review to: ${resultFile}
423
+
424
+ Use this format:
425
+ \`\`\`markdown
426
+ ## Summary
427
+ [Brief overview]
428
+
429
+ ## Issues Found
430
+ ### Critical
431
+ - [issue 1]
432
+
433
+ ### Medium
434
+ - [issue 2]
435
+
436
+ ### Low
437
+ - [issue 3]
438
+
439
+ ## Recommendations
440
+ - [recommendation 1]
441
+
442
+ ## Files Reviewed
443
+ - [file 1]: [status]
444
+ \`\`\`
445
+ `;
446
+
447
+ await Write({ file_path: instructionFile, content: instruction });
448
+
449
+ // Step 2: Run Claudish with stdin
450
+ await Bash(`claudish --model x-ai/grok-code-fast-1 --stdin < ${instructionFile}`);
451
+
452
+ // Step 3: Read result
453
+ const result = await Read({ file_path: resultFile });
454
+
455
+ // Step 4: Parse and return summary
456
+ const summary = extractSummary(result);
457
+ const issueCount = extractIssueCount(result);
458
+
459
+ // Step 5: Clean up temp files
460
+ await Bash(`rm ${instructionFile} ${resultFile}`);
461
+
462
+ // Step 6: Return concise feedback
463
+ return {
464
+ success: true,
465
+ summary,
466
+ issueCount,
467
+ fullReview: result // Available if needed, but not in main context
468
+ };
469
+ }
470
+
471
+ function extractSummary(review: string): string {
472
+ const match = review.match(/## Summary\s*\n(.*?)(?=\n##|$)/s);
473
+ return match ? match[1].trim() : "Review completed";
474
+ }
475
+
476
+ function extractIssueCount(review: string): { critical: number; medium: number; low: number } {
477
+ const critical = (review.match(/### Critical\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || []).length;
478
+ const medium = (review.match(/### Medium\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || []).length;
479
+ const low = (review.match(/### Low\s*\n(.*?)(?=\n###|$)/s)?.[1].match(/^-/gm) || []).length;
480
+
481
+ return { critical, medium, low };
482
+ }
483
+ ```
484
+
485
+ ## Sub-Agent Delegation Pattern
486
+
487
+ When running Claudish from an agent, use the Task tool to create a sub-agent:
488
+
489
+ ### Pattern 1: Simple Task Delegation
490
+
491
+ ```typescript
492
+ /**
493
+ * Example: Delegate implementation to Grok via Claudish
494
+ */
495
+ async function implementFeatureWithGrok(featureDescription: string) {
496
+ // Use Task tool to create sub-agent
497
+ const result = await Task({
498
+ subagent_type: "general-purpose",
499
+ description: "Implement feature with Grok",
500
+ prompt: `
501
+ Use Claudish CLI to implement this feature with Grok model:
502
+
503
+ ${featureDescription}
504
+
505
+ INSTRUCTIONS:
506
+ 1. First, get list of available models:
507
+ claudish --list-models
508
+
509
+ 2. Run implementation with Grok:
510
+ claudish --model x-ai/grok-code-fast-1 "${featureDescription}"
511
+
512
+ 3. Return ONLY:
513
+ - List of files created/modified
514
+ - Brief summary (2-3 sentences)
515
+ - Any errors encountered
516
+
517
+ DO NOT return the full conversation transcript or implementation details.
518
+ Keep your response under 500 tokens.
519
+ `
520
+ });
521
+
522
+ return result;
523
+ }
524
+ ```
525
+
526
+ ### Pattern 2: File-Based Task Delegation
527
+
528
+ ```typescript
529
+ /**
530
+ * Example: Use file-based instruction pattern in sub-agent
531
+ */
532
+ async function analyzeCodeWithGemini(codebasePath: string) {
533
+ const timestamp = Date.now();
534
+ const instructionFile = `/tmp/claudish-analyze-${timestamp}.md`;
535
+ const resultFile = `/tmp/claudish-analyze-result-${timestamp}.md`;
536
+
537
+ // Create instruction file
538
+ const instruction = `# Codebase Analysis Task
539
+
540
+ ## Codebase Path
541
+ ${codebasePath}
542
+
543
+ ## Analysis Required
544
+ - Architecture overview
545
+ - Key patterns used
546
+ - Potential improvements
547
+ - Security considerations
548
+
549
+ ## Output
550
+ Write analysis to: ${resultFile}
551
+
552
+ Keep analysis concise (under 1000 words).
553
+ `;
554
+
555
+ await Write({ file_path: instructionFile, content: instruction });
556
+
557
+ // Delegate to sub-agent
558
+ const result = await Task({
559
+ subagent_type: "general-purpose",
560
+ description: "Analyze codebase with Gemini",
561
+ prompt: `
562
+ Use Claudish to analyze codebase with Gemini model.
563
+
564
+ Instruction file: ${instructionFile}
565
+ Result file: ${resultFile}
566
+
567
+ STEPS:
568
+ 1. Read instruction file: ${instructionFile}
569
+ 2. Run: claudish --model google/gemini-2.5-flash --stdin < ${instructionFile}
570
+ 3. Wait for completion
571
+ 4. Read result file: ${resultFile}
572
+ 5. Return ONLY a 2-3 sentence summary
573
+
574
+ DO NOT include the full analysis in your response.
575
+ The full analysis is in ${resultFile} if needed.
576
+ `
577
+ });
578
+
579
+ // Read full result if needed
580
+ const fullAnalysis = await Read({ file_path: resultFile });
581
+
582
+ // Clean up
583
+ await Bash(`rm ${instructionFile} ${resultFile}`);
584
+
585
+ return {
586
+ summary: result,
587
+ fullAnalysis
588
+ };
589
+ }
590
+ ```
591
+
592
+ ### Pattern 3: Multi-Model Comparison
593
+
594
+ ```typescript
595
+ /**
596
+ * Example: Run same task with multiple models and compare
597
+ */
598
+ async function compareModels(task: string, models: string[]) {
599
+ const results = [];
600
+
601
+ for (const model of models) {
602
+ const timestamp = Date.now();
603
+ const resultFile = `/tmp/claudish-${model.replace('/', '-')}-${timestamp}.md`;
604
+
605
+ // Run task with each model
606
+ await Task({
607
+ subagent_type: "general-purpose",
608
+ description: `Run task with ${model}`,
609
+ prompt: `
610
+ Use Claudish to run this task with ${model}:
611
+
612
+ ${task}
613
+
614
+ STEPS:
615
+ 1. Run: claudish --model ${model} --json "${task}"
616
+ 2. Parse JSON output
617
+ 3. Return ONLY:
618
+ - Cost (from total_cost_usd)
619
+ - Duration (from duration_ms)
620
+ - Token usage (from usage.input_tokens and usage.output_tokens)
621
+ - Brief quality assessment (1-2 sentences)
622
+
623
+ DO NOT return full output.
624
+ `
625
+ });
626
+
627
+ results.push({
628
+ model,
629
+ resultFile
630
+ });
631
+ }
632
+
633
+ return results;
634
+ }
635
+ ```
636
+
637
+ ## Common Workflows
638
+
639
+ ### Workflow 1: Quick Code Generation with Grok
640
+
641
+ ```bash
642
+ # Fast, agentic coding with visible reasoning
643
+ claudish --model x-ai/grok-code-fast-1 "add error handling to api routes"
644
+ ```
645
+
646
+ ### Workflow 2: Complex Refactoring with GPT-5
647
+
648
+ ```bash
649
+ # Advanced reasoning for complex tasks
650
+ claudish --model openai/gpt-5 "refactor authentication system to use OAuth2"
651
+ ```
652
+
653
+ ### Workflow 3: UI Implementation with Qwen (Vision)
654
+
655
+ ```bash
656
+ # Vision-language model for UI tasks
657
+ claudish --model qwen/qwen3-vl-235b-a22b-instruct "implement dashboard from figma design"
658
+ ```
659
+
660
+ ### Workflow 4: Code Review with Gemini
661
+
662
+ ```bash
663
+ # State-of-the-art reasoning for thorough review
664
+ git diff | claudish --stdin --model google/gemini-2.5-flash "Review these changes for bugs and improvements"
665
+ ```
666
+
667
+ ### Workflow 5: Multi-Model Consensus
668
+
669
+ ```bash
670
+ # Run same task with multiple models
671
+ for model in "x-ai/grok-code-fast-1" "google/gemini-2.5-flash" "openai/gpt-5"; do
672
+ echo "=== Testing with $model ==="
673
+ claudish --model "$model" "find security vulnerabilities in auth.ts"
674
+ done
675
+ ```
676
+
677
+ ## Claudish CLI Flags Reference
678
+
679
+ ### Essential Flags
680
+
681
+ | Flag | Description | Example |
682
+ |------|-------------|---------|
683
+ | `--model <model>` | OpenRouter model to use | `--model x-ai/grok-code-fast-1` |
684
+ | `--stdin` | Read prompt from stdin | `git diff \| claudish --stdin --model grok` |
685
+ | `--list-models` | List available models | `claudish --list-models` |
686
+ | `--json` | JSON output (implies --quiet) | `claudish --json "task"` |
687
+ | `--help-ai` | Print AI agent usage guide | `claudish --help-ai` |
688
+
689
+ ### Advanced Flags
690
+
691
+ | Flag | Description | Default |
692
+ |------|-------------|---------|
693
+ | `--interactive` / `-i` | Interactive mode | Auto (no prompt = interactive) |
694
+ | `--quiet` / `-q` | Suppress log messages | Quiet in single-shot |
695
+ | `--verbose` / `-v` | Show log messages | Verbose in interactive |
696
+ | `--debug` / `-d` | Enable debug logging to file | Disabled |
697
+ | `--port <port>` | Proxy server port | Random (3000-9000) |
698
+ | `--no-auto-approve` | Require permission prompts | Auto-approve enabled |
699
+ | `--dangerous` | Disable sandbox | Disabled |
700
+ | `--monitor` | Proxy to real Anthropic API (debug) | Disabled |
701
+ | `--force-update` | Force refresh model cache | Auto (>2 days) |
702
+
703
+ ### Output Modes
704
+
705
+ 1. **Quiet Mode (default in single-shot)**
706
+ ```bash
707
+ claudish --model grok "task"
708
+ # Clean output, no [claudish] logs
709
+ ```
710
+
711
+ 2. **Verbose Mode**
712
+ ```bash
713
+ claudish --verbose "task"
714
+ # Shows all [claudish] logs for debugging
715
+ ```
716
+
717
+ 3. **JSON Mode**
718
+ ```bash
719
+ claudish --json "task"
720
+ # Structured output: {result, cost, usage, duration}
721
+ ```
722
+
723
+ ## Cost Tracking
724
+
725
+ Claudish automatically tracks costs in the status line:
726
+
727
+ ```
728
+ directory • model-id • $cost • ctx%
729
+ ```
730
+
731
+ **Example:**
732
+ ```
733
+ my-project • x-ai/grok-code-fast-1 • $0.12 • 67%
734
+ ```
735
+
736
+ Shows:
737
+ - 💰 **Cost**: $0.12 USD spent in current session
738
+ - 📊 **Context**: 67% of context window remaining
739
+
740
+ **JSON Output Cost:**
741
+ ```bash
742
+ claudish --json "task" | jq '.total_cost_usd'
743
+ # Output: 0.068
744
+ ```
745
+
746
+ ## Error Handling
747
+
748
+ ### Error 1: OPENROUTER_API_KEY Not Set
749
+
750
+ **Error:**
751
+ ```
752
+ Error: OPENROUTER_API_KEY environment variable is required
753
+ ```
754
+
755
+ **Fix:**
756
+ ```bash
757
+ export OPENROUTER_API_KEY='sk-or-v1-...'
758
+ # Or add to ~/.zshrc or ~/.bashrc
759
+ ```
760
+
761
+ ### Error 2: Claudish Not Installed
762
+
763
+ **Error:**
764
+ ```
765
+ command not found: claudish
766
+ ```
767
+
768
+ **Fix:**
769
+ ```bash
770
+ npm install -g claudish
771
+ # Or: bun install -g claudish
772
+ ```
773
+
774
+ ### Error 3: Model Not Found
775
+
776
+ **Error:**
777
+ ```
778
+ Model 'invalid/model' not found
779
+ ```
780
+
781
+ **Fix:**
782
+ ```bash
783
+ # List available models
784
+ claudish --list-models
785
+
786
+ # Use valid model ID
787
+ claudish --model x-ai/grok-code-fast-1 "task"
788
+ ```
789
+
790
+ ### Error 4: OpenRouter API Error
791
+
792
+ **Error:**
793
+ ```
794
+ OpenRouter API error: 401 Unauthorized
795
+ ```
796
+
797
+ **Fix:**
798
+ 1. Check API key is correct
799
+ 2. Verify API key at https://openrouter.ai/keys
800
+ 3. Check API key has credits (free tier or paid)
801
+
802
+ ### Error 5: Port Already in Use
803
+
804
+ **Error:**
805
+ ```
806
+ Error: Port 3000 already in use
807
+ ```
808
+
809
+ **Fix:**
810
+ ```bash
811
+ # Let Claudish pick random port (default)
812
+ claudish --model grok "task"
813
+
814
+ # Or specify different port
815
+ claudish --port 8080 --model grok "task"
816
+ ```
817
+
818
+ ## Best Practices
819
+
820
+ ### 1. ✅ Use File-Based Instructions
821
+
822
+ **Why:** Avoids context window pollution
823
+
824
+ **How:**
825
+ ```bash
826
+ # Write instruction to file
827
+ echo "Implement feature X" > /tmp/task.md
828
+
829
+ # Run with stdin
830
+ claudish --stdin --model grok < /tmp/task.md > /tmp/result.md
831
+
832
+ # Read result
833
+ cat /tmp/result.md
834
+ ```
835
+
836
+ ### 2. ✅ Choose Right Model for Task
837
+
838
+ **Fast Coding:** `x-ai/grok-code-fast-1`
839
+ **Complex Reasoning:** `google/gemini-2.5-flash` or `openai/gpt-5`
840
+ **Vision/UI:** `qwen/qwen3-vl-235b-a22b-instruct`
841
+
842
+ ### 3. ✅ Use --json for Automation
843
+
844
+ **Why:** Structured output, easier parsing
845
+
846
+ **How:**
847
+ ```bash
848
+ RESULT=$(claudish --json "task" | jq -r '.result')
849
+ COST=$(claudish --json "task" | jq -r '.total_cost_usd')
850
+ ```
851
+
852
+ ### 4. ✅ Delegate to Sub-Agents
853
+
854
+ **Why:** Keeps main conversation context clean
855
+
856
+ **How:**
857
+ ```typescript
858
+ await Task({
859
+ subagent_type: "general-purpose",
860
+ description: "Task with Claudish",
861
+ prompt: "Use claudish --model grok '...' and return summary only"
862
+ });
863
+ ```
864
+
865
+ ### 5. ✅ Update Models Regularly
866
+
867
+ **Why:** Get latest model recommendations
868
+
869
+ **How:**
870
+ ```bash
871
+ # Auto-updates every 2 days
872
+ claudish --list-models
873
+
874
+ # Force update now
875
+ claudish --list-models --force-update
876
+ ```
877
+
878
+ ### 6. ✅ Use --stdin for Large Prompts
879
+
880
+ **Why:** Avoid command line length limits
881
+
882
+ **How:**
883
+ ```bash
884
+ git diff | claudish --stdin --model grok "Review changes"
885
+ ```
886
+
887
+ ## Anti-Patterns (Avoid These)
888
+
889
+ ### ❌❌❌ NEVER Run Claudish Directly in Main Conversation (CRITICAL)
890
+
891
+ **This is the #1 mistake. Never do this unless user explicitly requests it.**
892
+
893
+ **WRONG - Destroys context window:**
894
+ ```typescript
895
+ // ❌ NEVER DO THIS - Pollutes main context with 10K+ tokens
896
+ await Bash("claudish --model grok 'implement feature'");
897
+
898
+ // ❌ NEVER DO THIS - Full conversation in main context
899
+ await Bash("claudish --model gemini 'review code'");
900
+
901
+ // ❌ NEVER DO THIS - Even with --json, output is huge
902
+ const result = await Bash("claudish --json --model gpt-5 'refactor'");
903
+ ```
904
+
905
+ **RIGHT - Always use sub-agents:**
906
+ ```typescript
907
+ // ✅ ALWAYS DO THIS - Delegate to sub-agent
908
+ const result = await Task({
909
+ subagent_type: "general-purpose", // or specific agent
910
+ description: "Implement feature with Grok",
911
+ prompt: `
912
+ Use Claudish to implement the feature with Grok model.
913
+
914
+ CRITICAL INSTRUCTIONS:
915
+ 1. Create instruction file: /tmp/claudish-task-${Date.now()}.md
916
+ 2. Write detailed task requirements to file
917
+ 3. Run: claudish --model x-ai/grok-code-fast-1 --stdin < /tmp/claudish-task-*.md
918
+ 4. Read result file and return ONLY a 2-3 sentence summary
919
+
920
+ DO NOT return full implementation or conversation.
921
+ Keep response under 300 tokens.
922
+ `
923
+ });
924
+
925
+ // ✅ Even better - Use specialized agent if available
926
+ const result = await Task({
927
+ subagent_type: "backend-developer", // or frontend-dev, etc.
928
+ description: "Implement with external model",
929
+ prompt: `
930
+ Use Claudish with x-ai/grok-code-fast-1 model to implement authentication.
931
+ Follow file-based instruction pattern.
932
+ Return summary only.
933
+ `
934
+ });
935
+ ```
936
+
937
+ **When you CAN run directly (rare exceptions):**
938
+ ```typescript
939
+ // ✅ Only when user explicitly requests
940
+ // User: "Run claudish directly in main context for debugging"
941
+ if (userExplicitlyRequestedDirect) {
942
+ await Bash("claudish --model grok 'task'");
943
+ }
944
+ ```
945
+
946
+ ### ❌ Don't Ignore Model Selection
947
+
948
+ **Wrong:**
949
+ ```bash
950
+ # Always using default model
951
+ claudish "any task"
952
+ ```
953
+
954
+ **Right:**
955
+ ```bash
956
+ # Choose appropriate model
957
+ claudish --model x-ai/grok-code-fast-1 "quick fix"
958
+ claudish --model google/gemini-2.5-flash "complex analysis"
959
+ ```
960
+
961
+ ### ❌ Don't Parse Text Output
962
+
963
+ **Wrong:**
964
+ ```bash
965
+ OUTPUT=$(claudish --model grok "task")
966
+ COST=$(echo "$OUTPUT" | grep cost | awk '{print $2}')
967
+ ```
968
+
969
+ **Right:**
970
+ ```bash
971
+ # Use JSON output
972
+ COST=$(claudish --json --model grok "task" | jq -r '.total_cost_usd')
973
+ ```
974
+
975
+ ### ❌ Don't Hardcode Model Lists
976
+
977
+ **Wrong:**
978
+ ```typescript
979
+ const MODELS = ["x-ai/grok-code-fast-1", "openai/gpt-5"];
980
+ ```
981
+
982
+ **Right:**
983
+ ```typescript
984
+ // Query dynamically
985
+ const { stdout } = await Bash("claudish --list-models --json");
986
+ const models = JSON.parse(stdout).models.map(m => m.id);
987
+ ```
988
+
989
+ ### ✅ Do Accept Custom Models From Users
990
+
991
+ **Problem:** User provides a custom model ID that's not in --list-models
992
+
993
+ **Wrong (rejecting custom models):**
994
+ ```typescript
995
+ const availableModels = ["x-ai/grok-code-fast-1", "openai/gpt-5"];
996
+ const userModel = "custom/provider/model-123";
997
+
998
+ if (!availableModels.includes(userModel)) {
999
+ throw new Error("Model not in my shortlist"); // ❌ DON'T DO THIS
1000
+ }
1001
+ ```
1002
+
1003
+ **Right (accept any valid model ID):**
1004
+ ```typescript
1005
+ // Claudish accepts ANY valid OpenRouter model ID, even if not in --list-models
1006
+ const userModel = "custom/provider/model-123";
1007
+
1008
+ // Validate it's a non-empty string with provider format
1009
+ if (!userModel.includes("/")) {
1010
+ console.warn("Model should be in format: provider/model-name");
1011
+ }
1012
+
1013
+ // Use it directly - Claudish will validate with OpenRouter
1014
+ await Bash(`claudish --model ${userModel} "task"`);
1015
+ ```
1016
+
1017
+ **Why:** Users may have access to:
1018
+ - Beta/experimental models
1019
+ - Private/custom fine-tuned models
1020
+ - Newly released models not yet in rankings
1021
+ - Regional/enterprise models
1022
+ - Cost-saving alternatives
1023
+
1024
+ **Always accept user-provided model IDs** unless they're clearly invalid (empty, wrong format).
1025
+
1026
+ ### ✅ Do Handle User-Preferred Models
1027
+
1028
+ **Scenario:** User says "use my custom model X" and expects it to be remembered
1029
+
1030
+ **Solution 1: Environment Variable (Recommended)**
1031
+ ```typescript
1032
+ // Set for the session
1033
+ process.env.CLAUDISH_MODEL = userPreferredModel;
1034
+
1035
+ // Or set permanently in user's shell profile
1036
+ await Bash(`echo 'export CLAUDISH_MODEL="${userPreferredModel}"' >> ~/.zshrc`);
1037
+ ```
1038
+
1039
+ **Solution 2: Session Cache**
1040
+ ```typescript
1041
+ // Store in a temporary session file
1042
+ const sessionFile = "/tmp/claudish-user-preferences.json";
1043
+ const prefs = {
1044
+ preferredModel: userPreferredModel,
1045
+ lastUsed: new Date().toISOString()
1046
+ };
1047
+ await Write({ file_path: sessionFile, content: JSON.stringify(prefs, null, 2) });
1048
+
1049
+ // Load in subsequent commands
1050
+ const { stdout } = await Read({ file_path: sessionFile });
1051
+ const prefs = JSON.parse(stdout);
1052
+ const model = prefs.preferredModel || defaultModel;
1053
+ ```
1054
+
1055
+ **Solution 3: Prompt Once, Remember for Session**
1056
+ ```typescript
1057
+ // In a multi-step workflow, ask once
1058
+ if (!process.env.CLAUDISH_MODEL) {
1059
+ const { stdout } = await Bash("claudish --list-models --json");
1060
+ const models = JSON.parse(stdout).models;
1061
+
1062
+ const response = await AskUserQuestion({
1063
+ question: "Select model (or enter custom model ID):",
1064
+ options: models.map((m, i) => ({ label: m.name, value: m.id })).concat([
1065
+ { label: "Enter custom model...", value: "custom" }
1066
+ ])
1067
+ });
1068
+
1069
+ if (response === "custom") {
1070
+ const customModel = await AskUserQuestion({
1071
+ question: "Enter OpenRouter model ID (format: provider/model):"
1072
+ });
1073
+ process.env.CLAUDISH_MODEL = customModel;
1074
+ } else {
1075
+ process.env.CLAUDISH_MODEL = response;
1076
+ }
1077
+ }
1078
+
1079
+ // Use the selected model for all subsequent calls
1080
+ const model = process.env.CLAUDISH_MODEL;
1081
+ await Bash(`claudish --model ${model} "task 1"`);
1082
+ await Bash(`claudish --model ${model} "task 2"`);
1083
+ ```
1084
+
1085
+ **Guidance for Agents:**
1086
+ 1. ✅ **Accept any model ID** user provides (unless obviously malformed)
1087
+ 2. ✅ **Don't filter** based on your "shortlist" - let Claudish handle validation
1088
+ 3. ✅ **Offer to set CLAUDISH_MODEL** environment variable for session persistence
1089
+ 4. ✅ **Explain** that --list-models shows curated recommendations, not all possibilities
1090
+ 5. ✅ **Validate format** (should contain "/") but not restrict to known models
1091
+ 6. ❌ **Never reject** a user's custom model with "not in my shortlist"
1092
+
1093
+ ### ❌ Don't Skip Error Handling
1094
+
1095
+ **Wrong:**
1096
+ ```typescript
1097
+ const result = await Bash("claudish --model grok 'task'");
1098
+ ```
1099
+
1100
+ **Right:**
1101
+ ```typescript
1102
+ try {
1103
+ const result = await Bash("claudish --model grok 'task'");
1104
+ } catch (error) {
1105
+ console.error("Claudish failed:", error.message);
1106
+ // Fallback to embedded Claude or handle error
1107
+ }
1108
+ ```
1109
+
1110
+ ## Agent Integration Examples
1111
+
1112
+ ### Example 1: Code Review Agent
1113
+
1114
+ ```typescript
1115
+ /**
1116
+ * Agent: code-reviewer (using Claudish with multiple models)
1117
+ */
1118
+ async function reviewCodeWithMultipleModels(files: string[]) {
1119
+ const models = [
1120
+ "x-ai/grok-code-fast-1", // Fast initial scan
1121
+ "google/gemini-2.5-flash", // Deep analysis
1122
+ "openai/gpt-5" // Final validation
1123
+ ];
1124
+
1125
+ const reviews = [];
1126
+
1127
+ for (const model of models) {
1128
+ const timestamp = Date.now();
1129
+ const instructionFile = `/tmp/review-${model.replace('/', '-')}-${timestamp}.md`;
1130
+ const resultFile = `/tmp/review-result-${model.replace('/', '-')}-${timestamp}.md`;
1131
+
1132
+ // Create instruction
1133
+ const instruction = createReviewInstruction(files, resultFile);
1134
+ await Write({ file_path: instructionFile, content: instruction });
1135
+
1136
+ // Run review with model
1137
+ await Bash(`claudish --model ${model} --stdin < ${instructionFile}`);
1138
+
1139
+ // Read result
1140
+ const result = await Read({ file_path: resultFile });
1141
+
1142
+ // Extract summary
1143
+ reviews.push({
1144
+ model,
1145
+ summary: extractSummary(result),
1146
+ issueCount: extractIssueCount(result)
1147
+ });
1148
+
1149
+ // Clean up
1150
+ await Bash(`rm ${instructionFile} ${resultFile}`);
1151
+ }
1152
+
1153
+ return reviews;
1154
+ }
1155
+ ```
1156
+
1157
+ ### Example 2: Feature Implementation Command
1158
+
1159
+ ```typescript
1160
+ /**
1161
+ * Command: /implement-with-model
1162
+ * Usage: /implement-with-model "feature description"
1163
+ */
1164
+ async function implementWithModel(featureDescription: string) {
1165
+ // Step 1: Get available models
1166
+ const { stdout } = await Bash("claudish --list-models --json");
1167
+ const models = JSON.parse(stdout).models;
1168
+
1169
+ // Step 2: Let user select model
1170
+ const selectedModel = await promptUserForModel(models);
1171
+
1172
+ // Step 3: Create instruction file
1173
+ const timestamp = Date.now();
1174
+ const instructionFile = `/tmp/implement-${timestamp}.md`;
1175
+ const resultFile = `/tmp/implement-result-${timestamp}.md`;
1176
+
1177
+ const instruction = `# Feature Implementation
1178
+
1179
+ ## Description
1180
+ ${featureDescription}
1181
+
1182
+ ## Requirements
1183
+ - Write clean, maintainable code
1184
+ - Add comprehensive tests
1185
+ - Include error handling
1186
+ - Follow project conventions
1187
+
1188
+ ## Output
1189
+ Write implementation details to: ${resultFile}
1190
+
1191
+ Include:
1192
+ - Files created/modified
1193
+ - Code snippets
1194
+ - Test coverage
1195
+ - Documentation updates
1196
+ `;
1197
+
1198
+ await Write({ file_path: instructionFile, content: instruction });
1199
+
1200
+ // Step 4: Run implementation
1201
+ await Bash(`claudish --model ${selectedModel} --stdin < ${instructionFile}`);
1202
+
1203
+ // Step 5: Read and present results
1204
+ const result = await Read({ file_path: resultFile });
1205
+
1206
+ // Step 6: Clean up
1207
+ await Bash(`rm ${instructionFile} ${resultFile}`);
1208
+
1209
+ return result;
1210
+ }
1211
+ ```
1212
+
1213
+ ## Troubleshooting
1214
+
1215
+ ### Issue: Slow Performance
1216
+
1217
+ **Symptoms:** Claudish takes long time to respond
1218
+
1219
+ **Solutions:**
1220
+ 1. Use faster model: `x-ai/grok-code-fast-1` or `minimax/minimax-m2`
1221
+ 2. Reduce prompt size (use --stdin with concise instructions)
1222
+ 3. Check internet connection to OpenRouter
1223
+
1224
+ ### Issue: High Costs
1225
+
1226
+ **Symptoms:** Unexpected API costs
1227
+
1228
+ **Solutions:**
1229
+ 1. Use budget-friendly models (check pricing with `--list-models`)
1230
+ 2. Enable cost tracking: `--cost-tracker`
1231
+ 3. Use --json to monitor costs: `claudish --json "task" | jq '.total_cost_usd'`
1232
+
1233
+ ### Issue: Context Window Exceeded
1234
+
1235
+ **Symptoms:** Error about token limits
1236
+
1237
+ **Solutions:**
1238
+ 1. Use model with larger context (Gemini: 1000K, Grok: 256K)
1239
+ 2. Break task into smaller subtasks
1240
+ 3. Use file-based pattern to avoid conversation history
1241
+
1242
+ ### Issue: Model Not Available
1243
+
1244
+ **Symptoms:** "Model not found" error
1245
+
1246
+ **Solutions:**
1247
+ 1. Update model cache: `claudish --list-models --force-update`
1248
+ 2. Check OpenRouter website for model availability
1249
+ 3. Use alternative model from same category
1250
+
1251
+ ## Additional Resources
1252
+
1253
+ **Documentation:**
1254
+ - Full README: `/Users/jack/mag/claude-code/mcp/claudish/README.md`
1255
+ - AI Agent Guide: Print with `claudish --help-ai`
1256
+ - Model Integration: `/Users/jack/mag/claude-code/skills/claudish-integration/SKILL.md`
1257
+
1258
+ **External Links:**
1259
+ - Claudish GitHub: https://github.com/MadAppGang/claude-code
1260
+ - OpenRouter: https://openrouter.ai
1261
+ - OpenRouter Models: https://openrouter.ai/models
1262
+ - OpenRouter API Docs: https://openrouter.ai/docs
1263
+
1264
+ **Version Information:**
1265
+ ```bash
1266
+ claudish --version
1267
+ ```
1268
+
1269
+ **Get Help:**
1270
+ ```bash
1271
+ claudish --help # CLI usage
1272
+ claudish --help-ai # AI agent usage guide
1273
+ ```
1274
+
1275
+ ---
1276
+
1277
+ **Maintained by:** MadAppGang
1278
+ **Last Updated:** November 19, 2025
1279
+ **Skill Version:** 1.0.0