AionUi 深度解析:从零到精通的完全指南

2 阅读14分钟

写在前面:这篇博客基于 AionUi 仓库的全部文档、源码和技术设计文档撰写,面向三类读者:想用它做事的普通用户、想把玩源码的开发者、想深入贡献的核心参与者。内容由浅入深,可按需跳读。


第一章:它到底是什么?用一个比喻讲清楚

想象你是一家公司的老板,你现在有两个选择:

选项 A:雇一个秘书,你口述需求,他记下来,然后你们你来我往地沟通,所有事情最终还是你自己执行。

选项 B:雇一个全栈员工团队,你说"帮我把这季度的销售数据整理成报告,做成 PPT,发到 Slack 群里",然后他们自己分工、自己干、你就等结果。

大多数 AI 聊天应用(ChatGPT、Claude.ai)是选项 A

AionUi 是选项 B

它是一个开源、免费、跨平台的 AI Cowork(AI协同工作)平台。AI 在你的电脑上拥有真正的执行权:读写文件、执行代码、搜索网络、生成文档,并且支持多个 AI Agent 组成团队并行工作,还能 24/7 无人值守自动运行定时任务。

┌────────────────────────────────────────────────────────────┐
│              AionUi vs 传统 AI 聊天客户端                    │
├───────────────────┬────────────────┬────────────────────────┤
│ 能力              │ 传统 AI 聊天   │ AionUi                 │
├───────────────────┼────────────────┼────────────────────────┤
│ 读写本地文件      │ ❌             │ ✅ 内置 Agent           │
│ 执行多步骤任务    │ 有限           │ ✅ 自主规划+执行         │
│ 手机/平板远程访问 │ 少见           │ ✅ WebUI + Telegram 等  │
│ 定时自动执行      │ ❌             │ ✅ Cron 24/7            │
│ 同时使用多个 AI   │ ❌             │ ✅ 20+ Agent 并行       │
│ 费用              │ 付费           │ 完全免费开源            │
└───────────────────┴────────────────┴────────────────────────┘

第二章:5分钟上手(普通用户)

安装

三种方式,选一种:

# 方式一:官网下载安装包(推荐新手)
# 访问 https://github.com/iOfficeAI/AionUi/releases 下载对应平台安装包

# 方式二:macOS Homebrew
brew install aionui

# 方式三:Linux .deb
wget https://github.com/iOfficeAI/AionUi/releases/latest/download/AionUi-linux-amd64.deb
sudo dpkg -i AionUi-linux-amd64.deb

支持平台:macOS 10.15+、Windows 10+、Linux (Ubuntu 18.04+/Debian 10+/Fedora 32+)

第一次启动:3步开始工作

① 安装 AionUi
     ↓
② 登录方式(任选一种):
   • Google 账号登录 → 免费 Gemini Agent(推荐零成本体验)
   • 粘贴 API Key  → Anthropic / OpenAI / DeepSeek / 本地 Ollama 等
     ↓
③ 开始对话,AI 就是你的协作者

入门示例①:整理一个混乱的下载文件夹

打开 AionUi,选择"Cowork"助手,直接说:

"帮我整理 /Users/我的用户名/Downloads 文件夹,按文件类型(图片、文档、压缩包、安装包)分类到子文件夹里,重复文件保留最新的。"

AI 会自动读取文件夹、分析内容、执行移动操作,全程你可以实时看到每一步在做什么。

入门示例②:一键生成 PPT

"根据这份文字材料(拖拽 txt 文件进对话框),帮我制作一份 10 页的季度汇报 PPT,风格商务简洁,包含数据图表。"

输出是真实可编辑的 .pptx 文件,带 Morph 动效转场,直接用 PowerPoint 或 WPS 打开编辑。

入门示例③:让 AI 每天早上给你发摘要

在设置里找到定时任务,创建一个任务:

触发时间:每天 08:30(Cron: 30 8 * * *,时区 Asia/Shanghai)
执行内容:"搜索今天科技圈最重要的 5 条新闻,整理成简报发给我"
执行模式:每次创建新对话

