How to Roll Out Coding Agents to an Engineering Team
Six copyable artifacts for rolling out coding agents to a dev team: review rule, AGENTS.md, handoff, controls, pilot log, and gh baselines. Vendor-neutral.
In this post
- How do you roll out coding agents to an engineering team?
- What should you do before writing any of it?
- What is the review rule?
- What goes in the team instructions file?
- What does a handoff template look like?
- What controls should you require?
- How do you baseline PR review time and throughput?
- What belongs in the pilot log?
- What should you not do?
- What to do this week
TL;DR: You roll out coding agents with six written artifacts, in order: a review rule, a team instructions file, a handoff template, a controls checklist, baselines pulled from your existing PR history, and a pilot log. Each one below is a copyable template, labeled illustrative, with the commands tested. None of it depends on which vendor you pick. You can do all of it yourself in a couple of weeks.
How do you roll out coding agents to an engineering team?
Write six things down before you scale anything: the review rule, the instructions file, the handoff template, the controls checklist, your baselines, and the pilot log format. Order matters, because each one constrains the next. A review rule decides what “done” means. The instructions file decides what every session starts from. The controls decide what an agent can touch, the baselines give the pilot a number to beat, and the pilot log tells you whether it did.
I’m not going to describe the role that would own this or the week-by-week sequence. That’s in what a fractional Chief AI Officer does for dev teams, including the 30-day plan. This post is the other half: the actual text and commands, so a team can do it with or without hiring anyone.
Every template here is illustrative: a starting shape to edit, not a policy I’m claiming a client runs.
What should you do before writing any of it?
Take an inventory first: every AI tool each engineer uses, on which repos, with what access, on one page. You can’t write a standard for tools you don’t know exist.
What is the review rule?
The review rule is the policy that agents work on branches, never main, and a human reviews and merges. It comes first because it’s the cheapest artifact and it blocks the costliest failure: agent code that looks right and isn’t. I made the case for that in my daily agentic workflow, where the rule is “treat agent sessions like junior engineers’ branches, with the same review discipline.”
Here is a version a team can paste into its handbook (illustrative):
Agent code review policy
Agents work on branches, never on main.
A human engineer reviews the change and merges it:
the tests always, the diff where the risk is (auth,
data, money). The author of record is the human
who started the session.
Three sentences is the right length. A longer policy gets skimmed, and a policy nobody remembers can’t be enforced. Back it with branch protection on main so the rule holds on the day someone is in a hurry.
What goes in the team instructions file?
An AGENTS.md at the repo root, kept short, that routes the agent to detail instead of containing it. Use AGENTS.md, not a vendor-specific name: agents.md lists Codex, Cursor, Gemini CLI, Aider, opencode, Zed, Warp and others as tools that read it.
Copy the structure from Omarchy’s AGENTS.md: a router that points at task guides instead of trying to be the whole manual. Here’s a skeleton with one example line per heading (illustrative):
# AGENTS.md
## Task guides
- Adding an endpoint: read docs/agents/endpoints.md
## Commands
- Test: mix test
## Conventions
- Match the pattern in the nearest existing module.
## Boundaries
- Never edit .env files or deploy to production.
## Review
- Work on a branch. A human merges.
For Claude Code, add a CLAUDE.md containing one line, the same pointer Omarchy uses (illustrative):
@AGENTS.md
Start with these five headings and add a line only when something goes wrong once, the rule I landed on in what I put in CLAUDE.md after 50 commits. A file that grows speculatively gets ignored the same way an over-long policy does.
What does a handoff template look like?
It’s a one-paragraph curated context dump, written by a human, that you paste into the next session when one agent’s work feeds another’s. In my workflow post the example is an audit agent that finds 14 places missing retry logic. I pick the 6 worth fixing and write a paragraph for a fresh implementation session. That session never sees the original audit, only the curated context. The point is that you are the context router, so the template forces you to do the routing instead of trusting an agent to guess.
Fill-in version (illustrative):
Handoff
Goal: [one sentence, the outcome]
Scope: [the exact files or functions in play]
Out of scope: [what not to touch]
Approach: [the pattern, limits, logging to use]
Match: [path/to/a/file/that/does-it-right]
Done when: [tests passing, a human reviews the diff]
The “Match” line is the cheapest quality lever in the template. Pointing at a real file in the repo beats describing the style in prose. When two engineers’ handoffs look alike, the team’s output starts to look alike, and that’s what makes review tractable.
What controls should you require?
Three categories: permissions a developer can’t override, an allowlist of MCP servers, and an audit trail. Enforcement is the part teams get wrong. A setting a developer can edit locally is a suggestion. A control is a setting a lower level can’t override, plus evidence that it was applied.
Illustrative checklist:
Controls checklist
[ ] Permissions: deny rules set at a level
the developer cannot override
[ ] Approval-skipping modes disabled
[ ] MCP servers: allowlist only, with an approver
and a date per server
[ ] Audit trail: tool calls logged somewhere the
developer cannot edit
[ ] One page a customer's security reviewer can read
Claude Code is the harness I’ve documented, and it maps cleanly: its managed settings apply above every other level. The control-by-control map, with the criteria and the evidence an auditor samples, is in the Claude Code SOC 2 evidence post, and I won’t repeat it here.
For any other harness, find where it enforces permissions, restricts MCP servers and logs tool calls, and write down any it can’t do yet as a gap.
For guardrails that run inside the session, hooks are the mechanism; four Claude Code hooks covers the mechanics.
How do you baseline PR review time and throughput?
Pull them from the PR history you already have, using the
gh CLI, before the pilot starts, so you have something to
compare against. Three measures are enough: PR review time, PRs merged
per week, and tickets closed. The first two come from GitHub. Tickets
closed comes from your tracker, so export it from there with the same
date range.
I’m deliberately not publishing numbers from any repo. The commands
are the artifact. I ran each of the three commands below against a real
repository with gh 2.102.0 and checked the output against
an independent calculation.
Median hours from PR creation to merge, over the last 100 merged PRs:
gh pr list --state merged --limit 100 \
--json createdAt,mergedAt \
--jq '[.[] | (.mergedAt|fromdate)
- (.createdAt|fromdate)]
| sort | .[length/2|floor] / 3600'Median hours from creation to first human review, skipping the author’s own reviews and review bots:
gh pr list --state merged --limit 100 \
--json createdAt,author,reviews \
--jq '[.[] | .author.login as $a
| .createdAt as $c
| [.reviews[] | .author.login as $r
| select($r != $a)
| select($r | test("bot|cursor";"i")
| not)
| .submittedAt]
| select(length>0)
| (min|fromdate) - ($c|fromdate)]
| if length==0 then "no human reviews"
else sort | .[length/2|floor] / 3600
end'PRs merged per week, bucketed by ISO week in UTC:
gh pr list --state merged --limit 200 \
--json mergedAt \
--jq '[.[] | .mergedAt | fromdate
| strftime("%G-W%V")]
| group_by(.)
| .[] | "\(.[0])\t\(length)"'Five caveats. Add your own review bots’ logins to the
test() filter, or the review-time command measures the bot
instead of your team. On an even count, both median commands take the
upper of the two middle values, which is close enough for a baseline.
Weeks with zero merges don’t appear in the output, so read a gap as
zero. --limit caps how far back you see, so raise it or add
--search "merged:>=2026-07-01" (also tested). The
first-review command only counts PRs with a human review, which on a
team that self-merges small changes may be a short list. That’s a
finding worth having before the rollout.
What belongs in the pilot log?
A table with five columns: date, agent, task, what went wrong, and the fix or rule change. Whoever pilots the standard fills it in on real work. The last column is what makes it useful, because it turns every failure into either a line in AGENTS.md, a tighter handoff or a control, or an explicit “just a bad run.”
Illustrative format, with example rows to show the shape:
| Date | Agent | Task | What went wrong | Fix or rule change |
|---|---|---|---|---|
| YYYY-MM-DD | (tool/model) | Add retry to client | Edited a file outside scope | Add “Out of scope” to handoff |
| YYYY-MM-DD | (tool/model) | Refactor helper | Tests passed, behavior changed | Add a behavior test; read diffs that touch it |
Those two rows are placeholders for the shape, not data. My own ratio for an adversarial review agent is roughly 60 to 70 percent of findings dismissed as noise; you learn yours only by writing the misses down. I made the underlying argument in agents don’t need prompts, they need managers: the queue, reviewer and memory a new hire arrives wrapped in are things you have to build for an agent, and the log is how you notice which ones are missing.
What should you not do?
Don’t buy seats before the review rule exists. Seats are the easy, visible step, and they put agent output into your repo before anyone has decided who reads it. The rule is three sentences and one branch protection setting.
Don’t pick a vendor as the standard. My read is that Codex and Claude Code keep trading the top spot. Of the six artifacts, only the controls depend on the harness, so let the team choose it.
Don’t make an AI reviewer your first gate. Put contract tests, post-deploy outcome checks and required CI under it first. Before you add an AI reviewer, add these checks covers which ones and why.
Don’t measure seats or prompts. They count spend and activity, not output, which is why the baselines above come from your PR history.
What to do this week
Paste the review rule into your handbook, turn on branch protection,
and put the AGENTS.md skeleton in one repo. Then run the three
gh commands and save the output, so whatever you change
next has a number to beat.
If you’d rather have someone run it with you, that’s the Fractional Chief AI Officer engagement. It’s a new offer, so there are no client stories here, only the practice and templates above.
Read this next: my daily agentic workflow, the practice the review rule and the handoff template come from.