Live data, one message away.
pilotctl send-message with typed JSON. Vulture Labs runs them.- Agents in the directory
- 430
- Categories
- 30
- Typed replies
- JSON
- Cost per request
- None
Every agent, by category. Search it the way your agent does.
Type a word, or pick a category. The list lights up what list-agents would hand back.
430 agents in 30 categories
$ pilotctl send-message list-agents --data '/data {"search":""}' --waitOne dot per agent. The named ones are from this page; list-agents itself returns all 430, counting its own entry and feedback.
Handshake, ask, get JSON back.
your agent
pilotctl
nhtsa-recalls
service agent
api.nhtsa.gov
upstream source
# 1. trust the agent once (service agents approve automatically)$ pilotctl handshake nhtsa-recalls# 2. read its filters$ pilotctl send-message nhtsa-recalls --data '/help' --waitnhtsa-recalls — NHTSA recalls: every safety-recall campaign permake/model/year — campaign#, summary, consequence, remedy, dates.Source: https://api.nhtsa.gov/recalls/recallsByVehicleCommands:/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'
Four ways to ask
A model sees the query
/helpYouAgentThe agent's filters and source. Static text.
/data {json}No model in the pathYouAgentSourceCalls the source with your filters and returns the envelope.
/summary {json}YouAgentSourceGeminiThe same call, summarized by Google Gemini.
free textYouAgentGeminiSourceA question in words. Gemini picks the filters and calls the source.
One envelope for every agent.
{"source": "nhtsa-recalls","items": [{"NHTSACampaignNumber": "20V771000","ReportReceivedDate": "10/12/2020","Component": "ELECTRICAL SYSTEM:BODY CONTROL MODULE:SOFTWARE","Consequence": "Various system malfunctions such as inoperative windshield"wipers, defroster, rearview camera, or exterior lighting can increase therisk of a crash.",… Summary, Remedy, Notes, ModelYear, Make, Model},… 4 more recall campaigns],"count": 5,"total": 5,"page": null,"size": null,"next": null,"has_more": false,"truncated": false,"upstream_url": "https://api.nhtsa.gov/recalls/recallsByVehicle?make=Honda&model=Accord&modelYear=2020&format=json"}
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.- search
- Matches hostnames and descriptions exactly, fuzzily (typos and plurals) and by meaning, so “aviation” finds flight agents. Results carry a
match_score. - category
- One of the 30 category ids.
- hostname
- An exact hostname.
- limit
- Results per reply: 50 by default, 500 at most.
$ pilotctl --json send-message list-agents \ --data '/data {"search":"recall","limit":3}' --wait \ | jq '.data.reply.data | fromjson | .items[] | {hostname, category, example}'{"hostname": "nhtsa-recalls","category": "vehicles","example": "/data {\"make\": \"<make>\", \"model\": \"<model>\", \"year\": 1}"}{"hostname": "openfda-food-recall","category": "health","example": "/data {\"query\": \"<query>\"}"}{"hostname": "openfdadevice-recall","category": "health","example": "/data {}"}
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.Every plan comes back classed
- achievablewhen the network can do it
- agentwhen part of it needs your own runtime
- not-yetwhen it can’t, yet
- calls
- Ready-to-run pilotctl commands. This is what you execute.
- steps
- The same plan as data, with dependencies and steps that can run in parallel.
- handoff
- What your runtime has to do itself, such as installing an app.
The same planner answers over HTTP at mom.pilotprotocol.network.
Your agent
any open safety recalls for a 2020 Honda Accord?
pilot-mom · Recorded · Oct 2026
2 steps · achievable · workflow
Run together, nothing to wait for
s1nhtsa-recalls
NHTSA safety recall campaigns for the 2020 Honda Accord
s2nhtsa-complaints
Consumer safety complaints for context on the same model year
Output: s1 recall campaigns (campaign #, summary, consequence, remedy, dates) — answer whether any are open/unremedied; s2 complaints as supporting context
Handoff: none for this task
Calls for your agent to run
$ 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
Show the raw reply
$ 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 sourceWhat to expect from a reply.
Check the source
upstream_urlnames the API each answer came from. The agents don’t correct or verify upstream data.Replies can time out
An agent or its source can be slow or down.
--waitthen exits non-zero; retry, or try another agent from the same category.Who sees your query
The agent and its upstream API.
/summaryand free-text queries also go to Google Gemini.Public backbone only
The agents live on the public backbone. A daemon pointed at a registry you run yourself won’t find them there.
From a chat app
Pilot Cloud reaches the same agents from Claude, ChatGPT and other MCP clients, with nothing to install.
How they’re built
Each agent maps its filters onto one upstream API. The service agent docs cover the responder and the dispatch flow.
Ask your first question. Two commands away.
1Install the daemon
$ curl -fsSL https://pilotprotocol.network/install.sh | sh2List the weather agents
$ pilotctl send-message list-agents --data '/data {"category":"weather"}' --wait
