Skip to main content
COOKIE NOTICECOOKIE CHOICE

We use cookies for analytics (Google Analytics) and ad measurement (Google Ads, including remarketing, and ChatGPT Ads by OpenAI). Strictly necessary cookies keep the site working. See our Cookie Policy for what each one does and how to opt out.

We’d like to use cookies for analytics (Google Analytics) and ad measurement (Google Ads, including remarketing, and ChatGPT Ads by OpenAI), and none of them is set unless you accept. Cookie Policy

Learn · AI Governance

Should a Coding Agent Deploy to Production?

Usually not — and the reason has nothing to do with how good the model is. Writing a change and releasing it are two different entitlements that happen to sit with the same engineer. Handing the work to an agent is the first good opportunity most teams have had to separate them, and most should take it.

The sentence the page rests on. A human holding both rights is a risk your controls already tolerate, because a person pauses, notices, and can be asked why afterwards. None of those three properties transfer with the permission.

LLM03Excessive Agency, OWASP LLM Top 10 2026
CC8.1where deployment authority is tested
300+SOC 2 engagements supported by TCSA

Plain-English explainer · 2017 TSC with revised 2022 points of focus · OWASP Top 10 for LLM Applications 2026 · Last reviewed August 2026

In almost every case, no — not because the agent is untrustworthy, but because the two rights involved should never have been welded together in the first place. The agent proposes, the pipeline gates, a human approves. Where an agent does release to production, it should be inside a narrow, pre-agreed class of change, behind a soak window with automatic rollback, using a credential it never holds. This is the sharpest instance of the delegation problem, because it is the one where the inherited-entitlement argument sounds most reasonable. An engineer may deploy. The agent works on that engineer’s behalf. Therefore the agent may deploy. The step that does not survive inspection is the middle one. What made the engineer’s entitlement acceptable was never the entitlement itself — it was the pause before acting, the fact that instructions arrive from known people rather than from a changelog, and the existence of a named person to ask afterwards. Grant the same permission to an agent and you keep the capability while dropping all three. Everything below is about putting equivalents back, deliberately, in places you can evidence.

Key Takeaways

  • Human entitlement does not automatically justify identical agent entitlement. The right to author a change and the right to release it are separable, and separating them costs a team far less than most expect.
  • Four properties change when the actor is an agent: the pause between deciding and doing disappears, tool calls chain so an early error is carried by everything downstream, the instruction channel now includes untrusted content, and reversibility is assumed rather than classified.
  • The default that survives a security review is agent proposes, pipeline gates, human approves — with the deployment credential minted per run by the pipeline and never held in the agent’s environment.
  • Autonomy below the production boundary is where agents pay for themselves. Grant it freely to environments with synthetic data, and check that claim, because a seeded copy of production is a production environment with a friendlier name.
  • A gate the agent can edit is not a gate. Pipeline definitions, policy files, IAM configuration and the test suite belong on protected paths outside the agent’s writable scope, with human code-owner review.
  • The auditor’s population is production deployments, not agent sessions. If your deployment record cannot identify the initiating principal and link it to an approver and an artefact hash, the control cannot be tested however well it is designed.
The delegation problem

What actually changes when the actor is an agent

The permission is identical. The seven properties around it are not, and each one has a specific control implication rather than a general warning. Read the third column as a design brief: it is the list of things you have to put back deliberately, because they used to arrive for free with the human.

