Skip to content

Candidates and filters

Every agent of the workspace goes through the filters for each card. A candidate that fails a filter is recorded with that filter’s reason code and is not scored. A candidate that passes them all is scored.

An agent outside the candidate set goes through the first filter only. Every other candidate goes through all of them, so its record says each thing that was wrong, not just the first.

In the order they run:

Filter Rejects with Passes when
roster not-on-roster the agent is in the candidate set: on AgentPod’s roster for the board, or (with all) reporting its load
capability capability-missing the agent has the capability the stage asks for (SuperPipeline’s capability_mismatch)
grant grant-denied the card’s dispatch grant covers the agent (SuperPipeline’s grant_denied)
claimable not-claimable SuperPipeline would let the agent claim the card, for every other reason it gives
isolation isolation-too-weak the station is isolated at least as strongly as the stage asks
model model-mismatch the station runs one of the models the stage asks for
tools tool-missing the station has every tool the stage asks for
credentials credential-missing the station reaches every credential name the stage asks for
policy policy-denied the workspace’s dispatch policy lets the agent take this work
health unhealthy the agent is healthy by its load: ready to take a card held for it
capacity at-capacity the agent is under its board’s concurrency (SuperPipeline’s concurrency_reached)
idle not-idle the agent has less in hand than its capacity anywhere in the workspace
held holding-another the agent holds no other card now
noShow recently-no-show the agent has not let two holds lapse unclaimed in the last 30 minutes
passedOver passed-over the agent’s hold on this card has not already lapsed in the card’s current ladder

not-on-roster. At first SuperDispatch places only agents on AgentPod’s roster for the board. An agent that claims with its own token is recorded as outside the set and keeps working by pull, as it did before. SUPERDISPATCH_CANDIDATES=all widens the set.

capability-missing, grant-denied, at-capacity, not-claimable. SuperPipeline’s eligibility read judges every agent of the workspace for the card and gives its reasons. SuperDispatch names three of them with its own filters. Any other reason, including one a later SuperPipeline release adds, and an “ineligible” with no reason at all, is not-claimable.

The station filters (isolation-too-weak, model-mismatch, tool-missing, credential-missing) run only for a stage that states what a station needs. Each rejection records what the station lacks. See Station filters.

policy-denied runs only with SUPERDISPATCH_POLICY=on, and only narrows. See The dispatch policy.

unhealthy and not-idle read the load shape. For a rostered agent, idle means no work in hand at all: capacity is 1. This is the workspace-wide cap the charter asks for, so a hold is only ever made for an idle agent. SuperPipeline’s per-board concurrency (at-capacity) stays as it is.

holding-another. One live hold per agent. An agent claims one card at a time, so a second hold could only lapse against it.

recently-no-show. Each hold that lapses unclaimed is a no-show for its agent. Two within 30 minutes, on any cards, shut the agent out of every tier until the older one ages out. On a card open to any match it can still claim by pull.

passed-over. Once an agent’s hold on a card lapses, the card’s ladder moves on without it. A new ladder starts when the card reaches another stage, comes back after a claim, or a person moves it.

A candidate that fails only for its load (at-capacity, not-idle, holding-another, or unhealthy while it has no room) will pass once its work in hand is done. When nobody is eligible and such a candidate exists, the card waits for the next pass (waiting-on-load or waiting-on-holds) and nothing is recorded. See When nobody is chosen.