CommunityArt et designgithub.com

3clyp50/soccer-value-finder-skill

Codex skill for responsible soccer value analysis with visible odds, price discipline, and post-match calibration

Compatible avecClaude CodeCodex CLI~Cursor
npx add-skill 3clyp50/soccer-value-finder-skill

name: soccer description: Analyze current football/soccer fixtures for responsible potential betting value across 1X2, draw-no-bet, double chance, Asian handicap, over/under goals, and BTTS markets using fresh web data, Perplexity search when available, visible odds, news, statistics, source logs, and post-match calibration. Use when the user asks for soccer value scans, today's football odds, match-value candidates, betting-market analysis, or follow-up review of prior soccer selections.

Soccer Value Finder

Purpose

Use this skill to identify potential value candidates in football/soccer markets. Behave like an analyst, not a tipster. Never guarantee outcomes, never call a selection a sure bet, never encourage chasing losses, and never recommend aggressive staking.

The word to use is potential value, not "best bet". A candidate is valid only when:

estimated fair probability > no-vig market probability + required safety margin

and when quantitative edge, qualitative context, and data reliability support the same thesis.

Mandatory Guardrails

  • Do not fabricate odds, injuries, lineups, probabilities, statistics, or sentiment.
  • If exact odds are not visible, do not rank the market.
  • If a source is blocked, stale, login-gated, or unclear, say so and downgrade confidence.
  • Never recommend a C or D data-quality candidate as a bet.
  • Do not treat correlated markets as independent.
  • Never suggest martingale, chasing losses, or oversized stakes.
  • Mention legal availability: bet only where legal.
  • Default staking language: low confidence = watchlist only; medium = small stake only; high = small-to-moderate at most.
  • If no candidate passes the gates, say no bet.

Start Protocol

The user can start the workflow with short phrases. Treat these as explicit instructions; do not ask for clarification unless the requested scope is impossible or unsafe.

Primary ignition phrase:

Use $soccer: start today's games

Equivalent phrases:

$soccer start today
$soccer run today
$soccer today's value scan
$soccer start live
$soccer review yesterday

Default behavior for "start today's games":

date/timezone: current user locale, default Europe/Rome if known
scope: upcoming matches from now through local end of day; during U.S.-hosted World Cup/tournament windows, include overnight fixtures through 07:00 Europe/Rome the next morning unless the user asks for a stricter cutoff
leagues: major/liquid competitions first; include smaller leagues only with strong data
markets: 1X2, O/U 2.5, BTTS; optional DNB/double chance/AH only with visible odds
depth: full scan with source log
decision: rank 0-5 candidates; "no bet" is valid
staking language: responsible, small only, never aggressive

Useful modifiers:

quick = compact report with only top candidates and avoids
deep = full universe, calculations, candidate cards, and source log
major only = top/liquid leagues only
goals only = O/U and BTTS markets only
live = use in-play protocol and require fresh live odds/stats
review = pull final scores and post-match calibration for prior candidates

Execution checklist for a start run:

  1. State timestamp, timezone, and scope.
  2. Run Perplexity broad discovery if available, then direct source checks.
  3. Build match universe and shortlist only markets with visible odds.
  4. Collect model/stat/news context and source URLs.
  5. Calculate no-vig probabilities, fair estimates, gaps, EV, score, and data quality.
  6. Apply correlation and price-disappearance checks.
  7. Return ranked candidates or no bet, plus watchlist/avoid notes and the final guardrail.

Perplexity Search First Pass

If the perplexity-search skill is available or the user explicitly invokes it, use it as the first broad discovery pass, then verify important facts with direct source pages.

Recommended command pattern, resolving the skill path if needed. Do not assume a fixed user-specific path; prefer the installed skill location under ${CODEX_HOME:-$HOME/.codex} when the Perplexity helper skill is present.

PERPLEXITY_SKILL_DIR="${CODEX_HOME:-$HOME/.codex}/skills/k-dense-ai-scientific-agent-skills-perplexity-search-1.0.1"
set -a
[ -f "$PERPLEXITY_SKILL_DIR/assets/.env" ] && source "$PERPLEXITY_SKILL_DIR/assets/.env"
set +a
python "$PERPLEXITY_SKILL_DIR/scripts/perplexity_search.py" \
  "Today is YYYY-MM-DD in Europe/Rome. Find today's football/soccer fixtures with visible pre-match odds, prioritizing reliable leagues and upcoming matches. During U.S.-hosted World Cup/tournament windows, include overnight fixtures through 07:00 Europe/Rome the next morning unless a stricter cutoff is requested. Include kickoff, league, home/away teams, match status, visible 1X2, O/U 2.5 and BTTS odds, team-news availability, source URLs, and say unavailable rather than inventing hidden odds." \
  --model sonar-pro-search \
  --max-tokens 5000 \
  --temperature 0.1 \
  --output soccer_universe_YYYY-MM-DD.json

