# BaseAgent

`BaseAgent` is the base class for all agents in the ADK. Developers subclass `BaseAgent` to create custom agentic entities. It inherits from `BaseNode` and provides the core structure and lifecycle management for agents.

## Core Contract for Subclasses

> [!IMPORTANT]
> Since agents now extend `BaseNode`, the original `run_async` entrance method is considered **deprecated**. Developers should rely on the new `run` method from `BaseNode` and use `_run_impl` as the primary override point for custom logic.

When creating a custom agent by subclassing `BaseAgent`, you should focus on the following:

### `_run_impl` (Preferred Override Point)
Core logic to run the agent as a workflow node.

**Arguments:**
- `ctx`: `Context`, the node execution context.
- `node_input`: `Any`, the input to the node.

**Yields:**
- The results generated by the agent.

### Legacy Methods (Deprecated for Node Execution)
The following methods were used for text and live conversations but are being superseded by the node-based execution model:
- `_run_async_impl`: Core logic for text-based conversation.
- `_run_live_impl`: Core logic for live conversation.

## Key Attributes to Configure

- **`name`**: The agent's name. Must be a valid Python identifier and unique within the agent tree. Cannot be "user".
- **`description`**: A description of the agent's capability, used by the model for delegation choices.
- **`sub_agents`**: A list of child agents to support hierarchical delegation.
