# hhyqhh/inno-agent architecture

> Architecture diagram of the GitHub repository hhyqhh/inno-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/hhyqhh/inno-agent
- Repository: https://github.com/hhyqhh/inno-agent

## Overview

Inno Agent is a single-learner personal learning companion, available through a web interface, desktop shell, and CLI. The main workflow is a learner’s chat turn entering the server, running through the Pi-based agent, and returning as a streamed response; registered tools support teaching with learner evidence and durable knowledge. Separate memory layers preserve learner state, wiki knowledge, and session recall. Scheduler-driven reminders, messaging channels, workspace practice, and remote skills/presets extend that loop. The README documents several capabilities whose source wiring is not shown in the excerpts, so those links are represented only where the tree and documentation support them.

Main entry points: [`apps/inno-agent/src/server.ts`](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/server.ts) (HTTP server), [`apps/inno-agent/src/agent/pi-runner.ts`](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/pi-runner.ts) (Pi agent runtime), [`apps/inno-agent/src/agent/practice-tools.ts`](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/practice-tools.ts) (Learning tools), [`apps/inno-agent/src/scheduler/job-runner.ts`](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/scheduler/job-runner.ts) (Job runner)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_web["Web interface<br/>[App.tsx]"]
  node_chatui["Chat experience<br/>[ChatCenter.tsx]"]
  node_server["HTTP server<br/>[server.ts]"]
  node_desktop["Desktop shell<br/>[main.js]"]
  node_cli["CLI entry<br/>[cli.ts]"]
end

subgraph group_agent["Agent runtime"]
  node_runtime["Pi agent runtime<br/>[pi-runner.ts]"]
  node_learningtools["Learning tools<br/>[practice-tools.ts]"]
end

subgraph group_memory["Learning memory"]
  node_l1[("Learner profile<br/>[profile-store.ts]")]
  node_state["Knowledge state<br/>[state-engine.ts]"]
  node_l2[("Wiki knowledge base<br/>[l2-memory.ts]")]
  node_wikiquery["Wiki retrieval<br/>[wiki-query.ts]"]
  node_l3[("Session recall<br/>[sqlite-store.ts]")]
end

subgraph group_proactive["Proactive learning"]
  node_scheduler["Job scheduler<br/>[cron-scheduler.ts]"]
  node_jobrunner["Job runner<br/>[job-runner.ts]"]
  node_channels["IM channels<br/>[channel.ts]"]
end

subgraph group_workspace["Workspace tools"]
  node_workspace["Workspace registry"]
  node_terminal["Practice terminal"]
  node_runs[("Run records")]
  node_content["Skill and preset catalog<br/>[catalog-service.ts]"]
end

node_learner(("Learner"))
node_feishu(("Feishu service"))
node_wechat(("WeChat service"))
node_hub(("Content hub"))
node_model(("Model provider"))

node_learner -->|"uses"| node_web
node_web -->|"opens chat"| node_chatui
node_chatui -->|"sends turns"| node_server
node_server -->|"initializes and dispatches"| node_runtime
node_runtime -->|"requests completion"| node_model
node_runtime -->|"registers tools"| node_learningtools
node_learningtools -->|"updates profile"| node_l1
node_state -->|"projects knowledge"| node_l1
node_learningtools -->|"queries or ingests"| node_l2
node_wikiquery -->|"searches pages"| node_l2
node_runtime -->|"recalls sessions"| node_l3
node_server -->|"hosts jobs"| node_scheduler
node_scheduler -->|"dispatches jobs"| node_jobrunner
node_jobrunner -->|"runs agent work"| node_runtime
node_jobrunner -->|"sends reminders"| node_channels
node_channels -->|"connects"| node_feishu
node_channels -.->|"connects"| node_wechat
node_server -->|"serves practice API"| node_terminal
node_terminal -->|"resolves workspace"| node_workspace
node_terminal -->|"records runs"| node_runs
node_server -->|"serves catalog"| node_content
node_content -.->|"fetches skills and presets"| node_hub
node_desktop -->|"starts and displays"| node_server
node_cli -->|"starts agent"| node_runtime

