{"id":"16a67ab7-71d0-4312-8186-eef0f810d6c1","entityType":"agent","slug":"clawhub-galjos-open-data-hub-cli","name":"Open Data Hub Cli","canonicalUrl":"https://www.xpersona.co/agent/clawhub-galjos-open-data-hub-cli","canonicalPath":"/agent/clawhub-galjos-open-data-hub-cli","generatedAt":"2026-10-10T04:07:49.681Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":null},"description":"Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... Skill: Open Data Hub Cli Owner: galjos Summary: Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... Tags: latest:0.7.2 Version history: v0.7.2 | 2026-09-22T11:57:43.366Z | user Pin odh CLI v0.7.1 with corrected help, atomic cache, and version-stamped user agent. v0.7.1 | 2026-09-21T13:56:17.257Z | user Correcte","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.8K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17dcsq7xt58bq3chrse9h4z6986rwzv:open-data-hub-cli","sourceUrl":"https://clawhub.ai/galjos/open-data-hub-cli","homepage":"https://clawhub.ai/galjos/skills/open-data-hub-cli","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/galjos/open-data-hub-cli","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/galjos/skills/open-data-hub-cli","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":69,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":null},"stars":null,"forks":null,"downloads":2809,"packageName":null,"latestVersion":"0.7.2","tractionLabel":"2.8K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T11:25:02.576Z","lastCrawledAt":"2026-10-09T11:25:02.576Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T11:25:02.576Z","lastVerifiedAt":null,"highlights":[{"version":"0.7.2","createdAt":"2026-09-22T11:57:43.366Z","changelog":"Pin odh CLI v0.7.1 with corrected help, atomic cache, and version-stamped user agent.","fileCount":3,"zipByteSize":5814},{"version":"0.7.1","createdAt":"2026-09-21T13:56:17.257Z","changelog":"Corrected mobility latest example, stop-ID journey guidance, doctor timeout notes.","fileCount":3,"zipByteSize":5946},{"version":"0.7.0","createdAt":"2026-09-10T11:50:23.052Z","changelog":"Requires odh v0.7.0. Documents structured read-only MCP results, coverage and truncation checks, current provincial traffic sources, and omitted optional Content announcement fields.","fileCount":3,"zipByteSize":5785},{"version":"0.6.2","createdAt":"2026-09-07T08:06:05.771Z","changelog":"- Updated to require and document compatibility with `odh` CLI version 0.6.2. - Updated installer metadata and example install commands to use `@v0.6.2`. - Removed outdated `skill-card.md` file.","fileCount":3,"zipByteSize":5481},{"version":"0.6.1","createdAt":"2026-08-04T08:41:22.364Z","changelog":"Requires odh v0.6.1+.","fileCount":3,"zipByteSize":5688},{"version":"0.6.0","createdAt":"2026-08-04T08:23:23.166Z","changelog":"Requires odh v0.6.0+. --area and --zone-id now work with --source content, matched by geographic inference against zone reference points derived from historical rows; the inferred zone filters but is never written into the events.","fileCount":3,"zipByteSize":5610},{"version":"0.5.1","createdAt":"2026-08-04T07:16:10.564Z","changelog":"Requires odh v0.5.1+, which fixes traffic search matching identifier substrings and makes road numbers and cycle-route aliases findable.","fileCount":3,"zipByteSize":5335},{"version":"0.5.0","createdAt":"2026-08-04T06:42:23.800Z","changelog":"Requires odh v0.5.0+. Documents --source content, which answers traffic queries from the Content API /v1/Announcement bulletin the province still updates, including which filters it rejects and which fields it cannot populate.","fileCount":3,"zipByteSize":5282}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17dcsq7xt58bq3chrse9h4z6986rwzv:open-data-hub-cli","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T04:07:49.678Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-galjos-open-data-hub-cli/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":null},"readme":"Skill: Open Data Hub Cli\n\nOwner: galjos\n\nSummary: Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open...\n\nTags: latest:0.7.2\n\nVersion history:\n\nv0.7.2 | 2026-09-22T11:57:43.366Z | user\n\nPin odh CLI v0.7.1 with corrected help, atomic cache, and version-stamped user agent.\n\nv0.7.1 | 2026-09-21T13:56:17.257Z | user\n\nCorrected mobility latest example, stop-ID journey guidance, doctor timeout notes.\n\nv0.7.0 | 2026-09-10T11:50:23.052Z | user\n\nRequires odh v0.7.0. Documents structured read-only MCP results, coverage and truncation checks, current provincial traffic sources, and omitted optional Content announcement fields.\n\nv0.6.2 | 2026-09-07T08:06:05.771Z | auto\n\n- Updated to require and document compatibility with `odh` CLI version 0.6.2.\n- Updated installer metadata and example install commands to use `@v0.6.2`.\n- Removed outdated `skill-card.md` file.\n\nv0.6.1 | 2026-08-04T08:41:22.364Z | user\n\nRequires odh v0.6.1+.\n\nv0.6.0 | 2026-08-04T08:23:23.166Z | user\n\nRequires odh v0.6.0+. --area and --zone-id now work with --source content, matched by geographic inference against zone reference points derived from historical rows; the inferred zone filters but is never written into the events.\n\nv0.5.1 | 2026-08-04T07:16:10.564Z | user\n\nRequires odh v0.5.1+, which fixes traffic search matching identifier substrings and makes road numbers and cycle-route aliases findable.\n\nv0.5.0 | 2026-08-04T06:42:23.800Z | user\n\nRequires odh v0.5.0+. Documents --source content, which answers traffic queries from the Content API /v1/Announcement bulletin the province still updates, including which filters it rejects and which fields it cannot populate.\n\nv0.4.4 | 2026-08-03T13:31:04.470Z | user\n\nRequires odh v0.4.3+. Stops recommending a dead EV origin: the availability path now discovers the origin at a limit high enough to clear the truncation warning, and notes that EChargingStation carries mostly non-local rows.\n\nv0.4.3 | 2026-08-03T10:56:54.854Z | user\n\nRequires odh v0.4.2+, which reports the real match total when --limit caps a diagnostics or mobility latest result.\n\nv0.4.2 | 2026-08-03T09:10:09.885Z | user\n\nAligns the skill with odh v0.4.1: the Mobility Timeseries event feed is not a live bulletin and an empty result is not evidence roads are clear, and mobility origins/stations/datatypes/events add a truncation warning whenever a result fills --limit. Requires odh v0.4.1+.\n\nv0.4.1 | 2026-06-26T16:11:30.762Z | auto\n\n- Added preferred manual installation instructions to SKILL.md (Go and Homebrew options).\n- Clarified that agent hosts can use OpenClaw Go installer metadata for setup.\n- Removed obsolete skill-card.md.\n- No CLI or API functionality changes; documentation and setup guidance improved.\n\nv0.4.0 | 2026-06-26T12:38:57.705Z | auto\n\n- Bumped required odh CLI version to v0.4.0 for latest features and command contracts.\n- Updated installation instructions to use v0.4.0.\n- Added guidance to use odh datasets guide <topic> for topic-based discovery, including its usage and output hints.\n- Improved discovery instructions and emphasized the use of new guide fields before attempting low-level queries.\n- Minor clarifications to setup and best practice recommendations.\n\nv0.3.1 | 2026-06-26T12:06:16.180Z | user\n\nRefresh install hints for odh v0.3.1 and document MCP server availability.\n\nv0.3.0 | 2026-06-10T11:14:59.332Z | auto\n\n- Updated to require odh CLI version 0.3.0, enabling new features and improved compatibility.\n- Added documentation for MCP server mode (odh mcp serve) for agent integration.\n- Improved guidance on using `odh mobility origins --station-type` before filtering by `--origin`.\n- Changed installation instructions and metadata to reference odh-cli@v0.3.0.\n- Removed deprecated skill-card.md file.\n\nv0.2.5 | 2026-05-26T20:55:25.514Z | auto\n\n- Update required `odh` CLI version to v0.2.5 throughout docs and setup instructions.\n- Change install instructions and metadata module reference from v0.2.4 to v0.2.5.\n- Add tip: run `odh <command> --help` for examples and task-focused help.\n- No other functional or usage changes.\n\nv0.2.4 | 2026-05-26T20:12:42.286Z | auto\n\n- Updated required `odh` CLI version to v0.2.4 in setup instructions and install metadata.\n- Added guidance to place the global `--timeout` flag before the subcommand (e.g., `odh --timeout 20s traffic today ...`).\n- No other content changes detected.\n\nv0.2.3 | 2026-05-26T17:04:34.385Z | auto\n\n- Bumped required odh CLI version from v0.2.2 to v0.2.3 throughout docs and install instructions.\n- Updated install metadata to use odh-cli@v0.2.3.\n- Noted that curated JSON fields are documented in docs/json-contracts.md.\n\nv0.2.2 | 2026-05-26T14:06:44.667Z | auto\n\n- Updated minimum required CLI version to v0.2.2 for all setup, command contracts, and examples.\n- Install instructions and metadata now specify odh-cli v0.2.2.\n- Documentation and setup notes reference new features: source/provenance fields, improved traffic helpers, and current contracts.\n- Output rules now recommend using returned source/provenance-related fields over inferring origins.\n- Eval section now lists detailed file paths for manual and automated test recipes.\n\nv0.2.1 | 2026-05-26T13:39:29.171Z | auto\n\n- Updated required odh CLI version to v0.2.1 in documentation and installation instructions.\n- Metadata updated to install odh CLI v0.2.1 by default.\n- Version requirements in setup and feature lists now reference v0.2.1.\n- No functional changes to command usage or documentation content.\n\nv0.2.0 | 2026-05-26T09:19:34.943Z | auto\n\n- Bumped required odh CLI version to v0.2.0 for all install instructions and references.\n- Updated install metadata to use odh@v0.2.0.\n- Adjusted documentation to clarify that v0.2.0+ is now needed for all features and commands.\n\nv0.1.19 | 2026-05-26T08:53:54.540Z | auto\n\n- Shortened and reorganized documentation for clarity and faster onboarding.\n- Clarified when and how to use `odh` vs alternative data access methods.\n- Improved setup and troubleshooting instructions for required CLI version and path issues.\n- Separated sections for discovery, traffic, mobility, tourism, and transit usage with succinct command examples.\n- Added new output guidance on JSON/table formats, error handling, and diagnostic output.\n- Added evals and references sections for further support and learning.\n\nv0.1.18 | 2026-05-21T19:43:49.353Z | auto\n\n- Require odh-cli v0.1.13 or newer (was v0.1.12).\n- Updated installation instructions and version references to v0.1.13.\n- Updated feature list: first checks emphasize new support for the transit --with-realtime flag, requiring v0.1.13+.\n- Example command added: transit journey with --with-realtime and --json flags.\n- Minor clarifications in versioning and requirements throughout documentation.\n\nv0.1.17 | 2026-05-21T17:36:46.669Z | user\n\nCorrect the published skill package so the install metadata points at odh v0.1.12 and includes transit journey guidance.\n\nv0.1.16 | 2026-05-21T17:34:55.712Z | user\n\nRequire odh v0.1.12 and document the new static GTFS transit journey planner for transfer routes.\n\nv0.1.15 | 2026-05-20T12:32:00.984Z | user\n\n- Updated OpenClaw install metadata for odh v0.1.11.\\n- Added guidance for comma-safe --param values, GTFS archive progress diagnostics, and high-limit Mobility datatype discovery.\\n- Added answer patterns for common unsupported or caveated ODH data situations.\n\nv0.1.14 | 2026-05-20T09:11:31.119Z | user\n\nUpdated the OpenClaw install hint and skill guidance for odh v0.1.10. Documented compact table defaults and when agents must request JSON with --json or --format json. Added guidance for improved transit, A22, tourism, and mobility discovery outputs.\n\nv0.1.13 | 2026-05-18T20:18:24.178Z | auto\n\n- Updated required odh CLI version from v0.1.8 to v0.1.9 in the OpenClaw metadata and installation instructions.\n- All user and agent instructions referencing CLI installation and command compatibility now specify v0.1.9. \n- Added sample diagnostics commands for EV charging, parking-forecasts, and tourism-events, with guidance on interpreting their results.\n- Improved documentation on the use and interpretation of the new diagnostics commands before answering data availability or quality questions.\n\nv0.1.12 | 2026-05-18T11:39:41.252Z | auto\n\n- Updated required minimum odh CLI version to v0.1.8 (was v0.1.7).\n- Changed install instructions and examples to use odh v0.1.8.\n- Added new `odh transit stops search --limit`, `odh transit departures --stop-id`, and `odh transit trip --from-stop-id --to-stop-id` commands for better disambiguation of public transport stops.\n- Clarified usage patterns for ambiguous station names and stop IDs in public transport queries.\n\nv0.1.11 | 2026-05-18T09:57:52.199Z | auto\n\n- Updated required odh CLI version to v0.1.7 throughout documentation.\n- Mobility and traffic commands now require and document new CLI features (including filtered latest for mobility data).\n- Example commands for EV charging and parking now include more explicit flags (such as --active, --fresh-within, --sort newest, --origin).\n- Guidance expanded on public transport GTFS download caching and warnings for ambiguous stop names.\n- Installation and troubleshooting instructions updated for new CLI version.\n\nv0.1.10 | 2026-05-17T20:55:51.940Z | auto\n\n- Added \"Agent Evals\" section describing upstream agent eval tasks and live smoke runner.\n- Explained using evals to guide documentation and skill guidance improvements.\n- Clarified not to request new helper commands unless evals reveal unresolved agent friction.\n- No changes to CLI usage or setup instructions.\n\nv0.1.9 | 2026-05-17T20:24:28.879Z | auto\n\n- Updated minimum required and default installed `odh` CLI version from 0.1.5 to 0.1.6.\n- Documented new `odh traffic zones`, `odh traffic categories`, and flexible traffic filtering commands, including `odh traffic search` and `--zone-id` usage.\n- Noted that traffic discovery, GTFS, and transit commands require `odh` 0.1.6 or newer.\n- Added guidance on discovering valid zone IDs and traffic category types for region and event filtering.\n- Clarified usage patterns for village/place name searching and agent behavior with `odh traffic`.\n\nv0.1.8 | 2026-05-16T10:15:35.315Z | user\n\nDocument the required odh v0.1.5+ version for GTFS/transit commands and the PATH shadowing fix for OpenClaw Go installs.\n\nv0.1.7 | 2026-05-16T10:08:21.813Z | user\n\nAdd GTFS and transit commands for STA timetables, realtime feeds, stop search, departures, direct trip lookup, and explicit delay-stats archive caveat.\n\nv0.1.6 | 2026-05-16T08:56:28.885Z | user\n\nPoint OpenClaw install metadata at odh v0.1.4 and document the narrowed Ueberetsch-Unterland traffic alias.\n\nv0.1.5 | 2026-05-16T08:27:15.654Z | user\n\nPoint OpenClaw install metadata at odh v0.1.3 and document ODH-only traffic commands.\n\nv0.1.4 | 2026-05-16T07:35:07.270Z | user\n\nAdd odh v0.1.2 discovery commands for dataset search, Tourism type discovery, and Mobility station listing.\n\nv0.1.3 | 2026-05-15T20:39:45.968Z | user\n\nPoint OpenClaw installer metadata at odh v0.1.1 and document the verified release installer.\n\nv0.1.2 | 2026-05-15T20:14:37.392Z | user\n\nDeclare odh as an OpenClaw runtime requirement and add a Go installer hint.\n\nv0.1.1 | 2026-05-15T19:47:18.110Z | auto\n\n- Expanded usage guidelines for returning accurate location information; clarified South Tyrol as the main but not universal record region.\n- Added guidance for verifying geographic claims via coordinates or metadata in API outputs.\n- Listed useful record fields to check for location details in both Tourism and Mobility APIs.\n- Updated interpretation rules: emphasized caution with regional assumptions, validation of location-sensitive answers, and preference for official APIs over scraping.\n- Provided links to official Open Data Hub references.\n\nv0.1.0 | 2026-05-15T19:33:16.352Z | auto\n\nInitial release of open-data-hub-cli skill.\n\n- Introduces guidance for using the `odh` CLI tool to interact with Open Data Hub APIs, including Tourism and Mobility data.\n- Provides setup checks and installation instructions.\n- Documents commands for API discovery, querying curated endpoints, and fetching OpenAPI specs.\n- Outlines best practices for interpreting CLI outputs and error handling.\n- Highlights recommendations specific to A22 traffic data usage.\n\nArchive index:\n\nArchive v0.7.2: 3 files, 5814 bytes\n\nFiles: skill-card.md (2322b), SKILL.md (9698b), _meta.json (136b)\n\nFile v0.7.2:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.7.1\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s # local doctor flag, not the global --timeout\n```\n\nNeed `odh v0.7.1` or newer for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode. Installs below pin v0.7.1.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.7.1\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tools advertise read-only behavior and return structured JSON alongside text, with the same contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`. `odh doctor --timeout` is a separate local flag.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n- Traffic and normalized `mobility latest` results include `coverage` with fetched, matched, and returned counts. Check `result_truncated` and `upstream_may_have_more` before claiming a complete list; matched counts cover only the fetched rows. Content traffic also reports `upstream_total` when supplied by the source.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results omit `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` because this source cannot populate them. An absent `end` means the announcement is still open; use `event.get(\"end\")` to read it. Already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.7.2:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.7.2\",\n  \"publishedAt\": 1790078263366\n}\n\nFile v0.7.2:skill-card.md\n\n## Description:\n\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[galjos](https://clawhub.ai/user/galjos)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill to guide agents in querying Open Data Hub and NOI Techpark datasets through the `odh` CLI instead of scraping pages or guessing API calls. It supports public transport, tourism, mobility, traffic, parking, EV charging, A22, and STA GTFS workflows while preserving source, freshness, truncation, and warning context.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on installing and executing the external `odh` CLI, which may make network requests to Open Data Hub services.\n\nMitigation: Confirm the pinned Go module or Homebrew tap is acceptable before installation, and run the CLI in an environment approved for outbound requests.\n\nRisk: Answers based on live public feeds can be stale, truncated, incomplete, or tied to source-specific caveats.\n\nMitigation: Surface freshness, truncation, coverage, source, provenance, and warning fields in user-facing answers, as the skill instructs.\n\n## Reference(s):\n\n- [Open Data Hub API](https://opendatahub.com/api/)\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html)\n- [Open Data Hub Mobility API getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, text, markdown]\n\n**Output Format:** [Markdown guidance with inline shell commands and expected JSON/table output notes]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance emphasizes read-oriented data queries, explicit JSON parsing flags, source fields, warnings, freshness, and truncation checks.]\n\n## Skill Version(s):\n\n0.7.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.7.1: 3 files, 5946 bytes\n\nFiles: skill-card.md (2667b), SKILL.md (9698b), _meta.json (136b)\n\nFile v0.7.1:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.7.0\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s # local doctor flag, not the global --timeout\n```\n\nNeed `odh v0.7.0` or newer for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode. Installs below pin v0.7.0.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.7.0\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tools advertise read-only behavior and return structured JSON alongside text, with the same contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`. `odh doctor --timeout` is a separate local flag.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n- Traffic and normalized `mobility latest` results include `coverage` with fetched, matched, and returned counts. Check `result_truncated` and `upstream_may_have_more` before claiming a complete list; matched counts cover only the fetched rows. Content traffic also reports `upstream_total` when supplied by the source.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results omit `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` because this source cannot populate them. An absent `end` means the announcement is still open; use `event.get(\"end\")` to read it. Already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.7.1:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.7.1\",\n  \"publishedAt\": 1789998977257\n}\n\nFile v0.7.1:skill-card.md\n\n## Description:\n\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[galjos](https://clawhub.ai/user/galjos)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query Open Data Hub and NOI Techpark data with the `odh` CLI instead of scraping web pages. It guides discovery, traffic, mobility, tourism, A22, GTFS, and transit queries while emphasizing JSON output, source fields, warnings, freshness, and location checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on a third-party `odh` CLI installed from a Go module or Homebrew tap.\n\nMitigation: Review the disclosed CLI source and install path before use, pin the documented version, and apply normal approval controls for running installed commands.\n\nRisk: Open Data Hub traffic, mobility, A22, and transit feeds can be stale, truncated, incomplete, or not live bulletins.\n\nMitigation: Prefer JSON output, inspect returned `warnings`, `source`, freshness, coverage, and truncation fields, and avoid claiming completeness or current conditions unless the returned data supports it.\n\nRisk: Most practical data is South Tyrol / Autonomous Province of Bolzano, while some station rows may come from outside that area.\n\nMitigation: Verify record-level coordinates, origin, metadata, and stop IDs before making local or location-specific claims.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/galjos/skills/open-data-hub-cli)\n- [odh CLI repository](https://github.com/galjos/odh-cli)\n- [Open Data Hub API](https://opendatahub.com/api/)\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html)\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline shell commands and JSON-output guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May direct agents to request JSON output, inspect diagnostics, surface warnings, and run discovery commands before making claims.]\n\n## Skill Version(s):\n\n0.7.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.7.0: 3 files, 5785 bytes\n\nFiles: skill-card.md (2501b), SKILL.md (9568b), _meta.json (136b)\n\nFile v0.7.0:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.7.0\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.7.0+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.7.0\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tools advertise read-only behavior and return structured JSON alongside text, with the same contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n- Traffic and normalized `mobility latest` results include `coverage` with fetched, matched, and returned counts. Check `result_truncated` and `upstream_may_have_more` before claiming a complete list; matched counts cover only the fetched rows. Content traffic also reports `upstream_total` when supplied by the source.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results omit `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` because this source cannot populate them. An absent `end` means the announcement is still open; use `event.get(\"end\")` to read it. Already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.7.0:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.7.0\",\n  \"publishedAt\": 1789041023052\n}\n\nFile v0.7.0:skill-card.md\n\n## Description:\n\nQuery Open Data Hub and NOI Techpark data through the odh CLI for Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[galjos](https://clawhub.ai/user/galjos)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query Open Data Hub, NOI Techpark, Tourism API, Mobility API, traffic, A22, parking, EV charging, STA GTFS, and transit data through the odh CLI. It is especially useful for South Tyrol and Autonomous Province of Bolzano data workflows that need source, freshness, coverage, and truncation checks.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill guides agents to install or use the odh CLI from a third-party Go module or Homebrew tap.\n\nMitigation: Verify the CLI source and version before installation, and use odh v0.7.0 or later for the documented command contracts.\n\nRisk: Traffic, transit, parking, tourism, and mobility responses can be stale, truncated, incomplete, or geographically ambiguous.\n\nMitigation: Prefer JSON output, surface returned warnings and provenance fields, check freshness and coverage indicators, and verify coordinates, origin, or metadata before making current or local claims.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/galjos/skills/open-data-hub-cli)\n- [Open Data Hub CLI homepage](https://github.com/galjos/odh-cli)\n- [Open Data Hub API](https://opendatahub.com/api/)\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html)\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with inline shell commands and JSON-output conventions]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guides agents to prefer structured JSON output, source fields, warnings, freshness checks, coverage counts, and truncation indicators.]\n\n## Skill Version(s):\n\n0.7.0 (source: server release metadata and odh module version in artifact)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.6.2: 3 files, 5481 bytes\n\nFiles: skill-card.md (2158b), SKILL.md (9169b), _meta.json (136b)\n\nFile v0.6.2:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.6.2\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.6.2+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.6.2\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results leave `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` empty; that means the field is unavailable, not absent. An empty `end` means the announcement is still open; already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.6.2:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.6.2\",\n  \"publishedAt\": 1788768365771\n}\n\nFile v0.6.2:skill-card.md\n\n## Description:\n\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[galjos](https://clawhub.ai/user/galjos)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query Open Data Hub and NOI Techpark data through the `odh` CLI or MCP surface, while preserving source, freshness, warning, and caveat information in answers.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on the third-party `odh` CLI, which may require review in environments that restrict external Go tools.\n\nMitigation: Review the `odh` CLI source or release provenance and install only an approved version before deployment.\n\nRisk: Open Data Hub responses can include stale, incomplete, or geographically broad records.\n\nMitigation: Preserve source, freshness, warning, caveat, and coordinate metadata before making current or local-status claims.\n\n## Reference(s):\n\n- [Skill release page](https://clawhub.ai/galjos/skills/open-data-hub-cli)\n- [Open Data Hub CLI repository](https://github.com/galjos/odh-cli)\n- [Open Data Hub API](https://opendatahub.com/api/)\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html)\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html)\n\n## Skill Output:\n\n**Output Type(s):** [Guidance, Shell commands, Configuration]\n\n**Output Format:** [Markdown with inline bash code blocks and JSON-output guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the third-party `odh` CLI v0.6.2 or later; supports MCP server mode through `odh mcp serve`.]\n\n## Skill Version(s):\n\n0.6.2 (source: server evidence release.version)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v0.6.1: 3 files, 5688 bytes\n\nFiles: skill-card.md (2641b), SKILL.md (9169b), _meta.json (136b)\n\nFile v0.6.1:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.6.1\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.6.1+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.6.1\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results leave `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` empty; that means the field is unavailable, not absent. An empty `end` means the announcement is still open; already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.6.1:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.6.1\",\n  \"publishedAt\": 1785832882364\n}\n\nFile v0.6.1:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to query Open Data Hub and NOI Techpark data with the `odh` CLI instead of scraping pages. It supports discovery and retrieval workflows for tourism, mobility, traffic, A22, parking, EV charging, STA GTFS, and transit data. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill relies on an external `odh` CLI that can make network queries to Open Data Hub APIs. <br>\nMitigation: Install only if the upstream CLI source is acceptable, verify `odh v0.6.1+`, and run `odh doctor` before relying on results. <br>\nRisk: Open data responses may be stale, incomplete, outside the expected geography, or include warnings that affect interpretation. <br>\nMitigation: Check freshness, warnings, source fields, provenance fields, and record-level coordinates or metadata before presenting conclusions. <br>\nRisk: Some feeds are not live bulletins, so empty or stale results can be mistaken for current real-world status. <br>\nMitigation: Phrase results as what the queried feed returned, surface stale/source warnings, and avoid claiming roads or transit are clear solely from empty feed responses. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/galjos/skills/open-data-hub-cli) <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline shell commands and JSON-output guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [The skill directs agents to use `--json` or `--format json` for parseable CLI output and to treat stderr as diagnostics.] <br>\n\n## Skill Version(s): <br>\n0.6.1 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.6.0: 3 files, 5610 bytes\n\nFiles: skill-card.md (2424b), SKILL.md (9169b), _meta.json (136b)\n\nFile v0.6.0:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.6.0\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.6.0+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.6.0\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit`, `--include-expired` and `--zone-id`/`--area`, and rejects `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results leave `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` empty; that means the field is unavailable, not absent. An empty `end` means the announcement is still open; already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\n`--zone-id` and `--area` are geographic inference on this source, not a field read: the announcement's coordinates are matched against a committed table of ~1100 coordinates whose zone the Mobility feed recorded, matching when the nearest is within 2.0 km. Announcements beyond that, or without coordinates, are excluded as unassignable and counted in a warning. No inferred zone is written into the output. Surface that warning and phrase the answer as \"in that area\", not \"filed under that zone\". Municipality aliases such as `--area kaltern` narrow only to the zone here — the response warns — so use `--search` when the answer must be about the village.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.6.0:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.6.0\",\n  \"publishedAt\": 1785831803166\n}\n\nFile v0.6.0:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to install and operate the `odh` CLI for Open Data Hub tourism, mobility, traffic, transit, parking, EV charging, and related public-data queries. <br>\n\n### Deployment Geography for Use: <br>\nGlobal, with practical data coverage focused on South Tyrol / Autonomous Province of Bolzano. <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The `odh` CLI must be installed from a named Go module or Homebrew tap before the skill can operate. <br>\nMitigation: Run `odh version` and `odh doctor --timeout 10s` before relying on results, and install only if the named module or tap is acceptable. <br>\nRisk: Public traffic, transit, tourism, and mobility feeds can be stale, incomplete, truncated, or geographically ambiguous. <br>\nMitigation: Prefer JSON output, surface returned `warnings` and source fields, verify coordinates or stop IDs, raise limits when truncation is reported, and avoid claiming that empty or stale feeds prove current conditions. <br>\n\n\n## Reference(s): <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n- [odh CLI homepage](https://github.com/galjos/odh-cli) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown with inline bash commands and JSON-output guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Guides agents to request JSON output, inspect source and warning fields, and treat stderr as diagnostics.] <br>\n\n## Skill Version(s): <br>\n0.6.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.5.1: 3 files, 5335 bytes\n\nFiles: skill-card.md (2574b), SKILL.md (8448b), _meta.json (136b)\n\nFile v0.5.1:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.5.1\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.5.1+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.5.1\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit` and `--include-expired`, and rejects `--zone-id`, `--area`, `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results leave `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` empty; that means the field is unavailable, not absent. An empty `end` means the announcement is still open; already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.5.1\",\n  \"publishedAt\": 1785827770564\n}\n\nFile v0.5.1:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and data-oriented agents use this skill to query public Open Data Hub and NOI Techpark datasets with the `odh` CLI instead of scraping web pages. It supports discovery and retrieval workflows for tourism, mobility, traffic, parking, EV charging, GTFS, and transit data. <br>\n\n### Deployment Geography for Use: <br>\nGlobal; many referenced datasets are focused on South Tyrol / Autonomous Province of Bolzano. <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may cause an agent to install or invoke the third-party `odh` CLI, including MCP server mode. <br>\nMitigation: Install only when the agent should use `odh`; review the referenced Go or Homebrew package before deployment. <br>\nRisk: Open Data Hub queries may return stale, incomplete, truncated, or geographically broad public data. <br>\nMitigation: Follow the skill guidance to use discovery commands, inspect warnings and source fields, increase limits when truncation is reported, and verify record-level location before making claims. <br>\n\n\n## Reference(s): <br>\n- [Open Data Hub CLI homepage](https://github.com/galjos/odh-cli) <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n- [ClawHub skill page](https://clawhub.ai/galjos/skills/open-data-hub-cli) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Shell commands, Configuration instructions, Guidance, JSON] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON-oriented output instructions] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires the `odh` CLI; encourages JSON output flags for machine parsing and treats stderr as diagnostics.] <br>\n\n## Skill Version(s): <br>\n0.5.1 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.5.0: 3 files, 5282 bytes\n\nFiles: skill-card.md (2552b), SKILL.md (8448b), _meta.json (136b)\n\nFile v0.5.0:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.5.0\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.5.0+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.5.0\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic search radroute --today --source content --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. The default `--source odh` is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns.\n\n`--source content` runs the same commands against the Content API `/v1/Announcement` bulletin, which is where the province still publishes. It supports `--from`/`--to`/`--today`, `--near`/`--radius`, `--search`, `--type`, `--limit` and `--include-expired`, and rejects `--zone-id`, `--area`, `--road` and `--type bike` with exit code 2 rather than returning a partial list. Its results leave `zone_id`, `zone`, `zone_it`, `road`, `road_name`, `severity` and `series_id` empty; that means the field is unavailable, not absent. An empty `end` means the announcement is still open; already-ended ones are hidden unless `--include-expired` is passed, and `stale` there only means \"unchanged for 30 days\", which is normal for long-running restrictions.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.5.0\",\n  \"publishedAt\": 1785825743800\n}\n\nFile v0.5.0:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to query Open Data Hub and NOI Techpark public datasets through the `odh` CLI instead of scraping web pages. It supports mobility, tourism, traffic, parking, EV charging, A22, STA GTFS, and transit workflows with guidance for JSON output, discovery commands, freshness checks, and source warnings. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill depends on a third-party `odh` CLI that may contact Open Data Hub services. <br>\nMitigation: Review the referenced CLI project before installation when supply-chain provenance matters, and run bounded commands with explicit JSON output for data-sensitive answers. <br>\nRisk: Public mobility, traffic, transit, and tourism feeds can contain stale, incomplete, or unavailable fields. <br>\nMitigation: Prefer the skill's freshness checks, discovery commands, source fields, and warnings before making current-status claims. <br>\n\n\n## Reference(s): <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub mobility getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n- [Open Data Hub CLI project](https://github.com/galjos/odh-cli) <br>\n- [ClawHub skill page](https://clawhub.ai/galjos/skills/open-data-hub-cli) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, shell commands, configuration] <br>\n**Output Format:** [Markdown with inline shell commands and JSON-output guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Recommends JSON output for parsing, timeout-bounded CLI calls, discovery before filtering, and explicit handling of warnings, source fields, stale rows, and unavailable fields.] <br>\n\n## Skill Version(s): <br>\n0.5.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.4.4: 3 files, 5069 bytes\n\nFiles: skill-card.md (2780b), SKILL.md (7696b), _meta.json (136b)\n\nFile v0.4.4:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.4.3\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.4.3+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.4.3\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. This is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns, and get current notices from `odh call tourism /v1/Announcement --param source=PROVINCE_BZ --param rawsort=-LastChange`.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\n`EChargingStation` carries rows from well outside South Tyrol, and most fresh rows are not local. Check `scoordinate` before turning a count into a local claim.\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.4.4:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.4.4\",\n  \"publishedAt\": 1785763864470\n}\n\nFile v0.4.4:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, analysts, and agent users use this skill to query public Open Data Hub data through the `odh` CLI instead of scraping pages or guessing low-level API calls. It supports discovery and retrieval workflows for South Tyrol tourism, mobility, traffic, A22, parking, EV charging, STA GTFS, and transit data. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill relies on an external CLI installed from upstream Go or Homebrew sources. <br>\nMitigation: Review and trust the upstream package source before installation, and run the documented `odh version` and `odh doctor --timeout 10s` checks before agent use. <br>\nRisk: Public Open Data Hub feeds may be stale, incomplete, or unsuitable as authoritative live safety notices. <br>\nMitigation: Surface command warnings and source fields, verify freshness, and avoid presenting empty or stale feeds as proof that roads, transit, or services are clear. <br>\nRisk: The skill is intended for public data lookup workflows, not credentialed private account access. <br>\nMitigation: Do not add private credentials or use the skill for private account workflows unless a separate reviewed integration explicitly supports that use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub Skill Page](https://clawhub.ai/galjos/skills/open-data-hub-cli) <br>\n- [Open Data Hub CLI Repository](https://github.com/galjos/odh-cli) <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub Datasets Documentation](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub Mobility Getting Started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON-oriented command recommendations] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires the external `odh` CLI and encourages JSON output for parseable command results.] <br>\n\n## Skill Version(s): <br>\n0.4.4 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v0.4.3: 3 files, 4842 bytes\n\nFiles: skill-card.md (2405b), SKILL.md (7498b), _meta.json (136b)\n\nFile v0.4.3:SKILL.md\n\n---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.4.2\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s\n```\n\nNeed `odh v0.4.2+` for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.4.2\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tool outputs follow the same JSON contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n\n## Discovery\n\n```bash\nodh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json\n```\n\nFor unfamiliar data questions, run `odh datasets guide <topic> --format json` first and follow its `discovery`, `verify`, and `caveats` fields before choosing lower-level commands.\n\nAlways run `odh mobility origins --station-type <type>` before filtering any query with `--origin`, even when the origin seems obvious (A22, ALPERIA, PROVINCE_BZ): origin names are upstream vocabulary, and a catalogued origin or datatype is not proof that open measurement rows exist.\n\n`mobility origins`, `mobility stations`, `mobility datatypes`, and `mobility events` add a *truncation* entry to `warnings` whenever the result filled `--limit`, including the default limit; raise `--limit` until that truncation entry disappears before claiming a complete list. Other `warnings` entries are unrelated to `--limit` and do not go away — `mobility events` always carries the Timeseries feed caveat, so its `warnings` array is never empty.\n\nUse `odh call <api> <path> --param key=value` for known endpoints. `--param` is repeatable and values may contain commas.\n\n## Traffic\n\nRoadworks, closures, and road events:\n\n```bash\nodh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\n```\n\nPrefer `traffic` over raw `mobility events --origin PROVINCE_BZ`. Surface stale/source warnings. Do not present stale open-ended rows as confirmed current closures. This is a Mobility Timeseries event feed, not a live bulletin: an empty result is not evidence that roads are clear. Report the newest row date the command returns, and get current notices from `odh call tourism /v1/Announcement --param source=PROVINCE_BZ --param rawsort=-LastChange`.\n\nA22:\n\n```bash\nodh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20\n```\n\n`a22 status` inspects a Mobility Timeseries event feed alongside `TrafficForecast`; neither is a live bulletin. Do not infer live incidents from `TrafficForecast`. Report an empty or stale event feed as \"this feed returned no current data\", never as evidence that the motorway is clear, and get current notices from `odh call tourism /v1/Announcement --param source=a22 --param rawsort=-LastChange`. For past local A22 incidents, say these feeds may not retain history and use dated external sources if needed.\n\n## Mobility Measurements\n\nFor current availability, discover origin/datatype first, then filter freshness:\n\n```bash\nodh diagnostics ev-charging --origin ALPERIA --fresh-within 24h\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table\n```\n\nRaw latest rows can contain stale inactive stations. Surface `warnings`. If diagnostics says `current_only`, report current occupancy but not stale forecasts.\n\nTourism events:\n\n```bash\nodh diagnostics tourism-events --date 2026-05-18 --limit 20\nodh tourism poi --limit 1 --seed 42 --fields Detail.en.Title,GpsInfo\n```\n\nCheck `date_status`, `location_status`, and `GpsInfo` before making “near me today” claims.\n\n## Transit\n\n```bash\nodh gtfs datasets\nodh gtfs realtime --dataset sta-time-tables --feed trip-updates --limit 5\nodh transit stops search merano --limit 10\nodh transit departures --stop-id <stop_id> --date 2026-05-16 --around 13:00 --mode train --json\nodh transit trip --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --mode train --json\nodh transit journey --from-stop-id <from_id> --to-stop-id <to_id> --date 2026-05-16 --time 13:00 --max-transfers 3 --with-realtime --json\nodh transit delay-stats --from auer --to brenner --time 14:05 --weekday saturday --json\n```\n\nUse stop IDs when names are ambiguous. `journey --with-realtime` annotates static routes with current GTFS-RT; it does not live-reroute. Missing realtime entities do not prove on-time service. Historical delay probability is unsupported without archived GTFS-RT; use `delay-stats` and do not guess.\n\n## Evals\n\n```bash\nscripts/run-agent-evals.sh\n```\n\nUse `evals/agent/tasks.json` for manual scoring and `evals/agent/recipes.json` as machine-readable command recipes. Use evals to decide if repeated failures need docs, skill guidance, agent reasoning, or a narrow CLI feature.\n\n## References\n\n- https://opendatahub.com/api/\n- https://docs.opendatahub.com/en/latest/datasets.html\n- https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html\n\nFile v0.4.3:_meta.json\n\n{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.4.3\",\n  \"publishedAt\": 1785754614854\n}\n\nFile v0.4.3:skill-card.md\n\n## Description: <br>\nQuery Open Data Hub and NOI Techpark data through `odh`, covering Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[galjos](https://clawhub.ai/user/galjos) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and agents use this skill to query Open Data Hub and NOI Techpark public datasets through the `odh` CLI instead of scraping web pages. It is especially useful for South Tyrol tourism, mobility, traffic, parking, EV charging, GTFS, and transit data workflows. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill may cause an agent host to install and execute the third-party `odh` Go command-line tool. <br>\nMitigation: Install only in environments that intend to use `odh`; review the CLI package and version before enabling execution. <br>\nRisk: The CLI may make network requests to open-data services and return stale, truncated, or non-live public data. <br>\nMitigation: Use the skill's freshness filters, warning fields, source/provenance fields, timeouts, and current-notice checks before presenting results as current. <br>\n\n\n## Reference(s): <br>\n- [Open Data Hub API](https://opendatahub.com/api/) <br>\n- [Open Data Hub Datasets](https://docs.opendatahub.com/en/latest/datasets.html) <br>\n- [Open Data Hub Mobility Getting Started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html) <br>\n- [ClawHub Skill Page](https://clawhub.ai/galjos/skills/open-data-hub-cli) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with inline shell commands and JSON-oriented output instructions] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Guidance emphasizes JSON output flags, diagnostics handling, returned source fields, warnings, freshness checks, and bounded timeouts.] <br>\n\n## Skill Version(s): <br>\n0.4.3 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>","readmeExcerpt":"Skill: Open Data Hub Cli Owner: galjos Summary: Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... Tags: latest:0.7.2 Version history: v0.7.2 | 2026-09-22T11:57:43.366Z | user Pin odh CLI v0.7.1 with corrected help, atomic cache, and version-stamped user agent. v0.7.1 | 2026-09-21T13:56:17.257Z | user Correcte","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"odh version\nodh doctor --timeout 10s # local doctor flag, not the global --timeout"},{"language":"bash","snippet":"go install github.com/galjos/odh-cli/cmd/odh@v0.7.1\nbrew install galjos/odh/odh"},{"language":"bash","snippet":"odh apis\nodh datasets guide \"ev charging availability\" --format json\nodh datasets search parking\nodh openapi mobility\nodh openapi tourism\nodh mobility types --kind station\nodh mobility origins --station-type ParkingStation\nodh mobility datatypes --station-type TrafficSensor --origin A22 --limit 1000 --json"},{"language":"bash","snippet":"odh traffic zones --json\nodh traffic categories --json\nodh traffic today --area ueberetsch-unterland --type roadworks --json\nodh traffic search badia --today --zone-id 6 --json\nodh traffic today --near 46.42,11.25 --radius 15km --json\nodh traffic today --source content --json\nodh traffic today --source content --area pustertal --json\nodh traffic search radroute --today --source content --json"},{"language":"bash","snippet":"odh a22 status --limit 10 --json\nodh mobility events --origin A22 --latest --limit 20"},{"language":"bash","snippet":"odh diagnostics ev-charging --origin <ORIGIN> --fresh-within 24h   # <ORIGIN> from mobility origins\nodh diagnostics parking-forecasts --origin \"Municipality Merano\" --fresh-within 2h --forecast-minutes 60\nodh mobility latest --station-type ParkingStation --data-type free --origin \"Municipality Merano\" --active --fresh-within 2h --sort newest --request-limit 10000 --limit 10 --format table"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: open-data-hub-cli\ndescription: Query Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\nhomepage: https://github.com/galjos/odh-cli\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"os\": [\"darwin\", \"linux\"],\n        \"requires\": { \"bins\": [\"odh\"] },\n        \"install\":\n          [\n            {\n              \"id\": \"go\",\n              \"kind\": \"go\",\n              \"module\": \"github.com/galjos/odh-cli/cmd/odh@v0.7.1\",\n              \"bins\": [\"odh\"],\n              \"label\": \"Install odh CLI (go)\",\n            },\n          ],\n      },\n  }\n---\n\n# Open Data Hub CLI\n\nUse `odh` instead of scraping Open Data Hub pages. Most practical data is South Tyrol / Autonomous Province of Bolzano; verify record-level location from coordinates, origin, or metadata.\n\n## Setup\n\n```bash\nodh version\nodh doctor --timeout 10s # local doctor flag, not the global --timeout\n```\n\nNeed `odh v0.7.1` or newer for the current command contracts, dataset guidance, source/provenance fields, traffic helpers, GTFS/transit, filtered latest measurements, comma-safe `--param`, `transit journey --with-realtime`, and MCP server mode. Installs below pin v0.7.1.\n\nPreferred manual install options:\n\n```bash\ngo install github.com/galjos/odh-cli/cmd/odh@v0.7.1\nbrew install galjos/odh/odh\n```\n\nAgent hosts can also use the declared OpenClaw Go installer metadata in this skill. If running from the source repo, use `./odh`.\n\nAgent hosts that prefer MCP over shell commands can run the same curated surface as Model Context Protocol tools with `odh mcp serve`; tools advertise read-only behavior and return structured JSON alongside text, with the same contracts and warnings as the CLI.\n\n## Output Rules\n\n- Curated commands may default to table. Add `--json` or `--format json` before parsing output.\n- This applies especially to `traffic`, `a22 status`, `transit`, `tourism types`, `mobility types`, and `mobility datatypes`.\n- Treat stderr as diagnostics, not data.\n- Nonzero exit means failure. Exit `2` usually means bad invocation.\n- For bounded agent loops, put the global timeout before the subcommand, for example `odh --timeout 20s traffic today --area bozen-unterland --json`. `odh doctor --timeout` is a separate local flag.\n- When unsure about command shape, run `odh <command> --help`; current help includes task-focused examples.\n- Prefer discovery commands before guessing provider names, data types, stop IDs, or zone IDs.\n- Prefer returned `source`, `source_detail`, `endpoint`, `archive`, `realtime`, and `warnings` fields over inferred provenance.\n- Stable curated JSON fields are documented in `docs/json-contracts.md` in the repo.\n- Traffic and normalized `mobility latest` results include `coverage` with fetched, matched, and returned counts. Check `result_truncated` and `upstream_may_have_more` before claiming a complete list; matched counts cover only the fetched rows. Content traffic also reports `upstream_total` when supplied"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn780tj9xcvzfp19zksp9ypxz586r5wq\",\n  \"slug\": \"open-data-hub-cli\",\n  \"version\": \"0.7.2\",\n  \"publishedAt\": 1790078263366\n}"},{"path":"skill-card.md","content":"## Description:\n\nQuery Open Data Hub/NOI Techpark data through `odh`: Tourism, Mobility, traffic, A22, parking, EV charging, STA GTFS, and transit.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[galjos](https://clawhub.ai/user/galjos)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent operators use this skill to guide agents in querying Open Data Hub and NOI Techpark datasets through the `odh` CLI instead of scraping pages or guessing API calls. It supports public transport, tourism, mobility, traffic, parking, EV charging, A22, and STA GTFS workflows while preserving source, freshness, truncation, and warning context.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on installing and executing the external `odh` CLI, which may make network requests to Open Data Hub services.\n\nMitigation: Confirm the pinned Go module or Homebrew tap is acceptable before installation, and run the CLI in an environment approved for outbound requests.\n\nRisk: Answers based on live public feeds can be stale, truncated, incomplete, or tied to source-specific caveats.\n\nMitigation: Surface freshness, truncation, coverage, source, provenance, and warning fields in user-facing answers, as the skill instructs.\n\n## Reference(s):\n\n- [Open Data Hub API](https://opendatahub.com/api/)\n- [Open Data Hub datasets documentation](https://docs.opendatahub.com/en/latest/datasets.html)\n- [Open Data Hub Mobility API getting started](https://docs.opendatahub.com/en/latest/howto/mobility/getstarted.html)\n\n## Skill Output:\n\n**Output Type(s):** [guidance, shell commands, configuration, text, markdown]\n\n**Output Format:** [Markdown guidance with inline shell commands and expected JSON/table output notes]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance emphasizes read-oriented data queries, explicit JSON parsing flags, source fields, warnings, freshness, and truncation checks.]\n\n## Skill Version(s):\n\n0.7.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... Skill: Open Data Hub Cli Owner: galjos Summary: Use this skill when working with Open Data Hub, NOI Techpark data, ODH APIs, Tourism API, Mobility API, A22 traffic data, or when an agent should query Open... Tags: latest:0.7.2 Version history: v0.7.2 | 2026-09-22T11:57:43.366Z | user Pin odh CLI v0.7.1 with corrected help, atomic cache, and version-stamped user agent. v0.7.1 | 2026-09-21T13:56:17.257Z | user Correcte","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1270,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T11:25:02.576Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T04:07:49.681Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}