The fund already operates a full research pipeline. Understanding this existing system is critical for positioning the geopolitical layer correctly.
WSJ, CNBC, Bloomberg, FT, Yahoo Finance, BBC World, Foreign Affairs, The Diplomat, Federal Reserve, and more. Polled hourly during market hours. Sources audited and graded in Reports/news_source_audit/.
RSS items pass through an LLM filter, then an LLM selector picks the top 15 most relevant items. A newsletter is generated and sent 2 hours before market open. Items stored as content_items in Supabase.
Video transcripts and earnings call transcripts are processed and stored as content_items in Supabase, alongside the daily brief items.
The combined_analyses table in Supabase aggregates daily briefs and transcripts. An LLM combiner produces analysis_text per period_identifier (e.g. week_2025_10). This is the primary research input for portfolio decisions.
Reads get_current_or_last_week_research() and feeds the research_summary to the LLM portfolio builder for trade decisions.
Auto-generated from combined_analyses via a 2-pass LLM pipeline (GPT draft, Claude polish). Published on undervalued.ai.
The geopolitical pipeline adds a new layer on top of the existing research ecosystem. NanoClaw orchestrates autonomous research agents on a local machine, pushes findings to Supabase, where they flow into the existing research and rebalancing pipeline.
NanoClaw runs 24/7 on a Mac Mini (or similar). Its scheduler loop fires every 60 seconds, checking for due tasks. Research agents are scheduled at intervals (e.g. every 6 hours) via the self-continuation pattern: each agent calls schedule_task() to queue its own next invocation. No cron jobs or infinite loops needed.
Scans geopolitical RSS sources and scores each article on relevance (1-10) and urgency (1-10). Score >= 7 triggers a WhatsApp alert via NanoClaw integration. Score >= 8 triggers deep research. Cost: ~$0.01/article.
Spawns 3-6 Opus/GPT-5 agents in container isolation for parallel research: military analysis, economic impact, scenario modeling, market transmission mechanisms. Each agent performs 20-45 web searches. Agents read their CLAUDE.md (per-group memory) for context, then write structured JSON results to IPC_DIR/{id}/results/. Cost: $5-15 per event.
NanoClaw IPC watcher (1-second polling loop) picks up result files from IPC_DIR. Post-processor normalizes the research output and pushes findings to Supabase via a simple INSERT into a geopolitical_findings table (or extends content_items).
Once in Supabase, geopolitical findings flow through the same channels as all other research: the weekly research combiner picks them up from Supabase, or the portfolio rebalancer fetches them directly. The webapp can also display them as a new data source. This is the same pattern as existing RSS items and YouTube transcripts. No new infrastructure needed on the webapp side.
Two paths: fast (WhatsApp alert, ~5 min) and full (complete analysis to Supabase, ~65 min). Geopolitical events typically play out over days to weeks, so 65-minute latency is acceptable. Findings influence the next rebalancing cycle.
The geopolitical layer reuses existing infrastructure extensively. Only the NanoClaw orchestration and research agents are new. Everything downstream already exists.
| Signal | Location | Trigger | Frequency | Cost |
|---|---|---|---|---|
| SEC 8-K | fund/signals/generators/sec8/ | EDGAR polling | Continuous | ~$0.02/filing |
| Technical | fund/signals/generators/technical/ | Scheduled (daily) | Daily close | ~$0.00 (local compute) |
| Institutional 13-F | fund/signals/generators/institutional/ | Quarterly filing | Quarterly | ~$0.05/fund |
| Daily Market Brief | Supabase (content_items) | RSS hourly poll | Daily (pre-market) | ~$0.50/day |
| Weekly Research | Supabase (combined_analyses) | Weekly aggregation | Weekly | ~$2/week |
| YouTube / Transcripts | Supabase (content_items) | New content | As available | ~$0.10/item |
| Geopolitical NEW | Supabase (geopolitical_findings) | NanoClaw scheduler + LLM triage | Event-driven | ~$5-25/event |