{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ns-trains",
    "name": "NS Trains",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/eggressive/ns-trains",
    "canonicalUrl": "https://clawhub.ai/eggressive/ns-trains",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ns-trains",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ns-trains",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SECURITY.md",
      "SKILL.md",
      "scripts/arrivals.mjs",
      "scripts/commute.mjs",
      "scripts/departures.mjs",
      "scripts/disruptions.mjs"
    ],
    "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/ns-trains"
    },
    "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/ns-trains",
    "agentPageUrl": "https://openagent3.xyz/skills/ns-trains/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ns-trains/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ns-trains/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": "NS Trains Skill",
        "body": "Check Dutch train schedules, departures, disruptions, and plan journeys using the official NS (Nederlandse Spoorwegen) API."
      },
      {
        "title": "1. Get an NS subscription key",
        "body": "Go to NS API Portal\nCreate an account and subscribe to the Ns-App product (free tier available)\nCopy your Primary Key"
      },
      {
        "title": "2. Set Environment Variables",
        "body": "export NS_SUBSCRIPTION_KEY=\"your-subscription-key-here\"   # preferred\n# Back-compat:\nexport NS_API_KEY=\"$NS_SUBSCRIPTION_KEY\"                   # legacy name still supported\n\n# Optional: Configure commute stations for quick shortcuts\nexport NS_HOME_STATION=\"Utrecht Centraal\"\nexport NS_WORK_STATION=\"Amsterdam Zuid\"\n\nFor security, prefer injecting these env vars via your runtime secret mechanism rather than committing them anywhere. Avoid printing or sharing your subscription key."
      },
      {
        "title": "🚆 Commute shortcuts",
        "body": "node {baseDir}/scripts/commute.mjs --to-work   # Morning: Home → Work\nnode {baseDir}/scripts/commute.mjs --to-home   # Evening: Work → Home"
      },
      {
        "title": "Plan any journey",
        "body": "node {baseDir}/scripts/journey.mjs --from \"Utrecht Centraal\" --to \"Amsterdam Zuid\""
      },
      {
        "title": "Check departures from a station",
        "body": "node {baseDir}/scripts/departures.mjs --station \"Amsterdam Centraal\""
      },
      {
        "title": "Check arrivals at a station",
        "body": "node {baseDir}/scripts/arrivals.mjs --station \"Rotterdam Centraal\""
      },
      {
        "title": "Search for stations",
        "body": "node {baseDir}/scripts/stations.mjs amsterdam\nnode {baseDir}/scripts/stations.mjs --search \"den haag\""
      },
      {
        "title": "Check current disruptions",
        "body": "node {baseDir}/scripts/disruptions.mjs\nnode {baseDir}/scripts/disruptions.mjs --from \"Utrecht\" --to \"Amsterdam\""
      },
      {
        "title": "Natural Language",
        "body": "Just ask:\n\n\"When is the next train to Amsterdam?\"\n\"Check trains from Utrecht to Rotterdam\"\n\"Any train disruptions today?\"\n\"Plan my commute to work\"\n\"What time does the train arrive?\""
      },
      {
        "title": "Output",
        "body": "Returns journey options with:\n\nDeparture/arrival times\nReal-time delays\nDuration\nTransfers\nPlatform numbers\nDisruption warnings\nCrowdedness forecast (🟢 low / 🟡 medium / 🔴 high)"
      },
      {
        "title": "Commands Reference",
        "body": "CommandDescriptioncommute.mjs [work|home]Quick commute check (requires NS_HOME_STATION & NS_WORK_STATION)journey.mjs --from X --to YPlan a journey between any stationsdepartures.mjs --station XList departures from a stationarrivals.mjs --station XList arrivals at a stationstations.mjs [query]Search for station namesdisruptions.mjsCheck current disruptions"
      },
      {
        "title": "API Endpoints Used",
        "body": "/reisinformatie-api/api/v3/trips - Journey planning\n/reisinformatie-api/api/v2/arrivals - Arrivals\n/reisinformatie-api/api/v2/departures - Departures\n/reisinformatie-api/api/v3/disruptions - Disruptions\n/reisinformatie-api/api/v2/stations - Station search"
      },
      {
        "title": "Reference",
        "body": "NS API Portal: https://apiportal.ns.nl/\nDocumentation: https://apiportal.ns.nl/startersguide\nFree tier: 5000 requests/day"
      }
    ],
    "body": "NS Trains Skill\n\nCheck Dutch train schedules, departures, disruptions, and plan journeys using the official NS (Nederlandse Spoorwegen) API.\n\nSetup\n1. Get an NS subscription key\nGo to NS API Portal\nCreate an account and subscribe to the Ns-App product (free tier available)\nCopy your Primary Key\n2. Set Environment Variables\nexport NS_SUBSCRIPTION_KEY=\"your-subscription-key-here\"   # preferred\n# Back-compat:\nexport NS_API_KEY=\"$NS_SUBSCRIPTION_KEY\"                   # legacy name still supported\n\n# Optional: Configure commute stations for quick shortcuts\nexport NS_HOME_STATION=\"Utrecht Centraal\"\nexport NS_WORK_STATION=\"Amsterdam Zuid\"\n\n\nFor security, prefer injecting these env vars via your runtime secret mechanism rather than committing them anywhere. Avoid printing or sharing your subscription key.\n\nQuick Usage\n🚆 Commute shortcuts\nnode {baseDir}/scripts/commute.mjs --to-work   # Morning: Home → Work\nnode {baseDir}/scripts/commute.mjs --to-home   # Evening: Work → Home\n\nPlan any journey\nnode {baseDir}/scripts/journey.mjs --from \"Utrecht Centraal\" --to \"Amsterdam Zuid\"\n\nCheck departures from a station\nnode {baseDir}/scripts/departures.mjs --station \"Amsterdam Centraal\"\n\nCheck arrivals at a station\nnode {baseDir}/scripts/arrivals.mjs --station \"Rotterdam Centraal\"\n\nSearch for stations\nnode {baseDir}/scripts/stations.mjs amsterdam\nnode {baseDir}/scripts/stations.mjs --search \"den haag\"\n\nCheck current disruptions\nnode {baseDir}/scripts/disruptions.mjs\nnode {baseDir}/scripts/disruptions.mjs --from \"Utrecht\" --to \"Amsterdam\"\n\nNatural Language\n\nJust ask:\n\n\"When is the next train to Amsterdam?\"\n\"Check trains from Utrecht to Rotterdam\"\n\"Any train disruptions today?\"\n\"Plan my commute to work\"\n\"What time does the train arrive?\"\nOutput\n\nReturns journey options with:\n\nDeparture/arrival times\nReal-time delays\nDuration\nTransfers\nPlatform numbers\nDisruption warnings\nCrowdedness forecast (🟢 low / 🟡 medium / 🔴 high)\nCommands Reference\nCommand\tDescription\ncommute.mjs [work|home]\tQuick commute check (requires NS_HOME_STATION & NS_WORK_STATION)\njourney.mjs --from X --to Y\tPlan a journey between any stations\ndepartures.mjs --station X\tList departures from a station\narrivals.mjs --station X\tList arrivals at a station\nstations.mjs [query]\tSearch for station names\ndisruptions.mjs\tCheck current disruptions\nAPI Endpoints Used\n/reisinformatie-api/api/v3/trips - Journey planning\n/reisinformatie-api/api/v2/arrivals - Arrivals\n/reisinformatie-api/api/v2/departures - Departures\n/reisinformatie-api/api/v3/disruptions - Disruptions\n/reisinformatie-api/api/v2/stations - Station search\nReference\nNS API Portal: https://apiportal.ns.nl/\nDocumentation: https://apiportal.ns.nl/startersguide\nFree tier: 5000 requests/day"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/eggressive/ns-trains",
    "publisherUrl": "https://clawhub.ai/eggressive/ns-trains",
    "owner": "eggressive",
    "version": "1.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ns-trains",
    "downloadUrl": "https://openagent3.xyz/downloads/ns-trains",
    "agentUrl": "https://openagent3.xyz/skills/ns-trains/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ns-trains/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ns-trains/agent.md"
  }
}