Download coming soon — the first build is being packaged.

Coming soon · Native macOS menu bar app

LittleSwitch

Point Claude, Codex and OpenCode at your own models. One little switch, one private gateway, zero cloud.

See how it works

Native SwiftUI app for Apple Silicon. macOS 14 or later. No account, no telemetry.

RoutesLocal gateway
Running:11436
Fable 5ollama/qwen3:32bctx 128k
Opus 5lmstudio/llama-3.3-70bctx 128k
Sonnet 5ollama/qwen3-coder:30bctx 128k
Haiku 4.5ollama/llama3.2:3bctx 128k
Sonnet 4.6vllm/deepseek-v3ctx 64k

Applied transactionally · external changes detected

Local routing, made simple

Your AI apps, your models, one switch

LittleSwitch sits in your menu bar and reroutes the AI tools you already use - Claude Desktop, Claude Code, Codex, OpenCode - to the providers you choose. A single gateway on 127.0.0.1:11436 speaks Anthropic and OpenAI fluently, and every byte stays on your machine unless you decide otherwise.

Truly native

SwiftUI and AppKit only. No Electron, no WebView - the popover opens in milliseconds.

Two contracts, one endpoint

Anthropic Messages and OpenAI Responses behind a single local gateway, with SSE end to end.

Keychain-only secrets

Bearer and X-Api-Key tokens never leave the macOS Keychain. No plaintext, ever.

01Routing

Five Claude routes, five independent targets

Each Claude route - Fable 5, Opus 5, Sonnet 5, Haiku 4.5, Sonnet 4.6 - maps to its own model on its own provider. Switch one without touching the others.

  • Independent mappingEvery route keeps its own provider/model pair, applied and restored transactionally.
  • Automatic context windowsDetected from the provider catalog, with manual overrides per model.
  • External-change detectionIf something edits a profile behind your back, LittleSwitch notices and reconciles.
LittleSwitch · Routes

Claude routes

  • Fable 5ollama/qwen3:32bctx 128k
  • Opus 5lmstudio/llama-3.3-70bctx 128k
  • Sonnet 5ollama/qwen3-coder:30bctx 128k
  • Haiku 4.5ollama/llama3.2:3bctx 128k
  • Sonnet 4.6vllm/deepseek-v3ctx 64k

applied transactionally · external changes detected

02Gateway

One endpoint that speaks both dialects

A private gateway on 127.0.0.1:11436 accepts Anthropic Messages and OpenAI Responses, streams SSE, and normalizes the quirks - token counts, model names, retries when a provider lacks image support.

  • Transparent pathsDirect routes pass through untouched; only the documented adapters rewrite anything.
  • SSE end to endServer-sent events stream through the gateway without buffering surprises.
  • FIFO per providerA shared queue with a configurable parallel limit, visible in the menu bar.
  • Web search, your serviceClaude's web search relays through Firecrawl - Cloud or your own self-hosted instance - with no auxiliary process. Defaults: 10 results per search, 3 searches per response - both adjustable.
Gateway · 127.0.0.1:11436
  1. POST /v1/messages · claude-sonnet-5 → ollama/qwen3-coder:30b · 200 · 3.4k tok · 38 ms
  2. POST /v1/messages · claude-opus-5 → lmstudio/llama-3.3-70b · 200 · 1.2k tok · 41 ms
  3. GET /v1/models · ollama · 200 · 24 models
  4. POST /v1/responses · codex → vllm/deepseek-v3 · 200 · 5.8k tok · 44 ms
  5. POST /v1/messages · claude-haiku-4.5 → ollama/llama3.2:3b · 200 · 210 tok · 11 ms
  6. web_search · firecrawl cloud · 10 results · capped at 3 searches
  7. SSE stream open · first token in 38 ms

Anthropic Messages + OpenAI Responses · SSE end to end · FIFO per provider

03Privacy

