Polymarket Tennis
livetennisapi/livetennisapi-mcp
Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
The disciplined process for autonomously and profitably trading the live Kalshi account on each /loop tick, with Claude as the decision-maker.
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-trade --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/kalshi-trade .claude/skills/kalshi-trade && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .claude/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-tradeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-trade --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/kalshi-trade .agents/skills/kalshi-trade && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .agents/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-trade --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/kalshi-trade .cursor/skills/kalshi-trade && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .cursor/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ryanfrigo/kalshi-ai-trading-bot.git --path .claude/skills/kalshi-trade--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-trade --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/kalshi-trade .gemini/skills/kalshi-trade && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .gemini/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-tradeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/kalshi-trade .github/skills/kalshi-trade && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .github/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ryanfrigo/kalshi-ai-trading-bot kalshi-trade --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ryanfrigo/kalshi-ai-trading-bot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/kalshi-trade .opencode/skills/kalshi-trade && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kalshi-trade" agent skill from https://github.com/ryanfrigo/kalshi-ai-trading-bot/tree/main/.claude/skills/kalshi-trade into .opencode/skills/kalshi-trade/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kalshi-trade", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kalshi-tradeThe disciplined process for autonomously and profitably trading the live Kalshi account on each /loop tick, with Claude as the decision-maker.
Kalshi Trade is an agent skill from ryanfrigo/kalshi-ai-trading-bot. The disciplined process for autonomously and profitably trading the live Kalshi account on each /loop tick, with Claude as the decision-maker. Use on every Kalshi trading loop iteration and whenever managing the kalshi-ai-trading-bot live account — to assess account state, surface edge, research true probabilities, decide with strict risk discipline, execute guarded orders, journal predictions, and measure realized edge. Triggers include "/loop" ticks on the Kalshi mission, "trade Kalshi", "run the Kalshi…
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Business, Finance & HR, covering Trading and backtesting. It works with Kalshi and Python. The repository describes itself as: A toolkit for building AI-automated trading strategies on Kalshi prediction markets. The licence is MIT.
9 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7b9667b. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kalshi Trade loads about 3.4k tokens when it runs. Until then it costs about 149 tokens; SKILL.md has 1,821 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ryanfrigo/kalshi-ai-trading-bot at commit 7b9667b, republished under its MIT licence (© ryanfrigo). 1,821 words, ~3,446 tokens.
.claude/skills/kalshi-trade/SKILL.md (or your agent's skills folder).You (Claude) are at the helm of a real, live Kalshi account. Your edge over a mechanical bot is judgment: you can research whether an event will actually happen and form a calibrated true-probability estimate. Use it. Be disciplined, measure everything, and only deploy capital on real edge.
Run every command from the repo root: PYTHONPATH=. .venv/bin/python cli.py <cmd>.
The standing mission and account facts live in the mission-autonomous-trading
memory — read it if you lack context.
cli.py brief. Read governor (halted? day P&L? drawdown?),
equity, cash, positions, resting orders. If governor.halted is true: place
NO new buys (you may still close/exit). Note anything that settled since last tick.cli.py daily (dry-run, no --live) prints the mechanical
"near-certain NO, YES≤0.20, model-edge≥3¢" slice. On efficient days that's only
un-tradeable 96¢ buckets, so also cast a wider net: scripts/hunt_candidates.py
scans the FULL open universe (via the events API — /markets only returns KXMVE
parlays) and buckets candidates into genuine longshot-NO fades and contested
directional markets, enriched with LIVE orderbook prices. Both are raw material,
not a buy list.true_no_prob beats the NO ask by a fee-aware margin:
edge = true_no_prob − no_ask ≥ 0.05 (covers ~1¢ fee + safety). Use YOUR number, not the market's.cli.py policy — the data-driven gate
your OWN settled record earns. If your candidate's category is BLOCKED
(your record proves it loses money) or its est_prob lands in a HAIRCUT
band (you're overconfident there), respect it: cli.py trade will refuse a
blocked category. Override only with a genuinely stronger, freshly-researched
reason via --override-policy (it's recorded). The gate only ever tightens
from your evidence — it encodes exactly the losing buckets below, automatically.cli.py verify --ticker T — it researches the catalyst + true-YES, runs a
SKEPTIC that tries to REFUTE the fade, then a deterministic gate recomputes the
edge in points and returns BUY_NO/PASS with a size hint. Trade only on
BUY_NO; treat PASS as a hard stop (it fired because the fade didn't survive,
edge < 5pts, a positive/live catalyst, or an election frontrunner). Use its
size_hint (full only for genuine sub-5% longshots) to size down.
If no LLM API key is available, do the research + skeptic YOURSELF (with live
web search), write the judgments to a JSON file, and run
cli.py verify --ticker T --research-file f.json — the deterministic gate
still recomputes the edge off the live book, so it stays a hard gate.cli.py trade --live --ticker T --side no --count N --price 0.NN --est-prob P --rationale "why" --category C. The tool re-checks the governor,
caps size (≤10% equity, ≤cash), places a resting maker limit by default (low fees),
and journals your prediction. Omit --live first to preview.trade. Records est_prob, edge, rationale.cli.py learnings (the integrated learn step). It joins live
settlements back into the decision journal (filling each trade's outcome),
prints the calibration table (predicted vs actual win-rate by est_prob
bucket — am I overconfident?) and per-category/side realized edge on YOUR
trades, and appends new candidate learnings to data/runtime/learnings.jsonl.
Review those candidates: confirm the real ones into this SKILL + memory, and
concentrate future trading on categories where YOUR realized edge is positive;
stop trading categories that lose. (cli.py settle/history remain for raw P&L.)cli.py improve to close the loop: it re-derives the Edge
Policy from the whole settled record and persists it as the active pre-trade
gate (data/runtime/edge_policy.json), printing the diff of what the newest
settlements changed. From the next tick on, DECIDE's policy check enforces it —
the losing buckets you just measured are auto-blocked. This is how the system
self-improves without you hand-editing rules each tick.Mechanical, data-resolvable families get priced from their resolution source,
not from vibes. Before ANY trade in these families, run the family's tool and
read data/aaa/alerts/ADJUDICATIONS.md — the standing verdicts live there.
| Family | Resolution source | Tool | Standing verdict |
|---|---|---|---|
| KXDIESELD daily ladder | AAA national print (market closes BEFORE the print) | scripts/aaa_pricer.py price --series KXDIESELD --target <date> | EFFICIENT — retail-only model lost to the wholesale-convergence check; trade only if the excess gap (scripts/aaa_futures.py gap) is small AND the model still disagrees |
| KXDIESELMON / KXDIESELW | AAA weekly/monthly prints | scripts/aaa_pricer.py path --series ... --target <date> | Snapshot-only so far; path model fair swings with the drift assumption — needs the forward sample |
| KXAAAGASD national + 21 states | AAA national/state pages | `scripts/aaa_data.py today | states+price --series KXAAAGASD<ST>` |
| KXA100MS monthly compute price | Ornn OCPI (public daily API) | `scripts/ornn_data.py fetch | strike |
| KX*SHARE weekly | OpenRouter "Market Share" chart (Mon 10am ET, TEXT requests by author, 1dp; author in "Others" => all NO) | `scripts/orshare_data.py snapshot | day |
| KXTRUTHSOCIAL weekly buckets | Roll Call post count (10am ET Mon; Truths+ReTruths+Quotes) | scripts/ts_posts.py --week <start> (proxy ±1 vs Roll Call) | Count proxy validated; don't fade live-catalyst tail buckets |
| Jev forward log | same markets | scripts/jev_score.py (runs in the morning job) | First forward scores: book Brier 0.054 > model 0.098 > Jev 0.153 (n=498). The sweep's model is NOT good enough to trade yet |
Every pricing run writes a snapshot under data/aaa/pricings/ (and Ornn ladder
pricings) that aaa_pricer.py score / jev_score.py forward-score against the
realized print. Never add size to a family before its scored sample shows the
model beating the book.
data/runtime/TRADING_HALTED (drop a file to stop everything).trade tool enforces it; don't fight it).--est-prob + --rationale.no_ask ≥ 0.85) on longshot markets. Never buy YES longshots — you become the bag-holder.cli.py settle revealed the actual track record — read it before trading:
KXCPI, inflation, GDP-point, Fed-rate): the
outcome has a real distribution — a "narrow bucket" can carry 10–20%, not 3–5%.
AVOID NO bets on numeric/economic-data buckets.KXMARMAD, KXNCAAMBTOTAL):
several outcomes stay live; the NO is not near-certain. Avoid / size tiny.KXGDP overshoot, KXGUINEAWORM,
KXBTCMAX150 extreme price, KXGOVTSHUTLENGTH, alien-confirmation-type):
true YES < 5%, NO won Refined edge (the only version the data supports): NO-only, on genuine
<5% longshots — extreme/binary events where YES is a real long shot — and
avoid economic-data buckets and multi-outcome sports brackets. Run
cli.py settle each tick and let the realized per-category P&L keep tightening
this list. If a category's realized edge is negative, stop trading it.
A 12-agent research sweep (de-vigged sportsbook odds vs live Kalshi books on 11 markets) found 10/11 efficient; the one "+21¢ survivor" was a MIRAGE — a live tennis match where Kalshi's 0.85 was the correct in-play price and the research had anchored on stale PRE-MATCH odds. Burn these in:
*_dollars fields are
stale (seen: snapshot 0.68 vs live 0.85). Live book = orderbook_fp.{yes_dollars, no_dollars} ($); best yes_ask = 1 − best_no_bid, best no_ask = 1 − best_yes_bid.
scripts/hunt_candidates.py does this for the shortlist.The legacy −$588 track record was substantially mechanical-bot bugs, not a verdict on the
edge — build your OWN measured track record from here and act on real, verified edge. Keep
the hard risk rules; discipline ≠ timidity (hunt actively, but never trade a mirage).
Reliable profit requires: (a) genuine <5% longshots OR thin researched mispricings, (b) the
category exclusions above, (c) low-fee maker orders, (d) a real researched reason the price
is wrong, (e) pricing off the LIVE book. Treat cli.py settle realized P&L on YOUR trades as
the source of truth, and let it keep tightening the filter. Honesty over optimism: an honest
no-trade after a rigorous hunt is a win, not a failure.
© ryanfrigo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/kalshi-trade of ryanfrigo/kalshi-ai-trading-bot.
Open the folder on GitHubat commit 7b9667b
Kalshi Trade next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kalshi Trade this skillryanfrigo/kalshi-ai-trading-bot | 613 | — | ~3.4k | Automated safety check: Pass | MIT | |
| Polymarket Tennislivetennisapi/livetennisapi-mcp | 152 | — | ~3k | Automated safety check: Pass | MIT | |
| Tushare Datazillionare/zillionare | 321 | 2 repos | ~2.3k | Automated safety check: Pass | None | |
| Digital Oraclekomako-workshop/digital-oracle | 878 | — | ~5.9k | Automated safety check: Pass | MIT | |
| Dr Manhattanguzus/dr-manhattan | 204 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Quant Backtestjoemccann/market-data-warehouse | 183 | — | ~2.1k | Automated safety check: Pass | None |
livetennisapi/livetennisapi-mcp
Build observe-only Polymarket and Kalshi tennis market tooling on the polymarket-tennis Python package (MIT) plus the Live Tennis API free tier.
zillionare/zillionare
面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。
komako-workshop/digital-oracle
Answer prediction questions using market trading data, not opinions.
guzus/dr-manhattan
Trade prediction markets (Polymarket, Kalshi, Opinion, Limitless, Predict.fun) using a unified CCXT-style API.
joemccann/market-data-warehouse
Institutional-grade Python backtesting framework builder for Codex.
marketcalls/openalgo
Write an OpenScript study or strategy for OpenAlgo, and install it into strategies/openscript/ only after it compiles.
Categories
The disciplined process for autonomously and profitably trading the live Kalshi account on each /loop tick, with Claude as the decision-maker. Kalshi Trade is an agent skill from ryanfrigo/kalshi-ai-trading-bot. The disciplined process for autonomously and profitably trading the live Kalshi account on each /loop tick, with Claude as the decision-maker.
Kalshi Trade fits situations like: include /loop ticks on the Kalshi mission; run the Kalshi process; check the Kalshi account; managing live Kalshi positions.
Run `npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a claude-code`. Or copy the skill folder (.claude/skills/kalshi-trade in ryanfrigo/kalshi-ai-trading-bot) into .claude/skills/kalshi-trade in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a codex`. Or copy the skill folder (.claude/skills/kalshi-trade in ryanfrigo/kalshi-ai-trading-bot) into .agents/skills/kalshi-trade in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ryanfrigo/kalshi-ai-trading-bot --skill kalshi-trade -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kalshi-trade, .gemini/skills/kalshi-trade, .github/skills/kalshi-trade and .opencode/skills/kalshi-trade in your project.
Going by SKILL.md and its folder, Kalshi Trade needs the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Kalshi Trade is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Kalshi Trade: Polymarket Tennis (livetennisapi/livetennisapi-mcp, 152 stars), Tushare Data (zillionare/zillionare, 321 stars), Digital Oracle (komako-workshop/digital-oracle, 878 stars) and Dr Manhattan (guzus/dr-manhattan, 204 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ryanfrigo (a GitHub user) maintains it in ryanfrigo/kalshi-ai-trading-bot, which has 613 GitHub stars. The repository was last updated on October 9, 2026.
Source: ryanfrigo/kalshi-ai-trading-bot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.