Blog

AI Maturity Levels in Software Delivery: From Busywork to Governed Autonomous Agents

Anastasiya Kauzovich
Anastasiya Kauzovich· Co-founder
ai-agentsautonomous-deliverygovernance

Over 80% of developers, according to the Stack Overflow Developer Survey, use AI tools regularly. Yet nearly half of them end up rewriting or double-checking the generated code, because it looks plausible and breaks in production.

The gap isn't model quality. Most teams are running autonomous agents on top of task trackers designed fifteen years ago for a different job: recording what a human did, not verifying what an agent did. Code generation got an order of magnitude cheaper. Coordination, review, and security got an order of magnitude harder in exchange.

What AI maturity in software delivery actually measures

Maturity here isn't about how smart the model is. It's about whether the process around it can verify the output without a human in the loop every time. Three levels capture that progression cleanly.

LevelAI's roleWhat gets verified
1. Passive automationRemoves busywork: reports, status syncs, first-pass draftsNothing is gated, it runs in the background
2. Decision supportAnalyst and facilitator: surfaces bottlenecks, proposes optionsA human still decides, AI prepares the context
3. Autonomous agentsA full team member with its own accessAccess itself is scoped and revocable, not just monitored

Level 1: why zero-maintenance tracking doesn't solve the problem by itself

At level one, AI takes over report assembly, status syncing, first-pass error triage, and documentation drafts. That removes 5–10 hours a week per developer, lead, and PM by eliminating "work about work": engineers spend up to 30% of their time on boards and status updates instead of code.

The risk at this level rarely gets said out loud: if AI closes tickets on a chat command without checking the code, the board shows 100% done while production breaks on untyped errors. Automating the status is not the same thing as automating the check.

TAM closes this at the architecture level rather than bolting it on as a feature. A ticket's status in TAM is built to move off the back of a fact, a commit, a PR, a CI run, not a guess: that activity links to the matching ticket automatically the moment it happens, live today, so the evidence is already sitting on the task instead of scattered across five tabs. Over the Model Context Protocol, any external tool, Claude Code, Cursor, Aider, plugs into the same task graph and gets that context without anyone copy-pasting prompts between a chat window and the tracker.

Level 2: what makes an AI facilitator different from another notification bot

At level two, AI stops being autocomplete and starts seeing the whole picture: stalled PRs, missing specs, deadlocked discussions. It doesn't write the code for the human. It explains where the bottleneck is and why.

That's also where researchers at Berkeley RDI locate the real barrier to autonomy: not model capability, but the absence of complete specifications and independent validation. As long as a task is described vaguely, no agent can prove it closed it correctly, so the human still has to own architectural decisions, even without reading every line of code.

In TAM, this is the internal @tam agent, built directly into the architecture to work the dependency graph instead of a chat feed: catching a PR that's been open 48 hours, checking whether the ticket's spec still matches the current API on the branch, and proposing a resolution instead of another notification. It's rolling out on top of the task graph that's already live today, where PR activity, comments, and status history are already linked (the Level 1 mechanism above), which is the exact precondition a facilitator like this needs to read from.

Level 3: what "governed" autonomy means, and why it isn't the same as autonomy without guardrails

At level three, an agent isn't a sidebar widget. It's a team member with its own account, role, and area of ownership. You can hand it a whole epic: tracing a bug from a stack trace through to shipping the hotfix.

Anthropic has tracked the 99.9th-percentile duration of continuous autonomous agent work rise from 25 to 45+ minutes. But the same Stack Overflow Developer Survey found that 66% of engineers get frustrated specifically by "almost-working" code shipped without guardrails. Level 3 only holds up under governance. Without it, it quietly degrades back to level 2 wearing an automation label.

What governed autonomy actually looks like in TAM

