# yadeesht/personal-assistant-agent architecture

> Architecture diagram of the GitHub repository yadeesht/personal-assistant-agent, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yadeesht/personal-assistant-agent
- Repository: https://github.com/yadeesht/personal-assistant-agent

## Overview

This is a terminal-driven, stateful multi-agent assistant for Google Workspace automation, with sandboxed code execution and long-term memory. The main workflow is user input → LangGraph routing → a specialized agent → its tools and external service → a response. Memory update and summarization are separate graph branches. The README documents agent routing and Workspace capabilities; sampled sources confirm the terminal invocation, LLM wrapper, RAG tool behavior, and selected integrations. Unsampled graph and tool wiring follows the README only.

Main entry points: [`core/graph.py`](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py) (Supervisor), [`core/llm.py`](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/llm.py) (LLM client), [`core/codeagent.py`](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/codeagent.py) (Code agent), [`app_tools/tools/rag_tools.py`](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/rag_tools.py) (Memory tools)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Terminal entry"]
  node_terminal["Terminal loop<br/>[main.py]"]
end

subgraph group_orchestration["Agent orchestration"]
  node_graph["LangGraph<br/>[graph.py]"]
  node_router["Supervisor<br/>[graph.py]"]
  node_communication["Communication agent<br/>[graph.py]"]
  node_planning["Planning agent<br/>[graph.py]"]
  node_documents["Document agent<br/>[graph.py]"]
  node_data["Data agent<br/>[graph.py]"]
  node_presentation["Presentation agent<br/>[graph.py]"]
  node_code["Code agent<br/>[codeagent.py]"]
  node_summarizer["Conversation summarizer<br/>[graph.py]"]
  node_memory_update["Memory update<br/>[graph.py]"]
end

subgraph group_workspace["Workspace tools"]
  node_communication_tools["Communication tools<br/>[gmail_tools.py]"]
  node_planning_tools["Planning tools<br/>[calendar_tools.py]"]
  node_document_tools["Document tools<br/>[gdrive_tools.py]"]
  node_data_tools["Data tools<br/>[gsheet_tools.py]"]
  node_presentation_tools["Presentation tools<br/>[gslide_tools.py]"]
  node_search_tools["Search tools<br/>[gsearch_tools.py]"]
end

subgraph group_memory["Memory and retrieval"]
  node_rag_tools["Memory tools<br/>[rag_tools.py]"]
  node_episodic[("Episodic RAG<br/>[episodic_rag.py]")]
  node_knowledge_graph[("Knowledge graph<br/>[knowledge_graph.py]")]
end

subgraph group_execution["Execution and models"]
  node_llm["LLM client<br/>[llm.py]"]
  node_sandbox["Code sandbox<br/>[sandbox_server.py]"]
end

node_user(("User"))
node_workspace_api{{"Google Workspace"}}
node_search_api{{"Google search"}}
node_model_service{{"Azure model service"}}

node_user -->|"enters request"| node_terminal
node_terminal -->|"invokes graph"| node_graph
node_graph -->|"routes state"| node_router
node_router -->|"dispatches"| node_communication
node_router -->|"dispatches"| node_planning
node_router -->|"dispatches"| node_documents
node_router -->|"dispatches"| node_data
node_router -->|"dispatches"| node_presentation
node_router -->|"dispatches"| node_code
node_communication -->|"calls tools"| node_communication_tools
node_planning -->|"calls tools"| node_planning_tools
node_documents -->|"calls tools"| node_document_tools
node_data -->|"calls tools"| node_data_tools
node_presentation -->|"calls tools"| node_presentation_tools
node_router -->|"calls tools"| node_search_tools
node_communication_tools -->|"uses API"| node_workspace_api
node_planning_tools -->|"uses API"| node_workspace_api
node_document_tools -->|"uses API"| node_workspace_api
node_data_tools -->|"uses API"| node_workspace_api
node_presentation_tools -->|"uses API"| node_workspace_api
node_search_tools -->|"queries"| node_search_api
node_code -->|"executes code"| node_sandbox
node_communication -->|"requests completion"| node_llm
node_planning -->|"requests completion"| node_llm
node_documents -->|"requests completion"| node_llm
node_data -->|"requests completion"| node_llm
node_presentation -->|"requests completion"| node_llm
node_code -->|"requests completion"| node_llm
node_llm -->|"sends prompt"| node_model_service
node_graph -->|"dispatches"| node_summarizer
node_graph -->|"dispatches"| node_memory_update
node_memory_update -->|"updates memory"| node_rag_tools
node_rag_tools -->|"retrieves and stores"| node_episodic
node_rag_tools -->|"searches and updates"| node_knowledge_graph

