Vol · 07

Blog

A blog is a place where one goes to tell the world about something interesting. Usually it comes down to complaints or achievements — and I choose the latter.

Posts · 43

November 2026 2 posts

October 2026 10 posts

September 2026 9 posts

August 2026 7 posts

  • The smallest tool in my Claude Code monorepo — a wrapper that auto-names every unnamed session with its folder and a timestamp, so the session history is actually browsable.

    #claude-code-command-center · part 10/10

  • file-sync keeps my Claude config in step across two folders, newer wins either way — until a raw copy clobbered a machine-specific statusLine.command and taught me why settings.json needs a merge, not a copy.

    #claude-code-command-center · part 9/10

  • Claude sessions are disposable, so I harvest their lessons into a weekly master file on a schedule — plus a hand-run skill I built for a separate credit pot Anthropic announced but never shipped.

    #claude-code-command-center · part 8/10

  • I'd copied the same CLAUDE.md and configs across a dozen repos and let them drift — Vantage is a single HTML file that surveys every repo, diffs any two files, and copies the good version across.

    #claude-code-command-center · part 7/10

  • Planning got cheap enough to do from my phone, so plans piled up across ten repos — docket is the single board I run them all from, one at a time or batched by project.

    #claude-code-command-center · part 6/10

  • Two skills, same name, no way to tell which one Claude Code fires — so I built a browser that lists every skill, agent, and hook on the machine, shows which one wins, and lets me read what each actually does.

    #claude-code-command-center · part 5/10

July 2026 4 posts

  • I already had a usage dashboard; I built the terminal version out of pure "can I" curiosity — and it's what finally justified extracting the shared parsing into a library.

    #claude-code-command-center · part 4/10

  • The Claude Code status line shows the moment; I wanted the story — so I built a dashboard that breaks token usage down by project, tool, and model, with a rate-limit trajectory that tells me when I'll hit the wall.

    #claude-code-command-center · part 3/10

  • My Claude Code status line started as a context gauge back in the 200k days, grew rate limits and a cost figure — and why I trust two of those three and squint at the third.

    #claude-code-command-center · part 2/10

  • Why I pulled a dozen standalone Claude Code tools into one monorepo called C4 — and why that would have been a maintenance trap before Claude Code could read the whole thing.

    #claude-code-command-center · part 1/10

June 2026 9 posts

  • I built figureflow to answer two questions — can you wrap React Flow in Python, and can an LLM author interactive diagrams with it. Both got answered. The second answer is why I archived it.

    #figureflow

  • A self-hosted web front end for Claude Code — one Docker container per user, sessions you can resume from a browser tab, and no cloud in the loop.

    #claude-code-html-wrapper · part 1/3

  • My Claude Code wrapper has no database, no Docker SDK, and no permission prompts — each absence was a decision made in the spec, and each one is why the server fits in seven files.

    #claude-code-html-wrapper · part 2/3

  • The redesign looked AI-generated and I couldn't say why — so I asked the model that designed it to critique it. It listed its own tells, and iteration 19 became a subtraction pass.

    #claude-code-plugin-toggler · part 6/6

  • Reskinning my Claude Code plugin manager around teal and terracotta — a palette that stays related to Claude without looking like an Anthropic product, and a VSCode panel that does the same trick against the editor.

    #claude-code-plugin-toggler · part 5/6

  • Going from a two-tier local/global plugin model to three scopes — Local, Project, User — because the missing one lets a repo carry its own opinions to whoever works in it.

    #claude-code-plugin-toggler · part 4/6

  • Every line of my Claude Code plugin manager was written by Claude Code. What I actually did all those days — specs, sequencing, and being the first user — and where the model out-debugged me.

    #claude-code-plugin-toggler · part 3/6

  • I promised to write up the path problems once I understood them. It took three releases, a 29-line band-aid, and Claude Code finding the one character I couldn't see.

    #claude-code-plugin-toggler · part 2/6

May 2026 2 posts

  • Setting up yet another project with my usual Claude Code plugins, I got annoyed enough to build a toggler — a browser UI and a VSCode panel over one JSON file.

    #claude-code-plugin-toggler · part 1/6

  • Resetting the blog. Expect short, occasional notes on building AI coding agents and the tooling around them.

By series

#mlops-incident-commander 4 parts

  1. 1. An on-call engineer for a model, and the scaffolding I built so it had something to watch 2026-10-27
  2. 2. The model decides there's an incident, and a lookup table decides what to do about it 2026-10-29
  3. 3. My agents weren't allowed to see the answer key, so I wrote it into their memory 2026-11-03
  4. 4. Two months of fixes checked against the source, and then the loop finally ran 2026-11-05

#presidio-compliance-stack 5 parts

  1. 1. Without the audit layer it was a recognizer pack with Malaysian regexes 2026-10-08
  2. 2. 879 of 1000 records, and no torn line to notice 2026-10-13
  3. 3. The hash chain verifies, and the record is still wrong 2026-10-15
  4. 4. Nine birthplace codes the registration department never published 2026-10-20
  5. 5. The half of the audit store I had never seen run 2026-10-22

#pr-compliance-gate 6 parts

  1. 1. A pull-request reviewer I built to find out whether I could 2026-09-17
  2. 2. Every investigation ended at a human, and a reducer was why 2026-09-22
  3. 3. Three read-only tools and a budget the model doesn't get to spend 2026-09-24
  4. 4. The sandbox root came out of the request body 2026-09-29
  5. 5. Three unrelated bugs, one symptom, and a fully covered test suite 2026-10-01
  6. 6. The wheel is built, audited, and parked 2026-10-06

#mcp-cassette 6 parts

  1. 1. Testing an MCP server meant paying the agent every time 2026-08-27
  2. 2. A buffered read, a greedy argparse, and one line I'm not proud of 2026-09-01
  3. 3. Four red jobs on my first CI run, and Windows was the one that passed 2026-09-03
  4. 4. Streamable HTTP by hand, and a sampling request that never arrived 2026-09-08
  5. 5. I built a test fixture and it turned out to be a supply-chain artifact 2026-09-10
  6. 6. The parameter that looked completely innocent 2026-09-15

#claude-code-command-center 10 parts

  1. 1. The monorepo I wouldn't have built before Claude Code 2026-07-07
  2. 2. I couldn't see the wall until I hit it 2026-07-14
  3. 3. Where all my tokens actually went 2026-07-21
  4. 4. CLI is all the rage, so I made one 2026-07-28
  5. 5. I couldn't tell which skill would fire 2026-08-04
  6. 6. Planning got so easy I drowned in plans 2026-08-11
  7. 7. The same file, quietly different in every repo 2026-08-13
  8. 8. Harvesting lessons from sessions I'd never reopen 2026-08-18
  9. 9. I let a copy win, and it ate my status line 2026-08-20
  10. 10. The smallest thing in here, and I forgot it was running 2026-08-25

#claude-code-html-wrapper 3 parts

  1. 1. I put Claude Code in the browser 2026-06-16
  2. 2. Three layers I refused to build 2026-06-16
  3. 3. Put any CLI in the browser: xterm.js, node-pty, and Docker 2026-06-23

#claude-code-plugin-toggler 6 parts

  1. 1. Five plugins, five round trips 2026-05-26
  2. 2. The Windows bug that came back three times 2026-06-02
  3. 3. The plugin manager I didn't write 2026-06-04
  4. 4. The plugin scope I skipped was the repo's own stance 2026-06-07
  5. 5. Teal, because of the orange 2026-06-08
  6. 6. I asked Claude what made its design look generated 2026-06-10