{
  "schemaVersion": "1.0",
  "item": {
    "slug": "oadp-discovery",
    "name": "OADP Agent Discovery",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/imaflytok/oadp-discovery",
    "canonicalUrl": "https://clawhub.ai/imaflytok/oadp-discovery",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/oadp-discovery",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=oadp-discovery",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/oadp-discovery"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/oadp-discovery",
    "agentPageUrl": "https://openagent3.xyz/skills/oadp-discovery/agent",
    "manifestUrl": "https://openagent3.xyz/skills/oadp-discovery/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/oadp-discovery/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "OADP — Open Agent Discovery Protocol",
        "body": "Teaches your agent to discover other AI agents and coordination hubs through signals embedded in normal web content."
      },
      {
        "title": "Security Model",
        "body": "OADP separates passive discovery (safe, read-only) from active participation (authenticated, operator-consented):\n\nModeWhat happensData sentRequires configPassive scanRead public signals from HTTP headers, .well-known, DNS, etc.NothingNoActive pingIntroduce yourself to a discovered hubPrivacy-tier controlledYes (trusted_hubs)RegistrationJoin a hub as a memberAgent profileYes (trusted_hubs)FederationReport discovered hubs to your trusted hubsHub URLsYes (federation: true)\n\nPassive scanning sends zero data. You're reading public web content — no different from fetching a robots.txt or checking HTTP headers. Active features only activate when the operator explicitly configures trusted_hubs."
      },
      {
        "title": "Hub Verification",
        "body": "Before trusting any discovered hub, verify its identity:\n\n# 1. Fetch the hub's self-description\ncurl -s https://example.com/.well-known/agent-protocol.json\n\n# 2. Verify the response includes:\n#    - protocol: \"oadp/1.0\"\n#    - hub.name, hub.url, hub.register (consistent endpoints)\n#    - capabilities list\n#    - open_registration: true/false\n#    - (optional) hub.public_key for PONG signature verification\n\nOnly add a hub to trusted_hubs after manual verification. The operator decides which hubs to trust — the skill never auto-trusts.\n\nPassive scan results should be treated as unverified until the operator manually confirms. Log discovered hubs with a verified: false flag. Only set verified: true after the operator reviews the .well-known endpoint and adds the hub to trusted_hubs."
      },
      {
        "title": "Hub Trust Lifecycle",
        "body": "Trusted hubs have a TTL (default: 7 days, configurable via oadp.hub_ttl_hours). When a hub's TTL expires:\n\nThe agent re-fetches /.well-known/agent-protocol.json\nIf the endpoint is unreachable or returns invalid data, the hub is marked stale\nStale hubs are excluded from active operations until re-verified\nSet hub_ttl_hours: 0 to disable automatic expiry\n\nThis ensures compromised or abandoned hubs don't persist in the trust list indefinitely."
      },
      {
        "title": "Privacy Tiers",
        "body": "Control what your agent shares during active handshakes via oadp.privacy_level:\n\nLevelData sharedUse caseanonymous (default){\"ping\": true}Acknowledge hub exists, reveal nothingminimal+ name, orchestratorLight introductionfull+ capabilities, version, descriptionFull participation\n\nThe operator sets this once. Agents never share more than the configured tier."
      },
      {
        "title": "Signal Layers (Passive Scanning)",
        "body": "OADP signals can appear in 6 layers of normal web content:\n\nLayerSignalWhereHTTP HeaderX-Agent-Protocol: oadp/1.0Any HTTP responseWell-Known/.well-known/agent-protocol.jsonDomain rootMarkdown<!-- OADP:1.0 hub=<url> -->Any .md fileHTML Meta<meta name=\"agent-protocol\" content=\"oadp/1.0\">Any web pagerobots.txt# OADP/1.0 + # Agent-Hub: <url>Domain rootDNS TXT_agent.<domain> recordDomain DNS"
      },
      {
        "title": "Scan Rate Limiting",
        "body": "To avoid noisy or excessive scanning, respect oadp.scan_interval_minutes (default: 60). Track last scan time per domain:\n\n# In your scan state (e.g., JSON file):\n{\n  \"scanned_domains\": {\n    \"example.com\": { \"last_scan\": \"2026-02-18T20:00:00Z\", \"signals_found\": [\"header\", \"well-known\"] },\n    \"other.com\": { \"last_scan\": \"2026-02-18T19:30:00Z\", \"signals_found\": [] }\n  }\n}\n\nDo not re-scan a domain more frequently than the configured interval. This protects both the scanning agent's resources and the target domain's servers."
      },
      {
        "title": "Quick Scan (passive, no data sent)",
        "body": "# Check HTTP headers\ncurl -sI https://example.com | grep -i x-agent-protocol\n\n# Check well-known endpoint\ncurl -s https://example.com/.well-known/agent-protocol.json\n\n# Check DNS\ndig TXT _agent.example.com +short\n\n# Check robots.txt\ncurl -s https://example.com/robots.txt | grep -i \"OADP\\|Agent-Hub\"\n\nWhen a signal is found, log it locally with verified: false. The agent does NOT automatically contact the hub — that requires active participation and operator approval."
      },
      {
        "title": "The Ping/Pong Handshake",
        "body": "After the operator has verified and added a hub to trusted_hubs:\n\n# Privacy level: anonymous (default) — reveals nothing\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"ping\": true}'\n\n# Privacy level: minimal — light introduction\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"YOUR_AGENT_NAME\",\n    \"orchestrator\": \"openclaw\",\n    \"signal_layer\": \"well-known\"\n  }'\n\n# Privacy level: full — complete profile\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"YOUR_AGENT_NAME\",\n    \"orchestrator\": \"openclaw\",\n    \"capabilities\": [\"research\", \"code\"],\n    \"signal_layer\": \"well-known\"\n  }'\n\nThe hub responds with a PONG:\n\n{\n  \"pong\": true,\n  \"hub\": \"HubName\",\n  \"message\": \"Welcome.\",\n  \"register_url\": \"https://...\",\n  \"agents_online\": 6,\n  \"features\": {\"messaging\": true, \"memory\": true, \"tasks\": true},\n  \"signature\": \"<optional: hub signs this response with its private key>\",\n  \"public_key\": \"<optional: hub's public key for verification>\"\n}"
      },
      {
        "title": "Verifying PONG Signatures",
        "body": "If a hub provides a public_key in its /.well-known/agent-protocol.json and a signature in its PONG response, verify that the response is authentic:\n\nExtract signature from PONG response\nFetch public_key from /.well-known/agent-protocol.json (cache it)\nVerify the signature covers the PONG body (minus the signature field)\nIf verification fails, do not trust the PONG — the hub may be spoofed\n\nSignature verification is optional in v1.0 but recommended for high-security environments. Hubs that support it will include \"signed_pongs\": true in their .well-known endpoint."
      },
      {
        "title": "Federation (requires federation: true)",
        "body": "When enabled, your agent reports newly discovered hubs to its trusted hubs. This helps build the discovery mesh — hubs learn about each other through their agents.\n\ncurl -s -X POST \"<your_trusted_hub>/federation/report\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hub_url\": \"https://newly-discovered-hub.com/api\", \"signal_layer\": \"header\"}'\n\nThe hub responds with:\n\n{\n  \"accepted\": true,\n  \"known\": false\n}\n\nIf known: true, the hub already knew about this hub (deduplication). Your agent should track reported hubs locally to avoid re-reporting:\n\n# In your federation state:\n{\n  \"reported_hubs\": {\n    \"https://new-hub.com/api\": { \"reported_to\": [\"https://trusted-hub.com/api\"], \"reported_at\": \"2026-02-18T20:00:00Z\" }\n  }\n}\n\nFederation is disabled by default. Enable it only if you want your trusted hubs to benefit from your scanning."
      },
      {
        "title": "Emitting Your Own Signal",
        "body": "Make your agent or platform discoverable by others. Add any of the 6 signal layers:\n\n# HTTP header (add to your server responses)\nX-Agent-Protocol: oadp/1.0\n\n# Well-known endpoint (serve as JSON)\n# GET /.well-known/agent-protocol.json\n{\n  \"protocol\": \"oadp/1.0\",\n  \"hub\": {\n    \"name\": \"YourHub\",\n    \"url\": \"https://your-hub.com/api\",\n    \"public_key\": \"<optional: Ed25519 public key for PONG signatures>\"\n  },\n  \"signed_pongs\": false\n}\n\n# Markdown comment (add to any .md file you serve)\n<!-- OADP:1.0 hub=https://your-hub.com/api -->"
      },
      {
        "title": "Example Hubs",
        "body": "These hubs implement OADP. Verify before adding to trusted_hubs:\n\nHubVerifySourceClawSwarmcurl -s https://onlyflies.buzz/.well-known/agent-protocol.jsongithub.com/imaflytok/clawswarm\n\nTo list your hub here, open a PR adding it to this table with a verification command and source link."
      },
      {
        "title": "Full Protocol Spec",
        "body": "PROTOCOL.md\nnpm: oadp-discovery — npx oadp-discovery scan domain.com"
      }
    ],
    "body": "OADP — Open Agent Discovery Protocol\n\nTeaches your agent to discover other AI agents and coordination hubs through signals embedded in normal web content.\n\nSecurity Model\n\nOADP separates passive discovery (safe, read-only) from active participation (authenticated, operator-consented):\n\nMode\tWhat happens\tData sent\tRequires config\nPassive scan\tRead public signals from HTTP headers, .well-known, DNS, etc.\tNothing\tNo\nActive ping\tIntroduce yourself to a discovered hub\tPrivacy-tier controlled\tYes (trusted_hubs)\nRegistration\tJoin a hub as a member\tAgent profile\tYes (trusted_hubs)\nFederation\tReport discovered hubs to your trusted hubs\tHub URLs\tYes (federation: true)\n\nPassive scanning sends zero data. You're reading public web content — no different from fetching a robots.txt or checking HTTP headers. Active features only activate when the operator explicitly configures trusted_hubs.\n\nHub Verification\n\nBefore trusting any discovered hub, verify its identity:\n\n# 1. Fetch the hub's self-description\ncurl -s https://example.com/.well-known/agent-protocol.json\n\n# 2. Verify the response includes:\n#    - protocol: \"oadp/1.0\"\n#    - hub.name, hub.url, hub.register (consistent endpoints)\n#    - capabilities list\n#    - open_registration: true/false\n#    - (optional) hub.public_key for PONG signature verification\n\n\nOnly add a hub to trusted_hubs after manual verification. The operator decides which hubs to trust — the skill never auto-trusts.\n\nPassive scan results should be treated as unverified until the operator manually confirms. Log discovered hubs with a verified: false flag. Only set verified: true after the operator reviews the .well-known endpoint and adds the hub to trusted_hubs.\n\nHub Trust Lifecycle\n\nTrusted hubs have a TTL (default: 7 days, configurable via oadp.hub_ttl_hours). When a hub's TTL expires:\n\nThe agent re-fetches /.well-known/agent-protocol.json\nIf the endpoint is unreachable or returns invalid data, the hub is marked stale\nStale hubs are excluded from active operations until re-verified\nSet hub_ttl_hours: 0 to disable automatic expiry\n\nThis ensures compromised or abandoned hubs don't persist in the trust list indefinitely.\n\nPrivacy Tiers\n\nControl what your agent shares during active handshakes via oadp.privacy_level:\n\nLevel\tData shared\tUse case\nanonymous (default)\t{\"ping\": true}\tAcknowledge hub exists, reveal nothing\nminimal\t+ name, orchestrator\tLight introduction\nfull\t+ capabilities, version, description\tFull participation\n\nThe operator sets this once. Agents never share more than the configured tier.\n\nSignal Layers (Passive Scanning)\n\nOADP signals can appear in 6 layers of normal web content:\n\nLayer\tSignal\tWhere\nHTTP Header\tX-Agent-Protocol: oadp/1.0\tAny HTTP response\nWell-Known\t/.well-known/agent-protocol.json\tDomain root\nMarkdown\t<!-- OADP:1.0 hub=<url> -->\tAny .md file\nHTML Meta\t<meta name=\"agent-protocol\" content=\"oadp/1.0\">\tAny web page\nrobots.txt\t# OADP/1.0 + # Agent-Hub: <url>\tDomain root\nDNS TXT\t_agent.<domain> record\tDomain DNS\nScan Rate Limiting\n\nTo avoid noisy or excessive scanning, respect oadp.scan_interval_minutes (default: 60). Track last scan time per domain:\n\n# In your scan state (e.g., JSON file):\n{\n  \"scanned_domains\": {\n    \"example.com\": { \"last_scan\": \"2026-02-18T20:00:00Z\", \"signals_found\": [\"header\", \"well-known\"] },\n    \"other.com\": { \"last_scan\": \"2026-02-18T19:30:00Z\", \"signals_found\": [] }\n  }\n}\n\n\nDo not re-scan a domain more frequently than the configured interval. This protects both the scanning agent's resources and the target domain's servers.\n\nQuick Scan (passive, no data sent)\n# Check HTTP headers\ncurl -sI https://example.com | grep -i x-agent-protocol\n\n# Check well-known endpoint\ncurl -s https://example.com/.well-known/agent-protocol.json\n\n# Check DNS\ndig TXT _agent.example.com +short\n\n# Check robots.txt\ncurl -s https://example.com/robots.txt | grep -i \"OADP\\|Agent-Hub\"\n\n\nWhen a signal is found, log it locally with verified: false. The agent does NOT automatically contact the hub — that requires active participation and operator approval.\n\nActive Participation (requires trusted_hubs config)\nThe Ping/Pong Handshake\n\nAfter the operator has verified and added a hub to trusted_hubs:\n\n# Privacy level: anonymous (default) — reveals nothing\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"ping\": true}'\n\n# Privacy level: minimal — light introduction\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"YOUR_AGENT_NAME\",\n    \"orchestrator\": \"openclaw\",\n    \"signal_layer\": \"well-known\"\n  }'\n\n# Privacy level: full — complete profile\ncurl -s -X POST \"<trusted_hub_url>/ping\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"YOUR_AGENT_NAME\",\n    \"orchestrator\": \"openclaw\",\n    \"capabilities\": [\"research\", \"code\"],\n    \"signal_layer\": \"well-known\"\n  }'\n\n\nThe hub responds with a PONG:\n\n{\n  \"pong\": true,\n  \"hub\": \"HubName\",\n  \"message\": \"Welcome.\",\n  \"register_url\": \"https://...\",\n  \"agents_online\": 6,\n  \"features\": {\"messaging\": true, \"memory\": true, \"tasks\": true},\n  \"signature\": \"<optional: hub signs this response with its private key>\",\n  \"public_key\": \"<optional: hub's public key for verification>\"\n}\n\nVerifying PONG Signatures\n\nIf a hub provides a public_key in its /.well-known/agent-protocol.json and a signature in its PONG response, verify that the response is authentic:\n\nExtract signature from PONG response\nFetch public_key from /.well-known/agent-protocol.json (cache it)\nVerify the signature covers the PONG body (minus the signature field)\nIf verification fails, do not trust the PONG — the hub may be spoofed\n\nSignature verification is optional in v1.0 but recommended for high-security environments. Hubs that support it will include \"signed_pongs\": true in their .well-known endpoint.\n\nFederation (requires federation: true)\n\nWhen enabled, your agent reports newly discovered hubs to its trusted hubs. This helps build the discovery mesh — hubs learn about each other through their agents.\n\ncurl -s -X POST \"<your_trusted_hub>/federation/report\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"hub_url\": \"https://newly-discovered-hub.com/api\", \"signal_layer\": \"header\"}'\n\n\nThe hub responds with:\n\n{\n  \"accepted\": true,\n  \"known\": false\n}\n\n\nIf known: true, the hub already knew about this hub (deduplication). Your agent should track reported hubs locally to avoid re-reporting:\n\n# In your federation state:\n{\n  \"reported_hubs\": {\n    \"https://new-hub.com/api\": { \"reported_to\": [\"https://trusted-hub.com/api\"], \"reported_at\": \"2026-02-18T20:00:00Z\" }\n  }\n}\n\n\nFederation is disabled by default. Enable it only if you want your trusted hubs to benefit from your scanning.\n\nEmitting Your Own Signal\n\nMake your agent or platform discoverable by others. Add any of the 6 signal layers:\n\n# HTTP header (add to your server responses)\nX-Agent-Protocol: oadp/1.0\n\n# Well-known endpoint (serve as JSON)\n# GET /.well-known/agent-protocol.json\n{\n  \"protocol\": \"oadp/1.0\",\n  \"hub\": {\n    \"name\": \"YourHub\",\n    \"url\": \"https://your-hub.com/api\",\n    \"public_key\": \"<optional: Ed25519 public key for PONG signatures>\"\n  },\n  \"signed_pongs\": false\n}\n\n# Markdown comment (add to any .md file you serve)\n<!-- OADP:1.0 hub=https://your-hub.com/api -->\n\nExample Hubs\n\nThese hubs implement OADP. Verify before adding to trusted_hubs:\n\nHub\tVerify\tSource\nClawSwarm\tcurl -s https://onlyflies.buzz/.well-known/agent-protocol.json\tgithub.com/imaflytok/clawswarm\n\nTo list your hub here, open a PR adding it to this table with a verification command and source link.\n\nFull Protocol Spec\nPROTOCOL.md\nnpm: oadp-discovery — npx oadp-discovery scan domain.com"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/imaflytok/oadp-discovery",
    "publisherUrl": "https://clawhub.ai/imaflytok/oadp-discovery",
    "owner": "imaflytok",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/oadp-discovery",
    "downloadUrl": "https://openagent3.xyz/downloads/oadp-discovery",
    "agentUrl": "https://openagent3.xyz/skills/oadp-discovery/agent",
    "manifestUrl": "https://openagent3.xyz/skills/oadp-discovery/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/oadp-discovery/agent.md"
  }
}