Agent Control

/brutor agents/

Your agents: governed on every call. Assured for life.

Anyone can ship an agent. Staying in control of it is the hard part — and that is what Brutor Agent Control is built for. You decide what each agent may do; every call it makes is enforced against that decision; and the agent is watched for as long as it runs — still behaving the way you approved, still showing up for work, still worth its cost per completed task. And when something does need a person, it lands in one queue, gets a decision with a name on it, and that trail is in the report.

you build · DEVELOP
01 DEFINE
02 PROMOTE the gate
03 RUN04 WATCH05 RESPOND the loop
RETIRE
/the questions that matter/

Day one is easy. These questions decide day 201.

?

Will the agent still do its job in six months?

Baselines learned from its real runs; any change reported with the likely cause.Watch · baselines & drift →

?

Can we answer “what did that agent actually do?”

One signed run per task — every action, one outcome, one cost.Run · the signed ledger →

?

How do agents leave pilot — without betting the company?

A written contract, a test gate, and approvals exactly where you want a human.Define & Promote →

?

Two teams, one agent — and Finance kept to itself?

Build it once, share it governed — per-team rules, limits and visibility.The agent registry →

?

What stops a runaway loop or a burned budget?

Budgets, rate and action ceilings enforced before the bill exists.Run · limits →

?

Who notices the agent that didn’t come back?

Brutor does — every agent has a learned rhythm; silence raises the alert, in Slack.Watch · liveness →

?

Who actually looked at it — and what did they decide?

Every finding lands in one queue. Closing one takes a disposition and a note, kept as evidence.Respond · the assurance inbox →

/how it works/

One lifecycle answers all of them — and it’s a loop, not a line.

Follow an agent from your IDE to retirement. You build; Brutor governs everything after the handover — and keeps governing, every day it runs.

Develop LangGraph · CrewAI · AutoGen Claude Agent SDK · your code one line points it at Brutor YOURS — ANY TOOLS YOU LIKE BRUTOR TAKES OVER 01 Define — the contract models · MCP tools · A2A peers · skills budgets · residency · approvals versioned + hashed: “what was it allowed to do in March?” 02 Promote — the gate contract resolves recorded test tasks replay a named person owns it high-risk: impact assessment on file → autonomy level granted PRODUCTION IS EARNED, NOT CLICKED EVERY DAY IT RUNS 03 · Run every call, in flight 04 · Watch learning first 05 · Respond measured, previewed RESPOND → RUN — IN EFFECT BEFORE THE NEXT REQUEST THE ASSURANCE LOOP — IT NEVER STOPS 03 Run — every call decided in flight allow · deny · hold for approval · guardrails both directions argument policies read the SQL · semantic policies in plain English one task becomes one signed run — every action, one outcome, one cost 04 Watch — it learns first, then it judges FIRST ~50 RUNS: it builds each agent’s baseline from its real runs then: liveness · drift with a cause · health = the worst of seven signals continuous checks ask your standing questions of the ledger, every run no verdict it hasn’t earned — “learning” is never rounded up to green VERDICTS — AND EVERY AGENT STARTS AT LEARNING learning healthy degraded drifting stalled silent suspended unknown 05 Respond — measured action, and a name against it tighten one permission · reroute to a safer model · approvals-only · pause previewed first, recorded always — in effect before the next request every finding lands in one queue; closing it takes a disposition + a note alerts to Slack or a signed webhook · weekly digest · one record DAY 1 — IT SHIPS Retire deprecated, then retired access wound down, record intact — the history stays answerable A CLEAN EXIT

Seven stages, one boundary, one gate, one closed loop. Respond changes enforcement before the next request lands — which is what makes this a loop rather than a launch checklist.

You · any tools you like

Develop with whatever you prefer

LangGraph, CrewAI, AutoGen, the Claude Agent SDK, or plain code — your agent, your framework, your process. When it’s ready, one line of code points it at Brutor: swap the base URL, and the agent is on the control plane. The brutor CLI does it for your local tools in about a minute.

LangChain / LangGraphCrewAI AutoGenClaude Agent SDK your own code
Everything developers need — the Developer Corner
From here, Brutor takes over Where the line falls is part of the product — the full split is in who controls what.
01
Brutor · Define

Write down what the agent may do

Every surface it touches, in one contract: which models it may call, which tools it may use, which agents it may talk to, which skills it may run — plus what it may spend and where its data may go. Versioned and hashed, so “what was it allowed to do in March?” has an exact answer.

