AI agents change as they work. You need to know whether those changes make them better, who approved them and how to take them back. Brevet is an open-source Python runtime that brings change control to that evolution.
Brevet brings change control to AI agents that work alongside people. It keeps two versions of each agent apart: the release doing the work, and the changes proposed for the next one.
A change reaches the agent only after a named person approves it and it passes the release checks. Each release records what changed, the evidence behind it and who approved it, so a change that proves wrong can be traced and withdrawn.
Release 0.1.0Running
The version doing the work
Rules it has learned
Instructions and skills
Tools and their permissions
Model and settings
Signed, with its approvers and test evidence
Release checks: approval and tests
Proposed 0.2.0Waiting for review
Changes for the next release
+Treat pump vibration during cleaning as major.A new rule, proposed from four corrections
Approval by a named person
Tests before and after the change
Reaches the agent only after both checks
A proposed change stays apart from the running release until a person approves it and it passes the release checks.
02 / Why Brevet
An agent can learn the wrong lesson.
A correction that is right for one task can be wrong for the next. A reviewer raises the severity of a pump fault because she suspects seal wear. If a faulty sensor turns out to be the cause, the team must stop the agent applying that lesson.
Before an agent’s lessons shape real work, the people responsible need three answers.
What has the agent learned?
Every release lists each rule, where it came from and the set-up the agent runs with.
Who approved it?
Each rule names the person or review group that approved it, with their signature once signing is on.
How do we take it back?
Recall the rule. Brevet stops serving it and flags every release that carried it.
03 / How it works
The governed evolution loop.
Brevet runs an agent’s learning on a daily rhythm. By day, the agent works and experts correct it. Overnight, Brevet studies the corrections and proposes changes. At dawn, people decide which ones the agent may use.
The governed evolution loop in three phases: day, dream and dawn. After each release the agent works under it, and the loop begins again. A rule can be recalled at any time.
Day
The agent works. Experts correct it.
Work
The agent drafts under its signed release.
Agent
Correct
An expert fixes the draft and gives a reason.
Expert
Dream
Overnight, Brevet studies the corrections.
Propose
Recurring corrections become a proposed rule and tests, with no authority.
Brevet
Dawn
People decide what the agent may use.
Decide
A named person or review group promotes or rejects it.
People
Test
The corrections replay as tests. A change that scores worse is stopped.
Brevet
Release
Approved rules ship in a new signed release.
People
The agent works under the new release, and the loop begins again.
Recall at any time: withdraw a rule, and Brevet flags every release that carried it.
Agents propose.A proposal has no authority until a person approves it.
Evidence tests.The experts’ own corrections become the tests.
People approve.Only a named person or review group can decide.
Releases are signed.Each records what changed, why and who approved it.
Dream proposes. Dawn decides.
The two steps are kept apart on purpose: the process that finds a pattern cannot approve it.
Overnight
Dream
Brevet looks for corrections that keep recurring and turns them into a proposed rule.
P-301minormajor
P-302minormajor
P-303minormajor
P-304minormajor
No authority yet
Treat pump vibration during cleaning as major.
One test per correction
Runs offline, apart from live work.
Groups corrections about the same problem in the same kind of work.
Never proposes the same rule twice, or a rule already recalled.
In the morning
Dawn
A named person or review group decides what happens to each proposal.
Waiting for a decision
Treat pump vibration during cleaning as major.
PromoteHoldRejectAsk the experts
agent:triage tried to approveRefused
Only people decide. Approvals by an agent, a model or the overnight process are refused.
With signed approvals on, a decision needs the approver’s own key.
A rejected proposal stays on the record, with the reason.
Follow one correction through the loop.
A worked example with signed approvals. At the Decide step, you make the call.
Try an example
An agent rates equipment problems for a pharmaceutical quality team.
The reviewer raises the severity.
The agent rates pump vibration during cleaning as minor. The reviewer changes the rating to major, explaining that it may be a sign of seal wear. She makes this correction on four reports.
Four corrections recorded
The agent’s draft
Minor. Log and monitor.
The reviewer’s correction
Major. Escalate for review.
Brevet records each correction, her reason and the original rating.
Brevet proposes a rule from the four corrections.
The corrections concern the same problem and give the same reason. Brevet groups them into a proposed rule and creates a test from each report. The agent continues using its existing release while the proposal waits for review.
Proposed · no authority
Treat pump vibration during cleaning as major and escalate for review.
This runs separately from live work, in a process Brevet calls Dream.
The agent cannot approve its own proposal.
The agent attempts to approve the rule in its own name. Brevet refuses. Signed approvals are enabled in this example: a registered quality owner must sign for the review group. The agent can request a decision, but cannot supply that signature.
Waiting for human approval
Treat pump vibration during cleaning as major and escalate for review.
Without signed approvals enabled, Brevet checks the name supplied, not who supplied it. Here, it also verifies the reviewer’s signature. This approval step is called Dawn.
The updated agent passes all four tests.
Brevet runs the four corrected reports against the original agent and an updated version that follows the rule. Both groups of tests improve, so the change passes the release check.
Tests passed · ready for release
Before the ruleNone of fourtests pass
→
With the ruleAll fourtests pass
Both test groups improve from 0/2 to 2/2. Release check passed.
These tests come from the same four corrections, split into two groups. The demo uses a stand-in agent with a programmed change; this result shows the release check working. Independent cases are needed to test whether the rule helps on new work or causes regressions.
A signed release records what changed.
After checking the test results, the quality owner signs the release approval for the review group. Brevet also signs the release manifest, which records the rule and the tests behind it.
Signed trial release · human review required
Version
0.1.0 → 0.2.0 · Trial
Approved change
Treat pump vibration during cleaning as major and escalate for review.
Test result
0/4 → 4/4 passed · Both test groups improved
Approver
Quality owner, signing for the review group
Signatures
Reviewer approval verified · Release manifest signed
The agent receives the released rule with its tasks. Its drafts still require human review.
A faulty sensor changes the conclusion.
Engineers find that a faulty sensor caused the vibration reports. The quality group recalls the rule. Brevet stops supplying it to the agent and flags release 0.2.0, which included it.
Withdrawn · excluded from future releases
Treat pump vibration during cleaning as major and escalate for review.
The record retains the rule, the evidence behind it and the reason it was withdrawn.
You put the issues needing attention first.
Claude starts each summary with routine updates. You move the issues needing attention above them, making the same change in three summaries.
Three matching corrections
Claude’s draft
Routine updates
Issues needing attention
Your edited version
Issues needing attention
Routine updates
Claude records both versions and your reason through Brevet.
Brevet proposes a rule for future summaries.
You ask Brevet to review the saved corrections. It finds the repeated change in structure and proposes a rule for weekly summaries.
Proposed · no authority
Put issues needing attention first in weekly summaries.
The Dream process produces a proposal for you to review before Claude uses it.
You decide whether Claude should use it.
Review the rule. Approve it for future summaries, or hold it for more evidence.
Waiting for your approval
Put issues needing attention first in weekly summaries.
Brevet records your decision. This approval step is called Dawn.
You provide the before-and-after results.
You test the proposed change and supply the results to Brevet. Its release check requires neither test group to get worse and at least one to improve.
Results supplied by a person
Before the change
Test the current version.
After the change
Test the version with the proposed rule.
Release check
Neither group’s score may fall; at least one must improve.
In this workflow, you confirm the results; Brevet does not measure them automatically.
The approved rule goes into release 0.2.0.
Once the supplied results pass the check, Brevet creates a signed trial release. Claude fetches the released rule at the start of the next session.
Documented workflow · trial release
Version
0.2.0 · Trial
Approved change
Put issues needing attention first in weekly summaries.
Test result
Human-confirmed results pass the release check
Approver
Your review group
This example describes the workflow; it has no captured test scores or release record.
You can take the rule back.
If the rule stops being useful, you ask Brevet to withdraw it. Brevet stops supplying the rule and records your decision.
Withdrawn · no longer supplied
Put issues needing attention first in weekly summaries.
This is a recall. Claude is instructed to stop applying the rule and confirm that it has done so.
Technical details for this step
Adapted from the upstream pump example, with signed approvals captured in the site’s own run. Approval refusals return an error without adding a decision to the recorded history; those responses are shown separately. A trial release refused by the test gate is recorded with its test evidence.
Illustration · Pump example with signed approvalsView on GitHub →
When Brevet blocks a changeA rule that makes earlier work worse, and a pattern with too little evidence.
A new rule makes an earlier task worse
In a second example, the updated agent handles vibration correctly but starts misclassifying labels it previously got right. Its test score falls, so Brevet refuses the trial release and records why.
There is not enough evidence for a rule
Two matching corrections fall below this example’s threshold of three. Brevet proposes no rule. The corrections still become tests for review, and the agent’s behaviour stays unchanged.
Each rule holds one level of authority.
A rule gains authority only through a recorded human decision.
Level 1
Evidence
Proposed by Dream. Never reaches the agent.
Where every proposal starts
Level 2
Advisory
Guides the agent’s drafts. A person still checks each result.
Promoted by a person or review group
Level 3
Controlled
May drive actions directly.
Promoted by a review group only
A recalled rule leaves every future release, and each release that carried it is flagged.
Every step leaves a record.
Each entry carries the fingerprint of the one before it.
Correction#a41c
Proposal#7d02
Decision#c9e5
Test runs#18bf
Release#6ff0
Copy outside the workspace#6ff0
An edited or shortened history no longer matches, so the check fails. Where anchors are configured, the latest fingerprint is also kept outside the workspace, which catches even a rewritten record.
brevet verify intact
04 / Your agent
Works with the agent you already have.
Brevet wraps the agent you already have. Your framework keeps running it, while Brevet checks each run, serves the approved rules and holds tool calls to what the release allows.
On every run inside brevet.wrap(agent)
01
Check
Is this the latest signed release, set up as recorded? On trial and production, an unreleased edit stops the run.
02
Serve
The approved rules for this kind of task go with it.
03
Run
Your framework runs the agent as before, with its own model and tools.
04
Guard
Each tool call is checked against the permissions the release grants.
05
Record
The draft, the rules it used and any correction join the record.
Three ways to connect.
Python agents
agent = brevet.wrap(my_agent)
Brevet recognises the framework from the agent object itself.
LangGraph
Claude Agent SDK
OpenAI Agents SDK
CrewAI
AutoGen
LlamaIndex
Pydantic AI
Google ADK
DeepAgents
Any Python function
Assistants over MCP
uvx brevet mcp
The assistant fetches its approved rules at the start of each session, and can record corrections, review proposals, release and recall.
Claude Desktop
Claude Code
Cursor
Any MCP client
Claude Code tool calls
brevet hook
Holds each tool call Claude Code makes to the permissions of the latest release, and asks you before a consequential one.
Another framework? Register one adapter class with brevet.register_adapter. Read how →
Tools get permissions by tier.
The release declares each tool’s tier, and Brevet checks every call against it. A tool the release does not declare is refused.
Tier
ShadowWatched, not acted on
TrialLimited use
ProductionFull use
ReadLook something up
Allowed
Allowed
Allowed
SuggestDraft for a person
Allowed
Allowed
Allowed
ActChange something
Refused
Allowed
Allowed
Controlled actConsequential, such as a refund
Refused
Refused
A person grants each callGrant per call
The broker reaches the tools of agents built with Claude Agent SDK, OpenAI Agents, LangChain, LangGraph, Pydantic AI and AutoGen, tools you mark in your own code, and Claude Code through the hook.
Works with CHAP
CHAP is a protocol for collaboration between people and AI agents. Brevet can use review decisions recorded in CHAP as evidence for proposed changes, and send its approval, release and recall records back to CHAP.
The repository’s Cowork example puts what Claude learns between sessions under the loop. Your corrections become proposals, you decide at dawn, and Claude receives rules only from a signed release.
# Run after: pip install brevet
# Offline demo: a stand-in agent and four recorded corrections.
import os
import tempfile
from pathlib import Path
folder = Path(tempfile.mkdtemp(prefix="brevet-demo-"))
os.environ["BREVET_CONFIG_DIR"] = str(folder / "config")
import brevet
def triage_agent(report, context):
rules = context.get("brevet", {}).get("rules", [])
knows_rule = any("vibration-during-cleaning" in r["content"] for r in rules)
severity = "major" if knows_rule and "vibration" in report else "minor"
return f"severity: {severity}"
agent = brevet.wrap(triage_agent, workdir=folder / ".brevet")
reviewer = "human:quality_reviewer"
for pump in ["P-301", "P-302", "P-303", "P-304"]:
result = agent.run(f"Pump {pump}: vibration high during cleaning",
task_family="equipment_triage")
agent.record_final(result.task_id, "severity: major",
participant=reviewer,
rationale="Vibration during cleaning may indicate seal wear.",
tags=["vibration-during-cleaning"])
agent.dream()
candidates = agent.dawn()
rule = next(c for c in candidates if c.kind == "prompt_rule")
# This small demo records an approver name, without a human signature.
# See "Set up signed approvals" below for verified human decisions.
for candidate in candidates:
agent.dawn(decide=(candidate.capability_id, "promote"), approver=reviewer)
before = agent.evaluate(baseline=True)
after = agent.evaluate()
agent.release(to_version="0.2.0", channel="trial", approver=reviewer,
evals=(before, after))
agent.recall(rule.capability_id, issued_by=reviewer,
reason="The vibration reports came from a faulty sensor.")
ok, entries = agent.verify()
print(f"Evidence chain intact: {ok} ({entries} entries)")
print(f"Inspect the demo records in {folder}")
Any MCP client, such as Claude Desktop, Claude Code or Cursor, can then record corrections, request approval, create releases, roll back changes, recall rules and check the record.
Who does whatWhat Brevet provides and what your deployment supplies.
Brevet records and checks changes. You choose the reviewers, supply independent tests and connect it to the agent’s work.
Area
Brevet provides
Your deployment supplies
Capture
Correction records from draft and final, import of CHAP review decisions, and learning only from the people the consent scope allows
Where drafts and finals come from, and who has consented. Until you name them, Brevet learns from every correction it records
Proposal
Grouping repeated corrections into proposed rules for review
Reviewers’ time and expertise
Approval
Named decisions, signed approvals with group thresholds, and key checks against an allowed-signers file or GitHub
Who the approvers are, and the source that vouches for their keys
Testing
Corrections compiled into tests, test runs tied to each release, and a gate on their scores
Independent test sets
Wrapped agents
Checks the signed release and the recorded set-up before execution. Outside shadow, the wrapper refuses a run that fails those checks.
Routing each agent run through the wrapper and naming the files it should check
Assistants using MCP
Checks the release and its rules before serving them to the assistant. It reports changes to the recorded set-up; MCP does not control the assistant’s entire execution.
Instructions for the assistant to fetch rules, respect their limits and acknowledge recalls
Tool calls
The tool broker checks calls it intercepts against the declared tiers. Claude Code can use a separate hook to check its tool calls. Policy refusals are recorded when the check runs with a writable record. If the hook cannot open its workspace, it blocks the call but cannot record it there.
Declaring tool tiers, connecting the broker or Claude Code hook, and covering other execution paths
Recall
Withdrawal, flagging of releases, exclusion of the same content, and a confirmation from each agent Brevet serves
Agents that run outside the wrapper or MCP
Records
A hash-linked record in the workspace, anchored outside it where anchors are configured, with optional mirroring to CHAP
An anchor the agent cannot write, such as another disk or a CHAP coordinator, and retention
Set up signed approvalsVerify who approves a change and how many signatures it needs.
Without signed approvals, Brevet checks the identity supplied with a decision but does not verify who supplied it. Once you register the first approver, every approval decision, release, rollback and recall requires a registered person’s signature. Their signing key is protected by a passphrase and kept outside the workspace. You can also specify an allowed-signers file or GitHub in the manifest to restrict which keys Brevet accepts for each person.
Anyone can ask for a decision, an agent included. An assistant connected through MCP gets back a request and a command for a person to sign it. A review group, called a mission group in the code, requires one member’s signature by default. You can raise that threshold to require more. Once it is raised, no single member can lower it, change the members or replace another member’s key.
Two separate signatures: the reviewer’s signed release approval and the workspace signature over the release manifest, including the lockfile fingerprint.
What you can do todayThe learning loop, release controls and tool permissions.
Today, Brevet turns repeated human corrections into rules that can be reviewed, tested, released and recalled. It also records the agent’s wider set-up, checks for changes and can restore archived releases and their named files.
Change
Today
Rules an agent learns from repeated corrections
Brevet proposes each rule for a named person to review. Approved rules can be tested, released and recalled individually.
The rest of the agent’s set-up: its manifest, the files you name such as prompts, skills and tool code, and what the framework exposes, such as instructions, model name, tools and library versions
Fingerprinted and signed with each release. A release needs a named approver and, on trial or production, a passing gate. Outside the shadow channel, a wrapped agent stops if any of these changes before the next release, apart from library upgrades, which are recorded. These changes are not yet proposed or recalled one at a time.
Tool calls while the agent runs
Held to the tiers each release grants, once tools are declared. An undeclared tool is refused, a tool that acts never runs on the shadow channel, and the most consequential need a person’s grant for each call. This covers agents built with Claude Agent SDK, OpenAI Agents, LangChain, LangGraph, Pydantic AI and AutoGen, tools you mark in your own code, and Claude Code through a hook.
A vendor changing a model’s behaviour under the same name, and a hosted assistant’s own memory
Outside Brevet’s reach.
06 / Research
The research behind Brevet.
Brevet investigates how change control can apply to agents that learn from their work. Its open-source runtime puts that research into practice: people review proposed changes, test their effects and keep a record they can use to withdraw a change later.
Brevet: Change Control for What Self-Evolving AI Agents Learn
Arsalan Shahid, Gordon Suttie and Philip Black · Brightbeam · September 2026
The paper is the academic account of Brevet. It explains why agents that learn from their work need change control, how the governed evolution loop turns experts’ corrections into rules, the levels of authority a rule can hold and the decisions reserved for people.
The repository sets out a benchmark design that measures improvement, regressions, the record behind each change and whether recalled capabilities stop being used. Brevet can already score a workspace’s record. The design also specifies shared datasets and comparisons with other approaches.
@misc{shahid2026brevet,
title = {Brevet: Change Control for What Self-Evolving AI Agents Learn},
author = {Shahid, Arsalan and Suttie, Gordon and Black, Philip},
year = {2026},
month = sep,
note = {Preprint},
url = {https://brevet.brightbeam.works/resources/brevet-change-control-preprint.pdf}
}
07 / FAQ
Questions we’re asked.
About the idea
Does Brevet change the model?
No. It leaves the model’s weights alone and works on the agent around them: today, the rules the agent learns and the set-up recorded with each release.
Does Brevet govern every change to an agent today?
No, not yet. Rules an agent learns from corrections go through the full loop. Changes to the rest of its set-up are fingerprinted and signed with each release. Outside shadow mode, a wrapped agent stops if they change before the next release under the default policy. Library upgrades are recorded without stopping it. Some changes are outside its reach, such as a vendor changing a model under the same name. What you can do today, under For builders, sets this out.
Does Brevet make an agent learn?
Brevet proposes rules from people’s corrections and supplies released rules to the agent with each task. It records the approvals and tests behind those rules. The agent must be able to use them; Brevet does not change its model or write new agent code.
What do the tests prove?
The release check compares two groups of tests before and after the change. Neither group’s score may fall, and at least one must improve. Brevet links the runs to the release and checks them against the record. Results supplied without runs are recorded as human-confirmed results; production releases require runs by default. Tests built from corrections alone can miss mistakes on work the agent previously got right. Use independent test sets to check for those regressions.
What do Dream and Dawn mean?
They name the loop’s daily rhythm. Overnight, Dream studies the day’s corrections and proposes rules and tests, with no authority. At dawn, people review the proposals and decide which ones the agent may use. Only what they approve, and what then passes its tests, reaches the agent in a signed release.
About people
Can an agent approve its own learning?
Not in its own name. Approvals in the name of an agent, a model or the overnight process are refused. With signed approvals switched on, only a registered person can sign, and an agent can only ask.
What happens when a rule is recalled?
It is withdrawn, every release that carried it is flagged, and the same content cannot come back under a new name. Agents that take their rules from Brevet stop receiving it and confirm that on the record. An assistant connected through MCP confirms it itself. Rollback restores an archived release: its manifest, the files you named and its rules, minus any recalled since. It returns to that release’s channel or a lower one; moving to a wider channel needs a new release with its own evidence. The agent’s own code comes back from your version control.
About building
Does it work with my framework?
Brevet wraps agents built with LangGraph, Claude Agent SDK, DeepAgents, AutoGen, LlamaIndex, Pydantic AI, Google ADK, CrewAI or OpenAI Agents SDK, and any Python function. Another framework needs one adapter class, and assistants connect through MCP. The only change Brevet makes to the agent is to route its declared tools through its tool broker.
Where are the records kept?
In a folder beside the agent, readable only by you and kept out of version control. Each entry is appended and linked to the one before it, so brevet verify detects an edited history. You can anchor the latest entry outside that folder and mirror every entry to a CHAP coordinator.
Can I use it with Claude or another assistant?
Yes, through the MCP server. Brevet checks the rules it serves the assistant, and in Claude Code a hook holds each tool call to the tiers the release grants. Name Claude’s skill folders and instruction files in the manifest, and a change to them is flagged until it is released. Where the vendor runs the assistant’s own memory, Brevet cannot stop that memory changing.
How is Brevet different from CHAP and Metis?
CHAP records what happened between people and agents. Metis helps capture fragments of tacit expertise: what an expert notices, how they respond and the circumstances. The expert confirms the account, and reviewers agree when an agent may use it as guidance. Brevet governs how the agent changes, and on whose approval. They are designed to work together, and each works on its own.
What is needed for production use?
Brevet is in alpha. Today it provides the loop, the record and the controls a production deployment switches on: verified approvers, releases tied to their test runs, rollback, recall confirmations, a tool broker and an anchored record. Your deployment names the approvers and the source that vouches for their keys, chooses where the anchors live, supplies independent tests and routes every run through Brevet. Who does what, under For builders, sets this out.
Exploring the research
Where could our team start?
Start with a workflow where people and agents work together. Identify the agents involved, the teams responsible and the evidence they would need to approve a change. Try Brevet with one of those agents before extending its use.
Brevet · by Brightbeam
How will your organisation govern agents as they evolve?
Bring a workflow where people and agents work together. We can examine how changes are approved today, what evidence reviewers need and how a change could be withdrawn.