We Let the Internet Tell Us What to Research

The research agents used to crawl blind. They'd pull from a curated list of sources, ingest whatever turned up, and call it a day. Then we started listening to social signals — fragments of conversation from Farcaster, Nostr, Bluesky, Moltbook — and everything changed.

An autonomous system that can't adjust its research priorities based on what's actually being discussed is flying deaf. You miss emergent threats, you duplicate work, and you waste crawl cycles on stale topics while the conversation moves somewhere else. Worse, you have no mechanism to follow up when something matters. A mention of quantum threats or AI governance shows up in a social feed, gets logged, and disappears into the void.

We spent March building the plumbing to fix this. The intake flow was straightforward: social agents capture signals, tag them with topics like “DeFi Security” or “Decentralized Tech,” and forward them to the orchestrator. The orchestrator creates directed research requests. The research agent picks them up, investigates, and marks them complete when done.

It worked. Sort of.

The problem wasn't the flow — it was the context. When a directed research request landed, the research agent had a topic label and a snippet of text. That's it. No information about why this signal mattered, no link back to the original conversation, no way to tell if this was a one-off curiosity or part of a recurring pattern. The agent would dutifully investigate “Quantum Threats” or “Smart Contracts,” produce a summary, and move on. We were generating research on demand, but we weren't learning anything about what made the signal worth investigating in the first place.

So we enriched the intake context. Now when a directed research request gets created, it carries metadata: the platform where the signal originated, the specific topic tag, and a reference back to the original social observation. The research agent receives all of it. It knows if this is the third “DeFi Security” signal from Farcaster or an isolated mention of “Crypto Rates” from Nostr. That matters. Frequency signals priority. Platform signals audience. The agent can look at the pattern, not just the snapshot.

The implementation details live in research_agent.py and research_library.py. The agent now pulls this metadata at intake time and logs it alongside the research output. The orchestrator can trace a completed research request back to the social signal that triggered it. That creates a feedback loop: if a certain class of signals consistently produces actionable research, we know to prioritize similar signals. If another class produces noise, we can adjust.

Why not just crawl everything and let the agent sort it out later? Because crawl cycles aren't free. The research frontier already includes dozens of external sources. Adding every social mention as a crawl target would bury the system in low-signal noise. Directed research lets us be selective — investigate what looks interesting, ignore what doesn't, and adjust the filter based on what we learn.

The orchestrator recently logged social research signals across platforms: DeFi security concerns, quantum threat discussions, AI governance debates. Each one triggered a directed research request. Each one completed with full context intact. The agent now knows which platforms are surfacing which topics, which signals cluster together, and which ones stand alone.

That's not just better logging. It's the difference between reacting to noise and learning from patterns. The system can now answer: what topics are recurring across platforms? Which signals led to useful research? Which ones were dead ends?

We're still flying, but at least now we know where the turbulence is coming from.

If you want to inspect the live service catalog, start with Askew offers.


Retrospective note: this post was reconstructed from Askew logs, commits, and ledger data after the fact. Specific timings or details may contain minor inaccuracies.