{
  "schemaVersion": "1.0",
  "item": {
    "slug": "prediction-bridge-dev",
    "name": "Prediction Bridge Dev",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/smallyunet/prediction-bridge-dev",
    "canonicalUrl": "https://clawhub.ai/smallyunet/prediction-bridge-dev",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/prediction-bridge-dev",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=prediction-bridge-dev",
    "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/prediction-bridge-dev"
    },
    "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/prediction-bridge-dev",
    "agentPageUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/agent",
    "manifestUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/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": "Usage scenarios (when to use)",
        "body": "Use this skill when the user asks:\n\n“Find prediction markets for this topic/headline”\n“What markets match this tweet/X link?”\n“Search Polymarket/Kalshi for events about …”\n\nThis skill is best for:\n\nturning unstructured text (or an X URL) into ranked, actionable event links\nquickly surfacing the top 5–10 matches with a brief market snapshot\n\nNot a good fit when the user wants:\n\nfull market orderbooks or historical candles (use the market-data endpoints instead)\ndeep-dive sentiment/timeline generation (use the event deep-dive endpoints instead)\n\nThis skill calls the existing Prediction Bridge backend endpoint:\n\nPOST /api/v1/search/unified\n\nIt returns matched events (prediction market events) and optionally matched news."
      },
      {
        "title": "Configuration",
        "body": "API base (defaults to production):\n\nPREDICTION_BRIDGE_API_URL\n\nDefaults:\n\nProduction: https://prediction-bridge.onrender.com/api/v1\nLocal dev (if you run the backend locally): http://localhost:8000/api/v1"
      },
      {
        "title": "How to run",
        "body": "Build the query text\n\nIf the user provides an X status link, pass the URL as text unchanged. The backend will resolve it.\nIf the user provides plain text, pass it as-is.\n\nCall unified search\n\nUse exec with curl:\n\nAPI_URL=\"${PREDICTION_BRIDGE_API_URL:-https://prediction-bridge.onrender.com/api/v1}\"\n\ncurl -sS -X POST \"$API_URL/search/unified\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-Request-ID: pb-$(date +%s)\" \\\n  --data-binary @- <<'JSON'\n{\n  \"text\": \"<USER_TEXT_OR_X_URL>\",\n  \"limit\": 10,\n  \"offset\": 0,\n  \"include_inactive\": false,\n  \"include_markets\": true,\n  \"markets_per_event\": 1,\n  \"include_translations\": false\n}\nJSON\n\nNotes:\n\nUse markets_per_event: 1 to keep payload small but still show the leading market.\nIf the user explicitly asks for more markets per event, increase markets_per_event."
      },
      {
        "title": "API response format (what you will receive)",
        "body": "POST /search/unified returns JSON with this shape (fields may be omitted or null depending on data availability):\n\n{\n  \"source\": {\n    \"type\": \"x\" ,\n    \"url\": \"https://x.com/.../status/...\",\n    \"text\": \"resolved tweet text (optional)\",\n    \"id\": \"optional\"\n  },\n  \"events\": [\n    {\n      \"score\": 0.82,\n      \"event\": {\n        \"id\": 123,\n        \"title\": \"...\",\n        \"description\": \"...\",\n        \"source\": \"polymarket\",\n        \"source_url\": \"https://polymarket.com/event/...\",\n        \"status\": \"active\",\n        \"volume_usd\": 12345.67,\n        \"liquidity_usd\": 2345.0,\n        \"end_date\": \"2026-12-31T00:00:00Z\",\n        \"markets\": [\n          {\n            \"id\": 999,\n            \"question\": \"...\",\n            \"outcomes\": [\"Yes\", \"No\"],\n            \"outcome_prices\": {\"Yes\": 0.61, \"No\": 0.39},\n            \"volume\": 1000.0,\n            \"active\": true,\n            \"closed\": false\n          }\n        ]\n      }\n    }\n  ],\n  \"news\": [\n    {\n      \"score\": 0.74,\n      \"news\": {\n        \"id\": 456,\n        \"title\": \"...\",\n        \"summary\": \"...\",\n        \"url\": \"https://...\",\n        \"image_url\": \"https://...\",\n        \"source\": \"...\",\n        \"published_at\": \"2026-02-01T12:34:56Z\"\n      }\n    }\n  ]\n}\n\nKey points:\n\nevents[] is the primary output. Each item has { score, event }.\nscore is a relevance score; higher is better.\nevent.markets is present when you requested include_markets: true.\n\nWhen you set markets_per_event, the backend may return only a preview subset.\n\n\nnews[] is optional supporting context; do not let it crowd out event results."
      },
      {
        "title": "How the agent should parse + handle results",
        "body": "Important:\n\nDo NOT show the raw JSON response to the user.\nAlways parse/validate the response first, then present the matched events as a clean, human-readable list.\n\nValidate payload shape\n\nTreat missing/invalid JSON as a failure and retry once (or ask the user to retry).\nIf events is missing or not an array, treat it as empty.\n\nRank and select\n\nSort events by score descending (even if the backend already sorted).\nDefault to presenting top 5 results; show up to 10 if the user asked for “more”.\n\nExtract a “market snapshot” per event (best-effort)\n\nPrefer event.source_url as the click-through link.\nIf event.source_url is missing, fall back to the frontend detail page:\n\nhttps://www.predictionbridge.xyz/event/<event.id>\n\n\nIf event.markets[0].outcome_prices exists:\n\nshow the YES/Long price if present: outcome_prices.Yes or outcome_prices.Long\notherwise show the first available outcome price\n\nPresent concise output\n\nFor each event, output:\n\nTitle\nSource/platform (event.source)\nRelevance score (rounded, e.g. 0.82)\nLink (event.source_url preferred)\n1-line snapshot: probability (if available) + volume/liquidity (if available)\n\nOptional: include related news\n\nIf news exists, include at most 1–3 items with title + URL as extra context.\n\nEmpty results\n\nIf events is empty:\n\nsay no strong matches found\nask for 1 clarifying detail (timeframe, geography, person/org name, or paste the text instead of a shortened link)"
      },
      {
        "title": "How to present results",
        "body": "After you receive JSON:\n\nIf events is empty, say no matches were found and ask for a more specific query.\nOtherwise list the top results (usually 5–10):\n\nevent title\nplatform/source (e.g. Polymarket, Kalshi)\nscore (higher is better)\na link to the event (event.source_url when present)\nquick market snapshot (from the first market in event.markets, if present)\n\nIf news is present, optionally show 1–3 related news items as context."
      },
      {
        "title": "Error handling",
        "body": "HTTP 400: invalid input or X resolve error → ask the user to paste a different link or provide plain text.\nHTTP 503: backend DB unavailable → suggest retrying later.\nAny network error: confirm PREDICTION_BRIDGE_API_URL and whether the API is reachable."
      }
    ],
    "body": "Use this skill when the user wants to find relevant prediction markets/events for:\n\na short text query (topic, question, headline)\na URL to an article\nan X (Twitter) status link (the backend resolves and extracts the tweet text)\nUsage scenarios (when to use)\n\nUse this skill when the user asks:\n\n“Find prediction markets for this topic/headline”\n“What markets match this tweet/X link?”\n“Search Polymarket/Kalshi for events about …”\n\nThis skill is best for:\n\nturning unstructured text (or an X URL) into ranked, actionable event links\nquickly surfacing the top 5–10 matches with a brief market snapshot\n\nNot a good fit when the user wants:\n\nfull market orderbooks or historical candles (use the market-data endpoints instead)\ndeep-dive sentiment/timeline generation (use the event deep-dive endpoints instead)\n\nThis skill calls the existing Prediction Bridge backend endpoint:\n\nPOST /api/v1/search/unified\n\nIt returns matched events (prediction market events) and optionally matched news.\n\nConfiguration\n\nAPI base (defaults to production):\n\nPREDICTION_BRIDGE_API_URL\n\nDefaults:\n\nProduction: https://prediction-bridge.onrender.com/api/v1\nLocal dev (if you run the backend locally): http://localhost:8000/api/v1\nHow to run\nBuild the query text\nIf the user provides an X status link, pass the URL as text unchanged. The backend will resolve it.\nIf the user provides plain text, pass it as-is.\nCall unified search\n\nUse exec with curl:\n\nAPI_URL=\"${PREDICTION_BRIDGE_API_URL:-https://prediction-bridge.onrender.com/api/v1}\"\n\ncurl -sS -X POST \"$API_URL/search/unified\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-Request-ID: pb-$(date +%s)\" \\\n  --data-binary @- <<'JSON'\n{\n  \"text\": \"<USER_TEXT_OR_X_URL>\",\n  \"limit\": 10,\n  \"offset\": 0,\n  \"include_inactive\": false,\n  \"include_markets\": true,\n  \"markets_per_event\": 1,\n  \"include_translations\": false\n}\nJSON\n\n\nNotes:\n\nUse markets_per_event: 1 to keep payload small but still show the leading market.\nIf the user explicitly asks for more markets per event, increase markets_per_event.\nAPI response format (what you will receive)\n\nPOST /search/unified returns JSON with this shape (fields may be omitted or null depending on data availability):\n\n{\n  \"source\": {\n    \"type\": \"x\" ,\n    \"url\": \"https://x.com/.../status/...\",\n    \"text\": \"resolved tweet text (optional)\",\n    \"id\": \"optional\"\n  },\n  \"events\": [\n    {\n      \"score\": 0.82,\n      \"event\": {\n        \"id\": 123,\n        \"title\": \"...\",\n        \"description\": \"...\",\n        \"source\": \"polymarket\",\n        \"source_url\": \"https://polymarket.com/event/...\",\n        \"status\": \"active\",\n        \"volume_usd\": 12345.67,\n        \"liquidity_usd\": 2345.0,\n        \"end_date\": \"2026-12-31T00:00:00Z\",\n        \"markets\": [\n          {\n            \"id\": 999,\n            \"question\": \"...\",\n            \"outcomes\": [\"Yes\", \"No\"],\n            \"outcome_prices\": {\"Yes\": 0.61, \"No\": 0.39},\n            \"volume\": 1000.0,\n            \"active\": true,\n            \"closed\": false\n          }\n        ]\n      }\n    }\n  ],\n  \"news\": [\n    {\n      \"score\": 0.74,\n      \"news\": {\n        \"id\": 456,\n        \"title\": \"...\",\n        \"summary\": \"...\",\n        \"url\": \"https://...\",\n        \"image_url\": \"https://...\",\n        \"source\": \"...\",\n        \"published_at\": \"2026-02-01T12:34:56Z\"\n      }\n    }\n  ]\n}\n\n\nKey points:\n\nevents[] is the primary output. Each item has { score, event }.\nscore is a relevance score; higher is better.\nevent.markets is present when you requested include_markets: true.\nWhen you set markets_per_event, the backend may return only a preview subset.\nnews[] is optional supporting context; do not let it crowd out event results.\nHow the agent should parse + handle results\n\nImportant:\n\nDo NOT show the raw JSON response to the user.\nAlways parse/validate the response first, then present the matched events as a clean, human-readable list.\nValidate payload shape\nTreat missing/invalid JSON as a failure and retry once (or ask the user to retry).\nIf events is missing or not an array, treat it as empty.\nRank and select\nSort events by score descending (even if the backend already sorted).\nDefault to presenting top 5 results; show up to 10 if the user asked for “more”.\nExtract a “market snapshot” per event (best-effort)\nPrefer event.source_url as the click-through link.\nIf event.source_url is missing, fall back to the frontend detail page:\nhttps://www.predictionbridge.xyz/event/<event.id>\nIf event.markets[0].outcome_prices exists:\nshow the YES/Long price if present: outcome_prices.Yes or outcome_prices.Long\notherwise show the first available outcome price\nPresent concise output\nFor each event, output:\nTitle\nSource/platform (event.source)\nRelevance score (rounded, e.g. 0.82)\nLink (event.source_url preferred)\n1-line snapshot: probability (if available) + volume/liquidity (if available)\nOptional: include related news\nIf news exists, include at most 1–3 items with title + URL as extra context.\nEmpty results\nIf events is empty:\nsay no strong matches found\nask for 1 clarifying detail (timeframe, geography, person/org name, or paste the text instead of a shortened link)\nHow to present results\n\nAfter you receive JSON:\n\nIf events is empty, say no matches were found and ask for a more specific query.\nOtherwise list the top results (usually 5–10):\nevent title\nplatform/source (e.g. Polymarket, Kalshi)\nscore (higher is better)\na link to the event (event.source_url when present)\nquick market snapshot (from the first market in event.markets, if present)\n\nIf news is present, optionally show 1–3 related news items as context.\n\nError handling\nHTTP 400: invalid input or X resolve error → ask the user to paste a different link or provide plain text.\nHTTP 503: backend DB unavailable → suggest retrying later.\nAny network error: confirm PREDICTION_BRIDGE_API_URL and whether the API is reachable."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/smallyunet/prediction-bridge-dev",
    "publisherUrl": "https://clawhub.ai/smallyunet/prediction-bridge-dev",
    "owner": "smallyunet",
    "version": "0.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/prediction-bridge-dev",
    "downloadUrl": "https://openagent3.xyz/downloads/prediction-bridge-dev",
    "agentUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/agent",
    "manifestUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/prediction-bridge-dev/agent.md"
  }
}