Polily — A Polymarket Monitoring Agent That Actually Works
Paste a Polymarket event URL and Polily decides whether it's worth your time, scores the structure, hunts mispricing, watches for moves, and closes out positions automatically when markets resolve. A monitoring agent that surfaces what Polymarket's UI hides — for every event you're considering.
Why You Need It
Polymarket's UI hides what actually matters:
- Spread, depth, and fees quietly eat your PnL — at any account size. Polymarket shows mid-price; you trade against the order book. polily surfaces both before you click
- A good story doesn't make a good market — narratives are seductive; structure (depth, spread, time-to-close, friction) is what the numbers say
- Watching 5+ events by hand doesn't scale — refreshing pages doesn't tell you when something actually changed
- Crypto markets carry vol-implied edge — Polymarket has no vol model; polily compares against live Binance data and flags mispriced probabilities
What It Does For You
- Paste a URL → instant dossier + value check — pulls the full event + child markets, scores 0–100 across spread / depth / objectivity / time / friction, surfaces hidden costs, and tells you whether the event is worth following
- Mispricing detection — for crypto threshold markets, compares against a log-normal vol model fed by live Binance data and flags probabilities that look mis-priced
- Background watching + move alerts — a daemon polls prices for everything in your watchlist; meaningful moves trigger AI analysis and notifications
- Paper trading with a realistic wallet — tracks positions, fees, and PnL exactly as live trading would: real cash balance, aggregated positions (YES + NO coexist), Polymarket-accurate taker fees, and automatic settlement when markets resolve — so your paper PnL curve reflects live execution, not a sanitized backtest
A high structure score ≠ YES will win. It measures whether the market is tradeable, not whether you should buy — keep the two separate.
Quick Start
pipx install polily # recommended
polily # launches the TUI; everything happens inside it
Requirements: Claude Code installed and authenticated (polily delegates AI analyses to the
claudeCLI). Runclaude --versionto verify.
For development setup (editable install, running tests, etc.) see CONTRIBUTING.md.
In the TUI, paste a Polymarket event URL (looks like https://polymarket.com/event/...) into the Tasks pane. Polily fetches and scores it; from there you can add it to monitoring or open a paper trade.
💡 Bonus: chat with polily from Claude Code. Inside the TUI, press
9to open the Companions page — or install polily-plugin directly in any Claude Code session to query your polily install via chat (DB schema, analytical methodology, your actual positions and analyses) without re-explaining your setup each conversation. Optional, free with your existing Claude Code subscription.
Where polily stores data
Starting v0.11.0, polily uses OS-standard locations:
- macOS:
~/Library/Application Support/polily/ - Linux:
$XDG_DATA_HOME/polilyor~/.local/share/polily/
Override with the POLILY_DATA_DIR env var or polily --data-dir=PATH CLI flag (highest priority). Logs go to <data-dir>/logs/ by default; override with POLILY_LOG_DIR.
Requirements
Polily v0.8.0+ requires a Nerd Font installed and configured as your terminal font. The TUI uses Nerd Font glyphs for status icons, action markers, and domain entities (event / market / wallet).
macOS (Homebrew)
brew install --cask font-jetbrains-mono-nerd-font
Then set your terminal's font to JetBrainsMono Nerd Font:
- Ghostty: edit
~/Library/Application Support/com.mitchellh.ghostty/configand setfont-family = "JetBrainsMono Nerd Font"(reload withCmd+Shift+,) - iTerm2: Preferences → Profiles → Text → Font →
JetBrainsMono Nerd Font - Terminal.app: Preferences → Profiles → Font → Change →
JetBrainsMono Nerd Font
Any Nerd Font works (font-fira-code-nerd-font, font-hack-nerd-font,
font-meslo-lg-nerd-font). Polily tests on JetBrainsMono NF but glyph
positions are the same across all NF fonts.
Verify
polily doctor
The "Nerd Font" section prints sample glyphs. If you see □ tofu
boxes, the font is not yet active — check your terminal's font setting.
Minimum terminal size: 100×30 cells. Polily works at smaller sizes but column layout may wrap. 120×30 or larger recommended.
Python & Claude CLI
- Python 3.11+
- Claude CLI (optional, used for AI analysis):
npm install -g @anthropic-ai/claude-code && claude login
TUI Shortcuts
| Key | Action |
|---|---|
0 |
Tasks log |
1 |
Watchlist |
2 |
Paper positions |
3 |
Wallet (balance + ledger + topup/withdraw) |
4 |
History |
5 |
Archive |
6 |
⚙ Config (movement / scoring / mispricing / wallet knobs) |
7 |
Changelog |
r |
Refresh current page |
o |
Open Polymarket link (detail pages) |
↑ / ↓ |
Navigate menu |
q |
Quit |
Inside the Wallet page: t topup · w withdraw · shift+r reset (or click Reset Wallet).
Inside an event detail page: a AI analysis · t trade · m toggle monitoring · v switch analysis version.
See docs/ui-guide.md for the full v0.8.0 interaction reference.
Background Scheduler
Price polling, movement detection, and AI analysis run inside a daemon:
polily scheduler run # foreground (typically launched by launchd)
polily scheduler status # status
polily scheduler restart # restart
polily scheduler stop # stop
polily reset # wipe DB / logs for a clean restart
polily reset --wallet-only # reset wallet only, keep events/markets/analyses
Configuration
All polily configuration (movement thresholds, scoring weights, mispricing deviation gates, wallet starting balance) is managed inside the TUI:
polily # launches the TUI
# press 6 or click the sidebar's ⚙ Config
- The Config view is grouped into 4 sections — Movement Triggers / Scoring / Mispricing / Wallet
- Click any row to open an Edit modal with a description, default value, and tuning guidance
- After saving, a banner shows
N pending change(s); pressCtrl+Rto restart polily so the daemon picks them up
How it's stored:
- The canonical source is the
configtable inside SQLite (data/polily.db) config.yamlis a read-only snapshot that polily regenerates from the database on every startup — manual edits are silently overwritten- Per-knob documentation lives in
polily/core/config_docs/*.md
Emergency recovery (only useful if the TUI hits the "config invalid" fatal screen):
polily config reset --all # reset every knob to defaults
polily config reset movement.magnitude_threshold # reset a single knob
Current Limitations
- Mispricing detection currently only covers crypto threshold markets
- AI analysis requires Claude CLI — when the CLI call fails (not installed / network issue / schema mismatch), the analysis is marked
failedin scan history with no silent fallback - Data comes from Polymarket public APIs — real-time freshness is bounded by them
Contributing
See CONTRIBUTING.md for setup, branch strategy, and dev workflow (including the .envrc + direnv pattern that keeps your dev data isolated from your real polily data).
Architecture details: docs/architecture.md.
License
MIT
Release files for polily 0.13.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| polily-0.13.0.tar.gz | 8.8 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| polily-0.13.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.3 MB
Release files / polily-0.13.0.tar.gz
| Download URL | polily-0.13.0.tar.gz |
|---|---|
| Size | 8.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1c7299cae3bdd69ea207147a920229b0c189d796cea300599ac92002c1eaf983
|
|
BLAKE2b-256 checksum How to use checksums |
95c82d0116711c639e157c760abbaf7b2d42a30dda829d4477980f14b7d68fc4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.
Transparency logRelease files / polily-0.13.0-py3-none-any.whl
| Download URL | polily-0.13.0-py3-none-any.whl |
|---|---|
| Size | 517.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4f8463f561bcc3e60eceba833bd5756905c55a5419e874e581b066bb307c4339
|
|
BLAKE2b-256 checksum How to use checksums |
4ca1ad11f1e7717887d123ea7599a01363a5471a9230fe9edbcc97f92da1f1db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 22, 2026.
Transparency log