PropertyWith a human holding the rightWith an agent holding itWhat you must put back
The pause between deciding and doingMinutes or hours pass between writing a change and releasing it. The gap is not itself a control, but it is where doubt arrives — a second reading, a colleague glancing at the diff, the decision to wait until morning.The interval collapses to seconds. Nothing in the sequence is wrong. There is simply no longer any point in it at which hesitation can occur, and no natural moment where a second person happens to be present.Reintroduce the interval deliberately, as a gate with a named approver or a soak window the pipeline enforces. Speed you did not choose is not a feature you designed.
ChainingOne action at a time, each preceded by its own decision to take it.A single instruction expands into a sequence of tool calls that edit, commit, open, merge, deploy and verify. A wrong premise in step two is carried by steps three through nine before anyone has read step one.Cap the sequence at a boundary the agent cannot cross unaided. The natural boundary is the promotion between environments, because it is already instrumented.
The instruction channelAn engineer takes instructions from people they know, through channels that carry identities and consequences.An agent reads issue text, code comments, dependency changelogs, test output, web pages and tool responses, and models do not reliably separate content from instruction. An injected instruction that reaches a deploying agent has reached production.Deployment authority must not sit downstream of untrusted content. If the same session can both read the internet and release software, the release path inherits everything the session read.
AttributionA named individual, an employment relationship, and someone you can ask afterwards.Actions arrive under a service principal, frequently shared across sessions, tasks and people. Without a delegation record and a session identifier on the event, the log shows what was done and not on whose behalf.One identity per agent per environment, and the requesting human recorded on every privileged action. Attribution is a design decision, not a log setting.
Error correlationMistakes are individual and scattered, which is why sampling works on them.The same flawed pattern is applied consistently everywhere it fits. A systematic defect deployed to twelve services is not twelve independent incidents, and the second one does not warn you about the third.Bound the blast radius per change and per session: one service at a time, staged traffic, and a limit on how many production deployments one session may initiate.
The rollback assumptionAn engineer usually knows which of their own changes can be undone by redeploying the previous build and which cannot.Reversibility is a property of the change rather than of the pipeline, and it is precisely the property least visible in a diff. A dropped column, a consumed migration, a rotated key or a webhook re-registered with a third party all redeploy cleanly and do not come back.Classify every change by reversibility at the gate, and route the irreversible ones down a different approval path with a rehearsed restore behind it.
Review capacityThe volume of change is bounded by how fast people can write it.Volume rises faster than review capacity, and all of that pressure lands on the single control everyone is relying on. A gate that is real at four changes a day is ceremony at forty.Measure approval latency and diff size at the moment of approval. A gate nobody has time to read has already failed, whatever the configuration page says.

The third row is the one that changes the shape of the argument rather than its magnitude. Everything else on this list is a matter of degree — faster, more of it, harder to attribute. But an agent that reads issue text, dependency notes, test output and web pages has an input channel that an engineer does not have, and content arriving through it can be written by someone else. If that same session can release software, then an instruction embedded in a changelog has a path to production. This is what the prompt injection and tool calls problem looks like once it acquires deployment rights, and it is the reason the separation below is architectural rather than procedural.

It is also the reason this topic sits where it does in the current risk literature. The OWASP Top 10 for LLM Applications 2026, published in August 2026, moved Excessive Agency to LLM03:2026 from sixth place in the previous edition — the largest single upward move in that revision — and breaks it into three root causes worth borrowing as vocabulary: excessive functionality (where the agent can reach tools beyond its task), excessive permissions (where those tools operate with more privilege than the task needs) and excessive autonomy (where high-impact actions proceed without a human in the loop). Deployment rights are the case where all three converge.

The options

Six models, and where each one breaks

These are not maturity levels to climb. They are different placements of the same decision, and a mature organisation runs several at once — full autonomy in preview environments, a pre-approved class for dependency bumps, and human approval on anything touching customer data. Read the failure column before the fit column.

ModelWhere authority sitsWhere it fitsHow it failsWhat it must evidence
Agent proposes, pipeline gates, human approvesAuthority stays with the approving human. The agent holds authorship rights only, and the pipeline holds the deployment credential.Almost everyone, and every regulated or customer-data workload. It is the default we recommend and the one easiest to explain in a security review.When approval becomes a formality. Forty machine-authored changes a day against one reviewer produces a rubber stamp with a timestamp, which tests worse than no gate at all because your description promises review.Approval events with distinct author and approver identities, artefact hashes matching what deployed, and a measurable approval latency and diff size.
Agent deploys to lower environments onlyFull autonomy below the production boundary. No production identity exists in the agent’s environment at all.Development and preview environments with synthetic data. This is where agent autonomy pays for itself and where almost nobody objects.When the lower environment holds production data, shares a network path or an account with production, or when its deploy identity has been granted a role that can assume a production role.The role trust policy and permission set for the agent identity, evidence that the environments are separated, and a data-classification statement for what the lower environment holds.
Agent deploys to production behind a mandatory soak and automatic rollbackAuthority is delegated to a rule agreed in advance: the change ships, and the pipeline — not a person and not the agent — decides within a fixed window whether it stays.High-frequency, low-variance changes on services with strong signals, mature observability and an already-rehearsed rollback.When the failure is silent to the chosen signals — data corruption, a permissions widening, a slow leak — or when rollback needs the same pipeline the bad change broke. The soak protects availability far better than it protects integrity or confidentiality.The soak configuration under version control, the signal thresholds, every automatic rollback that fired with its trigger, and a rehearsed manual rollback with elapsed time recorded.
Agent deploys within a pre-approved change classA human approved the class once, in advance, and the pipeline verifies each change belongs to it. Anything failing the classifier falls back to individual approval.Narrow, machine-checkable categories — patch-level dependency bumps with no interface change, configuration values drawn from an allowlist, content or copy edits behind a flag.Class creep. The definition widens by a pull request nobody read closely, and six weeks later "configuration" includes the feature flag that controls authentication.The class definition with its own change history and approvals, the classifier logic, and a sample of deployments reconciled to the class they claimed.
Agent executes a human-authored release planA human decides and initiates. The agent performs the steps and reports. Authority and execution are separated in the direction that matters.Complex releases and incident recovery, where the value of the agent is accuracy and speed of execution rather than judgement.When the plan is generated by the same agent that executes it, which restores the collapse it was meant to prevent. The plan must be reviewed as a document before it is run as a script.The approved plan, the execution log showing each step and its outcome, and the human initiation event with a timestamp preceding the first action.
Review-only assistant, no write rights at allNothing is delegated. The agent reads, comments and drafts. Humans do everything else.Regulated workloads mid-examination, an unresolved buyer objection, or the first eight weeks of any agent programme while you find out how it behaves.Only commercially. It forgoes most of the benefit, and teams under delivery pressure quietly widen it without changing the policy that describes it — which is how a control ends up describing something that stopped happening.The permission assignment at in-period dates and the absence of the agent identity from the deployment population.

