AI Engineering
October 13, 202610 min

AI Coding Agents Write 30% More Code but Ship No More: Measure Cost per Resolved Issue at the Gateway

A Harvard study of 700+ software firms found coding agents raise code output by 30% but leave issue resolution flat while review time climbs. Here is how to route, govern, and measure coding-agent traffic with Odock so spend maps to shipped work.

YK

Youcef Kaddour

Founder at Odock and AI infrastructure engineer

Youcef Kaddour is the founder of Odock and an AI infrastructure engineer focused on secure LLM systems, MCP governance, runtime guardrails, and production-grade multi-provider AI architecture.

What you should take away

  • 1The Harvard and Jellyfish data shows output up (lines +30%, commits +20%, PRs +23%) and outcomes flat (no significant change in Jira resolution), with the bottleneck moving to review: merge time +49%, comments per PR +35%.
  • 2Most companies cannot answer 'what did coding agents cost per resolved issue?' because agent traffic goes straight from laptops and CI to providers, with shared keys and no ticket context.
  • 3Routing every coding agent through Odock gives per-developer and per-agent virtual keys, team budgets reserved before each call, routing tiers, and usage records with cost, model, and latency.
  • 4A Flow Studio graph can tag each request with repository and ticket from headers and export the outcome asynchronously, so spend joins cleanly with Jira and GitHub results.
  • 5MCP tool rules stop agents from 'solving' the review bottleneck the dangerous way: allow reading issues and opening PRs, block merging, force-pushing, and deleting branches.

In October 2026, a Harvard working paper built on Jellyfish and GitHub telemetry from more than 700 software firms put a number on what many engineering leaders suspected. Adopting AI coding agents raised lines of code by about 30%, commits by 20%, and pull requests by 23%. The resolution rate of Jira issues and epics did not move. Time from pull request to merge rose 49%. The agents are producing; the organisation is not shipping more. This article explains why, and how to turn coding-agent traffic into something you can route, budget, govern, and measure against outcomes with Odock.

The number everyone shared this week

Between October 9 and 12, 2026, one chart travelled through every engineering Slack: AI coding agents make developers produce more code, and companies do not ship more software.

The source is a Harvard working paper by economists Fiona Chen and James Stratton, Artificial Intelligence in the Firm: Bottlenecks in Software Production. It pairs Jellyfish engineering telemetry with GitHub activity across more than 700 software companies and roughly 300 million work events, from 2021 through March 2026. According to the coverage of the paper:

  • lines of code rose about 30% after coding-agent adoption
  • commits rose about 20%, pull requests about 23%
  • the resolution rate of Jira issues and completed epics, the authors' proxy for shipped features, did not change in a statistically significant way
  • time from pull request submission to merge rose about 49%, revision requests nearly doubled, and comments per pull request rose about 35%
  • by March 2026, 80% of firms ran AI code review tools, yet only 23% of review comments were AI-generated

Some outlets read the 49% as reviewers working harder; others, more carefully, as work waiting longer downstream. Either way the conclusion is the same: agents moved the constraint. Writing code got cheaper. Reviewing, integrating, and deciding did not.

Why most companies cannot see this in their own data

The study used years of telemetry from a specialised vendor. Most engineering organisations trying to answer the same question for themselves hit a wall within a day, because coding-agent traffic is invisible in the places that matter:

  • It goes straight to providers. Terminal agents, IDE assistants, PR review bots, and CI agents each call a model provider directly, often with a shared team key or a personal card.
  • It has no business context. A provider invoice says how many tokens a key used. It does not say which repository, which ticket, or which agent.
  • It has no ceiling. An agent stuck in a fix-test-fix loop overnight spends until someone notices the invoice.
  • It has tools. Agents now act on GitHub, Jira, and CI through MCP servers, with permissions that were scoped for humans.

You cannot compute cost per resolved issue if the cost has no issue attached. That is an infrastructure problem, and it has an infrastructure fix.

Step 1: route every coding agent through one gateway

Odock exposes native endpoints for the API shapes coding tools already speak, so the migration is a base URL and a key, not a rewrite:

  • Anthropic Messages at https://api.odock.ai for Claude Code and Anthropic SDK based agents
  • OpenAI Chat Completions and Responses at https://api.odock.ai/v1 for OpenAI-compatible CLIs, IDE extensions, and review bots
  • Mistral, including Codestral fill-in-the-middle at /v1/mistral/fim/completions for autocomplete
  • vLLM endpoints for self-hosted code models
  • Gemini for Gemini-based tools

For Claude Code, that is three environment variables:

bashsnippet
export ANTHROPIC_BASE_URL="https://api.odock.ai"
export ANTHROPIC_API_KEY="sk_dock_virtual_key_for_this_developer"
export ANTHROPIC_CUSTOM_HEADERS="x-repo: payments-api
x-ticket: PAY-1423"

Each developer, and each autonomous agent (the CI fixer, the PR reviewer, the dependency bot), gets its own virtual API key. Keys carry their owner, team, model grants, MCP grants, budgets, and quotas. Provider keys stay encrypted inside Odock and never reach a laptop.

