Most "research agents" fail in two boring ways: they cannot see the gardens where the comments live, and they dump every tool schema into the prompt until the run is unusable.
Reactor is my attempt to treat both as engineering problems, not prompt problems.
https://github.com/OWWZO/ai-agent
The control plane is Java on purpose
I wanted a durable execution ledger, reconnectable HITL (plan approve / ask-user / follow after SSE drop), and isolated sub-agent mailboxes. The interesting part is the runtime around it.
Python still does the heavy tools: search, multimodal RAG, NL2SQL, E2B, docs. React renders a whitelist UI tree. That split is ugly to deploy and easier to reason about than one mega-process.
Plan Mode
Until I click approve, the agent may only research and write a plan. No writes to business databases, no sandbox, no report. This is the feature I actually use. Everything else is optional.
Vague requirements do not get guessed. The agent stops and asks.
Lazy tools
MCP tools are names-only in the system prompt. ToolSearch hydrates a schema on demand. Same idea as not loading every skill into context: SKILL.md files live on disk until needed.
Memory follows the same rule. Facts inject every turn. History is searched. Workflows are files. The chat log is not the memory.
Collectors
One run can include Reddit, X, YouTube, HN, plus Bilibili / Xiaohongshu / V2EX. Private files join the same citation list. This is not a unified "search API". Each source has its own auth (RSS, key, or browser session). Ugly, and the reason it works.