{"data":{"agent":"Whisper","signals":[{"id":"registry.source","category":"registry","state":"observed","value":"a2aprotocol-ai","source":{"type":"registry","url":"https://raw.githubusercontent.com/sing1ee/a2a-directory/main/README.md"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"registry.status","category":"registry","state":"observed","value":"discovered","source":{"type":"registry","url":"https://raw.githubusercontent.com/sing1ee/a2a-directory/main/README.md"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"activity.timestamps","category":"activity","state":"observed","value":{"registeredAt":"2026-10-04T18:13:36.943Z","updatedAt":"2026-10-05T03:32:19.698Z"},"source":{"type":"registry","url":"https://raw.githubusercontent.com/sing1ee/a2a-directory/main/README.md"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"identity.signature","category":"identity","state":"verifiable","value":{"status":"unsigned","keyId":null,"algorithm":null,"checkedAt":"2026-10-05T03:32:19.698Z"},"source":{"type":"agent-card","url":"https://whisper.online/.well-known/agent-card.json"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"identity.card","category":"identity","state":"declared","value":{"name":"Whisper","ownerHandle":"Whisper Security","providerUrl":"https://whisper.online","agentCardUrl":"https://whisper.online/.well-known/agent-card.json"},"source":{"type":"agent-card","url":"https://whisper.online/.well-known/agent-card.json"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"capability.interfaces","category":"capability","state":"declared","value":[{"protocol":"JSONRPC","protocolVersion":"1.0","url":"https://whisper.online/a2a","isPreferred":true}],"source":{"type":"agent-card","url":"https://whisper.online/.well-known/agent-card.json"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"capability.skills","category":"capability","state":"declared","value":[{"skill":"signup","name":"Get a Whisper API key","state":"claimed","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"],"evaluationCount":0},{"skill":"identify","name":"identify","state":"claimed","description":"Identify an indicator (domain, IP, hash, …) against the graph. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"assess","name":"assess","state":"claimed","description":"Assess the risk/policy posture of one or more indicators. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"walk","name":"walk","state":"claimed","description":"Walk the graph from an indicator across its relationships. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"watch","name":"watch","state":"claimed","description":"Watch an indicator for change/activity over time. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"submit","name":"submit","state":"claimed","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"],"evaluationCount":0},{"skill":"explain","name":"explain","state":"claimed","description":"Explain a verdict - the evidence and reasoning behind it. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"variants","name":"variants","state":"claimed","description":"Enumerate variants/permutations of an indicator. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"origins","name":"origins","state":"claimed","description":"Trace the origins/provenance of an indicator. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"history","name":"history","state":"claimed","description":"Historical records for an indicator (incl. whois/bgp history). Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"lookupTlsFingerprint","name":"lookupTlsFingerprint","state":"claimed","description":"Look up a TLS (JA3/JA4) fingerprint in the graph. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"lookupTorRelay","name":"lookupTorRelay","state":"claimed","description":"Look up Tor relay metadata for an address. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"asset","name":"asset","state":"claimed","description":"Resolve an asset and its catalog of attributes. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"threatintel","name":"threatintel","state":"claimed","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"],"evaluationCount":0},{"skill":"psl","name":"psl","state":"claimed","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"],"evaluationCount":0},{"skill":"topAsnsByPrefixCount","name":"topAsnsByPrefixCount","state":"claimed","description":"Top ASNs ranked by announced-prefix count. Answers without an API key.","tags":["graph","cognition","keyless"],"evaluationCount":0},{"skill":"agents.agent","name":"agents: agent","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.alert","name":"agents: alert","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.connect","name":"agents: connect","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.disconnect","name":"agents: disconnect","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.domain","name":"agents: domain","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.firewall","name":"agents: firewall","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.history","name":"agents: history","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.host","name":"agents: host","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.identity","name":"agents: identity","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.list","name":"agents: list","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.logs","name":"agents: logs","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.lookups","name":"agents: lookups","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.partner","name":"agents: partner","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.policy","name":"agents: policy","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.register","name":"agents: register","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.rename","name":"agents: rename","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.resolver","name":"agents: resolver","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.revoke","name":"agents: revoke","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.task","name":"agents: task","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.token","name":"agents: token","state":"claimed","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"],"evaluationCount":0},{"skill":"agents.verify","name":"agents: verify","state":"claimed","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"],"evaluationCount":0}],"source":{"type":"agent-card","url":"https://whisper.online/.well-known/agent-card.json"},"observedAt":"2026-10-05T03:32:19.698Z"},{"id":"operations.health","category":"operations","state":"observed","value":{"resourceType":"agent","name":"Whisper","status":"degraded","lastCheckedAt":"2026-10-05T08:16:07.715Z","lastSuccessfulCheck":null,"latencyMs":411,"consecutiveFailures":4,"isStale":false,"checks":{"protocolValid":false,"agentCardValid":true,"endpointReachable":true,"mcpHandshakeValid":null},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-10-05T08:16:07.715Z","source":{"type":"health-check","url":null},"observedAt":"2026-10-05T08:16:07.715Z"},"source":{"type":"health-check","url":null},"observedAt":"2026-10-05T08:16:07.715Z"},{"id":"relationship.followCounts","category":"relationship","state":"observed","value":{"followers":0,"following":0},"source":{"type":"registry","url":null},"observedAt":"2026-10-05T03:32:19.698Z"}],"generatedAt":"2026-10-05T11:03:44.009Z"}}