An Epiphani Studio service
Every request goes to the model that earned it.
One OpenAI-compatible endpoint in front of the models you already pay for. Agent Mystro reads each request, works out what kind of work it is, and sends it to the model that wins that kind of work. Not by reputation. By blind test.
Then it learns yours. Every blind pick you make bends the routing toward your taste.
Bring your own provider keys · We never resell inference · Free to 1M tokens
{ "messages": [{ "role": "user",
"content": "Draft a note to a new supplier." }] }
// no model named, so it routes
How it routes
Four moves, on every call.
What kind of work is this?
A deterministic scorer names the task: cold drafting, a reply, a page, code, live research. It runs in under a millisecond, costs nothing, makes no network call, and hands back every signal that fired.
Who has earned that work?
Each task type carries Bradley-Terry strengths built from blind head-to-heads. The request goes to the strongest arm you hold a key for, with the confidence stated rather than implied.
Whose taste decides?
Ask for a taste check and you get two answers with the labels off. Your pick takes one gradient step. After about six picks your taste outweighs the population default. Disagree by pinning an arm and that teaches it too.
Did the routing pay?
Switching models can throw away a warm prompt cache, so we weigh that before moving a request, and only let it win when quality is a coin flip. Ask /v1/gain and it reports what routing bought you, including when it cost more.
Watch it decide
Pick a request. See where it goes, and why.
These are the real classifier signals, the real batteries, and the real routing rules. The outputs are illustrative, not live model calls.
The evidence
The defaults are measured, and here they are.
Every routing default came from a blind battery: ten briefs, outputs shuffled and stripped of provenance tells, judged blind, then decoded against an offline key. The machine-readable version lives at /capabilities.
| Task | Battery | Result | Default |
|---|---|---|---|
| Cold drafting | b1, 10 briefs | Gemini 5 · chain 3 · Claude 2 · GPT 0 | Gemini |
| Replies | b7, 10 briefs | chain 6 · Gemini 4 · solo arms 0 | Claude→GPT chain |
| Pages and interfaces | b2, 10 briefs | GPT 8 · Gemini 1 · Claude 1 | GPT |
| Live research | b8, 10 briefs | Claude 5 · GPT 3 · Gemini 2 | Claude |
| Finance arithmetic | b5, 10 briefs | Every arm 10/10 on accuracy | UNROUTED goes to cheapest |
| Document extraction | b10, 6 documents | GPT 30/30 · Gemini 30/30 · Claude 29/30 | UNROUTED goes to cheapest |
Two of these say do nothing, and that is the point. Where blind testing found no separation we route on cost and tell you so, rather than inventing a preference we cannot defend.
Quickstart
Point any OpenAI client at it.
Bring your own provider keys. We charge for routing and never resell inference, so your token spend stays exactly where it already is.
# 1. Create an account. The key is shown once. curl -X POST https://agentmystro.com/v1/account # 2. Add a provider key. We verify it before storing it, encrypted. curl -X POST https://agentmystro.com/v1/keys \ -H "Authorization: Bearer $MYSTRO_KEY" \ -d '{"provider":"anthropic","api_key":"sk-ant-..."}' # 3. Call it like OpenAI. Leave the model out and let it route. curl https://agentmystro.com/v1/chat/completions \ -H "Authorization: Bearer $MYSTRO_KEY" \ -d '{"messages":[{"role":"user","content":"Draft a note to a new supplier."}]}'
The response carries a mystro block: the task type it decided on, the signals that fired, the battery behind the default, how much of the call was your own taste, whether a cache was weighed, and how confident it actually was.
Pricing
Nineteen dollars a month, and your token bill does not move.
You pay Anthropic, OpenAI and Google directly, at their prices. We take no percentage of it, so the only thing that changes is where each request goes.
Prove the routing on your own traffic.
- 1 million tokens routed each month
- Population defaults from the blind batteries
- The full explainability payload
- Spend caps and cost estimates
The routing becomes yours.
- 5 million tokens routed, then $0.20 per million
- The taste engine: your blind picks decide
- Override learning when you pin an arm
- Cache affinity, so switching never quietly costs you
- The gain report at
/v1/gain
The free tier runs on population defaults only. That is the honest split: it proves the routing works on your traffic, and the part you pay for is the routing becoming yours.
Straight answers
The questions worth asking first.
Do you see my prompts?+
They pass through to your provider and are not retained. Request logs hold ids, counts and enum values, and there is no field in the log record that can carry your text. Cache affinity stores a 12-byte digest of a repeated prefix, never the prefix.
What happens to my API keys?+
Encrypted with AES-256-GCM under a per-customer key derived from a secret held in Worker Secrets, and verified against the provider before they are stored, so a typo fails immediately rather than inside your production traffic. Delete the account and they are gone.
What if I disagree with where it routed something?+
Pin an arm with the x-mystro-pin header and you get that arm. The disagreement is also recorded and moves the routing toward your choice, at about a third of the weight of a blind pick, because a pin is sighted and a blind pick is not.
Does routing between models break prompt caching?+
It can, which is why we weigh it. If another arm holds a live cache for the repeated part of your request, and the quality question is close to a coin flip, the request stays where the cache is and the response says so. When one arm is the clear winner, quality wins and we tell you the cache was passed over.
How do I know the routing is worth paying for?+
Ask /v1/gain. It reports what your traffic cost against what the same traffic would have cost sent entirely to the strongest general-purpose arm, the split by arm, and how often your own blind picks agreed with the routing. It reports honestly when routing cost more.
Why only three providers?+
Because a routing claim is only as strong as the blind evidence behind each arm, and we will not run batteries against a catalogue of three hundred models. If breadth matters more to you than measured routing, OpenRouter or LiteLLM is the better tool and we would rather say so.
What this does not do yet
The limits, in the same breath as the claims.
- One judge, ten briefs per battery. That beats an unmeasured guess and it is not a population study.
- Code and general reasoning have no dedicated battery. Their priors are weak, and every response says so.
- Priors refresh when a battery is re-run, not continuously. Models ship monthly, so a prior can age between runs.
- No automatic provider failover, response caching, guardrails or PII redaction yet. Portkey, Kong and Cloudflare all ship those today.
- No self-hosted build, and that is a design consequence: the population prior is learned across customers, so an isolated instance would ship frozen. If prompts may not leave your infrastructure, LiteLLM is the honest answer.
- No SOC 2 report, no EU data residency guarantee, no third-party security audit.
- Cost figures are estimates from published list prices, used to enforce your cap. Your provider dashboard remains the billing truth.
Stop guessing which model to use.
One endpoint, your own keys, and a routing decision you can check line by line.