设置完成后,AionUi 会在你睡觉时自动运行,早上起来就有新鲜简报等你。


第三章:进阶玩法(进阶用户)

远程访问:把 AI 随身带

AionUi 内置 WebUI 服务器,可以让你用手机或任意设备访问。

局域网访问(家庭/办公):

# 桌面端启动时带上 --webui --remote 参数
# macOS:
/Applications/AionUi.app/Contents/MacOS/AionUi --webui --remote

# Linux:
aionui --webui --remote

启动后打印形如 Server running at http://192.168.1.100:25808,手机浏览器直接访问这个地址就行。

外网访问(云服务器部署):

# Linux 服务器一键启动脚本(xvfb 提供虚拟显示器)
nohup xvfb-run --auto-servernum --server-args="-screen 0 1920x1080x24" \
  /usr/bin/AionUi --webui --remote --no-sandbox \
  > /var/log/aionui.log 2>&1 &

# 或者用 ngrok 穿透(适合没有公网 IP 的场景)
ngrok http 25808

配置完成后,架构如下:

  你的手机/平板
       │ 浏览器访问
       ▼
  http://你的服务器IP:25808
       │ WebSocket
       ▼
  AionUi 服务器端
  (处理 AI 逻辑、文件操作)
       │ API 调用
       ▼
  Gemini / Claude / OpenAI ...

多 AI 协同:同时使用多个 Agent

如果你已经安装了 Claude Code、Qwen Code 等 CLI 工具,AionUi 会自动检测并集成它们,在同一界面并行使用:

AionUi 支持的 CLI Agent(自动检测):
┌──────────────┬─────────────────────────────────┐
│ 工具名称     │ 检测命令                         │
├──────────────┼─────────────────────────────────┤
│ Claude Code  │ claude --experimental-acp        │
│ Qwen Code    │ qwen --acp                       │
│ OpenAI Codex │ codex                            │
│ Goose AI     │ goose acp                        │
│ GitHub Copilot│ copilot --acp --stdio           │
│ Cursor Agent │ agent acp                        │
│ Kiro         │ kiro-cli acp                     │
│ ... 共 16+   │                                  │
└──────────────┴─────────────────────────────────┘

你不需要任何配置,AionUi 启动时会扫描系统 PATH,有什么用什么。

接入即时通讯:Telegram 控制 AI

在设置中配置 Telegram Bot Token 后,可以直接在手机 Telegram 里对话控制你的 AI:

你 → Telegram Bot → AionUi → AI Agent → 执行任务 → 返回结果给你

同样支持:飞书(Lark)、钉钉、企业微信(WeCom)、微信。

命令队列:批量发任务不怕 AI 忙

开启 Settings → System → Enable Command Queue 后,AI 在处理任务时你可以继续排队发指令,最多 20 条,AI 依次处理:

[任务1] 整理文件    ← AI 正在执行
[任务2] 写报告      ← 已入队,等待中
[任务3] 发邮件      ← 已入队,等待中

第四章:Team Mode——多 Agent 团队协作(高级)

这是 AionUi 最强大的特性之一,也是它区别于所有同类工具的核心能力。

什么时候用 Team Mode?

当一个任务涉及多个专业方向,并且子任务可以并行执行时。比如:

  • 开发一个完整的 Web 应用(前端 + 后端 + 数据库 + 部署)
  • 做一份全面的市场调研报告(竞品分析 + 数据采集 + 图表制作 + 排版)
  • 代码库重构(模块A + 模块B + 测试 + 文档 可以同时进行)

Team Mode 是怎么工作的

用一张时序图来说清楚:

