Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
100
A2A live JSON-RPC A2A 0.3.0 v0.219.2

Whisper

whisper.online · Whisper Security

Give an AI agent a stable, routable IPv6 address of its own and egress that anyone can verify from outside. Use this when you need a fixed IP your traffic actually leaves from, an identity another service can check independently by reverse DNS and RDAP rather than taking your word for it, or control over what an agent is allowed to reach and a record of what it did. It also answers security questions about any domain, address or file hash from the Whisper graph, with no account at all. The address space is AS219419, which we run; an email address alone is enough to get a key.

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain whisper.online via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership
🔔 Watch this agent. Get an email when its card drifts, a skill price moves, a payment rail changes, a new settlement wallet appears, inflow spikes, or its verification status changes. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
76/100
grade B · 9 criteria
Uptime
100.0%
5 direct probes · 30d
~13 ms response
Observed inflow · 30d
no payment wallet declared
Invocations · 7d
0
no calls observed
Card drift · 7d
changed
2 snapshots tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

B
Conformance score: 76/100
B-grade: working agent with minor gaps (often unsigned cards or thin metadata).
click to expand breakdown ▾ click to collapse breakdown ▴
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~13 ms).
partial Protocol version 5/10
Declares pre-1.0 A2A 0.3.0 (Google preview). Upgrade to v1.x for full points.
How to earn +5 points
Declare protocolVersion
Add `"protocolVersion": "1.0"` to every entry in `supportedInterfaces[]`. A2A v1.0 removed the AgentCard root field.
Docs →
info JWS signature 0/10
Card is unsigned (most published agents are).
pass Uptime track record 15/15
5/5 probes succeeded (100% uptime).
pass Skill declaration 10/10
Declares 37 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Whisper Security (https://whisper.online). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs →
pass Freshness + modern flags 4/5
seen in upstream source within 0d
partial Security declaration 2/5
Declares 1 security scheme(s) but none use PKCE or mTLS.
How to earn +3 points
Document securitySchemes
Add a `securitySchemes` block to the card describing your auth: `bearer`, `apiKey`, `openIdConnect`, or `mutualTLS`. Routers refuse to call agents that declare no auth model.
Docs →
⚠ Card drift detected. This agent's agent-card.json changed within the last 7 days. We track these so downstream callers can react.

Activity (audit trail)

last 24h · 0 invocations Public aggregate · no PII recorded

Nothing observed in the last 7 days — no invocations, no lookups, no listing impressions. Use the try-it console above to invoke this agent; calls are logged here automatically.

Card history

2 snapshots drifted 1× Every change to agent-card.json
Captured Hash
2026-09-18 16:47:09 current 7c5f7764ce05… view →
2026-09-18 10:35:02 5e54859f4237… view →
Uptime
100.0%
5 direct probes · 30d
Response
16ms
last direct probe
Skills
37
declared
Streaming
SSE-capable

Try it

Send a message to this agent live. Your prompt is proxied through Agenstry.

calling agent…

Skills · 37 declared · mapped to canonical taxonomy

Get a Whisper API key

Start or complete Whisper signup from an email address alone, and receive an API key that unlocks the provisioning and governance skills on this card. Send {"em…

canonical Audio Transcription match 80%
onboardingsignupcredentialskeyless
identify

Identify an indicator (domain, IP, hash, …) against the graph. Answers without an API key.

canonical Network Intelligence match 85%
graphcognitionkeyless
assess

Assess the risk/policy posture of one or more indicators. Answers without an API key.

canonical AssessAction match 85%
graphcognitionkeyless
walk

Walk the graph from an indicator across its relationships. Answers without an API key.

canonical Machine Reasoning Graph match 84%
graphcognitionkeyless
watch

Watch an indicator for change/activity over time. Answers without an API key.

canonical WatchAction match 87%
graphcognitionkeyless
submit

Submit an observation/claim into the graph. Writes to the graph, so it needs your API key: an anonymous claim would not be attributable.

canonical Documentation Generation match 84%
graphcognitionapi-key
explain

Explain a verdict - the evidence and reasoning behind it. Answers without an API key.

canonical Machine Reasoning Graph match 85%
graphcognitionkeyless
variants

Enumerate variants/permutations of an indicator. Answers without an API key.

canonical Maps and Routing match 83%
graphcognitionkeyless
origins

Trace the origins/provenance of an indicator. Answers without an API key.

canonical Semantic Code Search match 84%
graphcognitionkeyless
history

Historical records for an indicator (incl. whois/bgp history). Answers without an API key.

canonical Semantic Code Search match 83%
graphcognitionkeyless
lookupTlsFingerprint

Look up a TLS (JA3/JA4) fingerprint in the graph. Answers without an API key.

canonical GraphQL Client match 82%
graphcognitionkeyless
lookupTorRelay

Look up Tor relay metadata for an address. Answers without an API key.

canonical Semantic Code Search match 84%
graphcognitionkeyless
asset

Resolve an asset and its catalog of attributes. Answers without an API key.

canonical Api Schema Understanding match 83%
graphcognitionkeyless
threatintel

Threat-intelligence indicator family (candidate apex/CDN/hosting). A family verb: name the sub-verb as "sub" alongside the input. Sub-verbs: candidateCdnApex, c…

canonical Threat Detection match 83%
graphcognitionkeylessfamily
psl

Public-suffix-list family (tld-plus-one, is-public-suffix, affiliation). A family verb: name the sub-verb as "sub" alongside the input. Sub-verbs: tldPlusOne, i…

canonical Text-to-Speech match 81%
graphcognitionkeylessfamily
topAsnsByPrefixCount

Top ASNs ranked by announced-prefix count. Answers without an API key.

canonical Semantic Code Search match 83%
graphcognitionkeyless
agents: agent

The agent operation on the Whisper control plane, served as CALL whisper.agents({op:'agent', args:{...}}). Requires your Whisper API key. The identifier in the …

canonical ControlAction match 82%
control-planeagentsagentapi-key
agents: alert

The alert operation on the Whisper control plane, served as CALL whisper.agents({op:'alert', args:{...}}). Requires your Whisper API key. With no arguments it d…

canonical Agent Profiles match 82%
control-planeagentsalertapi-key
agents: connect

The connect operation on the Whisper control plane, served as CALL whisper.agents({op:'connect', args:{...}}). Requires your Whisper API key. With no arguments …

canonical Agent Profiles match 82%
control-planeagentsconnectapi-key
agents: disconnect

The disconnect operation on the Whisper control plane, served as CALL whisper.agents({op:'disconnect', args:{...}}). Requires your Whisper API key. With no argu…

canonical Agent Profiles match 82%
control-planeagentsdisconnectapi-key
agents: domain

The domain operation on the Whisper control plane, served as CALL whisper.agents({op:'domain', args:{...}}). Requires your Whisper API key.

canonical ControlAction match 83%
control-planeagentsdomainapi-key
agents: firewall

The firewall operation on the Whisper control plane, served as CALL whisper.agents({op:'firewall', args:{...}}). Requires your Whisper API key. The identifier i…

canonical Agent Profiles match 82%
control-planeagentsfirewallapi-key
agents: history

The history operation on the Whisper control plane, served as CALL whisper.agents({op:'history', args:{...}}). Requires your Whisper API key. The identifier in …

canonical Agent Profiles match 82%
control-planeagentshistoryapi-key
agents: host

The host operation on the Whisper control plane, served as CALL whisper.agents({op:'host', args:{...}}). Requires your Whisper API key.

canonical ControlAction match 83%
control-planeagentshostapi-key
agents: identity

The identity operation on the Whisper control plane, served as CALL whisper.agents({op:'identity', args:{...}}). Requires your Whisper API key. With no argument…

canonical Agent Profiles match 84%
control-planeagentsidentityapi-key
agents: list

The list operation on the Whisper control plane, served as CALL whisper.agents({op:'list', args:{...}}). Requires your Whisper API key.

canonical Multi Agent Planning match 83%
control-planeagentslistapi-key
agents: logs

The logs operation on the Whisper control plane, served as CALL whisper.agents({op:'logs', args:{...}}). Requires your Whisper API key. With no arguments it des…

canonical Agent Profiles match 82%
control-planeagentslogsapi-key
agents: lookups

The lookups operation on the Whisper control plane, served as CALL whisper.agents({op:'lookups', args:{...}}). Requires your Whisper API key. With no arguments …

canonical Agent Profiles match 82%
control-planeagentslookupsapi-key
agents: partner

The partner operation on the Whisper control plane, served as CALL whisper.agents({op:'partner', args:{...}}). Requires your Whisper API key. It is gated on par…

canonical Agent Profiles match 83%
control-planeagentspartnerapi-key
agents: policy

The policy operation on the Whisper control plane, served as CALL whisper.agents({op:'policy', args:{...}}). Requires your Whisper API key. With no arguments it…

canonical Agent Profiles match 83%
control-planeagentspolicyapi-key
agents: register

The register operation on the Whisper control plane, served as CALL whisper.agents({op:'register', args:{...}}). Requires your Whisper API key.

canonical Agent Profiles match 83%
control-planeagentsregisterapi-key
agents: rename

The rename operation on the Whisper control plane, served as CALL whisper.agents({op:'rename', args:{...}}). Requires your Whisper API key. The identifier in th…

canonical Agent Profiles match 81%
control-planeagentsrenameapi-key
agents: resolver

The resolver operation on the Whisper control plane, served as CALL whisper.agents({op:'resolver', args:{...}}). Requires your Whisper API key. With no argument…

canonical Multi Agent Planning match 82%
control-planeagentsresolverapi-key
agents: revoke

The revoke operation on the Whisper control plane, served as CALL whisper.agents({op:'revoke', args:{...}}). Requires your Whisper API key. The identifier in th…

canonical Agent Profiles match 81%
control-planeagentsrevokeapi-key
agents: task

The task operation on the Whisper control plane, served as CALL whisper.agents({op:'task', args:{...}}). Requires your Whisper API key. The identifier in the ex…

canonical Agent Profiles match 82%
control-planeagentstaskapi-key
agents: token

The token operation on the Whisper control plane, served as CALL whisper.agents({op:'token', args:{...}}). Requires your Whisper API key. The identifier in the …

canonical Agent Profiles match 83%
control-planeagentstokenapi-key
agents: verify

The verify operation on the Whisper control plane, served as CALL whisper.agents({op:'verify', args:{...}}). Requires your Whisper API key.

canonical Agent Profiles match 85%
control-planeagentsverifyapi-key

Health · last 5 probes

When HTTP Live JSON-RPC Latency
2026-09-19 11:52:02 200 16ms
2026-09-19 05:04:26 200 12ms
2026-09-18 22:50:14 200 15ms
2026-09-18 16:47:09 200 18ms
2026-09-18 10:35:02 200 18ms

Similar agents embedding-nearest

invinoveritas-reasoning-agent live
The verification layer for autonomous agents: a neutral, model-agnostic verdict before an irreversible action (/review — capital-scale-aware
invinoveritas · q 100%
api.agishub.com
One server, every tool your agent needs — no API key, no signup. 34 pay-per-call endpoints over x402 (USDC on Base): AI (chat, summarise, cl
api.agishub.com · q 100%
agentgates
Compute and inference for AI agents: a confidential VM (Intel TDX) by the hour and open models by the request, both quoting a real price ove
Agentgates · q 80%
api.craigmbrown.com
$0.01 queryable trust badge summarizing an agent's verified settlement history — the minimum-viable signal to check before a first transacti
api.craigmbrown.com · q 65%
api.truthbear.co
Verify official facts before your AI agent acts — multi-source cross-validation with tamper-proof receipts on Bitcoin. 180+ signals (USGS/NO
api.truthbear.co · q 100%
AI SENSE live
Public workflow tasks for AI agents: wake on an outside event, ask a person to decide, receive email at a disposable address, and capture on
q 100%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/whisper.online.svg)](https://agenstry.com/agents/whisper.online)
[![Verified Business](https://agenstry.com/badge/whisper.online/identity.svg)](https://agenstry.com/agents/whisper.online)
[![Uptime](https://agenstry.com/badge/whisper.online/uptime.svg)](https://agenstry.com/agents/whisper.online)
[![A2A version](https://agenstry.com/badge/whisper.online/protocol.svg)](https://agenstry.com/agents/whisper.online)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "protocolVersion": "0.3.0",
  "name": "Whisper",
  "description": "Give an AI agent a stable, routable IPv6 address of its own and egress that anyone can verify from outside. Use this when you need a fixed IP your traffic actually leaves from, an identity another service can check independently by reverse DNS and RDAP rather than taking your word for it, or control over what an agent is allowed to reach and a record of what it did. It also answers security questions about any domain, address or file hash from the Whisper graph, with no account at all. The address space is AS219419, which we run; an email address alone is enough to get a key.",
  "url": "https://whisper.online/a2a",
  "preferredTransport": "JSONRPC",
  "version": "0.219.2",
  "documentationUrl": "https://whisper.online/llms-full.txt",
  "iconUrl": "https://whisper.online/logo.png",
  "provider": {
    "organization": "Whisper Security",
    "url": "https://whisper.online"
  },
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "securitySchemes": {
    "whisperApiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "X-API-Key",
      "description": "Your Whisper API key. Obtain one with the keyless \"signup\" skill."
    }
  },
  "supportsAuthenticatedExtendedCard": false,
  "defaultInputModes": [
    "text/plain",
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json",
    "text/plain"
  ],
  "skills": [
    {
      "id": "signup",
      "name": "Get a Whisper API key",
      "description": "Start or complete Whisper signup from an email address alone, and receive an API key that unlocks the provisioning and governance skills on this card. Send {\"email\":\"...\"} to start; a six-digit code arrives by email; send {\"signup_id\":\"...\",\"code\":\"123456\"} to complete. No human step, no account needed first.",
      "tags": [
        "onboarding",
        "signup",
        "credentials",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"signup\",\"input\":{\"email\":\"agent@example.com\"}}",
        "{\"skill\":\"signup\",\"input\":{\"signup_id\":\"...\",\"code\":\"123456\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "identify",
      "name": "identify",
      "description": "Identify an indicator (domain, IP, hash, \u2026) against the graph. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"identify\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "assess",
      "name": "assess",
      "description": "Assess the risk/policy posture of one or more indicators. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"assess\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "walk",
      "name": "walk",
      "description": "Walk the graph from an indicator across its relationships. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"walk\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "watch",
      "name": "watch",
      "description": "Watch an indicator for change/activity over time. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"watch\",\"input\":{\"action\":\"list\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "submit",
      "name": "submit",
      "description": "Submit an observation/claim into the graph. Writes to the graph, so it needs your API key: an anonymous claim would not be attributable.",
      "tags": [
        "graph",
        "cognition",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"submit\",\"input\":{\"host\":\"example.com\",\"claim\":\"benign\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "explain",
      "name": "explain",
      "description": "Explain a verdict - the evidence and reasoning behind it. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"explain\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "variants",
      "name": "variants",
      "description": "Enumerate variants/permutations of an indicator. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"variants\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "origins",
      "name": "origins",
      "description": "Trace the origins/provenance of an indicator. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"origins\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "history",
      "name": "history",
      "description": "Historical records for an indicator (incl. whois/bgp history). Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"history\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "lookupTlsFingerprint",
      "name": "lookupTlsFingerprint",
      "description": "Look up a TLS (JA3/JA4) fingerprint in the graph. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"lookupTlsFingerprint\",\"input\":\"ja3:771,4865-4866-4867\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "lookupTorRelay",
      "name": "lookupTorRelay",
      "description": "Look up Tor relay metadata for an address. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"lookupTorRelay\",\"input\":\"185.220.101.1\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "asset",
      "name": "asset",
      "description": "Resolve an asset and its catalog of attributes. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"asset\",\"input\":\"example.com\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "threatintel",
      "name": "threatintel",
      "description": "Threat-intelligence indicator family (candidate apex/CDN/hosting). A family verb: name the sub-verb as \"sub\" alongside the input. Sub-verbs: candidateCdnApex, candidateMultiTenantApex, candidateSharedHostingIp.. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless",
        "family"
      ],
      "examples": [
        "{\"skill\":\"threatintel\",\"sub\":\"candidateCdnApex\",\"input\":5}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "psl",
      "name": "psl",
      "description": "Public-suffix-list family (tld-plus-one, is-public-suffix, affiliation). A family verb: name the sub-verb as \"sub\" alongside the input. Sub-verbs: tldPlusOne, isPublicSuffix, affiliation.. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless",
        "family"
      ],
      "examples": [
        "{\"skill\":\"psl\",\"sub\":\"tldPlusOne\",\"input\":\"a.b.example.co.uk\"}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "topAsnsByPrefixCount",
      "name": "topAsnsByPrefixCount",
      "description": "Top ASNs ranked by announced-prefix count. Answers without an API key.",
      "tags": [
        "graph",
        "cognition",
        "keyless"
      ],
      "examples": [
        "{\"skill\":\"topAsnsByPrefixCount\",\"input\":10}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "agents.agent",
      "name": "agents: agent",
      "description": "The agent operation on the Whisper control plane, served as CALL whisper.agents({op:'agent', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "agent",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.agent\",\"input\":{\"agent\":\"ag_1f4c0b\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.alert",
      "name": "agents: alert",
      "description": "The alert operation on the Whisper control plane, served as CALL whisper.agents({op:'alert', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "alert",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.alert\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.connect",
      "name": "agents: connect",
      "description": "The connect operation on the Whisper control plane, served as CALL whisper.agents({op:'connect', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "connect",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.connect\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.disconnect",
      "name": "agents: disconnect",
      "description": "The disconnect operation on the Whisper control plane, served as CALL whisper.agents({op:'disconnect', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "disconnect",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.disconnect\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.domain",
      "name": "agents: domain",
      "description": "The domain operation on the Whisper control plane, served as CALL whisper.agents({op:'domain', args:{...}}). Requires your Whisper API key.",
      "tags": [
        "control-plane",
        "agents",
        "domain",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.domain\",\"input\":{\"name\":\"example.com\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.firewall",
      "name": "agents: firewall",
      "description": "The firewall operation on the Whisper control plane, served as CALL whisper.agents({op:'firewall', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "firewall",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.firewall\",\"input\":{\"agent\":\"ag_1f4c0b\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.history",
      "name": "agents: history",
      "description": "The history operation on the Whisper control plane, served as CALL whisper.agents({op:'history', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "history",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.history\",\"input\":{\"address\":\"2a04:2a01:f6d7:1ffe:a0be:ba8a:c355:bba1\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.host",
      "name": "agents: host",
      "description": "The host operation on the Whisper control plane, served as CALL whisper.agents({op:'host', args:{...}}). Requires your Whisper API key.",
      "tags": [
        "control-plane",
        "agents",
        "host",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.host\",\"input\":{\"name\":\"my-host\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.identity",
      "name": "agents: identity",
      "description": "The identity operation on the Whisper control plane, served as CALL whisper.agents({op:'identity', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "identity",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.identity\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.list",
      "name": "agents: list",
      "description": "The list operation on the Whisper control plane, served as CALL whisper.agents({op:'list', args:{...}}). Requires your Whisper API key.",
      "tags": [
        "control-plane",
        "agents",
        "list",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.list\",\"input\":{\"kind\":\"agents\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.logs",
      "name": "agents: logs",
      "description": "The logs operation on the Whisper control plane, served as CALL whisper.agents({op:'logs', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "logs",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.logs\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.lookups",
      "name": "agents: lookups",
      "description": "The lookups operation on the Whisper control plane, served as CALL whisper.agents({op:'lookups', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "lookups",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.lookups\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.partner",
      "name": "agents: partner",
      "description": "The partner operation on the Whisper control plane, served as CALL whisper.agents({op:'partner', args:{...}}). Requires your Whisper API key. It is gated on partner authority rather than on arguments: without it the call is refused whatever you pass.",
      "tags": [
        "control-plane",
        "agents",
        "partner",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.partner\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.policy",
      "name": "agents: policy",
      "description": "The policy operation on the Whisper control plane, served as CALL whisper.agents({op:'policy', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "policy",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.policy\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.register",
      "name": "agents: register",
      "description": "The register operation on the Whisper control plane, served as CALL whisper.agents({op:'register', args:{...}}). Requires your Whisper API key.",
      "tags": [
        "control-plane",
        "agents",
        "register",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.register\",\"input\":{\"label\":\"my-first-agent\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.rename",
      "name": "agents: rename",
      "description": "The rename operation on the Whisper control plane, served as CALL whisper.agents({op:'rename', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "rename",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.rename\",\"input\":{\"agent\":\"ag_1f4c0b\",\"label\":\"renamed-agent\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.resolver",
      "name": "agents: resolver",
      "description": "The resolver operation on the Whisper control plane, served as CALL whisper.agents({op:'resolver', args:{...}}). Requires your Whisper API key. With no arguments it describes what you already have, so the example below runs as published.",
      "tags": [
        "control-plane",
        "agents",
        "resolver",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.resolver\",\"input\":{}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.revoke",
      "name": "agents: revoke",
      "description": "The revoke operation on the Whisper control plane, served as CALL whisper.agents({op:'revoke', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "revoke",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.revoke\",\"input\":{\"agent\":\"ag_1f4c0b\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.task",
      "name": "agents: task",
      "description": "The task operation on the Whisper control plane, served as CALL whisper.agents({op:'task', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "task",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.task\",\"input\":{\"agent\":\"ag_1f4c0b\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.token",
      "name": "agents: token",
      "description": "The token operation on the Whisper control plane, served as CALL whisper.agents({op:'token', args:{...}}). Requires your Whisper API key. The identifier in the example is a placeholder for one of YOUR agents: list them with the \"agents.list\" skill and {\"kind\":\"agents\"}.",
      "tags": [
        "control-plane",
        "agents",
        "token",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.token\",\"input\":{\"agent\":\"ag_1f4c0b\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    },
    {
      "id": "agents.verify",
      "name": "agents: verify",
      "description": "The verify operation on the Whisper control plane, served as CALL whisper.agents({op:'verify', args:{...}}). Requires your Whisper API key.",
      "tags": [
        "control-plane",
        "agents",
        "verify",
        "api-key"
      ],
      "examples": [
        "{\"skill\":\"agents.verify\",\"input\":{\"name\":\"example.com\"}}"
      ],
      "inputModes": [
        "text/plain",
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ],
      "security": [
        {
          "whisperApiKey": []
        }
      ]
    }
  ]
}