Open core The control plane for production AI

Everything else tells you what went wrong. Astriel stops it.

A gate in front of your model that masks what shouldn’t leave, refuses what shouldn’t run, and holds what a person should see first — in single-digit milliseconds. Every decision lands in the same trace you already debug with.

Self-hostable · runs on CPU · one base-URL change to adopt

astriel-gate / enforce Demo
5
Outcomes — allow, mask, flag, hold, refuse
0 GPU
Tier-0 checks are deterministic, on CPU
1
Base-URL change to adopt
100%
Self-hosted — nothing leaves your network
01 — The stakes

An agent that can act can act wrongly

The moment you gave it tools, the failure stopped being an embarrassing transcript and became a thing that happened. Observability watches all three of these and does nothing about any of them.

It sends data it shouldn’t

A customer pastes an identifier into chat. A coordinator names a trial participant. It goes to your model vendor verbatim and lands in somebody else’s logs.

In a third party’s logs, permanently

It does what a stranger told it

“Ignore your instructions.” The model obeys, because obeying instructions is the only thing it knows how to do — and out comes the system prompt, the tool list, the data behind them.

Your prompt and tools, disclosed

It takes an action nobody sanctioned

It refunds two orders of magnitude too much, emails the wrong list, or answers a clinical question it had no business answering. Confident, instant, wrong.

Already done by the time you look

Observability watches. Astriel acts. It sees the risk — and steps in.

02 — The reliability loop

One connected loop, not four disconnected tools

Every other platform stops at the first verb. Astriel closes the loop — and each stage feeds the next.

01

Observe

Full tracing of every call, tool, and turn.

02

Evaluate

Multi-turn, trajectory & simulation scoring.

03

Protect

Redact, block & approve in real time.

04

Prove

Tamper-evident, policy-versioned audit trail.

03 — The product

Four surfaces. One trace.

Guardrail decisions, eval scores and simulation runs are not a separate console you check on Fridays. They land as observations in the same trace you already open when something breaks.

Guardrails / support-agent / v9 Shadow — record only Save new version
Policy name  support-agent 4 rules Nothing is saved until you press Save
01
mask-identifiers Detects pii.ssn, pii.credit_card · Applies to input
Mask
02
block-injection Detects injection · Fires at confidence ≥ 0.85
Refuse
03
high-value-action Detects tool.refund · amount > $500
Hold for a human
04
leaked-credentials Detects secrets · Applies to output
Refuse
First match wins

Rules are ordered, not scored together. Rule 01 masks the identifier and the request continues; rule 02 refuses and nothing downstream runs.

Ordered rules with firewall semantics — first match wins, and every rule can redact, block, flag, or hold for a human.

Screens are populated with example data — the layouts and labels are the real ones.

04 — Generality

There is no supported-industry list

Checks produce findings. Ordered rules decide what happens to them. The policy is a versioned file you write. Nothing in that sentence mentions an industry — so what follows are illustrations, not a menu, and the last one is the point.

Examples

A dispute agent that can move money

The risk is not a bad sentence — it is a correct-looking tool call. Identifiers get masked before they leave your infrastructure, and anything above a threshold waits for a person.

astriel-gate / dispute-agent / enforce
customer › I was double charged. My card ending 4402 1187 6631 9008 gate › pii.credit_card · rule mask-identifiers upstream › "…my card ending [CARD-REDACTED]" agent › issue_refund(amount=9500) gate › amount > $500 · rule high-value-action held › awaiting human → lead reviewed → denied
Detects today

pii.credit_card, pii.ssn, secrets, injection

Held for a human

Refunds and credits above your own threshold

The audit question

“Prove no card number reached the model vendor.”

One honest limit, since the rest of this section is a claim about generality: detector coverage is where a domain difference is still real. The built-in kinds today are US-centric personal data, cloud secrets, injection families, and blocklist phrases you write yourself. Loadable entity packs — so you can add an MRN, an NHS number or an IBAN without waiting on us — are the next thing landing.

05 — Adoption

Nobody should trust a new gate on day one

So don’t. Every policy starts in shadow: it scores 100% of real traffic, blocks nothing, and shows you exactly what it would have done. You promote it when the numbers stop surprising you.

