Skip to content

Lab, Internal tool, in daily use

AI that writes the draft and then stops.

A content operating system for a portfolio of websites. It finds an opportunity backed by real search evidence, briefs it, generates it with Claude, runs it through deterministic quality gates, and waits. You press the button. The app never acts on its own.

  • 82 Source files
  • 21,033 Lines of code
  • claude-sonnet-5 Model
  • zero Autonomous actions

The problem

Why we built it.

Content tools fall into two piles. One drafts a paragraph in a text box and leaves you to do everything around it: work out what to write about, check whether it is any good, get it into the site, remember what you published. The other promises the whole loop and quietly becomes an autonomous publishing bot, which is fine right up until the week it puts something wrong on a client's website.

Neither is usable across a portfolio. The first does not save enough time to be worth the subscription. The second cannot be trusted with a site that somebody's livelihood depends on, and no amount of prompt engineering changes that, because the risk is architectural rather than linguistic.

So we built the middle. The tool does the parts that are genuinely tedious and genuinely mechanical: reading search evidence to find what is worth writing, holding the brief, drafting, and running deterministic checks that do not need an opinion. Then it stops and shows its work. Publishing is a button a person presses, and the things it refuses to do are enforced in code rather than promised in a settings page.

01 / Inside the tool

The pipeline. Seven steps, and the two that put anything into the world are both a person's.

Agent · 5 steps Person · 2 steps
  1. Find

    agent

    Reads the local Search Console dashboard and surfaces opportunities backed by real evidence. If the dashboard is offline it uses cached data and says so, rather than pretending it is current.

  2. Brief

    agent

    Turns the opportunity into a brief: the angle, the audience, the channel and the evidence behind it, so the draft is aimed at something specific.

  3. Generate

    agent

    Drafts with Claude, sending bounded, relevant excerpts rather than a whole repository. Without an API key it falls back to a deterministic mock so the whole workflow still runs.

  4. Gate

    agent

    Runs deterministic quality checks. These are code, not a second opinion from a model, so the same draft always gets the same verdict.

  5. Approve

    person

    A person reads the draft and decides. Nothing moves past this point on a timer, a schedule, or a confidence score.

  6. Export

    agent

    Writes exactly two files into the website repository, the Markdown and the image, and stops. It will not touch navigation, layouts or config.

  7. Mark posted

    person

    You record the live URL yourself. Nothing is inferred; the app knows only what you tell it.

02 / Inside the tool

The limits, as the app documents them. These are enforced in code, which is the difference between a boundary and a promise.

What the tool will and will never do. Each limit is enforced in code.
It will It will never
Read Search Console through the local dashboard Write to Search Console, claim an action, ship one, or request indexing
Read a linked website repository Modify one, except on an explicit Approve and export
Write exactly two files on export: the Markdown and the image Commit, push, deploy, or touch navigation, layouts or config
Commit and push those two files, when a project opts in Force-push, amend, or commit anyone else's staged work
Show you social copy to paste Post to any social platform
Render a finished video file and stop Upload it, schedule it, or open TikTok
Send bounded, relevant excerpts to Anthropic Send a whole repository
Read public content files Read or display anything that looks like a secret

03 / Inside the tool

Opportunities carry the same evidence discipline as the search workbench: what it found, how confident it is, and what it thinks that is worth.

Do next ranked across every property Sample data
  • Long-form draft /guides/heat-pump-running-costs/ awaiting approval

    Why — Query cluster with real impressions and no page targeting it. Draft generated and passed all quality gates.

    • 1,940 impressions
    • no matching page
    • gates passed 6/6
    ~120 clicks/mo (est.) confidence medium priority 34
  • Refresh /guides/choosing-a-heat-pump/ briefed

    Why — Existing page ranks 5.2 but the content predates the current product range. Refresh brief prepared.

    • position 5.2
    • last updated 19 months ago
    impact unscored confidence medium priority 26
  • Social repurpose /guides/annual-servicing-checklist/ ready to paste

    Why — Long-form piece performing well. Social copy generated for manual posting.

    • copy generated
    • no auto-posting
    impact unscored confidence low priority 12

Every action carries its own history

  1. opportunity
  2. briefed
  3. generated
  4. gated
  5. awaiting approval
  6. exported
  7. posted

How it is built

The decisions that matter.

  1. 01

    The button is the product

    Every capability that puts something into the world is behind an explicit human press. There is no schedule, no auto-publish and no confidence threshold that bypasses it, because the moment one exists it becomes the default nobody reviews.

  2. 02

    Refusals live in code

    Not posting to social, not requesting indexing, not force-pushing, not sending a whole repository. These are enforced by the implementation rather than described in a policy, so they hold even when someone is in a hurry.

  3. 03

    Deterministic gates, not a second opinion

    Quality checks are code with fixed rules, so the same draft always gets the same verdict. Asking a model to grade another model's output feels rigorous and is not reproducible.

  4. 04

    Degrades honestly

    No API key falls back to a deterministic mock. No voice key renders silence of the right length. A stale search dashboard says it is stale. The pipeline keeps working and tells you exactly what it could not do.

  5. 05

    Opt in, per project

    Commit-and-push is off for every project until you switch it on, one at a time. Convenience that arrives switched on is how tools end up doing things nobody agreed to.

  6. 06

    Bounded context

    Only relevant excerpts are sent for generation, never a whole repository, and anything resembling a secret is never read or displayed.

Transfer

What this has to do with your business.

The valuable idea here is not content generation. It is the shape: let the machine do the mechanical middle, put deterministic checks where judgement is not required, and keep a person on every step that reaches the outside world. That shape transfers to quoting, onboarding, reporting, claims handling, or whatever your version of the same problem is.

  • Find the mechanical middle of a process, not the whole process
  • Use deterministic checks where a rule will do, and a model only where it will not
  • Make the refusals structural, so they survive a busy Friday
  • Degrade honestly when a dependency is missing, rather than guessing
  • Ship it switched off, and let each team turn it on when they trust it

FAQs

Questions, answered.

Does it publish to my website automatically?
No. By default it writes two files into the repository and stops, and you commit and deploy. There is an opt-in setting, off for every project until you turn it on, that lets it commit and push those two specific files. It will not force-push, amend, or commit anything you had staged.
Does it post to social media?
No, and it is not a missing feature. It generates the copy and shows it to you to paste. For video it renders a file and stops rather than uploading or scheduling. Anything that publishes on your behalf is a decision we think should stay yours.
What gets sent to the AI provider?
Bounded, relevant excerpts, never a whole repository, and nothing that looks like a secret is read or displayed. The API key is read on the server only, never sent to the browser, never logged and never stored in the database.
Is the output any good without a human editing it?
It is a solid first draft that has passed a set of fixed checks, which is a genuinely useful place to start from. It is not finished work, and a tool that told you otherwise would be selling you something. The time saved is in the research, briefing and mechanics, not in skipping the edit.
Could you build something like this for us?
Yes, though it would look different, because the useful part is the shape rather than the content features. We start with an operating review that maps how the work moves today and returns a costed, sequenced plan, including the parts we would tell you not to build.

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
What do you need?

Pick any that apply.

How soon?

A rough answer is fine. Nothing here is binding.

Where should we reply?

You'll hear back from Jake within one working day.

By sending this you agree to us using your details to reply. See our privacy policy.