ModelsMCP tools Other agents · A2ASkills BudgetsResidencyApprovals
Contract version 5 for the Claims Triage Agent, pinned by hash 66e8396bdf74 and marked active. Resources it may use: two models, two MCP servers, one agent identity. Policies in force: two inherited guardrails. What its agents may do: seven agent policies, six allow and one approval-required on claims_update_queue. Limits and governance merged restrictively down the group chain. Autonomy autonomous, inherited through three groups.
One AI System’s contract, as the console shows it — generated from the resolved configuration, never authored. Note what an approver gets to read before promoting: the resources, the per-action agent policies, the limits after inheritance has been merged, and the hash that will be stamped on every run governed by this version.
Watch: AI Systems4:57

Two entries in the agent registry: a passport and a listing

Defining an agent gives it an Identity — its passport, issued through your IdP and carrying its grants — and an Agent Card, its listing: what it advertises for others to discover, signed, over the open A2A standard. One card can serve many clients, each under its own rules and audit trail.

ONE AGENT · TWO RECORDS · DIFFERENT DIRECTIONS 01 · THE PASSPORT Agent Identity what this agent may DO ISSUED BY YOUR IdP — BRUTOR CONSUMES IT, NEVER ISSUES IT Okta Entra Agent ID SPIFFE AUTHENTICATES AS idp_subject · svc-claims-triage@nordica — or an API key bound to this agent MAY DO — PER ACTION, STRICTEST WINS allow mcp_tool → claims_lookup approval mcp_tool → claims_update_queue deny mcp_tool → crm_log_activity everything not listed is denied AND ALWAYS default-deny · enforce | dry-run · expires OUTBOUND checked before this agent may act 02 · THE LISTING Agent Card what this agent OFFERS OPEN A2A DESCRIPTOR — OTHER AGENTS READ IT TO DISCOVER THIS ONE A2A v0.3 discoverable versioned OFFERS — CAPABILITIES, WITH THEIR TERMS fraud.screen_claim input/output schema · 200/hour · pii compliance.sanctions_check input/output schema · 60/hour SIGNED — AND REVOCABLE tenant-signed Ed25519 unsigned cards are default-denied in production REVOKE policy treats it as never-trusted, kept for audit INBOUND read before another agent may call it Same agent. The identity governs what it does; the card advertises what it offers. One card can serve many clients — each under its own rules, and its own audit trail.
Two records, two directions. The identity is consumed, not issued — your IdP stays the source of truth and Brutor decides, action by action, what the agent may do. The card is published: the open A2A descriptor another agent reads before it calls, signed so its trust tier is a fact rather than a hope.

Tools connect once, at team level

Plug an MCP server in once, at team level, and every agent below inherits exactly the access you set — the same way you publish skills and clear the agents it may call over A2A. Nobody wires the same tool up twice.

02
Brutor · Promote — the gate

Production is earned, not clicked

Before the agent goes live, three things have to be true: its contract resolves, recorded test tasks replay successfully, and a named person owns it — and for a high-risk system, a fourth. Pass, and it’s active — with the approved contract stamped on everything it does from then on.

Contract resolvesReplay suite passes Named ownerImpact assessment · high-risk Autonomy level granted

High-risk systems clear a higher bar — automatically

Declare a system’s EU AI Act risk tier and your role — provider, deployer, or both — and the gate tightens itself. A high-risk system will not transition without a named approver on every step and an unexpired impact assessment attached as evidence. Nothing to remember at audit time: it could not have gone live without it.

That same declaration is what the obligations register reads. Which articles apply to which system is derived, not ticked — from the tier, the role and the models each system is bound to — and every obligation carries its date, so “what changes in December, and for which systems?” is a question with an answer rather than a project.

Brutor compliance view. EU AI Act obligations under Regulation 2024/1689 as amended by Regulation 2026/1744, twenty AI Systems evaluated as of 1 September 2026. Five obligations in force — AI literacy, prohibited practices, transparency, and two GPAI duties with no systems in scope — and six upcoming ones dated from December 2026, December 2027 and August 2028. The transparency obligation is expanded: Claims Triage Agent high provider and deployer, Credit Risk Scoring Agent high provider and deployer, Customer Service Chatbot limited deployer and CV Screening Agent high deployer are all marked applies, while three ungoverned systems with no declared risk tier or role are marked undetermined.
Obligations, dated against the Regulation and its amendment — never a compliance checkbox. Note the three rows at the bottom of the expanded article: the shadow systems discovery found read undetermined, not compliant. Nobody has declared their tier or role, so the platform says it cannot tell — which is the only honest answer, and the one that puts them on somebody’s list.

And nothing is unchecked in between

The replay suite covers day one: recorded tasks, run against the agent before it ships. Baselines need about fifty real runs before they mean anything. The two cover different windows on purpose — replay proves it works now, assurance proves it still works later.

ProposedApproved● Evidence gateActiveDeprecatedRetired
Screenshot slotThe promotion gate — an AI System moving to Active with its checks. (Martin: the lifecycle/assurance view showing contract + approved version.)
Watch: Contracts & the Gate3:05
03
Brutor · Run — the loop begins

Every call decided in flight

