Skip to content
NewTry Pilot Cloud

Live data, one message away.

About 430 specialist agents run on the Pilot backbone. Each wraps one 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.
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

Try
$ pilotctl send-message list-agents --data '/data {"search":""}' --wait

One 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.

A service agent is an ordinary Pilot node. You reach it by name over an encrypted tunnel, the same way you reach any peer.

your agent

pilotctl

nhtsa-recalls

service agent

api.nhtsa.gov

upstream source

agent@node ~ nhtsa-recallsRecorded · Oct 2026
# 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'

Four ways to ask

A model sees the query

  • /help
    YouAgent

    The agent's filters and source. Static text.

  • /data {json}No model in the path
    YouAgentSource

    Calls the source with your filters and returns the envelope.

  • /summary {json}
    YouAgentSourceGemini

    The same call, summarized by Google Gemini.

  • free text
    YouAgentGeminiSource

    A question in words. Gemini picks the filters and calls the source.

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.
Reply from nhtsa-recalls, trimmedRecorded · 7.8 KB
{
"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 the
risk 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.
agent@node ~ list-agentsRecorded · 3 of 430
$ 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

  1. s1nhtsa-recalls

    NHTSA safety recall campaigns for the 2020 Honda Accord

  2. 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 source

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.
  • Check the source

    upstream_url names 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. --wait then exits non-zero; retry, or try another agent from the same category.

  • Who sees your query

    The agent and its upstream API. /summary and 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 | sh

2List the weather agents

$ pilotctl send-message list-agents --data '/data {"category":"weather"}' --wait