Downfield
A local AI research agent that turns game, injury, news and weather data into structured, versioned NFL reports for BetTail. It runs with only the tools it needs and no app secrets, treats web pages as untrusted, and code checks every report before it's published.
- 32 gamescovered across two NFL weeks so far, with 415 saved reports from pregame forecasts to postgame grades
- Every reportchecked for schema, arithmetic and cross-player totals before publishing
- Versionedforecasts, graded against final stats after each game
- 2 toolsallowed, web search and fetch, and no app secrets in the agent's environment
Key decisionKeep source tracking in the app, not the model. A citation only counts if the app saw the agent fetch that page, and every forecast version is kept, so an update never erases an earlier prediction.
What it shows
Output you can check
Reports follow a JSON Schema, and code checks the arithmetic and that player totals reconcile, such as receiving yards against passing yards.
Forecasts you can audit
Each version keeps its own evidence, and code grades predictions against final stats after each game, so accuracy can be tracked over time.
Least privilege for an agent
A fixed tool list, a fixed model and an allowlisted environment, all checked when the session starts. Anything unexpected stops the run. Sportsbook price APIs are called only from a separate server, so their keys never reach the agent.
Untrusted input
Web pages are evidence to weigh, never instructions to follow. Reports reach BetTail through a short-lived, report-only credential, never a login or database key.
How it works
A fluent report can still rest on a stale injury report or numbers that don't add up. Downfield gathers recent games, rosters, injuries, news and weather into a research packet, lets the model write its forecast, then checks the result before anyone sees it.
Follow a report Choose a stage
Stage 01 / Research packet
What's known before the model starts?
Game, player, injury, news and weather data are saved as snapshots, and anything missing is listed as a gap instead of being filled in.
A saved snapshot can't prove an injury report is still current.
Stage 02 / Agent run
What can the agent do?
The agent runs headless with web search and fetch only, a fixed model and an environment built from an allowlist. Any other tool, model or API-key sign-in stops the run.
Fetching a page shows the agent read it, not that the page supports the claim.
Stage 03 / Code checks
Does the report hold together?
The report must match the schema, use known player and game IDs, and pass arithmetic and cross-player checks. Citations the app didn't see fetched are marked unverified and lower the report's confidence.
Consistent numbers don't make a forecast right.
Stage 04 / Publish
What happens when the forecast changes?
Each version keeps its own evidence, so new information adds a version instead of overwriting the old one. After each game, code grades the predictions against final stats and leaves missing stats ungraded.
Fresh reports need my computer awake and online.
What's tested
Forbidden tools
Tests try shell, file, edit and plug-in tools, an extra exposed tool, a different model and an API-key sign-in. Each one stops the run with no report saved.
Credential exclusion
Tests confirm the agent's environment drops API keys, tokens and provider overrides. The environment code and its tests run on their own from the public folder.
Bad output
Malformed responses, unknown citation IDs and inconsistent totals are rejected before anything is published.
Forecast history
Tests check that grading uses the earliest pregame forecast, rejects evidence saved after kickoff and leaves missing stats empty instead of scoring them as zero.
Limits
- The model's probabilities are its judgment and aren't calibrated; passing checks doesn't make a forecast right.
- Fresh reports depend on my computer being awake and online.
- Downfield writes research; it doesn't place bets.
Discuss Downfield
Ask about locking down an AI agent's tools, handling untrusted web pages or checking model output with code. Email me at aagarwalcollege@gmail.com.