Step 2: put budgets where the loops are

Coding agents are the clearest case of the agent cost paradox. Gartner warned in August 2026 that inference costs for agentic workflows will rise more than fivefold in two years even as token prices fall, because agents use 5 to 30 times more tokens than chatbots for equivalent tasks.

In Odock, budgets apply to an organisation, team, user, or API key, and they are enforced before the upstream call: the gateway estimates the cost, reserves it against every matching budget, and only then calls the provider. When a window is exhausted the agent receives 402 budget_exceeded, not a surprise on next month's invoice. Quotas do the same for request and token counts.

Two practical rules:

  • Budget teams, not individuals. A team budget with per-key sub-limits for autonomous agents stops runaway loops without making developers ask for permission to work.
  • Give autonomous agents their own keys and lower ceilings. A CI agent that retries a failing build forever is a different risk from a developer pairing with Claude Code.

For agents that run unattended, add Odock's built-in Agent identity and loop ceiling flow template. It requires x-odock-agent-id and x-odock-agent-iteration headers and stops an agent that exceeds a set number of turns, before it spends more tokens.

Step 3: tag every request with the work it serves

Here is the piece that makes cost per resolved issue possible. The developer's tool sends x-repo and x-ticket headers (or your wrapper script derives them from the branch name). A small Flow Studio flow does the rest:

  • Pre-route: a Transform node copies the headers into request metadata, so they travel with the request evidence.
  • Post-response: a Get Response Value node reads token usage, and a Send Webhook node posts key, team, model, tokens, status, repository, and ticket to your warehouse. Post-response runs asynchronously by default, so it adds no latency for the developer.
yamlsnippet
version: 1
name: Tag coding traffic with repo and ticket
on_error: continue
phases:
  pre_route:
    nodes:
      - {id: start, type: start}
      - id: tag
        type: transform
        config:
          target: request
          operations:
            - {op: set, path: metadata.repo, value: "{{request.headers.x-repo}}"}
            - {op: set, path: metadata.ticket, value: "{{request.headers.x-ticket}}"}
      - {id: end, type: end}
    edges:
      - {from: start, to: tag}
      - {from: tag, to: end}
  post_response:
    nodes:
      - {id: start, type: start}
      - {id: usage, type: response_get, config: {path: body.usage, var: usage}}
      - id: export
        type: webhook_send
        config:
          url: https://warehouse.example.com/hooks/ai-coding-usage
          payload:
            api_key_id: "{{request.api_key_id}}"
            model: "{{request.model}}"
            status: "{{response.status}}"
            usage: "{{vars.usage}}"
            repo: "{{request.headers.x-repo}}"
            ticket: "{{request.headers.x-ticket}}"
            at: "{{now}}"
      - {id: end, type: end}
    edges:
      - {from: start, to: usage}
      - {from: usage, to: export}
      - {from: export, to: end}

Odock's usage records already hold the principal (organisation, team, user, key), provider, model, status, latency, tokens, cost, routing trace, and plugin and safety outcomes for every call, without storing prompts or completions. The flow adds the business key you need to join it with Jira and GitHub.

Diagram showing coding agents routed through the Odock gateway with per-developer keys, team budgets, routing tiers, ticket tagging and MCP rules, then usage records joined with Jira and GitHub outcomes to compute cost per resolved issue
Spend becomes measurable when every request carries the work it serves.

Step 4: measure outcomes, not output

With spend tagged by ticket, the warehouse join is straightforward. The metrics worth putting on a dashboard are the ones the Harvard paper says actually move, or do not:

MetricSourceWhat it tells you
Cost per resolved issueOdock export joined with Jira resolutionWhether agent spend buys shipped work
Agent spend on unresolved ticketsSame join, open or abandoned ticketsWhere tokens go without outcomes
PR submit-to-merge timeGitHubWhether review is the bottleneck
Follow-up fixes and reverts after mergeGitHubWhether agent code creates downstream work
Spend by model tier per teamOdock usage recordsWhether frontier models are used where they matter

Lines of code and number of PRs belong nowhere near this dashboard. The study's whole point is that they rise while outcomes stay flat.

Step 5: spend the savings on the real bottleneck

If review is the constraint, two things follow.

Route generation to the cheapest tier that works. Odock routing lets a key define candidates, strategies, and failover, and a pre-route flow can downgrade boilerplate-shaped requests to a smaller model. A decision model such as Jev, called from Flow Studio, can classify requests as simple or complex in about 100 ms. See our article on Jev and Flow Studio.

Measure AI review as its own workload. Give PR review bots their own virtual keys and budgets. If 80% of firms run AI review but only 23% of comments come from it, you want to know what that spend buys: comments accepted, defects caught, review time saved.

Step 6: do not let agents remove the bottleneck by removing review

There is a dangerous shortcut to "fixing" merge time: let agents merge. With MCP servers for GitHub and CI in every agent's toolset, that shortcut is one tool call away.

