GitHub - AmazingAng/old-coder: An old coder's strategy for the agent era: don't read the code — make it run the gauntlet. Evidence-first development skill for coding agents, inspired by Uncle Bob. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search/
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
AmazingAng
old-coder
Public
Notifications<br>You must be signed in to change notification settings
Fork<br>46
Star<br>608
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>52 Commits<br>52 Commits
.github/workflows
.github/workflows
assets
assets
demo-rate-limiter
demo-rate-limiter
skills/old-coder
skills/old-coder
.gitignore
.gitignore
CONTRIBUTING.md
CONTRIBUTING.md
LICENSE
LICENSE
README-zh.md
README-zh.md
README.md
README.md
View all files
Repository files navigation
Old Coder skill(老码农 skill)
中文说明 →
An old coder's strategy for the agent era: don't read the code — make it run the gauntlet.
A skill that makes coding agents prove their work . Instead of you reading every line the agent writes, the agent must push its code through a gauntlet of checks — and hand you a test plan before coding and an evidence report after. You review those two documents, not the code.
It's plain markdown, so it works with any coding agent that follows instructions: Claude Code, Codex CLI, Cursor, Aider, or your own agent loop.
Installation
npx skills add https://github.com/amazingang/old-coder
Or manually:
Claude Code — copy the skill into a skills folder, then invoke /old-coder or let it trigger on "prove it works"-style requests:<br>/.claude/skills/">cp -r skills/old-coder ~/.claude/skills/ # or /.claude/skills/
Other agents — add skills/old-coder/SKILL.md to your AGENTS.md, rules file, or system prompt, and keep references/gauntlet.md alongside it.
The idea
From Uncle Bob (Robert C. Martin), on working with coding agents (original tweet):
My current strategy is to not read any of the code written by my agents. That’s the only way I can take advantage of their productivity. What I do instead is to surround the agents with extreme constraints. Unit tests, gherkin tests, QA procedures, quality metrics, mutation testing, test coverage, and a plethora of others. In the end, I have very high confidence in the code they produce because they’ve had to run the gauntlet of all of my constraints and tests.
If you're not going to read the code, the things you do read have to carry the trust instead.
How it works
agent writes a test plan,you approve it\"]\n RED[\"🔴 REDwrite a test,watch it fail\"]\n GREEN[\"🟢 GREENwrite code untilit passes\"]\n REF[\"🧹 REFACTORclean up,tests untouched\"]\n G[\"🛡️ GAUNTLETrun every check\"]\n EV[\"📊 EVIDENCEyou read the report,not the code\"]\n SPEC --> RED --> GREEN --> REF --> G --> EV\n REF -. next behavior .-> RED\n"}" data-plain="flowchart LR<br>SPEC["📋 SPECagent writes a test plan,you approve it"]<br>RED["🔴 REDwrite a test,watch it fail"]<br>GREEN["🟢 GREENwrite code untilit passes"]<br>REF["🧹 REFACTORclean up,tests untouched"]<br>G["🛡️ GAUNTLETrun every check"]<br>EV["📊 EVIDENCEyou read the report,not the code"]<br>SPEC --> RED --> GREEN --> REF --> G --> EV<br>REF -. next behavior .-> RED<br>" dir="auto">
flowchart LR<br>SPEC["📋 SPECagent writes a test plan,you approve it"]<br>RED["🔴 REDwrite a test,watch it fail"]<br>GREEN["🟢 GREENwrite code untilit passes"]<br>REF["🧹 REFACTORclean up,tests untouched"]<br>G["🛡️ GAUNTLETrun every check"]<br>EV["📊 EVIDENCEyou read the report,not the code"]<br>SPEC --> RED --> GREEN --> REF --> G --> EV<br>REF -. next behavior .-> RED
Loading
You read two documents:
SPEC (before any code) — concrete examples of what the code must and must not do, plus which tools the agent wants to install. Approving it is the single yes/no you give.
EVIDENCE (after the code) — real numbers from one final fresh run, rerunnable yourself with a single command.
The gauntlet in between:
Check<br>The question it answers
Full test suite<br>Did anything break?
Types + lint + complexity<br>Any obvious mistakes? Any unreadable tangles?
Changed-line coverage<br>Is every new line actually exercised by a test?
Mutation testing<br>Plant bugs on purpose — do the tests catch them?
Property-based tests<br>Do the rules survive hundreds of random inputs?
Real execution<br>Does it actually run, outside the test harness?
Supply chain & secrets<br>Did the agent quietly pull in risky packages, or leak a key?
Suite health<br>Are the tests themselves stable, in any order?
Plus a menu of domain-specific layers — concurrency, UI checks, API compatibility, performance, observability — picked per task from a risk model (see references/gauntlet.md).
Effort scales with risk: a...