用户                  Solo Agent(单 Agent 模式)         MCP Server        Team Lead         Team Members
 │                         │                               │                  │                    │
 │──"帮我做电商网站"──────▶│                               │                  │                    │
 │                         │ ② 分析:涉及前端+后端+DB+运维  │                  │                    │
 │◀──③ "建议开启团队模式"──│                               │                  │                    │
 │                         │                               │                  │                    │
 │──④ "好的,开启"────────▶│                               │                  │                    │
 │                         │──⑤ aion_create_team ─────────▶│                  │                    │
 │                         │                               │── 创建Team        │                    │
 │                         │                               │── 启动MCP Server  │                    │
 │                         │                               │── 写入SQLite DB   │                    │
 │                         │◀──⑥ { teamId, route }────────│                  │                    │
 │                         │──⑦ aion_navigate ────────────▶│                  │                    │
 │◀──⑧ 跳转到 Team 页面 ───│                               │                  │                    │
 │                         │                               │──发需求摘要──────▶│                    │
 │                         │                               │                  │── 拆分任务          │
 │                         │                               │                  │── spawn 成员       │
 │                         │                               │                  │──分配给─────────────▶│
 │                         │                               │                  │                    │── 并行执行
 │◀─────────────────────── 实时看到多 Agent 并行工作进度 ──────────────────────────────────────────│

实操示例:让 AI 团队开发一个 Todo App

你只需要对任何一个 Agent 说:

"我想做一个 Todo List Web App,包含前端 React 页面、后端 Express API、PostgreSQL 数据库设计和 Docker 部署配置。帮我组建团队来完成。"

AI 会自动评估任务复杂度,建议开启 Team Mode,得到你确认后:

  1. Leader Agent 接收任务,制定整体计划
  2. 自动派生 Frontend Agent 负责 React 部分
  3. 自动派生 Backend Agent 负责 Express API
  4. 自动派生 DBA Agent 负责数据库 Schema
  5. 各 Agent 在同一个工作目录并行写文件,互不干扰

你在 Team 页面实时看到每个 Agent 的状态(工作中 / 等待权限确认 / 完成),每个 Agent 有独立的权限确认弹窗,你对任何一个批准或拒绝都不影响其他 Agent。

Team Mode 核心设计

Team Mode 架构(Main Process 内):

TeamSessionService          TeammateManager
    │                            │
    │ 创建 Team DB 记录           │ 管理 Agent 生命周期
    │ 分配共享 Workspace         │ 动态 spawn / remove
    │                            │
    └──────────┬─────────────────┘
               │
         Team MCP Server
         (进程内 MCP 服务)
               │
    ┌──────────┼──────────────┐
    │          │              │
 Leader     Member①       Member②
  Agent      Agent         Agent
    │          │              │
    └──────────┴──────────────┘
           共享 Workspace 文件夹
           每个 Agent 独立 session
           通过 MCP 邮箱通信

第五章:技术架构深解(开发者)

如果你想深入代码,这一章是你需要的。

Electron 三进程模型

AionUi 是一个标准的现代 Electron 应用,严格遵守三进程隔离原则:

┌─────────────────────────────────────────────────────────────────┐
│                        AionUi 进程模型                           │
│                                                                 │
│  ┌─────────────────────┐         ┌───────────────────────────┐  │
│  │   Renderer 进程      │         │      Main 进程            │  │
│  │                     │  IPC    │                           │  │
│  │  React 19 UI        │◄───────►│  Node.js + Electron API  │  │
│  │  UnoCSS 样式         │         │  SQLite 数据库            │  │
│  │  浏览器 API          │         │  Cron 定时任务            │  │
│  │  ❌ 不能用 Node.js   │         │  MCP 服务管理             │  │
│  └─────────────────────┘         │  ❌ 不能用 DOM API        │  │
│           ▲                      └──────────┬────────────────┘  │
│           │                                 │                   │
│    ┌──────┴───────┐                ┌────────▼──────────┐        │
│    │  Preload 脚本 │                │   Worker 进程们   │        │
│    │              │                │                   │        │
│    │ contextBridge│                │ Gemini Worker     │        │
│    │ 安全桥接      │                │ ACP Worker        │        │
│    │ 两边都能访问  │                │ Codex Worker      │        │
│    └──────────────┘                │ (各自独立进程)   │        │
│                                    └───────────────────┘        │
└─────────────────────────────────────────────────────────────────┘

重要规则:跨进程通信必须通过 IPC Bridge,直接访问会导致运行时崩溃。