Odock governs MCP traffic per key:

  • Access grants decide which keys may call the GitHub or CI MCP server at all.
  • Allowed tools keep coding agents on the work they should do: read issues, read files, create branches, open pull requests, comment.
  • Blocked tools keep the irreversible actions with humans: merge, force-push, delete branch, change repository settings or secrets.
  • Semantic filters inspect tool-call payloads before execution.
  • Upstream auth injection keeps the GitHub token in Odock, so it never appears in an agent's environment.
  • MCP usage records attribute every tool call to key, server, tool, status, and cost.

For actions that are sometimes legitimate, such as an agent merging a dependency update in a low-risk repository, use the built-in MCP external approval gate flow template: it calls your policy service before destructive tools and fails closed when approval is denied or unavailable.

What engineering leaders should do this quarter

  • Inventory every coding tool and agent that calls a model provider directly, including CI.
  • Issue a virtual key per developer and per autonomous agent; revoke shared provider keys.
  • Set team budgets with lower ceilings for unattended agents; enable the loop ceiling template.
  • Add repository and ticket headers to agent configurations and deploy the tagging flow.
  • Join the export with Jira and GitHub and publish cost per resolved issue, not lines of code.
  • Lock the GitHub MCP server down to read, branch, and open-PR tools; route merges through humans or an approval gate.

The Harvard result is not an argument against coding agents. It is an argument against running them as unmanaged, unmeasured traffic. Once every request carries an identity, a budget, a ticket, and a record, you can see where agents create shipped value and where they only create more code to review.

Sources

What you should take away

  • 1

    The Harvard and Jellyfish data shows output up (lines +30%, commits +20%, PRs +23%) and outcomes flat (no significant change in Jira resolution), with the bottleneck moving to review: merge time +49%, comments per PR +35%.

  • 2

    Most companies cannot answer 'what did coding agents cost per resolved issue?' because agent traffic goes straight from laptops and CI to providers, with shared keys and no ticket context.

  • 3

    Routing every coding agent through Odock gives per-developer and per-agent virtual keys, team budgets reserved before each call, routing tiers, and usage records with cost, model, and latency.

  • 4

    A Flow Studio graph can tag each request with repository and ticket from headers and export the outcome asynchronously, so spend joins cleanly with Jira and GitHub results.

  • 5

    MCP tool rules stop agents from 'solving' the review bottleneck the dangerous way: allow reading issues and opening PRs, block merging, force-pushing, and deleting branches.

Frequently asked questions

What did the Harvard study on AI coding agents find?

The working paper by Fiona Chen and James Stratton, using Jellyfish engineering telemetry and GitHub signals from more than 700 software firms through March 2026, found coding-agent adoption raised lines of code about 30%, commits 20%, and pull requests 23%, while the resolution of Jira issues and epics did not change significantly. Time from PR submission to merge rose about 49% and comments per PR about 35%.

Can Claude Code and other coding agents run through Odock?

Yes, for tools that let you set a base URL. Odock exposes native Anthropic Messages, OpenAI Chat Completions and Responses, Gemini, Mistral including Codestral fill-in-the-middle, and vLLM endpoints. Point the tool's base URL at Odock and use an Odock virtual API key instead of the provider key.

How do I attribute AI coding spend to tickets?

Have the agent send repository and ticket headers, for example with ANTHROPIC_CUSTOM_HEADERS in Claude Code. A pre-route flow copies them into request metadata, and a post-response flow sends model, tokens, status, and ticket to your warehouse with a webhook. Join that with Jira resolution data to compute cost per resolved issue.

Should we cap coding-agent spend?

Cap it per team with budgets, not per developer by hand. Odock reserves estimated cost before the upstream call and returns a clear 402 budget_exceeded when a window is exhausted, which stops runaway agent loops without blocking the rest of the organisation.

Why govern the GitHub MCP server?

Because the bottleneck is review. The fastest way to make an agent look productive is to let it merge its own pull requests. MCP tool allowlists and blocklists keep agents on reading, branching, and opening PRs, while merges, force-pushes, and deletions stay with humans.

Know what every coding agent costs, and what it shipped

Odock gives each developer and agent a virtual key, enforces team budgets before the call, governs GitHub and CI tools over MCP, and records cost and outcome for every request.

Related articles

AI Cost Management7 min

How to Control LLM Costs with Virtual API Keys, Budgets, and Quotas

The fastest way to lose control of AI economics is to let every service hit providers directly with shared credentials. This article shows the operational model teams need instead.

Read article
AI Observability8 min

What to Log, Monitor, and Trace in Production LLM Applications

When AI traffic crosses providers, tools, tenants, and teams, observability has to connect quality, latency, cost, safety, and routing decisions.

Read article
MCP Governance8 min

MCP Server Governance: How to Give AI Agents Tool Access Without Losing Control

Agents become more powerful when they can call tools. They also become riskier unless tool permissions, audit trails, and policy checks live in a central gateway.

Read article
AI Workflows11 min

Jev Meets the Gateway: Millisecond AI Decisions with Odock Flow Studio and Plugins

Jev is the first 'System One' decision model: typed answers with probabilities, no generated text. Put it inside the gateway with Flow Studio and every request, agent step, and MCP tool call can get a fast, cheap, auditable decision.

Read article