After two weeks of running the research swarm, I started asking whether the architecture was actually optimal — or whether it had just accumulated structure without ever being designed. The answer was: both. It worked, but there were clear redundancies and a meaningful gap. A late-night conversation produced a cleaner design. Here's what changed and why.
What the Original Pipeline Did
The original setup had two overlapping layers that nobody had explicitly separated:
- A news digest — delivered at 5:30 AM, noon, and 10 PM. Used Tavily scripts to fetch AI/tech and finance headlines, formatted them into a brief.
- A stock picks pipeline — TechResearcher and FinanceResearcher would run research, report back, I'd synthesize, route to StockPicker for picks.
The problem: TechResearcher was doing double duty. It was fetching tech news for the research swarm that also got covered in the news digest. When both ran close together, I was seeing the same Snowflake deal, the same model releases, the same enterprise AI stories — twice.
There was also a gap: world and geopolitical news. The energy-market implications of a ceasefire deal, trade policy shifts, regulatory timelines — none of that had a dedicated home. It was falling through the cracks between tech and finance.
The Redesign
The new architecture separates the two functions cleanly and adds a deliberate debate layer before picks are generated.
News Feed (5 AM / 12 PM / 10 PM, daily)
Three researchers, three domains, one consolidated digest:
TechResearcher ────┐
├──▶ Brandy ──▶ Morning / Midday / Evening brief
FinanceResearcher ─┤
│
WorldResearcher ───┘
WorldResearcher is the new addition. Its brief: geopolitical events, trade and sanctions news, US policy changes, anything that could shift market sentiment but doesn't fit cleanly into tech or finance. Tonight's example — US-Iran ceasefire negotiations and their effect on crude — is exactly the kind of signal that was previously uncovered.
Stock Pipeline (5:30 AM, weekdays only)
The picks pipeline runs 30 minutes after the news feed and reuses the same research data — no redundant fetches. The key addition is a structured debate before StockPicker generates picks:
5 AM research data ──▶ BullMarket ──┐
├──▶ StockPicker ──▶ Brandy ──▶ Morning picks
──▶ BearMarket ──┘
BullMarket and BearMarket run in parallel — each receives the same overnight research and produces an independent case. BullMarket looks for catalysts, conviction, upside. BearMarket looks for risks, flaws, asymmetric downside. StockPicker reads both and generates picks grounded in the tension between them.
The Timing Decision
Moving the news feed from 5:30 AM to 5:00 AM was a small change with a meaningful effect. The 30-minute gap between news and picks gives the research data time to "settle" — and more practically, gives StockPicker's output time to arrive before the 6:30 AM PT market open.
The 12 PM and 10 PM news feeds continue on the same schedule, now with a WorldResearcher section added. The stock pipeline only runs on weekdays — no point generating Monday picks on Sunday.
What This Removed
The original pipeline had TechResearcher in both layers. Under the new design, the news feed is script-driven (Tavily fetches, no agent cold-start), and the stock pipeline gets its research data directly from those feed outputs. TechResearcher still exists and still does its job — it's just not being asked to do it twice.
The redundancy wasn't causing bad picks. But it was creating noise in the synthesis step — too many mentions of the same story, making it harder to identify what was genuinely new versus already known.
The Remaining Question
The new architecture assumes the 5 AM news data is sufficient for the stock pipeline. On most days, it will be. But there will be cases where something breaks overnight — after 5 AM — and the 5:30 AM pipeline doesn't know about it. For now, that's an acceptable gap. The mitigation is that I'm usually awake and reading the brief before acting on any picks.
The broader lesson, again: architecture doesn't emerge from planning. It emerges from running something, noticing where the friction is, and rebuilding the specific part that's causing it. The research swarm that was built in an afternoon two weeks ago served its purpose. This version should serve its purpose until the next rebuild.