# shorin-kiwata/miyu-agent architecture

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

- Interactive diagram: https://gitdiagram.com/shorin-kiwata/miyu-agent
- Repository: https://github.com/shorin-kiwata/miyu-agent

## Overview

Miyu is a configurable, multi-interface AI assistant: a user submits a turn through the terminal, WebUI, shell integration, or a connected messaging platform; the agent prepares context, requests a configured model, dispatches tools, and returns a rendered reply. Its product also includes persistent conversation and memory features, voice interaction, knowledge and utility tools, and data transfer. The tree and README establish these capabilities; sampled excerpts confirm the executable entry, WebUI routing, voice pipeline, and selected tool and state behaviors, but not every cross-module call.

Main entry points: [`crates/miyu-engine/src/agent/turn_loop/mod.rs`](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/agent/turn_loop/mod.rs) (Agent turn loop), [`crates/miyu-hosts/src/platforms/onebot/mod.rs`](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/platforms/onebot/mod.rs) (QQ OneBot), [`crates/miyu-hosts/src/web/server.rs`](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/web/server.rs) (WebUI server), [`crates/miyu-core/src/llm/mod.rs`](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/llm/mod.rs) (Model providers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_main["CLI entry<br/>[main.rs]"]
  node_configtui["Config TUI<br/>[mod.rs]"]
  node_web["WebUI server<br/>[server.rs]"]
  node_render["Reply rendering<br/>[mod.rs]"]
end

subgraph group_agent["Agent runtime"]
  node_engine["Agent turn loop<br/>[mod.rs]"]
  node_prompt["Context and prompts<br/>[context.rs]"]
  node_llm["Model providers<br/>[mod.rs]"]
end

subgraph group_capabilities["Assistant capabilities"]
  node_tools["Tool registry<br/>[mod.rs]"]
  node_memory["Memory system<br/>[mod.rs]"]
  node_knowledge["Knowledge base<br/>[mod.rs]"]
  node_voice["Voice pipeline<br/>[pipeline.rs]"]
end

subgraph group_state["Persistence and setup"]
  node_models["Provider configuration<br/>[provider.rs]"]
  node_state[("Conversation state<br/>[mod.rs]")]
  node_transfer["Import and export<br/>[mod.rs]"]
end

subgraph group_platform["Platform integrations"]
  node_hosts["Host adapters<br/>[mod.rs]"]
  node_onebot["QQ OneBot<br/>[mod.rs]"]
  node_daemon["Daemon<br/>[daemon.rs]"]
end

node_user(("User"))
node_modelservice(("Model service"))
node_messaging(("Messaging platform"))

node_user -->|"starts"| node_main
node_main -->|"runs turns"| node_engine
node_user -->|"submits turns"| node_web
node_web -->|"starts turns"| node_engine
node_user -->|"edits settings"| node_configtui
node_configtui -->|"updates providers"| node_models
node_messaging -->|"sends events"| node_onebot
node_onebot -->|"dispatches turns"| node_engine
node_daemon -->|"hosts"| node_onebot
node_daemon -.->|"starts optional process"| node_voice
node_engine -->|"builds context"| node_prompt
node_engine -->|"requests completion"| node_llm
node_llm -->|"sends requests"| node_modelservice
node_models -->|"configures providers"| node_llm
node_engine -->|"dispatches calls"| node_tools
node_tools -->|"provides search"| node_knowledge
node_prompt -->|"recalls context"| node_memory
node_memory -->|"reads and writes"| node_state
node_engine -->|"persists turns"| node_state
node_engine -->|"emits reply events"| node_render
node_web -->|"renders responses"| node_render
node_hosts -->|"formats platform replies"| node_render
node_onebot -->|"sends replies"| node_messaging
node_transfer -->|"imports and exports"| node_state

click node_main "https://github.com/shorin-kiwata/miyu-agent/blob/main/src/main.rs"
click node_configtui "https://github.com/shorin-kiwata/miyu-agent/blob/main/src/config_tui/mod.rs"
click node_web "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/web/server.rs"
click node_hosts "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/platforms/mod.rs"
click node_onebot "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/platforms/onebot/mod.rs"
click node_daemon "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/daemon.rs"
click node_engine "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/agent/turn_loop/mod.rs"
click node_prompt "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/agent/context.rs"
click node_tools "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/tools/mod.rs"
click node_llm "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/llm/mod.rs"
click node_models "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-base/src/config/provider.rs"
click node_memory "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/memory/mod.rs"
click node_knowledge "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/tools/knowledge_base/mod.rs"
click node_voice "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/voice/pipeline.rs"
click node_state "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/state/mod.rs"
click node_transfer "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/transfer/mod.rs"
click node_render "https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/render/mod.rs"

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_configtui,node_web,node_render,node_user toneBlue
class node_engine,node_prompt,node_llm toneAmber
class node_tools,node_memory,node_knowledge,node_voice toneMint
class node_models,node_state,node_transfer toneRose
class node_hosts,node_onebot,node_daemon,node_modelservice,node_messaging toneIndigo
```

## Components

### User interfaces

- [CLI entry](https://github.com/shorin-kiwata/miyu-agent/blob/main/src/main.rs): `src/main.rs`
- [Config TUI](https://github.com/shorin-kiwata/miyu-agent/blob/main/src/config_tui/mod.rs): `src/config_tui/mod.rs`
- [WebUI server](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/web/server.rs): `crates/miyu-hosts/src/web/server.rs`
- [Reply rendering](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/render/mod.rs): `crates/miyu-hosts/src/render/mod.rs`

### Agent runtime

- [Agent turn loop](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/agent/turn_loop/mod.rs): `crates/miyu-engine/src/agent/turn_loop/mod.rs`
- [Context and prompts](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/agent/context.rs): `crates/miyu-engine/src/agent/context.rs`
- [Model providers](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/llm/mod.rs): `crates/miyu-core/src/llm/mod.rs`

### Assistant capabilities

- [Tool registry](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/tools/mod.rs): `crates/miyu-engine/src/tools/mod.rs`
- [Memory system](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/memory/mod.rs): `crates/miyu-core/src/memory/mod.rs`
- [Knowledge base](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/tools/knowledge_base/mod.rs): `crates/miyu-engine/src/tools/knowledge_base/mod.rs`
- [Voice pipeline](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/voice/pipeline.rs): `crates/miyu-engine/src/voice/pipeline.rs`

### Persistence and setup

- [Provider configuration](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-base/src/config/provider.rs): `crates/miyu-base/src/config/provider.rs`
- [Conversation state](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-core/src/state/mod.rs): `crates/miyu-core/src/state/mod.rs`
- [Import and export](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-engine/src/transfer/mod.rs): `crates/miyu-engine/src/transfer/mod.rs`

### Platform integrations

- [Host adapters](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/platforms/mod.rs): `crates/miyu-hosts/src/platforms/mod.rs`
- [QQ OneBot](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/platforms/onebot/mod.rs): `crates/miyu-hosts/src/platforms/onebot/mod.rs`
- [Daemon](https://github.com/shorin-kiwata/miyu-agent/blob/main/crates/miyu-hosts/src/daemon.rs): `crates/miyu-hosts/src/daemon.rs`

### Other components

- **User**
- **Model service**
- **Messaging platform**

## Connections

- User → CLI entry: starts
- CLI entry → Agent turn loop: runs turns
- User → WebUI server: submits turns
- WebUI server → Agent turn loop: starts turns
- User → Config TUI: edits settings
- Config TUI → Provider configuration: updates providers
- Messaging platform → QQ OneBot: sends events
- QQ OneBot → Agent turn loop: dispatches turns
- Daemon → QQ OneBot: hosts
- Daemon → Voice pipeline: starts optional process
- Agent turn loop → Context and prompts: builds context
- Agent turn loop → Model providers: requests completion
- Model providers → Model service: sends requests
- Provider configuration → Model providers: configures providers
- Agent turn loop → Tool registry: dispatches calls
- Tool registry → Knowledge base: provides search
- Context and prompts → Memory system: recalls context
- Memory system → Conversation state: reads and writes
- Agent turn loop → Conversation state: persists turns
- Agent turn loop → Reply rendering: emits reply events
- WebUI server → Reply rendering: renders responses
- Host adapters → Reply rendering: formats platform replies
- QQ OneBot → Messaging platform: sends replies
- Import and export → Conversation state: imports and exports
