Agent Governance with Brutor
Five episodes: AI Systems, identity & authorization, the agent network (A2A), and observability.
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 build the agent the way you like. Brutor takes over at one base URL: every call it makes is enforced against a contract you approved, its normal is learned from its own runs, anything that drifts is named with its likely cause, and the evidence ends up in a report your management and your regulator can read.
This is one real run of the Brutor Demo System, a loan pre-screening agent that runs around the clock against Brutor and is high risk under the EU AI Act. Nine governed actions, numbered in the order they happened: two MCP tools, a sandboxed skill, a model, a second agent (which made its own model call, 6a), a stronger model, and the write-back. Every one of them went through the gateway, and every one was answered.
Seven steps, from your IDE to your regulator’s desk. The first one is yours; everything to the right of the dotted line is what Brutor does, every day the agent runs. The same picture follows you down this page, lit where each step happens.
LangGraph, CrewAI, AutoGen, the Claude Agent SDK, or plain code: your agent, your framework, your process. Brutor does not ask you to adopt a runtime, an SDK or a wrapper.
The demo agent is a LangGraph graph of eight nodes in Python. Nothing in it is Brutor-specific except where it sends its calls and a handful of headers it adds to them. It could as easily be a CrewAI crew or a hand-written loop; the gateway sees the calls, not the framework.
Swap the base URL and use a Brutor key. Models, MCP tools, skills and other agents all go through the same gateway, so every call the agent makes is checked, recorded and grouped with the other calls of the same task.
The gateway speaks the dialects your code already uses (OpenAI, Anthropic, Gemini, MCP and A2A), so nothing else in the agent changes. A few optional headers tell Brutor which calls belong to one task and which release of the agent made them. From then on, one task is one run: every action, one outcome, one cost per completed task, and the contract version that governed it.
Everything the agent is allowed to touch and every rule it must live within, frozen into one version, hashed, and approved by a named person. From then on, that contract is stamped on every run, so “what was it allowed to do in March?” has an exact answer.
What goes in. Its identity (issued through your IdP, default-deny, and the only thing that decides access). The models, MCP servers, skills and knowledge bases it may use, and the other agents it depends on, each with a role and a criticality. The policies it passes on every call: guardrails in both directions, argument policies that read what a call would actually do, and per-action grants. The limits: budgets, rate and concurrency caps, and per-run ceilings on calls, tokens, cost, duration and delegation depth. And the releases of the agent you have approved.
A person, exactly where the arguments say so. The demo agent may record any recommendation, but a decline, or a loan over 25,000 EUR, waits for an underwriter before it is written back. The run ends escalated instead of pretending it finished.
Generated, never authored. The contract is the resolved configuration, inheritance merged and the strictest value winning. Change the configuration and the contract drifts until someone approves a new version; the diff says exactly what widened and what tightened.
There is no universal normal for an agent. So Brutor learns each one from its own runs: how many actions a task takes, which tools and models it uses, what a completed task costs, how often it runs, and how its runs end. Until it has about fifty runs to learn from, the verdict reads learning, never a green light it has not earned.
For the demo agent, normal is nine actions per run: the eight steps of the graph plus the fraud screener’s own model call. A run that suddenly takes fifteen, or skips the fraud screen, is not normal, and Brutor can say so because it knows what normal is.
Bad days do not poison the baseline. When something outside the agent goes wrong (a provider outage, planned maintenance), you declare an incident window: its runs are kept as evidence but excluded from judgement, and the shaded band on every chart says so.
Seven signals score the agent continuously: liveness, behavior, reliability, cost, conformance, oversight and review. Health is always the worst of them, never the average, because an agent that is cheap, fast and ignored by its approvers is not 80% healthy.
The humans are measured too. The demo agent is a good example. Every machine signal is within its floor and the fraud screener it depends on is healthy, and the verdict is still degraded: most of the decisions it held for an underwriter expired with nobody deciding. A human control nobody exercises is not a control, and Brutor will not draw it green.
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, a release nobody approved, a failing dependency, different inputs. Closing a finding takes a kind and a note, and each kind has one effect: an accepted change re-learns the baseline, a fixed cause declares an incident window, a false positive is detector feedback. Windows excuse performance, never facts: an outage can explain a slow week, not a tool outside the contract.
And the response fits the problem. Tighten a permission, drop the agent to approvals-only, pause it, or stop one run without stopping the agent. Previewed first, recorded always, and in effect before the next request lands. Every finding lands in one Assurance Inbox, goes to Slack or a signed webhook, and is closed by a person with a disposition and a note.
Declare where the agent operates and what it does, and Brutor works out which obligations apply, from when, and whether the evidence is there. The EU AI Act first, with ISO/IEC 42001, SOC 2, GDPR, HIPAA, DORA, NIS2 and others read from the same evidence.
Obligations are derived, not ticked. The risk tier, your role (provider, deployer or both), the models the agent uses and the agents that depend on it decide which articles apply. Risk travels along the dependencies: the demo’s fraud screener is declared minimal risk, but it contributes to a credit decision, so it is evaluated at high. Every obligation carries its date, so “what changes in December, and for which systems?” has an answer.
High risk tightens the gate. A high-risk agent cannot move toward production without a named approver on every step and an unexpired impact assessment attached as evidence. It could not have gone live without it.
Evidence an auditor can check without trusting us. Every decision the gateway reaches is sealed as a signed record, refusals included, because a log that only keeps successes cannot prove its gates ever fired. The records go into an append-only log per tenant whose checkpoints can be countersigned by an independent witness.
Everything the loop produced rolls up into one assurance report per agent: its status, what Brutor knows, what prevents full assurance, the verdict, its dependencies and their health, and the releases it ran. Download it as JSON or print it to PDF from the console.
The report is honest in the one place most reports are not: it ends by stating what it does not cover. The demo agent’s report reads assured with exceptions. It stayed inside the bounds its approvers signed, but its runs carry no signed execution chains yet and no independent evidence is attached, and the report says so in plain words rather than rounding up.
The Brutor Demo System pre-screens consumer loan applications for a fictional Stockholm lender, Borealis Consumer Finance AB. Eight governed actions per run, each under a rule you can point to. Point it at a free trial and watch Brutor learn it, judge it, and seal the evidence.
| Step | What the agent does | Through Brutor | The rule that applies |
|---|---|---|---|
| 1 · Intake | Loads the application | MCP · loan applications | An agent grant for that one tool; nothing ungranted is reachable |
| 2 · Verify identity | Checks the applicant | MCP · credit bureau | Agent grant; an unverified applicant is always referred |
| 3 · Credit report | Pulls the report | MCP · credit bureau | A sensitive read, sealed as evidence |
| 4 · Affordability | Runs the lender’s own policy | Skill · sandboxed | The recipe never leaves Brutor; per-skill limits |
| 5 · Classify | Scores the risk | LLM · classifier model | Budgets, run caps and guardrails |
| 6 · Fraud screen | Asks a second agent | A2A · fraud screener | A declared critical dependency; delegation depth capped |
| 7 · Decide | Drafts the recommendation and the customer letter | LLM · drafter model | The letter carries the AI disclosure |
| 8 · Record | Writes the recommendation back | MCP · loan applications | A decline or a loan over 25,000 EUR is held for an underwriter |
Nobody should need a meeting to work out whose job something is. Here is the split, step by step: what Brutor handles, and what stays yours.
| Step | Brutor handles | You decide |
|---|---|---|
| Develop | Nothing: your framework, your process. | What the agent is for, its code and prompts. |
| Route | Every call checked and recorded; one run per task. | Which calls belong to one task, and how the agent names its release. |
| Contract | The resolved contract (grants, dependencies, releases, policies, limits), versioned and hashed. | What the agent may use, which tools and agents to trust, and who approves. |
| Learn normal | Baselines from the agent’s own runs; incident windows kept out of judgement. | When a change is the new normal. |
| Observe drift | Seven signals, drift with a cause, the Inbox, alerts and measured responses. | The response policy, and the disposition on every finding. |
| Comply | Obligations derived and dated; every decision sealed as evidence. | The risk tier, your role, and the documents only you can write. |
| Report | One report per agent, saying what it does not cover. | Whether the risk is acceptable, and who signs. |
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
Deep dives into every capability on this page, recorded on the live platform, a few minutes per episode.
Five episodes: AI Systems, identity & authorization, the agent network (A2A), and observability.
Seven episodes: the run ledger, liveness, drift with a cause, contracts & the gate, replay, and the health report.