Case 01 · AI coding-agent workbench
Boreal
AI coding agents can change a codebase. Deciding what deserves to ship is the harder problem.
Boreal is a desktop workbench for directing AI coding agents, reviewing the changes they propose, and deciding what gets accepted.
Nothing is written to a project until the run has been checked and a person has approved it, and every write stays reversible until it is accepted.

The premise
Execution is not the same thing as trust.
Most agent tooling asks for trust. A prompt goes in, files change, and what comes back is a summary. Boreal treats a change as a transaction instead: the run, the check, the diff and the approval stay separate steps, and you can see which one you are in.
It runs on the Ariadne engine, which executes scoped tasks and records what each one was allowed to touch.


Principles
Three rules decide every interaction in the workbench.
The agent proposes. The person approves.
Approval happens in a native dialog the page cannot forge, so what you confirm is what actually runs.
A run is judged against its scope.
Every task records the profile, the scope and the checks it used, so nothing has to be taken on faith afterwards.
Failure stays a visible state.
Interrupted runs, blocked approvals and checks that did not run stay on the record instead of disappearing into a success summary.
How a request becomes an approved change
The agent proposes. The engine checks. The person approves. The project is written last.
That order is built into the structure rather than agreed by convention. A task is a contract before it is a conversation: what it may write, what it may never touch, what it has to satisfy, and how many repair attempts it gets. A profile can ask for more evidence or more review. It cannot grant itself an approval or widen its own scope.
I kept approval out of the agent's reach. The confirmation is assembled from the engine's own records in a native window rather than from the page, and it says plainly that the identity is the caller's claim, not something Boreal checked. The agent never works inside your project either: a run gets a copy of the workspace as it was handed over, and that copy is what gets examined.
When a worker reports complete, that report decides one thing only, which is that there is now something to check. Everything else is recomputed. Boreal compares the working copy against the version the run started from, works out what actually changed, and runs the task's checks against the files on disk. Some of those results are unflattering on purpose: a workspace that moved while the run was going is refused rather than checked, because validating a different version would be theatre.
- A run starts as a record
The run is written down before any worker starts, so an interruption leaves something to recover from.
- The workspace is a copy
A run works in a staged copy of the project. The project itself is not the workspace.
- The check is not the claim
Checks run against the files on disk, not against the agent's description. A claimed success has no bearing on the result.
- One thing at a time
A second run is refused while one is going, so the project is never written by two hands at once.
- A check that cannot inspect
- Recorded as not run, never as passed
- A workspace that moved
- Refused; the run stops
- Review
- The reviewer's own opinion, labelled as one
- Acceptance
- A separate decision, never inferred from a pass
A claim is never validation. A completed run is still not accepted work.
What the review shows you
The review is built from the run's own before-and-after state, not from a file list the agent hands over. It lists every path that was created, changed or deleted, and approval belongs to one exact version of that content. Change the files afterwards and the approval goes stale by design.
Applying is journalled, so each file can be put back. A multi-file change is written one file at a time, so an interruption can land partway through: recovery works out how far it got, and a rollback restores the earlier bytes. If a file changed after you applied, the rollback stops, keeps both versions, and tells you.
A chat message can carry a proposal. It cannot carry a diff, a scope, an approval tied to specific content, and a way back.


Execution wasn't the hard part. Knowing what deserved approval was.
Preview before acceptance
The change can be run before it is kept.
A diff tells you what changed. It does not tell you whether the result is any good, which is how I ended up building a preview at all. Boreal runs the project for real, but only from a config the project declares and you explicitly trust, and only inside a frame that cannot reach back into the workbench.
Click anything in the preview and it reports what is rendering there and where the source says that line lives. Where the mapping cannot be confirmed, the panel says so rather than guessing. Inspecting is read-only; changing text or styles takes its own path, checked against the source before the file is written, with an undo beside it. Structural changes are proposed as tasks and reviewed like anything else.



What happens when something stops
An interrupted run is a state, not an error screen.
The interesting failures happen between steps, so the store writes atomically and keeps a log. If the engine restarts with a run still marked running, that run becomes interrupted, with a record of how far it got, and the task goes back to a state it is allowed to run from. It does not quietly become a failure.
Half-applied changes are resolved the same way. Boreal compares every file against what it should have been, and a rollback restores the earlier version. A rollback that finds a file edited since the apply stops and keeps both copies. What you do not get back is the conversation: each run gets a fresh workspace and a fresh session, and continuity between attempts comes from the project's own records.
- Interrupted run
- Becomes interrupted, with a record of how far it got; the task returns to a runnable state
- Half-applied change
- Worked out by comparing every file against what it should have been
- Rollback
- Restores the earlier version; refuses to overwrite later edits and keeps both copies
- After a restart
- Recovery runs when the engine starts; no half-written record survives
Where it has got to
A packaged Windows build installs and runs. Here is how far it has actually got.
Working now
- A run happens in a staged copy of the project. The real project is written last.
- Every change is a transaction: proposed, checked, approved by a person, applied with a journal, and reversible.
- A proposed change can be read as a diff before it is applied, with a live preview and a mapping back to the source it came from.
- An interrupted run recovers instead of becoming an error screen.
- A required check that cannot inspect its own input is reported as not run, never as passed.
Still open
- The preview and inspector are proven on projects Boreal scaffolds, or that carry the same instrumentation. Arbitrary real projects are not supported yet.
- One live model-backed run ended blocked, when the worker never returned a complete implementation claim. A completed live edit is not yet verified.
- This is a development-mode application, not a public release, and it is not code-signed.
What I want to test next
What do people actually look at before they approve an AI change?
Boreal currently assumes that the diff, the check, the run record and rollback help people review agent work more carefully. The next useful step is to test that assumption rather than treat it as proven.
One comparison would put a summary-only review against Boreal's evidence-rich review, and measure what people catch, what they ignore, how long the review takes, and how confident they are in the decision.
What this turned into
I started Boreal to make AI coding agents better at changing interfaces, and that turned out to be the easier half. Producing a change is largely solved. Reading one is solvable. The part in between is not.
Someone has to look at a diff they did not write, decide whether it deserves to become real, and still be able to reverse that decision afterwards. So the workbench is arranged around that: scope the run, watch it, read the change, approve it, and keep it reversible until you have. Trust here is a property of a workflow you can inspect, not a claim the system makes about itself.
A runtime reports what happened. It never decides what is true. Boreal is arranged around that one sentence. The rest is deciding how a person sees the work before anything is written.