四种运行模式

运行模式          启动命令                    特点
─────────────────────────────────────────────────────────
Electron 桌面    bun start                  标准桌面窗口 + 可选 WebUI
无窗口 WebUI     bun run webui              无 Electron 窗口,浏览器访问
远程 WebUI       bun run webui:remote       支持外网访问
纯服务器模式     bun run server:start       无 Electron 依赖,适合 Linux 服务器
                                            ※ 10个 Electron-only Bridge 不可用

WebUI 和 Electron IPC 的优雅设计:它们连接到完全相同的 Bridge Handler,不同的只是传输层(IPC vs WebSocket)。这意味着所有功能在桌面端和浏览器端完全一致。

Electron 窗口用户 ──── IPC ────────────┐
                                       ▼
                              Bridge Handlers + Services + DB
                                       ▲
浏览器/手机用户 ───── WebSocket ────────┘

ACP 协议——核心中的核心

ACP(Agent Communication Protocol)是 AionUi 自研的多 Agent 通信协议,理解它就理解了整个项目的灵魂。

ACP 做什么: 把 Claude Code、Qwen Code 等各种 CLI 工具抽象成统一的 JSON-RPC 接口,让 AionUi 可以用同一套代码驱动所有这些 Agent。

ACP 状态机(7个状态):

              connect()
DISCONNECTED ──────────▶ CONNECTING
                              │ spawn 成功
                              ▼
                        INITIALIZING ──── 超时(60s) / 崩溃 ──▶ ERROR_STARTUP
                              │ initialize 握手完成
                              ▼
                         CONNECTED
                              │ newSession() / loadSession()
                              ▼
                         HAS_SESSION ◄──── cancelPrompt() ──┐
                              │                              │
                         sendPrompt()                        │
                              │                              │
                              ▼                              │
                          STREAMING ──────────────────────── ┘
                              │ 进程崩溃
                              ▼
                        DISCONNECTED(自动重连)

自动重连机制:sendMessage() 发现连接断了,会自动执行完整的 connect → initialize → newSession/loadSession 序列,首次失败后 300ms 重试一次,对用户完全透明。

Claude Code 的实际连接路径(有点烧脑但很有趣)

很多人以为 AionUi 是直接调用 Claude Code CLI 的,实际上有三层子进程嵌套

AionUi (Electron Main Process)
    │
    │ spawn via npx
    ▼
@zed-industries/claude-agent-acp(ACP Bridge,~Node.js进程)
    │ 负责 ACP 协议 ↔ Claude SDK 的翻译
    │
    │ spawn via SDK内部
    ▼
@anthropic-ai/claude-agent-sdk/cli.js(内嵌 Claude Code,~13MB)
    │ 完整的 Claude Code 运行时
    │
    │ HTTPS 调用
    ▼
api.anthropic.com

协议层:
AionUi ←── JSON-RPC (NDJSON) ──→ ACP Bridge
ACP Bridge ←── streaming NDJSON ──→ cli.js
cli.js ←── HTTPS ──→ Anthropic API

关键发现:ACP Bridge 不从系统 PATH 找 claude 命令,它使用 SDK npm 包内嵌的 cli.js(版本锁定,~13MB 自包含运行时),所以即使你没有单独安装 Claude Code,也能使用 Claude 能力。

AcpDetector:如何自动发现所有 Agent

AionUi 启动时,AcpDetector 单例会并行从三个来源检测可用 Agent:

initialize()
    │
    ├── detectBuiltinAgents()  ← 扫描系统 PATH(which/where 命令,1秒超时)
    ├── detectExtensionAgents() ← 从已安装扩展获取 ACP Adapter
    └── detectCustomAgents()   ← 从用户配置文件读取
    │
    ▼ 合并顺序:Aionrs > Gemini > Builtin > Other > Remote > Extension
    │
    └── 输出统一 agent 列表供 UI 和 IPC Bridge 使用

PATH 增强策略:AionUi 不止看系统 PATH,还会主动扫描 ~/.bun/bin~/.cargo/bin~/.volta/bin、nvm 目录、Homebrew 路径等,确保从 Finder 启动也能找到 CLI 工具。