One distinction is worth pulling out of the third row, because it is regularly overstated. A soak with automatic rollback is a strong availability control and a weak integrity or confidentiality control. It notices that error rates rose, but it does not notice that a permission was widened, that a field is now being written to the wrong table, or that records were quietly corrupted in a way that will surface in a reconciliation next month. If the change touches authorisation logic, data schemas or anything under the Confidentiality category, the soak is not the control that should be carrying the decision.

Worked pipeline design

Nine stages, one of them human

A concrete design for the default model. The numbers below — five per cent, ten minutes, thirty minutes — are illustrative and should be replaced with figures your own signals justify. What is not negotiable is the shape: the agent never holds a production credential, the pipeline performs the merge, and the artefact that is approved is the artefact that deploys.

StageStepActorWhat must hold
S0RequestHumanA person asks for the change in a system that keeps a record. The request text becomes the declared intent that S3 will test the diff against, which is the whole reason for insisting the request exist in writing.
S1WorkAgentThe agent works on a non-protected branch under its own machine identity, with repository write scoped to the repositories named in the task. It holds no production credential and no ability to reach the protected paths.
S2ProposeAgentA pull request is opened carrying the requesting human, the session identifier, the tools invoked and a plain statement of what changed. Machine-authored changes are labelled when they are opened, not discovered at review.
S3Build and checkPipelineTests against this artefact, dependency resolution through a private proxy, secret and vulnerability scanning, protected-path check, diff-scope check against S0, and reversibility classification. The artefact is content-addressed, so what is approved is what deploys.
S4ApproveHuman, not the authorA named person other than the requester where the team is large enough to allow it, approving a specific artefact hash rather than a branch. The approval expires — a stale approval on a moving branch is the oldest bypass in change management.
S5Merge and mintPipelineThe pipeline performs the merge and mints a deployment credential for this run, scoped to one service and expiring in minutes. Neither the agent nor the approver ever holds a production credential.
S6CanaryPipelineFive per cent of traffic for ten minutes against signals named in advance: error rate, latency at the 95th percentile, and one business signal the team genuinely watches. Breach reverts automatically and notifies the requester.
S7SoakPipelineFull rollout with a thirty-minute observation window, automatic rollback on breach, and a hard stop preventing a second deployment to the same service while a soak is running. The stop is what contains a session that has begun repeating a mistake.
S8RecordPipelineOne deployment record links artefact hash, commit, requester, approver, agent identity, session, soak outcome and any rollback. This record is the population the auditor will sample, so it is worth designing before fieldwork asks for it.

Three properties of this design do most of the work, and each is worth defending in a review. The first is that the credential is minted, not held. If the agent’s environment contains no production credential, then the entire question of what the agent might do to production reduces to what the pipeline will let through, and the pipeline is a thing you can read, version and test. The second is that approval binds to an artefact hash, not to a branch. An approval attached to a moving branch is the oldest bypass in change management and it predates agents by decades. It simply becomes much easier to hit when commits arrive in seconds. The third is the concurrency stop at S7, which is unglamorous and is what turns a systematic error into one incident rather than four.

