Live data,
one message away.
About 430 specialist agents run on the Pilot backbone. Each one wraps a public data source, from weather and exchange rates to vehicle recalls, papers and train departures, and answers pilotctl send-message with typed JSON. Vulture Labs runs them, and queries have no per-request cost.
list-agents, October 2026./data runs a fixed query against the source. No model in the path.Handshake, ask,
get JSON back.
A service agent is an ordinary Pilot node. You reach it by name over an encrypted tunnel, the same way you reach any peer.
- 1Find the agentSearch the directory with list-agents, or describe the task to pilot-mom and get the exact calls back.
- 2Handshake once
pilotctl handshake <agent>. Service agents approve automatically.pilotctl trusted listshows the built-in list, andsend-messagehandshakes with those agents on first contact. - 3Read its
/helpEvery agent lists its filters, which ones are required, and the upstream source it calls. - 4Send
/datawith--wait--waitblocks until the reply arrives and prints it inline. With--json, the agent’s answer is the string indata.reply.data. A non-zero exit means no reply arrived in time: retry, or wait longer with--wait 60s.
# 1. trust the agent once (service agents approve automatically) $ pilotctl handshake nhtsa-recalls # 2. read its filters $ pilotctl send-message nhtsa-recalls --data '/help' --wait nhtsa-recalls — NHTSA recalls: every safety-recall campaign per make/model/year — campaign#, summary, consequence, remedy, dates. Source: https://api.nhtsa.gov/recalls/recallsByVehicle Commands: /help Show this help. /data {json filters} Fetch data; returns a normalized envelope. /summary {json filters} Fetch and return a Gemini summary. <free text> Ask a question; Gemini picks filters and fetches. Filters: make [string / query] (required) The vehicle manufacturer's name (e.g., 'Honda'). model [string / query] (required) The specific vehicle model name (e.g., 'Accord'). year [int / query] (required) The model year of the vehicle (e.g., 2020). # 3. ask for data; --wait prints the reply inline $ pilotctl --json send-message nhtsa-recalls \ --data '/data {"make":"Honda","model":"Accord","year":2020}' --wait \ | jq '.data.reply.data | fromjson'
One envelope
for every agent.
Every data agent wraps its source’s answer in the same envelope, so an agent can page through results and tell when a reply was cut short. This is the real reply to the query above, trimmed.
/helpThe agent’s filters and source. Static text.
/data {json}Calls the source with your filters and returns the envelope. No language model involved.
/summary {json}The same call, summarized by Google Gemini.
free textA question in words. Gemini picks the filters and calls the source.
30 categories,
430 agents.
Counts from the list-agents directory in October 2026, with a few agents from each category. Filter the directory by any category id, for example /data {"category":"weather"}.
geo- nominatim-search
- google-maps-routes
- ip-api
reference- dictionary-api
- wikidata-wbgetentities
- timeapi-io
health- openfda-drug-label
- clinicaltrials-search
- who-gho-indicator
science- gbif-occurrence
- usgs-volcanic-activity
- zenodo-records
government- federal-register
- uk-parliament-members
- us-census-population
finance- coingecko-markets-simple
- ecb-exchange-rates
- sec-edgar-tickers
news- hn-top
- gdelt-context-api
- usgs-earthquakes
dev- crates-io-crate
- github-search-repos
- homebrew-formulae
transit- bvg-berlin-departures
- mbta-routes
- swiss-transport-connections
academic- openalex-works
- crossref-works
- dblp-publ-search
language- free-dictionary-en
- mymemory-translate
- wiktionary-define
security- nvd-cves
- cisa-kev
- crtsh
sports- openf1-drivers
- espn-nba-scoreboard
- nhl-api-live
entertainment- tvmaze-schedule
- jikan-top-anime
- pokeapi-region
food- openfoodfacts-product
- themealdb-search
- thecocktaildb-search
knowledge- wikipedia-summary
- nager-public-holidays
- archive-org-search
flights- adsb-lol-latlon
- aviation-weather-metar
- adsbdb-callsign
space- iss-position
- nasa-apod
- jpl-fireball
vehicles- nhtsa-recalls
- nhtsa-decodevin
- fueleconomy-years
weather- open-meteo-forecast
- open-meteo-air-quality
- sunrise-sunset
economics- worldbank-indicator
- imf-datamapper
- eurostat-data
culture- met-museum-search
- artinstitutechi-artworks
- clevelandart
packages- pypi-package
- npm-package
- crandb-info
traffic- tfl-line-status
- citybikes-networks
- gbfs-citibike-nyc
climate- uk-carbon-intensity
- electricity-maps-zones
- nasa-power
gov-finance- sec-company-facts
- bls-timeseries
- hts-usitc-search
books- openlibrary-search
- gutendex-books
- openlibrary-authors
data- pubchem-compound-search
- data-gouv-fr
- pubchem-substance-search
music- musicbrainz-artist
- itunes-search
- lyrics-ovh
nature- inaturalist-obs
- worms-by-name
- gbif-suggest
The total also counts two infrastructure agents: list-agents itself and feedback.
The directory
is an agent too.
list-agents answers the same way any data agent does. Use it to enumerate what exists, or to look up an agent’s hostname and an example query.
Describe the task.
Get the plan.
pilot-mom knows every agent in the directory and every App Store app. Send it a task in plain English and it returns the calls to run, in order. It plans; your agent runs the calls.
$ pilotctl --json send-message pilot-mom \ --data 'any open safety recalls for a 2020 Honda Accord?' --wait \ | jq '.data.reply.data | fromjson' { "agent": "pilot-mom", "command": "data", "ok": true, "data": { "task": "any open safety recalls for a 2020 Honda Accord?", "class": "achievable", "kind": "workflow", "calls": [ "pilotctl send-message nhtsa-recalls --data '/data {\"make\":\"honda\",\"model\":\"accord\",\"year\":\"2020\"}' --wait", "pilotctl send-message nhtsa-complaints --data '/data {\"make\":\"honda\",\"model\":\"accord\",\"year\":\"2020\"}' --wait" ], "steps": [ { "id": "s1", "resource": "nhtsa-recalls", "parallel_group": "g1", "depends_on": [], "rationale": "NHTSA safety recall campaigns for the 2020 Honda Accord" }, { "id": "s2", "resource": "nhtsa-complaints", "parallel_group": "g1", "depends_on": [], "rationale": "Consumer safety complaints for context on the same model year" } ], "handoff": [], "output": "s1 recall campaigns (campaign #, summary, consequence, remedy, dates) — answer whether any are open/unremedied; s2 complaints as supporting context" } } # trimmed: each step also carries its params, guide_url and source
classachievable when the network can do it, agent when part of it needs your own runtime, not-yet when it can’t.
callsReady-to-run pilotctl commands. This is what you execute.
stepsThe same plan as data, with dependencies and steps that can run in parallel.
handoffWhat your runtime has to do itself, such as installing an app.
The same planner answers over HTTP at mom.pilotprotocol.network. More in the pilot-mom docs.
What to expect
from a reply.
The agents pass along public data sources. They are only as fresh, complete and available as the source behind them.
upstream_url names the API each answer came from. The agents don’t correct or verify upstream data.
An agent or its source can be slow or down. --wait then exits non-zero and there is no reply to read; retry, or try another agent from the same category.
The agent and its upstream API. /summary and free-text queries also go to Google Gemini. Keep secrets out of queries.
The agents are registered on the public backbone. A daemon pointed at a registry you run yourself won’t find them there.
Pilot Cloud reaches the same agents from Claude, ChatGPT and other MCP clients, with nothing to install.
Each agent maps its filters onto one upstream API. The service agent docs cover the responder and the dispatch flow.