How I build with AI
I build with AI agents every day. This is my current setup, where it falls short, what I did with AI at GitKraken, and one worked example: this site.
My setup
This is how I work now, in 2026.
- One interface: T3 Code runs several agents, mainly Claude Code and Codex.
- Claude Code is usually the primary agent. In my experience it is stronger for coding, UI, and general decisions.
- GPT reviews changes and investigations for a second perspective. I find it stronger for investigation, review, and architecture. These are my observations, not benchmarks.
- A few focused skills and a strong AGENTS.md keep output close to the stack's best practices and biased toward simplicity.
- Agents run manual end-to-end tests before each release and before my own testing. That adds to my review; it doesn't replace it.
- Grady: Sets direction and makes the callsleads to T3 Code (directs work)
- T3 Code: One interface for several agentsleads to Claude Code (builds)
- Skills + AGENTS.md: Stack best practices, bias toward simplicityleads to Claude Code (guides)
- Claude Code: Primary agent: code, UI, general decisionsleads to GPT (second opinion); leads to End-to-end tests (runs)
- GPT: Reviews changes and investigationsleads to Claude Code (findings)
- End-to-end tests: Agents test before release and before Grady doesleads to Grady reviews
- Grady reviews: Tests the product and directs UI and UXleads to Grady (decides)
- His current setup (2026), not a setup used at past employers.
- Current practice (2026).
- His own observations, not benchmarks.
Where AI falls short
UI and UX design. Agents miss details and overdesign. A smooth, consistent, trustworthy interface still needs my direction and my own testing.
So I make the design calls, and I cut anything that doesn't earn its place.
AI at GitKraken
Commit-message generation was GitKraken's most popular AI feature, with poor ratings. I started the company's first eval framework: hundreds of real commits, a human benchmark scored by developers, and LLM judges tuned to within 1–5% of the human ratings. Prompt and model changes measured that way took upvotes from 55% to 75%.
I also used agentic workflows for the product work itself: planning, working prototypes, draft implementations before handoff, and analytics.
55→75%
AI commit-message upvotes
User thumbs-up rate on generated commit messages. Shipped with engineering teams.
~4×
faster draft-to-ready planning
Approximate.
~4×
less design back-and-forth
Approximate.
Up to 2×
faster development
Approximate.
- Low ratings: Most popular AI feature, poor upvotesleads to Real commits
- Real commits: Hundreds, with diff, branch, and prior messagesleads to Four scores
- Four scores: Three-point scale, defined with developersleads to Human benchmark
- Human benchmark: Four developers scored 100 examplesleads to LLM judges (calibrate)
- LLM judges: One per score, within 1–5% of humansleads to Prompt and model (score each change)
- Prompt and model: Prior commits as context; score vs. cost and speedleads to LLM judges (until every score rises); leads to Shipped
- Shipped: Upvotes 55% → 75%
- User thumbs-up rate on generated commit messages. Shipped with engineering teams.
- Approximate.
AI in my own apps
Well Said finds quotes from a plain-language description, using embeddings, semantic search, and retrieval alongside web searches, with eval sets to measure changes. The hard part is quality: a quote can match the topic and miss the meaning. I weigh quality against cost, and the results are still imperfect.
I also built automated AI error loops that fix errors in Well Said automatically.
Song Sweeper has no AI features. I built it with Claude Code.
- Results are still imperfect. No measured cost savings or eval improvements are published for Well Said.
- Details of what triggers a loop and how fixes are reviewed and deployed aren't published.
Worked example: this site
Claude Code built this site as the primary agent. Before building, a second model reviewed the plan: GPT, which I call Sol in my setup. It caught real issues, and I decided each one:
- A kill switch based on an environment variable would need a redeploy to flip. It became a runtime flag.
- A valid citation id doesn't prove the claim is supported. I added human-reviewed evals.
- Logging full questions and uploads was a privacy risk. The chat now logs metadata plus short, redacted questions, with a notice.
- The Apple Retail column had the wrong job title.
- A headline-number rule would have forced an unverified Well Said metric onto the page.
- Visitor: A question, optionally with a documentleads to /api/chat
- /api/chat: Limits, kill switch, redacted loggingleads to Model
- Published work: Facts, metrics, sections, matrixleads to /api/chat (context)
- Model: Returns typed blocks that cite idsleads to Server validation (blocks)
- Server validation: Drops blocks with unknown idsleads to Site components
- Site components: Sections, cards, metrics, matrixleads to Visitor