Wire up your own AI network.
A free, open-source desktop app that composes your AI providers into local gateways.
Features
·
How it works
·
Building from source
·
Architecture
You define virtual models, wire them to real providers on a node canvas, and point clients such as Claude Code, Codex, and Cursor at one local endpoint.
- One endpoint for every client: each gateway serves both API dialects on a single base URL,
/v1/messages(Anthropic) and/v1/chat/completions(OpenAI). The request path disambiguates; there is nothing to configure per client. - Virtual models: clients see aliases such as
fastorsmart. Swap the real model behind that name without touching a single client config. - Composable routing: failover ladders send traffic to the topmost healthy target; round-robin pools spread it evenly or by weight. Chain routers to combine strategies.
- Any provider: hold several Claude or Codex subscription accounts and pick which one their own tool signs in as, or add any OpenAI-compatible or Anthropic-compatible endpoint with a base URL and key. recompose never signs in for a subscription and never spends one, because the provider's own tool does both. The roadmap includes local runtimes (Ollama, LM Studio).
- Offline-first and private: no signup, no telemetry. Credentials stay on your machine in
~/.recompose. Serving on a Local Area Network (LAN) is opt-in, and the app recommends turning on the local API token when you do.
A gateway is a running local server. Its canvas wires virtual models through routers to provider targets:
Claude Code ──▶ http://localhost:8397/my-gateway
│
[ virtual model "fast" ]
│
[ router: failover ]
#1 │ #2 │
[ Claude · sonnet ] [ OpenAI · gpt-5 ]
Clients connect through an environment variable:
export ANTHROPIC_BASE_URL=http://localhost:8397/my-gatewayOpenAI-dialect clients set OPENAI_BASE_URL to the same address.
Requires Node 22+ and pnpm 11.
pnpm install
pnpm dev| Path | What lives there |
|---|---|
apps/desktop |
Electron app (main, preload, renderer) |
docs/adr |
Architecture decision records |
The Electron shell hosts the UI. The gateway engine runs in a utilityProcess as a pure TypeScript package with no electron imports, keeping a future headless mode possible. The docs/adr index records every technical decision.
