My stack The stack · Agents and the loop

Agents, MCP and the design loop

I let an agent do the work. I do not let it decide whether the work is done.

3model providers behind one gateway, switchable by configuration
2MCP servers written rather than consumed — vectorless-mcp and Coursified’s own
0merges on a red build — the gate is machinery, not judgement
01Never one provider

LLMGate exists so that Anthropic, OpenAI and Gemini are a routing decision with a cost attached rather than three rewrites. Fallback is configuration. Mercala goes further and talks to an OpenAI-compatible API, currently GLM-4.7 behind nginx — none of the application code knows or cares.

The reason is not vendor politics. It is that model quality, price and availability all move, and a system wired to one provider cannot respond to any of them without a refactor.

02Where the AI sits in the loop Inside it, with a gate in front — not beside it.
The gate

An agent saying it finished is not evidence that it did.

standing skillsloaded before it starts
the agent worksrepo-scoped, specified
build, lint, teststhe real build
automated reviewgates the merge
merge with evidencewhat was measured, when

The loop is written down as skills the agent loads before it starts, so the same steps run whether I am watching or not. Fully specified, repo-scoped work is delegated; anything cross-cutting, architectural or ambiguous stays with me. What decides whether something merges is machinery — the project’s real build, not a typecheck standing in for one.

03Writing the servers, not just calling them
vectorless-mcp

Gives any MCP client structure-preserving retrieval. Consuming somebody else’s tool is the easy half of MCP.

Coursified's own

packages/mcp inside the monorepo, exposing that product’s surface to an agent.

Skills over prompts

A prompt is advice. A skill is a procedure that loads every time, which is the difference between a habit and an intention.

Re-measure before asserting

Anything claiming a system lacks a feature is checked live before it is repeated — a cached answer about someone else’s API is the fastest thing on the shelf to go stale.

04OpenDesign against Claude Design Both produce a design. Only one of them re-ports.
Why this site uses OpenDesign

The design set is a source file, so a revision is a command rather than a day.

OpenDesign v10static HTML, in the repo
one porter scriptto React
pixel diffagainst the original
re-port on revisionnot re-type
21pages from one script
1declaration site for tokens
0hand-edited generated files

Claude Design is excellent at getting to a good-looking artefact quickly, and for a one-off page that is the right tool. This site is not a one-off page — it is twenty-one of them sharing one nav, one footer and one token file, revised repeatedly. What OpenDesign gives me is a design set that lives as files I own: a single :root, one @font-face block, a documented contract, and therefore something a script can consume deterministically. The win is not the first render. It is the fifth revision, where the change is re-running the porter and diffing, instead of hand-carrying edits into twenty-one components.

A plan that lives only in a chat window does not exist.

the first of the standing rules
05The rules that do not bend

Five of them, and they fire before anything else.

  • Issue firstEvery change starts as a written issue with acceptance criteria. Findings surfaced mid-task become tracked issues immediately rather than staying in the conversation.
  • One worktree per issueThe main checkout stays clean and on main. Parallel work never collides and nothing is committed straight to the default branch.
  • Built fully, never stubbedNo placeholder ships as though it were the real thing. A shortcut forced by a hard constraint is called out and reverted, not left in.
  • Verified by measurementThe real build, lint and tests. “Should be fine” is not a result, and neither is an agent’s report of success.
  • Never assert absence from a snapshotBefore saying a feature does not exist — and always before asking another person for anything — re-measure it live.
06This site is the worked example
The case study

hallelx2.com

Ported by a script, verified by pixel-diffing every page against the design set, and deployed from the same loop. The activity page is generated from the registries for the same reason — so it cannot flatter me and cannot go quietly out of date.

The agent is fast. The gate is what makes the speed worth anything.

Every claim on this site can be checked against a repository, and that is not a coincidence — it is the only version of moving quickly that survives somebody looking closely.