Built with Codex and Claude Code
I run Claude Code the way a technical lead runs a development team: I write the requirements, make the design decisions, review every change, insist on tests, and decide what ships. These are three things built that way.
OpenAI Codex and Claude Code are now my two main coding assistants. The three original builds below were done with Claude Code; ongoing work on this site also uses Codex. I use GitHub Copilot, Gemini, Grok, and sometimes Perplexity as well, choosing around the task rather than a single provider.
Blackbox: a command-line chief of staff
Blackbox, or bb, is my own assistant. It runs on a Debian server I administer and manages the operational side of my business from the terminal.
What it does
- Manages tasks in Todoist, which is the single authority for everything I need to do.
- Reads and writes Google Calendar through my own Google Cloud OAuth project, and reads unread mail each morning, read-only, skipping invoices, newsletters, and sales pitches.
- Triages work opportunities through Upwork's official MCP server, ranking dozens of searches and drafting pitches for my approval.
- Assembles briefings and drafts writing using whichever model does the job best.
- Writes a diary entry at the end of every day, and closes the day itself at 11:45 p.m. if I forget to.
How it was built
Over eight days, Claude Code took it from a 1,500-line script to about 12,000 lines: Python modules, an installer, a backup tool, and 140 end-to-end tests across 54 commits on main. Claude Code wrote the implementation. I specified the behavior, wrote structured feedback documents with scoped priorities and open architecture questions, tested each stage, compared model backends from OpenAI, Anthropic, and open-weight providers against each other on real tasks, and accepted or rejected the work.
Safety rules
- Every external action needs one unambiguous target and my explicit confirmation. Nothing sends, submits, spends, or deletes on its own.
- Untrusted content, such as email and web pages, is treated as data and never as instructions.
- Deterministic routing handles every command it can without a model call; models are reserved for writing and judgment. Total model spend for the whole build period was about five dollars.
- Secrets live outside Git.
- Nightly AES-256 encrypted backups go to a private repository, and restores have been tested.
Built from real use
The second week was the most useful. I used bb the way I actually talk, pasted the sessions back, and every misfire became a fix plus a test that uses my exact words. A shorthand I'd typed for weeks had been silently ignored, so now bb says plainly when something isn't a command and shows what would have worked. A ranking that gave hourly jobs no credit was found by asking a simple question about the results. Rules I stated once in conversation now live in code, where they can't drift. Every screen ends with the exact next command, which turned out to be the feature I value most.
The deploy loop
Work happens on a branch in a development worktree. Tests run, the database is backed up, the branch is fast-forwarded to main and pushed, and a live smoke test confirms the result. It's the same discipline I bring to client automation pilots.
Hill Mole: a legacy blog off dead software
Hill Mole is my serialized novel, 309 entries written from 2005 to 2022 on Movable Type, which had stopped working. With Claude Code, I moved it to static pages on GitHub Pages, preserving the content, the feel of the original, and every original URL, including old archive and feed addresses. Every entry now has a hand-written title and description checked by a script on each build, schema.org data, llms.txt coverage, and IndexNow submission. The same approach rescues any client site stranded on old software. See project rescue.
This site
Gerris is plain HTML generated by a short Python script, also built with Claude Code. Every page has structured data and a Markdown twin for AI tools, the site publishes llms.txt and a full-text llms-full.txt, and each build checks title and description lengths, word counts, broken internal links, and the copy rules. It's static, fast, readable without JavaScript, and an example of the advice in the guides.
What this means for clients
Building software with AI coding assistants is a real skill, and the skill is mostly the part that isn't typing: knowing what the job is, specifying behavior precisely, catching what the model got wrong, testing, and owning the decision to ship. That's what I bring to a client's tool, a client's repository, or a client's developers.
Updated