Note what is deliberately absent. There is no stage where a human reads the agent’s reasoning, and no control that depends on interpreting a transcript. A transcript is useful for investigation and close to useless as evidence: it is not system-generated in the sense an auditor means, there is no complete population of them, and its retention is usually a vendor setting nobody has checked. Build the controls around artefacts the pipeline produces, and treat the transcript as context rather than proof.

The gate

What it must verify, and how each check fails open

A gate is only as good as its weakest bypass, and gates fail open far more often than they fail closed. The right-hand column is the one to design against — it is where the findings come from, and every entry in it is something we have watched happen in a real pipeline that looked correct on the configuration page.

CheckWhat it provesHow it fails open
Provenance and delegationWhich agent produced this change, in which session, at whose request, and under what declared intent — carried through the build to the deployment record.The pipeline records only the service account. Every machine-authored change becomes one anonymous actor, and the log answers what happened but never on whose behalf.
Diff scope against declared intentThe change is the change that was asked for: paths within an allowlist, file and line counts within a bound, no unrelated files carried along.The bound is advisory, or a single broad label suppresses it. A refactor flag that switches off scope checking is a gate with a documented bypass.
Protected paths untouchedThe change does not modify the pipeline definition, the policy files, IAM configuration, the test suite that gates it, or the observability rules the soak depends on.The check is defined inside the same file the change is allowed to edit. Enforce it from a definition the proposed change cannot reach, or the first thing a bad change learns to do is widen its own permission.
Non-author human approvalA person other than the change’s author accepted this specific artefact before it moved.The platform cannot distinguish a machine approver, administrators can bypass the rule, or the approver is the same person who instructed the agent — an approval of their own request wearing two hats.
Reversibility classificationSomebody decided whether redeploying the previous artefact restores prior behaviour, and the answer travelled with the change.Migrations ride along inside an ordinary application deployment. The pipeline reports success, rollback reports success, and the column is still gone.
Test and dependency evidenceTests ran against this artefact, dependency and secret scanning passed, and every newly added package exists, resolves from your own proxy, and is the one intended.The agent can edit the tests in the same change it is being tested by. Require human review on test-file paths, or the suite becomes a description of whatever was written last.
Blast-radius boundThis deployment touches one service, a defined share of traffic, and counts against a limit on how many production deployments a single session may initiate.The canary percentage and the session limit are configuration the agent can also change. A limit inside the blast radius is not a limit.
Credential mintingThe deployment credential was issued to the pipeline for this run, scoped to this service, expiring in minutes — never held in the agent’s environment.A long-lived deploy key sits in the agent’s configuration. Every other control on this list is then advisory, because the agent can reach production without passing any of them.
Soak and automatic rollbackThe release is observed against named signals for a defined window and reverts without waiting for a human to notice.Rollback depends on the pipeline the bad change broke, or on a signal that is only collected during business hours. A rollback path that has never been exercised is a plan, not a control.

The dependency check deserves a note of its own, because it is the one genuinely new item on the list. Machine-authored changes introduce package names that do not exist, or that exist and are not the package intended — a failure mode with no human analogue at scale. Resolving every dependency through a private proxy, requiring that new packages be approved rather than merely resolvable, and pinning by digest turns that from a review problem into a build failure. More on the shape of these defects in reviewing AI-generated code, and on the credential question in coding agents and secrets.

Concentrated authority

Segregation of duties inside one actor

Segregation of duties splits three incompatible functions: authorising that something should happen, executing it, and recording or reviewing that it happened as intended. An agent that writes a change, merges it and deploys it holds all three, and holds them inside a single principal with no internal friction between them. The usual objection — that segregation of duties is a control over people, and an agent is not a person — gets the concept backwards. The controls exist because concentrating those functions in one actor removes the point at which an error or a manipulation would have been caught. The actor’s nature was never the reason.

The criteria contemplate this more directly than teams expect. The point of focus under CC5.1 reads: “Management segregates incompatible duties and, where such segregation is not practical, management selects and develops alternative control activities.” Alternatives are permitted. Absence is not. And a point of focus under CC8.1 speaks to this exact case in its own words, referring to a process for implementing system changes “with consideration of segregation of responsibilities (for example, restricting unilateral code development or testing and implementation by a single user) to prevent or detect unauthorized changes”. An agent that authors and ships without a second party is unilateral development and implementation by a single user. The parenthetical was written about humans and applies without strain.

