Sharp Line Detector

Other

Monitor line movements at sharp sportsbooks (Pinnacle, Circa, Bookmaker). Detect steam moves, reverse line movement, and significant implied probability shifts. Use when asked about line movement, sharp money, steam moves, or smart money signals.

Install

openclaw skills install sharp-line-detector

Sharp Line Detector

Monitor line movements at sharp sportsbooks. Detect steam moves, reverse line movement, and smart money signals.

When to Use

Use this skill when the user asks about:

  • Line movement on a game or sport
  • Steam moves or sharp action
  • Reverse line movement (RLM) signals
  • Whether smart money has moved a line
  • Pinnacle, Circa, or Bookmaker line changes
  • Significant odds shifts since open

Sharp Book Keys

The skill prioritizes lines from these market-making books (in order of sharpness):

BookThe Odds API KeyWhy It Matters
PinnaclepinnacleLowest vig, sharpest global market
CircacircasportsSharpest US book, accepts large limits
BookmakerbookmakerLong-standing sharp-friendly book
BetOnlinebetonlineagAccepts sharp action, moves early
DraftKingsdraftkingsHigh volume, useful as public benchmark
FanDuelfanduelHigh volume, useful as public benchmark

If Pinnacle odds are not available in the API response, fall back to Circa, then Bookmaker.

Configuration

Environment variables for tuning thresholds (all optional):

  • SHARP_SPREAD_THRESHOLD — Minimum spread movement in points to flag (default: 1.5)
  • SHARP_ML_THRESHOLD — Minimum moneyline implied probability shift to flag (default: 0.05 = 5%)
  • SHARP_SNAPSHOT_DIR — Directory for snapshot files (default: /tmp/openclaw-sharp-snapshots)

Operations

1. Snapshot Current Lines

Capture a timestamped snapshot of current odds from all books for a sport. Stores as JSON for later comparison.

SPORT_KEY="${SPORT_KEY:-basketball_nba}"
SNAP_DIR="${SHARP_SNAPSHOT_DIR:-/tmp/openclaw-sharp-snapshots}"
mkdir -p "$SNAP_DIR"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

curl -s "https://api.the-odds-api.com/v4/sports/$SPORT_KEY/odds?apiKey=$ODDS_API_KEY&regions=us,eu&markets=h2h,spreads&oddsFormat=american&bookmakers=pinnacle,circasports,bookmaker,betonlineag,draftkings,fanduel" \
  | jq --arg ts "$TIMESTAMP" '{
    timestamp: $ts,
    sport: "'$SPORT_KEY'",
    games: [.[] | {
      id: .id,
      game: "\(.away_team) @ \(.home_team)",
      away: .away_team,
      home: .home_team,
      start: .commence_time,
      books: [.bookmakers[] | {
        key: .key,
        name: .title,
        h2h: [(.markets[] | select(.key=="h2h")).outcomes[] | {team: .name, odds: .price}],
        spread: [(.markets[] | select(.key=="spreads")).outcomes[] | {team: .name, point: .point, odds: .price}]
      }]
    }]
  }' > "$SNAP_DIR/${SPORT_KEY}_${TIMESTAMP}.json"

echo "Snapshot saved: ${SPORT_KEY}_${TIMESTAMP}.json ($(jq '.games | length' "$SNAP_DIR/${SPORT_KEY}_${TIMESTAMP}.json") games)"

## About

Built by [AgentBets](https://agentbets.ai) — full tutorial at [agentbets.ai/guides/openclaw-sharp-line-detector-skill/](https://agentbets.ai/guides/openclaw-sharp-line-detector-skill/).

Part of the [OpenClaw Skills series](https://agentbets.ai/guides/#openclaw-skills) for the [Agent Betting Stack](https://agentbets.ai/guides/agent-betting-stack/).