Install
openclaw skills install @bridgeaisocial/fs-worldcup-knockoutTrade World Cup 2026 knockout-stage player fantasy-score markets on propSPACE (functionspace.dev). Each market is a scalar distribution over a player's aggregate fantasy points for a match. Builds a Gaussian belief from xG/xA/passing priors and trades when it diverges from consensus. Use when a user wants to trade FS WC knockout competition markets with an evidence-backed distribution strategy.
openclaw skills install @bridgeaisocial/fs-worldcup-knockoutBy FunctionSpace — built with Simmer's agent trading infrastructure. Play at propSPACE. Play-money only. Real USDC prizes administered by FunctionSpace.
Trade World Cup 2026 knockout-stage player fantasy-score markets. Your $1,000 play-money competes for a real prize pool (≥$5,000 USDC) matched by FunctionSpace. Round of 32 kicks off June 28, 2026.
🧪 Dry-run by default. Pass
--liveto place propSPACE play-money positions. This is a mutating competition-engine action, but it is not Simmer$SIM, Polymarket, Kalshi, or real-money trading.
propSPACE markets are continuous scalar belief markets — the outcome is a player's aggregate fantasy score for the match, not a binary yes/no. You trade a probability distribution over the score range. The engine uses a scoring-rule mechanism: positions pay out more when the consensus shifts toward your belief.
Competition format: each round you pick 1 FWD + 1 MID + 1 DEF. Those 3 selections are locked until round settlement. The skill ranks all open markets per position by edge (your belief mean vs consensus mean) and buys the best player in each slot.
Each run:
--live is passedExpected fantasy score = f(xG, xA, passes, FIFA scoring weights) × sentiment adjustment.
The belief is a Gaussian centered at the expected score with spread derived from
goal-scoring variance (Poisson: spread ≈ sqrt(xG) × points_per_goal).
Expert sentiment from WC 2026 fantasy articles shifts the mean ±15% and tightens
the spread when consensus among experts is strong.
Best pick = highest |our_belief_mean - consensus_mean| within the position slot.
⚠️ Points formula is a placeholder.
POINTS_PER_GOAL,POINTS_PER_ASSIST,POINTS_PER_PASSinmain.pyuse FPL-style defaults until FunctionSpace confirms their FIFA scoring weights. Update the fourPOINTS_*constants before going live.
⚠️ Engine URL placeholder.
FS_BASE_URLdefaults to the dev engine. Set it to the competition engine URL from FunctionSpace before going live.
Set your username and engine URL
export FS_USERNAME=simmer_agent_1
export FS_BASE_URL=<competition engine URL from FunctionSpace>
Enrich sentiment (optional but improves pick quality)
export BRAVE_API_KEY=your_key
python3 scripts/enrich_from_web.py --round "round of 32"
Dry run — see which 3 players the skill would pick
python3 main.py
Browse markets to see what's live with position labels
python3 main.py --list-markets
Inspect a specific market
python3 main.py --inspect 261
Go live — executes 1 FWD + 1 MID + 1 DEF propSPACE play-money trade
python3 main.py --live
python3 main.py # dry run: pick best FWD/MID/DEF
python3 main.py --live # execute 3 picks
python3 main.py --list-markets # list open markets with position labels
python3 main.py --market 261 # target one market
python3 main.py --inspect 261 # show consensus vs belief
python3 main.py --all-markets # trade all markets above edge threshold
| Variable | Default | Description |
|---|---|---|
FS_USERNAME | (required) | Agent username |
FS_BASE_URL | https://fs-engine-api-mech-v0-4.onrender.com | FunctionSpace competition engine URL |
FS_PASSWORD | simmer-wc-bot | Account password; set a stronger value for production bots |
FS_ACCESS_CODE | (none) | Competition access code |
FS_MAX_COLLATERAL | 333 | Max play-money per trade (× 3 picks ≈ 999 total) |
FS_MIN_EDGE | 0.05 | Min edge for --all-markets mode only |
FS_MARKET_FILTER | (none) | Market title keyword filter |
The current production path uses each market's FunctionSpace metadata.expectedPts / line as the base expected fantasy score and then optionally applies sentiment enrichment. If data/player_data.json exists, it can add player aliases and sentiment fields; if it is absent, markets still run using the FS line as-is.
expectedPts / line), while position-aware spread uses the constants in main.py. Confirm those spread assumptions against the official scoring model.FS_BASE_URL if FunctionSpace moves from the mech-v0-4 engine.position, positionType, player_position in that order).
Correct it in _market_position() if needed.FS_ACCESS_CODE.lower_bound / upper_bound for a typical player score.
Confirms the Gaussian fits the market range at runtime via --inspect <id>.