{
  "schemaVersion": "1.0",
  "item": {
    "slug": "owid-oc",
    "name": "Our world in data",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/rachmann-alexander/owid-oc",
    "canonicalUrl": "https://clawhub.ai/rachmann-alexander/owid-oc",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/owid-oc",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=owid-oc",
    "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/owid-oc"
    },
    "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/owid-oc",
    "agentPageUrl": "https://openagent3.xyz/skills/owid-oc/agent",
    "manifestUrl": "https://openagent3.xyz/skills/owid-oc/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/owid-oc/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": "Purpose",
        "body": "This skill enables OpenClaw to retrieve information from Our World in Data using the Python module owid-catalog.\n\nThe skill focuses on:\n\nSearching for relevant charts\nSelecting the most appropriate result\nRetrieving chart data and metadata\nReturning structured textual output\n\nAll searches are performed in English to ensure consistency.\n\nAfter invoking this skill, OpenClaw should post-process the retrieved content to translate it into the user's language if necessary, while preserving factual accuracy.\n\nAfter invoking this skill, OpenClaw should ALWAYS make transparent that this skill was used, e.g. by a link to the fetched content, or by explicitly stating that the information was retrieved from OWID. This is important for transparency and attribution."
      },
      {
        "title": "Installation",
        "body": "pip install owid-catalog==1.0.0rc2"
      },
      {
        "title": "Initialization",
        "body": "Initialize the OWID client:\n\nfrom owid.catalog import Client\n\nclient = Client()\n\nThis sets up access to the OWID catalog."
      },
      {
        "title": "Searching for Charts",
        "body": "Use the client.charts.search() function to find candidate charts."
      },
      {
        "title": "Basic Search",
        "body": "results = client.charts.search(\"life expectancy\")\n\nThis returns a ResponseSet of ChartResult objects ordered by popularity.\n\nExample attributes:\n\ntitle\nsubtitle\nurl\navailable_entities"
      },
      {
        "title": "Recommended Search Strategy",
        "body": "Workflow for handling search results:\n1.\tExecute client.charts.search(query, limit=3) to limit noise.\n2.\tSelect the most relevant result (e.g., by popularity or context).\n3.\tUse the selected result to fetch the chart data.\n\nExample:\n\nresults = client.charts.search(\"life expectancy\", limit=3)\n\nif results:\n    chart_result = results[0]\n    chart_table = chart_result.fetch()"
      },
      {
        "title": "Handling Ambiguity",
        "body": "OWID search returns multiple results; no explicit disambiguation error.\n\nRecommended approach:\nSelect the most contextually relevant option\nOr refine the search query"
      },
      {
        "title": "Retrieving Chart Content",
        "body": "Once a chart is selected:\n\nchart_table = chart_result.fetch()\n\ntitle = chart_result.title\ndescription = chart_result.subtitle\nurl = chart_result.url\n\n# Data summary can be derived from metadata\ndata_summary = f\"Chart with {len(chart_result.available_entities)} entities, units: {chart_table.metadata.get('unit', 'N/A')}\""
      },
      {
        "title": "Recommended Output Strategy",
        "body": "For most use cases:\nPrefer description (subtitle) for concise answers.\nUse data summary for key insights.\nAlways include url for reference."
      },
      {
        "title": "Error Handling",
        "body": "Handle the following exceptions:\nValueError\nKeyError\nHTTPTimeoutError (via client timeout)\n\nExample:\n\ntry:\n    chart_table = chart_result.fetch()\nexcept ValueError:\n    print(\"Invalid chart.\")"
      },
      {
        "title": "Structured Return Format",
        "body": "The skill should return structured data such as:\n\n{\n  \"title\": \"...\",\n  \"description\": \"...\",\n  \"url\": \"...\",\n  \"data_summary\": \"...\"\n}\n\nAvoid returning raw tabular data unless explicitly required."
      },
      {
        "title": "Language Policy",
        "body": "Always execute searches in English (OWID default).\nEven if the user asks in another language, the lookup must be performed in English."
      },
      {
        "title": "Post-processing Note",
        "body": "If the user's language is not English, OpenClaw should:\n1.\tRetrieve the content in English.\n2.\tPerform translation into the user's language as a post-processing step.\n3.\tClearly preserve factual accuracy during translation.\n\nTranslation must not alter the meaning of the original OWID content."
      },
      {
        "title": "Best Practices",
        "body": "Prefer precise search queries over broad terms.\nLimit search results to reduce data load.\nUse descriptions by default.\nHandle multiple results explicitly.\nNever assume the first result is always correct without context validation."
      },
      {
        "title": "Example End-to-End Workflow",
        "body": "from owid.catalog import Client\n\nclient = Client()\n\ndef fetch_owid_summary(query):\n    try:\n        results = client.charts.search(query, limit=5)\n        if not results:\n            return None\n\n        chart_result = results[0]\n        chart_table = chart_result.fetch()\n        return {\n            \"title\": chart_result.title,\n            \"description\": chart_result.subtitle,\n            \"url\": chart_result.url,\n            \"data_summary\": f\"Chart with {len(chart_result.available_entities)} entities.\"\n        }\n\n    except ValueError:\n        return {\n            \"error\": \"Chart not found\"\n        }"
      },
      {
        "title": "Limitations",
        "body": "The module relies on the public OWID API and may be rate-limited.\nContent accuracy depends on OWID.\nData summaries may omit nuance; full data retrieval should be deliberate."
      }
    ],
    "body": "SKILL: Our World in Data (OWID) via owid-catalog Python Module\nPurpose\n\nThis skill enables OpenClaw to retrieve information from Our World in Data using the Python module owid-catalog.\n\nThe skill focuses on:\n\nSearching for relevant charts\nSelecting the most appropriate result\nRetrieving chart data and metadata\nReturning structured textual output\n\nAll searches are performed in English to ensure consistency.\n\nAfter invoking this skill, OpenClaw should post-process the retrieved content to translate it into the user's language if necessary, while preserving factual accuracy.\n\nAfter invoking this skill, OpenClaw should ALWAYS make transparent that this skill was used, e.g. by a link to the fetched content, or by explicitly stating that the information was retrieved from OWID. This is important for transparency and attribution.\n\nInstallation\npip install owid-catalog==1.0.0rc2\n\nInitialization\n\nInitialize the OWID client:\n\nfrom owid.catalog import Client\n\nclient = Client()\n\n\nThis sets up access to the OWID catalog.\n\nSearching for Charts\n\nUse the client.charts.search() function to find candidate charts.\n\nBasic Search\nresults = client.charts.search(\"life expectancy\")\n\n\nThis returns a ResponseSet of ChartResult objects ordered by popularity.\n\nExample attributes:\n\ntitle\nsubtitle\nurl\navailable_entities\nRecommended Search Strategy\n\nWorkflow for handling search results: 1. Execute client.charts.search(query, limit=3) to limit noise. 2. Select the most relevant result (e.g., by popularity or context). 3. Use the selected result to fetch the chart data.\n\nExample:\n\nresults = client.charts.search(\"life expectancy\", limit=3)\n\nif results:\n    chart_result = results[0]\n    chart_table = chart_result.fetch()\n\nHandling Ambiguity\n\nOWID search returns multiple results; no explicit disambiguation error.\n\nRecommended approach: Select the most contextually relevant option Or refine the search query\n\nRetrieving Chart Content\n\nOnce a chart is selected:\n\nchart_table = chart_result.fetch()\n\ntitle = chart_result.title\ndescription = chart_result.subtitle\nurl = chart_result.url\n\n# Data summary can be derived from metadata\ndata_summary = f\"Chart with {len(chart_result.available_entities)} entities, units: {chart_table.metadata.get('unit', 'N/A')}\"\n\nRecommended Output Strategy\n\nFor most use cases: Prefer description (subtitle) for concise answers. Use data summary for key insights. Always include url for reference.\n\nError Handling\n\nHandle the following exceptions: ValueError KeyError HTTPTimeoutError (via client timeout)\n\nExample:\n\ntry:\n    chart_table = chart_result.fetch()\nexcept ValueError:\n    print(\"Invalid chart.\")\n\nStructured Return Format\n\nThe skill should return structured data such as:\n\n{\n  \"title\": \"...\",\n  \"description\": \"...\",\n  \"url\": \"...\",\n  \"data_summary\": \"...\"\n}\n\n\nAvoid returning raw tabular data unless explicitly required.\n\nLanguage Policy\n\nAlways execute searches in English (OWID default). Even if the user asks in another language, the lookup must be performed in English.\n\nPost-processing Note\n\nIf the user's language is not English, OpenClaw should: 1. Retrieve the content in English. 2. Perform translation into the user's language as a post-processing step. 3. Clearly preserve factual accuracy during translation.\n\nTranslation must not alter the meaning of the original OWID content.\n\nBest Practices\n\nPrefer precise search queries over broad terms. Limit search results to reduce data load. Use descriptions by default. Handle multiple results explicitly. Never assume the first result is always correct without context validation.\n\nExample End-to-End Workflow\nfrom owid.catalog import Client\n\nclient = Client()\n\ndef fetch_owid_summary(query):\n    try:\n        results = client.charts.search(query, limit=5)\n        if not results:\n            return None\n\n        chart_result = results[0]\n        chart_table = chart_result.fetch()\n        return {\n            \"title\": chart_result.title,\n            \"description\": chart_result.subtitle,\n            \"url\": chart_result.url,\n            \"data_summary\": f\"Chart with {len(chart_result.available_entities)} entities.\"\n        }\n\n    except ValueError:\n        return {\n            \"error\": \"Chart not found\"\n        }\n\nLimitations\n\nThe module relies on the public OWID API and may be rate-limited. Content accuracy depends on OWID. Data summaries may omit nuance; full data retrieval should be deliberate."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/rachmann-alexander/owid-oc",
    "publisherUrl": "https://clawhub.ai/rachmann-alexander/owid-oc",
    "owner": "rachmann-alexander",
    "version": "0.1.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/owid-oc",
    "downloadUrl": "https://openagent3.xyz/downloads/owid-oc",
    "agentUrl": "https://openagent3.xyz/skills/owid-oc/agent",
    "manifestUrl": "https://openagent3.xyz/skills/owid-oc/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/owid-oc/agent.md"
  }
}