
Worldcup
- 1.3k installs
- 21 repo stars
- Updated August 3, 2026
- starchild-ai-agent/official-skills
worldcup provides documented workflows for |
About
The worldcup skill World Cup 2026 Skill FIFA World Cup 2026 data the points-based prediction game Script skill call the functions in core skill_tools worldcup from bash and read the JSON Auth is automatic container JWT no API key needed How to call bash python3 c from core skill_tools import worldcup import json print json dumps worldcup get_today_matches Every function returns a dict like success true data or success false error on failure When to use Matches today upcoming live finished or one specific match Predictions place cancel or review prediction history Stats point balance betting limits win rate total staked Leaderboard top predictors by points or accuracy Functions from core skill_tools import worldcup Function Returns get_today_matches today's matches your prediction status get_upcoming_matches limit 10 next scheduled matches get_live_matches matches in progress now get_finished_matches limit 20 recent results get_match_detail match_id one match in full place_bet match_id predict_type prediction stake places a prediction cancel_prediction prediction_id cancels an unsettled prediction refunds stake get_betting_status point balance pending stakes min max stake get_my_pr.
- **Matches** - today / upcoming / live / finished, or one specific match.
- **Predictions** - place, cancel, or review prediction history.
- **Stats** - point balance, betting limits, win rate, total staked.
- **Leaderboard** - top predictors by points or accuracy.
- `get_betting_status()` - confirm enough available points.
Worldcup by the numbers
- 1,339 all-time installs (skills.sh)
- +53 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #230 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
worldcup capabilities & compatibility
- Capabilities
- **matches** today / upcoming / live / finished · **predictions** place, cancel, or review predi · **stats** point balance, betting limits, win r · **leaderboard** top predictors by points or ac · `get_betting_status()` confirm enough availabl
- Use cases
- documentation
What worldcup says it does
# ⚽ World Cup 2026 Skill FIFA World Cup 2026 data + the points-based prediction game.
npx skills add https://github.com/starchild-ai-agent/official-skills --skill worldcupAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1.3k |
|---|---|
| repo stars | ★ 21 |
| Last updated | August 3, 2026 |
| Repository | starchild-ai-agent/official-skills ↗ |
How do I use worldcup for the task described in its SKILL.md triggers?
|
Who is it for?
Teams invoking worldcup when the user request matches documented triggers and prerequisites.
Skip if: Skip when cached docs are missing, the request is a negative trigger, or another sibling skill owns the workflow.
When should I use this skill?
|
What you get
Step-by-step guidance grounded in worldcup documentation and reference files.
Files
⚽ World Cup 2026 Skill
FIFA World Cup 2026 data + the points-based prediction game. Script skill — call the functions in core.skill_tools.worldcup from bash and read the JSON. Auth is automatic (container JWT); no API key needed.
How to call
python3 -c "from core.skill_tools import worldcup; import json; print(json.dumps(worldcup.get_today_matches()))"Every function returns a dict like {"success": true, "data": ...} (or {"success": false, "error": ...} on failure).
When to use
- Matches — today / upcoming / live / finished, or one specific match.
- Predictions — place, cancel, or review prediction history.
- Stats — point balance, betting limits, win rate, total staked.
- Leaderboard — top predictors by points or accuracy.
Functions (from core.skill_tools import worldcup)
| Function | Returns |
|---|---|
get_today_matches() | today's matches + your prediction status |
get_upcoming_matches(limit=10) | next scheduled matches |
get_live_matches() | matches in progress now |
get_finished_matches(limit=20) | recent results |
get_match_detail(match_id) | one match in full |
place_bet(match_id, predict_type, prediction, stake) | places a prediction |
cancel_prediction(prediction_id) | cancels an unsettled prediction, refunds stake |
get_betting_status() | point balance, pending stakes, min/max stake |
get_my_predictions(match_id=None, settled_only=False) | your prediction history |
get_prediction_detail(prediction_id) | one prediction in full |
get_my_stats() | your win rate, total staked, etc. |
get_leaderboard(limit=50, sort_by="points") | top predictors (sort_by: points\ |
Placing a bet — predict_type and prediction
prediction is a dict whose shape depends on predict_type. Fill ONLY the keys for that type:
| predict_type | prediction | meaning |
|---|---|---|
win_draw_loss | `{"choice": "home"\ | "draw"\ |
exact_score | {"home": N, "away": N} | exact final score |
total_goals | `{"range": "0-1"\ | "2-3"\ |
first_goal | {"team": "TEAM_CODE"} | which team scores first (e.g. BRA) |
stake = points to wager: multiple of 10, min 10, max 10000.
Recommended place_bet flow
1. get_betting_status() — confirm enough available points. 2. get_match_detail(match_id) or get_today_matches() — confirm the match is open and get team codes (needed for first_goal). 3. place_bet(match_id, predict_type, prediction, stake). 4. Read back the returned prediction ID to the user.
Example:
python3 -c "from core.skill_tools import worldcup; import json; print(json.dumps(worldcup.place_bet(42, 'win_draw_loss', {'choice':'home'}, 100)))"Notes
- Points are the prediction-game currency, not real money — present as a game, never as financial advice.
cancel_predictiononly works while a prediction is unsettled; it refunds the stake.- Match times are UTC; convert to the user's timezone when relevant.
"""
World Cup 2026 skill — script exports.
Self-contained thin client for the ai-agent worldcup endpoints
(/api/clawd/worldcup/*), authenticated with the container JWT. No platform
internals imported, so the skill is portable.
Usage (from bash or a task script):
from core.skill_tools import worldcup
print(worldcup.get_today_matches())
print(worldcup.place_bet(42, "win_draw_loss", {"choice": "home"}, 100))
Auth/config (env, injected in every clawd container):
AI_AGENT_API_URL base URL of ai-agent
CONTAINER_JWT bearer token (10-year TTL)
"""
import json
import os
import urllib.parse
import urllib.request
from typing import Any, Dict, Optional
def _base() -> str:
return os.environ.get("AI_AGENT_API_URL", "http://localhost:8001").rstrip("/")
def _jwt() -> str:
jwt = os.environ.get("CONTAINER_JWT", "") or os.environ.get("USER_JWT", "")
if not jwt:
raise RuntimeError(
"no CONTAINER_JWT in env — worldcup needs the container identity token"
)
return jwt
def _request(method: str, path: str, params: Optional[dict] = None,
body: Optional[dict] = None) -> Dict[str, Any]:
url = _base() + path
if params:
clean = {k: v for k, v in params.items() if v is not None}
if clean:
url += "?" + urllib.parse.urlencode(clean)
data = json.dumps(body).encode() if body is not None else None
req = urllib.request.Request(url, data=data, method=method)
req.add_header("Authorization", f"Bearer {_jwt()}")
req.add_header("Accept", "application/json")
if data is not None:
req.add_header("Content-Type", "application/json")
try:
with urllib.request.urlopen(req, timeout=30) as resp:
raw = resp.read().decode()
return json.loads(raw) if raw else {"success": True, "data": None}
except urllib.error.HTTPError as e:
detail = ""
try:
detail = e.read().decode()[:300]
except Exception:
pass
return {"success": False, "error": f"HTTP {e.code}: {detail}"}
except Exception as e:
return {"success": False, "error": f"{type(e).__name__}: {e}"}
# ─── Matches ────────────────────────────────────────────────────────────────
def get_today_matches() -> Dict[str, Any]:
"""Today's matches with the user's prediction status."""
return _request("GET", "/api/clawd/worldcup/matches/today")
def get_upcoming_matches(limit: int = 10) -> Dict[str, Any]:
"""Next scheduled matches."""
return _request("GET", "/api/clawd/worldcup/matches/upcoming", params={"limit": limit})
def get_live_matches() -> Dict[str, Any]:
"""Matches in progress now."""
return _request("GET", "/api/clawd/worldcup/matches/live")
def get_finished_matches(limit: int = 20) -> Dict[str, Any]:
"""Recently finished matches (most recent first)."""
return _request("GET", "/api/clawd/worldcup/matches/finished", params={"limit": limit})
def get_match_detail(match_id: int) -> Dict[str, Any]:
"""One match in full by ID."""
return _request("GET", f"/api/clawd/worldcup/matches/{match_id}")
# ─── Betting ──────────────────────────────────────────────────────────────────
def place_bet(match_id: int, predict_type: str, prediction: dict, stake: int) -> Dict[str, Any]:
"""Place a prediction.
predict_type / prediction payload shapes:
win_draw_loss -> {"choice": "home"|"draw"|"away"}
exact_score -> {"home": N, "away": N}
total_goals -> {"range": "0-1"|"2-3"|"4+"}
first_goal -> {"team": "TEAM_CODE"} e.g. "BRA"
stake: points, multiple of 10, min 10, max 10000.
"""
return _request("POST", "/api/clawd/worldcup/predict", body={
"match_id": match_id,
"predict_type": predict_type,
"prediction": prediction,
"stake": stake,
})
def cancel_prediction(prediction_id: int) -> Dict[str, Any]:
"""Cancel an unsettled prediction (refunds the stake)."""
return _request("DELETE", f"/api/clawd/worldcup/predictions/{prediction_id}")
def get_betting_status() -> Dict[str, Any]:
"""Point balance, pending stakes, and min/max stake limits."""
return _request("GET", "/api/clawd/worldcup/betting-status")
# ─── Predictions ──────────────────────────────────────────────────────────────
def get_my_predictions(match_id: Optional[int] = None, settled_only: bool = False) -> Dict[str, Any]:
"""The user's prediction history (optional match_id filter)."""
params: Dict[str, Any] = {}
if match_id is not None:
params["match_id"] = match_id
if settled_only:
params["settled_only"] = "true"
return _request("GET", "/api/clawd/worldcup/predictions", params=params or None)
def get_prediction_detail(prediction_id: int) -> Dict[str, Any]:
"""One prediction in full by ID."""
return _request("GET", f"/api/clawd/worldcup/predictions/{prediction_id}")
# ─── Stats & leaderboard ──────────────────────────────────────────────────────
def get_my_stats() -> Dict[str, Any]:
"""The user's betting stats (win rate, total staked, etc.)."""
return _request("GET", "/api/clawd/worldcup/stats")
def get_leaderboard(limit: int = 50, sort_by: str = "points") -> Dict[str, Any]:
"""Top predictors. sort_by: 'points' | 'accuracy'."""
return _request("GET", "/api/clawd/worldcup/leaderboard",
params={"limit": limit, "sort_by": sort_by})
Related skills
FAQ
What does worldcup do?
|
When should I use worldcup?
|
What are common prerequisites?
--- name: worldcup version: 1.0.0 description: | FIFA World Cup 2026 - match schedules, live scores, results, and the prediction game (place/cancel bets with points, betting stats, leaderboard).