When you launch a subagent without setting run_in_background, it runs in foreground mode. The parent agent pauses and waits for it to finish before continuing. Use this when the next step depends on the result.
When you set run_in_background: true, the agent starts immediately and returns a task_id without blocking. The parent can continue doing other work, or launch more background agents, while this one runs.
I'll put it plainly: foreground is simpler to reason about, while background is faster when you have independent tasks. If you launch background agents at once and each takes minutes, you wait minutes total instead of .