Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

football-value-bets

v1.0.0

Professional football bet analysis skill. Generates data-driven bet slips based on form, H2H, standings, injuries and value analysis. Includes result trackin...

0· 865·1 current·1 all-time
byNaoufal Andichi@nandichi
Security Scan
VirusTotalVirusTotal
Suspicious
View report →
OpenClawOpenClaw
Benign
high confidence
Purpose & Capability
Name/description request FOOTBALL_DATA_API_KEY and the code calls football-data.org; Python scripts implement fetching fixtures/standings/h2h and local bet tracking. Required binary (python3) and dependency (requests) are proportional to the stated goal.
Instruction Scope
SKILL.md instructs running the included scripts, saving slips locally, and performing web searches for injuries/xG/odds to compare bookmakers. The scripts themselves only call football-data.org and read/write local files; the explicit web-search step is outside the scripts and depends on the agent's browsing capabilities — this is expected for the use case but means the agent will query external sources beyond football-data.org when following the prose instructions.
Install Mechanism
No install spec (instruction-only) and included code files; no remote downloads or archive extraction. The only runtime dependency noted is 'requests' (pip install request), which is reasonable and low-risk.
Credentials
Only FOOTBALL_DATA_API_KEY is required (declared as primaryEnv). The code also supports storing the key in the skill's config/settings.json. No unrelated secrets, credentials, or system config paths are requested.
Persistence & Privilege
always is false; the skill writes its own data under a local data/ directory (data/bets/YYYY-MM-DD.json and data/stats.json) and the config file in the skill folder. It does not request system-wide privileges or modify other skills. Autonomous invocation is allowed but is the platform default.
Assessment
This skill appears to do what it says: it uses football-data.org (you must supply FOOTBALL_DATA_API_KEY), runs local Python scripts to fetch data and track bets, and asks the agent to perform additional web searches for injuries/xG/odds. Before installing: (1) Confirm you are comfortable providing a football-data.org API key (do not reuse other sensitive keys). (2) Accept that the agent may perform web searches (that can leak match/team queries to whatever browsing/search mechanism the agent uses). (3) The skill will create and store bet history and stats locally under the skill folder (data/bets and data/stats.json) — review and back up if needed. (4) If you are concerned about autonomous behavior, restrict autonomous invocation or review how your agent handles browsing/network requests. (5) As always, be aware of gambling risks and local legal restrictions before using. If you want extra assurance, inspect the included scripts yourself (they are small and readable) or run them in a sandboxed environment first.

Like a lobster shell, security has layers — review code before you run it.

Runtime requirements

Binspython3
EnvFOOTBALL_DATA_API_KEY
Primary envFOOTBALL_DATA_API_KEY
latestvk97ax9gmxwadg1g8k1ke9105ah816pyc
865downloads
0stars
1versions
Updated 9h ago
v1.0.0
MIT-0

Football Value Bets

Generate professional, data-driven football bet slips. No gut feelings, purely statistics and value analysis.

When to activate

Activate this skill when the user:

  • Asks for a football bet, bet slip, accumulator, or picks
  • Asks for match analysis for betting purposes
  • Asks for bet statistics, results, or ROI
  • Asks for a pick or tip for football

Prerequisites

Install dependencies (one-time):

pip install requests

Set API key (free via football-data.org/client/register):

export FOOTBALL_DATA_API_KEY="your-key-here"

Or fill in the key at {baseDir}/config/settings.json under api_key.


Mode 1: Generate Bet Slip

Step 1 -- Fetch data

Fetch current match data:

python3 {baseDir}/scripts/match_fetcher.py --mode full

This returns a JSON package with:

  • All scheduled matches for today and tomorrow
  • League standings and form data per team
  • Head-to-head history (last 5 encounters)

Coverage: Premier League, Bundesliga, Serie A, La Liga, Ligue 1, Eredivisie, Champions League.

If the user wants a specific date:

python3 {baseDir}/scripts/match_fetcher.py --mode full --date-from 2026-02-15 --date-to 2026-02-15

Step 2 -- Analyse each match

Analyse EVERY match from the data on these factors (in order of importance):

A. Form (last 5-10 matches)

  • Use the form field from the standings data (e.g. "W,W,D,L,W")
  • Calculate win percentage, goals per match
  • Pay attention to home form vs away form trends

B. Home/away statistics

  • Home team: goals for/against at home
  • Away team: goals for/against away
  • Compare goal difference at home vs on the road

C. Head-to-head (H2H)

  • Review the h2h data: who wins historically?
  • Look for patterns: does one team always score? Are these low- or high-scoring games?

D. Table position and motivation

  • Top of the table (title/CL spots): high motivation, consistent
  • Mid-table: unpredictable, be cautious
  • Bottom (relegation): can be surprisingly strong or weak
  • Difference in table position as an indicator

E. Additional factors (via web search) After the data analysis, search the web for EVERY shortlisted match:

  • Injuries and suspensions of key players (FotMob, Transfermarkt)
  • Recent news (manager change, internal issues, transfer saga)
  • xG (expected goals) data from recent matches
  • Weather conditions for outdoor matches in winter months

