{
  "schemaVersion": "1.0",
  "item": {
    "slug": "tabussen",
    "name": "Tabussen",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Simskii/tabussen",
    "canonicalUrl": "https://clawhub.ai/Simskii/tabussen",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/tabussen",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=tabussen",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "journey.sh",
      "search-location.sh"
    ],
    "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/tabussen"
    },
    "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/tabussen",
    "agentPageUrl": "https://openagent3.xyz/skills/tabussen/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tabussen/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tabussen/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": "Tabussen Trip Planner",
        "body": "Plan public transport journeys in Västerbotten, Sweden - including Umeå local traffic (Ultra) and regional routes (Länstrafiken Västerbotten)."
      },
      {
        "title": "Overview",
        "body": "This skill uses the ResRobot API (Trafiklab) to provide journey planning for Tabussen/Ultra. ResRobot is Sweden's national public transport API covering all operators including Länstrafiken Västerbotten.\n\nCoverage:\n\nUltra (Umeå local bus traffic)\nLänstrafiken Västerbotten (regional buses)\nConnections to/from other Swedish regions\nTrain connections where applicable"
      },
      {
        "title": "1. Search Location",
        "body": "Search for stops, stations, or points of interest.\n\n./search-location.sh <query> [limit]\n\nArgumentDescriptionqueryLocation name to search for (append ? for fuzzy search)limitNumber of results to show (default: 5, max: 10)\n\nOutput includes:\n\nID - The stop identifier (use this in journey search)\nName - Official name of the stop\nCoordinates - Latitude, longitude\nWeight - Traffic volume indicator (higher = more traffic)\n\nSearch tips:\n\nUse ? suffix for fuzzy/partial matching: \"Vasaplan?\"\nExact search without ?: \"Vasaplan\"\nInclude municipality for precision: \"Umeå Vasaplan\""
      },
      {
        "title": "2. Journey Search",
        "body": "Plan a journey between two locations using their IDs.\n\n./journey.sh <from-id> <to-id> [datetime] [mode]\n\nArgumentDescriptionfrom-idOrigin stop ID (from search)to-idDestination stop IDdatetimeOptional: \"18:30\", \"tomorrow 09:00\", \"2026-01-28 14:00\"modeOptional: \"depart\" (default) or \"arrive\"\n\nCoordinate-based search:\n\n./journey.sh \"63.825#20.263\" <to-id> [datetime] [mode]\n\nUse lat#lon format for coordinates (WGS84 decimal degrees)."
      },
      {
        "title": "Understanding User Time Intent",
        "body": "Before searching, understand what the user wants:"
      },
      {
        "title": "Intent Types",
        "body": "User SaysIntentHow to Query\"now\", \"next bus\", \"how do I get to\"Travel NowNo datetime parameter\"in 30 minutes\", \"in 1 hour\"Depart LaterCalculate time, use depart mode\"around 15:00\", \"sometime afternoon\"Around TimeQuery with offset (see below)\"arrive by 18:00\", \"need to be there at 9\"Arrive ByUse arrive mode\"tomorrow morning\", \"on Friday at 10\"Future TimeUse specific datetime"
      },
      {
        "title": "Handling \"Around Time\" Queries",
        "body": "When user wants options \"around\" a time, query 15-30 minutes earlier to show options before and after:\n\n# User: \"I want to travel around 15:00\"\n# Query at 14:30 to get options spanning 14:30-16:00+\n./journey.sh ... \"14:30\" depart"
      },
      {
        "title": "Relative Time Calculations",
        "body": "Convert relative times to absolute:\n\nUser SaysCurrent: 14:00Query Time\"in 30m\"->\"14:30\"\"in 1h\"->\"15:00\"\"in 2 hours\"->\"16:00\""
      },
      {
        "title": "LLM Response Formatting",
        "body": "When presenting journey results to users, use these emojis and formatting guidelines."
      },
      {
        "title": "Emoji Reference",
        "body": "EmojiUse ForbusBus (Tabussen/Ultra)trainTrainwalkWalking segmentclockTime/durationclock1Departure timegoalArrival timepinStop/stationhouseOrigin (home/start)targetDestinationwarningDelay or disruptioncheckOn timearrows_counterclockwiseTransfer/change"
      },
      {
        "title": "Response Structure",
        "body": "Always include these key elements from the tool output:\n\nWhen to leave - The actual time user needs to start (including walking)\nWalking segments - Distance and time for any walking\nTransport departure - When the bus actually leaves\nArrival time - When user reaches destination\nLine number and direction - Which bus to take"
      },
      {
        "title": "Example Response Format",
        "body": "For a simple direct journey:\n\n**Leave now** from Vasaplan\n\n**Vasaplan** -> **Universitetet**\nBus 1 (mot Mariehem) departs 09:07\nArrives 09:18 at Universitetet\n\nTotal: 11 min\n\nFor a journey with transfer:\n\n**Leave at 08:45**\n\nWalk 300m to Vasaplan (~4 min)\n\n**Vasaplan** -> **Umeå C** -> **Skellefteå**\n\n**Leg 1:**\nBus 1 departs 08:51\nArrives Umeå C 09:05\n\nTransfer at Umeå C (15 min)\n\n**Leg 2:**\nBus 100 (mot Skellefteå) departs 09:20\nArrives Skellefteå busstation 11:45\n\nTotal: 3h | 1 change"
      },
      {
        "title": "Walking Segment Details",
        "body": "Always show walking details:\n\nDistance in meters\nInclude walking in the \"leave time\" calculation\nWalk time estimate: ~100m per minute (normal walking speed)"
      },
      {
        "title": "Presenting Multiple Options",
        "body": "When showing journey options, make timing crystal clear:\n\nI found 3 options for you:\n\n**Option 1 - Leave now (09:00)** Recommended\nWalk 5 min -> Bus 1 at 09:07 -> arrives 09:25\nTotal: 25 min\n\n**Option 2 - Leave in 15m (09:15)**\nWalk 5 min -> Bus 1 at 09:22 -> arrives 09:40\nTotal: 25 min\n\n**Option 3 - Leave in 30m (09:30)**\nWalk 5 min -> Bus 8 at 09:37 -> arrives 09:48\nTotal: 18 min | Faster but later departure\n\nWhich works best for you?"
      },
      {
        "title": "LLM Workflow: How to Plan a Trip",
        "body": "Follow this workflow when a user asks for a trip:"
      },
      {
        "title": "Step 1: Understand Time Intent",
        "body": "Parse what the user wants:\n\n\"How do I get to...\" -> Travel now\n\"I need to be there at 18:00\" -> Arrive mode\n\"Sometime around 3pm\" -> Query 14:30, show range\n\"In about an hour\" -> Calculate from current time"
      },
      {
        "title": "Step 2: Search for Both Locations",
        "body": "Search for origin and destination separately:\n\n./search-location.sh \"Vasaplan?\"\n./search-location.sh \"Universitetet?\""
      },
      {
        "title": "Step 3: Validate Search Results",
        "body": "Check each result carefully:\n\nExact or close match? - If the name matches what the user asked for, proceed.\n\n\nMultiple results returned? - The script shows up to 10 matches. If the first result isn't clearly correct, ask the user to confirm.\n\n\nName significantly different? - If user asked for \"university\" and result shows \"Umeå Universitet\", confirm with user.\n\n\nNo results found? - Try alternative strategies (see below)."
      },
      {
        "title": "Step 4: Handle Ambiguous or Failed Searches",
        "body": "When results don't match or are ambiguous, ask clarifying questions:\n\nI searched for \"centrum\" and found multiple locations:\n1. Umeå Vasaplan (central bus hub)\n2. Skellefteå centrum\n3. Lycksele centrum\n\nWhich one did you mean?\n\nWhen no results are found, try these strategies:\n\nTry with city name:\n# If \"Storgatan 10\" fails, try:\n./search-location.sh \"Storgatan 10, Umeå?\"\n\n\n\nTry common variations:\n# \"Universitetet\" -> \"Umeå universitet\"\n# \"Sjukhuset\" -> \"NUS\" or \"Norrlands universitetssjukhus\"\n\n\n\nUse fuzzy search (add ?):\n./search-location.sh \"univ?\""
      },
      {
        "title": "Step 5: Execute Journey Search",
        "body": "Once you have confirmed IDs for both locations:\n\n./journey.sh <from-id> <to-id> [datetime] [mode]"
      },
      {
        "title": "Step 6: Format Response",
        "body": "Use the formatting guide above to present results clearly. Always use actual numbers from the tool output - never estimate or speculate."
      },
      {
        "title": "Query Formatting Rules",
        "body": "The search API is sensitive to formatting. Follow these rules:"
      },
      {
        "title": "Common Stop Names in Umeå",
        "body": "User SaysSearch For\"Vasaplan\", \"centrum\"\"Umeå Vasaplan?\"\"Universitetet\", \"uni\"\"Umeå universitet?\"\"NUS\", \"sjukhuset\"\"Norrlands universitetssjukhus?\"\"Ikea\"\"IKEA Umeå?\"\"Flygplatsen\"\"Umeå Airport?\"\"Järnvägsstationen\", \"tåget\"\"Umeå centralstation?\""
      },
      {
        "title": "Regional Destinations",
        "body": "DestinationSearch ForSkellefteå\"Skellefteå busstation?\"Lycksele\"Lycksele busstation?\"Vindeln\"Vindeln station?\"Robertsfors\"Robertsfors centrum?\"Holmsund\"Holmsund centrum?\""
      },
      {
        "title": "Street Addresses",
        "body": "Include city name for better accuracy:\n\n./search-location.sh \"Storgatan 25, Umeå?\"\n./search-location.sh \"Kungsgatan 10, Skellefteå?\""
      },
      {
        "title": "Example 1: Travel Now (Umeå Local)",
        "body": "User: \"How do I get from Vasaplan to NUS?\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"NUS?\"\n./journey.sh 740020116 740023840\n\nResponse:\n\n**Leave now** from Vasaplan\n\n**Vasaplan** -> **Universitetssjukhuset**\nBus 8 (mot Lyktvägen) departs 11:01\nArrives 11:06\n\nTotal: 5 min | Direct, no changes"
      },
      {
        "title": "Example 2: Regional Journey",
        "body": "User: \"I need to get to Skellefteå from Umeå tomorrow at 8\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"Skellefteå?\"\n./journey.sh 740020116 740000053 \"tomorrow 08:00\"\n\nResponse:\n\n**Depart tomorrow at 08:04** from Vasaplan\n\nWalk 766m to Umeå Busstation (~11 min)\n\n**Umeå Busstation** -> **Skellefteå busstation**\nBus 20 (Länstrafik mot Haparanda) departs 08:15\nArrives 10:40 at Skellefteå busstation\n\nTotal: 2h 36min | Direct (with walk)"
      },
      {
        "title": "Example 3: Arrive By Time",
        "body": "User: \"I need to be at NUS by 08:00 tomorrow\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"NUS?\"\n./journey.sh 740020116 740023840 \"tomorrow 08:00\" arrive\n\nResponse:\n\n**Arrive by 08:00** at NUS\n\n**Vasaplan** -> **Universitetssjukhuset**\nBus 9 departs **07:51**\nArrives **07:56** - 4 min buffer\n\nLeave Vasaplan by 07:51 to arrive on time!"
      },
      {
        "title": "Example 4: From Address/Coordinates",
        "body": "User: \"I'm at Storgatan 50 in Umeå, how do I get to IKEA?\"\n\n./search-location.sh \"Storgatan 50, Umeå?\"\n# If no result, use coordinates\n./journey.sh \"63.826#20.263\" 740066123"
      },
      {
        "title": "DateTime Formats",
        "body": "All times are Swedish local time (CET/CEST).\n\nFormatExampleMeaning(empty)Travel nowHH:MM\"08:30\"Today at 08:30tomorrow HH:MM\"tomorrow 09:00\"Tomorrow at 09:00YYYY-MM-DD HH:MM\"2026-01-28 14:00\"Specific date"
      },
      {
        "title": "Journey Option (Raw Tool Output)",
        "body": "==============================================================\nOPTION 1: Vasaplan -> Universitetet\n==============================================================\nDate:    2026-01-28\nDepart:  09:04\nArrive:  09:12\nChanges: 0\n\nLEGS:\n  -> BUS Länstrafik - Buss 1\n    From: 09:04 Vasaplan (Umeå kn)\n    To:   09:12 Universitetet (Umeå kn)\n    Direction: mot Mariehem"
      },
      {
        "title": "Transport Types",
        "body": "TypeDescriptionBUSTabussen/Ultra/Länstrafik busJLTRegional bus (Länstrafik)JRERegional trainWALKWalking segment"
      },
      {
        "title": "Operators in Västerbotten",
        "body": "OperatorDescriptionLänstrafiken VästerbottenRegional and local busesUltraUmeå local traffic (part of Länstrafiken)SJLong-distance trainsNorrtågRegional trains"
      },
      {
        "title": "\"No locations found\"",
        "body": "The search returned no results.\n\nStrategies:\n\nCheck spelling (Swedish: å, ä, ö)\nTry with city name suffix\nUse fuzzy search (add ?)\nTry common alternative names\nAsk user for clarification"
      },
      {
        "title": "\"No journeys found\"",
        "body": "No routes available.\n\nStrategies:\n\nCheck if service operates at that hour (late night limited)\nTry different departure time\nSuggest alternative nearby stops\nNote that some regional routes have limited frequency"
      },
      {
        "title": "Common Issues",
        "body": "IssueSolution\"Vasaplan\" returns multipleUse \"Umeå Vasaplan\"Stop not foundTry fuzzy search with ?No late-night routesUltra has limited night serviceLong wait timesRegional routes may be hourly"
      },
      {
        "title": "Popular Umeå Stops (Ultra)",
        "body": "StopIDNotesVasaplan740020116Central hubUniversitetssjukhuset (NUS)740023840HospitalUniversum740026881University areaUmeå Busstation-Regional bus departuresVästerslätt Centrum740045407Western suburb"
      },
      {
        "title": "Key Regional Stops",
        "body": "StopIDNotesSkellefteå busstation740000053Regional hubLycksele busstation-Inland hubVindeln station-Train connectionRobertsfors centrum-Coastal route"
      },
      {
        "title": "API Details (For Script Development)",
        "body": "This skill uses ResRobot API v2.1 from Trafiklab.\n\nBase URL: https://api.resrobot.se/v2.1/\n\nEndpoints:\n\nStop lookup: /location.name\nJourney planner: /trip\n\nKey Parameters:\n\naccessId - API key (required)\nformat - json or xml\noriginId / destId - Stop IDs\ndate / time - Travel date/time\nsearchForArrival - 1 for arrive-by searches\n\nGet API Key: Register at https://developer.trafiklab.se"
      },
      {
        "title": "Ultra (Umeå Local)",
        "body": "Frequent service in central Umeå\nLines 1-9 are most common\nNight buses (N-lines) on weekends\nReal-time info available in app"
      },
      {
        "title": "Länstrafiken (Regional)",
        "body": "Line 100: Umeå - Skellefteå (frequent)\nLine 12/20: Coastal routes\nLines 30-49: Inland routes\nFrequency varies by route"
      },
      {
        "title": "Tips for Users",
        "body": "Vasaplan is the main hub for both Ultra and regional\nMany regional buses depart from Vasaplan, not train station\nTrain station (Umeå C) is separate from bus station\nIKEA and Avion have good bus connections"
      },
      {
        "title": "When to Ask Clarifying Questions",
        "body": "Always ask when:\n\nSearch returns no results:\n\n\"I couldn't find [location]. Could you provide more details?\"\n\n\n\nMultiple plausible matches:\n\n\"I found several stops matching '[query]': [list]. Which one?\"\n\n\n\nResult name very different from query:\n\n\"You asked for '[user query]' but I found '[result name]'. Is this correct?\"\n\n\n\nUser request is vague:\n\n\"From where in Umeå? Vasaplan (central), or another location?\"\n\n\n\nTime is unclear:\n\n\"When do you want to travel? Now, or at a specific time?\""
      }
    ],
    "body": "Tabussen Trip Planner\n\nPlan public transport journeys in Västerbotten, Sweden - including Umeå local traffic (Ultra) and regional routes (Länstrafiken Västerbotten).\n\nOverview\n\nThis skill uses the ResRobot API (Trafiklab) to provide journey planning for Tabussen/Ultra. ResRobot is Sweden's national public transport API covering all operators including Länstrafiken Västerbotten.\n\nCoverage:\n\nUltra (Umeå local bus traffic)\nLänstrafiken Västerbotten (regional buses)\nConnections to/from other Swedish regions\nTrain connections where applicable\nCommands\n1. Search Location\n\nSearch for stops, stations, or points of interest.\n\n./search-location.sh <query> [limit]\n\nArgument\tDescription\nquery\tLocation name to search for (append ? for fuzzy search)\nlimit\tNumber of results to show (default: 5, max: 10)\n\nOutput includes:\n\nID - The stop identifier (use this in journey search)\nName - Official name of the stop\nCoordinates - Latitude, longitude\nWeight - Traffic volume indicator (higher = more traffic)\n\nSearch tips:\n\nUse ? suffix for fuzzy/partial matching: \"Vasaplan?\"\nExact search without ?: \"Vasaplan\"\nInclude municipality for precision: \"Umeå Vasaplan\"\n2. Journey Search\n\nPlan a journey between two locations using their IDs.\n\n./journey.sh <from-id> <to-id> [datetime] [mode]\n\nArgument\tDescription\nfrom-id\tOrigin stop ID (from search)\nto-id\tDestination stop ID\ndatetime\tOptional: \"18:30\", \"tomorrow 09:00\", \"2026-01-28 14:00\"\nmode\tOptional: \"depart\" (default) or \"arrive\"\n\nCoordinate-based search:\n\n./journey.sh \"63.825#20.263\" <to-id> [datetime] [mode]\n\n\nUse lat#lon format for coordinates (WGS84 decimal degrees).\n\nUnderstanding User Time Intent\n\nBefore searching, understand what the user wants:\n\nIntent Types\nUser Says\tIntent\tHow to Query\n\"now\", \"next bus\", \"how do I get to\"\tTravel Now\tNo datetime parameter\n\"in 30 minutes\", \"in 1 hour\"\tDepart Later\tCalculate time, use depart mode\n\"around 15:00\", \"sometime afternoon\"\tAround Time\tQuery with offset (see below)\n\"arrive by 18:00\", \"need to be there at 9\"\tArrive By\tUse arrive mode\n\"tomorrow morning\", \"on Friday at 10\"\tFuture Time\tUse specific datetime\nHandling \"Around Time\" Queries\n\nWhen user wants options \"around\" a time, query 15-30 minutes earlier to show options before and after:\n\n# User: \"I want to travel around 15:00\"\n# Query at 14:30 to get options spanning 14:30-16:00+\n./journey.sh ... \"14:30\" depart\n\nRelative Time Calculations\n\nConvert relative times to absolute:\n\nUser Says\tCurrent: 14:00\tQuery Time\n\"in 30m\"\t->\t\"14:30\"\n\"in 1h\"\t->\t\"15:00\"\n\"in 2 hours\"\t->\t\"16:00\"\nLLM Response Formatting\n\nWhen presenting journey results to users, use these emojis and formatting guidelines.\n\nEmoji Reference\nEmoji\tUse For\nbus\tBus (Tabussen/Ultra)\ntrain\tTrain\nwalk\tWalking segment\nclock\tTime/duration\nclock1\tDeparture time\ngoal\tArrival time\npin\tStop/station\nhouse\tOrigin (home/start)\ntarget\tDestination\nwarning\tDelay or disruption\ncheck\tOn time\narrows_counterclockwise\tTransfer/change\nResponse Structure\n\nAlways include these key elements from the tool output:\n\nWhen to leave - The actual time user needs to start (including walking)\nWalking segments - Distance and time for any walking\nTransport departure - When the bus actually leaves\nArrival time - When user reaches destination\nLine number and direction - Which bus to take\nExample Response Format\n\nFor a simple direct journey:\n\n**Leave now** from Vasaplan\n\n**Vasaplan** -> **Universitetet**\nBus 1 (mot Mariehem) departs 09:07\nArrives 09:18 at Universitetet\n\nTotal: 11 min\n\n\nFor a journey with transfer:\n\n**Leave at 08:45**\n\nWalk 300m to Vasaplan (~4 min)\n\n**Vasaplan** -> **Umeå C** -> **Skellefteå**\n\n**Leg 1:**\nBus 1 departs 08:51\nArrives Umeå C 09:05\n\nTransfer at Umeå C (15 min)\n\n**Leg 2:**\nBus 100 (mot Skellefteå) departs 09:20\nArrives Skellefteå busstation 11:45\n\nTotal: 3h | 1 change\n\nWalking Segment Details\n\nAlways show walking details:\n\nDistance in meters\nInclude walking in the \"leave time\" calculation\nWalk time estimate: ~100m per minute (normal walking speed)\nPresenting Multiple Options\n\nWhen showing journey options, make timing crystal clear:\n\nI found 3 options for you:\n\n**Option 1 - Leave now (09:00)** Recommended\nWalk 5 min -> Bus 1 at 09:07 -> arrives 09:25\nTotal: 25 min\n\n**Option 2 - Leave in 15m (09:15)**\nWalk 5 min -> Bus 1 at 09:22 -> arrives 09:40\nTotal: 25 min\n\n**Option 3 - Leave in 30m (09:30)**\nWalk 5 min -> Bus 8 at 09:37 -> arrives 09:48\nTotal: 18 min | Faster but later departure\n\nWhich works best for you?\n\nLLM Workflow: How to Plan a Trip\n\nFollow this workflow when a user asks for a trip:\n\nStep 1: Understand Time Intent\n\nParse what the user wants:\n\n\"How do I get to...\" -> Travel now\n\"I need to be there at 18:00\" -> Arrive mode\n\"Sometime around 3pm\" -> Query 14:30, show range\n\"In about an hour\" -> Calculate from current time\nStep 2: Search for Both Locations\n\nSearch for origin and destination separately:\n\n./search-location.sh \"Vasaplan?\"\n./search-location.sh \"Universitetet?\"\n\nStep 3: Validate Search Results\n\nCheck each result carefully:\n\nExact or close match? - If the name matches what the user asked for, proceed.\n\nMultiple results returned? - The script shows up to 10 matches. If the first result isn't clearly correct, ask the user to confirm.\n\nName significantly different? - If user asked for \"university\" and result shows \"Umeå Universitet\", confirm with user.\n\nNo results found? - Try alternative strategies (see below).\n\nStep 4: Handle Ambiguous or Failed Searches\n\nWhen results don't match or are ambiguous, ask clarifying questions:\n\nI searched for \"centrum\" and found multiple locations:\n1. Umeå Vasaplan (central bus hub)\n2. Skellefteå centrum\n3. Lycksele centrum\n\nWhich one did you mean?\n\n\nWhen no results are found, try these strategies:\n\nTry with city name:\n\n# If \"Storgatan 10\" fails, try:\n./search-location.sh \"Storgatan 10, Umeå?\"\n\n\nTry common variations:\n\n# \"Universitetet\" -> \"Umeå universitet\"\n# \"Sjukhuset\" -> \"NUS\" or \"Norrlands universitetssjukhus\"\n\n\nUse fuzzy search (add ?):\n\n./search-location.sh \"univ?\"\n\nStep 5: Execute Journey Search\n\nOnce you have confirmed IDs for both locations:\n\n./journey.sh <from-id> <to-id> [datetime] [mode]\n\nStep 6: Format Response\n\nUse the formatting guide above to present results clearly. Always use actual numbers from the tool output - never estimate or speculate.\n\nQuery Formatting Rules\n\nThe search API is sensitive to formatting. Follow these rules:\n\nCommon Stop Names in Umeå\nUser Says\tSearch For\n\"Vasaplan\", \"centrum\"\t\"Umeå Vasaplan?\"\n\"Universitetet\", \"uni\"\t\"Umeå universitet?\"\n\"NUS\", \"sjukhuset\"\t\"Norrlands universitetssjukhus?\"\n\"Ikea\"\t\"IKEA Umeå?\"\n\"Flygplatsen\"\t\"Umeå Airport?\"\n\"Järnvägsstationen\", \"tåget\"\t\"Umeå centralstation?\"\nRegional Destinations\nDestination\tSearch For\nSkellefteå\t\"Skellefteå busstation?\"\nLycksele\t\"Lycksele busstation?\"\nVindeln\t\"Vindeln station?\"\nRobertsfors\t\"Robertsfors centrum?\"\nHolmsund\t\"Holmsund centrum?\"\nStreet Addresses\n\nInclude city name for better accuracy:\n\n./search-location.sh \"Storgatan 25, Umeå?\"\n./search-location.sh \"Kungsgatan 10, Skellefteå?\"\n\nExamples\nExample 1: Travel Now (Umeå Local)\n\nUser: \"How do I get from Vasaplan to NUS?\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"NUS?\"\n./journey.sh 740020116 740023840\n\n\nResponse:\n\n**Leave now** from Vasaplan\n\n**Vasaplan** -> **Universitetssjukhuset**\nBus 8 (mot Lyktvägen) departs 11:01\nArrives 11:06\n\nTotal: 5 min | Direct, no changes\n\nExample 2: Regional Journey\n\nUser: \"I need to get to Skellefteå from Umeå tomorrow at 8\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"Skellefteå?\"\n./journey.sh 740020116 740000053 \"tomorrow 08:00\"\n\n\nResponse:\n\n**Depart tomorrow at 08:04** from Vasaplan\n\nWalk 766m to Umeå Busstation (~11 min)\n\n**Umeå Busstation** -> **Skellefteå busstation**\nBus 20 (Länstrafik mot Haparanda) departs 08:15\nArrives 10:40 at Skellefteå busstation\n\nTotal: 2h 36min | Direct (with walk)\n\nExample 3: Arrive By Time\n\nUser: \"I need to be at NUS by 08:00 tomorrow\"\n\n./search-location.sh \"Umeå Vasaplan\"\n./search-location.sh \"NUS?\"\n./journey.sh 740020116 740023840 \"tomorrow 08:00\" arrive\n\n\nResponse:\n\n**Arrive by 08:00** at NUS\n\n**Vasaplan** -> **Universitetssjukhuset**\nBus 9 departs **07:51**\nArrives **07:56** - 4 min buffer\n\nLeave Vasaplan by 07:51 to arrive on time!\n\nExample 4: From Address/Coordinates\n\nUser: \"I'm at Storgatan 50 in Umeå, how do I get to IKEA?\"\n\n./search-location.sh \"Storgatan 50, Umeå?\"\n# If no result, use coordinates\n./journey.sh \"63.826#20.263\" 740066123\n\nDateTime Formats\n\nAll times are Swedish local time (CET/CEST).\n\nFormat\tExample\tMeaning\n(empty)\t\tTravel now\nHH:MM\t\"08:30\"\tToday at 08:30\ntomorrow HH:MM\t\"tomorrow 09:00\"\tTomorrow at 09:00\nYYYY-MM-DD HH:MM\t\"2026-01-28 14:00\"\tSpecific date\nOutput Format\nJourney Option (Raw Tool Output)\n==============================================================\nOPTION 1: Vasaplan -> Universitetet\n==============================================================\nDate:    2026-01-28\nDepart:  09:04\nArrive:  09:12\nChanges: 0\n\nLEGS:\n  -> BUS Länstrafik - Buss 1\n    From: 09:04 Vasaplan (Umeå kn)\n    To:   09:12 Universitetet (Umeå kn)\n    Direction: mot Mariehem\n\nTransport Types\nType\tDescription\nBUS\tTabussen/Ultra/Länstrafik bus\nJLT\tRegional bus (Länstrafik)\nJRE\tRegional train\nWALK\tWalking segment\nOperators in Västerbotten\nOperator\tDescription\nLänstrafiken Västerbotten\tRegional and local buses\nUltra\tUmeå local traffic (part of Länstrafiken)\nSJ\tLong-distance trains\nNorrtåg\tRegional trains\nError Handling\n\"No locations found\"\n\nThe search returned no results.\n\nStrategies:\n\nCheck spelling (Swedish: å, ä, ö)\nTry with city name suffix\nUse fuzzy search (add ?)\nTry common alternative names\nAsk user for clarification\n\"No journeys found\"\n\nNo routes available.\n\nStrategies:\n\nCheck if service operates at that hour (late night limited)\nTry different departure time\nSuggest alternative nearby stops\nNote that some regional routes have limited frequency\nCommon Issues\nIssue\tSolution\n\"Vasaplan\" returns multiple\tUse \"Umeå Vasaplan\"\nStop not found\tTry fuzzy search with ?\nNo late-night routes\tUltra has limited night service\nLong wait times\tRegional routes may be hourly\nQuick Reference\nPopular Umeå Stops (Ultra)\nStop\tID\tNotes\nVasaplan\t740020116\tCentral hub\nUniversitetssjukhuset (NUS)\t740023840\tHospital\nUniversum\t740026881\tUniversity area\nUmeå Busstation\t-\tRegional bus departures\nVästerslätt Centrum\t740045407\tWestern suburb\nKey Regional Stops\nStop\tID\tNotes\nSkellefteå busstation\t740000053\tRegional hub\nLycksele busstation\t-\tInland hub\nVindeln station\t-\tTrain connection\nRobertsfors centrum\t-\tCoastal route\nAPI Details (For Script Development)\n\nThis skill uses ResRobot API v2.1 from Trafiklab.\n\nBase URL: https://api.resrobot.se/v2.1/\n\nEndpoints:\n\nStop lookup: /location.name\nJourney planner: /trip\n\nKey Parameters:\n\naccessId - API key (required)\nformat - json or xml\noriginId / destId - Stop IDs\ndate / time - Travel date/time\nsearchForArrival - 1 for arrive-by searches\n\nGet API Key: Register at https://developer.trafiklab.se\n\nNotes on Västerbotten Traffic\nUltra (Umeå Local)\nFrequent service in central Umeå\nLines 1-9 are most common\nNight buses (N-lines) on weekends\nReal-time info available in app\nLänstrafiken (Regional)\nLine 100: Umeå - Skellefteå (frequent)\nLine 12/20: Coastal routes\nLines 30-49: Inland routes\nFrequency varies by route\nTips for Users\nVasaplan is the main hub for both Ultra and regional\nMany regional buses depart from Vasaplan, not train station\nTrain station (Umeå C) is separate from bus station\nIKEA and Avion have good bus connections\nWhen to Ask Clarifying Questions\n\nAlways ask when:\n\nSearch returns no results:\n\n\"I couldn't find [location]. Could you provide more details?\"\n\nMultiple plausible matches:\n\n\"I found several stops matching '[query]': [list]. Which one?\"\n\nResult name very different from query:\n\n\"You asked for '[user query]' but I found '[result name]'. Is this correct?\"\n\nUser request is vague:\n\n\"From where in Umeå? Vasaplan (central), or another location?\"\n\nTime is unclear:\n\n\"When do you want to travel? Now, or at a specific time?\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Simskii/tabussen",
    "publisherUrl": "https://clawhub.ai/Simskii/tabussen",
    "owner": "Simskii",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/tabussen",
    "downloadUrl": "https://openagent3.xyz/downloads/tabussen",
    "agentUrl": "https://openagent3.xyz/skills/tabussen/agent",
    "manifestUrl": "https://openagent3.xyz/skills/tabussen/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/tabussen/agent.md"
  }
}