Lab, Internal tool, in daily use
An AI agent that ships search fixes, with a person approving each one.
We built this to run search across our own sites. It reads Google Search Console, writes a plain-English briefing, ranks what to do next with the evidence behind each call, and hands that queue to an AI agent working in the site's repository. Nothing reaches production without a person saying yes.
- 71 Source files
- 7,961 Lines of code
- read-only OAuth scope
- none Third-party services
The problem
Why we built it.
Search Console holds the answer to what a website should do next, and almost nobody reads it. Not because the data is hidden, but because it arrives as an undifferentiated pile: thousands of queries, hundreds of pages, no ordering, and no view on which of it is noise. Deciding what actually matters is the work, and it is the part that never gets done.
The tools that promise to fix this mostly make it worse. They round uncertainty up to a colour, present an estimate as a fact, and quietly reopen work you already dismissed. For a small studio the failure is expensive in a specific way: you spend an afternoon on a page that moved from six clicks to three, which is noise, while a page sitting at position seven with a zero percent click-through rate goes untouched for a month.
So we built the thing we actually needed. It reads the data, says plainly what it thinks and how confident it is, ranks the work, and then hands that queue to an AI agent that can open the repository and do it. The agent does the tedious part. The judgement, and the decision to ship, stay with a person.
01 / Inside the tool
The daily briefing. It writes its own summary in plain English, then spends as much space on what it does not know as on what it does.
1,284 clicks in the last 28 days, up 18.4% on the prior period, with average position improving from 16.8 to 14.2. 23 actions ready to work — top priority: CTR rewrite on the heat pump buying guide.
- Clicks
- 1,284 +18.4% vs prev
- Impressions
- 96,400 +7.1% vs prev
- Avg. position
- 14.2 was 16.8
- Indexed
- 412 of 468 coverage
- Open actions
- 23 ranked
- Est. upside
- ~310 rough ceiling, don't sum as truth
Data notes
Needs attention
- The coverage scan for this property is over two weeks old.
- One page has 836 impressions and no clicks — a CTR or intent problem, not an empty page.
Missing or incomplete data
- Properties with no prior period show their change as unknown, never as zero.
Informational
- Windows anchor to yesterday. The most recent ~3 days are still settling and may rise.
02 / Inside the tool
The ranked queue. Every item carries its evidence, a labelled estimate and a confidence level, so you can disagree with it.
- CTR rewrite
/guides/choosing-a-heat-pump/newWhy — Rewrite the title tag and meta description — CTR is 0.8% vs ~7% expected at position 5.2.
- 4,180 impressions
- CTR 0.8% vs ~7% expected
- position 5.2
~260 clicks/mo (est.) confidence high priority 41 - Fix indexing
/products/replacement-filters/newWhy — Page is discovered but not indexed. Add internal links, confirm it is in the sitemap, then request indexing.
- discovered — currently not indexed
- in sitemap
impact unscored confidence medium priority 20 - Investigate drop
/services/annual-servicing/newWhy — Ranking loss. Clicks 210 → 128. Check content freshness, rankings and coverage.
- position +6.4
- 210 → 128 clicks
~82 clicks/mo (est.) confidence medium priority 27.5
Every action carries its own history
- new
- investigating
- planned
- in progress
- shipped
- measuring
- completed
03 / Inside the tool
How the work actually moves. The agent does the labour; the two decisions that carry risk are both a person's.
-
Brief
agentThe agent calls the workbench API for a site's context and its ranked open actions. It arrives knowing what matters, rather than guessing from a prompt.
-
Claim
agentIt takes one action off the queue. Status moves to in-progress, so the same work cannot be picked up twice or silently duplicated.
-
Implement
agentIt works in the site's own repository against the real codebase, then runs the build and the audits before it claims anything is done.
-
Review
personA person reads the diff and decides whether it ships. This is the gate, and it is not optional or configurable.
-
Ship
agentThe agent reports back which URLs changed and a summary of what it did, so the action carries its own history.
-
Request indexing
personDeliberately a separate step, taken by a person. Asking Google to recrawl is an outward-facing action and never happens as a side effect.
How it is built
The decisions that matter.
- 01
Read-only by construction
The OAuth scope is webmasters.readonly. The tool physically cannot submit URLs, change settings or write to the Google account. Safety is a property of the architecture, not a policy someone has to remember.
- 02
Uncertainty stays visible
A missing prior period reads as unknown, never zero and never healthy. Estimates are labelled as estimates and marked don't sum as truth, because a ceiling presented as a forecast is how these tools lose trust.
- 03
Decisions are durable
The work queue lives in local SQLite and syncs by a deterministic fingerprint, so your status, notes and history survive every refresh. Work you dismissed does not quietly reappear next week.
- 04
The data path is short
Google to your machine, nothing in between. No third-party service holds the data and no analytics vendor sees it.
- 05
The human gate is real
The agent can prepare and report, but a person reviews the diff and a person requests indexing. Both are separate, deliberate steps rather than defaults you could leave switched on.
Transfer
What this has to do with your business.
Search happens to be our routine work. Yours will be something else — quoting, reporting, onboarding, chasing paperwork, answering the same forty questions. The shape of the answer is the same: find the judgement work worth keeping, hand the tedious part to something that never gets bored, and keep a person on the decisions that carry risk.
- Read the systems you already run, rather than replacing them
- Rank the work and show the evidence, so the team can disagree
- Keep uncertainty visible instead of rounding it to a colour
- Put a person on every step that is outward-facing or hard to reverse
- Ship something small that works, then decide what earns building next
Where this leads
The engagements this work sits under.
- AI adoption Useful, low-risk automation around your website, content, admin, and reporting.
- Custom software Custom software, internal tools, and AI assistants for one business.
- Internal reporting Dashboards, digests, and workflow routing that take reporting off the team.
- AI search visibility Technical SEO, structure, and schema for search and AI-assistant visibility.
FAQs
Questions, answered.
- Is this a product I can buy?
- Not today. It is an internal tool we built for our own sites and it is shown here as evidence of how we build, not as something with a price and a signup. If you want something like it for your own operation, that is a commission and we would scope it properly.
- Does the AI change my website on its own?
- No. The agent prepares work and reports what it changed, but a person reads the diff and decides whether it ships, and requesting indexing is a separate action a person takes. We build it this way because an agent that can publish unreviewed is a liability dressed as a convenience.
- Would you build something like this for us?
- Yes, and it usually starts smaller than people expect. The first engagement is an operating review that finds the routine work worth automating and returns a costed, sequenced plan, including the parts we recommend you do not build. You commission from that, or you do not.
- What does it cost to run?
- This one costs nothing to run beyond the machine it sits on: no third-party services, no per-seat licence, no data leaving for a vendor. Not every tool can be built that way, but it is worth asking for, and we will tell you when it is not possible.
Start a project
Got routine work worth handing off?
Tell us what eats the most time in your week. We'll tell you honestly whether it's worth automating, and what we'd build first. You'll hear back from Jake directly.
Three questions · about a minute
See the work