As with a small team, you do not have to break all three functions apart. You have to break the chain reliably at one point, and the highest-value point is between authoring and releasing, because it is already instrumented, already understood by every engineer, and already tested by every auditor who has ever sampled a change. That is the entire design argument for the default model, and it is why it reads as ordinary change management rather than as an AI policy — which is exactly how you want it to read in a customer security review.

Where this lands across the frameworks

Under the 2017 Trust Services Criteria (with revised 2022 points of focus), an agent in the change path is tested under CC8.1 for change authorisation, approval and deployment. It is tested under CC6.2 and CC6.3 for how the machine identity was registered, authorised and reviewed, and under CC5.1 and CC5.2 for the control activities and the technology general controls that enforce them. And it is tested under CC7.2 and CC7.4 for monitoring and incident response when something reaches production that should not have. A SOC 2 report is an attestation under AT-C 205, performed by a licensed CPA firm — there is no SOC 2 certificate, and no criterion mentions artificial intelligence. That is not a gap. The criteria are technology-neutral by design, and your agent is examined as part of the system you described.

Under ISO/IEC 27001:2022, the relevant Annex A controls are 5.3 segregation of duties, 8.2 privileged access rights, 8.31 separation of development, test and production environments, and 8.32 change management. Under NIST SP 800-53 Rev. 5, the closest fits are CM-3 configuration change control, CM-5 access restrictions for change, AC-5 separation of duties and AC-6 least privilege. And ISO/IEC 42001:2023 — an AI management system standard, certifiable by an accredited certification body, and a different animal from an attestation — is where the decision itself gets governed: the impact assessment for the use case, the human-oversight arrangements, the record of what was delegated and on what basis, and the review of whether the arrangement still holds. TCSA advises, implements and coordinates across all of these. The opinion belongs to the CPA firm and the certificate to the certification body.

Worked example

Eleven minutes, four services

An illustrative composite, not a client. Read the second and third rows together: the incident was decided three weeks before it happened, by a role grant nobody scheduled to remove.

Baseline6 Mar 2026A fifty-five person infrastructure-software company, Type 2 observation period running 1 February to 31 July 2026, Security and Availability categories. Coding agents are in daily use and hold deploy rights to staging only. This works well for six weeks and produces no incidents.
The widening21 Apr 2026Ahead of a customer deadline, an engineer adds the agent identity to the production deployer role so a release can be cut without waiting for an approver in another timezone. It is described in chat as temporary. No expiry is set, and the change is made by the same engineer who operates the agent.
The request12 May, 14:02The agent is asked to fix a failing checkout test and get the fix out. It reads the failure, patches the handler, opens a pull request, watches CI turn green, merges — because holding write to the release branch was part of the same role — and deploys. Elapsed time from instruction to production: eleven minutes.
The defect12 May, 14:13The patch relaxed an idempotency check to make the test deterministic, and the same change had been applied consistently to three sibling services in the same session. Duplicate charge attempts begin to appear across four services at once.
The rollback that was not12 May, 14:26On-call redeploys the previous artefact. Behaviour does not return, because the change set had also carried a migration that dropped a now-unused column, and the previous build reads it. The pipeline reports a successful rollback throughout.
Recovery12 May, 14:41The column is restored from backup and the services are healthy. Thirty-nine minutes of degraded payment handling, and a reconciliation exercise for duplicate attempts that ran for two more days.
The findings15 May 2026Four, none of them about model quality. No gate compared the diff to the request. Author and approver were the same principal. Reversibility was assumed rather than classified. And the temporary role grant had been live for twenty-one days by 12 May with nothing scheduled to remove it.
The redesign1–19 Jun 2026The agent identity is reduced to propose-only. Merge moves to the pipeline. Deployment credentials are minted per run. Migrations are separated from application deploys and require a second approver and a rehearsed restore. Every machine-identity role grant now carries a mandatory expiry.

Notice what did not go wrong. The model was not manipulated. Nobody acted in bad faith. The agent was asked to fix a failing test and it fixed the failing test — relaxing an idempotency check is a defensible way to make a flaky test deterministic, and a tired engineer might have done the same at the same hour. What turned an ordinary bad change into a payment incident was that four separate controls were absent at the same moment, and every one of them was an access decision rather than an AI decision.

Notice, too, where the amplification came from. The same patch was applied to three sibling services in one session, which is the error-correlation property from the first table doing precisely what it does. A human making that change would have shipped it once, seen the duplicate charges, and stopped. The concurrency stop at S7 in the pipeline design above exists for exactly this, and it is the cheapest control on the whole page.