Use search terms like: "[Team A] vs [Team B] team news injuries" and "[Team A] xG stats 2025-26"

F. Odds estimation

  • Estimate realistic odds per outcome (based on your analysis)
  • Compare with common bookmaker odds (search the web if needed)
  • VALUE = when your estimated probability is higher than the implied probability of the odds
  • Implied probability = 1 / odds (e.g. odds 2.00 = 50% implied)

Step 3 -- Pick selection

Select ONLY picks that meet all criteria:

  1. Estimated win probability > 45%
  2. Odds per pick: 1.70 - 2.50 (value range)
  3. Clear motivation based on data
  4. No more than 1 pick per match

Allowed pick types:

  • 1 / X / 2: Home win, draw, away win
  • 1X / X2: Double chance
  • BTTS Yes/No: Both Teams To Score
  • Over/Under 2.5 goals
  • Handicap -1: Team wins by 2+ goals

Step 4 -- Honesty check

If you find FEWER than 3 picks with real value:

Do NOT generate a bet slip. Say honestly:

"No strong bet slip possible today. The matches offer insufficient value based on the data. Reasons: [brief explanation]. Wait for better odds or the next matchday."

This is MANDATORY. Never force it. Honesty > revenue.

Step 5 -- Generate output

Generate TWO variants:

Variant A: Main slip (3-4 picks, total odds 8x-15x)

MatchPickOddsMotivationProb %Risk
Ajax - PSVBTTS Yes1.85Both teams scored in 8/10 recent matches, H2H always goals52%Low
Arsenal - ChelseaOver 2.51.90Avg 3.2 goals per match this season, both attack-minded48%Medium
..................

Total odds: XX.XX Recommended stake: 5-10 EUR Potential payout: XX.XX EUR

Variant B: Backup (2-3 picks, total odds 4x-8x)

Same table format but with safer picks (higher probabilities, lower odds).

Always include at the bottom:

  • Estimated hitrate per variant (e.g. "Main slip: ~15% chance of all picks hitting, individual picks ~50% average")
  • Alternative advice: "Consider singles if you want to play it safer"
  • Disclaimer: "Gamble responsibly. Max stake 5-10 EUR per slip, monthly limit 75 EUR."

Step 6 -- Save bet

Automatically save the bet slip for tracking:

python3 {baseDir}/scripts/bet_tracker.py --mode save --data '{
  "type": "main",
  "stake": 5.0,
  "picks": [
    {
      "match": "Ajax - PSV",
      "competition": "Eredivisie",
      "pick": "BTTS Yes",
      "odds": 1.85,
      "estimated_probability": 0.52,
      "motivation": "Both teams scored in 8/10 recent matches",
      "risk": "low"
    }
  ],
  "total_odds": 12.50,
  "notes": ""
}'

Repeat for the backup slip with "type": "backup".


Mode 2: Record results

When the user says a bet has won or lost:

# Mark entire slip
python3 {baseDir}/scripts/bet_tracker.py --mode result --date 2026-02-15 --slip-idx 1 --result win

# Mark specific pick
python3 {baseDir}/scripts/bet_tracker.py --mode result --date 2026-02-15 --slip-idx 1 --pick-idx 2 --result loss

Result options: win, loss, void

Always ask the user for the date and which slip (main or backup) it concerns.


Mode 3: View statistics

When the user asks about results, stats, ROI, or hitrate:

python3 {baseDir}/scripts/bet_tracker.py --mode stats

Present the JSON output as a readable summary:

  • All-time hitrate and ROI
  • Current month: staked, returned, profit/loss, budget remaining
  • Best and worst month

Warn if the monthly budget is almost spent (>80% used).


Mode 4: View history

python3 {baseDir}/scripts/bet_tracker.py --mode history --days 30

Show an overview of all bets from the last N days.


Analysis quality rules

These rules are HARD. Always follow them:

  1. Never more than 5 picks per slip. More picks = exponentially lower chance.
  2. Never odds below 1.50 or above 3.00 per pick. Too low = no value, too high = too risky.
  3. Never 2 picks from the same match. Correlation destroys value.
  4. Never a pick without data backing. "Gut feeling" is not an argument.
  5. Always run the honesty check. No slip is better than a bad slip.
  6. Avoid derbies and cup matches unless the data is overwhelming. Too unpredictable.
  7. Always check injuries. A team without key players is a different team.
  8. Factor in the season phase. Early season = unreliable data. End of season = varying motivation.

Budget and responsible gambling

Configuration is in {baseDir}/config/settings.json:

  • Per bet: 5-10 EUR
  • Monthly limit: 75 EUR
  • Always check the stats for monthly spending before generating a new slip

If the monthly budget is at or nearly at its limit (>90%):

  • Inform the user
  • Advise waiting until next month
  • Do NOT generate a new slip unless the user explicitly states they want to proceed

Tone and style

  • Output in English
  • Professional but accessible
  • No hype, no promises
  • Data and percentages front and center
  • Honest about risks

Comments

Loading comments...