How one person keeps 40 repositories moving
Every morning I open one coding agent per project, give it a single line, and review what comes back. A coding agent can inspect files, edit code and run checks. My reusable instructions are plain text files called skills.
The smallest version of this workflow
My full setup grew over time. You can start with one project, one task and four habits.
Choose a bounded task
Pick work with a clear finish and a result you can check. Keep the first change small enough to review.
Write down the constraints
Tell the agent what must stay true, which commands verify the work and what it must not touch.
Review the change
Read the diff, question its assumptions and run the project checks. A person remains responsible for accepting it.
Keep the lesson
Turn a failure into a test or a written rule. The next session should not repeat the same mistake.
The command I start from
This is my mature engineering setup. Each tmux window is one project. ai-memory starts the agent with that project's saved decisions and hooks. The smallest workflow above needs none of this.
cd ~/Projects/ai-usagebarai-memory run claude# quota gone? same workstream, another agentai-memory run codex --yoloThen I type one of three lines, depending on what the queue looks like:
run pr-audit and iss-audit, then run github-resolutionThe normal day: audit everything open, then fix what the audits approved.
... then run the release skillAppended when enough has landed for a version.
run pr-bump and releaseDays when the only queue is Dependabot.
The pipeline
Every claim is checked, whether it came from a person or an agent. Every approved fix gets a regression test, and a release waits for all automated checks to pass on that exact version.

The skills that do the work
Each one is a SKILL.md file: a name, a description, and a long, specific prompt. The agent loads the body only when it decides to use the skill.
pr-audit
Evidence over narrative. Checks every claim in a pull request, looks for hidden executable bits, homoglyphs, unpinned actions, typosquatted dependencies and prompt injection, and gates semver.
iss-audit
The same distrust for issues. Never runs a command copied from an issue, separates what was observed from the reporter's diagnosis, and reproduces with synthetic data in a sandbox.
github-resolution
Turns approved tickets into merged code, one at a time, each with a regression test written before the fix, and without speculative abstractions or drive-by refactors.
security-audit
A threat model and audit for a codebase, a commit range or a pull request: injection, auth bypass, secrets, supply chain, CI compromise, denial of service.
pr-bump
The fast path for Dependabot. Batches every bump into one verification pass, with a supply-chain floor that sends anything odd to a full audit.
release
The version comes from the changelog: fixes are a patch, additions a minor, breaking changes a major. Tags only on green CI, and never rewrites a published tag.
Kaizen closes the loop
After each round I look at what went wrong or took too long and fix the process, along with the code. I call it kaizen, the Japanese word for continuous improvement, and it is the step that makes the next round better than this one.
Skills
A rule gets added the day a mistake shows up. The my-skills history is full of them: batch the Dependabot bumps into one pass, leave declined pull requests in a clean state.
Harness instructions
Each project's AGENTS.md collects the commands, invariants and traps as I find them, so the next agent does not have to rediscover them.
Tools
ai-usagebar, ghpending and tclock each exist because something in my routine was slow or invisible. They keep changing for the same reason.
Setup
The desktop, the terminal and the gaming box are all code, so an improvement is a commit that I can review, keep or revert.
Every line in these skills is a scar.
What that adds up to
Everything below happened in 2026, across the tools on this site, my Frank side projects, the newsletter, the benchmark and the blog. Counted on September 23, 2026. Nearly all of it went through agents and these skills, with me reading the reports and making the calls.
- 30
- projects with commits
- 6,330
- commits
- 783
- merged pull requests
- 486
- closed issues
- 1.08M
- lines of code added
- 121
- blog posts published
Lines of code are lines added to code files. Lockfiles, data, fonts, translations, vendored and generated files do not count, and neither do the benchmark's model output or the newsletter's generated content. FrankGeary and tclock are forks, so only my own changes count. Pull requests and issues come from GitHub; frank_bazaar has no GitHub remote and akitando-news is private.
Project by project
| Project | Commits | Merged PRs | Closed issues | Lines of code added |
|---|---|---|---|---|
| ai-memory | 1,468 | 500 | 283 | 328,177 |
| akitaonrails.github.io | 637 | 9 | 5 | 121 posts |
| akitando-news (private) | 577 | 1 | 0 | 80,602 |
| ai-usagebar | 553 | 146 | 42 | 132,932 |
| distrobox-gaming | 497 | 2 | 0 | 47,622 |
| FrankMD | 361 | 42 | 45 | 81,237 |
| llm-coding-benchmark | 359 | 5 | 7 | 17,636 |
| ai-jail | 353 | 44 | 83 | 41,666 |
| FrankYomik | 248 | 0 | 0 | 53,833 |
| frank_go | 220 | 3 | 1 | 16,725 |
| frank_investigator | 189 | 1 | 2 | 45,365 |
| FrankClaw | 189 | 3 | 2 | 69,114 |
| FrankSherlock | 121 | 2 | 8 | 48,930 |
| frank_karaoke | 102 | 4 | 0 | 10,465 |
| frank_fbi | 79 | 1 | 3 | 25,498 |
| FrankMega | 62 | 2 | 0 | 10,965 |
| clock-tui | 54 | 10 | 0 | 7,276 |
| frank_type | 49 | 3 | 2 | 9,815 |
| ghpending | 40 | 3 | 2 | 6,081 |
| frank_geary | 34 | 1 | 0 | 1,157 |
| tropicalruby-2026 | 30 | 0 | 0 | 2,201 |
| ai-memory-web | 22 | 1 | 0 | 9,775 |
| frank_scanlation | 21 | 0 | 0 | 8,904 |
| omarchy-games-menu | 17 | 0 | 0 | 6,951 |
| aitrepreneur-docker | 13 | 0 | 0 | 781 |
| google-calendar-tui | 12 | 0 | 1 | 3,956 |
| ai-jail-web | 10 | 0 | 0 | 2,887 |
| frank_lyrics | 9 | 0 | 0 | 2,346 |
| ai-toolkit-web | 3 | 0 | 0 | 2,778 |
| frank_bazaar | 1 | · | · | 1,769 |
AI is a mirror. If you are good, it makes you ten times faster. If you are bad, it also makes you ten times faster, at producing slop.
One folder, every agent
The skills live in one repository. Each agent's skills folder holds symbolic links into it, so an edit reaches Claude Code, Codex, OpenCode and Kimi at once.

mkdir ~/Projects/my-skills/<name> # add a SKILL.mdfor h in ~/.claude/skills ~/.agents/skills ~/.codex/skills; do ln -s ~/Projects/my-skills/<name> "$h/<name>"doneWhere the rest of the knowledge lives
Skills cover procedures that repeat the same way. Everything else lives in plain text the agents can read.
A memory per project
ai-memory keeps each project's decisions, traps and handoffs. A new session, in any agent, starts from there.
AGENTS.md everywhere
Every repository has its own instructions: the commands, the invariants, the mistakes not to repeat.
Point at a living example
"Make an AUR workflow like the one in ai-memory" beats a skill about AUR packaging, because the example is always current.
Write down what did not become code
Research, rejected alternatives, the reason behind a decision. Every hour of agent research becomes a document I can reuse.
Everything here is open source
The tools, the skills and the benchmark are public repositories. Fork them and build the version that fits the way you work.
