The Starting Point

Why I Started

Reading about AI wasn't going to teach me anything useful about it.

OpenClaw (opens in a new tab) picked up an enormous amount of noise in early 2026. I wanted to know whether any of it mapped to what I actually do for a living.

I started where everyone starts. It triaged my email, pulled dates out of messages and put them in my calendar, chased me about the things I'd forgotten. Genuinely useful, and completely surface level. None of it told me whether an agent could be trusted with work that matters.

The question I actually wanted answered was a management one. Could I treat this as a team? Give it deliverables, hold it to a standard, review what came back, and end up with something I hadn't built myself. That's the question my job turns on, and it doesn't change much whether the team is people or agents.

Between a demanding job and a family there isn't a lot of time to find out. So it had to be something small, real, and mine.

THE EXPERIMENT

The Candidate

Give It Something Real

A toy project proves nothing. It had to be something I'd mind breaking.

My own website was the obvious candidate. It was WordPress, it was mine, and it was already costing me time I resented.

Plugins to patch, a theme to keep compatible, and every change copied from test to live by hand. Small enough to hold in my head, real enough that getting it wrong would be visible to anyone who looked.

There was a second thing I wanted out of it. I'd never used git (opens in a new tab) in anger, and I was curious whether the way software teams manage change has anything to teach programme delivery. That turned out to be the more interesting question of the two.

So I rebuilt it. Or rather, I didn't. I vibe coded it with Claude (opens in a new tab) and OpenClaw: describing what I wanted in plain language, reviewing what came back, and learning as I went. Managing rather than delivering. My architecture background did some of the steering. If I'm honest, so did the geek in me.

Rebuilding on Astro (opens in a new tab) removed the admin panel, and that constraint turned out to be the point. No live editor means content lives in the repository. Once it's in the repository it's in git, and git gives you branches, branches give you environments, and environments give you a review gate. One decision about a framework quietly dragged the whole delivery model along with it.

Edit live, in a browser Build on a branch, review before it's seen
No history, no stated reason Every change a commit that says why
One environment, which was live Preview, staging, production
Plugins and a server to keep patched Static files, no runtime, no admin login

WHAT I FOUND

The Parallel

A Release Is Just Delivery

The part I didn't expect. Software teams and programme teams are solving the same problem.

Strip the language away and a software release is a set of things that have to get done, in order, to reach an outcome. Do this, then that, end up with something that didn't exist before. That is programme delivery.

The delivery loop for keithbennett.me Work is planned in monday.com, requested and challenged in Slack, built into a GitHub branch by an OpenClaw agent running Claude, deployed by Cloudflare Pages, then the item is closed back in monday.com. 01 monday.com Plan the change 02 Slack Brief and challenge 03 OpenClaw Agent, running Claude 04 GitHub Commit and review 05 Cloudflare Deploy to edge Item closed once live
Plan it, brief it, build it, review it, ship it, close it. Any programme manager would recognise the shape of this.

Once I'd used it properly, every piece of git had an equivalent I already knew:

A backlog The plan
A branch A workstream, running without disturbing anything live
A review before merge A stage gate
A staging environment UAT
A rollback A contingency plan that has actually been tested

The difference is speed and cost. A software team runs that whole cycle several times a day, and the tooling makes the audit trail a by-product rather than a chore. Programmes run it over months, with the trail assembled afterwards by people who weren't there. That gap is the bit worth thinking about.

THE ENVIRONMENTS

Change Control

Three Gates, No Shortcuts

Nothing reaches the public site without being seen on a real staging domain first.

