Skip to content
Latchkey

Azure Pipelines "No agent found in pool ... satisfies demands"

Your job declared a demand (a required capability) that no agent in the target pool advertises. The scheduler cannot match the job to any agent, so it never runs.

What this error means

The job sits unassigned, then fails with No agent found in pool <name> which satisfies the specified demands, listing the demand it could not meet (e.g. a tool name or a custom capability).

Azure DevOps
##[error]No agent found in pool 'Default' which satisfies the specified
demands: docker, Agent.Version -gtVersion 2.200.0

Diagnose it: variables, expressions, or the agent?

Azure Pipelines resolves compile-time expressions (${{ }}) before the run and runtime expressions ($[ ]) during it. Using the wrong one is the most common source of a value that is empty when you read it.

azure-pipelines.yml
# print what the job actually resolved
- script: |
    echo "reason: $(Build.Reason)"
    echo "branch: $(Build.SourceBranch)"
    env | sort | head -40
  displayName: Dump context

# enable full diagnostics on a run: set system.debug = true as a variable

Common causes

A demanded capability no agent has

A demands: entry (e.g. a tool, or Agent.Version) does not match any agent’s advertised capabilities. Self-hosted agents only have the capabilities of the software installed on them.

Targeting the wrong pool

The pool you named has no agents with the needed capability - the right agents live in a different pool, or the pool is empty.

How to fix it

Match demands to real agent capabilities

List only demands the pool’s agents actually advertise, or install the missing capability on the agent.

azure-pipelines.yml
pool:
  name: Default
  demands:
    - docker          # only demand what an agent in this pool has

Inspect and fix agent capabilities

  1. In Project Settings → Agent pools, open an agent and review its Capabilities tab.
  2. Install the missing tool on the agent (capabilities auto-detect on restart), or add a user capability.
  3. Confirm the job targets the pool that actually contains those agents.

How to prevent it

  • Keep demands minimal - only what the job truly needs.
  • Standardize agent images so capabilities are consistent across a pool.
  • Document each pool’s installed tooling so jobs target the right one.

Frequently asked questions

What causes Azure Pipelines "No agent found in pool ... satisfies demands"?
There are 2 common causes: a demanded capability no agent has and targeting the wrong pool. A demands: entry (e.g.
How do I fix Azure Pipelines "No agent found in pool ... satisfies demands"?
There are 2 fixes depending on which cause you have: match demands to real agent capabilities and inspect and fix agent capabilities. Work through them in order, since the first is the most common.
What does Azure Pipelines "No agent found in pool ... satisfies demands" actually mean?
The job sits unassigned, then fails with No agent found in pool <name> which satisfies the specified demands, listing the demand it could not meet (e.g.
How do I stop Azure Pipelines "No agent found in pool ... satisfies demands" happening again?
Keep demands minimal - only what the job truly needs. The prevention section lists 3 changes that keep it from recurring.

Related guides

References

Not every red build is your code. Latchkey repairs the ones that are not, on the runner. Start free → 30-day trial · No credit card