feat: keep the main chat responsive while subagents run

The main session and subagents share the same model backend; when that
backend serializes requests (cloud rate limits or a local server), subagent
streams queue the main chat. Adds two config knobs:

- agent_concurrency (default 3): a semaphore in AgentTree.start caps how many
  subagent sessions stream simultaneously (slot is released on completion,
  timeout, or setup error so failures cannot deadlock the queue).
- subagent_model (optional): routes spawned agents to a different model or
  backend, e.g. ollama/gemma4:e4b, so subagents never contend with the main
  session at all. Wired through the spawn tool, the main-session tools, and
  the per-agent runtime tools.

Documents both in .hypothesis-machine.example.yaml and adds a concurrency-cap
test (43 tests passing, tsc clean).
This commit is contained in:
Emil
2026-07-31 23:25:52 +03:00
parent dd8d29bc8a
commit 5ea92990eb
9 changed files with 67 additions and 32 deletions
+8
View File
@@ -4,6 +4,14 @@ max_active_agents: 32
max_total_agents_per_run: 200
max_iterations_without_progress: 3
max_research_iterations: 12
agent_timeout_seconds: 1800
# Maximum number of subagent sessions streaming at the same time. Lower it if
# the main chat stalls while subagents run on the same model backend.
agent_concurrency: 3
# Route subagents to a different model/backend so they never contend with the
# main session, e.g. "ollama/gemma4:e4b" or "deepseek/deepseek-v4-flash".
# "inherit" (unset) uses the caller's model.
# subagent_model: "ollama/gemma4:e4b"
allow_recursive_spawning: true
searxng_url: http://127.0.0.1:8888
firecrawl_url: http://127.0.0.1:3002