{
  "schemaVersion": "1.0",
  "item": {
    "slug": "bvg-route",
    "name": "BVG (Berliner Verkehrsbetriebe) Route Planner",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jaysonsantos/bvg-route",
    "canonicalUrl": "https://clawhub.ai/jaysonsantos/bvg-route",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/bvg-route",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=bvg-route",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/journeys.sh",
      "references/API.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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/bvg-route"
    },
    "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/bvg-route",
    "agentPageUrl": "https://openagent3.xyz/skills/bvg-route/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bvg-route/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bvg-route/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": "BVG Route Planner Skill",
        "body": "Purpose\n\nProvide concise, actionable public-transport directions in Berlin using the v6.bvg.transport.rest API.\n\nWhen to use\n\nUser asks for directions between two places in Berlin (addresses, stop names, or coordinates).\nUser asks for next departures from a stop/station.\nUser requests to arrive by a specific time (arrive-by) or depart at a specific time.\n\nCore behavior\n\nResolve from and to into either stop IDs (preferred) or address/POI objects using GET /locations or /locations/nearby.\nCall GET /journeys with arrival or departure parameter as requested, request results=3 and stopovers=true to construct step-by-step legs.\nFormat 2–3 options: show total travel time, number of transfers, walking time, and estimated departure/arrival times.\nProvide step-by-step instructions for the selected journey: walk to stop A (distance/time), take line X toward Y, get off at stop B (platform if available), final walk to destination.\nWhen appropriate, include the journey refreshToken and a GET /journeys/:ref refresh step to update realtime delays.\nFor simple next-departure queries, use GET /stops/:id/departures with duration=20 (or configurable) and return the nearest 3 departures.\n\nOutputs\n\nHuman-readable routes with departure times, transfers, walking distances, estimated arrival, and concise step list.\nMachine-friendly JSON (optional) containing journey id, refreshToken, legs, and stop IDs for programmatic refreshes.\n\nReferences\n\nThe skill expects to use the v6.bvg.transport.rest API (https://v6.bvg.transport.rest/api.html). See references/API.md for summary and examples.\n\nExamples (triggers)\n\n\"How do I get from Invalidenstraße 43 10115 to Leibnizstraße 62 by public transport?\"\n\"When is the next U-Bahn from U Rosenthaler Platz?\"\n\"Find journeys that arrive at Deutsche Oper by 17:50 tonight, fastest option first.\"\n\nNotes for implementers\n\nIBNR format (CRITICAL): The /journeys endpoint requires base IBNR codes only (6 digits), not the full ID with :: suffixes.\n\n❌ Wrong: de:11000:900110001::3 or de:11000:900110001\n✅ Correct: 900110001 (extract base 6-digit code from /stops results)\nProcess: Call /stops?query=... first, extract the 6-digit id from results, use that for /journeys.\n\n\nURL encoding (CRITICAL): All query string parameters must be properly URL-encoded using urllib.parse.quote() or equivalent. Examples:\n\nSpace → %20\nö → %C3%B6\nü → %C3%BC\nÄ → %C3%84\nSpecial chars like &, ?, # → their percent-encoded equivalents\nExample: Schönhauser Allee → Sch%C3%B6nhauser%20Allee\nEvery API call with address/stop name strings in query params must encode before building the URL.\n\n\nPrefer stop/station IDs when calling /journeys (more reliable than fuzzy names): Use /stops?query=... to resolve names → base IBNR.\nUse stopovers=true to build readable step lists; include entrances=true when walking-to-entrance accuracy is important.\nRequest results=3 then offer the top 2–3 to the user.\nHandle timezone-aware ISO datetimes; default to Europe/Berlin if none provided."
      }
    ],
    "body": "BVG Route Planner Skill\n\nPurpose\n\nProvide concise, actionable public-transport directions in Berlin using the v6.bvg.transport.rest API.\n\nWhen to use\n\nUser asks for directions between two places in Berlin (addresses, stop names, or coordinates).\nUser asks for next departures from a stop/station.\nUser requests to arrive by a specific time (arrive-by) or depart at a specific time.\n\nCore behavior\n\nResolve from and to into either stop IDs (preferred) or address/POI objects using GET /locations or /locations/nearby.\nCall GET /journeys with arrival or departure parameter as requested, request results=3 and stopovers=true to construct step-by-step legs.\nFormat 2–3 options: show total travel time, number of transfers, walking time, and estimated departure/arrival times.\nProvide step-by-step instructions for the selected journey: walk to stop A (distance/time), take line X toward Y, get off at stop B (platform if available), final walk to destination.\nWhen appropriate, include the journey refreshToken and a GET /journeys/:ref refresh step to update realtime delays.\nFor simple next-departure queries, use GET /stops/:id/departures with duration=20 (or configurable) and return the nearest 3 departures.\n\nOutputs\n\nHuman-readable routes with departure times, transfers, walking distances, estimated arrival, and concise step list.\nMachine-friendly JSON (optional) containing journey id, refreshToken, legs, and stop IDs for programmatic refreshes.\n\nReferences\n\nThe skill expects to use the v6.bvg.transport.rest API (https://v6.bvg.transport.rest/api.html). See references/API.md for summary and examples.\n\nExamples (triggers)\n\n\"How do I get from Invalidenstraße 43 10115 to Leibnizstraße 62 by public transport?\"\n\"When is the next U-Bahn from U Rosenthaler Platz?\"\n\"Find journeys that arrive at Deutsche Oper by 17:50 tonight, fastest option first.\"\n\nNotes for implementers\n\nIBNR format (CRITICAL): The /journeys endpoint requires base IBNR codes only (6 digits), not the full ID with :: suffixes.\n❌ Wrong: de:11000:900110001::3 or de:11000:900110001\n✅ Correct: 900110001 (extract base 6-digit code from /stops results)\nProcess: Call /stops?query=... first, extract the 6-digit id from results, use that for /journeys.\nURL encoding (CRITICAL): All query string parameters must be properly URL-encoded using urllib.parse.quote() or equivalent. Examples:\nSpace → %20\nö → %C3%B6\nü → %C3%BC\nÄ → %C3%84\nSpecial chars like &, ?, # → their percent-encoded equivalents\nExample: Schönhauser Allee → Sch%C3%B6nhauser%20Allee\nEvery API call with address/stop name strings in query params must encode before building the URL.\nPrefer stop/station IDs when calling /journeys (more reliable than fuzzy names): Use /stops?query=... to resolve names → base IBNR.\nUse stopovers=true to build readable step lists; include entrances=true when walking-to-entrance accuracy is important.\nRequest results=3 then offer the top 2–3 to the user.\nHandle timezone-aware ISO datetimes; default to Europe/Berlin if none provided."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jaysonsantos/bvg-route",
    "publisherUrl": "https://clawhub.ai/jaysonsantos/bvg-route",
    "owner": "jaysonsantos",
    "version": "0.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/bvg-route",
    "downloadUrl": "https://openagent3.xyz/downloads/bvg-route",
    "agentUrl": "https://openagent3.xyz/skills/bvg-route/agent",
    "manifestUrl": "https://openagent3.xyz/skills/bvg-route/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/bvg-route/agent.md"
  }
}