polymarket-signal-sniper — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited polymarket-signal-sniper (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Your signals, Simmer's market safeguards, your agent's judgment.
🚨 The skill never trades. It hands your agent article + market pairs. Your agent decides whether the article bears on the market, which side, and how much. Read DISCLAIMER.md before your agent trades with real funds.
This is a template. The default signal source is RSS feeds. Remix it with any data source (APIs, webhooks, social media, custom scrapers). The skill handles the plumbing (feed polling, market matching, safeguards, dedup). Your agent provides the judgment.
Changed in 2.0.0: earlier versions guessed the trade side from keyword sentiment and could place orders with --live. Keyword sentiment cannot tell whether a headline is about a market, so that path is gone. --live, --dry-run and --scan-only are still accepted so old cron lines keep working, but they have no effect.
When user asks to install or configure this skill:
pip install simmer-sdkSIMMER_API_KEYThe skill needs no wallet key, because it never trades. If your agent will act on signals, set up trading separately with the simmer-wallet-setup skill.
User provides RSS feed and market directly:
User: "Watch this RSS feed for greenland news: https://news.google.com/rss/search?q=greenland"
User: "Tell me about any trump news from this feed that could move my markets"→ Run with --feed, --market and --json:
python signal_sniper.py --feed "https://news.google.com/rss/search?q=greenland" --market "greenland-acquisition" --jsonFor recurring scans, configure via environment:
| Setting | Environment Variable | Default | Description |
|---|---|---|---|
| RSS Feeds | SIMMER_SNIPER_FEEDS | (none) | Comma-separated RSS URLs |
| Markets | SIMMER_SNIPER_MARKETS | (auto) | Comma-separated market IDs (auto-discovers from keywords if empty) |
| Keywords | SIMMER_SNIPER_KEYWORDS | (none) | Comma-separated keywords to match |
Each cycle the script:
--jsonIt places no trades and changes nothing on your wallet or account. (If OWS_WALLET is set, the SDK still looks the wallet up at startup, so a stale wallet name stops the scan.)
Run a scan:
python signal_sniper.pyGet signals as JSON for your agent (logs go to stderr, JSON to stdout):
python signal_sniper.py --jsonView current config:
python signal_sniper.py --configOverride for one run:
python signal_sniper.py --feed "https://..." --keywords "trump,greenland" --market "abc123"Show processed articles:
python signal_sniper.py --history{
"signals": [
{
"article": {"title": "...", "url": "...", "summary": "...", "published": "..."},
"market": {"id": "...", "question": "...", "resolution_criteria": "...",
"current_price": 0.42, "time_to_resolution": "5d 3h"},
"warnings": ["Moderate slippage (11.0%)"]
}
],
"error": null
}A pair means the article matched a keyword (every article matches when no keywords are set) and the market passed the safeguards. It does not mean the article is about the market.
The warnings list on each signal comes from the market's context:
| Warning | Action |
|---|---|
Market resolves in Xh - elevated risk | Consider if signal is timely enough |
Mild flip-flop warning | Proceed carefully, need strong signal |
High slippage / Moderate slippage | Reduce position size or skip |
Edge ... below threshold | The market may already reflect this |
Markets that are resolved, resolve within 2 hours, have a severe flip-flop warning or a spread above 10% are dropped before pairing.
For each signal, your agent should:
published with recent price movement. News on a public RSS feed has often moved the price already.source="sdk:signalsniper" so the trade is attributed to this skill: client.trade(market_id=..., side="yes", amount=10.0, source="sdk:signalsniper",
skill_slug="polymarket-signal-sniper")User: "Set up news sniping for the Greenland market" → Ask for RSS feeds they want to monitor → Configure with market ID and keywords → Enable cron for recurring scans, and read the JSON each run
User: "Check this feed for trading signals" → Run: python signal_sniper.py --feed "URL" --json → Assess each pair and report the ones that bear on resolution
User: "Snipe any bitcoin news from CoinDesk" → Run with CoinDesk RSS and bitcoin-related markets → Show relevant pairs and ask if they want to trade
User: "What signals have we processed?" → Run: python signal_sniper.py --history → Show recent articles and the markets they were paired with
1. RSS poll finds: "Trump and Denmark reach preliminary Greenland agreement"
2. Keywords match: "greenland", "trump"
3. Market "greenland-acquisition-2027" passes safeguards → signal emitted
4. Agent reads resolution criteria: "Resolves YES if US formally acquires Greenland by 2027"
5. Agent's view: "preliminary agreement" ≠ "formally acquires"; price already up 4% today
6. Agent decides: no trade, report to user"No feeds configured"
SIMMER_SNIPER_FEEDS environment variable"No matching articles found"
"Skipping: safeguards failed"
"Already processed"
"--live has no effect"
Tips for choosing signal sources:
https://news.google.com/rss/search?q=YOUR_TOPICThe skill works best when:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.