{
  "schemaVersion": "1.0",
  "item": {
    "slug": "cta",
    "name": "Cta Skill",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/brianleach/cta",
    "canonicalUrl": "https://clawhub.ai/brianleach/cta",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/cta",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cta",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CLAUDE.md",
      "README.md",
      "SKILL.md",
      "package-lock.json",
      "package.json",
      "scripts/cta.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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "cta",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T17:12:11.700Z",
      "expiresAt": "2026-05-06T17:12:11.700Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cta",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=cta",
        "contentDisposition": "attachment; filename=\"cta-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "cta"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/cta"
    },
    "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/cta",
    "agentPageUrl": "https://openagent3.xyz/skills/cta/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cta/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cta/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "CTA Chicago Transit",
        "body": "Real-time Chicago CTA transit data — L train arrivals, bus predictions, service alerts, and route information. Requires free API keys for train and bus data; alerts work without any keys."
      },
      {
        "title": "When to Use",
        "body": "User asks about CTA, L train, Blue Line, Red Line, Brown Line, or any Chicago rail line\nUser asks about Chicago bus routes, bus tracker, or train tracker\nUser asks \"when is the next train\" or \"is the Red Line running\" in a Chicago context\nUser mentions specific CTA stations (O'Hare, Midway, Clark/Lake, Belmont, etc.)\nUser asks about CTA fares, Ventra, or how to ride Chicago transit\nUser asks about CTA service alerts, delays, or detours\nUser asks about nearby stops or route information in Chicago"
      },
      {
        "title": "Data Sources",
        "body": "CTA uses 3 proprietary REST APIs. Train Tracker and Bus Tracker require free API keys. Customer Alerts is open access."
      },
      {
        "title": "Train Tracker API (requires CTA_TRAIN_API_KEY)",
        "body": "Get a free key at: https://www.transitchicago.com/developers/traintrackerapply/\n\nEndpointDescriptionArrivals by station (mapid)Train arrivals at a parent stationArrivals by stop (stpid)Train arrivals at a directional stopTrain positions (rt)Live positions of all trains on a lineFollow a run (runnumber)Track a specific train run\n\nData refreshes approximately once per minute. Daily limit: 50,000 requests per key."
      },
      {
        "title": "Bus Tracker API v2 (requires CTA_BUS_API_KEY)",
        "body": "Get a free key at: https://www.transitchicago.com/developers/bustracker/\n\nEndpointDescriptionPredictions by stopBus arrival predictions at a stopPredictions by vehiclePredictions for a specific busVehicle locationsLive bus positions on a routeRoutes listAll active bus routesRoute directionsAvailable directions for a routeStops for route/directionAll stops along a route\n\nBus data updates approximately every 30 seconds."
      },
      {
        "title": "Customer Alerts API (NO key required)",
        "body": "EndpointDescriptionRoute statusesCurrent status of all routesAll alertsAll active service alertsAlerts by routeAlerts filtered by routeAlerts by stationAlerts filtered by station"
      },
      {
        "title": "GTFS Static Feed",
        "body": "FeedFormatURLGTFS Static (zip)ZIPhttps://www.transitchicago.com/downloads/sch_data/google_transit.zip\n\nUsed for stop names, route info, and schedule lookups. Same stop IDs used across all APIs."
      },
      {
        "title": "Quick Start: Use the helper scripts",
        "body": "The scripts in this skill's scripts/ directory handle fetching, parsing, and presenting CTA data."
      },
      {
        "title": "Script: scripts/cta.mjs",
        "body": "Main entry point. Supports these commands:\n\n# L train arrivals\nnode scripts/cta.mjs arrivals --station \"Clark/Lake\"\nnode scripts/cta.mjs arrivals --mapid 40380\nnode scripts/cta.mjs arrivals --stop 30070\nnode scripts/cta.mjs arrivals --stop-search \"ohare\"\nnode scripts/cta.mjs arrivals --stop-search \"belmont\" --route Red\n\n# Bus predictions\nnode scripts/cta.mjs bus-arrivals --stop 456\nnode scripts/cta.mjs bus-arrivals --stop 456 --route 22\nnode scripts/cta.mjs bus-arrivals --stop-search \"michigan\"\n\n# Vehicle tracking\nnode scripts/cta.mjs vehicles --route Red\nnode scripts/cta.mjs bus-vehicles --route 22\n\n# Service alerts\nnode scripts/cta.mjs alerts\nnode scripts/cta.mjs alerts --route Red\n\n# Routes and stops\nnode scripts/cta.mjs routes\nnode scripts/cta.mjs bus-routes\nnode scripts/cta.mjs stops --search \"belmont\"\nnode scripts/cta.mjs stops --near 41.8781,-87.6298 --radius 0.3\nnode scripts/cta.mjs route-info --route Red\nnode scripts/cta.mjs route-info --route 22\n\n# Maintenance\nnode scripts/cta.mjs refresh-gtfs"
      },
      {
        "title": "Setup: API Keys",
        "body": "Train and bus commands require free API keys:\n\nTrain Tracker key: Apply at https://www.transitchicago.com/developers/traintrackerapply/\nBus Tracker key: Apply at https://www.transitchicago.com/developers/bustracker/\nSet environment variables: CTA_TRAIN_API_KEY and CTA_BUS_API_KEY\n\nAlert commands work without any keys."
      },
      {
        "title": "Setup: GTFS Static Data",
        "body": "On first use, run node scripts/cta.mjs refresh-gtfs to download and extract the static GTFS data (routes, stops, schedules) to ~/.cta/gtfs/. This only needs to be refreshed when CTA updates their schedule."
      },
      {
        "title": "L Train Lines Reference",
        "body": "Route CodeLineTerminalsRedRed LineHoward ↔ 95th/Dan RyanBlueBlue LineO'Hare ↔ Forest ParkBrnBrown LineKimball ↔ LoopGGreen LineHarlem/Lake ↔ Ashland/63rd or Cottage GroveOrgOrange LineMidway ↔ LoopPPurple LineLinden ↔ Howard (Express to Loop weekdays)PinkPink Line54th/Cermak ↔ LoopYYellow LineDempster-Skokie ↔ Howard"
      },
      {
        "title": "Key Bus Routes Reference",
        "body": "RouteNameNotes22ClarkMajor north-south corridor36BroadwayNorth Side lakefront77BelmontMajor east-west crosstown151SheridanLakefront express146Inner Drive/Michigan ExpressLoop to north lakefront8HalstedLong north-south route9AshlandMajor north-south corridor49WesternLongest route in system66ChicagoMajor east-west route7979thMajor south side east-west"
      },
      {
        "title": "CTA Fares Reference (2026)",
        "body": "Fare TypePriceRegular (Ventra/contactless)$2.50Bus transfer$0.25Rail-to-rail transferFree within 2 hoursReduced fare$1.251-Day Pass$5.003-Day Pass$15.007-Day Pass$20.0030-Day Pass$75.00\n\nPayment via Ventra card, Ventra app, or contactless bank card. Transfers valid for 2 hours."
      },
      {
        "title": "Tips for Users",
        "body": "Station IDs are in the 4xxxx range (parent stations); stop IDs in the 3xxxx range (directional)\nUse --station or --stop-search for name-based lookups; use --mapid for exact station IDs\nAlerts always work — no API key needed — so check alerts first if something seems wrong\nTrain data refreshes ~1 minute; bus data refreshes ~30 seconds\nFor the Loop, trains may show as arriving from different directions depending on the line"
      },
      {
        "title": "Error Handling",
        "body": "If CTA_TRAIN_API_KEY is not set, train commands print a helpful message with the signup URL\nIf CTA_BUS_API_KEY is not set, bus commands print a helpful message with the signup URL\nAlert commands always work (no key required)\nInvalid station/stop searches show \"No matching station found\" with suggestions\nNetwork errors and API error responses produce friendly messages"
      },
      {
        "title": "Response Formatting",
        "body": "When presenting transit info to the user:\n\nLead with the most actionable info (next arrival time, active alerts)\nShow times in 12-hour format with AM/PM\nInclude line color AND destination (e.g., \"Red Line toward 95th/Dan Ryan\")\nFor trains: show \"Due\" for imminent arrivals, minutes for upcoming\nFor bus predictions, show estimated minutes until arrival\nIf there are active service alerts for the route being queried, always mention them"
      },
      {
        "title": "External Endpoints",
        "body": "EndpointData SentData Receivedhttps://lapi.transitchicago.com/api/1.0/ttarrivals.aspxAPI key (query param, HTTPS)Train arrivals (JSON)https://lapi.transitchicago.com/api/1.0/ttpositions.aspxAPI key (query param, HTTPS)Train positions (JSON)https://lapi.transitchicago.com/api/1.0/ttfollow.aspxAPI key (query param, HTTPS)Train run details (JSON)https://www.ctabustracker.com/bustime/api/v2/*API key (query param, HTTPS)Bus predictions/positions (JSON)https://www.transitchicago.com/api/1.0/routes.aspxNone (GET only)Route statuses (JSON)https://www.transitchicago.com/api/1.0/alerts.aspxNone (GET only)Service alerts (JSON)https://www.transitchicago.com/downloads/sch_data/google_transit.zipNone (GET only)GTFS static data (ZIP)\n\nAll API calls use HTTPS. API keys are passed as query parameters to CTA's official APIs. No other user data is transmitted."
      },
      {
        "title": "Security & Privacy",
        "body": "API keys required — Train and Bus Tracker APIs require free developer keys passed as URL query parameters\nNo user data transmitted — requests contain only API keys and route/stop identifiers, no personal information\nLocal storage only — GTFS static data is cached locally at ~/.cta/gtfs/; no data is written elsewhere\nNo telemetry — this skill does not phone home or collect usage data\nInput handling — stop names and route IDs from user input are used only for local filtering, never interpolated into shell commands"
      },
      {
        "title": "Trust Statement",
        "body": "This skill reads publicly available transit data from CTA's official APIs. API keys are used only for CTA API authentication. The skill does not access, store, or transmit any personal information beyond the API keys configured by the user."
      }
    ],
    "body": "CTA Chicago Transit\n\nReal-time Chicago CTA transit data — L train arrivals, bus predictions, service alerts, and route information. Requires free API keys for train and bus data; alerts work without any keys.\n\nWhen to Use\nUser asks about CTA, L train, Blue Line, Red Line, Brown Line, or any Chicago rail line\nUser asks about Chicago bus routes, bus tracker, or train tracker\nUser asks \"when is the next train\" or \"is the Red Line running\" in a Chicago context\nUser mentions specific CTA stations (O'Hare, Midway, Clark/Lake, Belmont, etc.)\nUser asks about CTA fares, Ventra, or how to ride Chicago transit\nUser asks about CTA service alerts, delays, or detours\nUser asks about nearby stops or route information in Chicago\nData Sources\n\nCTA uses 3 proprietary REST APIs. Train Tracker and Bus Tracker require free API keys. Customer Alerts is open access.\n\nTrain Tracker API (requires CTA_TRAIN_API_KEY)\n\nGet a free key at: https://www.transitchicago.com/developers/traintrackerapply/\n\nEndpoint\tDescription\nArrivals by station (mapid)\tTrain arrivals at a parent station\nArrivals by stop (stpid)\tTrain arrivals at a directional stop\nTrain positions (rt)\tLive positions of all trains on a line\nFollow a run (runnumber)\tTrack a specific train run\n\nData refreshes approximately once per minute. Daily limit: 50,000 requests per key.\n\nBus Tracker API v2 (requires CTA_BUS_API_KEY)\n\nGet a free key at: https://www.transitchicago.com/developers/bustracker/\n\nEndpoint\tDescription\nPredictions by stop\tBus arrival predictions at a stop\nPredictions by vehicle\tPredictions for a specific bus\nVehicle locations\tLive bus positions on a route\nRoutes list\tAll active bus routes\nRoute directions\tAvailable directions for a route\nStops for route/direction\tAll stops along a route\n\nBus data updates approximately every 30 seconds.\n\nCustomer Alerts API (NO key required)\nEndpoint\tDescription\nRoute statuses\tCurrent status of all routes\nAll alerts\tAll active service alerts\nAlerts by route\tAlerts filtered by route\nAlerts by station\tAlerts filtered by station\nGTFS Static Feed\nFeed\tFormat\tURL\nGTFS Static (zip)\tZIP\thttps://www.transitchicago.com/downloads/sch_data/google_transit.zip\n\nUsed for stop names, route info, and schedule lookups. Same stop IDs used across all APIs.\n\nImplementation\nQuick Start: Use the helper scripts\n\nThe scripts in this skill's scripts/ directory handle fetching, parsing, and presenting CTA data.\n\nScript: scripts/cta.mjs\n\nMain entry point. Supports these commands:\n\n# L train arrivals\nnode scripts/cta.mjs arrivals --station \"Clark/Lake\"\nnode scripts/cta.mjs arrivals --mapid 40380\nnode scripts/cta.mjs arrivals --stop 30070\nnode scripts/cta.mjs arrivals --stop-search \"ohare\"\nnode scripts/cta.mjs arrivals --stop-search \"belmont\" --route Red\n\n# Bus predictions\nnode scripts/cta.mjs bus-arrivals --stop 456\nnode scripts/cta.mjs bus-arrivals --stop 456 --route 22\nnode scripts/cta.mjs bus-arrivals --stop-search \"michigan\"\n\n# Vehicle tracking\nnode scripts/cta.mjs vehicles --route Red\nnode scripts/cta.mjs bus-vehicles --route 22\n\n# Service alerts\nnode scripts/cta.mjs alerts\nnode scripts/cta.mjs alerts --route Red\n\n# Routes and stops\nnode scripts/cta.mjs routes\nnode scripts/cta.mjs bus-routes\nnode scripts/cta.mjs stops --search \"belmont\"\nnode scripts/cta.mjs stops --near 41.8781,-87.6298 --radius 0.3\nnode scripts/cta.mjs route-info --route Red\nnode scripts/cta.mjs route-info --route 22\n\n# Maintenance\nnode scripts/cta.mjs refresh-gtfs\n\nSetup: API Keys\n\nTrain and bus commands require free API keys:\n\nTrain Tracker key: Apply at https://www.transitchicago.com/developers/traintrackerapply/\nBus Tracker key: Apply at https://www.transitchicago.com/developers/bustracker/\nSet environment variables: CTA_TRAIN_API_KEY and CTA_BUS_API_KEY\n\nAlert commands work without any keys.\n\nSetup: GTFS Static Data\n\nOn first use, run node scripts/cta.mjs refresh-gtfs to download and extract the static GTFS data (routes, stops, schedules) to ~/.cta/gtfs/. This only needs to be refreshed when CTA updates their schedule.\n\nL Train Lines Reference\nRoute Code\tLine\tTerminals\nRed\tRed Line\tHoward ↔ 95th/Dan Ryan\nBlue\tBlue Line\tO'Hare ↔ Forest Park\nBrn\tBrown Line\tKimball ↔ Loop\nG\tGreen Line\tHarlem/Lake ↔ Ashland/63rd or Cottage Grove\nOrg\tOrange Line\tMidway ↔ Loop\nP\tPurple Line\tLinden ↔ Howard (Express to Loop weekdays)\nPink\tPink Line\t54th/Cermak ↔ Loop\nY\tYellow Line\tDempster-Skokie ↔ Howard\nKey Bus Routes Reference\nRoute\tName\tNotes\n22\tClark\tMajor north-south corridor\n36\tBroadway\tNorth Side lakefront\n77\tBelmont\tMajor east-west crosstown\n151\tSheridan\tLakefront express\n146\tInner Drive/Michigan Express\tLoop to north lakefront\n8\tHalsted\tLong north-south route\n9\tAshland\tMajor north-south corridor\n49\tWestern\tLongest route in system\n66\tChicago\tMajor east-west route\n79\t79th\tMajor south side east-west\nCTA Fares Reference (2026)\nFare Type\tPrice\nRegular (Ventra/contactless)\t$2.50\nBus transfer\t$0.25\nRail-to-rail transfer\tFree within 2 hours\nReduced fare\t$1.25\n1-Day Pass\t$5.00\n3-Day Pass\t$15.00\n7-Day Pass\t$20.00\n30-Day Pass\t$75.00\n\nPayment via Ventra card, Ventra app, or contactless bank card. Transfers valid for 2 hours.\n\nTips for Users\nStation IDs are in the 4xxxx range (parent stations); stop IDs in the 3xxxx range (directional)\nUse --station or --stop-search for name-based lookups; use --mapid for exact station IDs\nAlerts always work — no API key needed — so check alerts first if something seems wrong\nTrain data refreshes ~1 minute; bus data refreshes ~30 seconds\nFor the Loop, trains may show as arriving from different directions depending on the line\nError Handling\nIf CTA_TRAIN_API_KEY is not set, train commands print a helpful message with the signup URL\nIf CTA_BUS_API_KEY is not set, bus commands print a helpful message with the signup URL\nAlert commands always work (no key required)\nInvalid station/stop searches show \"No matching station found\" with suggestions\nNetwork errors and API error responses produce friendly messages\nResponse Formatting\n\nWhen presenting transit info to the user:\n\nLead with the most actionable info (next arrival time, active alerts)\nShow times in 12-hour format with AM/PM\nInclude line color AND destination (e.g., \"Red Line toward 95th/Dan Ryan\")\nFor trains: show \"Due\" for imminent arrivals, minutes for upcoming\nFor bus predictions, show estimated minutes until arrival\nIf there are active service alerts for the route being queried, always mention them\nExternal Endpoints\nEndpoint\tData Sent\tData Received\nhttps://lapi.transitchicago.com/api/1.0/ttarrivals.aspx\tAPI key (query param, HTTPS)\tTrain arrivals (JSON)\nhttps://lapi.transitchicago.com/api/1.0/ttpositions.aspx\tAPI key (query param, HTTPS)\tTrain positions (JSON)\nhttps://lapi.transitchicago.com/api/1.0/ttfollow.aspx\tAPI key (query param, HTTPS)\tTrain run details (JSON)\nhttps://www.ctabustracker.com/bustime/api/v2/*\tAPI key (query param, HTTPS)\tBus predictions/positions (JSON)\nhttps://www.transitchicago.com/api/1.0/routes.aspx\tNone (GET only)\tRoute statuses (JSON)\nhttps://www.transitchicago.com/api/1.0/alerts.aspx\tNone (GET only)\tService alerts (JSON)\nhttps://www.transitchicago.com/downloads/sch_data/google_transit.zip\tNone (GET only)\tGTFS static data (ZIP)\n\nAll API calls use HTTPS. API keys are passed as query parameters to CTA's official APIs. No other user data is transmitted.\n\nSecurity & Privacy\nAPI keys required — Train and Bus Tracker APIs require free developer keys passed as URL query parameters\nNo user data transmitted — requests contain only API keys and route/stop identifiers, no personal information\nLocal storage only — GTFS static data is cached locally at ~/.cta/gtfs/; no data is written elsewhere\nNo telemetry — this skill does not phone home or collect usage data\nInput handling — stop names and route IDs from user input are used only for local filtering, never interpolated into shell commands\nTrust Statement\n\nThis skill reads publicly available transit data from CTA's official APIs. API keys are used only for CTA API authentication. The skill does not access, store, or transmit any personal information beyond the API keys configured by the user."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/brianleach/cta",
    "publisherUrl": "https://clawhub.ai/brianleach/cta",
    "owner": "brianleach",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/cta",
    "downloadUrl": "https://openagent3.xyz/downloads/cta",
    "agentUrl": "https://openagent3.xyz/skills/cta/agent",
    "manifestUrl": "https://openagent3.xyz/skills/cta/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/cta/agent.md"
  }
}