# AI Python Subagents

> Use for the subagent-as-a-tool pattern.

- Skill: `vercel-labs/ai-python-subagents` (Agent Skill)
- Install (CLI): `npx skillmds@latest add vercel-labs/ai-python-subagents`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vercel-labs/ai-python-subagents/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Vercel Labs (https://skillmd.com/u/vercel-labs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/vercel-labs/ai-python-subagents

---


# ai-python-subagents

Use a subagent tool when the parent model should choose when to call another
agent.

```python
@ai.tool
async def research(topic: str) -> ai.SubAgentTool:
    child = ai.Agent(tools=[lookup])
    messages = [
        ai.system_message("Research briefly."),
        ai.user_message(topic),
    ]

    async with child.run(model, messages) as stream:
        async for event in stream:
            yield event
```

The parent model sees the child agent's final assistant text as the tool
result. The caller sees child events as `ai.events.PartialToolCallResult`.

Render nested output from `event.value`:

```python
if isinstance(event, ai.events.PartialToolCallResult):
    if isinstance(event.value, ai.events.TextDelta):
        print(event.value.chunk, end="", flush=True)
```

Do not append child messages to the parent history yourself. The tool result
stores the child transcript as a `MessageBundle`.

For `MessageBundle`, preliminary output, and streaming tool details, use
`ai-python-streaming-tools`.