This isn't marketing copy, it's what the connection protocol itself enforces:

  • Agents get their own accounts, not a shared service token. In TAM, bots have their own actorType, distinct from HUMAN, their own status, and their own activity feed. An admin can see exactly what a given agent did and revoke its access without touching anyone else's.
  • Access is scoped at the protocol level, not by convention. The MCP token an agent receives when it connects to TAM is bound to a specific workspace and carries an explicit allowlist of tools (allowedTools) and an explicit allowlist of projects (allowedProjects) inside the token itself. The agent physically cannot call a tool or touch a project outside that list. That's an authorization boundary, not a rule someone might forget to enforce.
  • Concurrent editing doesn't turn into a race condition. TAM's wiki, where agents and humans edit documentation side by side, uses optimistic concurrency: an edit only lands if the document's version hasn't changed since the agent last read it. A conflict returns an error with the current version instead of silently overwriting someone else's edit.
  • Cost and time are visible per task, not per subscription. Time entries already attach to the specific issue they're logged against, live today, whether a human logs them directly or an agent logs them under that human's authorization, so the cost of a task is something you can check against the ticket it shipped on instead of estimating from a total token bill. Separating an agent's own hours from the human who authorized it isn't something that record captures yet.

Why "agent-only" and "approve everything" both fail the same way

The debate over agent autonomy usually gets framed as a binary: either an agent runs fully unsupervised, or a human approves every single action before it happens. Both extremes fail for the same underlying reason, just in opposite directions. Full autonomy with no guardrails is level 3 wearing an automation label, described above. Approving everything collapses back into level 1's busywork, except now a human is the bottleneck checking work an agent could have safely done alone, which defeats the point of delegating it in the first place.

The pattern that actually holds up isn't a fixed point between those two extremes. It's a rule that sorts by consequence: reversible, low-cost actions (reading, drafting, commenting, opening a PR) get auto-allowed by default, because undoing a mistake there costs minutes. Destructive or hard-to-reverse actions (deleting data, force-pushing, rotating credentials, touching production infrastructure) get held, not because an agent is untrusted in general, but because the cost of being wrong in that specific category is categorically different. A practical breakdown of scoping access this way covers the concrete version of this pattern. Autonomy earned this way scales with how reversible an action is, not with how long an agent has been running without a mistake.

A reference definition: what "done" actually means for an agent

Different pieces of content on this site use "evidence," "verification," and "handoff" somewhat loosely. Here's the definition this site treats as canonical, so it's worth stating once, precisely:

  • Claim: what an agent (or a human) states it did. A PR description, a comment, a status update. A claim is not evidence, it's a statement that evidence should exist somewhere.
  • Execute: the actual work the claim describes, a commit, a test run, a deployment, something that happened in a system outside the tracker itself.
  • Evidence: an artifact that lets someone other than the claimant check whether the claim is true, a passing CI run linked to the specific commit, a diff that matches the ticket's acceptance criteria, a test result attached with a timestamp.
  • Review: a human or a system checking the evidence against the claim before the task is considered actually done, not before the agent says it's done.

A task is "done" in the sense that actually matters only when all four of these exist and the last one has run. A status field that only has "claim" behind it, an agent said so, is a status field describing intent, not completion. That's the precise version of a gap this site covers elsewhere from two different angles: the review bottleneck this creates in practice, and why a green CI run alone was never proof. Both are about what's missing when review has to run against a bare claim instead of against evidence a claim points to.

Comparing approaches to adopting AI in software delivery

CriterionJira/Linear + AI pluginsChat-first tools (Cursor, Claude Code standalone)TAM
Maturity level1: manual entry, autocomplete on an old board3 without guardrails: the agent is autonomous but has no access boundaryFull 1→3 spectrum in one system
How output is verifiedBased on what a human typedBased on chat output textBased on code, pipeline, and attached evidence, with enforcement rolling out
Access controlStandard human roles, agents sit outside the permission modelLimited to the developer's local terminalSeparate agent accounts, scoped tool and project allowlists, revocable per agent
Cost visibilityNot tracked separatelyNot tracked separatelyTime tracked per task now, cost per task rolling out

How TAM shifts the balance instead of just speeding up the old process

TAM doesn't add AI on top of a board designed for humans. It builds the board around the idea that the AI and the human verify each other against the same artifacts: commits, PRs, tests, document versions.

Level 1 holds because a task's status is built to move off a fact in GitHub, linked automatically, not a click typed in isolation. Level 2 is rolling out through @tam, which reads the dependency graph and proposes resolutions instead of sending another notification. Level 3 doesn't rest on trust. It rests on protocol: the agent has its own account, a token with an explicit permission list, a wiki that can't be silently overwritten, and cost visibility rolling out on top of the per-task time tracking that's already live.

So if the next agent you connect to your team still runs on a shared API key and a shared ticket queue, the question isn't whether the agent is ready for autonomy. It's whether the tracker it's plugged into is.