---
title: "Building your own tools"
url: https://www.grahambrooks.com/series/building-your-own-tools/
---

# Building your own tools

- [The release pipeline four tools kept reinventing (release-kit)](https://www.grahambrooks.com/post/release-pipeline-as-a-tool/index.md) (2026-09-27): Once you have more than a few single-user tools, the release process is a tool too. Its one user is you, and copying it into every repo is the per-repo config layer all over again. release-kit v2 moved four Rust tools onto one tag-driven pipeline, and a fix to it became a copy rather than four separate repairs.
- [Stop declaring what you can already read (myspec)](https://www.grahambrooks.com/post/stop-declaring-what-you-can-read/index.md) (2026-09-27): Once an agent's toolchain has enough moving parts (plugins, skills, MCP servers, modes, hooks), convention and hope stop being enough, and it needs the discipline of a real system: versioned migrations, deterministic gates, and one source of truth per fact. In myspec, the clearest example was a mode flag the developer had to set by hand. It drifted, and the proposed fix is to read the mode from where it already lives.
- [Letting an agent read your mail: split the reader from the network](https://www.grahambrooks.com/post/letting-an-agent-read-your-mail/index.md) (2026-09-26): An agent that reads your inbox is reading text written by strangers, so whether the model behaves is the wrong question. The useful question is what the process holding that text can do. In the twin's mail reader, the answer is enforced by the OS rather than asked for in a prompt: the one process that can see Mail can't touch the network, and the model that ranks the mail has no tools. Some things still get through, and they're worth naming.
- [Cadence is a budget line: what scheduled automation cost a private repo](https://www.grahambrooks.com/post/cadence-is-a-budget-line/index.md) (2026-09-26): My GitHub Actions budget ran out, and development CI wasn't what used it up. Automation that mostly found nothing to do spent it. In a private repository, how often a scheduled workflow wakes up is a cost decision rather than a latency decision, and automation should be designed around what each wake-up costs.
- [Building Your Own Tools](https://www.grahambrooks.com/post/building-your-own-tools/index.md) (2026-09-07): Agents made it cheap to build software. The interesting consequence isn't that you can build more of it — it's that you can build software for exactly one known user, and software with one known user gets to delete its entire configuration layer.
- [A Control Plane for a Personal GitHub Account](https://www.grahambrooks.com/post/automating-github-account-management/index.md) (2026-07-25): Running 120+ personal repositories as a self-sustaining estate: config-as-code, scheduled workflows, a deliberately non-admin GitHub App, and a bounded role for the model.