Each call is checked against the contract as it happens: allowed, denied, or held for approval. Content is guarded in both directions, budgets are counted, and it all lands in one signed run — one task, one outcome, and the cost per completed task — not just cost per call. Enforcing guardrails on live traffic is what a good gateway does; Brutor does it on every call, and then keeps going.

Guardrails, both directionsArgument policies · reads the SQL Semantic policies · plain EnglishHuman approvals
run 01JQ8F…C4K2 completed actions 14 · 9 llm · 4 mcp · 1 a2a · errors 0 cost €0.41 · approvals 1 · contract v4 chain verified · signed gateway-side

Secrets and recipes never reach the agent

Skills run in Brutor’s sandbox — the agent gets the result, the recipe stays protected. The OAuth broker attaches real tokens at the gateway, so no credential ever rides in agent code. And agent-to-agent chains run only as deep as policy allows.

Watch: The Run Ledger4:49
04
Brutor · Watch

It learns first, then it judges

Assurance earns its verdicts before it gives them. Until an agent has about fifty runs to learn from, Watch is building that agent’s own baseline from its real traffic — action counts, tool mix, cost per completed task and how it grows, rhythm — and while it does, the verdict reads learning. Never a green light it hasn’t earned. A busy agent gets there in a day; a weekly batch job takes longer, and Brutor says so rather than guessing. Once the baseline is the agent’s own, movement comes with its likely cause and silence comes with an alert.

Verdicts — and every agent starts at learning

learninghealthydegraded driftingstalledsilent suspendedunknown
Liveness98
Behaviour91
Reliability94
Cost72
Conformance96
Oversight88
Review50
Health = 50 — always the worst component, never the average. Here it’s review: a critical finding has sat unread past the review SLA, so this system cannot read healthy until a person closes it.

Drift arrives with a cause

“Something changed” is an alert nobody can act on. Brutor names the likely reason — a new model version, a changed tool definition, different inputs — so the first question in the incident channel is already answered.

Baselines catch what changed. Checks catch what you asked about.

A baseline notices movement you didn’t predict. A continuous check answers a question you did: “flag any run that used a payment tool without an approval”, “alert me if more than 6% of claims runs end in an error over 24 hours.” Deterministic checks compile to a bounded expression over the run ledger and are evaluated the moment a run closes — no model involved, fully reproducible. Where a question genuinely needs to read content, a governed model judges it with its sampling rate declared and its token budget capped, and every result carries the fingerprint that makes it repeatable.

Plain English is how you write a check, never how it runs. What executes is a versioned, hash-pinned spec you approved — and before it is allowed to raise anything, you can backtest it against your recorded runs: “this would have flagged 187 of the last 4,737.”

Screenshot slot · newThe continuous-checks panel — checks with their tier (deterministic / judged), version, threshold and who approved them, one deliberately still disabled. (Martin: Mission Control → Continuous checks in the Nordica estate; seven checks are seeded, five tier-A, one judged, one awaiting approval.)
Screenshot slot · newAuthoring a check — the plain-English box, the spec it proposed, and the evaluator’s compile verdict underneath. (Martin: this is the shot that proves “NL never executes” — the operator reviews the actual expression before it can be saved.)
Screenshot slot · newA backtest result before enabling — “evaluated 4,737 runs over 30 days, 187 would have breached”, with sample runs. (Martin: the review-the-compile moment; this is the single most reassuring screen on the page for a risk-averse buyer.)
Watch: Drift with a Cause3:11
05
Brutor · Respond — and the loop closes

Measured action, automatically

When something moves, the response fits the problem: tighten one permission, reroute to a safer model, drop the agent to approval-required — or pause it. Previewed first, recorded always, and in effect before the next request lands. That last part is what closes the loop: enforcement changes, and Run picks the change up immediately.

One queue — and a name against every decision

Everything worth a human’s attention lands in a single Assurance Inbox: a guardrail block, a drift finding, a check breach, a budget hard-stop, an agent that went quiet. Recurring signals deduplicate — a storm is one row with a counter, not five hundred alerts. Closing an item takes a disposition and a note — true positive, false positive, expected, or fixed — and those are kept as an append-only trail that becomes the report’s human-review evidence.

A critical item nobody has looked at past the review SLA is itself a health signal: review debt drags the score down, so an ignored queue cannot quietly read green.

Screenshot slot · newThe Assurance Inbox in Mission Control — the triage queue with severity, category and state filters, occurrence counts, and the ageing indicator against the review SLA. (Martin: the Nordica estate carries 17 findings across eight criticals — drift, liveness, check breaches and a contract violation — so the queue looks like a real Monday morning.)

Told, not just recorded

Findings route to Slack or a signed webhook as they are raised, filtered by severity, category or system, and coalesced per finding so a recurring problem is one message per window rather than a pager storm. Every send is recorded — and a channel that stops delivering becomes a finding of its own, because a dead alert channel is the one failure that hides all the others. A weekly digest summarises the same numbers as the report, never a second calculation.

