# uniclawai/uniclaw architecture

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

- Interactive diagram: https://gitdiagram.com/uniclawai/uniclaw
- Repository: https://github.com/uniclawai/uniclaw
- Video tour (about a minute): https://gitdiagram.com/uniclawai/uniclaw/video

## Overview

UniClaw is an asynchronous, tool-using LLM assistant with console, browser, and WeChat entry points. The main workflow is user input → agent reasoning and provider selection → tool execution → streamed or final response, with sessions and context supporting continuity. The README documents additional capabilities such as search, memory, RAG, knowledge graphs, scheduling, and integrations; these are represented by their tree paths, but their internal wiring is not fully evidenced by the sampled source. Edges therefore emphasize documented entry points and avoid asserting unsampled calls.

Main entry points: [`src/uniclaw/tools/registry.py`](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/registry.py) (Tool registry), [`src/uniclaw/agent/multi_agent.py`](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/agent/multi_agent.py) (Agent runtime), [`src/uniclaw/main.py`](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/main.py) (Mode selection), [`src/uniclaw/webui/app.py`](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/webui/app.py) (Web UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_main["Mode selection<br/>[main.py]"]
  node_console["Console UI<br/>[run.py]"]
  node_webui["Web UI<br/>[app.py]"]
  node_wechat["WeChat bot<br/>[manager.py]"]
end

subgraph group_agent["Agent runtime"]
  node_agentloop["Agent runtime<br/>[multi_agent.py]"]
  node_registry["Tool registry<br/>[registry.py]"]
  node_providers["Provider router<br/>[router.py]"]
  node_config["Configuration<br/>[config.py]"]
end

subgraph group_tools["Tools and tasks"]
  node_search["Search tools<br/>[tools.py]"]
  node_fs_shell["Files and shell<br/>[fs.py]"]
  node_computer["Computer control<br/>[tools.py]"]
  node_tasks["Tasks and plans<br/>[tools.py]"]
  node_scheduler["Scheduler<br/>[scheduler.py]"]
  node_downloads["Download managers<br/>[manager.py]"]
  node_plugins["Plugins and hooks<br/>[loader.py]"]
end

subgraph group_state["Context and state"]
  node_sessions["Session manager<br/>[session_manager.py]"]
  node_context["Context management<br/>[context.py]"]
  node_memory[("Persistent memory<br/>[memory.py]")]
  node_knowledge[("Knowledge graph<br/>[graph.py]")]
  node_rag["RAG retrieval<br/>[rag.py]"]
end

subgraph group_integrations["External integrations"]
  node_mcp["MCP integration<br/>[tools.py]"]
  node_a2a["A2A integration<br/>[tools.py]"]
end

node_user(("User"))
node_llm{{"LLM providers"}}
node_docker{{"Docker"}}
node_sessionstore[("Session files")]

node_user -->|"starts"| node_main
node_main -->|"launches console"| node_console
node_main -->|"launches WebUI"| node_webui
node_console -->|"submits input"| node_agentloop
node_webui -->|"submits input"| node_agentloop
node_wechat -->|"provides interaction"| node_agentloop
node_agentloop -->|"requests completion"| node_providers
node_providers -->|"sends requests"| node_llm
node_agentloop -->|"discovers tools"| node_registry
node_registry -->|"exposes tools"| node_search
node_registry -->|"exposes tools"| node_fs_shell
node_registry -->|"exposes tools"| node_computer
node_registry -->|"exposes tools"| node_tasks
node_registry -->|"exposes tools"| node_scheduler
node_registry -->|"exposes tools"| node_downloads
node_registry -->|"loads extensions"| node_plugins
node_registry -->|"exposes tools"| node_mcp
node_registry -->|"exposes tools"| node_a2a
node_agentloop -->|"persists conversation"| node_sessions
node_sessions -->|"reads and writes"| node_sessionstore
node_agentloop -->|"manages context"| node_context
node_registry -->|"exposes tools"| node_memory
node_registry -->|"exposes tools"| node_knowledge
node_registry -->|"exposes tools"| node_rag
node_agentloop -->|"uses settings"| node_config
node_webui -->|"manages bots"| node_wechat
node_mcp -.->|"optional service access"| node_llm

click node_main "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/main.py"
click node_console "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/console/run.py"
click node_webui "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/webui/app.py"
click node_wechat "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/ilink_bot/manager.py"
click node_agentloop "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/agent/multi_agent.py"
click node_registry "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/registry.py"
click node_providers "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/provider/router.py"
click node_config "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/config.py"
click node_sessions "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/session/session_manager.py"
click node_context "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/context.py"
click node_memory "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/memory/memory.py"
click node_knowledge "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/knowledge/graph.py"
click node_rag "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/rag/rag.py"
click node_search "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/search/tools.py"
click node_fs_shell "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/fs.py"
click node_computer "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/computer_use/tools.py"
click node_tasks "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/todolist/tools.py"
click node_scheduler "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/scheduler/scheduler.py"
click node_downloads "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/download/manager.py"
click node_plugins "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/plugins/loader.py"
click node_mcp "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/mcp/tools.py"
click node_a2a "https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/a2a/tools.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_main,node_console,node_webui,node_wechat,node_user toneBlue
class node_agentloop,node_registry,node_providers,node_config,node_sessionstore toneAmber
class node_search,node_fs_shell,node_computer,node_tasks,node_scheduler,node_downloads,node_plugins toneMint
class node_sessions,node_context,node_memory,node_knowledge,node_rag toneRose
class node_mcp,node_a2a,node_llm,node_docker toneIndigo
```

## Components

### User interfaces

- [Mode selection](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/main.py): `src/uniclaw/main.py`
- [Console UI](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/console/run.py): `src/uniclaw/console/run.py`
- [Web UI](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/webui/app.py): `src/uniclaw/webui/app.py`
- [WeChat bot](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/ilink_bot/manager.py): `src/uniclaw/ilink_bot/manager.py`

### Agent runtime

- [Agent runtime](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/agent/multi_agent.py): `src/uniclaw/agent/multi_agent.py`
- [Tool registry](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/registry.py): `src/uniclaw/tools/registry.py`
- [Provider router](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/provider/router.py): `src/uniclaw/provider/router.py`
- [Configuration](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/config.py): `src/uniclaw/config.py`

### Tools and tasks

- [Search tools](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/search/tools.py): `src/uniclaw/tools/search/tools.py`
- [Files and shell](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/fs.py): `src/uniclaw/tools/fs.py`
- [Computer control](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/computer_use/tools.py): `src/uniclaw/tools/computer_use/tools.py`
- [Tasks and plans](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/todolist/tools.py): `src/uniclaw/tools/todolist/tools.py`
- [Scheduler](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/scheduler/scheduler.py): `src/uniclaw/tools/scheduler/scheduler.py`
- [Download managers](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/download/manager.py): `src/uniclaw/tools/download/manager.py`
- [Plugins and hooks](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/plugins/loader.py): `src/uniclaw/tools/plugins/loader.py`

### Context and state

- [Session manager](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/session/session_manager.py): `src/uniclaw/tools/session/session_manager.py`
- [Context management](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/context.py): `src/uniclaw/context.py`
- [Persistent memory](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/memory/memory.py): `src/uniclaw/tools/memory/memory.py`
- [Knowledge graph](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/knowledge/graph.py): `src/uniclaw/tools/knowledge/graph.py`
- [RAG retrieval](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/rag/rag.py): `src/uniclaw/tools/rag/rag.py`

### External integrations

- [MCP integration](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/mcp/tools.py): `src/uniclaw/tools/mcp/tools.py`
- [A2A integration](https://github.com/uniclawai/uniclaw/blob/main/src/uniclaw/tools/a2a/tools.py): `src/uniclaw/tools/a2a/tools.py`

### Other components

- **User**
- **LLM providers**
- **Docker**
- **Session files**

## Connections

- User → Mode selection: starts
- Mode selection → Console UI: launches console
- Mode selection → Web UI: launches WebUI
- Console UI → Agent runtime: submits input
- Web UI → Agent runtime: submits input
- WeChat bot → Agent runtime: provides interaction
- Agent runtime → Provider router: requests completion
- Provider router → LLM providers: sends requests
- Agent runtime → Tool registry: discovers tools
- Tool registry → Search tools: exposes tools
- Tool registry → Files and shell: exposes tools
- Tool registry → Computer control: exposes tools
- Tool registry → Tasks and plans: exposes tools
- Tool registry → Scheduler: exposes tools
- Tool registry → Download managers: exposes tools
- Tool registry → Plugins and hooks: loads extensions
- Tool registry → MCP integration: exposes tools
- Tool registry → A2A integration: exposes tools
- Agent runtime → Session manager: persists conversation
- Session manager → Session files: reads and writes
- Agent runtime → Context management: manages context
- Tool registry → Persistent memory: exposes tools
- Tool registry → Knowledge graph: exposes tools
- Tool registry → RAG retrieval: exposes tools
- Agent runtime → Configuration: uses settings
- Web UI → WeChat bot: manages bots
- MCP integration → LLM providers: optional service access
