Research a question with subagents and publish a report¶
Build an agent that splits a question into independent parts, hands each part to its own specialist, and writes a report from what comes back. The fixture is a comparison of three open-source licences: a stable, public topic where every claim can be checked against the licence text itself. This is a procedure to run, with one recorded run as a reference.
What you need¶
- A running installation with a model profile.
- Web search: the default method is DuckDuckGo and needs no account or key.
- No sandbox, no knowledge collection and no MCP connection.
Prepare the input¶
The question splits into three independent sub-questions, one per licence. Ask:
Compare the MIT licence, the Apache License 2.0 and the GPLv3 on one question:
when you distribute software that includes code under that licence, what are
you obligated to do - include the licence text, state changes you made, or
disclose or release your own source code?
The reference answer, so you can check the agent's report by hand:
| Licence | Include licence text | State changes | Release your source |
|---|---|---|---|
| MIT | Yes | No | No |
| Apache-2.0 | Yes, plus the NOTICE file |
Yes, per file | No |
| GPLv3 | Yes | Yes, per file | Yes, for the whole combined work, on distribution |
GPLv3's source obligation is triggered by distribution, not by modification: an organization that only runs a modified copy internally owes nobody a release.
Build the agent¶
- Create an agent in Agents → New agent and select your model profile.
- In Toolbox, enable Delegation. Turn on
allow_dynamic- the setting that lets the model invent a one-off specialist for a sub-question nobody pre-wrote a specialist for. Set the mode to Async, so the three sub-questions run at once instead of one after another, and leave the fan-out ceiling at 3. - Still on Delegation, toggle Share Web search with delegates and Share Web fetch with delegates. A specialist the model invents gets no capabilities of its own by design - only what the parent explicitly shares reaches it, so without this step every invented specialist could delegate but could not search.
- Enable Web search (method DuckDuckGo) and Web fetch on the parent itself - sharing only reaches a delegate what the parent is bound to.
- Enable Planning and Artifacts.
- Set a budget and a step limit for the trial. The recorded run used 40 steps and cost about 0.43 USD.
- Set the instructions below, then Publish.
You research a question that splits into independent sub-questions.
Write a plan naming each sub-question as its own step.
For each sub-question, call delegate to create a one-off specialist with
mode="async": give it a narrow instruction (research exactly this one
sub-question, using web search and web fetch, and answer with a short sourced
summary), a clear name, and no capabilities argument.
After firing all the sub-questions, call wait_tasks for all of them before
writing anything.
Every claim in your final report must carry the source URL it came from.
State plainly where the sources disagree or where you could not find an answer.
Publish the finished report with publish_artifact under the name
licence-comparison.
Do not answer from your own training knowledge without a source URL next to it.
Run it¶
Open a new chat with the agent and send the question from Prepare the input.
The model calls delegate three times, once per licence - each one is its own
delegation, not a single call doing all three. Delegate is side-effecting,
so all three park for approval together, as one model step can park several
calls at once. Read the three proposed specialists, then Approve. The run
resumes, fires the three specialists in the background and calls wait_tasks
to collect them before it writes the report.
Check the result¶
| Check | Reference |
|---|---|
| Number of delegations | Three, one per licence, each its own row in Activity under the parent run |
| MIT obligation | Include the licence text and copyright notice; nothing else |
| Apache-2.0 obligation | Licence text, NOTICE file, and a per-file changed notice |
| GPLv3 obligation | Licence text, per-file changes, and the complete source on distribution |
| Every claim | Carries a source URL next to it, not collected in one list at the end |
| Disagreement or gap | The report says so explicitly, or states there was none |
| Artifact | Artifacts lists licence-comparison, private to you |
| A two-part question with only one real source (e.g. asking about a licence that does not exist) | The report says it could not confirm that part, rather than inventing an answer |
Recorded on v0.0.504, 25 September 2026
Model: Claude Sonnet 4.6 through OpenRouter. The agent wrote a four-step
plan, then called delegate three times in one turn - mit-licence-research,
apache2-licence-research, gplv3-licence-research - all async. All three
parked for approval in one step; after approval the run called wait_tasks
and got 3/3 finished. The report matched the reference table exactly, cited
the OSI, Apache.org, GNU.org and FSF FAQ pages, and closed with "No source
disagreements found" naming the sources that agreed. It published
licence-comparison as an HTML artifact. Total cost: 0.43 USD, all three
delegations included - no separate agent_runs row exists for a dynamic
specialist, since it is not a published agent.
When it goes wrong¶
- A delegation is refused outright, not parked. Delegation is off, or
allow_dynamicis off and the model trieddelegateorcreate_agentanyway - onlytaskis offered to a delegation with neither. - A specialist reports it has no search tool.
share_with_delegateswas not set, or it names a capability the parent itself is not bound to - publishing refuses the second case, so this is usually the first. - The three sub-questions run one after another, not together. The mode is
sync, or the model chosemode="sync"on its owndelegatecalls despite the instructions. - Only one delegation appears, covering everything. The model treated the three-part question as one task instead of splitting it - tighten the instructions to name delegating each part separately, not just researching it.
- The run stops with "reached the fan-out ceiling." More than
max_fanoutdelegations were fired in one turn; three sub-questions fit the default of 3, but a fourth would not.
Record the trial¶
Keep the question, the plan the agent wrote, each delegation's name and result, the sources cited, the artifact and its version, and the cost from Activity. A person still reads the artifact against the reference facts before trusting it, decides who may read it, and judges whether the "could not confirm" section is honest or is hiding a search that should have been tried again.
Next steps¶
Once this works on a topic with a known answer, point it at a question with no fixed reference and rely on the "state where sources disagree" instruction instead of a table you already know. To keep the report current, continue with schedule a weekly report.