283 lines
8.1 KiB
Markdown
283 lines
8.1 KiB
Markdown
# Claudish Codebase - Quick Reference Guide
|
|
|
|
## One-Page Overview
|
|
|
|
### What is Claudish?
|
|
A CLI tool that runs Claude Code with any OpenRouter model via a local Anthropic API-compatible proxy.
|
|
|
|
**Version:** 1.3.1
|
|
**Location:** `mcp/claudish/` (in repository root)
|
|
**Language:** TypeScript (Bun runtime)
|
|
|
|
### Current Environment Variables
|
|
|
|
```
|
|
INPUT (User-Provided) PROCESSED (Claudish-Set)
|
|
═══════════════════════════ ═══════════════════════════════════
|
|
OPENROUTER_API_KEY → ANTHROPIC_BASE_URL (proxy URL)
|
|
CLAUDISH_MODEL → CLAUDISH_ACTIVE_MODEL_NAME (model ID)
|
|
CLAUDISH_PORT → ANTHROPIC_API_KEY (placeholder)
|
|
ANTHROPIC_API_KEY → (inherited to Claude Code)
|
|
```
|
|
|
|
### Missing Variables (Not Yet Implemented)
|
|
|
|
```
|
|
ANTHROPIC_MODEL ← Would fallback model selection
|
|
ANTHROPIC_SMALL_FAST_MODEL ← Would specify fast model
|
|
```
|
|
|
|
### File Organization
|
|
|
|
```
|
|
src/
|
|
├── index.ts ← Entry point, orchestration
|
|
├── cli.ts ← Parse arguments & env vars
|
|
├── config.ts ← Define ENV constants
|
|
├── types.ts ← TypeScript interfaces
|
|
├── claude-runner.ts ← Set up Claude Code environment
|
|
├── proxy-server.ts ← Transform requests to OpenRouter
|
|
├── transform.ts ← API format conversion
|
|
├── logger.ts ← Debug logging
|
|
├── simple-selector.ts← Interactive prompts
|
|
├── port-manager.ts ← Port availability
|
|
└── adapters/ ← Model-specific adapters
|
|
```
|
|
|
|
### Data Flow
|
|
|
|
```
|
|
CLI Input (--model x-ai/grok-code-fast-1)
|
|
↓
|
|
parseArgs() in cli.ts
|
|
↓
|
|
config.model = "x-ai/grok-code-fast-1"
|
|
↓
|
|
createProxyServer(port, apiKey, config.model)
|
|
↓
|
|
runClaudeWithProxy(config, proxyUrl)
|
|
↓
|
|
env.CLAUDISH_ACTIVE_MODEL_NAME = "x-ai/grok-code-fast-1"
|
|
↓
|
|
spawn("claude", args, { env })
|
|
↓
|
|
Claude Code displays model in status line
|
|
↓
|
|
Status line script reads token file for context %
|
|
```
|
|
|
|
### Key Code Locations (Line Numbers)
|
|
|
|
| Component | File | Lines | What It Does |
|
|
|-----------|------|-------|--------------|
|
|
| ENV constants | config.ts | 56-61 | Define all environment variables |
|
|
| Env var reading | cli.ts | 22-34 | Parse CLAUDISH_MODEL, CLAUDISH_PORT |
|
|
| Model passing | index.ts | 81-87 | Pass model to proxy creation |
|
|
| Env assignment | claude-runner.ts | 120-127 | Set CLAUDISH_ACTIVE_MODEL_NAME |
|
|
| Status line | claude-runner.ts | 60 | Bash script using model env var |
|
|
| Model contexts | claude-runner.ts | 32-39 | Context window definitions |
|
|
| Token writing | proxy-server.ts | 805-816 | Write token counts to file |
|
|
|
|
### Current Environment Variable Usage
|
|
|
|
**OPENROUTER_API_KEY**
|
|
- Set by: User (required)
|
|
- Read by: cli.ts, proxy-server.ts
|
|
- Used for: OpenRouter API authentication
|
|
|
|
**CLAUDISH_MODEL**
|
|
- Set by: User (optional)
|
|
- Read by: cli.ts (line 23)
|
|
- Default: Prompts user if not provided
|
|
- Used for: Default model selection
|
|
|
|
**CLAUDISH_PORT**
|
|
- Set by: User (optional)
|
|
- Read by: cli.ts (line 28)
|
|
- Default: Random port 3000-9000
|
|
- Used for: Proxy server port selection
|
|
|
|
**CLAUDISH_ACTIVE_MODEL_NAME**
|
|
- Set by: claude-runner.ts (line 126)
|
|
- Read by: Status line bash script
|
|
- Value: The OpenRouter model ID
|
|
- Used for: Display in Claude Code status line
|
|
|
|
**ANTHROPIC_BASE_URL**
|
|
- Set by: claude-runner.ts (line 124)
|
|
- Read by: Claude Code
|
|
- Value: http://127.0.0.1:{port}
|
|
- Used for: Redirect API calls to proxy
|
|
|
|
**ANTHROPIC_API_KEY**
|
|
- Set by: claude-runner.ts (line 138 or deleted in monitor mode)
|
|
- Read by: Claude Code
|
|
- Value: Placeholder or empty
|
|
- Used for: Prevent auth dialog (proxy handles real auth)
|
|
|
|
### Token Tracking System
|
|
|
|
```
|
|
Request to OpenRouter
|
|
↓ (proxy-server.ts accumulates tokens)
|
|
Response from OpenRouter
|
|
↓
|
|
writeTokenFile() at line 816
|
|
↓
|
|
/tmp/claudish-tokens-{PORT}.json
|
|
{
|
|
"input_tokens": 1234,
|
|
"output_tokens": 567,
|
|
"total_tokens": 1801,
|
|
"updated_at": 1731619200000
|
|
}
|
|
↓
|
|
Status line bash script reads file
|
|
↓
|
|
Calculates: (maxTokens - usedTokens) * 100 / maxTokens
|
|
↓
|
|
Displays as context percentage in status line
|
|
```
|
|
|
|
### Model Context Windows (in tokens)
|
|
|
|
```
|
|
x-ai/grok-code-fast-1: 256,000
|
|
openai/gpt-5-codex: 400,000
|
|
minimax/minimax-m2: 204,800
|
|
z-ai/glm-4.6: 200,000
|
|
qwen/qwen3-vl-235b-a22b-instruct: 256,000
|
|
anthropic/claude-sonnet-4.5: 200,000
|
|
Custom/Unknown: 100,000 (fallback)
|
|
```
|
|
|
|
### How to Add ANTHROPIC_MODEL Support
|
|
|
|
**3 Changes Needed:**
|
|
|
|
1. **config.ts** (1 line)
|
|
```typescript
|
|
ANTHROPIC_MODEL: "ANTHROPIC_MODEL", // Add to ENV object
|
|
```
|
|
|
|
2. **cli.ts** (3 lines after line 26)
|
|
```typescript
|
|
const anthropicModel = process.env[ENV.ANTHROPIC_MODEL];
|
|
if (!envModel && anthropicModel) {
|
|
config.model = anthropicModel;
|
|
}
|
|
```
|
|
|
|
3. **claude-runner.ts** (optional, 1 line after line 126)
|
|
```typescript
|
|
env[ENV.ANTHROPIC_MODEL] = modelId;
|
|
```
|
|
|
|
### Testing Environment Variable Support
|
|
|
|
```bash
|
|
# Build (from mcp/claudish directory)
|
|
cd mcp/claudish
|
|
bun run build
|
|
|
|
# Test with ANTHROPIC_MODEL
|
|
export ANTHROPIC_MODEL=openai/gpt-5-codex
|
|
export OPENROUTER_API_KEY=sk-or-v1-...
|
|
./dist/index.js "test"
|
|
|
|
# Verify: Status line should show openai/gpt-5-codex
|
|
```
|
|
|
|
### Important Implementation Patterns
|
|
|
|
**1. Centralized ENV Constant**
|
|
```typescript
|
|
// Define in one place
|
|
export const ENV = { CLAUDISH_ACTIVE_MODEL_NAME: "..." };
|
|
|
|
// Use everywhere
|
|
process.env[ENV.CLAUDISH_ACTIVE_MODEL_NAME]
|
|
```
|
|
|
|
**2. Unique File Paths**
|
|
```typescript
|
|
// Prevents conflicts between parallel Claudish instances
|
|
const tokenFilePath = `/tmp/claudish-tokens-${port}.json`;
|
|
const tempPath = join(tmpdir(), `claudish-settings-${timestamp}.json`);
|
|
```
|
|
|
|
**3. Safe Environment Inheritance**
|
|
```typescript
|
|
const env: Record<string, string> = {
|
|
...process.env, // Keep existing
|
|
ANTHROPIC_BASE_URL: proxyUrl, // Add/override specific
|
|
};
|
|
```
|
|
|
|
**4. Model ID is String-Based**
|
|
```typescript
|
|
// Not enum-restricted - any OpenRouter model ID works
|
|
config.model: string = "x-ai/grok-code-fast-1" | "custom-model" | ...
|
|
```
|
|
|
|
### Debugging Commands
|
|
|
|
```bash
|
|
# Enable debug logging
|
|
claudish --debug --model x-ai/grok-code-fast-1 "test"
|
|
|
|
# Monitor mode (see all API traffic)
|
|
claudish --monitor --model openai/gpt-5-codex "test"
|
|
|
|
# Check token file
|
|
cat /tmp/claudish-tokens-3000.json
|
|
|
|
# Check status line script
|
|
cat /tmp/claudish-settings-*.json | jq .statusLine.command
|
|
|
|
# Check environment variables
|
|
env | grep CLAUDISH
|
|
```
|
|
|
|
### Architecture Decision: Why Temp Settings Files?
|
|
|
|
**Problem:** How to show model info in status line without modifying global Claude Code settings?
|
|
|
|
**Solution:** Create temporary settings file per instance
|
|
- Each Claudish instance creates unique temp file
|
|
- File contains custom status line command
|
|
- Passed to Claude Code via `--settings` flag
|
|
- Automatically cleaned up on exit
|
|
- No conflicts between parallel instances
|
|
- Global settings remain unchanged
|
|
|
|
**Alternative Approach (Not Used):**
|
|
- Modify ~/.claude/settings.json - Would conflict with global config
|
|
- Write to fixed file - Would conflict between parallel instances
|
|
- Use Claude environment variables only - Status line wouldn't display model
|
|
|
|
### Architecture Decision: Why Token File?
|
|
|
|
**Problem:** How to display real-time token usage in status line?
|
|
|
|
**Solution:** Token file shared between proxy and status line
|
|
- Proxy accumulates tokens during conversation
|
|
- Writes to `/tmp/claudish-tokens-{PORT}.json` after each request
|
|
- Status line bash script reads file
|
|
- No need to modify proxy response format
|
|
- Decoupled from main communication protocol
|
|
- Survives proxy shutdown (for final display)
|
|
|
|
### Documents in This Directory
|
|
|
|
- `CODEBASE_ANALYSIS.md` - 14KB complete architecture guide
|
|
- `KEY_CODE_LOCATIONS.md` - 7.8KB code reference with line numbers
|
|
- `FINDINGS_SUMMARY.md` - 10KB executive summary
|
|
- `QUICK_REFERENCE.md` - This document (1-page overview)
|
|
|
|
---
|
|
|
|
**Quick Reference Created:** November 15, 2025
|
|
**Claudish Version:** 1.3.1
|
|
**Total Lines of Analysis:** 9600+
|