Personal project · 2026 — Present
AI-assisted engineering loops
Using coding agents without losing the plot
- Cursor
- Project rules
- Structured prompts
- Code review
- TypeScript
The problem
Coding agents are fast at producing plausible code and indifferent to whether it matches your conventions. Used carelessly they generate work that reviews badly and has to be redone, which is slower than not using them.
The approach
Put the constraints in the repository rather than in the prompt. Committed project rules encode the conventions an agent must follow — how feature flags are named, where analytics properties live, when to ask a human instead of guessing. Work is scoped into an explicit research, plan, then change loop, so the expensive thinking happens before any code is written.
The outcome
Agents do the mechanical work — audits, migrations, repetitive refactors — while architectural decisions stay with me. This refresh is a worked example: a read-only audit first, decisions confirmed with a human, then incremental commits against an agreed plan.
Architecture moves
- Project rules committed alongside the code, so conventions travel with the repository instead of living in someone's prompt history.
- Research and audit passes kept strictly read-only, separating diagnosis from change.
- Work sliced into reviewable commits rather than one large diff.
- Explicit escalation points where the agent must ask rather than assume — dates, titles, metrics, anything unverifiable.
Performance levers
- Parallel read-only exploration makes auditing a large codebase quick without risking changes to it.
- Verification is automated — typecheck, lint and build after each slice — so regressions surface immediately.
Engineering impact
- Mechanical work gets faster without the review burden that usually comes with generated code.
- Findings are written down, so an audit becomes a durable document rather than a chat log.
- Decisions that need a human stay with a human, which is the whole point.
Challenges conquered
- Resisting plausible-looking output that is subtly wrong, particularly invented metrics and confidently misremembered APIs.
- Keeping diffs small enough to review honestly when the tooling is happy to produce enormous ones.
- Knowing when the loop is not worth it and writing the code directly.