src 目录完整结构

src/
├── index.ts                    # Main 进程入口
├── server.ts                   # 纯 Node.js 服务器入口(无 Electron)
├── types.d.ts                  # 全局类型声明
├── common/                     # 跨进程共享(类型、工具、常量)
├── preload/                    # contextBridge 安全桥接脚本
│
├── process/                    # Main 进程业务逻辑
│   ├── acp/                    # ★ ACP 协议层(新版 V2,feature flag 控制)
│   ├── agent/                  # ★ AI 后端连接(AcpDetector、AcpConnection 等)
│   ├── bridge/                 # IPC 处理器(cronBridge、fsBridge 等)
│   ├── channels/               # 消息通道(Telegram/微信/钉钉/飞书/WeCom)
│   ├── extensions/             # 扩展系统(Hub 市场、加载器、注册表)
│   ├── pet/                    # 桌面宠物(AI 状态可视化)
│   ├── resources/              # 资源管理(助手、技能、提示词)
│   ├── services/               # 核心服务(数据库、Cron、MCP)
│   ├── task/                   # 任务生命周期管理
│   ├── team/                   # ★ 多 Agent 团队协作
│   ├── utils/                  # 工具函数(shellEnv、进程管理)
│   ├── webserver/              # Express + WebSocket WebUI 服务
│   └── worker/                 # 后台 Worker 进程(fork 模式)
│
└── renderer/                   # 渲染进程(React UI)
    ├── components/             # 共享 UI 组件
    │   ├── base/               # 基础 UI 原语(无业务逻辑)
    │   ├── chat/               # 对话/消息组件
    │   ├── agent/              # Agent 选择配置组件
    │   └── ...
    ├── hooks/                  # React Hooks
    │   ├── agent/、chat/、file/ # 按业务域分组
    │   ├── mcp/、ui/、system/
    ├── pages/                  # 页面模块
    │   ├── conversation/       # 对话页(含 ACP/Gemini 等各平台)
    │   └── settings/           # 设置页
    ├── services/               # 客户端服务 + i18n
    ├── utils/                  # 工具函数
    ├── pet/                    # 桌面宠物 UI
    └── main.tsx                # React 挂载 + PWA 支持

数据流:一条消息的完整旅程

用户在 SendBox 输入消息
        │
        ▼
[Renderer] 检查命令队列 → 若 AI 在忙则入队 sessionStorage
        │ AI 空闲时
        ▼
ipcBridge.conversation.sendMessage()
        │ IPC / WebSocket
        ▼
[Main] AcpAgentManager.sendMessage()
        │
        ▼
AcpConnection.sendPrompt()  ──── JSON-RPC → 子进程 stdin
        │
        ▼
子进程 stdout NDJSON 流 ──── handleMessage()
        │
        ▼
AcpAdapter.convertSessionUpdate()  // 转成 TMessage 格式
        │
        ▼
addOrUpdateMessage()  // 写入 SQLite
        │
        ▼
ipcBridge.acpConversation.responseStream.emit()
        │ IPC / WebSocket
        ▼
[Renderer] 实时流式渲染到聊天界面

第六章:扩展开发(高级开发者)

AionUi 有一套完整的插件扩展系统,可以贡献主题、技能、助手、新 Agent 后端等。

扩展清单结构

每个扩展都有一个 aion-extension.json 描述文件,类似 VS Code 插件的 package.json

{
  "$schema": "../../schemas/aion-extension-v1.json",
  "name": "my-extension",
  "displayName": "我的扩展",
  "version": "1.0.0",
  "engine": { "aionui": "^1.0.0" },
  "lifecycle": {
    "onActivate": "scripts/activate.js",
    "onDeactivate": "scripts/deactivate.js"
  },
  "permissions": {
    "storage": true,
    "network": false,
    "shell": false,
    "filesystem": "extension-only",
    "events": true
  },
  "contributes": {
    "acpAdapters": "$file:contributes/acp-adapters.json",
    "mcpServers":  "$file:contributes/mcp-servers.json",
    "assistants":  "$file:contributes/assistants.json",
    "skills":      "$file:contributes/skills.json",
    "themes":      "$file:contributes/themes.json",
    "settingsTabs":"$file:contributes/settings-tabs.json"
  }
}

