{
  "schemaVersion": "1.0",
  "item": {
    "slug": "v2ex",
    "name": "v2ex",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/timqian/v2ex",
    "canonicalUrl": "https://clawhub.ai/timqian/v2ex",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/v2ex",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=v2ex",
    "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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/v2ex"
    },
    "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/v2ex",
    "agentPageUrl": "https://openagent3.xyz/skills/v2ex/agent",
    "manifestUrl": "https://openagent3.xyz/skills/v2ex/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/v2ex/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": "Overview",
        "body": "This skill provides integration with V2EX API 2.0 Beta, allowing you to access V2EX forum functionality including notifications, topics, nodes, and member information."
      },
      {
        "title": "Authentication",
        "body": "V2EX API 2.0 requires a Personal Access Token for authentication.\n\nVisit https://www.v2ex.com/settings/tokens to create a token\nUse the token in the Authorization header: Authorization: Bearer <your-token>\nStore your token securely (e.g., in environment variables)"
      },
      {
        "title": "API Base URL",
        "body": "https://www.v2ex.com/api/v2/"
      },
      {
        "title": "Notifications",
        "body": "Get Latest Notifications\n\nGET /notifications\n\nOptional parameters:\n\np - Page number (default: 1)\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/notifications?p=1\"\n\nDelete a Notification\n\nDELETE /notifications/:notification_id\n\nExample:\n\ncurl -X DELETE \\\n  -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/notifications/123456\""
      },
      {
        "title": "Member",
        "body": "Get Your Profile\n\nGET /member\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/member\""
      },
      {
        "title": "Token",
        "body": "Get Current Token Info\n\nGET /token\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/token\""
      },
      {
        "title": "Nodes",
        "body": "Get Node Information\n\nGET /nodes/:node_name\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/nodes/programmer\"\n\nGet Topics in a Node\n\nGET /nodes/:node_name/topics\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/nodes/programmer/topics\""
      },
      {
        "title": "Topics",
        "body": "Get Hot Topics (Classic API)\n\nGET https://www.v2ex.com/api/topics/hot.json\n\nReturns the currently trending topics across all nodes. No authentication required.\n\nExample:\n\ncurl -s \"https://www.v2ex.com/api/topics/hot.json\"\n\nGet Latest Topics (Classic API)\n\nGET https://www.v2ex.com/api/topics/latest.json\n\nReturns the most recent topics across all nodes. No authentication required.\n\nExample:\n\ncurl -s \"https://www.v2ex.com/api/topics/latest.json\"\n\nGet Topic Details (API v2)\n\nGET /topics/:topic_id\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/topics/12345\"\n\nGet Topic Replies (API v2)\n\nGET /topics/:topic_id/replies\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/topics/12345/replies\""
      },
      {
        "title": "Rate Limiting",
        "body": "Default rate limit: 600 requests per hour per IP\n\nRate limit headers in responses:\n\nX-Rate-Limit-Limit - Total allowed requests\nX-Rate-Limit-Reset - Unix timestamp when limit resets\nX-Rate-Limit-Remaining - Remaining requests in current window\n\nNote: CDN-cached requests only consume rate limit on the first request."
      },
      {
        "title": "Check New Notifications",
        "body": "Call GET /notifications to fetch latest notifications\nParse the response for unread items\nOptionally delete notifications after reading"
      },
      {
        "title": "Browse Hot Topics",
        "body": "Call GET /api/topics/hot.json to get trending topics (no token required)\nParse response to see popular discussions across all nodes\nUse topic URLs or IDs to view details on V2EX website"
      },
      {
        "title": "Browse Node Topics",
        "body": "Call GET /nodes/:node_name/topics to get topics\nUse topic IDs to fetch detailed information with GET /topics/:topic_id\nFetch replies with GET /topics/:topic_id/replies"
      },
      {
        "title": "Monitor Specific Topics",
        "body": "Store topic IDs of interest\nPeriodically poll GET /topics/:topic_id for updates\nCheck GET /topics/:topic_id/replies for new comments"
      },
      {
        "title": "Response Format",
        "body": "All API responses are in JSON format. Common fields include:\n\nsuccess - Boolean indicating request success\nmessage - Error message if request failed\nData fields specific to each endpoint"
      },
      {
        "title": "Error Handling",
        "body": "Common HTTP status codes:\n\n200 - Success\n401 - Unauthorized (invalid or missing token)\n403 - Forbidden (insufficient permissions)\n404 - Not found\n429 - Rate limit exceeded\n500 - Server error"
      },
      {
        "title": "Best Practices",
        "body": "Store Personal Access Tokens securely (environment variables, not in code)\nHandle rate limits by checking headers and implementing backoff\nCache responses when appropriate to reduce API calls\nUse pagination for endpoints that support it\nHandle errors gracefully with user-friendly messages"
      },
      {
        "title": "References",
        "body": "V2EX API Documentation: https://www.v2ex.com/help/api\nPersonal Access Tokens: https://www.v2ex.com/settings/tokens\nV2EX API Node: https://www.v2ex.com/go/v2ex-api"
      },
      {
        "title": "Example Implementation (Python)",
        "body": "import os\nimport requests\n\nclass V2EXClient:\n    BASE_URL = \"https://www.v2ex.com/api/v2\"\n    \n    def __init__(self, token=None):\n        self.token = token or os.environ.get('V2EX_TOKEN')\n        if not self.token:\n            raise ValueError(\"V2EX token is required\")\n        self.headers = {\n            \"Authorization\": f\"Bearer {self.token}\"\n        }\n    \n    def get_notifications(self, page=1):\n        \"\"\"Get latest notifications\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/notifications\",\n            headers=self.headers,\n            params={\"p\": page}\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def delete_notification(self, notification_id):\n        \"\"\"Delete a specific notification\"\"\"\n        response = requests.delete(\n            f\"{self.BASE_URL}/notifications/{notification_id}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_member(self):\n        \"\"\"Get current member profile\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/member\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_node(self, node_name):\n        \"\"\"Get node information\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/nodes/{node_name}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_node_topics(self, node_name):\n        \"\"\"Get topics in a node\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/nodes/{node_name}/topics\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_topic(self, topic_id):\n        \"\"\"Get topic details\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/topics/{topic_id}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_topic_replies(self, topic_id):\n        \"\"\"Get replies for a topic\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/topics/{topic_id}/replies\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_hot_topics(self):\n        \"\"\"Get trending topics across all nodes (classic API, no token required)\"\"\"\n        response = requests.get(\"https://www.v2ex.com/api/topics/hot.json\")\n        response.raise_for_status()\n        return response.json()\n    \n    def get_latest_topics(self):\n        \"\"\"Get latest topics across all nodes (classic API, no token required)\"\"\"\n        response = requests.get(\"https://www.v2ex.com/api/topics/latest.json\")\n        response.raise_for_status()\n        return response.json()\n\n# Usage example\nif __name__ == \"__main__\":\n    client = V2EXClient()\n    \n    # Get notifications\n    notifications = client.get_notifications()\n    print(f\"You have {len(notifications.get('result', []))} notifications\")\n    \n    # Get member profile\n    member = client.get_member()\n    print(f\"Hello, {member.get('result', {}).get('username')}!\")\n    \n    # Get node info\n    node = client.get_node(\"python\")\n    print(f\"Node: {node.get('result', {}).get('title')}\")\n    \n    # Get topics from a node\n    topics = client.get_node_topics(\"python\")\n    for topic in topics.get('result', []):\n        print(f\"- {topic.get('title')}\")\n    \n    # Get hot topics (no token required)\n    hot_topics = client.get_hot_topics()\n    print(\"\\n🔥 Hot Topics:\")\n    for topic in hot_topics[:5]:\n        print(f\"- [{topic['node']['title']}] {topic['title']} ({topic['replies']} replies)\")"
      },
      {
        "title": "Testing with REST Client",
        "body": "You can use VS Code's REST Client extension to test the API:\n\n### Get hot topics (classic API, no auth required)\nGET https://www.v2ex.com/api/topics/hot.json\n\n### Get latest topics (classic API, no auth required)\nGET https://www.v2ex.com/api/topics/latest.json\n\n### Get notifications\nGET https://www.v2ex.com/api/v2/notifications\nAuthorization: Bearer <your-token>\n\n### Get member profile\nGET https://www.v2ex.com/api/v2/member\nAuthorization: Bearer <your-token>\n\n### Get node info\nGET https://www.v2ex.com/api/v2/nodes/programmer\nAuthorization: Bearer <your-token>\n\n### Get topic\nGET https://www.v2ex.com/api/v2/topics/12345\nAuthorization: Bearer <your-token>"
      }
    ],
    "body": "Overview\n\nThis skill provides integration with V2EX API 2.0 Beta, allowing you to access V2EX forum functionality including notifications, topics, nodes, and member information.\n\nAuthentication\n\nV2EX API 2.0 requires a Personal Access Token for authentication.\n\nVisit https://www.v2ex.com/settings/tokens to create a token\nUse the token in the Authorization header: Authorization: Bearer <your-token>\nStore your token securely (e.g., in environment variables)\nAPI Base URL\nhttps://www.v2ex.com/api/v2/\n\nAvailable Endpoints\nNotifications\nGet Latest Notifications\nGET /notifications\n\n\nOptional parameters:\n\np - Page number (default: 1)\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/notifications?p=1\"\n\nDelete a Notification\nDELETE /notifications/:notification_id\n\n\nExample:\n\ncurl -X DELETE \\\n  -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/notifications/123456\"\n\nMember\nGet Your Profile\nGET /member\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/member\"\n\nToken\nGet Current Token Info\nGET /token\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/token\"\n\nNodes\nGet Node Information\nGET /nodes/:node_name\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/nodes/programmer\"\n\nGet Topics in a Node\nGET /nodes/:node_name/topics\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/nodes/programmer/topics\"\n\nTopics\nGet Hot Topics (Classic API)\nGET https://www.v2ex.com/api/topics/hot.json\n\n\nReturns the currently trending topics across all nodes. No authentication required.\n\nExample:\n\ncurl -s \"https://www.v2ex.com/api/topics/hot.json\"\n\nGet Latest Topics (Classic API)\nGET https://www.v2ex.com/api/topics/latest.json\n\n\nReturns the most recent topics across all nodes. No authentication required.\n\nExample:\n\ncurl -s \"https://www.v2ex.com/api/topics/latest.json\"\n\nGet Topic Details (API v2)\nGET /topics/:topic_id\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/topics/12345\"\n\nGet Topic Replies (API v2)\nGET /topics/:topic_id/replies\n\n\nExample:\n\ncurl -H \"Authorization: Bearer <token>\" \\\n  \"https://www.v2ex.com/api/v2/topics/12345/replies\"\n\nRate Limiting\n\nDefault rate limit: 600 requests per hour per IP\n\nRate limit headers in responses:\n\nX-Rate-Limit-Limit - Total allowed requests\nX-Rate-Limit-Reset - Unix timestamp when limit resets\nX-Rate-Limit-Remaining - Remaining requests in current window\n\nNote: CDN-cached requests only consume rate limit on the first request.\n\nCommon Workflows\nCheck New Notifications\nCall GET /notifications to fetch latest notifications\nParse the response for unread items\nOptionally delete notifications after reading\nBrowse Hot Topics\nCall GET /api/topics/hot.json to get trending topics (no token required)\nParse response to see popular discussions across all nodes\nUse topic URLs or IDs to view details on V2EX website\nBrowse Node Topics\nCall GET /nodes/:node_name/topics to get topics\nUse topic IDs to fetch detailed information with GET /topics/:topic_id\nFetch replies with GET /topics/:topic_id/replies\nMonitor Specific Topics\nStore topic IDs of interest\nPeriodically poll GET /topics/:topic_id for updates\nCheck GET /topics/:topic_id/replies for new comments\nResponse Format\n\nAll API responses are in JSON format. Common fields include:\n\nsuccess - Boolean indicating request success\nmessage - Error message if request failed\nData fields specific to each endpoint\nError Handling\n\nCommon HTTP status codes:\n\n200 - Success\n401 - Unauthorized (invalid or missing token)\n403 - Forbidden (insufficient permissions)\n404 - Not found\n429 - Rate limit exceeded\n500 - Server error\nBest Practices\nStore Personal Access Tokens securely (environment variables, not in code)\nHandle rate limits by checking headers and implementing backoff\nCache responses when appropriate to reduce API calls\nUse pagination for endpoints that support it\nHandle errors gracefully with user-friendly messages\nReferences\nV2EX API Documentation: https://www.v2ex.com/help/api\nPersonal Access Tokens: https://www.v2ex.com/settings/tokens\nV2EX API Node: https://www.v2ex.com/go/v2ex-api\nExample Implementation (Python)\nimport os\nimport requests\n\nclass V2EXClient:\n    BASE_URL = \"https://www.v2ex.com/api/v2\"\n    \n    def __init__(self, token=None):\n        self.token = token or os.environ.get('V2EX_TOKEN')\n        if not self.token:\n            raise ValueError(\"V2EX token is required\")\n        self.headers = {\n            \"Authorization\": f\"Bearer {self.token}\"\n        }\n    \n    def get_notifications(self, page=1):\n        \"\"\"Get latest notifications\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/notifications\",\n            headers=self.headers,\n            params={\"p\": page}\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def delete_notification(self, notification_id):\n        \"\"\"Delete a specific notification\"\"\"\n        response = requests.delete(\n            f\"{self.BASE_URL}/notifications/{notification_id}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_member(self):\n        \"\"\"Get current member profile\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/member\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_node(self, node_name):\n        \"\"\"Get node information\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/nodes/{node_name}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_node_topics(self, node_name):\n        \"\"\"Get topics in a node\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/nodes/{node_name}/topics\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_topic(self, topic_id):\n        \"\"\"Get topic details\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/topics/{topic_id}\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_topic_replies(self, topic_id):\n        \"\"\"Get replies for a topic\"\"\"\n        response = requests.get(\n            f\"{self.BASE_URL}/topics/{topic_id}/replies\",\n            headers=self.headers\n        )\n        response.raise_for_status()\n        return response.json()\n    \n    def get_hot_topics(self):\n        \"\"\"Get trending topics across all nodes (classic API, no token required)\"\"\"\n        response = requests.get(\"https://www.v2ex.com/api/topics/hot.json\")\n        response.raise_for_status()\n        return response.json()\n    \n    def get_latest_topics(self):\n        \"\"\"Get latest topics across all nodes (classic API, no token required)\"\"\"\n        response = requests.get(\"https://www.v2ex.com/api/topics/latest.json\")\n        response.raise_for_status()\n        return response.json()\n\n# Usage example\nif __name__ == \"__main__\":\n    client = V2EXClient()\n    \n    # Get notifications\n    notifications = client.get_notifications()\n    print(f\"You have {len(notifications.get('result', []))} notifications\")\n    \n    # Get member profile\n    member = client.get_member()\n    print(f\"Hello, {member.get('result', {}).get('username')}!\")\n    \n    # Get node info\n    node = client.get_node(\"python\")\n    print(f\"Node: {node.get('result', {}).get('title')}\")\n    \n    # Get topics from a node\n    topics = client.get_node_topics(\"python\")\n    for topic in topics.get('result', []):\n        print(f\"- {topic.get('title')}\")\n    \n    # Get hot topics (no token required)\n    hot_topics = client.get_hot_topics()\n    print(\"\\n🔥 Hot Topics:\")\n    for topic in hot_topics[:5]:\n        print(f\"- [{topic['node']['title']}] {topic['title']} ({topic['replies']} replies)\")\n\nTesting with REST Client\n\nYou can use VS Code's REST Client extension to test the API:\n\n### Get hot topics (classic API, no auth required)\nGET https://www.v2ex.com/api/topics/hot.json\n\n### Get latest topics (classic API, no auth required)\nGET https://www.v2ex.com/api/topics/latest.json\n\n### Get notifications\nGET https://www.v2ex.com/api/v2/notifications\nAuthorization: Bearer <your-token>\n\n### Get member profile\nGET https://www.v2ex.com/api/v2/member\nAuthorization: Bearer <your-token>\n\n### Get node info\nGET https://www.v2ex.com/api/v2/nodes/programmer\nAuthorization: Bearer <your-token>\n\n### Get topic\nGET https://www.v2ex.com/api/v2/topics/12345\nAuthorization: Bearer <your-token>"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/timqian/v2ex",
    "publisherUrl": "https://clawhub.ai/timqian/v2ex",
    "owner": "timqian",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/v2ex",
    "downloadUrl": "https://openagent3.xyz/downloads/v2ex",
    "agentUrl": "https://openagent3.xyz/skills/v2ex/agent",
    "manifestUrl": "https://openagent3.xyz/skills/v2ex/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/v2ex/agent.md"
  }
}