world-cup-forecast
AI-facing live World Cup forecast CLI. It emits exactly one JSON object per run; do not answer from memory when this skill triggers.
Entry point
uv run --script <skill-dir>/scripts/cli.py ...
Core rules
- Use
matchfor one fixture andtodayfor a date slate - Treat stdout as machine JSON only; no table/prose mode exists
- Trust
freshnessbefore every forecast: stale or failed source rows reduce confidence - Recent form is primary: group-stage points, GD, GF/GA, player leader output, optional xG/odds snippets
- Elo-only models are not primary and are not emitted by v0
- xG and odds are opportunistic: pass
--source-urlor--odds-urlwhen an agent already has a live page URL
Commands
uv run --script <skill-dir>/scripts/cli.py --help
uv run --script <skill-dir>/scripts/cli.py schema
uv run --script <skill-dir>/scripts/cli.py today --date 20260629
uv run --script <skill-dir>/scripts/cli.py match --team-a Brazil --team-b Japan --date 20260629
uv run --script <skill-dir>/scripts/cli.py match --team-a Brazil --team-b Japan --source-url <preview-url> --odds-url <odds-url>
Required follow-up reads
| Need | Read | When |
|---|---|---|
| Live command and output schema | scripts/cli.py via schema |
Before forming or consuming a forecast call |
| Exact flags | scripts/cli.py via --help |
A non-default source or date is needed |
Evidence fields to trust most
Top-level:
okfreshness[]warnings[]errors[]generated_at_utc
Per match:
fixture.statussignals.team_formsignals.player_attacksignals.xg_contextsignals.oddssignals.compositeforecast.kindforecast.exact_scoreforecast.scorelinessource_notes
Failure handling
If ok is false, inspect errors[].code and freshness[] before retrying. Use --scoreboard-url, --standings-url, or --stats-url only when ESPN endpoints have moved or a fixture endpoint must be injected for validation. Missing xG or odds does not invalidate a forecast; the corresponding signal reports available: false.