The audit consequence is worth being blunt about, because the event landed inside an observation period. The service auditor does not ask whether an incident occurred — incidents occur, and a well-handled one is not automatically an exception. What is tested is whether the described controls operated. Here two probably did not: a change reached production without approval by anyone other than its author, which is a CC8.1 problem, and a privileged role grant to a machine identity ran for twenty-one days without review or expiry, which is a CC6.3 problem. The management response that reads best names both, dates the design change, and does not lean on the fact that no customer data was disclosed. For how these events are handled inside a live period, see a security incident during the observation period.

The decision that caused this was not made at 14:02 on 12 May. It was made on 21 April, by someone solving a timezone problem with a role grant that had no expiry.
— the lesson the eleven minutes exist to teach
Evidence

What the CPA firm actually requests

The request that surprises teams is not for the agent’s configuration. It is the population question, and the answer that matters is that the population is production deployments, not agent sessions. Sessions are unbounded, unattributable and held by a vendor. Deployments are enumerable, attributable and yours.

The requestWhat satisfies itWhat gets rejected
Define the population of production deploymentsA system-generated export from the deployment system covering the entire period, produced before any sample is drawn, showing every release to production with initiating principal, artefact, commit and timestamp — with the query, filter and date range visible.A list assembled from release notes or a changelog. A view filtered to deployments that went through the pipeline, when the ones that did not are precisely what is being tested for.
Show which deployments were agent-initiatedA field on the deployment record identifying the initiating principal, reconciled to the identity provider’s list of machine accounts, so agent-initiated releases can be counted rather than estimated.An assertion that agents have no production access, with no system that could produce a population either way. Naming conventions on service accounts with nothing enforcing them.
Prove the approval came from someone other than the authorFor each selection, the approval event with approver identity, author identity, both timestamps, and the artefact hash that was approved matching the artefact that deployed.An approval by the account that opened the change. An approval timestamped after the deployment. A merge performed by an administrator using a bypass path, offered as though it were an approval.
Prove the gate was enforced all period, not merely todayThe pipeline and branch-protection definitions captured at two or more in-period dates, the version-control history of those files, and the platform audit log of protection-rule and environment-approval changes across the whole period.A screenshot of a settings page taken during fieldwork. A policy document describing a gate that no configuration implements. A dashboard showing today’s posture for a period that closed months ago.
Prove the agent could not alter its own constraintsThe permission assignment for each machine identity at in-period dates, the protected-path or code-owner rule covering pipeline and policy files, and evidence of at least one blocked attempt or an equivalent control test.The statement that the agent does not do that — behaviour is not a control. A deny rule stored in a file the agent is permitted to edit.
Prove rollback worksA rehearsed rollback with a date, a named performer, elapsed time and what was verified afterwards, plus, for any change classified irreversible, the second approval and the restore test standing behind it.A pipeline stage named rollback that has never run. A statement that the previous version can be redeployed, offered as evidence about a change that included a migration.
Show emergency changes were reconciled afterwardsThe break-glass activation log for the period with reason, duration, actor and the incident each activation maps to, together with the dated retrospective review that closed it.Activations with no matching incident record. A retrospective review dated after period end for activations that occurred inside it. An emergency path with no expiry, which is not an emergency path but a second set of standing rights.

On sample sizes: neither the criteria nor the attestation standards prescribe them. AT-C 205 requires sufficient appropriate evidence and leaves the quantity to professional judgement, informed by the AICPA guidance and by sampling concepts applied by analogy. In practice a six-month period with several hundred production deployments draws a sample in the region of twenty-five selections, and a firm that finds a deviation typically expands rather than concluding. The arithmetic that catches agent programmes out is different: populations like “emergency changes” or “deployments initiated by a machine identity” are often small enough to be tested entirely, so one missing approval in a population of four is a known deviation rather than an estimate. More on this in sampling and sample sizes.

Two practical notes decide how painful fieldwork is. The first is retention: every row above leans on a log, and a log relied on as evidence must retain for longer than the observation period plus the lag before anyone asks. Deployment histories, pipeline audit logs and code-platform audit logs are frequently plan-tier settings with windows shorter than six months. List every log you cite in a control description on day one of readiness, write its retention window beside it, and schedule an export where the window is short. The second is self-inflicted: a policy stating that AI tools may not deploy to production, with nothing enforcing it and no system able to produce a population either way, creates the exception rather than preventing it. Write what is enforced. If the enforcement is that no agent identity holds a production credential, say that — it is both stronger and testable. The discipline is the same one described in what auditors actually accept as evidence.

