# System Design and Interactions

<figure><img src="https://1276112373-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUW9Ft0WHGsVxMhUtETld%2Fuploads%2FnSO2fKCIuWJf1pVvCmtb%2Fimage.png?alt=media&#x26;token=0ebbef0b-463f-4bac-bd18-4c0a8340ab2f" alt=""><figcaption></figcaption></figure>

1. **Observations** come from the Environment and are pulled into the system.
2. The **Core Agent** (with the help of sub-agents) reasons about the observations, consults data sources, and decides on the next actions. This is the **ReAct** cycle: the agent **reasons** on what it sees and then **acts** by either requesting more data, calling a tool, or providing a partial result.
3. **Supervisors** ensure tasks are delegated properly and handle coordination among sub-agents.
4. The **Character Layer** takes the Core Agent’s output and decides how to present or “characterize” the response. This could involve language style, persona adjustments, or custom formatting.
5. Finally, the **Environment** is updated (via the **push()** method) with the agent’s response or action outcome.

Because the entire system is designed as a modular, **agent-based graph**, it is easy to add new specialized agents, swap out or upgrade existing ones, and scale horizontally to handle more complex tasks or higher volumes of interactions.

### Benefits of This Architecture

* **Scalability**: Multiple supervisors and sub-agents can run in parallel, each focusing on specialized tasks.
* **Modularity**: Agents can be added, removed, or updated with minimal impact on the rest of the system.
* **Flexibility**: The ReAct approach allows agents to adapt to new observations, handle dynamic requests, and reason about complex workflows.
* **Improved Organization**: The agent graph structure helps maintain clarity of responsibilities and data flow.