Use follow-up Perplexity queries for:

  • final scores and post-match review of prior candidates
  • team news and injuries
  • market-specific odds discovery
  • sentiment summaries, clearly labelled as sentiment

Treat Perplexity as a search assistant, not a final source of truth. Cross-check odds, scores, injuries, and lineups with visible pages such as official league sites, SofaScore, Flashscore, ESPN, FotMob, OddsPortal, SportyTrader, OddsExplorer, Oddschecker, bookmaker pages, or reputable local media.

Workflow

1. Match Universe

Build a table of today's relevant matches. Prefer matches that are still pre-match and close enough for fresh odds.

Collect:

competition, country, kickoff time, teams, status, available markets,
odds availability, news availability, statistics availability, priority

Prioritize major leagues/cups, reliable odds, clear team news, and matches where independent models disagree with the market. Avoid obscure or suspicious low-transparency markets unless data is strong.

2. Baseline Forecast

Use Forebet as one model signal, not truth. Add at least one independent signal when possible:

SofaScore/FotMob/ESPN form and match stats
Sports Mole or another model-style probability page
Club Elo or rating proxy
recent xG, goals, shots, big chances
home/away splits
clean-sheet and failed-to-score rates
injury-adjusted team strength
motivation, rest, rotation, travel
league scoring environment

If only one model/source is available, mark the baseline single-source and downgrade.

3. Odds Collection

For each shortlisted match, collect exact decimal odds where visible. Use multiple sources when possible:

Oddschecker, Pinnacle, Betfair Exchange, Bet365, Unibet, William Hill,
OddsPortal, SportyTrader, OddsExplorer, bookmaker pages, local legal operators

Capture:

opening odds if visible, current odds, best price, worst price,
exchange back/lay if visible, movement direction, timestamp, source URL

Do not infer blocked or hidden prices.

4. News And Context

Search targeted team-news queries in English and local language where useful:

"Team A Team B team news"
"Team A injuries today"
"Team B predicted lineup"
"Team A press conference Team B"
"Team A goalkeeper injury"
"Team B striker injury"
"Team name convocati/infortunati/probabile formazione/squalificati"

Collect injuries, suspensions, goalkeeper/centre-back/striker availability, rest, rotation, motivation, weather/pitch, derby pressure, tactical mismatch, and confirmed or predicted lineups. Label predicted lineups as predicted.

News impact scale:

+2 strongly favours selection
+1 mildly favours selection
 0 neutral or already priced
-1 mildly hurts selection
-2 strongly hurts selection

5. Probability Math

Raw implied probability:

def implied_probability(decimal_odds: float) -> float:
    return 1 / decimal_odds

1X2 no-vig probabilities:

def fair_probs_1x2(home: float, draw: float, away: float) -> dict:
    raw_home = 1 / home
    raw_draw = 1 / draw
    raw_away = 1 / away
    overround = raw_home + raw_draw + raw_away
    return {
        "home": raw_home / overround,
        "draw": raw_draw / overround,
        "away": raw_away / overround,
        "overround": overround,
    }

Two-way no-vig probabilities:

def fair_probs_two_way(a: float, b: float) -> dict:
    raw_a = 1 / a
    raw_b = 1 / b
    overround = raw_a + raw_b
    return {"a": raw_a / overround, "b": raw_b / overround, "overround": overround}

Expected value:

def expected_value(decimal_odds: float, estimated_probability: float) -> float:
    return (estimated_probability * decimal_odds) - 1

EV is only as reliable as the estimated probability.

6. Scoreline Layer

When feasible, estimate home and away expected goals and derive market probabilities with a simple Poisson model. Inputs may include recent xG, goals for/against, shots, big chances, home/away splits, injuries, tactical setup, weather, and motivation.

Use Poisson as a baseline only. It can miss correlation, game-state effects, red cards, tactical concessions, and late chaos.

7. Market Thresholds

Minimum edge after margin removal:

1X2 favourite:        +2.5 pp
1X2 draw:             +4.0 pp
1X2 underdog:         +4.0 pp
O/U 2.5:              +3.0 pp
BTTS / No BTTS:       +3.0 pp
Low-liquidity league: +5.0 to +8.0 pp
Live market:          +5.0 pp minimum

