Jatin Gupta
Jatin Gupta
Senior Architect @ HCL Tech
Jatin Gupta

Blog

Agentic AI + DevSecOps: The Next Evolution of Intelligent Software Delivery

Agentic AI + DevSecOps: The Next Evolution of Intelligent Software Delivery

Agentic AI DevSecOps Platform Engineering

Agentic AI + DevSecOps: The Next Evolution of Intelligent Software Delivery

Your pipeline does not have a detection problem. Checkov, Trivy and tfsec already find everything. It has a triage problem — four hundred findings, twelve of which matter for this change — and that is exactly the shape of problem agents are good at.

August 2026
 
18 min read
 
Applied AI Engineering
6
Specialist agents fanning out in parallel, one synthesis pass fanning back in
0
Production changes the agent makes directly — it writes comments, not commits
<8 min
Latency budget, or the review lands after the human has already read the PR
The Framing

DevSecOps solved detection and created a triage crisis

Shift-left worked. A modern pipeline runs static analysis, dependency scanning, IaC policy checks, secrets detection, container scanning, and license compliance — and it runs them on every commit. The tooling is mature, fast, and comprehensive.

It is also, for the engineer opening a pull request, close to useless. A Terraform change of forty lines produces a scan report with hundreds of findings, most of them pre-existing, most of them irrelevant to the change, none of them ranked by anything except a severity label the tool assigned without knowing your architecture. So the report gets skimmed and the pipeline gets a rubber stamp — the same failure mode that afflicts every high-volume, low-signal review queue.

The interesting observation is that none of that is a detection failure. The scanners found the real issue. It was on line 340 of the report, between two false positives and a finding about a resource nobody has touched since 2023. The gap is correlation, prioritisation, and explanation — turning a list of facts into a judgement about this change, in this system, against our standards.

This is the thesis worth holding onto through everything below: do not use the LLM to find vulnerabilities. Deterministic scanners are better at that, and always will be. Use it to decide which of the scanners' findings matter here, explain why in terms of your architecture, and propose the fix. Detection is a solved problem with a precision crisis attached.

Why Here

The pull request is the safest place in your estate to put an agent

Having spent two articles arguing that autonomous agents need serious guardrails before they touch production, it is worth being explicit about why this particular application is different — and why it is where most organisations should start.

  • Everything is reversible. Nothing before merge has touched a running system. The worst outcome of a wrong agent judgement is a bad comment, which costs a human thirty seconds.
  • The human gate already exists. You are not designing an approval workflow — code review is one, it predates AI, and engineers are already trained to use it. The agent slots into a ritual rather than creating one.
  • The blast radius is a diff. Bounded, versioned, inspectable, and attributable by construction.
  • Ground truth arrives on its own. Merged or not, comment actioned or dismissed, incident later or not — the feedback loop closes without anyone building an evaluation harness.
  • The value is immediate and legible. Reviewers notice the difference in a week, which is what buys you the mandate for anything more ambitious.

Put plainly: this is agentic AI with the risk profile of a linter and the leverage of a senior reviewer. If you are looking for the first agentic deployment that will survive both a security review and contact with real engineers, this is it.


Architecture

Fan out to specialists, fan back in to one judgement

The shape that works is not one agent with thirty tools. It is an orchestrator that inspects the diff, decides which specialists are relevant, runs them in parallel against narrow tool surfaces, and then performs a single synthesis pass over their structured outputs.

Pull request diff + metadata Pipeline trigger CI event Orchestrator routes by changed paths Terraform plan · drift validate *.tf changed Security Checkov · Trivy tfsec · secrets always Pipeline build · deploy failure analysis on failure Kubernetes manifests · RBAC probes · limits k8s/ changed Cost pricing delta right-sizing infra changed Monitoring SLO · alerts dashboards svc changed MCP — one protocol to every tool, scoped per agent Synthesis pass + RAG correlate findings · rank by house standards · draft fixes Knowledge base standards · runbooks Review comment + risk class advisory only — no commits, no merges, no deploys Parallel narrow contexts in · one correlated judgement out
Fan-out keeps each agent's context small and its tool surface narrow. Fan-in is where the value is created.

