Last recorded run, real Catalyst 9200: 7 of 7 checks passed

Brody keeps you in the loop.

A network change starts as a text message in plain English. An AI plans it against your source of truth, vets every line it wrote, and then stops and asks you. Nothing is changed on a device without a human reply.

AI does the work. Engineers approve every change.

01 / The whole thing, start to finish

One text message, one real switch.

A request typed on a phone, planned by an AI, approved by a thumb, applied to a Cisco Catalyst 9200 with a rollback timer armed. One real run, with the long waits compressed and captions and narration laid over the top.

Recorded run92 seconds

Left is the loop and the switch console. Right is the phone: the request going out, the approval coming back, the reply that deploys it. Nothing in either pane is a mockup.

02 / What the loop does

Six stages, and a human in the middle of them.

The order is the whole design. Prove it before you ask, ask before you touch anything, arm the net before you commit, and check the things nobody thinks to check.

  1. 01

    Plan

    The request arrives in ordinary language. The agent reads current state from the source of truth first, which here is NetBox: what devices exist, which VLANs are taken, which prefixes are allocated. Then it drafts the smallest change that satisfies the request.

    Output: a config diff
  2. 02

    Validate

    Every generated line is checked before a human is ever asked to look at it. What that check can promise depends on the platform, which is worth being precise about, so it has its own section below.

    Output: pass or abort
  3. 03

    Gate

    The change stops here and texts a person. The message carries the intent, the devices, the size of the diff, the risk, and the rollback plan. A reply of Loop YES plus the change id is the only thing that lets it continue. Reading the device happens before this point, but nothing is written to it until that reply lands.

    Output: a human decision
  4. 04

    Deploy

    The device takes a snapshot of itself, then applies the change with an auto-revert timer already armed. On the Catalyst that is a five minute absolute timer; on SR Linux it is a confirmed commit. If the next stage does not explicitly confirm, the device puts itself back with nobody watching.

    Output: change applied, net armed
  5. 05

    Verify

    Post-checks confirm both the thing that changed and the things that were supposed to stay the same. That second half matters more: the management plane is re-tested every time, because an automation that locks you out of the switch has failed even if its change was correct. Only then is the revert timer cancelled.

    Output: pass list, timer cancelled
  6. 06

    Record

    The source of truth is updated to match reality, and the audit trail is written: what was asked, who asked it, who approved it, when, and which checks proved it worked. The documentation is a product of the change rather than a chore that follows it.

    Output: updated docs, audit record
03 / Being precise about validation

Two platforms, two different promises.

This is where automation writing usually goes vague. Different equipment gives you genuinely different guarantees, and blurring them is how people get surprised at two in the morning.

Nokia SR LinuxReal dry run

The device itself says yes or no.

SR Linux will load a candidate config and validate it without committing. If the platform rejects the change, the loop stops and no change is ever attempted. That is a guarantee from the device, not from us.

Candidate configCommit validateConfirmed commit
Cisco IOS-XENo dry run in use

So we do not lean on one.

IOS-XE has no CLI equivalent of commit validate. It can expose a NETCONF candidate datastore that would validate before committing, but that is switched off on this switch and the loop is built not to depend on it. So on the Catalyst it earns its confidence a different way, and says so rather than borrowing the word validated from the other platform.

  • Allowlist, default deny. Every generated line must match an approved pattern. A line nobody anticipated is refused because it was never permitted, not because someone remembered to ban it.
  • Denylist. A protected set it must never touch: the management VLAN, the uplink, authentication, remote access, the rollback mechanism itself.
  • Live read-only checks. Queries against the actual switch confirming the VLAN is genuinely free and the interfaces genuinely exist.
  • A diff you can audit. Every line is kept in the audit record. The approval text carries the intent, the devices, the size of the diff, the risk, and the rollback plan, because we cap that message at 450 characters and a config diff does not fit in one.

An AI critic reviewing this build caught the approval text calling the Cisco path "validated in a dry run", copied from the platform where the loop actually does one. Small dishonest phrases are how a tool loses the benefit of the doubt, so it was corrected and written down. The same critic, pointed at this page before it went up, killed five claims on it outright and forced a rewording of a dozen more, nearly all of them against a record sitting in this repository.

04 / The approval gate

Everything that is not a clean yes is a no.

The gate runs over text message, so the deploy button is a thumb, wherever that thumb happens to be. It was built to fail closed in every direction, and then a second AI agent went looking for the directions that had been missed.

What arrivesVerbatim

Brody: change 6j5fm needs your approval. Intent: Can you configure a new vlan 101 named voip on switch c9200-demo. Then apply that vlan to gig1/0/2 and gig1/0/3 Devices: C9200-DEMO. Diff: C9200-DEMO 40 lines. Risk: low. Config vetted against live state. Deploys with a 5 minute auto-revert timer unless 7 post-checks pass. Reply "Loop YES 6j5fm" to deploy or "Loop NO 6j5fm" to reject. Window 15 min.Brody

Loop YES 6j5fmDelivered

What counts as a noFail closed
NOWrong or missing change idIgnored
NOReply from another numberIgnored
NOReply older than the requestIgnored
NONo reply in the windowExpired
NOQuiet hours, nothing urgentHeld
NORequest could not be sentDenied
Code paths that skip itNone
Proven liveTwice

