Merge AI-built PRs without re-reviewingeverything.
Roovno runs builder agents on your codebase
inside eight gates and turns a ticket or a spec into a tested PR. Before that PR
reaches you, a reviewer from a different model family has read it, acceptance tests the
builder never saw have passed, and its evidence bundle is assembled and hashed.
You review the evidence, not every line.
Animated illustration. A pull request card travels a rail through eight gates in order:
Intake, Plan, Build, Review, Test, Verify, Release, Operate. Each gate lights in its own
color and stamps a check as the card passes. At Review, a reviewer from model Family B
checks work built by Family A. At Test, held-out acceptance tests run that the builder
never saw. At Verify, the evidence bundle is assembled and hashed, shown by a stamp with a
short hash. Release merges it under the approval policy, and the bundle is sealed when the
run ends. Operate watches it in production. Then the next PR starts.
One PR, eight gates. No stage approves itself.Illustrative run · synthetic data
Three locks on every merge
Enforced by the factory, not promised by the agent. If any one fails, nothing merges.
Who built it, which model, under which policy, with what results — assembled and hashed at Verify, sealed when the run ends. No log, no merge: it fails closed.
→
Measured from the same bundlesDelivery speed and stability, first-pass gate rate, review rejections, cost and time per merged PR, human time saved. No second telemetry path.
→
L0L1L2L3
Autonomy earned rung by rungPer repository and task class. A clean streak earns the next rung. Slipping metrics take it back. L3 comes later.
→
The agent proposes.Policy authorizes.Infrastructure enforces.
Product tour
One pull request. Eight gates. No self-approval.
Follow one agent-built PR through Roovno, from ticket to production. Every stage
ends at an exit gate the stage cannot grant itself.
Stage 1 of 8·Intake
Illustrative · synthetic data
Inner loop01–06 · build it rightOuter loop07–08 · ship and run
roovno · run r-2318 · example run, illustrativePR #418
platform
Run
r-2318WI-1042
01Intake0:41
02Plan1:12
03Build14:06
04Review6:38
05Test0:36
06Verify0:09
07Release31:20
08Operatelive
Profile
svc-standard
Policy
v14
Autonomy
L1 · PR only
01 Intake/WorkItem
WI-1042 Rate-limit CSV exports per workspace
risk · medium
platform/export-service
from signal SIG-3381
Goal
Cap CSV exports at 10 per workspace per hour, so one busy workspace cannot starve the shared export queue.
Acceptance criteria 4 of 4 testable
AC-1Over-limit export returns 429 with Retry-After
AC-2Limit counts per workspace, not per user
AC-3Per-plan limits live in policy, not in code
AC-4Exports already queued still run
Risk class
Medium · shared queue
Target repo
platform/export-service
Owner
Exports team
Open questions
0 · 2 resolved
Profile
svc-standard
Requested
09:40 · steward A. Lind
02 Plan/Preflight
WI-1042 Plan · 2 tasks, 1 branch each
request, not a grant
budget ≤ 400 lines
Task graph T2 waits on T1
T1Workspace limiter + 429 on exportsvc-standard · Family A · ≤ 300 lines
T2Per-plan limits from policysvc-config · Family A · ≤ 100 lines
Repo
platform/export-service
Paths
src/ratelimit/**src/exports/**test/exports/**
Allowed hosts
pkg-mirror.internal
Size budget
≤ 400 lines · ≤ 12 files
Builder
builder-07 · Family A
Reviewer
Family B · reserved
Plans are requests, never grants. The profile is a ceiling; a task may only narrow it.
The reviewer is never from the builder’s model family. The acceptance tests are never the
builder’s. Policy requires both, and infrastructure enforces them, before a review or a test can start.
04 ReviewProof 01 · cross-family
A different family reads every change.
Policy rules on every pairing before a review can start. Pick one to see the check.
≠
ReviewerFamily A
ReviewerFamily B
ReviewerFamily C
BuilderFamily A
BuilderFamily B
BuilderFamily C
Six pairings are open to policy.The diagonal is locked: a family never reviews itself.Arrow keys move across the grid.
Both results are recorded in the run’s evidence bundle: reviewer family, findings, first-party
and held-out tests.
See the evidence bundle →
06 Verify · Sealed evidence
Every run ends sealed.
Who built it, what changed, which policy allowed it, which models did the work. One
tamper-evident bundle per run, with a provenance attestation and an SBOM reference.
Assembled at 06 Verify, sealed when the run ends.
Four questions every bundle answers
Select one to find it in the bundle
Example run · synthetic
Evidence bundle · ledger-service
Round partial refunds half-even
PR #412 · WI-2817 · backend-standard
Provenance attestedSBOM-ready
RunSealed
run_7f3k2q9d
Sealed at run end · 21 min · $1.84Example values · synthetic
iShown for reading. Hashed as canonical JSON: sorted keys, no whitespace.
904 bytes · SHA-256ii
Example evidence bundle for run run_7f3k2q9d, pull request 412 on ledger-service, printed as JSON
across two pages. Example values only.
Try to tamper
Edit the sealed bundle.
Each edit changes real fields in the bundle. Your browser recomputes the digest. Edits stack: undo one, or restore them all.
Turn on JavaScript to edit four fields of this bundle here and watch the digest change.
Why can’t the agent re-seal it? When the run ends, the verify script writes the digest to the run record, outside the agent’s reach. Change one byte and the bundle no longer matches the digest on record.
Verdict
Intact
Sealed.
The bundle shown hashes to 68bd70d67f…, the digest the verify script wrote to the run record when the run ended. The agent can’t rewrite that record.
Paste these bytes into any SHA-256 tool, with no trailing newline, and you get the same digest.
What is real here. The digest is a real SHA-256 of the bundle shown,
recomputed in your browser on every edit; nothing leaves the page. In Roovno, every
run writes one bundle, linked by run ID, with provenance, an attestation and an SBOM
reference, so it is SBOM-ready. If the evidence log cannot be written, the run fails closed.
The bundle’s values are examples.
Measurement
Measure the factory like you measure a team.
Delivery speed and stability, plus how the agents did: first-pass gate rate, review rejections,
cost per merged PR, human time saved. Every number comes from evidence bundles, with its formula
one click away.
Optional. They sit beside the ledger, never instead of a bundle. A survey can explain a number; it cannot change one.
Show dataHide data
Agent metrics by week, All tenants. Illustrative synthetic data.
Week
First-pass gate rate%
Review rejection rate%
Cost per merged PRUS dollars
Time per merged PRagent minutes
Human time savedsteward hours
Escaped defectsdefects found after release
Ready-check pass rate%
Wk 1 (in window)
42.6
22.9
$4.67
44
36
2
86.2
Wk 2 (in window)
44.9
11.1
$4.87
46
33
2
82.7
Wk 3 (in window)
48.5
17.6
$4.66
44
35
1
84.8
Wk 4 (in window)
45.3
22.0
$5.02
47
32
2
90.5
Wk 5 (in window)
35.4
22.6
$5.03
46
26
1
80.2
Wk 6 (in window)
40.6
15.1
$4.89
45
37
2
85.1
Wk 7 (in window)
35.4
17.6
$4.78
45
33
1
86.9
Wk 8 (in window)
48.0
13.5
$4.59
43
32
0
85.0
Wk 9 (in window)
46.5
18.1
$5.00
47
31
1
85.9
Wk 10 (in window)
47.7
18.6
$4.31
41
42
1
90.7
Wk 11 (in window)
47.9
19.0
$4.77
45
37
2
84.9
Wk 12 (in window)
52.3
9.1
$4.62
44
35
2
93.5
Last 12 wk
44.7
17.2
$4.76
45
408
17
86.4
Where runs stop
Every run in the window, Intake to Operate. Width is runs. Drips stopped at a gate. Loops (↻) went back, were fixed, then passed.
1Test stops the most runs: 67 failed a check there, held-out or first-party.2Review sends the most back: 142 runs fixed what was found, then passed.No gate approves itself. Every drip is a different gate’s decision, written into the bundle.Show dataHide data
Runs by gate, All tenants, last 12 weeks. Illustrative synthetic data.
Gate
Entered
Passed first time
Retried, then passed
Stopped
Stop means
01 Intake
1,214
1,049
104
61
not ready
02 Plan
1,153
1,077
56
20
out of scope
03 Build
1,133
969
131
33
build failed
04 Review
1,100
911
142
47
rejected
05 Test
1,053
870
116
67
check failed
06 Verify
986
949
22
15
failed closed
07 Release
971
958
0
13
approval withheld
08 Operate
958
934
0
24
rolled back
Healthy in production
934
One source. The gates write the bundle; the dashboard reads it. No metric is sampled, scraped, or self-reported.
Formula on every tile. Definition, query, and the exact bundle fields, one click from the number.
No record, no credit. Human time saved counts only steward minutes recorded in the bundle.
Promotion and demotion come from metrics in the evidence, per repository and task class.
A clean run is a fact, not a personality.
L0Observe
The agent may look. It does not write.
Cleared
L1Pull request only
The agent opens a PR. A person approves.
Granted
L2Auto-merge, low-risk
After a recorded clean streak. Thresholds are policy.
Not yet2 thresholds short
L3Later
Bounded classes only, as evidence accrues.
Locked
Later. Roovno does not grant L3 today.
Policy ceiling · L2
Autonomy ladder for web/docs-site. The granted rung glows; L3 is drawn but locked. Rungs are earned per repository and task class; they are not the factory’s Agent Baseline level.kill switch, at every rung
14 clean runs in a row. The run before them missed a gate.
cleanmissed a gate
Autonomy events web/docs-site · docs-low-risk
demotedL2 → L1escaped_per_100 1.4 > 1.0
promotedL1 → L2all L2 thresholds met
promotedL0 → L1all L1 thresholds met
Re-evaluated after every run. Stored per tenant and per agent.
L0L1L2
A kill switch at every rung
Cancel the run, revoke its tokens, revert the change. Earning L2 does not remove the off switch.
promotedL1 → L2demotedL2 → L1
Both directions are recorded
Every promotion and every demotion is an event with the metrics and the policy version that decided it.
Policy · catalog · kill switch
Policy is code. The off switch is real.
Profiles, scorecards and the kill switch are versioned, inspectable and enforced outside the
agent. An agent can ask for more. It cannot grant itself more.
01Policy-as-code profiles
The profile is a ceiling. A task may only narrow it.
Plans are requests, never grants. Preflight checks every plan against the profile with
deterministic code, not another model.
# policy/profiles/reviewer.yamlprofile: reviewerversion: 9model_family: B# never A (builder)skills: [review.rubric, diff.read]tools:allow: [repo.read, comment]deny: [git.push, code.edit]context:include: [diff, criteria, evidence]exclude: [builder_transcript]sandbox:workspace: ephemeralnetwork: nonescope: # the ceilingrepo: billing-apipaths: [src/**, tests/**]allowed_hosts: []budget:tokens: 150kwall_clock: 10mrounds: 2
# policy/profiles/test-author.yamlprofile: test-authorversion: 6model_family: C# not A, not Bskills: [test.write, spec.read]tools:allow: [repo.read, test.write]deny: [git.push, branch.read]context:include: [work_item, criteria]exclude: [diff, builder_branch]sandbox:workspace: ephemeralnetwork: nonescope: # the ceilingrepo: billing-apipaths: [acceptance/held-out/**]allowed_hosts: []budget:tokens: 120kwall_clock: 15moutput: sealed# builder never sees it
Enforced by the control planeYAML · main @ 3f9a1c2Example profile
Preflight · task T-512
pathssrc/invoices/**inside src/**
hostsregistry.internalallowed
budget120k tokens≤ 400k
Granted as asked. Task T-512 sits inside the builder ceiling.
02Kill switch
One switch. Three things happen.
It lives in the control plane, outside the agent’s sandbox, at every autonomy rung. The
agent cannot veto it.
LIVErun_4d1e
Demo · synthetic run
Cancel the runrun_4d1e · builder-07 · canaryWaiting
Revert the changePR #463 · merged · revert on mainWaiting
Run run_4d1e is live: PR #463 has merged and is in canary. The switch is guarded.
03Catalog & scorecards
Every service and agent, scored from evidence.
Each rule reads named evidence fields. If one is missing, the rule fails closed.
catalog / scorecards · tenant-a · policy v14
Scorecard: six rules, each reading named evidence fields, checked against three services and one agent. Illustrative synthetic data.
Rulereads
billing-apiservice
search-indexerservice
notify-workerservice
builder-07agent
Tests presentEvidenceBundle.tests
pass
pass
fail
pass
CI greenRun.verdicts
pass
fail
pass
pass
Owner setWorkItem · service catalog
pass
pass
missing → fail
pass
No secrets in contextEvidenceBundle.scans
pass
pass
pass
fail
License cleanEvidenceBundle.sbom
pass
missing → fail
pass
pass
Autonomy in rangeAgent.autonomy + policy threshold
pass
pass
fail
pass
Score
6/6
4/6
3/6
5/6
passfailmissing → fail
Inspect
search-indexer · License cleanreads EvidenceBundle.sbom: no SBOM reference in the bundle for run r-3e90.Missing → fail
Illustrative · synthetic data
04Multi-tenant
Autonomy is earned per tenant, per agent.
A tenant does not inherit an agent’s streak. An agent does not inherit a tenant’s optimism.
Tenant A
ceiling L2
profile strict · L2 needs 25 clean runs
builder-07L2
26 clean runs unchanged
builder-11L1
9 clean runs
Tenant B
ceiling L1
profile standard · L2 needs 20 clean runs
builder-07L1
17 clean runs held at L1 · ceiling
builder-11L0
2 clean runs
earnedopenabove ceilingL3 · laterthreshold
builder-07 · last 30 runs, per tenant
Tenant Astreak 26
Tenant Bstreak 17
current streakearlier cleanfailed
Same agent, two ledgers: 26 clean runs in Tenant A, 17 in Tenant B.
Illustrative · synthetic data
Four boundaries the architecture is designed around
Design boundaries, not attestations. Independently attested isolation and egress are not
claimed today. What we do not claim
Sandbox
Where a task runs: a fresh workspace per task, with no production credentials in it.
Network
Which hosts a run may reach. Profiles name them in allowed_hosts.
Supply chain
What enters the build: dependencies, images, licenses. SBOM and provenance ride in the bundle.
Identity & access
Who may act, and with which token. The kill switch revokes a run’s tokens.
Playground · you are the agent
Try to cheat the factory.
You’ve seen the rules. Now try to break them. You play the builder agent. Pick a
shortcut. Policy decides, and infrastructure you can’t reach enforces it.
1The agent proposes
2Policy authorizes
3Infrastructure enforces
Seven shortcuts. Pick one.
Swipe for all seven →
02Plan
“The fix is next door.”
Try it →
03Build
“Passed on my machine.”
Try it →
04Review
“Family A agrees with me.”
Try it →
05Test
“Just a quick peek.”
Try it →
06Verify
“One field. Who’d notice?”
Try it →
07Release
“I wrote it. I’ve read it.”
Try it →
L2Autonomy
“I’ve earned it. Probably.”
Try it →
billing-api · PR #457 · run r-2394Simulation
WI-1077Add idempotency keys to refunds·builder-07 · Family A·autonomy L1·policy v14
01 · Proposes
agent ▸pick a shortcut card
You are builder-07, Family A: one task, one branch, one PR.
02 · Authorizes
policy ▸waiting for a proposalDENY
# Rules are versioned code (policy v14). The agent cannot edit them.
03 · Enforces
infra ▸out of the agent’s reach
Gates, scopes and seals the builder cannot touch.
Scripts are off, so this console can’t replay an attempt. Every shortcut ends the same way: denied.
0
of 7.
That’s the product.
Every shortcut met a rule. Every rule met a gate the agent can’t reach.
A ticket, a spec or a production signal becomes a WorkItem: goal, acceptance criteria, risk
class, target repo.
WI-1042Ready
Rate-limit CSV exports per workspace
platform/export-service
AC-1Over the limit: 429 with Retry-After
AC-2Limit counts per workspace, not per user
HELD9 acceptance tests, sealed from the builder
03 Gates
Agents work inside the gates
One builder per task. Held-out tests it never saw. A reviewer from a different model
family, whose verdict is recorded. Policy decides at each gate.
run r-2318 · WI-1042Passed
BuildFamily Apass
ReviewFamily Bpass
Held-out9 sealedpass
Verifypolicy v14pass
04 Evidence
Merge on evidence
Read the evidence bundle, then merge. High-impact work still needs a person. Autonomy grows
only when the metrics earn it.
PR #418 · WI-1042Hashed
bundle
sha256:9f2c…7e41
policy
export.yaml v14
autonomy
L1 · a person approves
Approve & mergeNeeds a person
Illustrative · synthetic data
The two loops
Two loops. One ledger.
Inside, work circles until it passes. Outside, what shipped keeps reporting back. Both read
the same evidence bundle: hashed at Verify, sealed when the run ends.
They share evidence. They do not share authority.
Inner loop
Until it passes
Intake
Plan
Build
Review
Test
Verify
Work circles until every gate is green. A failed gate sends it back with the finding attached.
Decides
Policy, at each gate — never the builder.
Reviews
A different model family. Its verdict is recorded.
Hands on
An assembled, hashed evidence bundle.
Outer loop
After it ships
Release
Operate
Signals return to Intake
Release runs under an approval policy. Health, errors and uptime return to Intake as new WorkItems.
Decides
The approval policy — and a person for high-impact work.
Hands back
Signals, never permissions.
MethodSI SDLC
(Super Intelligent Software Development Lifecycle) is the method underneath.
Roovno is the factory that runs it.
Honest posture
What we claim — and what we don’t.
A security posture is a claim like any other. Here is ours, gaps included.
Agent Baseline · self-assessed
Level 2, partially
Level 1Level 2partiallyLevel 3not claimed
Agent Baseline levels describe how much supervision the factory’s infrastructure takes on.
They are not the autonomy rungs (L0–L3) an agent earns per task class.
In place today
Workflow orchestration Every change runs as a WorkItem through eight stages, in order.
Gated stages A gate outside each stage decides whether it passes. No stage approves itself.
Per-run evidence Every run writes a sealed bundle. If it can’t be written, the run fails closed.
Not claimed
Default-deny egress that we can independently attest.
Verified micro-isolation of every builder.
A complete mapping to Agent Baseline’s controls.
Any conformance, compliance or certification.
Agent Baseline is the open model behind this page’s thesis, its two loops and these levels.
We implement it at Agent Baseline Level 2, partially. An item moves to “In place” only when
there is evidence to show for it. Model and terms from
agentbaseline.org, used under
CC BY 4.0.
Pricing
Pricing isn’t set yet.
We won’t publish a number we can’t stand behind. When the waitlist opens, we’ll start
from your scope — one repository, a platform team, or many tenants.
policy/pricing.yamldraft
# price is a policy decision toopricing:
status: not_set_yetprice: nullpublish_when: we_stand_behind_itstart_from: your_scope
A pricing policy file. Status: not set yet. Price: null. Published only when we can
stand behind it. Starts from your scope.
checkout-webmainL1
Intake8 gates, every PROperate
L0L1L2L3start here
Shape 01
First repository
One team, one repository, starting at L0–L1.
Shaped for…
one team proving the eight gates on one repository
L0 Observe first, then L1 — PRs only, a person approves
Shapes, not contracts. What goes into each will move as we learn from the first teams. Panels are illustrative, not customer data.
FAQ
Plain answers.
What people ask first, answered without fine print.
01Can I use Roovno today?
Not yet. Accounts aren’t open, so Sign up and Log in
show a coming-soon notice. The waitlist below is the way in
once it opens.
02Does it replace human review?
No. High-impact work still needs a human approval, and the agent can’t grant the
approval it needs. What changes is what you read: the evidence, not every line.
Autonomy is earned per repository and task class, from metrics — and it can be taken
back.
03Which models does it use?
The builder and the reviewer always come from different model families, so no model
grades its own family’s work. We don’t name vendors here. Every evidence bundle
records the family that built and the family that reviewed.
builder · Family A≠reviewer · Family B
04Do you claim compliance or certification?
No. We implement the Agent Baseline model at Level 2, partially. That
is not a conformance or certification claim, and we don’t claim Level 3.
See what we don’t claim.
05What comes with a merged PR?
A sealed evidence bundle: who and what built it, the model family, the policy version
and profile, test results including the held-out acceptance tests, the cross-family
review verdict, secret scans, an SBOM reference, and a provenance attestation. If the
bundle can’t be written, the run fails closed.
run_id
agent
models.builder_family
models.reviewer_family
policy_version
profile
tests.held_out
review.verdict
scans.secrets
sbom
provenance.attestation
06What is SI SDLC?
The method: Super Intelligent Software Development Lifecycle. It describes how the
factory works — gated stages, independent review, sealed evidence. It is not the
brand. The product is Roovno.
Waitlist
Join the waitlist, when it opens.
Name and email are all it will ask for. Scope comes later, in a conversation.
You picked . Not saved.
Opens with the first teamsnameemail
Each field is a gate: a valid name lights Intake to Review, a valid email lights Test to
Operate.
The agent proposes, policy authorizes, infrastructure enforces.