| name | opencli-routine |
| description | Daily tours pipeline orchestrator. Decides which sub-skill to run for each (POI, platform) target — scan vs pricing vs both — and delegates. Does NOT implement scan or pricing inline; uses opencli-scan and opencli-pricing for that. Use when running the scheduled daily routine, when the user asks "run tours routine" / "daily refresh" / "scheduled run", or when the user wants the full tours flow without naming a specific mode. Owner: Ryan Huang. |
opencli-routine
Orchestrator for the daily tours pipeline. Decides which sub-skill to run for each (POI, platform) target — does NOT implement the work itself.
Pre-flight
- Confirm
data/tours.db exists and is readable.
- Confirm Browser Bridge cookie is
en-US (per memory feedback_browser_bridge_en_us). Run node dist/cli.js tours preflight-locale if uncertain.
Decide per (geo, platform, subvertical) target
The discovery axis is now (geo, subvertical) — geo = "Bangkok" / "Osaka" /
"Mt Fuji"; subvertical = "cooking class" / "cruise" / "things to do".
DB column is still called poi (semantic-only rename, see
docs/listings/design.md §3).
| Situation | Run |
|---|
First time on this (geo, platform, subvertical) | opencli-listing-pipeline → tours pin --top 5 → opencli-pricing |
| Daily price refresh of pinned items | opencli-pricing |
| Weekly coverage refresh | opencli-listing-pipeline (deltas auto-enriched) |
When the listing branch is selected, hand off to opencli-listing-pipeline
— that skill knows the per-platform path (one-shot for airbnb today, manual
4-command chain for the rest) and surfaces tweakable quirks (DOM selectors,
scroll thresholds, expect-keyword strings) in markdown sections you can edit
directly.
The listing step emits a Listing JSON conforming to ListingSchema
(src/tours/listing.ts); tours ingest-listing --file <path> consumes it
and writes a coverage_runs row.
Cron / scheduled trigger
Cron triggers opencli-pricing for every pinned activity — that's the
high-frequency leg and is fully cron-friendly.
Listing is manual or weekly. When the listing path requires LLM
judgement (e.g. airbnb subvertical→tag dispatch, geo expansion fill), the
result is cached to data/listings/*.{json,csv} so the next listing run
is deterministic and cron-friendly. See docs/listings/design.md §4–5.
opencli-scan is deprecated for routine use: its keyword-search-then-
detail loop is superseded by the listing → ingest-listing path. tours scan
remains available for ad-hoc exploration; do not wire it into cron.
What this skill does NOT do
- Does not run listing / pricing inline — always delegates to the matching
skill.
- Does not duplicate platform quirks — those live in
opencli-<platform>.
- Does not own DB schema — that's
src/tours/db.ts.
Companion skills
- opencli-listing-pipeline — listing branch executor (handles
prepare → scrape → finalize → ingest with per-platform quirks).
- opencli-pricing — price-refresh half (pinned activities only).
- opencli- — per-platform troubleshooting at the TS / adapter
level (klook / trip / getyourguide / kkday / airbnb).
- opencli-router — entry-point dispatcher when the user hasn't named a
platform.
- Deprecated: opencli-scan — kept for ad-hoc exploration only.
Owner: Ryan Huang