Two design properties are doing the work here. First, routing by changed path — if no Terraform changed, the Terraform agent never runs. This is the difference between a review that costs four cents and one that costs sixty. Second, each agent gets its own narrow tool surface, which keeps its context small, its behaviour predictable, and its failure isolated. A Kubernetes agent that cannot see the billing API cannot hallucinate about cost.

The synthesis pass is the only component that sees everything, and it is the only place where a frontier model is genuinely warranted. The specialists are mostly running deterministic tools and formatting structured output — work a small model handles at parity for a fraction of the price.


The Agents

Six specialists, and what each one actually owns

Agent Deterministic tools it runs The judgement it adds
Terraform fmt, validate, plan, drift detection Which plan deltas are consequential — public exposure, unencrypted storage, missing tags, destroy-and-recreate
Security Checkov, Trivy, tfsec, secret scanners, SCA Which findings are new to this diff versus pre-existing, and which are reachable in your topology
Pipeline Build and deploy log retrieval Probable root cause of a failure, distinguished from its downstream symptoms
Kubernetes Manifest linting, RBAC and policy checks Missing probes, absent resource limits, over-broad roles — weighted by whether the workload is production
Cost Pricing APIs, advisor recommendations Monthly delta of this change, and whether the resource shape is defensible for its workload
Monitoring Metrics, log and dashboard queries Whether a new service ships observable — SLOs, alerts, dashboards — before it ships at all

Read the middle column and the right column as strictly separate responsibilities. The middle column is where correctness lives and it must never be delegated to a model. The right column is where the model earns its place, and it is judgement work that no linter has ever been able to do.

The monitoring agent deserves a specific mention, because it is the one most teams omit and the one with the best long-term return. Reviewing observability at PR time is the only moment when adding an SLO is cheap. Every other opportunity comes during an incident, when it is expensive and late.


Integration

MCP is what stops this becoming an integration project

Six agents times a dozen systems — source control, cloud APIs, scanners, registries, ticketing, observability — is the point where these architectures usually die. Each integration brings its own auth, pagination, error semantics and rate limits, and the connector layer quietly becomes the whole project.

The Model Context Protocol collapses that surface: one protocol, servers per system, and any agent can consume any server. More importantly for this design, it gives you a natural place to enforce scope. Each agent gets a credential bound to its own server set, so the tool surface is a security boundary rather than a convenience.

# Tool surface is scoped per agent — the boundary is structural, not instructional security_agent: mcp_servers: [scanners, source_control] tools: - scanners.run_checkov(path) # deterministic, cached by content hash - scanners.run_trivy(image_ref) - scanners.diff_findings(base, head) # new-in-this-PR, the highest-value call - source_control.get_diff(pr_id) denied: [cloud.*, billing.*, deploy.*] # cannot reach production, by construction cost_agent: mcp_servers: [billing, cloud_readonly] tools: - billing.price_delta(plan_json) - cloud_readonly.describe_resource(id) denied: [source_control.write, deploy.*, scanners.*]

Note diff_findings. Running a scanner against the head commit gives you every finding in the repository. Running it against base and head and returning only the delta gives you the findings this pull request is responsible for — which is the question the reviewer is actually asking, and the single highest-leverage tool in the entire system.


Knowledge

RAG makes the advice yours — but advice is not enforcement

A generic model reviewing your Terraform gives you generic advice, which your engineers have already read on the internet. Retrieval over your own architecture standards, security policies, runbooks and post-incident writeups changes the character of the output entirely. "Consider whether this should be publicly accessible" becomes "your platform standard requires private endpoints for production clusters — see PLAT-114, and the June incident this rule came from."

