agentleFS
noahowshnoahowsh/endzoneapi-mcp/skills/edge-detection/SKILL.md

edge-detection

Skill0 starsChanged 28 days agoMITView on GitHub

Compares model probabilities with devigged NFL market prices to estimate edge, expected value and stake size, and tests whether a disagreement is likely real. Use when user asks if there is an edge on a game, whether the model beats the line, expected value of a bet, Kelly sizing, or how to tell value from noise. Do not use for finding the best price, see odds-explorer. Do not use for devig math, see odds-analysis. Do not use for historical profit tests, see backtesting.

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Step 1: Get a calibrated probability: Use probability-calibration.

    line 47
  2. Very specific:

    Check only the games where your model disagrees with the consensus line from get_schedule (2 credits per query), then pay for per-book …

    line 103

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Edge Detection

Default data tool: EndzoneAPI (endzoneapi-tool). get_odds (10 credits per game) for the market side. get_schedule (2 credits) for the games. Your model supplies the probabilities.

You are an expert in comparing a forecast with a market. Your goal is to say how large an estimated edge is, how uncertain it is, and what it would take to be wrong. Edges are estimates, not promises. Sports markets are efficient enough that most apparent edges are model error.

When to Use

  • "My model has KC at 58%, the market says 53%. Is that an edge?"
  • "What is the EV at these odds?"
  • "How much should I stake?"
  • "Is this disagreement big enough to act on?"

When NOT to Use

  • Hunting for the best price, see odds-explorer
  • Converting odds, see odds-analysis
  • Evidence from past seasons, see backtesting

Commands Available

CommandUse HereCredits
get_scheduleUpcoming games, consensus line2
get_oddsPer-book prices to devig, opening and latest10 per game
get_injuriesLate information the model may lack2

Commands That Do NOT Exist

Not AvailableUse Instead
get_edgesThis skill, from your probability and get_odds
get_model_picksNot provided; bring your own model
get_sharp_moneyNot available; closing-line movement is a proxy only

Method

Step 1: Get a calibrated probability. Use probability-calibration. An uncalibrated probability produces fake edges.

Step 2: Get the market's probability. Pull get_odds(game_id=...), devig each book's two sides (see odds-analysis). Use Pinnacle's no-vig number as the market benchmark and the best available price for the bet price.

Step 3: Edge.

edge        = p_model - p_market_novig
EV per unit = p_model * b - (1 - p_model)       # b = payout per unit at the bet price

Two different quantities: edge compares your probability with the benchmark; EV uses the price you can actually get. Report both.

Step 4: Shrink toward the market. The market contains information your model lacks. A common estimate is a blend:

p_final = w * p_model + (1 - w) * p_market_novig

Estimate w from walk-forward results (see walk-forward-validation): regress outcomes on the market logit and the model logit on held-out games, and use the fitted weights. If w is near zero, your model adds nothing beyond the market.

Step 5: Uncertainty. An edge of 3 points on one game has an error band wider than 3 points. If you can, propagate: bootstrap the model fit, or use the walk-forward log loss gap as a measure of how much information the model has. State a range.

Step 6: Size. Kelly fraction for a bet with probability p and payout b:

f* = (p * b - (1 - p)) / b

Use a fraction of it, a quarter or less, because p is estimated with error and full Kelly assumes it is exact. Cap any single bet at a small share of bankroll. Football has only 17 games a team a season and a Sunday slate is correlated through weather and shared injuries, so avoid treating 8 simultaneous bets as independent.

Step 7: Check what the line is telling you. If the market moved against your side since you computed the number, use get_odds to see opening vs latest. A line that moves away from you after you bet is a sign you may be on the wrong side of new information, not a proof.

Reasons a Gap Is Usually Not an Edge

CauseCheck
Missing late news (QB, line)get_injuries, the depth chart
Stale rating or small early-season sampleGames played, prior weight
Different quarterback than the model assumesConfirm starters
Weather not in modelget_game_detail
Model trained on a different eraWalk-forward by season
Probability uncalibratedReliability table

Closing-Line Value

The most reliable test of whether you have an edge is whether you beat the closing price consistently. If your bets on average get a better number than Pinnacle's close, that is evidence (see backtesting). If you only win on average at the closing price, you are paying the vig. A single result says nothing.

Credit Usage

OperationCredits
One game market check10
A 16-game Sunday slate160
Slate plus injuries190

Check only the games where your model disagrees with the consensus line from get_schedule (2 credits per query), then pay for per-book prices there.

Anti-patterns

RationalizationWhy It's WrongDo This Instead
"Model 58 vs market 53 is a 5% edge, bet big"Model error is larger than the gapShrink, quarter Kelly
"Raw implied probability is the market"Includes holdDevig
"All Sunday bets are independent"CorrelatedCap total exposure
"It won, so there was an edge"Variance dominates one gameJudge by price vs close over many bets
"Compare to the soft book's price"Soft books are not the benchmarkCompare to Pinnacle's no-vig

Output Format

KC vs DEN -- model 0.61 (calibrated), market no-vig 0.55 (Pinnacle)
Edge: +0.06 before shrinkage; shrunk (w=0.4): +0.02
Best price: [book] [odds], EV +0.0xx per unit at shrunk p
Stake: quarter Kelly = x.x% of bankroll, cap y%
Risks: [late news / sample / correlation]
This is an estimate; one game's outcome does not test it.

What to Do Next

What You FoundNext ActionSkill
Edge appears realTest over historybacktesting
Edge vanishes after shrinkageImprove the modelfeature-engineering
Need the best bookShopodds-explorer

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.