Runtime control and security for AI agents.

REA ControlPlane sits between your agent and the model and applies three controls on every call: cost control (LoopGuard stops runaway code and answers known-bad repeats without calling the vendor), pre-call policy (PreFlight decides before the vendor sees the call; a refused call costs $0), and security & audit (TraceGuard records a receipt for calls that use tools, never message content).

Every call crosses three controls in one hop: PreFlight checks your declared policy before the vendor sees the call (a refused call costs $0). LoopGuard stops runaway and repeated code loops. TraceGuard writes a receipt for calls that use tools, without message content. All three are included in every tier, including the free Trial.

2,000 loops, all three controls, no card. Name, work email, and company (phone optional). Your API key is shown once; copy it immediately. We cannot email a recovery copy yet. Bring your own model key (BYOK). Open Trial signup.

Your agent sends each request to REA ControlPlane, which applies PreFlight, LoopGuard and TraceGuard, then forwards the call to your model vendor or answers it without calling the vendor.

API live LoopGuard · PreFlight · TraceGuard Bring your own key GPT · Claude · Grok · Gemini Works with the OpenAI SDK Free Trial, no card

Try it in a few lines

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_REA_API_KEY",
    base_url="https://api.reacontrolplane.com/v1",
    default_headers={"X-Upstream-Api-Key": "YOUR_MODEL_KEY"},
)

resp = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": "Reply with exactly: REA LIVE"}],
)
print(resp.choices[0].message.content)

Your REA key is the API key, the base URL points at REA, and your own model key goes in one header. See the four setup steps.

In plain language

LoopGuard · cost control

Stop paying for the same failed loop twice.

Coding agents retry broken code, and each try can be another paid model call. LoopGuard looks at the structure of the code, not the wording of the prompt. A first-seen runaway pays the probe time box, but the model is not called (block). Repeats of that structure, on GPT, Claude, Grok, or Gemini, are answered from cache without the probe (cache). Unique chat still pays the vendor.

PreFlight · pre-call policy

Decide before the vendor sees the call.

PreFlight checks your declared deny rules before the call leaves. A match is refused with a reason, the vendor is never called, and the refused call costs $0. Clean calls continue on the same hop.

TraceGuard · security & audit

A receipt when tools are involved.

For calls that use tools, TraceGuard keeps a receipt: when it happened, which tools were named, and how TraceGuard classed the call. No message content and no tool arguments. Every response also carries rea_meta: whether REA forwarded, stopped or replayed the call, and a fingerprint (hash) of any code. Details are on Architecture.

What works today

A public API

HTTPS at api.reacontrolplane.com. Same shape as OpenAI chat completions, including streaming.

Your vendor key stays yours

Your OpenAI, Anthropic, xAI, or Google key travels with each call in X-Upstream-Api-Key, is used only to make that call, and is never stored. You pay that vendor directly. Your REA key is separate, and REA keeps no backup vendor key for your traffic.

A hard stop

LoopGuard stops a runaway snippet at a fixed time box. When your loops run out, REA returns 402; going over your plan's requests per minute returns 429.

A receipt on every call

Responses include rea_meta: mode (openai / anthropic / xai / gemini / block / cache), the fingerprint, and sandbox status.

PreFlight, live

Your declared deny rules are checked before the vendor call. A refused call costs $0.

TraceGuard, rolling out

A receipt for calls that use tools: the tool names and how TraceGuard classed the call. No message content, no tool arguments.

Where it sits

Your agent (Continue, Cline, or an SDK) | | POST /v1/chat/completions | Authorization: Bearer <REA key> | X-Upstream-Api-Key: <your model key> v https://api.reacontrolplane.com | v REA ControlPlane checks your REA key and monthly loop budget PreFlight policy check (refuse → $0, vendor never called) TraceGuard classifies tool calls (observe mode) LoopGuard fingerprints code structure returns cache on a known trap otherwise probes the snippet (time-boxed) TraceGuard receipt (no message text) | v OpenAI, Anthropic, xAI, or Gemini — your key, your bill | v Vendor answer, plus a small rea_meta receipt

You do not change models. You change the base URL and add one header.

What it is not

Not a model

No training. No rewritten answers. The first answer you see is the vendor’s.

Not a single savings number

Cache helps when the same failure repeats. A new runaway still pays the probe time box, and new failures the probe does not stop still call the model. We do not publish a universal percentage.

Not Cursor-first

The supported path is Continue, Cline, or any client that can set a custom base URL and header.

Q&A

What is REA ControlPlane?

REA sits between your agent and your model vendor. PreFlight checks policy before the call, LoopGuard stops runaway and repeated loops, and TraceGuard writes a receipt for calls that use tools, without message content. Only calls that should reach your vendor are forwarded.

What is a loop?

A loop is one model call forwarded to your vendor. Calls REA stops cost no loops.

What happens on a cache hit?

REA replays the stored stop from an earlier LoopGuard decision. It never replays a vendor answer, and a cache hit does not create a new vendor call.

What do I need for a Trial key?

Trial signup asks for your name, work email, and company. Phone is optional. There is no card requirement. The Trial includes 2,000 loops and all three controls. Your API key is shown once, so copy it immediately.

Can I use Cline, Continue, or an SDK?

Yes. Use an OpenAI-compatible provider, the REA base URL, your REA key, and X-Upstream-Api-Key with the matching vendor key. The OpenAI SDK, curl, Cline, Continue, and other clients work when they support those settings.

Is Firecracker live?

Not yet. Firecracker is planned. The current probe is a time-boxed subprocess.

How much will REA save?

There is no universal savings percentage. Results depend on your traffic, models, and repeat patterns.