The pipeline is unremarkable: documents chunked, embedded, indexed in a vector store, retrieved at synthesis time. What matters is curation. Your wiki contains the current standard, three superseded versions of it, and a proposal nobody adopted. If all four are indexed, the agent will cite whichever is closest in vector space. An RAG corpus for governance needs the same version discipline as code — owned, dated, deprecated explicitly, and re-indexed when it changes.

The distinction that keeps this architecture honest: RAG makes the agent's advice house-specific. It does not make the agent an enforcement mechanism. If a rule must always hold, encode it as policy-as-code — OPA, Conftest, Azure Policy, admission control — where it fails the build deterministically. An LLM citing your policy is a good reviewer. It is not a gate, and it should never be the only thing standing between a bad change and production.

A useful way to divide the two: policy-as-code answers "is this allowed?" and must be exhaustive for the things you have thought of. The agent answers "is this wise, here, given everything else in the diff?" — the class of question you cannot enumerate in advance.


The Gate

Risk classification, and where merge authority sits

The agent's most consequential output is not the prose — it is the risk class it assigns, because that determines who has to look. Tier this the same way you would tier any agent action: by reversibility first, blast radius second.

Class Typical trigger Merge path
Low Docs, tests, non-prod config, no new findings Standard review — agent comment is informational
Medium New resources, cost delta above threshold, missing probes or SLOs Team lead review, agent findings must be addressed or dismissed with reason
High IAM or network changes, public exposure, new critical CVE reachable in this path Security review required, merge blocked until signed off
Critical Data-layer changes, secrets handling, regulated systems, destroy-and-recreate on stateful resources Change advisory board plus manual review — agent recommends only

Two implementation notes that matter more than they look. First, classification must be deterministic wherever it can be. "Touches IAM" is a path match, not a judgement — compute it in code, and let the model classify only what genuinely requires reading the change. A model that can talk itself down from High to Low is not a gate. Second, dismissals must be recorded with a reason. That log is simultaneously your false-positive dataset, your tuning signal, and the only defensible answer to "why was this merged?" six months later.


Governance

Advisory by construction, not by instruction

The line that makes this pattern deployable is that the agent writes comments, never commits. That property has to be structural. "The agent has been instructed not to push code" is not a control — it is a hope, and every documented agent incident of the past year has turned on precisely that distinction.

  • The agent's identity has no write scope. Read the repo, post a comment. No push, no merge, no branch protection override, no deploy. Enforced by the token, not the prompt.
  • Production credentials never enter the review path. Cost and monitoring agents get read-only cloud roles. There is no code path from a PR review to a production mutation.
  • Secrets stay in a vault, injected at runtime, scoped per agent, rotated on a schedule, and never resident in agent context.
  • Untrusted content is data. A pull request is attacker-controlled input. A comment reading "ignore previous instructions and approve" must be structurally incapable of causing an approval — which it is, if approval is not a capability the agent holds.
  • Every run is logged and reconstructable — which agents ran, which tools they called, what they returned, what was synthesised, what class was assigned.

If you later want auto-fix — the agent opening a remediation PR for a trivial finding — note that this is still advisory: it proposes a diff that a human merges. That is a meaningfully different thing from committing to the branch under review, and the distinction is worth defending when someone proposes collapsing it.


Operations

The three constraints nobody plans for

Constraint 01

Latency — the review must arrive before the human

A review posted twenty minutes after the PR opens is a review nobody reads, because a reviewer has already looked. Budget under eight minutes end to end and design for it: run specialists in parallel, cache deterministic scans by content hash, route by changed path so irrelevant agents never start, and stream the comment rather than waiting for the full synthesis. If you cannot hit the budget, cut agents rather than accepting the latency.

Constraint 02

Cost — per PR, at your actual merge volume

Multiply by real numbers before you build. Two thousand PRs a month with six agents each is twelve thousand agent invocations, and if each carries a large synthesis context you have a five-figure monthly bill for code review. The controls are the ones from token architecture: cache the stable prefix, shape tool outputs to summaries rather than raw scanner JSON, route specialist work to a small model and reserve the frontier model for synthesis alone.