一个扩展可以贡献的内容:

贡献点作用
acpAdapters注册新的 AI CLI 后端
mcpServers提供新的 MCP 工具
assistants新的内置助手角色
skills新的 AI 技能(pptx/docx/自定义)
themesUI 主题
settingsTabs设置页新标签

三层技能系统

技能来源
  ├── Builtin Skills(内置)
  │   └── pptx, docx, pdf, xlsx, mermaid, ...(随应用发布)
  │
  ├── Custom Skills(用户自定义)
  │   └── 在 skills/ 目录创建 .md 文件定义
  │       每个对话可独立开启/关闭
  │
  └── Extension Skills(扩展贡献)
      └── 通过 Extension SDK 注册,自动出现在技能列表

实用示例:开发一个自定义技能

在项目的 skills/ 目录下创建 my-weekly-report.md

# 周报生成技能

## 触发条件
当用户要求写周报时激活此技能。

## 输出格式
- 本周完成事项(3-5条)
- 遇到的问题与解决方案
- 下周计划
- 工作饱和度评估

## 风格要求
简洁专业,使用第一人称,避免空话套话。
每项不超过两行。

在对话界面的 Skill 指示器中启用它,之后这个对话里的 AI 就会按照这个模板生成周报。


第七章:开发环境搭建(贡献者)

环境准备

# 前置依赖
Node.js >= 22
Python >= 3.11(用于 native 模块编译)
Bun(包管理器)

# 安装 Bun
curl -fsSL https://bun.sh/install | bash

# 安装 PR 检查工具
npm install -g @j178/prek

# 克隆仓库
git clone https://github.com/iOfficeAI/AionUi.git
cd AionUi

# 安装依赖
bun install

# 启动开发模式
bun start

常用开发命令速查

# ─── 开发 ───
bun start                    # 启动 Electron 桌面模式
bun run webui                # 启动无窗口 WebUI 模式
bun run start:multi          # 启动第二个实例(双仓库开发用)

# ─── 代码质量 ───
bun run format               # 格式化代码(oxfmt,比 Prettier 快 30 倍)
bun run lint                 # Lint 检查(oxlint,比 ESLint 快 50-100 倍)
bun run lint:fix             # 自动修复 Lint 问题
bunx tsc --noEmit            # TypeScript 类型检查

# ─── 测试 ───
bunx vitest run              # 运行单元测试
bun run test:e2e             # E2E 测试(Playwright)
bun run test:coverage        # 覆盖率报告

# ─── 构建 ───
bun run dist:mac             # 打包 macOS
bun run dist:win             # 打包 Windows
bun run dist:linux           # 打包 Linux

# ─── 提交前一键检查(等同于 CI)───
prek run --from-ref origin/main --to-ref HEAD
bunx vitest run

提交规范

格式:type(scope): description

type 类型:
  feat     新功能
  fix      修 Bug
  docs     文档变更
  refactor 重构(不影响功能)
  test     测试相关
  chore    构建/工具变动

示例:
  feat(team): add per-agent confirmation dialog
  fix(acp): guard agent_status emission to known session states
  docs(contributing): replace examples with AionUi-specific scenarios

PR 规则:Atomic PR(一个 PR 只做一件事)

这是这个项目最重要的工程规范。在提交 PR 前,问自己:这个 diff 能拆分成多个独立的 PR 吗? 如果能,就必须拆。

❌ 错误示例(一个 PR 做多件事):
- fix(chat): fix scroll position
- feat(sentry): add user tracking
- perf(preview): optimize office preview
= 这必须是 3 个独立 PR

✅ 正确示例(一个 PR 一件事):
- feat(team): add per-agent confirmation, sidebar badge, and wiggle animation
(这三个是同一个功能的不可分割部分,属于一个 PR)

