Trump Truth Monitor
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.
When to use
- User asks what Trump has posted recently
- Pre-market gap on policy-sensitive sectors (semis, China ADRs, autos, energy, banks, defense) — check whether a Trump post is the trigger
- Building the "Catalyst (now)" lens of
stock-deep-divefor a name with policy exposure (TSM, NVDA, AAPL, F, GM, XOM, BAC, RTX, LMT) market-session-trackerpre-market protocol — add a Trump-feed pass
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.
Data source
trumpstruth.org/feed — a public third-party mirror of @realDonaldTrump on Truth Social. RSS 2.0 XML with these fields per item:
| Field | Meaning |
|---|---|
<pubDate> | RFC 2822, original Truth Social post timestamp |
<link> | trumpstruth.org/statuses/{mirror_id} |
<truth:originalUrl> | truthsocial.com/@realDonaldTrump/{truth_id} — the primary source |
<description> | Full post body with HTML (links + ellipsis spans) |
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.
CLI
Read mode — fetch.py
bash# Default: last 24h, keyword-filtered, markdown python3 .claude/skills/trump-truth-monitor/scripts/fetch.py # Wider window python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --hours 72 # All posts in feed regardless of keyword python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --hours 72 --all # Single topic python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --topic tariff_trade # JSON output (for chaining) python3 .claude/skills/trump-truth-monitor/scripts/fetch.py --json
Topic buckets defined in script: tariff_trade, semi_tech, energy, fed_macro, crypto, geopolitical.
Archive mode — archive.py
bash# Append new posts to journal/trump-feed/YYYY-MM-DD.md (idempotent) python3 .claude/skills/trump-truth-monitor/scripts/archive.py # Custom output dir python3 .claude/skills/trump-truth-monitor/scripts/archive.py --out /path/to/dir # Silent unless something new was added python3 .claude/skills/trump-truth-monitor/scripts/archive.py --quiet
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.
Workflow
- Decide window. Default 24h. Use 48–72h when investigating a multi-day move. Use
--allwhen context-grazing. - Decide scope. If user asks generally → no
--topic. If user names a domain (关税 / 半导体 / 油 / 加密) → pass--topic. - Pull feed. Run
fetch.pywith chosen flags. Always include--hours— never default to "all of feed" silently. - Second-pass grading. Script output is candidates, not signals. For each post:
- Read the full text before assigning impact. Headlines and keyword tags lie.
- Assign a market-impact tier:
high/med/low/noise - high = concrete action with $ figure, %, date, named country/company (e.g. "25% tariff on Mexican imports effective June 1", "Section 232 on chips")
- med = directional signal without specifics (e.g. "We'll be tough on China", "must invest in America")
- low = brand alignment with sector (e.g. "American Energy DOMINANCE", "Crypto Capital of the World" — already-priced policy stance)
- noise = keyword matched but body is endorsement / personal / off-topic (e.g. "support the Military" in a Senate endorsement)
- Anchor on original URL. When quoting, always cite
truth:originalUrl(the truthsocial.com link), not the mirror. - Render output. For multi-post stretches, group by tier — high first, then med, then a one-line low/noise tally.
Output template
# Trump's Truth — {WINDOW} ## High-impact (potential market mover) - [{utc_time}] {one-line summary} — `tier: high` · {topic tags} > "{verbatim short quote ≤2 sentences}" - Original: {truthsocial.com URL} - Possible market read: {sector / ticker level expectation, anchored} ## Medium-impact (directional, no specifics) - [{utc_time}] {one-line summary} - Original: {URL} ## Noise (matched keyword, low signal) - {N} posts ({topic distribution}) — endorsements / personal — not enumerated ⚠ Trump may delete or contradict within hours. Position decisions should require independent confirmation (sector ETF tape, peer reaction, official release).
Anti-patterns
| Mistake | Reality |
|---|---|
| Treating script output as "market signal" | Script is a keyword filter. LLM must read each post and tier. |
| Quoting a mirror URL as the source | Always link truth:originalUrl (truthsocial.com). Mirror is a convenience. |
| Reporting Senate endorsements as "policy news" | Politics-only posts with military / energy keywords are noise — filter at tier=noise. |
| "Trump said X about Y" with no link | Always include the truthsocial.com link. User must be able to verify. |
| Pretending tweets are durable | Trump posts can be deleted or retracted within hours. If consulted >12h after, note staleness. |
Integration
market-session-trackerpre-market protocol: insert a Trump-feed--hours 14pull as step 0 (covers post-prev-close to pre-market). Ifhigh-tier post exists touching watchlist sectors, escalate to the explanation slot for any gap.stock-deep-divelens 4 (Catalysts): when the symbol has policy exposure (semis / China ADR / auto / energy / defense / bank), run a Trump-feed--hours 168and surfacehigh-tier hits.gdeltcan confirm market has already picked the post up (i.e. major outlets are reporting it). Trump feed = original; GDELT = market-validated.
Limitations
- Mirror dependency: trumpstruth.org is third-party. If it goes down, the live
fetch.pyfails — but the archived posts underjournal/trump-feed/remain readable. - 5-day depth via mirror: a single feed pull only exposes the last ~100 posts. Anything older than ~5 days that wasn't archived in time is lost. Schedule
archive.py(seelaunchd/) to grow a permanent local record. - No X feed: Trump's X (Twitter) account is separate. This skill does not cover X posts. If user asks about X specifically, note the gap.
- Truth posts are not press releases. Treat as primary-but-volatile speech: original URL is authoritative for what was said, but the policy implementation may diverge (or never happen).
Local archive — searching past posts
Once archive.py has been running, journal/trump-feed/YYYY-MM-DD.md accumulates a complete record. To investigate a past day or query historically:
bash# All tariff-related posts ever archived grep -l "tariff" journal/trump-feed/*.md # Specific company mention grep -B2 -A8 -i "nvidia\|tsmc" journal/trump-feed/*.md # Posts on a specific date cat journal/trump-feed/2026-05-26.md
The archive is plain markdown — grep-friendly, git-trackable.
Related skills
gdelt— market-validated news coverage of a Trump poststock-deep-dive— caller for catalyst-lens enrichmentmarket-session-tracker— caller for pre-market protocolsec-edgar— confirm whether a tweet translates into an actual filing (rare but does happen for trade-policy items affecting specific companies)