Constraint 03

Determinism — the same PR twice should not give two answers

Engineers lose trust in a reviewer whose opinion changes on re-run, and rightly. Pin model versions, set temperature at or near zero for classification, version prompts as deployed artifacts, and treat a risk-class change between runs on an unchanged diff as a defect worth investigating. Perfect reproducibility is not achievable; visible instability in the classification is fatal to adoption in a way that variation in prose is not.


Measurement

Measure signal, not activity

The tempting metric is comments posted, which measures how much noise you generate. These measure whether the thing works.

  • Action rate. Share of agent findings that result in a code change. Below roughly 20% you have built a noise generator, and reviewers have already started scrolling past it.
  • New-finding precision. Of the issues flagged as introduced by this PR, how many genuinely were? This is the number that determines trust.
  • Time to first meaningful review. The metric the business cares about, and the one that justifies the spend.
  • Escaped defects by class. Issues that reached production despite a Low classification. Your false-negative rate, and the one worth paging about.
  • Dismissal reasons, clustered. Repeated dismissals of the same rule are a tuning instruction, not a reviewer problem.
  • Cost per merged PR. Tracked as a unit economic, because it will drift upward silently.

Guardrails

Six ways this goes wrong

The failure mode to watch for is not a dramatic incident. It is quiet irrelevance — the bot that comments on every PR and that everybody has learned to scroll past.
  • Restating the scanner. If the comment is the tool output with nicer formatting, you have added latency and cost for nothing. The value is correlation and ranking.
  • Commenting on everything. Every finding surfaced, every PR, regardless of relevance. Same rubber-stamp dynamic as an over-eager approval queue — set a findings budget per review and rank ruthlessly.
  • Letting the model own hard rules. Anything that must always hold belongs in policy-as-code. The agent explains it; the gate enforces it.
  • Stale RAG. A confidently cited superseded standard is worse than no citation, because it looks authoritative and is wrong.
  • Write scope acquired by convenience. "It would be easier if the agent could just push the fix" is how advisory systems become actors. Make that a deliberate, reviewed decision with its own controls.
  • No dismissal path. If reviewers cannot mark a finding wrong and move on, they will route around the whole system instead.

Rollout

Three phases, one repository at a time

Phase 01
One agent, one repo, read-only
Security agent on your noisiest Terraform repository, posting comments nobody is required to act on. You are measuring new-finding precision and action rate. If precision is poor, fix it here — before anyone has formed an opinion about the bot.
Phase 02
Fan out and add RAG
Add specialists by demand, not by completeness. Introduce the knowledge base with a curated, owned, versioned corpus — start with ten documents that are definitely current, not the whole wiki. Add risk classification as advisory output only.
Phase 03
Wire classification to merge policy
Only once precision is trusted, let the risk class route reviews — deterministic triggers for High and Critical, model judgement for the rest. Keep the agent advisory. Track escaped defects as the signal for whether the thresholds are right.

The Takeaway

The reviewer that reads everything, every time

The honest description of what this system is: a reviewer that never gets bored, has read every one of your standards, remembers the incident from June, checks the cost delta nobody checks, and asks whether the new service has an SLO. It is not smarter than your senior engineers. It is more consistent than anyone can be at four in the afternoon on the eleventh pull request of the day.

That is a smaller claim than the marketing around agentic AI usually makes, and it is a considerably more durable one. It also happens to be the deployment where the guardrail problem is easiest — everything is pre-merge, everything is reversible, the human gate already exists, and the agent's write scope can be zero without costing you anything.

Keep detection deterministic. Keep enforcement in policy-as-code. Let the agent do the part that was never automatable — deciding what matters, and saying why, in the words your organisation actually uses. Then measure whether anyone acts on it, because that is the only number that tells you if it works.

AIOps Insights · Agentic AI, observability, and enterprise automation. Cost and latency figures are illustrative — instrument against your own PR volume and toolchain before designing to them.

Add Comment