The first live run went out while nobody was near a phone. The window expired and the change did not ship, which is exactly the intended behaviour and better proof than a successful run.

On another run the reply came back with a typo. It was refused before it ever reached the gate, rather than being guessed at, and the loop waited for a clean one.

Expiry tested live Typo refused
05 / The failures are the point

A system that only shows you wins is a demo.

The early runs did not go cleanly, and that turned out to be the most useful thing that happened. Rollback that has never actually fired is a claim, not a feature.

UnscriptedLab

It rolled itself back before anyone asked it to.

An early lab run deployed, failed one of its own post-checks, and immediately reverted both devices with no human involved. Nobody planned that beat. It also left the most uncomfortable finding on this page. That change re-encapsulated the link between the two devices, and a check written specifically to prove the existing point-to-point link across it kept forwarding passed while the change was live. The same check failed after the revert. Whether the link simply needed longer to come back or the revert left it down, the record does not say, and that ambiguity is the finding: putting the configuration back is not the same as knowing the network is back.

RejectedPre-gate

One never reached a device at all.

Another run was killed at validation, before the approval request was even composed. The cheapest failure is the one that happens before a human is asked to make a decision about it.

DeliberateReal hardware

Then we broke it on purpose, on the real switch.

An AI agent was told to sabotage a post-check on the live Catalyst so the rollback had to fire. The change came straight back out, the resulting config was byte-for-byte what it had been before, and a continuous ping through the whole exercise lost nothing. Two layers do that work: the loop reverts the moment a check fails, and the timer on the switch reverts anyway if the loop itself dies mid-change.

Byte-identical revertZero packets lost
Also foundNobody asked

Two VLANs were live that the documentation had never heard of.

Working against live state instead of against a diagram means drift is sitting there to be seen. Two VLANs were active on the switch and absent from the source of truth. Nobody had gone looking for them, and reconciling that is its own piece of work rather than something the loop quietly fixes.

06 / The numbers

Off an audit record, not a slide.

Every figure below comes off the recorded run or the runs that preceded it. Where there is not an honest number yet, there is no number.

Post-checks, recorded run 7 Five from the plan, two management-plane regression checks.
Auto-revert window 5 min Armed before the change lands, cancelled only after checks pass.
Approval window 15 min No reply is a no. The change simply does not ship.
Deploys without an approval reply 0 No code path writes to a device without one. Rehearsal replies are planted deliberately and annotated; nothing else in the record distinguishes them.
Plan time, recorded run 36s The model call that turned plain English into a config plan.
Config lines applied 15 Every one kept in the audit record, whether the run landed or reverted.
Platforms wired 2 Cisco IOS-XE and Nokia SR Linux, each with its own safety path.
Source you own 100% Every line of the loop ships in your repository. The planning model is a separate choice.
Figures from change 6j5fm and the runs before it Per-device licensing: none Approval: a texted reply from a known number
07 / What it does not do yet

The honest edges of it.

Worth saying plainly, because the gap between a demo and an estate is where this category earns its scepticism.

  • Scope of change

    The permitted set started as layer two: VLAN and switchport configuration, interface descriptions, port-level spanning-tree protection, and taking a port up or down. It has since grown two classes, each shipped the same way, with its own guardrails, its own checks, and its own adversarial review that tried to break it before it shipped. VLAN provisioning now runs end to end on the real switch with NetBox handing out the prefix, and it brings tightly scoped addressing with it: an SVI address and a DHCP scope that are legal only inside that class, with a hard refusal on anything that could reach the home network the bench sits on. A BGP-in-VRF class exists too, and it is honest to say it has only run against virtual lab targets so far, not the bench switch. Everything outside the permitted set is still refused because the allowlist is default deny, and one early looseness has been closed: spanning-tree was originally permitted as a whole family, wide enough to admit a priority change that moves a root bridge, and it is now narrowed to the port-level protections only.

  • Scale

    This runs in a lab and against one real switch on a bench, not across a production estate. The pattern does not care about scale, but that claim has not been earned yet and will not be made here until it has.

  • Concurrency

    One text-gated change at a time. Two approval requests in flight together could be confused for each other, so that is a documented constraint rather than something discovered later by a customer.

  • Where the planning runs

    The step that turns a request into a config plan calls a cloud model today, and the device and prefix inventory for the site in question goes out with that request, management addressing included. Running the planner entirely on your own hardware has been prototyped and measured rather than shipped, so which of the two you want is a decision that belongs to you, not a default we picked. Nothing about the approval gate, the guardrails, or the rollback changes either way.

  • The judgment call

    The goal is not to remove the human. It is to shrink the human's job to the part a human is genuinely needed for, and to wrap that decision in validation, a rollback timer, post-checks, and an audit trail that writes itself.

08 / Start here

What would you want to approve by text?

Thirty minutes on your network: which changes are repetitive enough to be worth a loop, which ones should never be automated, and what it would take to run the first one safely.

ApprovalAlways a human
RollbackArmed before deploy
AuditWritten by the loop
OwnershipYou keep the source