Branch to environment mapping Feature branches build to a private preview URL. The test branch builds to a staging domain for review. The main branch builds to the live site, with instant rollback available. feature/* Work in progress Private preview build Auto-built on every push Gated ยท not indexed test Staging test.keithbennett.me Reviewed here, on a real domain Approval gate main Production keithbennett.me Atomic swap at the edge Live Rollback
Branch decides environment, and the build itself decides whether content is public, so an unfinished page stays gated wherever it happens to be served.

Releases are atomic. The whole site swaps at the edge in one operation, so there's no half-deployed state to explain. If one is wrong, an earlier one is promoted back in seconds. That's the entire disaster recovery plan, and unlike most of the DR plans I've inherited, it has actually been tested.

WHAT IT'S BUILT ON

The Stack

Eight Moving Parts

Chosen for what they remove, not for what they add. Every link opens in a new tab.

Site framework

Astro (opens in a new tab)

Builds every page to static HTML ahead of time. No server to patch, no database to breach, nothing to run at request time.

Source of truth

GitHub (opens in a new tab)

Every word and every style rule is version controlled in a private repository. Nothing changes without a commit, and every commit says why.

Agent runtime

OpenClaw (opens in a new tab)

The open-source layer the agent actually lives in. It keeps context between sessions, connects the model to Slack, the repository and the board, runs scheduled work, and holds the rules about what may happen without me.

The reasoning

Claude (opens in a new tab)

The model doing the thinking inside that runtime. Writes the code, runs the build, opens the branch, and argues the case. Does not decide what gets published.

Where the work happens

Slack (opens in a new tab)

One channel per site. Requests, challenges, approvals and rejections all land in the same thread, so the reasoning is recoverable months later.

Plan and record

monday.com (opens in a new tab)

Work exists as an item on a board before it exists as a change. Status is updated as it moves, not reconstructed afterwards.

Every page is compiled to HTML before anyone asks for it. No application server, no database, nothing running at request time, so most of the security work a conventional site needs is spent defending things this one simply doesn't have. The trade is that anything dynamic has to be deliberate, which for a personal site is no trade at all.

WHERE THE AGENT FITS

Delegation

Authority, Not Autocomplete

"We use AI" is worth nothing. What matters is what it's allowed to do without asking.

The interesting question isn't whether an agent writes the code. It's what happens when it wants to do something consequential.

A chat window is not an agent. The distinction that matters here is between the model and the runtime it lives in. Claude (opens in a new tab) does the reasoning. OpenClaw (opens in a new tab) is the open-source runtime around it: it gives the agent a persistent identity, memory that survives between sessions, a place in Slack, direct access to the repository and the board, scheduled work that runs whether I'm at a keyboard or not, and a written set of rules about what it may do unattended.

That second half is the part I found most interesting, because it isn't a technology problem. Buying model access is trivial. Deciding what a persistent, tool-holding, always-on agent may do on your behalf is governance, and it's the question I'd have to answer at work long before anyone asked me which model we were using.

Defined Write Scope

The agent can create branches, change files in this repository, and run builds. It cannot merge to production, cannot touch DNS, and cannot publish anything externally. The boundary is explicit rather than assumed, which is the difference between delegation and hoping.

Approval Gates

Anything irreversible, anything public, and anything outside the repository is proposed and waits. I say yes or I say no. The gate is deliberately annoying, because the alternative is finding out afterwards.

An Audit Trail By Default

The board item, the Slack thread, the commit message and the deploy record are four views of the same change. Nobody writes them up at the end. They exist because the work went through them.

Challenge Expected

An agent that agrees with everything is a liability. This one is instructed to say when an idea is wrong, and it does. Some of what's on this site is here because I lost the argument.

Scope, gates, trail. Working that out on a website costs me an evening. Working it out for the first time on a programme costs considerably more.

THE DISCIPLINE

Standards

Checkable, Not Claimed

Every item below can be verified from outside. Two of them have public tools for exactly that.

  • Everything as code. Content, styling, headers and redirects all live in the repository. There is no admin panel and no unversioned change.
  • Test before live. Reviewed on a staging domain, not on a screenshot. No direct pushes to production.
  • Versioned builds. The footer stamp is generated from the deployed commit, so what you're looking at can always be traced back to a specific change.
  • Security headers on every response. Content Security Policy, HSTS with preload, frame and MIME protections, and a restrictive permissions policy.
  • Accessibility as a build rule. WCAG AA contrast across both themes, skip links, landmarks, keyboard-navigable menus, and alternative text that describes rather than labels.
  • Documented as it's built. Decisions are written down at the time. Documentation written months later is fiction with footnotes.

IN PROPORTION

One Last Thing

Keep It In Proportion

This isn't me delivering software. It's me learning where agents fit.

One contributor, no uptime commitment, and consequences measured in mild embarrassment. It's a personal website, not an enterprise platform, and I'm not going to pretend otherwise.

I'm not about to start calling myself a developer. What I've got out of this is a working understanding of how agents behave when you give them something real, what they need from you to be useful, and where the human has to stay in the loop. That understanding is very hard to get from a conference talk.

None of it is theoretical any more, which is the point. When the question arrives at work, and it will, I'd rather answer it from something I've actually run than from something I've read about. Maybe not this year. Certainly soon.