Skip to content
Adeeb Bashirzentex ~/
All writing

2026-07-05

Zero prompt logging is the product

An LLM router sits in the most sensitive spot of the whole stack. Every prompt, every system message, and every tool result passes through it. Most providers treat that stream as an asset to mine. I think the mining is the bug.

The most sensitive hop

Once you put a router in front of more than one model, you have built a place that sees everything. The user prompt. The system prompt you did not want a vendor to keep. The tool result that contains a customer record. The stack trace from an internal admin. There is no version of this job that sees less. The only decision is whether that stream becomes a dataset.

Vendors have a story for why it should. They will improve the model. They will debug your latency. They will train a classifier that catches abuse. Some of that is real operations. Most of it is a business model that needs your context more than you need their model. The model is replaceable. The context is not.

What routing.run actually does

routing.run is OpenAI compatible on the outside. You change a base URL and an API key. The tools you already have keep talking the same protocol. Inside, the request is routed to a healthy upstream, usage is recorded without the body, and the prompt is dropped. There is no prompt store to breach, subpoena, or train on, because the store does not exist.

That sentence is doing a lot of work, so I will be exact. Request content is processed so it can reach the selected provider. The provider still sees the prompt. I cannot unsee a model API. What I will not do is keep a second copy in my own logs, my own analytics warehouse, or a 'help us improve' bucket that is really a corpus. Usage logs hold the operational minimum: model, provider, tokens, latency, billing, and the security signals you need to keep the service up. Not the text.

The core is published under AGPL-3.0 for the same reason. A privacy claim you cannot inspect is just marketing. If you want to know how routing, usage, and provider selection actually work, read the code. I would rather be argued with about an implementation than believed about a landing page.

Commodity models, scarce context

The models themselves are a commodity now. They get cheaper and better every quarter no matter what I do. A new name lands, a new context window lands, a new price lands. If your product is 'we picked the right model', you are in a race you will lose on a press cycle. If your product is 'we will not keep your prompts', the race is different. You can change the upstream without changing the contract.

Failover is part of that contract. Providers go unhealthy. Streaming requests can only fail over before any response content has been shown to the client, otherwise you have forked a completion in front of the user. Ordered provider chains and circuit breakers exist so the router can move eligible work. They do not exist so I can justify keeping bodies around 'in case we need to replay'. Replay of a prompt is a storage decision. I declined it.

How to tell if a router is lying

Ask where the bodies go. If the answer is a dashboard with a search box, they are logging prompts. If the answer is 'we anonymize', ask what is left after anonymization, who can reverse it, and how long it lives. If the answer is 'we need it to improve quality', that is their business, not yours. If the answer is a privacy policy that takes four screens to say maybe, it is a maybe.

I built routing.run because I was tired of that conversation. Zero prompt logging is not a setting buried next to a cookie banner. It is the product. If a vendor needs your prompts to improve the model, that is their business, not yours. The FAQ on this site says the same thing in one line, and I will keep saying it until the default in this industry is forgetfulness rather than retention.

Billing is the other place bodies sneak back in. A usage line needs tokens, a model id, and a timestamp. It does not need the prompt. If a billing export contains customer text, the router is logging, whatever the privacy page says. I would rather explain a sparse invoice than explain a corpus.

If you want the operational details, they live on the product site, not here. This page is the position. The position is simple. The router in the middle sees everything. It should remember nothing. I ship from Kashmir, I quote in writing, and I will not take a job that needs me to hold your prompts in a database so a model vendor can get smarter on your customers. There are plenty of people who will. I am not one of them.

Reply by email: zentex@warm.run