$npx -y skills add kansoku-trade/kansoku --skill trump-truth-monitorUse when monitoring or interpreting Donald Trump's Truth Social posts for market-moving events — tariff announcements, sanctions, deals with countries (China / Mexico / Canada / EU / Japan / Korea / Taiwan), specific company / CEO mentions, Fed pressure, energy / oil commentary,
| 1 | # Trump Truth Monitor |
| 2 | |
| 3 | Pulls Donald Trump's Truth Social feed via the trumpstruth.org RSS mirror, classifies posts into market-relevant topic buckets, and hands the candidate list off for LLM-level market-impact grading. |
| 4 | |
| 5 | ## When to use |
| 6 | |
| 7 | - User asks what Trump has posted recently |
| 8 | - Pre-market gap on policy-sensitive sectors (semis, China ADRs, autos, energy, banks, defense) — check whether a Trump post is the trigger |
| 9 | - Building the "Catalyst (now)" lens of `stock-deep-dive` for a name with policy exposure (TSM, NVDA, AAPL, F, GM, XOM, BAC, RTX, LMT) |
| 10 | - `market-session-tracker` pre-market protocol — add a Trump-feed pass |
| 11 | |
| 12 | If the user wants tweet **history beyond ~5 days**, this skill is insufficient — the RSS mirror only exposes the latest ~100 posts. Route to Factba.se / Roll Call (paid) or note the limitation explicitly. |
| 13 | |
| 14 | ## Data source |
| 15 | |
| 16 | **trumpstruth.org/feed** — a public third-party mirror of @realDonaldTrump on Truth Social. RSS 2.0 XML with these fields per item: |
| 17 | |
| 18 | | Field | Meaning | |
| 19 | | --------------------- | -------------------------------------------------------------------- | |
| 20 | | `<pubDate>` | RFC 2822, original Truth Social post timestamp | |
| 21 | | `<link>` | trumpstruth.org/statuses/{mirror_id} | |
| 22 | | `<truth:originalUrl>` | truthsocial.com/@realDonaldTrump/{truth_id} — **the primary source** | |
| 23 | | `<description>` | Full post body with HTML (links + ellipsis spans) | |
| 24 | |
| 25 | The mirror typically lags the original by ≤2 minutes. Single feed pull returns ~100 most recent posts, covering ~5 days at Trump's typical cadence. |
| 26 | |
| 27 | ## CLI |
| 28 | |
| 29 | ### Read mode — `fetch.py` |
| 30 | |
| 31 | ```bash |
| 32 | # Default: last 24h, keyword-filtered, markdown |
| 33 | python3 .claude/skills/trump-truth-monitor/scripts/fetch.py |
| 34 | |
| 35 | # Wider window |
| 36 | python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --hours 72 |
| 37 | |
| 38 | # All posts in feed regardless of keyword |
| 39 | python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --hours 72 --all |
| 40 | |
| 41 | # Single topic |
| 42 | python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --topic tariff_trade |
| 43 | |
| 44 | # JSON output (for chaining) |
| 45 | python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --json |
| 46 | ``` |
| 47 | |
| 48 | Topic buckets defined in script: `tariff_trade`, `semi_tech`, `energy`, `fed_macro`, `crypto`, `geopolitical`. |
| 49 | |
| 50 | ### Archive mode — `archive.py` |
| 51 | |
| 52 | ```bash |
| 53 | # Append new posts to journal/trump-feed/YYYY-MM-DD.md (idempotent) |
| 54 | python3 .claude/skills/trump-truth-monitor/scripts/archive.py |
| 55 | |
| 56 | # Custom output dir |
| 57 | python3 .claude/skills/trump-truth-monitor/scripts/archive.py --out /path/to/dir |
| 58 | |
| 59 | # Silent unless something new was added |
| 60 | python3 .claude/skills/trump-truth-monitor/scripts/archive.py --quiet |
| 61 | ``` |
| 62 | |
| 63 | The archive de-dupes by mirror status_id — re-running on the same feed is a no-op. Designed to be scheduled (see `launchd/README.md`). Once archived, posts persist locally even if trumpstruth.org goes down. |
| 64 | |
| 65 | ## Workflow |
| 66 | |
| 67 | 1. **Decide window**. Default 24h. Use 48–72h when investigating a multi-day move. Use `--all` when context-grazing. |
| 68 | 2. **Decide scope**. If user asks generally → no `--topic`. If user names a domain (关税 / 半导体 / 油 / 加密) → pass `--topic`. |
| 69 | 3. **Pull feed**. Run `fetch.py` with chosen flags. **Always include `--hours`** — never default to "all of feed" silently. |
| 70 | 4. **Second-pass grading**. Script output is _candidates_, not signals. For each post: |
| 71 | - **Read the full text** before assigning impact. Headlines and keyword tags lie. |
| 72 | - Assign a **market-impact tier**: `high` / `med` / `low` / `noise` |
| 73 | - **high** = concrete action with $ figure, %, date, named country/company (e.g. "25% tariff on Mexican imports effective June 1", "Section 232 on chips") |
| 74 | - **med** = directional signal without specifics (e.g. "We'll be tough on China", "must invest in America") |
| 75 | - **low** = brand alignment with sector (e.g. "American Energy DOMINANCE", "Crypto Capital of the World" — already-priced policy stance) |
| 76 | - **noise** = keyword matched but body is endorsement / personal / off-topic (e.g. "support the Military" in a Senate endorsement) |
| 77 | 5. **Anchor on original URL**. When quoting, always cite `truth:originalUrl` (the truthsocial.com link), not the mirror. |
| 78 | 6. **Render output**. For multi-post stretches, group by tier — high first, then med, then |