Swap the model, not the app
Moving to another model, provider or key is a gateway config change. Your apps keep calling the same address with the same OpenAI client.

For the AI behavior engineer
Polypus is an OpenAI-compatible gateway for developers shaping how their AI behaves. Your apps and agents call one address, and you change models, routes and keys in one place.
Moving to another model, provider or key is a gateway config change. Your apps keep calling the same address with the same OpenAI client.
Named routers pick a model per turn: a stage router that reads tool progress, an LLM classifier, escalation that latches to a strong model, and fallback.
Choose a routerTraces go to Phoenix and HyperDX, and every failed call leaves a JSON dump that an agent can read to work out what went wrong.
The gateway holds every provider URL and key, read from the OS keyring. Your apps carry one client key, or none on your own machine.
polypus deploy runs the whole stack in Docker on your machine. Nothing publishes a host port, so only devices on your Tailscale network can call it.
Set it upPoint any OpenAI client at your gateway and pick a model or a router by name. The default deploy defines router/turno for chat.
curl https://polypus-laptop.tail1234.ts.net/v1/chat/completions \
-H "Authorization: Bearer $POLYPUS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "router/turno",
"messages": [{"role": "user", "content": "Hello"}]}'
One guide takes you from an empty machine to a locked gateway on your tailnet, and a coding agent can walk you through it.
Start the setup