Secrets in the Keychain, nothing in plaintext

API keys live exclusively in the macOS Keychain. Config files stay clean and syncable - no tokens on disk, nothing to leak, nothing to rotate by hand.

  • Keychain storageBearer, X-Api-Key and Firecrawl tokens are stored by the OS and readable only by the app - leave a field blank to keep the saved key.
  • No telemetryThere is no analytics module to disable. The code simply never calls home.
  • Clean configsConfig files stay free of tokens, so they remain trivial to sync and back up.
Settings · Secrets

Provider credentials

  • Ollamano token · localkey-free
  • OpenAI-compatibleoptional Bearer ·•••••Keychain
  • z.aiBearer ·•••••••Keychain
  • FirecrawlCloud API key ·•••••Keychain

macOS Keychain only · 0 tokens on disk · no telemetry module

04Observability

Every request, logged locally

A live journal records full requests, responses and SSE streams with bounded rotation. Inspect exactly what your tools send - then let it roll off.

  • Full fidelityHeaders, bodies and SSE frames, rendered as they flowed.
  • Bounded rotationLogs stay on disk with a size cap you control.
  • FilterableFilter by provider and status - natively, without leaving the menu bar.
Journal · local · rotation 50 MB
  1. 14:02:11POST /v1/messages · claude-sonnet-5 · 200 · 3.4k tok
  2. 14:02:14SSE frame · content_block_delta · 84 chunks
  3. 14:02:19POST /v1/responses · codex · 200 · 5.8k tok
  4. 14:02:24POST /v1/messages · claude-opus-5 · 200 · 1.2k tok
  5. 14:02:31POST /count_tokens · local /4 estimate · 0.4 ms
  6. 14:02:38POST /v1/messages · claude-fable-5 · 200 · 2.1k tok

filter: provider · status

05Profiles

Profiles that hold

Codex and OpenCode profiles are applied and restored independently, and the third-party Claude profile is applied and restored transactionally. Your tools behave as if nothing changed - because on the wire, nothing did.

  • Atomic applyProfiles switch as a unit. A failure mid-apply rolls back cleanly.
  • Independent appsCodex and OpenCode keep their own profiles and their own state.
  • Conflict-safeExternal edits are detected and reconciled instead of clobbered.
Settings · Profiles

App profiles

  • Claude Desktopthird-party profile appliedactive
  • Claude Code5 routes · transactionalactive
  • Codexprofile applied · watchedactive
  • OpenCodeprofile applied · watchedactive

external changes detected → reconciled, not clobbered

Providers

Plays well with your stack

Local providers need no API key at all. Remote ones keep their tokens in the Keychain - never in a config file, never in a shell history.

Clients
Claude Desktop · Claude Code · Codex · OpenCode
Providers
Ollama · OpenAI-compatible (vLLM, LM Studio…) · z.ai · any /v1/models
Web search
Firecrawl Cloud · Firecrawl self-hosted

Provider marks belong to their owners and are used here only to identify compatible products.

Settings · Clients & Providers

Clients

  • ClaudeClaude Desktop5 routes · transactionalRouted
  • CodexCodexOpenAI ResponsesRouted
  • opencodeOpenCodeProfile watchedRouted

Providers

  • OllamaOllama127.0.0.1:11434 · 24 modelsLocal
  • OpenAI-compatible:8000 · vLLM, LM Studio, …Self-hosted
  • Z.aiz.aiapi.z.ai/api/anthropic · BearerRemote

Web search

  • FirecrawlFirecrawlapi.firecrawl.dev/v2 · self-hosted optionalCloud

Get LittleSwitch

Route tonight

One Homebrew command, or grab the app from GitHub Releases. Unpack, connect a provider, map your routes - your tools never notice the difference.

Download coming soon — the first build is being packaged.

Also via Homebrew:

$ brew install --cask littleswitch

Requires macOS 14 or later · Apple Silicon

Release notes