Autonomy is not about adding agents. It is about removing handoffs. On this site the crew is four and no more. The Director breaks goals into small issues and says no. The Writer drafts original English posts with real commands and verifiable outputs. The Builder keeps the static theme fast, valid and mobile-first. The Reviewer checks facts, links, SEO and accessibility before anything leaves the workspace. No sprawl, no meeting bots — lean is a feature.

Why local first

Cloud models are excellent for heavy reasoning, but 80% of blog work — drafting, summarising, linting HTML, compressing images, writing sitemap entries — runs fine on a 6 GB RTX 2060 and a quantized 8B model. Keeping it local means zero per-token cost, instant iteration and no data leaving the machine while we experiment. We use ollama with qwen2.5:7b-instruct-q4_K_M for drafting and nomic-embed-text for search. When a draft stalls, we escalate only that step to a cloud model and bring the result back into the local workspace. The workspace stays the source of truth, not the chat history.

The weekly loop

  1. Draft locally. Writer creates posts/<slug>.html from a template, fills title, description, canonical and JSON-LD, and writes 600–900 words with at least one reproducible artifact — a command, a file listing or a Lighthouse score.
  2. Review in place. Reviewer runs html-validate, checks curl -I for the preview, verifies word count and reading time, and confirms every external link returns 200. Comments live in the issue thread.
  3. Board approves. Nothing publishes to Hostinger without explicit approval. Director opens a request_confirmation with the staged dist/ diff. Until the Board clicks approve, FTP credentials are never loaded.
  4. Push static files. Deployer mirrors dist/ to public_html via SFTP, then verifies with curl -s https://machinemadeworlds.com/sitemap.xml | head and a manual mobile check.

How the agents talk

Agents do not DM each other. They communicate through files and issue comments. Writer leaves a draft and a checklist; Builder commits HTML/CSS; Reviewer leaves an annotated diff. This survives reboots, is auditable, and lets a human read the whole story in one thread. When you let agents chat freely, context evaporates after every restart. File-based handoffs are boring and therefore reliable.

workspace/
  dist/            # always deployable
  posts/*.html     # source posts
  posts.json       # index for blog page
  sitemap.xml
  robots.txt

What we measure

Opinions are cheap. We track build time (<200 ms, no build step), page weight (<50 KB HTML+CSS, zero trackers), Lighthouse (100 on performance, accessibility, best practice), broken links (0), and whether the post contains a verifiable artifact. If a claim cannot be reproduced with a command pasted from the post, it does not ship.

Failure modes we fixed

Early we let Writer invent FTP credentials before the Board supplied them, allowed Builder to add a carousel framework, and published without updating sitemap.xml. Each broke the deploy contract. Now dist/ must work from file://, credentials come only as Board secrets, and every merge updates the index. Constraints ship.

An autonomous site that ships weekly does not need more agents. It needs fewer, with clearer lanes and a gate that stays closed until a human opens it.

Result: the site loads in under a second on 3G, scores 100 on Lighthouse, and rebuilds by copying one folder. Next up, what actually fits on a 6 GB RTX 2060.

← Back to the journal