Guardrails / Shadow analytics Example report Promote to enforce
Last 7 days What would have been blocked this week
0
Total findings
0
Would block
0
Would require approval
0
Would redact
0
Would flag
Rule Action Count Share of findings
mask-identifiers Would redact 2,549
block-injection Would block 214
high-value-action Would require approval 37
leaked-credentials Would block 41

The figures above are a worked example, not a customer’s results — we would rather show you the shape of the report than borrow somebody else’s numbers. The point is what fills it in: after a week in shadow, the case for enforcing is made out of your traffic, and you can check it before anything is switched on.

06 — Where we sit

The crowded half of this market is the half that only watches

Tracing is close to solved and there are good tools doing it. The control plane in front of the model is where almost nobody is — and it is the only part that can change an outcome.

Observability platforms

Excellent records of things that already happened

Genuinely useful, and you should keep yours — we are built on the same data model, so your instrumentation carries over. But a trace of a leak is a trace of a leak. Nothing in a read path can decline a request.

Closed guardrail vendors

They can block. Then the questions start.

Usually an SDK call at every checkpoint you remember to add, two crude outcomes, GPU-backed pricing, and a decision log that lives in their console instead of your trace — so the block and the request that caused it are never on the same screen.

Astriel

In the path, in the trace, in your infrastructure

Five outcomes including hold-for-a-human. Deterministic checks on CPU. One base URL to adopt. Open core and self-hostable, so the sensitive value never has to leave your network to be found.

07 — Questions

The awkward ones first

What happens when the gate goes down?

You choose, per policy, and you choose in advance: on_error: open lets traffic through unchecked, on_error: closed refuses it. Neither is the right default for everyone — an internal summariser should stay up, a system handling regulated data should probably stop. What we will not do is decide it for you at 3am.

If the upstream model fails mid-request, the input decision is still recorded and the trace is tagged, so a provider outage does not create a hole in your evidence.

Isn’t this just observability with extra steps?

No, and the difference is the whole product. Observability is a reader: it records what happened. Astriel sits in the request path and can change the outcome — mask a value before it leaves, refuse a call before the model runs, hold an action until a person approves it. Those need to happen synchronously, before the fact.

How much latency does it add?

Tier-0 checks are deterministic pattern matching on CPU — single digit milliseconds, no GPU, no model call. The optional Tier-1 classifier catches paraphrased attacks that patterns miss and costs more; it is a per-rule opt-in, so you pay for it only where you want it.

What does it take to adopt?

The gate speaks the OpenAI and Anthropic APIs, so in the common case you change a base URL and nothing else. There is no SDK to thread through every call site, and no per-checkpoint instrumentation to maintain — which matters, because a checkpoint someone forgot to add is exactly where the incident happens.

How do I know it isn’t blocking legitimate traffic?

Because you will have watched it not block anything for a week first. Shadow mode scores real traffic and takes no action, so you see the false-positive rate on your own data before enforcement is on. Rules can also be narrowed to specific entity kinds — redact identifiers while leaving email addresses alone, for instance — rather than being all-or-nothing per check.

Can I recover data that was masked?

Yes, and every recovery is itself a logged event with the person, the time and a stated reason. That is deliberate: irreversible masking sounds safer right up to the first legitimate dispute investigation, and unlogged reveals turn the safety property into a formality.

Is this only for regulated industries?

The engine has no concept of an industry. Checks produce findings, ordered rules decide what happens, and the policy is a versioned file you write. Today’s built-in detectors lean US-centric on personal data — that is a real limit and we would rather say so — but injection, secrets and blocklist rules are domain-neutral, and loadable entity packs are the next thing landing.

Open source, or open-washing?

Open core, self-hostable, and it runs on your own infrastructure with your own model keys. The point of the architecture is that sensitive values never need to leave your network to be detected — which is not a claim you can make about a hosted scanning service, however good its policies are.

Observe. Evaluate. Protect. Prove.

Run it in shadow for a week. It will block nothing, and it will tell you exactly what a week of your real traffic would have cost you.

Start in shadow

Tell us what you’re running.

We’ll get back to you personally with the one base-URL change and a policy to start from.

No newsletter, no sequence. One reply, from a person.