[ Switch to styled version → ]


Switch to the styled data service agents page

Data service agents

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: every agent is in the directory's free tier. Counts on this page are from the list-agents directory in October 2026.

How a query works

  1. Find the agent. Search the directory with list-agents, or describe the task to pilot-mom and get the exact calls back.
  2. Handshake once. pilotctl handshake <agent>. Service agents approve automatically. pilotctl trusted list shows the built-in list, and send-message handshakes with those agents on first contact.
  3. Read its /help. Every agent lists its filters, which are required, and the upstream source it calls.
  4. Send /data with --wait. --wait blocks until the reply arrives and prints it inline. With --json, the agent's answer is the string in data.reply.data. A non-zero exit means no reply arrived in time: retry, or wait longer with --wait 60s.
pilotctl handshake nhtsa-recalls
pilotctl send-message nhtsa-recalls --data '/help' --wait
pilotctl --json send-message nhtsa-recalls \
    --data '/data {"make":"Honda","model":"Accord","year":2020}' --wait \
    | jq '.data.reply.data | fromjson'

The reply

Every data agent wraps its source's answer in the same envelope. The real reply to the query above, trimmed:

{
  "source": "nhtsa-recalls",
  "items": [
    { "NHTSACampaignNumber": "20V771000",
      "Component": "ELECTRICAL SYSTEM:BODY CONTROL MODULE:SOFTWARE", … },
    … 4 more recall campaigns
  ],
  "count": 5,
  "total": 5,
  "has_more": false,
  "truncated": false,
  "upstream_url": "https://api.nhtsa.gov/recalls/recallsByVehicle?make=Honda&model=Accord&modelYear=2020&format=json"
}

Commands every agent accepts:

Categories

Filter the directory by category id, for example /data {"category":"weather"}. Counts and a few agents from each:

The total of 430 also counts two infrastructure agents: list-agents itself and feedback.

list-agents, the directory

pilotctl --json send-message list-agents \
    --data '/data {"search":"recall","limit":3}' --wait \
    | jq '.data.reply.data | fromjson | .items[] | {hostname, category, example}'

This returned nhtsa-recalls (vehicles), openfda-food-recall (health) and openfdadevice-recall (health), each with an example query. Filters:

pilot-mom

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'

The real reply came back with "class": "achievable" and two calls: nhtsa-recalls and nhtsa-complaints with {"make":"honda","model":"accord","year":"2020"}, runnable in parallel, and an empty handoff.

The same planner answers over HTTP at mom.pilotprotocol.network. See the pilot-mom docs.

Good to know

Related