PR 自动化流程

提交 PR 后,仓库的 Bot 会自动处理:

你提交 PR
     │
     ▼
Bot 开始审查(标签: bot:reviewing)
     │
  ┌──┴──┐
  │     │
CI 通过  CI 失败
  │     │
  │     ▼
  │  bot:ci-waiting(等你修复)
  │
  ▼
bot:ready-to-merge
     │
     ▼
人工维护者合并

第八章:学习路线图

根据你的角色选择不同路径:

                  ┌─────────────────────────┐
                  │   你是什么角色?          │
                  └────────┬────────────────┘
                           │
          ┌────────────────┼─────────────────┐
          ▼                ▼                 ▼
    普通用户           前端开发者          后端/架构开发者
          │                │                 │
    第二章上手        第二章 + 第七章      第五章技术架构
          │            搭开发环境          重点读 ACP 部分
    第三章进阶         第五章渲染层          深入 docs/tech/
          │            renderer/ 目录        acp-detector.md
    第四章 Team         组件/Hooks规范       architecture.md
          │           docs/conventions/     queue-and-acp-state.md
    享受 AI 协作!    贡献 UI 功能 PR        贡献核心功能 PR

建议的代码阅读顺序(开发者):

  1. docs/tech/architecture.md — 整体架构(10分钟)
  2. src/index.ts + src/process/index.ts — Main 进程入口(了解启动流程)
  3. src/preload/ — contextBridge 设计(理解 IPC 安全隔离)
  4. src/process/agent/acp/AcpConnection.ts — ACP 状态机核心(重点)
  5. docs/tech/acp-detector.md — Claude 连接的完整链路分析
  6. src/process/team/ — Team Mode 实现(了解多 Agent 协调)
  7. examples/hello-world-extension/ — 扩展开发参考

附录:快速参考卡

支持的 AI 平台(20+)

官方平台:Gemini / Claude (Anthropic) / OpenAI
云服务商:AWS Bedrock / OpenRouter / New API
国内平台:通义千问(Dashscope) / 智谱AI / Moonshot(Kimi)
          百川(Qianfan) / 混元(Tencent) / 零一万物
          ModelScope / StepFun / 字节(Ark)
海外平台:DeepSeek / MiniMax / xAI / SiliconFlow
本地模型:Ollama / LM Studio(自定义 API 端点)

数据安全说明

  • 所有对话数据存储在本地 SQLite 数据库
  • 没有任何数据上传到 AionUi 服务器
  • 数据库位置:macOS ~/Library/Application Support/AionUi/

常见问题速查

问题解决方案
AI 没有检测到已安装的 Claude Code检查 claude 是否在 PATH 里,或在 Settings → ACP → 手动指定 CLI 路径
WebUI 远程无法访问检查防火墙是否放行 25808 端口;云服务器检查安全组规则
WebUI 忘记密码aionui --resetpass(会生成新随机密码并打印到终端,所有旧 Token 失效)
端口 25808 被占用kill $(lsof -t -i:25808) 后重启;或用环境变量 AIONUI_PORT=8081 换端口
服务器部署找不到显示器需安装 Xvfb:apt install xvfb,启动加 xvfb-run 前缀
Claude 连接失败提示 npx 错误AionUi 会自动尝试清除 npm 缓存后重试;手动清除可运行 npm cache clean --force
定时任务没有触发检查电脑是否休眠;AionUi 有 Keep-awake 机制,但需要程序处于运行状态
提交 PR 后 CI 失败本地跑 prek run --from-ref origin/main --to-ref HEAD + bunx vitest run 排查

项目目录速查手册