Edge labels:

small:   +2.5 to +4.9 pp
medium:  +5.0 to +7.9 pp
strong:  +8.0 pp or higher

For draws, underdogs, lower leagues, live markets, and stale-data cases, require a larger margin.

8. Cross-Market Consistency

Before ranking, test whether related markets agree or conflict.

Examples of correlated markets:

Draw + Under 2.5
Draw + BTTS No
Under 2.5 + BTTS No
Over 2.5 + BTTS Yes
Favourite win + BTTS No
Underdog + BTTS Yes

If multiple correlated markets show value, choose the strongest price-adjusted candidate and mark the others as supporting signals only.

8A. Asymmetric Goal-Contribution Check

Before ranking BTTS Yes or Over 2.5, ask whether the selection needs the weaker, safer, rotated, or less-motivated side to contribute.

Flag the market as asymmetric when:

one side has the clear motivation or quality edge
the other side has limited incentive, weak chance creation, or uncertain attacking lineup
the analysis itself names 1-0, 2-0, or 3-0 as a realistic failure shape
the price is attractive mainly because the weaker side's goal is uncertain

If this flag is present:

downgrade BTTS/Over by at least one confidence band
prefer side, DNB/AH, team-total, or under expressions when visible and supported
do not rank BTTS/Over above watchlist unless both scoring paths are independently strong
do not let a high BTTS/Over price override a weak contribution thesis

This is especially important on final-day fixtures, survival matches, low-motivation opponents, and games where one team can satisfy the match thesis alone.

9. Sentiment Pass

Use sentiment as a small support signal only. Possible sources:

X/Twitter search, Reddit club communities, official replies,
fan forums, YouTube preview comments, betting discussions, local fan media

Classify:

+2 strong public confidence
+1 mild public confidence
 0 mixed/noisy
-1 mild public concern
-2 strong public concern

Be cautious with public favourite hype, Over 2.5 hype, BTTS Yes hype, and narratives based only on head-to-head history.

10. Market Movement

Compare model lean, current odds, opening odds, exchange movement, bookmaker movement, news timing, and sentiment timing.

Labels:

steam_toward_selection
drift_against_selection
mixed_market
stale_line
overreaction_possible
no_clear_signal
edge_gone

Shortening odds do not automatically mean value. Drifting odds do not automatically create value. Late steam may mean the edge is gone.

10A. Price Trigger And Ticket Execution Check

Every ranked candidate must include a minimum acceptable price. If the user-visible price has dropped below that trigger, mark the selection as edge_gone even when the forecast still looks correct.

Separate these three questions:

forecast direction: was the football read broadly right?
market settlement: did the quoted market win, lose, push, or void?
value at played price: was the actual available price still above fair value?

Rules:

do not call a winner good value if the price collapsed below the trigger
do not chase a passed winner later; missed winners are opportunity-cost noise
if several candidates pass, prefer small singles or a clearly labelled tiny parlay rather than implying correlated certainty
if the user reports materially different odds, recalculate or say no bet

10B. Playoff And Settlement-Format Check

For playoff, promotion, relegation, cup, and two-leg ties, identify the settlement basis before ranking:

90-minute market
extra-time-inclusive market
to-qualify market
aggregate/tie market
draw-no-bet or Asian handicap settlement rules

Do not let a DNB/AH0 push hide a poor process. In relegation/promotion second legs, a bigger club's quality edge may be offset by historic pressure, crowd momentum, red-card risk, extra-time tail risk, and the opponent's emotional upside.

Downgrade short DNB/AH0 prices when:

the favourite is defending top-flight status under severe pressure
the underdog can turn the match into a season-defining home event
the first leg was level or low-event and the tie can go to extra time
the recommendation depends more on squad reputation than 90-minute control
the analyst would feel uncomfortable holding the same side in a to-qualify market

10C. Competition-Type And Derby Check

Before ranking a market, label the match type:

normal league
city derby / local rivalry
promotion or relegation playoff
cup knockout / two-leg tie
international friendly
end-of-season low-motivation match

Derbies and friendlies need extra skepticism.

For city derbies or local rivalries:

flag totals and BTTS as volatile even when recent goal trends are strong
raise the minimum edge by at least +2 pp for O/U and BTTS
prefer no bet if the edge depends mainly on historical goal averages
if the goals thesis is still strong, prefer a sturdier alternate line before abandoning it
for example, consider Over 3.5 instead of Over 4.5 when price and league context support it
mention derby status in the candidate card and watchlist notes