From the other side of the table

What buyers push back on and the answer

These seven now appear in enterprise security questionnaires with some regularity. The difference between a good answer and a defensive one is whether it describes architecture or asserts intent.

“Do AI agents have write access to your production environment?”

The version of this question now appearing in enterprise questionnaires, and it deserves an architectural answer rather than a yes or no. Describe which identities exist, what each may reach, where the deployment credential lives, what the gate verifies, and who approves. The strongest answer is usually that no agent identity holds a production credential at all because the pipeline mints one per run — that is a statement about design rather than intent, and it is testable. If the true answer is yes, say so, and describe the soak, the rollback and the bound around it.

“Your engineer already has deploy rights. Why is the agent any different?”

Because three properties of the human do not transfer with the permission. The engineer pauses between deciding and doing, and doubt arrives in that gap. The engineer does not take instructions from a dependency changelog or an issue comment. And the engineer is a named person with an employment relationship who can be asked afterwards. Grant the agent the same entitlement and you have kept the capability and dropped the three things that made it tolerable. That is the whole argument, and it is worth stating in exactly those terms.

“A human clicking approve on a 900-line machine-authored diff is not review.”

Frequently correct, and the honest response is to make the gate small enough to be real rather than to defend the click. Bound the diff — path allowlists, file and line limits, one concern per change — so that what reaches an approver is readable. Then measure it: median diff size at approval, median time between open and approval, and the share of approvals under sixty seconds. Those three numbers tell you whether the control operates, and a team that measures them is answering a different and better question than a team that asserts the review happens.

“You should not use coding agents on our workload at all.”

Sometimes that is a contractual term you accept, and it is worth finding out early whether it is a hard gate or a scoring factor. Where it is negotiable, the productive move is to narrow it: agents on non-production environments with synthetic data, no production identity, human approval on every change reaching their data, and a written commitment to notify on material change. A blanket prohibition you cannot evidence is worse than a narrow permission you can, because your own documents are the standard you are tested against.

“Show us the agent cannot turn off its own guardrails.”

A good question, and the one most teams cannot answer with an artefact. What satisfies it is the permission assignment for the machine identity, the code-owner or protected-path rule covering pipeline and policy files, the fact that those definitions live outside the agent’s writable scope, and a change history for those files showing who has actually modified them. What does not satisfy it is a configuration file containing deny rules that the agent is also permitted to edit — that is a preference, and it will be read as one.

“Your SOC 2 report does not mention AI anywhere.”

It may not need to, and it may be a real gap — the test is whether the agent is part of the system as described. If an agent is inside your change-management path, the description that says changes are reviewed and approved before deployment has to be true of machine-authored changes too, and controls in Section 3 must reappear as tested controls in Section 4. Reports increasingly do describe agent identities and their constraints, and buyers increasingly look for it. What fails is a description written before the agents arrived.

“What happens when the agent is wrong at three in the morning?”

The answer should be structural rather than reassuring. Nothing an agent does out of hours reaches production without the same gate, because the gate is not staffed — it is configured. If a change genuinely must ship at three in the morning, a human declares an emergency, the break-glass path is time-boxed and logged, and it is reviewed against the incident record afterwards. Where the concern is detection rather than deployment, describe the soak window, the signals, the automatic rollback and who is on the rota that night.

For how to structure the whole answer when a questionnaire arrives, see SOC 2 and security questionnaires, and for the identity layer underneath all of this, agent identity and delegated authority.

Frequently Asked Questions