仓库根目录
│
├── src/                  ← 所有源代码
│   ├── renderer/         ← React UI(不能用 Node.js API)
│   ├── process/          ← Main 进程业务(不能用 DOM API)
│   ├── common/           ← 跨进程共享代码
│   └── preload/          ← IPC 安全桥接
│
├── docs/                 ← 技术文档中心
│   ├── tech/             ← 架构图、ACP状态机、性能分析
│   ├── feature/          ← 功能设计文档(ACP重构、扩展市场等)
│   ├── design/           ← UX/交互设计文档
│   ├── conventions/      ← 代码规范(目录命名、PR自动化)
│   ├── superpowers/      ← 高级功能规格说明
│   ├── development.md    ← 开发环境搭建(★ 新人必读)
│   ├── WEBUI_GUIDE.md    ← WebUI 完整配置指南
│   ├── SERVER_DEPLOY_GUIDE.md ← Linux 服务器部署指南
│   └── CODE_STYLE.md     ← 代码风格规范
│
├── examples/             ← 扩展开发示例
│   ├── hello-world-extension/   ← 完整扩展示例(推荐参考)
│   ├── acp-adapter-extension/   ← 自定义 Agent 后端示例
│   ├── ext-feishu/              ← 飞书 Bot 扩展示例
│   └── ext-wecom-bot/           ← 企业微信 Bot 示例
│
├── tests/                ← 测试文件(镜像 src/ 结构)
├── .aionui/              ← 内部功能开发文档
├── CONTRIBUTING.md       ← 贡献指南(★ 提 PR 前必读)
├── CONTRIBUTING.zh.md    ← 贡献指南中文版
├── CLAUDE.md             ← Claude Code 开发规范
├── AGENTS.md             ← Codex 开发规范
└── Dockerfile            ← 容器化部署

技术选型一览(为什么这样选)

技术为什么选它
Electron跨平台桌面 + 内置 Node.js,文件系统操作无需额外权限
React 19最新并发特性,流式 AI 响应渲染性能好
Bun比 npm/yarn 快 25 倍的包管理,内置 SQLite 驱动,运行时比 Node 快
electron-viteHMR 热更新极快,开发体验接近普通 Web 项目
UnoCSS原子化 CSS,按需生成,打包体积小,支持自定义语义 token
better-sqlite3同步 API,不需要 async/await,代码简洁;本地数据无需网络
oxlint + oxfmtRust 实现,比 ESLint 快 50-100 倍、比 Prettier 快 30 倍,CI 不再是瓶颈
Vitest + Playwright统一的单测 + E2E 工具链,与 Vite 生态深度集成
croner比 node-cron 更精准的时区支持,防并发执行的 BusyGuard

写在最后

AionUi 是一个野心勃勃却脚踏实地的项目。它的代码量已经很大(4782 次提交、持续活跃),但工程质量相当高:严格的 Atomic PR 规范、完善的 CI 自动化、详尽的技术文档(包括 ACP 状态机分析、Claude 三层子进程链路追踪这种深度文档),这些都是一个严肃工程团队的标志。

对普通用户来说,AionUi 是目前最接近"把 AI 变成真正助手"的免费开源工具,特别是 Team Mode + 定时任务的组合,能做到很多付费工具都做不到的事。

对开发者来说,这是一个学习 Electron 架构、AI Agent 通信协议、多进程协调的绝佳真实项目。ACP 协议的设计、三层子进程嵌套的 Claude 连接链路、统一桥接 IPC 和 WebSocket 的 Bridge 模式,都是值得研究的工程实践。

对贡献者来说,项目有活跃的中英文社区(Discord + 微信群),maintainer 响应快,Bot 自动化做得很好,是参与开源贡献体验较好的项目之一。


📌 本文参考资料(均来自仓库官方文档)

  • docs/tech/architecture.md — 架构总览
  • docs/tech/acp-detector.md — ACP 检测与 Claude 连接完整链路
  • docs/tech/queue-and-acp-state.md — 命令队列与 ACP 状态机
  • docs/design/agent-team-guide-flow.md — Team Mode 设计流程
  • docs/development.md — 开发环境指南
  • docs/WEBUI_GUIDE.md — WebUI 配置指南
  • docs/SERVER_DEPLOY_GUIDE.md — 服务器部署指南
  • docs/conventions/file-structure.md — 文件结构规范
  • CONTRIBUTING.md — 贡献指南
  • examples/hello-world-extension/ — 扩展开发示例
  • readme.md — 项目主文档