Market Brief — Daily Morning & Evening Intelligence Digest
Overview
Market Morning Brief is a lightweight, resilient daily intelligence system designed to be the first thing you read each morning. It combines:
- Portfolio P&L — Your Kalshi positions and unrealized gains/losses
- Top opportunities — Markets with highest edge (if Kalshalyst cache available)
- Cross-platform divergences — Kalshi vs Polymarket pricing mismatches (if Arbiter cache available)
- X signal summaries — Top-performing prediction signals from Twitter/X (if Xpulse cache available)
- Crypto prices — Bitcoin, Ethereum, plus any configured altcoins (if Coinbase configured)
- Polymarket insights — Notable markets and volume activity
The brief is designed for 30-second scanning — each section is 3-8 lines maximum. If a data source is unavailable, the section gracefully degrades to "unavailable" and the brief continues.
When to Use This Skill
- You trade prediction markets (Kalshi, Polymarket) and want daily market context
- You need a quick morning summary: portfolio status + opportunities + signals
- You want an evening briefing: either lightweight trading summary or AI-filtered news digest
- You want integration with your other market intelligence tools (Kalshalyst, Arbiter, Xpulse)
- You want plain text output suitable for SMS, iMessage, or any messaging platform
- You want AI-powered news curation: two-stage filtering to prevent notification fatigue
Every Evening (Default: 6:00 PM): Day's activity summary (positions opened/closed, realized P&L), watch list for overnight risks, top X signals from the day, and unusual market activity.
Architecture
Design Philosophy
Resilience through isolation. Each section:
- Wrapped in try/except to prevent one failure from breaking the entire brief
- Reads from cache files (not live APIs) for speed and reliability
- Gracefully degrades if data unavailable ("unavailable, check Kalshalyst directly")
- Logs failures without interrupting output
Plain text output. No markdown, no emojis, no formatting — designed for chat delivery:
- Compatible with iMessage, SMS, email, web chat, any platform
- Scannable: max 80 chars per line, clear section headers
- Readable at a glance in <30 seconds
Configurable integration. The brief reads from:
- Optional Kalshalyst cache (
.kalshi_research_cache.json) - Optional Arbiter cache (
.crossplatform_divergences.json) - Optional Xpulse cache (
.x_signal_cache.json) - Optional Coinbase API (if configured)
- Public Polymarket API (no auth)
If a cache file doesn't exist (skill not installed), that section simply shows "unavailable".
Configuration
Create or update your config.yaml:
market_morning_brief:
enabled: true
morning_time: "07:30" # Schedule for morning brief
evening_time: "18:00" # Schedule for evening brief
timezone: "America/New_York"
# Kalshi API (required for portfolio section)
kalshi:
enabled: true
api_key_id: "your-key-id"
private_key_file: "/path/to/private.key"
# Coinbase API (optional, for crypto prices)
coinbase:
enabled: false
api_key: "sk-..."
tickers: ["BTC", "ETH"] # Customize as needed
# Cache paths (for reading other skills' data)
cache_paths:
kalshalyst: "./state/.kalshi_research_cache.json"
arbiter: "./state/.crossplatform_divergences.json"
xpulse: "./state/.x_signal_cache.json"
# Which sections to include
include:
portfolio: true
kalshalyst_edges: true # Requires Kalshalyst skill
arbiter_divergences: true # Requires Prediction Market Arbiter skill
xpulse_signals: true # Requires Xpulse skill
crypto: false # Requires Coinbase API key
polymarket: true # Free (public API)
Section-by-Section Breakdown
1. Portfolio Summary
Data source: Kalshi API (read-only)
Example output:
PORTFOLIO (3 positions, +$24 unrealized):
POTUS-2028-DEM YES 100@48¢ $48 cost +$18 unrl (exp: 242 days)
UKRAINE-2026-NO YES 50@28¢ $14 cost +$8 unrl (exp: 118 days)
FED-MAR-CUT NO 200@35¢ $70 cost -$2 unrl (exp: 8 days)
Fields:
- Ticker | Side (YES/NO) | Quantity @ Price | Cost | Unrealized P&L | Days to Expiration
Graceful degradation: If Kalshi API unavailable:
PORTFOLIO: unavailable (check Kalshi API)
2. Kalshalyst Edges (Optional)
Data source: Kalshalyst cache (.kalshi_research_cache.json)
Example output:
EDGES (Kalshalyst, top 3):
1. POTUS-2028-DEM NO @ 38% (+14% edge, 72% conf)
2. INFLATION-2026 YES @ 68% (+8% edge, 65% conf)
3. UKRAINE-PEACE YES @ 55% (+6% edge, 58% conf)
Fields:
- Ticker | Side | Market Price | Edge % | Confidence %
Graceful degradation: If Kalshalyst skill not installed:
EDGES: unavailable — unlock with: clawhub install kalshalyst
3. Cross-Platform Divergences (Optional)
Data source: Prediction Market Arbiter cache (.crossplatform_divergences.json)
Example output:
DIVERGENCES (Arbiter, Kalshi ↔ Polymarket):
UKRAINE-2026-NO Kalshi 28% ↔ PM 31% ($0.03 spread, 12% vol diff)
POTUS-2028-DEM Kalshi 38% ↔ PM 40% ($0.02 spread, 8% vol diff)
Fields:
- Ticker | Kalshi Price ↔ Polymarket Price | Spread | Volume Difference
Graceful degradation: If Arbiter skill not installed:
DIVERGENCES: unavailable — unlock with: clawhub install prediction-market-arbiter
4. X Signal Summaries (Optional)
Data source: Xpulse cache (.x_signal_cache.json)
Example output:
X SIGNALS (Xpulse, last 24h):
Fed rate cut odds +5% (confidence: 78%, reach: 8.2K)
Ukraine ceasefire talks (+3%, 72% conf, 5.1K reach)
Fields:
- Signal | Magnitude | Confidence % | Reach/Strength
Graceful degradation: If Xpulse skill not installed:
X SIGNALS: unavailable — unlock with: clawhub install xpulse
5. Crypto Prices (Optional)
Data source: Coinbase API (requires key + configuration)
Example output:
CRYPTO:
BTC $62,400 (+1.2%) | ETH $3,140 (-0.8%)
SOL $142 (-2.1%) | AVAX $38 (+0.5%)
Fields:
- Ticker | Price | 24h Change %
Graceful degradation: If Coinbase not configured:
CRYPTO: unavailable (configure Coinbase API for crypto prices)
6. Polymarket Activity
Data source: Public Polymarket API (free)
Example output:
POLYMARKET (top 3 by volume):
POTUS 2028: $2.4M vol, 48% DEM (vs 52% GOP)
Inflation >4% 2026: $1.1M vol, 32% prob
Bitcoin $100K by 2026: $0.8M vol, 58% prob
Fields:
- Market | Volume | Implied Probability | (Context)
Graceful degradation: If Polymarket API unavailable:
POLYMARKET: unavailable (check Polymarket directly)
Evening Brief — Lightweight Market Summary + AI-Filtered News
Sent at configured evening time (default: 6:00 PM). Two variants: lightweight market update or full news digest with materiality filtering.
Lightweight Market Variant (6-8 lines, trading-focused)
EVENING BRIEFING — Thursday, March 7, 2026
ACTIVITY:
Current positions: 3 | Cost: $132 | Unrealized: +$24
OVERNIGHT WATCH:
• FED-MAR-CUT expires in 8 days — monitor Fed speakers before FOMC
• UKRAINE-2026 low liquidity (9 contracts asking) — wide spreads
TOP X SIGNALS TODAY:
• Ukraine ceasefire talks +3% (78% conf)
• Fed rate cut odds stabilizing (72% conf)
Key differences from morning brief:
- Shorter (6-8 lines max)
- Focus on intraday activity (current positions, cost, unrealized P&L)
- Overnight watch items (expirations, geopolitical risks, liquidity alerts)
- Top X signals from that day (not 24h rolling)
Full Evening News Digest (News-focused with AI filtering)
EVENING NEWS BRIEFING — Thursday, March 7, 2026
🏛️ Fed Signals Cautious Stance on Rate Cuts (87% conf, Reuters)
📈 Tech Stocks Rally on Earnings Beat (82% conf, Bloomberg)
🌍 Geopolitical Tensions Escalate Over Trade Deal (79% conf, AP)
💻 AI Policy Bill Advances in Congress (76% conf, TechCrunch)
📌 Crypto Markets Stabilize After Volatility (71% conf, CoinDesk)
Features:
- Category icons: 🏛️ policy, 📈 markets, 💻 technology, 🌍 geopolitics, 📌 general
- Confidence scores (0-100%) show Qwen relevance assessment
- Two-stage filtering pipeline (see below)
- 48-hour rolling history prevents repeated news
- Fail-closed design: if Qwen unavailable, no news sent (silence over noise)
Evening Briefing: Two-Stage News Filtering Pipeline
Evening briefing combines DuckDuckGo news search with local Qwen LLM for AI-powered news curation. Designed to prevent notification fatigue while surfacing genuinely material developments.
Architecture
Stage 1: Relevance & Significance Filter
- Search for recent news across configured topics (default: prediction markets, AI policy, federal reserve)
- Run each article through Qwen: is this significant? (0-1 confidence score, category classification)
- Filter to articles with confidence >= min_confidence (default: 0.7)
- Limit to top 10 most confident articles for Stage 2
Stage 2: Materiality Gate (Prevents Notification Fatigue)
- Load history of previously sent articles (48h rolling, max 200 entries)
- Compare candidate articles against recent history
- Qwen decision: is this NEW and MATERIAL? Or just ongoing background noise?
- Drop duplicates, commentary, routine announcements
- Only pass through genuinely new developments or significant escalations
Fail-Closed Design:
- If Qwen unavailable during Stage 1 or Stage 2: drop all articles (silence over noise)
- If no material news: send nothing (don't interrupt with noise)
- History persistence:
~/.openclaw/state/evening_news_history.json(max 200 entries, auto-cleanup)
Example Configuration
market_morning_brief:
evening_briefing:
enabled: true
mode: "news" # "market" for activity summary, "news" for full news digest
time: "18:00" # Briefing time (30-min window)
materiality_gate: true # Enable Stage 2 filter (prevents fatigue)
min_confidence: 0.7 # Minimum relevance threshold (0-1)
max_per_topic: 3 # Max articles per topic to search
topics:
- "prediction markets"
- "AI policy"
- "federal reserve"
- "geopolitics"
Command Usage
# Lightweight market variant (activity + watch list)
python scripts/evening_brief.py --mode market
# Full news digest variant
python scripts/evening_brief.py --mode news
# Force send regardless of time/already-sent-today
python scripts/evening_brief.py --force
# Dry run (print without sending)
python scripts/evening_brief.py --dry-run
# Enable verbose logging
python scripts/evening_brief.py --debug
News History
Stored at ~/.openclaw/state/evening_news_history.json. Max 200 entries, auto-cleans after 48 hours. Used by Stage 2 materiality gate to prevent duplicate notifications.
Cache File Integration
Each optional skill writes a cache file that the Morning Brief reads automatically:
| Skill | Cache File | Section Unlocked |
|---|---|---|
| Kalshalyst | state/.kalshi_research_cache.json |
Edge opportunities |
| Prediction Market Arbiter | state/.crossplatform_divergences.json |
Cross-platform divergences |
| Xpulse | state/.x_signal_cache.json |
X/Twitter signals |
If a cache file doesn't exist, that section shows "unavailable" with the install command. See references/integration.md for cache file schemas.
Example Complete Morning Brief
MARKET MORNING BRIEF — Thursday, March 7, 2026
PORTFOLIO (3 positions, +$24 unrealized):
POTUS-2028-DEM YES 100@48¢ $48 cost +$18 unrl (exp: 242 days)
UKRAINE-2026-NO YES 50@28¢ $14 cost +$8 unrl (exp: 118 days)
FED-MAR-CUT NO 200@35¢ $70 cost -$2 unrl (exp: 8 days)
EDGES (Kalshalyst, top 3):
1. POTUS-2028-DEM NO @ 38% (+14% edge, 72% conf)
2. INFLATION-2026 YES @ 68% (+8% edge, 65% conf)
3. UKRAINE-PEACE YES @ 55% (+6% edge, 58% conf)
DIVERGENCES (Arbiter):
UKRAINE-2026-NO Kalshi 28% ↔ PM 31% ($0.03 spread)
POTUS-2028-DEM Kalshi 38% ↔ PM 40% ($0.02 spread)
X SIGNALS (last 24h):
Fed rate cut odds +5% (78% conf, 8.2K reach)
Ukraine ceasefire +3% (72% conf, 5.1K reach)
CRYPTO:
BTC $62,400 (+1.2%) | ETH $3,140 (-0.8%)
POLYMARKET (top 3 by vol):
POTUS 2028 DEM: $2.4M vol, 48% prob
Inflation >4% 2026: $1.1M vol, 32% prob
Bitcoin >$100K 2026: $0.8M vol, 58% prob
Scheduling & Commands
Morning Brief (Default: 7:30 AM)
# Manual trigger
python scripts/morning_brief.py
# With debug output
python scripts/morning_brief.py --debug
# Dry run (print without side effects)
python scripts/morning_brief.py --dry-run
# Custom config path
python scripts/morning_brief.py --config /path/to/config.yaml
# Via OpenClaw (if integrated):
openclaw skill run market-morning-brief morning
Cron Scheduling
30 7 * * * python /path/to/scripts/morning_brief.py # Morning at 7:30 AM
0 18 * * * python /path/to/scripts/evening_brief.py --mode market # Evening at 6:00 PM
Dependencies
Required: Python 3.10+, pip install kalshi-python requests pyyaml
For evening news digest: Ollama + Qwen model (ollama pull qwen3:latest), plus pip install ddgs (or duckduckgo-search as fallback).
Optional skills for additional brief sections: Kalshalyst, Prediction Market Arbiter, Xpulse (see Implementation Notes below).
Performance & Cost
Morning Brief
- Runtime: <5 seconds (all cached data)
- API calls: 1 (Polymarket public API) + 1 (Kalshi portfolio) = 2 calls
- Cost: $0 (Kalshi free tier, Polymarket free)
With Optional Skills
If Kalshalyst, Arbiter, Xpulse installed:
- Runtime: <2 seconds (reads cache files)
- Cost: Only the skill installation costs (brief itself has no additional cost)
Troubleshooting
Portfolio not showing: Verify Kalshi API key is configured and not rate-limited. Run python scripts/morning_brief.py --debug.
Sections showing "unavailable": Expected if the skill isn't installed. Install with the clawhub install command shown in the output, then run the skill once to generate its cache file.
Evening news empty: Check Ollama is running (ollama list), test Qwen (ollama run qwen3:latest "test"), and verify ddgs (python -c "from ddgs import DDGS; print('OK')").
Stage 2 drops everything: The materiality gate filters out non-novel news. Clear history with rm ~/.openclaw/state/evening_news_history.json and retry, or disable with --no-materiality-gate.
Qwen timeout: Reduce article count with --max-per-topic 2 or skip Stage 2 with --no-materiality-gate.
Implementation Notes
This skill is designed for standalone operation but unlocks its full potential with the OpenClaw Prediction Market Trading Stack.
Standalone: Portfolio P&L + Polymarket trending + Crypto prices (if configured). No other skills required.
With the full stack: Each additional skill adds a new section to your daily brief automatically — no configuration needed. Install skills, run them once, and the Morning Brief picks up their cache files on the next run.
| Skill | Unlocks | Install |
|---|---|---|
| Kalshalyst | Contrarian edge analysis with Kelly sizing | clawhub install kalshalyst |
| Prediction Market Arbiter | Cross-platform Kalshi↔Polymarket divergences | clawhub install prediction-market-arbiter |
| Xpulse | Real-time X/Twitter social signals | clawhub install xpulse |
| Portfolio Drift Monitor | Position drift alerts between briefs | clawhub install portfolio-drift-monitor |
| Kalshi Command Center | Direct trade execution from edge alerts | clawhub install kalshi-command-center |
Install the complete stack:
clawhub install kalshalyst kalshi-command-center polymarket-command-center prediction-market-arbiter xpulse portfolio-drift-monitor market-morning-brief personality-engine
Further Reading
- See
references/sections.mdfor detailed section documentation - See
references/integration.mdfor technical integration guide - See
references/evening-pipeline.mdfor evening briefing pipeline documentation
Support
For issues: run with DEBUG=1 for verbose output, review references/sections.md and references/integration.md, or check /tmp/market-morning-brief.log.
Author: KingMadeLLC
Feedback & Issues
Found a bug? Have a feature request? Want to share results?
- GitHub Issues: github.com/kingmadellc/openclaw-prediction-stack/issues
- X/Twitter: @KingMadeLLC
Part of the OpenClaw Prediction Stack — the first prediction market skill suite on ClawHub.