Determinism is the only honest form of autonomy.
Why we built a control plane that refuses most of what it could do.
The velocity paradox
LLMs made writing code roughly an order of magnitude faster. They did not make reviewing it faster, and they did not make production more forgiving. The result is a widening gap between how quickly change enters a system and how quickly a human can understand the consequences of that change. The gap is widest at 3 AM.
Every reliability tool built in the last decade sits on the wrong side of that gap. Alerting platforms tell you production is already broken. The current generation of AI incident agents investigates after it has already broken. Both are autopsies. Neither one was ever standing at the gate.
Prevention beats triage, and it is cheaper
The cheapest incident is the one that never merges. A bad config toggle caught by a Shadow Replay costs zero seconds of downtime. The same toggle caught by an alerting platform costs a page, a war room, and a post-mortem. Shifting left is not a slogan; it is the difference between a blocked pull request and an incident channel.
So the first question we ask of any fault is not “how fast can we detect this?” but “what is the earliest point in the lifecycle where this becomes visible?” For latency regressions and hardcoded secrets, that point is pre-merge. For capacity and correctness faults that only appear under real traffic, it is a 1% Sentinel Cell. Only what survives both belongs in a production remediation loop.
A model should never be the last line of defence
We use language models for what they are genuinely good at: correlating messy, unstructured signals such as commits, config diffs, traces and heartbeats, into a ranked hypothesis about cause. That is reasoning, and it is hard.
We do not use them to decide what happens to your database. The action layer is a compiled allowlist in Go with no model in the path. It permits a scoped revert and a replica scale. It refuses drops, deletes, truncates, namespace deletions, and force pushes by raising an exception the calling code cannot catch. A model that hallucinates a destructive command gets an error, not a production incident.
This is the whole design position: probabilistic reasoning, deterministic action. The moment those two are collapsed into one system, you have built something that is occasionally catastrophic and permanently untrustworthy.
Uncertainty should route to a human, loudly
Confidence below 85% does not produce a cautious action. It produces no action, and a written root-cause analysis in your Slack channel with a one-click approve. An autonomous system that degrades gracefully into a human decision is one an on-call engineer will actually leave enabled at 3 AM. One that guesses quietly gets turned off after its first bad call, and then it protects nothing.
Blast radius is a design constraint, not a setting
- Progressive rollout is capped at 1% of production traffic during the observation window.
- Every remediation carries a hard 60-second timeout, after which the transaction rolls back and control returns to on-call.
- Every permitted action is reversible by construction. If it cannot be undone, it is not on the allowlist.
None of these are tunable up. A constraint you can raise under pressure is not a constraint; it is a suggestion with extra steps.
Say what you cannot do
Odonat cannot catch a business logic error that passes every test and moves no metric. It cannot catch a fibre cut or a region-wide hypervisor failure. It cannot catch a kernel zero-day before a signature exists. It cannot catch a CSS bug.
We publish that list on the home page, in full, at the same size as everything we can do. A reliability vendor that will not state its own failure modes is asking you to trust a claim it has not tested. We would rather lose a deal on the boundaries than win one and be discovered at 3 AM.
What we are actually building
An autonomous AI SRE: something that sits in your delivery pipeline, recognises the specific classes of harm it was designed to recognise, contains them before they spread, and escalates to a human when it encounters something it does not understand. It does the part of the job that is pattern matching against a system it has watched for months, and it hands over the part that requires judgement. Not an oracle. Not a chat wrapper. A bounded, reversible, auditable control plane that earns write access one refused destructive command at a time.