Capacity planning for an AI agent fleet means forecasting the resources that actually constrain it — token throughput, provider rate-limit quota, and downstream tool or API limits — against a measured demand trend, rather than provisioning compute the way you would for a stateless web service. The unit of scarcity is different, and treating it like a CPU-bound capacity problem produces a plan that says nothing about the constraint that will actually page you.
This matters because agent workloads scale their resource consumption per request in a way traditional services don't. A web request costs roughly the same CPU cycles every time. An agent task might complete in one model call or twenty, depending on how many tool calls, retries, or sub-agent delegations it needs. Capacity planning has to account for that variance, not just multiply a per-request cost by a request count. For the observability foundation this planning depends on, see observability for AI agents and token usage forecasting and capacity planning.
Why compute-based capacity planning fails here
Traditional capacity planning asks: how many requests per second can this service handle before CPU, memory, or connection pools saturate? The answer scales roughly linearly with instance count, which is why horizontal autoscaling works.
An agent fleet's bottleneck is rarely the compute running the agent host. It's usually one of:
- Provider rate limits. Requests-per-minute and tokens-per-minute ceilings set by the model provider, shared across every agent calling that provider under the same credential or organization.
- Token budget. A cost or governance ceiling your own organization has set, independent of whether the provider would allow more traffic.
- Downstream tool and API limits. The systems an agent calls through tools — a CRM, a ticketing system, an internal API — have their own rate limits that don't scale just because you added agent worker instances.
Adding compute does nothing for any of these. You can run one hundred agent worker processes against a provider quota that allows a fixed number of requests per minute, and the hundred-and-first process buys you nothing but more processes waiting in line. This is the single most common capacity-planning mistake teams make when they bring conventional SRE instincts to agent infrastructure: they solve for the wrong resource.
The signals that actually govern agent capacity
| Signal | What it measures | Why it matters more for agents |
|---|---|---|
| Token throughput (input + output) | Volume of tokens processed per unit time, per agent and per organization | Provider quotas are usually expressed in tokens-per-minute, not requests-per-minute |
| Concurrent in-flight tasks | Number of tasks actively running, not yet terminal | A task can be "in flight" for seconds to minutes; concurrency, not request rate, drives provider load |
| Task fan-out | Average number of model and tool calls per task | The same task volume can produce very different load depending on how many hops each task takes |
| Downstream tool call rate | Calls per minute to each external tool or API an agent depends on | A tool's own rate limit becomes the fleet's ceiling if it's tighter than the model provider's |
| Queue depth and wait time | Backlog of tasks waiting for a worker or provider slot | The earliest visible symptom of a capacity ceiling being approached, well before failures appear |
None of these map cleanly onto CPU or memory graphs. A fleet can be capacity-constrained while every agent worker process sits nearly idle, because the constraint is a provider response, not a local resource.
Building your baseline
You cannot plan capacity against a number you haven't measured. The baseline-building method is the same regardless of the specific tool you use to collect it:
- Instrument token consumption and task counts per agent and per organization. This is table stakes — see observability for AI agents for the instrumentation pattern.
- Track over a rolling multi-week window, not a single day. Agent traffic tends to follow weekly and sometimes monthly cycles — batch jobs, reporting periods, seasonal business activity — that a short window won't reveal.
- Separate peak from average. The average tells you what steady-state cost looks like. The peak-to-average ratio tells you how much headroom you actually need, and that ratio is specific to your workload, not a constant you can borrow from another team's post.
- Record near-misses, not just outages. If a queue backed up and drained before anyone noticed, that's a data point about how close you are to the ceiling, and it will not show up in an uptime metric.
Once you have that baseline, capacity planning becomes a forecasting exercise: project the trend forward, compare the projection against your known ceilings (provider quota, budget cap, tool rate limits), and identify which ceiling you'll hit first and roughly when.
Sizing headroom without inventing a number
The temptation is to pick a flat safety margin — "we run at half of quota" — because it sounds prudent. The problem is that a flat margin is either wasteful or dangerously thin depending on your workload's actual variance, and you have no way to know which without measuring it.
The better method: size headroom against your own observed peak-to-average ratio and its trend over time. A fleet whose peak is consistently close to its average has predictable demand and needs less headroom. A fleet with sharp, unpredictable spikes — driven by a scheduled batch job, an end-of-month reporting cycle, or bursty user-triggered workflows — needs headroom proportional to the size and frequency of those spikes, derived from the spikes you've actually observed, not a percentage borrowed from a blog post. Revisit the ratio on the same cadence you revisit the baseline; workloads drift, and a headroom figure calculated from stale data is a guess with false precision.
What happens when you approach a ceiling
Decide the escalation order in advance, before a ceiling is under pressure, because that is the worst time to design a procedure:
- Shed or defer low-priority work first. Not every task needs to run at the moment it's requested. Background or best-effort tasks can queue longer than user-facing ones. This requires the priority distinction to exist before the incident, not be invented mid-incident.
- Queue and backpressure rather than fail. A task waiting behind a full queue is recoverable. A task that fails outright because a worker rejected it under load usually isn't, without a retry path. See retry and idempotency for agent workflows and DLQ recovery for failed agent jobs for how that queue should behave when it's also failing.
- Request a provider quota increase. This is usually the slowest lever — it depends on the provider's process — so it should be triggered by trend data well ahead of the ceiling, not by an active incident.
- Route to a secondary model or provider. A configured fallback absorbs excess demand if it exists and has been exercised beforehand. See model routing and cost-quality tradeoffs.
- Apply hard caps as the backstop. A budget or rate-limit ceiling that fails closed is what prevents an unbounded-demand scenario from becoming an unbounded-cost scenario. See budgets versus rate limits and how to rate-limit AI agents.
A worked example of the decision procedure
Suppose your queue-depth graph shows backlog building steadily over several days, without a corresponding drop in success rate yet. Here's the decision procedure, in order:
- Check which resource is actually constrained. Pull token throughput, concurrency, and downstream tool call rate for the affected agents. If token throughput is flat while queue depth grows, the bottleneck isn't the provider — check downstream tool limits or an internal worker misconfiguration instead.
- Compare current trend against your baseline. Is this a one-off spike (a single large batch job) or a sustained trend (organic growth in task volume)? The baseline is what tells the difference; without it, every backlog looks like an emergency.
- If it's a spike, shed low-priority work and let it drain. No structural change needed.
- If it's a sustained trend, forecast forward. At the current growth rate, when does projected demand cross your known ceiling? If that's weeks away, start a quota increase request now — it's slow. If it's days away, prepare the fallback routing path and confirm it's been tested recently.
- After resolution, fold the episode into your baseline. A near-miss that wasn't followed by a capacity change will recur.
Capacity planning checklist
- Token consumption and task volume are tracked per agent and per organization, not just fleet-wide.
- You have a rolling multi-week baseline, refreshed on a fixed cadence, not a one-time snapshot.
- Provider rate limits, token budgets, and downstream tool limits are all documented as known ceilings, not just the one you've hit before.
- Headroom is derived from your measured peak-to-average ratio, not a flat percentage.
- The escalation order — shed, queue, request increase, fall back, hard-cap — is written down and has an owner for each step.
- The fallback routing path has been exercised recently, not just configured.
- Near-misses are logged and reviewed, not only outright outages.
Common questions
Does autoscaling worker instances help with agent capacity? It helps with the part of the pipeline that is genuinely compute-bound — orchestration overhead, local guardrail evaluation, queue processing — but it does nothing for a provider-side rate limit or a downstream tool's fixed capacity. Size your worker pool to your compute needs and treat provider and tool limits as separate, harder ceilings that autoscaling cannot move.
How is this different from an SLO for latency? An SLO tells you whether current performance is within an agreed target right now. Capacity planning is the forward-looking exercise of forecasting whether you'll still be within that target given projected growth. They use overlapping data but answer different questions — see SLOs for AI services for how the two connect. Multi-region and provider-fallback design, covered in high availability for an AI control plane, is the complementary discipline for what happens when a ceiling is hit unexpectedly rather than forecast in advance.
What good looks like
A capacity-ready agent fleet has per-agent and per-org demand signals instrumented before they're needed, a multi-week baseline that gets refreshed rather than left stale, headroom sized from measured variance rather than folklore, and a written, rehearsed escalation order that starts with shedding low-priority work and ends with a hard cap that actually holds. The test of a good plan isn't whether it prevents every ceiling from ever being reached — it's whether hitting one is a known, orderly event rather than a surprise.