click node_terminal "https://github.com/yadeesht/personal-assistant-agent/blob/main/main.py"
click node_graph "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_router "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_communication "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_planning "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_documents "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_data "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_presentation "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_code "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/codeagent.py"
click node_summarizer "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_memory_update "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py"
click node_llm "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/llm.py"
click node_communication_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gmail_tools.py"
click node_planning_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/calendar_tools.py"
click node_document_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gdrive_tools.py"
click node_data_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gsheet_tools.py"
click node_presentation_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gslide_tools.py"
click node_search_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gsearch_tools.py"
click node_rag_tools "https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/rag_tools.py"
click node_episodic "https://github.com/yadeesht/personal-assistant-agent/blob/main/rag/episodic_rag.py"
click node_knowledge_graph "https://github.com/yadeesht/personal-assistant-agent/blob/main/rag/knowledge_graph.py"
click node_sandbox "https://github.com/yadeesht/personal-assistant-agent/blob/main/core/sandbox_server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_terminal,node_user toneBlue
class node_graph,node_router,node_communication,node_planning,node_documents,node_data,node_presentation,node_code,node_summarizer,node_memory_update toneAmber
class node_communication_tools,node_planning_tools,node_document_tools,node_data_tools,node_presentation_tools,node_search_tools toneMint
class node_rag_tools,node_episodic,node_knowledge_graph toneRose
class node_llm,node_sandbox,node_workspace_api,node_search_api,node_model_service toneIndigo
```

## Components

### Terminal entry

- [Terminal loop](https://github.com/yadeesht/personal-assistant-agent/blob/main/main.py): `main.py`

### Agent orchestration

- [LangGraph](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Supervisor](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Communication agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Planning agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Document agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Data agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Presentation agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Code agent](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/codeagent.py): `core/codeagent.py`
- [Conversation summarizer](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`
- [Memory update](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/graph.py): `core/graph.py`

### Workspace tools

- [Communication tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gmail_tools.py): `app_tools/tools/google/gmail_tools.py`
- [Planning tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/calendar_tools.py): `app_tools/tools/google/calendar_tools.py`
- [Document tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gdrive_tools.py): `app_tools/tools/google/gdrive_tools.py`
- [Data tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gsheet_tools.py): `app_tools/tools/google/gsheet_tools.py`
- [Presentation tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gslide_tools.py): `app_tools/tools/google/gslide_tools.py`
- [Search tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/google/gsearch_tools.py): `app_tools/tools/google/gsearch_tools.py`

### Memory and retrieval

- [Memory tools](https://github.com/yadeesht/personal-assistant-agent/blob/main/app_tools/tools/rag_tools.py): `app_tools/tools/rag_tools.py`
- [Episodic RAG](https://github.com/yadeesht/personal-assistant-agent/blob/main/rag/episodic_rag.py): `rag/episodic_rag.py`
- [Knowledge graph](https://github.com/yadeesht/personal-assistant-agent/blob/main/rag/knowledge_graph.py): `rag/knowledge_graph.py`

### Execution and models

- [LLM client](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/llm.py): `core/llm.py`
- [Code sandbox](https://github.com/yadeesht/personal-assistant-agent/blob/main/core/sandbox_server.py): `core/sandbox_server.py`

### Other components

- **User**
- **Google Workspace**
- **Google search**
- **Azure model service**

## Connections

- User → Terminal loop: enters request
- Terminal loop → LangGraph: invokes graph
- LangGraph → Supervisor: routes state
- Supervisor → Communication agent: dispatches
- Supervisor → Planning agent: dispatches
- Supervisor → Document agent: dispatches
- Supervisor → Data agent: dispatches
- Supervisor → Presentation agent: dispatches
- Supervisor → Code agent: dispatches
- Communication agent → Communication tools: calls tools
- Planning agent → Planning tools: calls tools
- Document agent → Document tools: calls tools
- Data agent → Data tools: calls tools
- Presentation agent → Presentation tools: calls tools
- Supervisor → Search tools: calls tools
- Communication tools → Google Workspace: uses API
- Planning tools → Google Workspace: uses API
- Document tools → Google Workspace: uses API
- Data tools → Google Workspace: uses API
- Presentation tools → Google Workspace: uses API
- Search tools → Google search: queries
- Code agent → Code sandbox: executes code
- Communication agent → LLM client: requests completion
- Planning agent → LLM client: requests completion
- Document agent → LLM client: requests completion
- Data agent → LLM client: requests completion
- Presentation agent → LLM client: requests completion
- Code agent → LLM client: requests completion
- LLM client → Azure model service: sends prompt
- LangGraph → Conversation summarizer: dispatches
- LangGraph → Memory update: dispatches
- Memory update → Memory tools: updates memory
- Memory tools → Episodic RAG: retrieves and stores
- Memory tools → Knowledge graph: searches and updates
