Paul Wade
Full stack engineer. I build products and measure how coding agents behave.
Latest writing
All posts- Obstacle 10Do PreToolUse lint gates cover your subagents?Settings hooks fire on subagent tool calls. The payload gets agent_id and agent_type and keeps the main transcript_path. Includes a synthetic repro, the bug report that started it, and what the repro can't prove.14 min readGrab the flag
- Obstacle 9One terminal, 10+ Claude Code agents, and a difit gate before every PRHow I run 10+ Claude Code agents from one orchestrator session with native cross-session messaging, and review every change, PR reply, and new issue in a customized difit fork before anything reaches GitHub.8 min read
- Obstacle 8Writing an ESLint rule that can refuse an agent's writeWrite a custom ESLint rule an agent can't dodge, test it with RuleTester, and run it in a PreToolUse hook that refuses the write. Real code and output.34 min read
- Obstacle 7Zod in NestJS without a custom pipe: StandardSchemaValidationPipe as the gateNestJS 12 validates Zod bodies with a built-in pipe. Wire it next to ValidationPipe, migrate one route at a time, and know what the handler receives.6 min read
- Obstacle 6PreToolUse vs PostToolUse: which hook actually stops an agent copying bad codeSame ESLint config, two Claude Code hooks. Post-write lint let 4/35 seeded copies through; a PreToolUse gate that refused the edit held at 0/35.7 min read
- Obstacle 5Validation is a gate, not a vibeRefuse bad HTTP input with ValidationPipe or Zod before the service runs. Trusting body shape inside the use case is guidance, not a gate.6 min read
Selected work
- Precedent poisoning
Experiment showing coding agents copy bad patterns from nearby files. A pre-write lint gate stopped that; a conventions file alone did not.
GitHub - checkyourvibe
Standards checks for agent-written code. Same input gets the same pass/fail every time.
- StorageFlow
Self-storage SaaS for leases, billing, and day-to-day operator work (private product repo).