Three things share one name
- Using an agent to write code. Table stakes. Nearly every working developer does it. On a CV it adds nothing.
- Building agentic systems that run in production. Tool calling, retrieval, streaming, provider fallback. Real engineering, real demand.
- Setting up a codebase so agents can work in it safely. Talked about least. Not prompting better. Changing the repository so that the consequences of an agent being wrong are contained.
The problem is not that the code is bad
Where a rule belongs
| Kind of rule | Where it belongs | Why |
|---|---|---|
| Formatting, import order, naming | Linter and formatter | Deterministic, already solved, never argue about it |
| Types, null safety, unused code | Compiler and strict mode | Free, runs everywhere, no config drift |
| "Prefer this pattern", context, intent | AGENTS.md | A machine cannot check taste |
| Anything where being wrong is expensive | A CI gate that blocks the merge | This is the only category that actually holds |
What actually goes in the instructions file
The gate that mattered
What is worth gating
- Data isolation between tenants.
- Schema changes that break a client on an older version.
- Anything that writes to a payment provider.
- Deleting data without a soft-delete path.
- Secrets and credentials reaching the repository.
The one rule I would keep
What this does not solve
Where to start
- Write down the one thing that would be most expensive to get wrong. One, not a list.
- Work out whether a machine can detect it. Usually yes, and more cheaply than you expect.
- Put that check in CI where it blocks the merge, and make it apply to everyone.
- Only then write the instructions file, for the things a machine cannot check.