click node_web "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/web/src/react/App.tsx"
click node_chatui "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/web/src/react/ChatCenter.tsx"
click node_server "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/server.ts"
click node_desktop "https://github.com/hhyqhh/inno-agent/blob/main/electron/main.js"
click node_cli "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/cli.ts"
click node_runtime "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/pi-runner.ts"
click node_learningtools "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/practice-tools.ts"
click node_l1 "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/learner/profile-store.ts"
click node_state "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/learner/state-engine.ts"
click node_l2 "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l2/l2-memory.ts"
click node_wikiquery "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l2/wiki-query.ts"
click node_l3 "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l3/sqlite-store.ts"
click node_scheduler "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/scheduler/cron-scheduler.ts"
click node_jobrunner "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/scheduler/job-runner.ts"
click node_channels "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/channels/channel.ts"
click node_workspace "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/workspace/workspace-registry.ts"
click node_terminal "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/terminal/terminal-session-manager.ts"
click node_runs "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/terminal/run-record-store.ts"
click node_content "https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/content-source/catalog-service.ts"

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_web,node_chatui,node_server,node_desktop,node_cli toneBlue
class node_runtime,node_learningtools toneAmber
class node_l1,node_state,node_l2,node_wikiquery,node_l3 toneMint
class node_scheduler,node_jobrunner,node_channels toneRose
class node_workspace,node_terminal,node_runs,node_content,node_learner,node_feishu,node_wechat,node_hub,node_model toneIndigo
```

## Components

### User interaction

- [Web interface](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/web/src/react/App.tsx): `apps/inno-agent/web/src/react/App.tsx`
- [Chat experience](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/web/src/react/ChatCenter.tsx): `apps/inno-agent/web/src/react/ChatCenter.tsx`
- [HTTP server](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/server.ts): `apps/inno-agent/src/server.ts`
- [Desktop shell](https://github.com/hhyqhh/inno-agent/blob/main/electron/main.js): `electron/main.js`
- [CLI entry](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/cli.ts): `apps/inno-agent/src/cli.ts`

### Agent runtime

- [Pi agent runtime](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/pi-runner.ts): `apps/inno-agent/src/agent/pi-runner.ts`
- [Learning tools](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/agent/practice-tools.ts): `apps/inno-agent/src/agent/practice-tools.ts`

### Learning memory

- [Learner profile](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/learner/profile-store.ts): `apps/inno-agent/src/memory/learner/profile-store.ts`
- [Knowledge state](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/learner/state-engine.ts): `apps/inno-agent/src/memory/learner/state-engine.ts`
- [Wiki knowledge base](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l2/l2-memory.ts): `apps/inno-agent/src/memory/l2/l2-memory.ts`
- [Wiki retrieval](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l2/wiki-query.ts): `apps/inno-agent/src/memory/l2/wiki-query.ts`
- [Session recall](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/memory/l3/sqlite-store.ts): `apps/inno-agent/src/memory/l3/sqlite-store.ts`

### Proactive learning

- [Job scheduler](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/scheduler/cron-scheduler.ts): `apps/inno-agent/src/scheduler/cron-scheduler.ts`
- [Job runner](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/scheduler/job-runner.ts): `apps/inno-agent/src/scheduler/job-runner.ts`
- [IM channels](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/channels/channel.ts): `apps/inno-agent/src/channels/channel.ts`

### Workspace tools

- [Workspace registry](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/workspace/workspace-registry.ts): `apps/inno-agent/src/workspace/workspace-registry.ts`
- [Practice terminal](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/terminal/terminal-session-manager.ts): `apps/inno-agent/src/terminal/terminal-session-manager.ts`
- [Run records](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/terminal/run-record-store.ts): `apps/inno-agent/src/terminal/run-record-store.ts`
- [Skill and preset catalog](https://github.com/hhyqhh/inno-agent/blob/main/apps/inno-agent/src/content-source/catalog-service.ts): `apps/inno-agent/src/content-source/catalog-service.ts`

### Other components

- **Learner**
- **Feishu service**
- **WeChat service**
- **Content hub**
- **Model provider**

## Connections

- Learner → Web interface: uses
- Web interface → Chat experience: opens chat
- Chat experience → HTTP server: sends turns
- HTTP server → Pi agent runtime: initializes and dispatches
- Pi agent runtime → Model provider: requests completion
- Pi agent runtime → Learning tools: registers tools
- Learning tools → Learner profile: updates profile
- Knowledge state → Learner profile: projects knowledge
- Learning tools → Wiki knowledge base: queries or ingests
- Wiki retrieval → Wiki knowledge base: searches pages
- Pi agent runtime → Session recall: recalls sessions
- HTTP server → Job scheduler: hosts jobs
- Job scheduler → Job runner: dispatches jobs
- Job runner → Pi agent runtime: runs agent work
- Job runner → IM channels: sends reminders
- IM channels → Feishu service: connects
- IM channels → WeChat service: connects
- HTTP server → Practice terminal: serves practice API
- Practice terminal → Workspace registry: resolves workspace
- Practice terminal → Run records: records runs
- HTTP server → Skill and preset catalog: serves catalog
- Skill and preset catalog → Content hub: fetches skills and presets
- Desktop shell → HTTP server: starts and displays
- CLI entry → Pi agent runtime: starts agent