Screenshot slot · newSettings → Notifications — channels with masked destinations, the alert subscriptions with their severity floor and coalescing window, and the delivery history. Pair with the weekly summary panel. (Martin: masked config is worth showing — the webhook URL is stored encrypted and never displayed back.)

Everything the loop produces — runs, drift events, check results, responses, and the dispositions someone signed — rolls up into an assurance report you can hand to an auditor. It is also why agents elsewhere get demoted or switched off: when the only available response is all-or-nothing, all-off wins.

Screenshot slotMission Control alerts — behavior change, tool-definition change, liveness. (Martin: the alerts view from the narration.)
Watch: Replay & the Closed Loop4:04
Brutor · Retire

And when its work is done — a clean exit

Deprecated, then retired: access wound down, record intact. The agent’s whole history stays answerable, even after it’s gone.

New white paper: AI Systems Assurance

The full method behind the Watch and Respond stages you just read — why AI systems fail differently from traditional software, and how the four guarantees (bounded, alive, non-drifting, doing its job) plus the human-review evidence that sits alongside them answer the two questions that stall adoption: who signs their name under this, and how do we know it still works six months in.

Get the white paper →

/human in the loop/

A human in the loop, at four points in the lifecycle

Not a switch you flip in an emergency — a thread that runs the whole way through. Mark an action approval-required when you define it. Run pauses it and waits for sign-off rather than guessing. Respond can dial a whole agent down to approvals-only when its behaviour moves. And when something needs judgement rather than a decision in flight, it waits in the Assurance Inbox until a person dispositions it — with their name on the record. The same mechanism at all four points, so “where does a person decide?” has one answer instead of four.

Screenshot slot · newThe disposition drawer — one finding open, its evidence pointers resolving to the run and the check that raised it, the occurrence trail, and the disposition form where the note is required before it can be resolved. (Martin: this is the “who signs their name under this” screen — arguably the single most differentiating shot we have. Worth capturing at full width.)
/one agent, end to end/

What it looks like on one real system.

The Claims Co-Pilot: five governed actions, the rule that applied on each, and the telemetry landing in Mission Control.

Drawing slotOne real AI System, end to end — the Claims Co-Pilot: five governed actions, the rule applied on each (PII masking, budget, payment approval, scoped access, signed identity), telemetry into Mission Control. (Designer: source schematic in the draft pages; scale as needed.)
/who controls what/

Clear lines, on purpose.

Nobody should need a meeting to work out whose job something is. Here is the split, stage by stage: what Brutor decides, and what stays yours.

StageBrutor handlesYou decide
DefineThe contract — grants, limits, residency — versioned, hashed, dry-runnable.What the agent is for, its code and prompts, which tools to trust.
PromoteThe gate: contract checks, replay suite, evidence for high-risk, autonomy level.Whether the risk is acceptable, and when to ship.
RunAllow / deny / approve on every call; budgets; the signed record.What the agent does between calls, and the quality of its answers.
WatchBaselines, drift causes, liveness, continuous checks, the health score.Which questions are worth asking — and whether the outcomes serve the business.
RespondTighten, reroute, de-escalate, pause — previewed and audited; the finding queue and its alerts.The response policy, the disposition on every finding, and fixing or redeploying the agent.
A fully working lifecycle needs a fully working platform underneath it — and Brutor was purpose-built as one: gateway, identity, policies, discovery and evidence in a single system. See the whole platform →
/the brutor difference/

Five things that make the lifecycle real.

01 · Define

Permissions you can point to

Every agent’s rules are written down, versioned, and stamped on everything it does.

02 · Promote

Production is earned

An agent goes live when its contract resolves, its replays pass, and a named person owns it.

03 · Run

Every action on the record

One task becomes one signed run — every action, one cost, nothing to reconstruct later.

04 · Watch

You hear it from Brutor first

Change arrives with its likely cause, your own standing checks run on every task, and silence arrives as an alert.

05 · Respond

Measured — and signed for

Tighten, add an approval, or pause — matched to the problem. Then a person closes the finding, on the record.

/see it on the real product/

The whole story, on video.

Deep dives into every capability on this page — recorded on the live platform, a few minutes per episode.

Agent Governance with Brutor

Five episodes: AI Systems, identity & authorization, the agent network (A2A), and observability.

Watch the series →

AI Systems Assurance with Brutor

Seven episodes: the run ledger, liveness, drift with a cause, contracts & the gate, replay, and the health report.

Watch the series →
/see it on your own traffic/

Run one agent through the whole loop.

Download the trial, point an agent at the Gateway, and watch a contract, a run, a baseline, a check and a response appear against traffic you recognize.

Scroll to Top