Scan Report
20 /100
Kalshalyst
Contrarian prediction market scanner using Claude Sonnet analysis, Brier score calibration, and Kelly Criterion position sizing for Kalshi markets
Legitimate prediction market trading tool with well-engineered safety controls; undocumented filesystem WRITE (state files) and subprocess shell access are minor doc/code gaps without malicious intent.
Safe to install
Add explicit declarations for subprocess shell access and filesystem WRITE scope in SKILL.md. Consider pinning all pip dependencies. Otherwise safe to use.
Findings 6 items
| Severity | Finding | Location |
|---|---|---|
| Medium | Subprocess shell execution not declared in SKILL.md Doc Mismatch | scripts/claude_estimator.py:30 |
| Medium | Filesystem WRITE scope exceeds declared READ-only access Doc Mismatch | scripts/trade_ledger.py, scripts/brier_tracker.py, scripts/kalshalyst.py |
| Medium | SQLite database creation not declared Doc Mismatch | scripts/brier_tracker.py:63 |
| Low | External config files influence execution behavior Supply Chain | scripts/claude_estimator.py, scripts/kelly_size.py, scripts/sports_estimator.py |
| Low | API key access from .env file not declared Sensitive Access | scripts/claude_estimator.py:63 |
| Low | Sibling skill imports at runtime not documented Doc Mismatch | scripts/auto_trader.py:45 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Network | READ | READ | ✓ Aligned | SKILL.md: HTTP calls to api.elections.kalshi.com and Anthropic API |
| Filesystem | READ | WRITE | ✗ Violation | scripts/kalshalyst.py:103 _write_cache writes to ~/.openclaw/state/; trade_ledge… |
| Shell | NONE | WRITE | ✗ Violation | scripts/claude_estimator.py:30 subprocess.run(['claude', '-p', ...]) with shell … |
| Environment | NONE | READ | ✗ Violation | scripts/claude_estimator.py:63 reads ANTHROPIC_API_KEY from os.environ and ~/.op… |
| Skill Invoke | NONE | READ | ✓ Aligned | scripts/auto_trader.py:45 imports from sibling kalshi-command-center skill |
| Database | NONE | WRITE | ✗ Violation | scripts/brier_tracker.py:63 creates SQLite DB at ~/.openclaw/state/brier_tracker… |
11 findings
Medium External URL 外部 URL
https://kalshi.com SKILL.md:37 Medium External URL 外部 URL
https://console.anthropic.com SKILL.md:43 Medium External URL 外部 URL
https://polygon.io SKILL.md:49 Medium External URL 外部 URL
https://ollama.ai SKILL.md:62 Medium External URL 外部 URL
https://status.kalshi.com SKILL.md:621 Medium External URL 外部 URL
https://x.com/KingMadeLLC SKILL.md:732 Medium External URL 外部 URL
https://api.elections.kalshi.com/trade-api/v2/portfolio/orders/ scripts/auto_trader.py:409 Medium External URL 外部 URL
https://api.elections.kalshi.com/trade-api/v2/portfolio/positions?limit=1 scripts/kalshalyst.py:152 Medium External URL 外部 URL
https://api.elections.kalshi.com/trade-api/v2/markets scripts/kalshalyst.py:456 Medium External URL 外部 URL
https://api.elections.kalshi.com/trade-api/v2 scripts/kalshalyst.py:854 Medium External URL 外部 URL
https://api.elections.kalshi.com/trade-api/v2/markets/ scripts/pnl_tracker.py:525 File Tree
17 files · 267.5 KB · 7728 lines Python 10f · 5392L
Markdown 6f · 2332L
Text 1f · 4L
├─
▾
references
│ ├─
blocklist.md
Markdown
│ ├─
brier-schema.md
Markdown
│ ├─
contrarian-prompt.md
Markdown
│ └─
kelly-math.md
Markdown
├─
▾
scripts
│ ├─
auto_trader.py
Python
│ ├─
brier_tracker.py
Python
│ ├─
circuit_breaker.py
Python
│ ├─
claude_estimator.py
Python
│ ├─
kalshalyst.py
Python
│ ├─
kelly_size.py
Python
│ ├─
pnl_tracker.py
Python
│ ├─
qwen_analyzer.py
Python
│ ├─
sports_estimator.py
Python
│ └─
trade_ledger.py
Python
├─
README.md
Markdown
├─
requirements.txt
Text
└─
SKILL.md
Markdown
Dependencies 6 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
kalshi-python | 1.0.0 | pip | No | Pinned |
anthropic | 0.18.0 | pip | No | Pinned to major.minor |
requests | 2.32.5 | pip | No | Pinned |
pyyaml | 6.0.3 | pip | No | Pinned |
sqlite3 | stdlib | Python stdlib | No | Built-in module for Brier tracking |
claude-cli | unpinned | system | No | External CLI binary, version not declared |
Security Positives
✓ No credential exfiltration — API keys only used for intended Kalshi/Anthropic API calls
✓ No obfuscation — all code is readable Python with clear intent
✓ No base64, no eval(), no reverse shell, no C2 patterns detected
✓ No access to sensitive paths like ~/.ssh, ~/.aws, or system directories outside ~/.openclaw/
✓ Comprehensive safety controls: circuit breaker pattern, reconciliation with portfolio API, daily loss limits, max exposure caps
✓ Pinned dependencies with known versions in requirements.txt (kalshi-python==1.0.0, anthropic==0.18.0, requests==2.32.5, pyyaml==6.0.3)
✓ Demo mode gracefully handles missing credentials without crashes
✓ File locking (fcntl) on trade log writes prevents corruption
✓ All network calls go to documented, legitimate endpoints (Kalshi, Anthropic, Polygon)
✓ Trade ledger serves as a resilient fallback when API is unavailable — good defense-in-depth design