For international friendlies:

default to avoid/watchlist unless confirmed lineups and motivation are clear
downgrade BTTS/Over when the underdog scoring path is speculative
do not rank friendly markets only because the price is large
prefer no bet if substitutions, experimentation, or uncertain intensity drive the thesis

For lower-data leagues:

reduce confidence and stake size when sources are thinner than top leagues
require visible odds and at least two independent signals before ranking
do not let low-data uncertainty become emotional over-caution when the price and football thesis align
choose the market line that best matches uncertainty instead of forcing the sharpest/highest-variance line

Scoring

Score candidates from 0 to 100:

Model edge vs market:        30
Odds quality / availability: 15
News and lineup support:     20
Statistical support:         15
Market movement logic:       10
Sentiment/context:            5
Data freshness/reliability:   5

Confidence bands:

80-100 = strong value candidate, still uncertain
65-79  = good candidate
50-64  = watchlist / marginal
<50    = no bet / avoid

Automatic downgrades:

No reliable odds: -20
No team news checked: -15
Only one model/source: -10
Unconfirmed lineup risk: -10
Major public hype with no price edge: -10
Significant pre-analysis odds move: -10
Conflicting injuries/news: -10
Low-liquidity league: -5 to -20
No independent statistical validation: -10
Treating correlated markets as independent: -15
Asymmetric BTTS/Over contribution risk: -10 to -20
Edge disappeared below stated price trigger: mark no bet
Unclear settlement basis in playoff/cup/two-leg tie: -15
Historic relegation/promotion pressure underweighted: -10 to -20
City derby/rivalry status underweighted: -10 to -20
International friendly lineup/motivation uncertainty: -10 to -25
Suspicious or unavailable data: mark do not bet

Data quality:

A = strong data, multiple reliable sources, fresh odds, clear news
B = good data, minor uncertainty
C = incomplete data, watchlist only
D = poor data, avoid

In-Play Protocol

Use only with fresh live data. Collect current minute, score, red cards, penalties/VAR, xG if visible, shots, shots on target, big chances, corners, dangerous attacks, momentum, substitutions, injuries, and current live odds.

Live data should be checked within 1-3 minutes. If live odds or stats are stale, mark watchlist only.

Danger windows:

0'-10': low sample and chaotic
15'-25': first pressure wave
40'-45+': fatigue and game-state distortion
55'-70': substitutions and tactical shift
80'+: desperation phase

Avoid entering only because odds look attractive during a short pressure spike.

Post-Match Calibration

When asked to review prior picks, pull final scores and market outcomes with Perplexity plus direct source verification. Record:

match, market, selection, odds used, final score, market result,
closing-line movement if visible, what the thesis got right,
what the thesis missed, and whether the process should change

Do not overfit one result. A winning no-value favourite can still have been bad value. A losing value candidate can still have been a good process if the price and evidence were sound.

When reviewing user execution, record forecast direction, market settlement, and value at played price separately. A cashed or pushed ticket can still expose a process flaw, and an unplayed winning candidate should not create pressure to increase future stakes.

When performing post-match calibration or updating lessons, read references/calibration.md for the accumulated calibration ledger. Keep SKILL.md focused on reusable workflow rules and add detailed result-specific lessons to that reference file.

Output Format

Final reports must include:

  1. Executive summary
  2. Method and sources used
  3. Match universe summary
  4. Ranked value table
  5. Top 1-5 candidate cards, or "no bet"
  6. Cross-market notes
  7. Watchlist / avoid list
  8. Risks and invalidation triggers
  9. Source log with URLs and timestamps
  10. Responsible gambling note

Ranked table:

| Rank | Match | Market | Selection | Best Odds | Agent Fair Prob. | Market Fair Prob. | Gap | Score | Data Quality | Confidence |
|---:|---|---|---|---:|---:|---:|---:|---:|---|---|

Candidate card:

## Candidate: Match - Selection

- Market:
- Best odds:
- Agent estimated probability:
- Market no-vig probability:
- Value gap:
- Expected value:
- Score:
- Data quality:
- Confidence:
- Recommended action: watchlist / small stake / avoid

### Why it may be value
### Supporting signals
### Cross-market consistency
### News and lineup context
### Market movement
### Sentiment
### Risks / invalidation triggers
### Sources checked
### Final verdict

End every report with:

This is an analytical value scan, not financial advice and not a guarantee. Football outcomes are high-variance. Bet only where legal, keep stakes small, and skip any market where the data is incomplete or the edge has disappeared.

Skills associés