{
  "schemaVersion": "1.0",
  "item": {
    "slug": "korea-metropolitan-bus-alerts",
    "name": "Korea metropolitan bus alerts",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Hsooooo/korea-metropolitan-bus-alerts",
    "canonicalUrl": "https://clawhub.ai/Hsooooo/korea-metropolitan-bus-alerts",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/korea-metropolitan-bus-alerts",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=korea-metropolitan-bus-alerts",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/api_reference.md",
      "references/cron_recipe.md",
      "scripts/README.md",
      "scripts/city_codes.md",
      "scripts/cron_builder.py"
    ],
    "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/korea-metropolitan-bus-alerts"
    },
    "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/korea-metropolitan-bus-alerts",
    "agentPageUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/agent",
    "manifestUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/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": "수도권 버스 도착 알림 (Clawdbot cron)",
        "body": "Scheduled bus arrival alerts powered by 국토교통부 TAGO OpenAPI.\n\nThis skill is designed for users running Clawdbot Gateway + Clawdbot cron. Users register rules like:\n\n\"평일 오전 7시, 인천 한빛초등학교, 535\"\n\"평일 오후 5시30분, 고양 향동초등학교, 730, 503\"\n\nThen the system sends arrival summaries to the registering user (DM) on schedule.\n\nNote (MVP): stop resolution is done via stop name search (cityCode + keyword). GPS-based nearby lookup exists but may return 0 results depending on key/region."
      },
      {
        "title": "Prerequisites",
        "body": "A running Clawdbot Gateway (Telegram/Slack/etc. already configured)\nClawdbot cron enabled/usable\nA data.go.kr API key for TAGO\n(setup 자동화 사용 시) systemctl --user 가 동작하는 환경 (systemd user service)\n(rule_wizard에서 cron 등록까지 하려면) clawdbot CLI"
      },
      {
        "title": "One-time setup: TAGO API key",
        "body": "You must set a TAGO service key in your environment (never commit or paste it into markdown).\n\nRecommended env var:\n\nTAGO_SERVICE_KEY"
      },
      {
        "title": "Option A (fastest): one-off test in your current shell",
        "body": "Good for quick manual tests; cron jobs will NOT inherit this unless the Gateway service has it.\n\nexport TAGO_SERVICE_KEY='...'"
      },
      {
        "title": "Option B (recommended): one-command setup (auto-detect systemd unit)",
        "body": "This is the most “set it once and forget it” flow.\n\nRun:\n\npython3 korea-metropolitan-bus-alerts/scripts/setup.py\n\nIf your network blocks the endpoint or TAGO returns 403 during the smoke test, you can still complete setup:\n\npython3 korea-metropolitan-bus-alerts/scripts/setup.py --skip-smoke\n\nIt will:\n\nAuto-detect your Gateway systemd user service (supports custom unit names)\nPrompt for TAGO_SERVICE_KEY (hidden input)\nSave it to ~/.clawdbot/secrets/tago.env (chmod 600)\nWrite a systemd override to load that env file\nRestart the Gateway\nRun a small TAGO smoke test\n\n(Advanced/manual) If you prefer shell scripts, korea-metropolitan-bus-alerts/scripts/set_tago_key.sh is still available, but setup.py is the recommended UX."
      },
      {
        "title": "Safety notes",
        "body": "Never commit .env / tago.env.\nAvoid sharing outputs of docker compose config or similar commands that may print env values."
      },
      {
        "title": "A) Test TAGO connectivity (manual)",
        "body": "export TAGO_SERVICE_KEY='...'\npython3 korea-metropolitan-bus-alerts/scripts/tago_bus_alert.py nearby-stops --lat 37.5665 --long 126.9780"
      },
      {
        "title": "B) Register an alert rule (interactive)",
        "body": "Tell the agent something like:\n\n\"평일 07:00, 인천 한빛초등학교, 535 알림 등록해줘\"\n\nIf the stop name is ambiguous (e.g., opposite side of road), the agent MUST ask a follow-up question to pick the correct direction/stop candidate before creating the rule."
      },
      {
        "title": "C) List rules",
        "body": "\"버스 알림 목록 보여줘\""
      },
      {
        "title": "D) Delete a rule",
        "body": "\"버스 알림 3번 삭제해줘\" (confirm before delete)"
      },
      {
        "title": "E) Test a rule (run now)",
        "body": "\"방금 등록한 규칙 테스트해줘\" (one-time message)"
      },
      {
        "title": "Supported schedule expressions (MVP)",
        "body": "매일 HH:MM\n평일 HH:MM\n주말 HH:MM\n\n(Phase 2: arbitrary cron expressions)"
      },
      {
        "title": "Cron implementation notes",
        "body": "Use isolated cron jobs (sessionTarget: isolated) + deliver: true.\nDelivery is DM-only to the registering user.\nSee references/cron_recipe.md and scripts/cron_builder.py."
      },
      {
        "title": "Interactive registration helper (server-side)",
        "body": "For integration testing (and for power users), use:\n\nscripts/rule_wizard.py register\n\nIt will:\n\nAsk for schedule/time/routes\nResolve stop candidates via GPS nearby lookup (direction disambiguation)\nGenerate the job JSON\nOptionally call clawdbot cron add to register it"
      },
      {
        "title": "Data source",
        "body": "Single provider only (MVP):\n\n정류장 조회: BusSttnInfoInqireService (15098534)\n도착 조회: ArvlInfoInqireService (15098530)"
      },
      {
        "title": "Safety / Security",
        "body": "Never write API keys/tokens/passwords into markdown files.\nFor browser automation on logged-in pages: require explicit user confirmation.\nFor destructive operations (cron delete): confirm before acting.\nDM-only delivery (MVP): do not broadcast to groups/channels."
      },
      {
        "title": "Implementation notes",
        "body": "Prefer scripts under scripts/ for deterministic behavior.\nPut detailed API field mappings in references/api_reference.md."
      },
      {
        "title": "Deterministic helper script",
        "body": "Use scripts/tago_bus_alert.py for deterministic TAGO lookups:\n\nnearby-stops (GPS → stop candidates)\narrivals (cityCode+nodeId → arrivals; optional route filtering)"
      }
    ],
    "body": "수도권 버스 도착 알림 (Clawdbot cron)\n\nScheduled bus arrival alerts powered by 국토교통부 TAGO OpenAPI.\n\nThis skill is designed for users running Clawdbot Gateway + Clawdbot cron. Users register rules like:\n\n\"평일 오전 7시, 인천 한빛초등학교, 535\"\n\"평일 오후 5시30분, 고양 향동초등학교, 730, 503\"\n\nThen the system sends arrival summaries to the registering user (DM) on schedule.\n\nNote (MVP): stop resolution is done via stop name search (cityCode + keyword). GPS-based nearby lookup exists but may return 0 results depending on key/region.\n\nPrerequisites\nA running Clawdbot Gateway (Telegram/Slack/etc. already configured)\nClawdbot cron enabled/usable\nA data.go.kr API key for TAGO\n(setup 자동화 사용 시) systemctl --user 가 동작하는 환경 (systemd user service)\n(rule_wizard에서 cron 등록까지 하려면) clawdbot CLI\nOne-time setup: TAGO API key\n\nYou must set a TAGO service key in your environment (never commit or paste it into markdown).\n\nRecommended env var:\n\nTAGO_SERVICE_KEY\nOption A (fastest): one-off test in your current shell\n\nGood for quick manual tests; cron jobs will NOT inherit this unless the Gateway service has it.\n\nexport TAGO_SERVICE_KEY='...'\n\nOption B (recommended): one-command setup (auto-detect systemd unit)\n\nThis is the most “set it once and forget it” flow.\n\nRun:\n\npython3 korea-metropolitan-bus-alerts/scripts/setup.py\n\n\nIf your network blocks the endpoint or TAGO returns 403 during the smoke test, you can still complete setup:\n\npython3 korea-metropolitan-bus-alerts/scripts/setup.py --skip-smoke\n\n\nIt will:\n\nAuto-detect your Gateway systemd user service (supports custom unit names)\nPrompt for TAGO_SERVICE_KEY (hidden input)\nSave it to ~/.clawdbot/secrets/tago.env (chmod 600)\nWrite a systemd override to load that env file\nRestart the Gateway\nRun a small TAGO smoke test\n\n(Advanced/manual) If you prefer shell scripts, korea-metropolitan-bus-alerts/scripts/set_tago_key.sh is still available, but setup.py is the recommended UX.\n\nSafety notes\nNever commit .env / tago.env.\nAvoid sharing outputs of docker compose config or similar commands that may print env values.\nQuick start\nA) Test TAGO connectivity (manual)\nexport TAGO_SERVICE_KEY='...'\npython3 korea-metropolitan-bus-alerts/scripts/tago_bus_alert.py nearby-stops --lat 37.5665 --long 126.9780\n\nB) Register an alert rule (interactive)\n\nTell the agent something like:\n\n\"평일 07:00, 인천 한빛초등학교, 535 알림 등록해줘\"\n\nIf the stop name is ambiguous (e.g., opposite side of road), the agent MUST ask a follow-up question to pick the correct direction/stop candidate before creating the rule.\n\nC) List rules\n\"버스 알림 목록 보여줘\"\nD) Delete a rule\n\"버스 알림 3번 삭제해줘\" (confirm before delete)\nE) Test a rule (run now)\n\"방금 등록한 규칙 테스트해줘\" (one-time message)\nSupported schedule expressions (MVP)\n매일 HH:MM\n평일 HH:MM\n주말 HH:MM\n\n(Phase 2: arbitrary cron expressions)\n\nCron implementation notes\nUse isolated cron jobs (sessionTarget: isolated) + deliver: true.\nDelivery is DM-only to the registering user.\nSee references/cron_recipe.md and scripts/cron_builder.py.\nInteractive registration helper (server-side)\n\nFor integration testing (and for power users), use:\n\nscripts/rule_wizard.py register\n\nIt will:\n\nAsk for schedule/time/routes\nResolve stop candidates via GPS nearby lookup (direction disambiguation)\nGenerate the job JSON\nOptionally call clawdbot cron add to register it\nData source\n\nSingle provider only (MVP):\n\n정류장 조회: BusSttnInfoInqireService (15098534)\n도착 조회: ArvlInfoInqireService (15098530)\nSafety / Security\nNever write API keys/tokens/passwords into markdown files.\nFor browser automation on logged-in pages: require explicit user confirmation.\nFor destructive operations (cron delete): confirm before acting.\nDM-only delivery (MVP): do not broadcast to groups/channels.\nImplementation notes\nPrefer scripts under scripts/ for deterministic behavior.\nPut detailed API field mappings in references/api_reference.md.\nDeterministic helper script\n\nUse scripts/tago_bus_alert.py for deterministic TAGO lookups:\n\nnearby-stops (GPS → stop candidates)\narrivals (cityCode+nodeId → arrivals; optional route filtering)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Hsooooo/korea-metropolitan-bus-alerts",
    "publisherUrl": "https://clawhub.ai/Hsooooo/korea-metropolitan-bus-alerts",
    "owner": "Hsooooo",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts",
    "downloadUrl": "https://openagent3.xyz/downloads/korea-metropolitan-bus-alerts",
    "agentUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/agent",
    "manifestUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/korea-metropolitan-bus-alerts/agent.md"
  }
}