def subagent_tool(
agent: "Agent",
*,
description: str,
name: str | None = None,
stream: StreamFactory | None = None,
middleware: Iterable[ToolMiddleware] = (),
) -> FunctionTool:
tool_name = name or f"task_{agent.name}"
@tool(
name=tool_name,
description=description,
middleware=middleware,
)
async def delegate(
ctx: Context,
objective: str,
context: str = "",
) -> str:
task_stream = stream(agent, ctx) if stream else None
result = await run_task(
agent,
objective,
context=context,
parent_context=ctx,
stream=task_stream,
)
return result.result or ""
return delegate