Should a coding agent be allowed to deploy to production?
In almost every case, no. The workable default is that the agent proposes, the pipeline gates, and a human other than the author approves the specific artefact — with the deployment credential minted by the pipeline for that run rather than held in the agent’s environment. Narrow exceptions are reasonable: deployments inside a pre-approved change class that a classifier can verify, or releases behind a mandatory soak with automatic rollback on services with strong signals. What should not happen is an agent holding a standing production credential because the engineer who operates it holds one.
Why is this different from letting an engineer deploy?
Because three properties of the human do not transfer with the permission. There is a pause between deciding and doing, and that gap is where doubt arrives and where a colleague sometimes intervenes. The engineer takes instructions from known people rather than from issue text, changelogs and web pages, which an agent reads and cannot reliably separate from instruction. And the engineer is a named person you can ask afterwards, where agent actions arrive under a service principal often shared across sessions. Grant the same entitlement and you keep the capability while dropping all three protections.
Can the agent approve or merge its own pull request?
No. An approval by the author is not an approval, and in this case the agent is the author — merging its own change collapses authorisation, execution and review into one principal. The complication is practical: some platforms cannot distinguish a machine approver from a human one, and administrators can often bypass protection rules. Verify both in your own configuration rather than assuming, and where the platform cannot enforce the distinction, treat it as a control gap and compensate with a check the pipeline performs on approver identity.
Does SOC 2 prohibit AI agents from deploying to production?
No trust services criterion mentions artificial intelligence, and none prohibits it. The criteria are technology-neutral, so an agent in your change path is examined as part of the system you described — principally under CC8.1 for change authorisation, approval and deployment, and under CC6.2 and CC6.3 for how the machine identity was registered, authorised and reviewed. A point of focus under CC8.1 refers to restricting unilateral code development or testing and implementation by a single user, which applies to an agent that authors and ships without a second party as naturally as it applies to a person.
What must the deployment gate actually verify?
Nine things, in rough order of how often they fail open. Provenance and delegation, so the record shows which agent acted at whose request. The diff scope against the declared intent. That protected paths — pipeline, policy, IAM, tests — were untouched. A non-author human approval bound to an artefact hash rather than a branch. A reversibility classification for the change. Test and dependency evidence including verification that new packages exist and resolve from your own proxy. A blast-radius bound. A deployment credential minted for that run. And a soak window with automatic rollback that has been rehearsed rather than assumed.
Is a soak window with automatic rollback enough on its own?
It is a strong availability control and a weak integrity or confidentiality one. A soak notices that error rates or latency moved. It does not notice that a permission was widened, that a field is now written to the wrong table, or that records were corrupted in a way that surfaces in next month’s reconciliation. For high-frequency, low-variance changes on well-instrumented services it is a reasonable place to put the decision. For anything touching authorisation logic, data schemas or confidential information, keep a human approval in the path and treat the soak as a second line rather than the first.
Should an agent have break-glass access?
An agent may execute steps inside an emergency a human has declared, but it should not be the actor that declares one, because declaring an emergency is the act of setting aside a control and that needs an accountable person attached. A testable emergency path expires automatically, is pre-authorised by role rather than negotiated during the outage, announces itself to a channel people read, is narrower than full production access, never includes the ability to alter the gate or the audit log, maps every activation to an incident record, and brings the change back through the normal process inside a stated window.
How does an auditor test this, and what is the population?
The population is production deployments, not agent sessions. Transcripts are not system-generated evidence in the sense that matters, there is no complete population of them, and their retention is usually a vendor setting nobody has verified. Expect a request for a system-generated deployment export covering the whole period with the initiating principal on each record, reconciled to the identity provider’s list of machine accounts. Selections are then tested for a non-author approval, an artefact hash matching what deployed, and evidence that the gate configuration was enforced throughout the period rather than on the day of fieldwork.
What about continuous deployment, where merging is deploying?
Then the merge is the production change and the pull-request approval is the only human control in the path — a defensible design that concentrates the whole argument in one control. If you run this way the corollaries are not optional: the agent cannot approve, administrators cannot bypass the protection rule, protected paths cannot be edited in the same change, and the canary and soak must live inside the deployment rather than in a stage that can be skipped. Say this explicitly in the control description, because an auditor reading “changes are approved before deployment” will test exactly that sentence.
Does our system description need to mention coding agents?
If an agent is inside the change path, then yes in substance, whether or not the word appears. The description is prepared by management and evaluated against the AICPA description criteria in DC section 200, which apply to SOC 2. A description saying changes are reviewed and approved before deployment must be true of machine-authored changes too, and controls described in Section 3 have to reappear as tested controls in Section 4. The failure mode we see most often is a description written before the agents arrived and never revisited, which turns your own document into the source of the exception.

Written By Expert Auditors

Surendra Pal SinghChief Information Security Officer & Data Protection OfficerCISODPOCISAMCSEITILISO 27001 Lead AuditorISO 27701 Lead AuditorISO 42001 Lead Auditor
Saundhi ChauhanLead AuditorISO 27001 Lead AuditorISO 27701 Lead AuditorISO 42001 Lead Auditor
Last reviewed: August 2026 • Content verified by certified lead auditors

Get in touch

Book a free consultation or send us your requirements. We respond within 24 hours.

Send us your requirement.

01Your details
02What is it about?
ISO 42001 (AI)
03Send
Asking about: ISO 42001 (AI)