Install
openclaw skills install @youjunzhao/world-cup-2026-predictorUse for English or Chinese football match forecasts, pre-kickoff alerts, post-match review, and controlled self-evolution from multi-book odds, line movement...
openclaw skills install @youjunzhao/world-cup-2026-predictorUse this skill to produce a disciplined, probability-based football forecast from market structure and fresh news. Keep the output analytical: no guarantees, no profit claims, no certainty language, and no claim that a bookmaker knows the result.
The canonical invocation name stays world-cup-2026-predictor. The skill now covers football broadly, including international tournaments and club matches, while preserving bilingual response matching.
Use the same language as the user in the response.
Before calculating:
league_or_group, single_leg_knockout, two_leg_first, two_leg_second, or friendly. A second leg also requires the aggregate score and applicable tiebreak rules.If match identity is ambiguous, required context is missing, or the match has already started, abstain from a new pre-match forecast.
references/consensus-model.md.If a bundled script rejects malformed odds, missing formats, aggregator provenance, or unsupported live-only input, catch that validation error at the response layer. Name the missing/invalid field and return no forecast edge or 观望; never expose a traceback and never guess a replacement value. When actionable_forecast is false, probabilities may be described only as diagnostics, not as a pick.
Keep 90-minute and qualification markets separate. A team can be weak in 90 minutes and still credible to advance.
confirmed only when it comes from official or clearly attributable sources.unconfirmed when it is rumor, preview, opinion, or unsupported reporting.When the user requests rolling pre-kickoff updates, create exactly four alerts per match unless the user explicitly requests a different schedule:
| Offset | Purpose |
|---|---|
| T-3h10 | Establish the fresh multi-book baseline and compare with opening. |
| T-2h10 | Recheck consensus movement, news, and source quality. |
| T-1h10 | Recheck likely/confirmed lineup information and flip triggers. |
| T-10min | Produce the final pre-match update, leaving the requested 10-minute decision window. |
Every alert prompt must invoke $world-cup-2026-predictor, refresh current sources, read prior analysis, and answer in the user's language. Use scripts/kickoff_alerts.py --minutes-before 190 130 70 10 to generate exact local times. If automation tools are available, create the alerts; otherwise return the four exact times and prompts. A user who explicitly asks only for the final alert may use the default T-10min mode.
Review correct and incorrect forecasts with the same discipline and in the same language as the user. A correct pick is not proof that its explanation was valid, and a wrong pick is not permission to chase the latest result.
score_90m, score_after_extra_time, penalties, and the qualifier separate. Never settle a 90-minute market with an extra-time or penalty result.input_fingerprint. Reject missing or changed replay input.half_win or half_loss; pushes stay pushes.Use these user-facing labels:
| User language | Required review labels |
|---|---|
| English | Final result, Right, Wrong, Unsettled/push, Causes, Calibration, Evolution status, Probability reminder |
| Chinese | 最终赛果、判断正确、判断错误、未结算/走盘、原因证据、校准影响、模型状态、概率提醒 |
One completed match never changes the active profile. Eligibility requires at least 100 distinct matches overall and 30 distinct matches in every affected bucket. Four alert snapshots from one event count as one independent match, and only the latest valid pre-kickoff record is primary.
Use grouped chronological walk-forward evaluation: older events select one-coordinate -5% or +5% challengers, and the newest 30 distinct events form the holdout. All snapshots from one event stay in one fold. Tier D remains zero.
Promotion requires every gate: 1% relative Brier improvement, no log-loss regression, no totals or BTTS regression when each has at least 30 observations, a 2% bucket regression cap, and a 0.005 calibration-error tolerance. Invalid records, source conflicts, missing fingerprints, non-finite metrics, or stale parent profiles fail closed. Pick accuracy is diagnostic, not a promotion gate.
Use these state ids and explain them in the user's language:
| State | Meaning |
|---|---|
model_unchanged | Fewer than 100 distinct matches, no eligible bucket, or no validated improvement. |
challenger_pending | A challenger exists, but one or more holdout or regression gates are pending or failed. |
champion_promoted | Every promotion gate passed and the versioned profile was atomically activated. |
champion_rolled_back | A manual rollback was performed, or 30 new distinct matches showed both Brier and log-loss regression against the parent. |
Do not perform a per-match profile update. Automatic rollback evidence requires 30 new distinct matches and both primary metrics to worsen; --mode rollback is also an explicit operator recovery command. Keep every promoted profile, its parent, record ids, metrics, parameter diff, decision, and integrity fingerprint.
python3 scripts/forecast.py --input examples/multi-book-match.json --data-dir ~/.football-forecaster --pretty
python3 scripts/postmatch_review.py --forecast examples/forecast-snapshot.json --result examples/completed-match.json --language en --data-dir ~/.football-forecaster --pretty
python3 scripts/calibrate.py --input ~/.football-forecaster/completed.jsonl --pretty
python3 scripts/evolve.py --completed ~/.football-forecaster/completed.jsonl --data-dir ~/.football-forecaster --mode evaluate --pretty
python3 scripts/evolve.py --completed ~/.football-forecaster/completed.jsonl --data-dir ~/.football-forecaster --mode promote --pretty
python3 scripts/evolve.py --data-dir ~/.football-forecaster --mode rollback --pretty
python3 scripts/postmatch_alerts.py --input matches.json --timezone Asia/Hong_Kong --retry-count 4
Use --language zh for a Chinese review. Read references/postmatch-evolution.md before creating post-match automation, interpreting evolution gates, or changing a model profile.
Use the same language as the user and include:
When the evidence is insufficient, output no forecast edge in English or 观望 in Chinese instead of forcing a pick.
When validation fails, a bundled script raises an input error, or actionable_forecast is false, replace the normal conclusion table with only:
no forecast edge / 观望 status.invalid_odds_format, missing_underlying_bookmaker, insufficient_books, invalid_context, stale_near_kickoff, already_started, or unsupported_live_state.Do not output a recommended 1X2, qualification, Asian handicap, total, BTTS, or score pick in this mode. Diagnostic probabilities may be shown only when the user explicitly asks for them, and must remain labeled non-actionable.
references/source-policy.mdreferences/consensus-model.mdreferences/market-rules.mdreferences/odds-formats.mdreferences/postmatch-evolution.mdUse these references before answering when source quality, consensus math, market interpretation, odds conversion, settlement, or evolution matters. Use scripts/forecast.py for reproducible probabilities and scripts/calibrate.py only on completed JSONL records; source-weight changes remain locked until the distinct-match floors and every promotion gate are met.