基于 Claude Code 的多 Agent 协作工作站
Nexora 是一个现代化的 AI 协作平台,通过频道(Channel)驱动多个 Agent 协同工作,帮助团队高效完成复杂任务。
实时查看 Token 使用量、费用统计、Agent 活跃度和任务状态。
191 个预设 Agent 角色,涵盖设计、工程、产品、运营等多个领域。
多 Agent 在频道中实时协作,通过 @mention 调用,支持任务编排和委托。
- 频道驱动:每个频道独立上下文,支持多人多 Agent 实时协作
- 角色分工:PM、程序员、测试等专业角色,各司其职
- 智能路由:通过 @mention 或自动推理分配任务给合适的 Agent
- 双向同步:飞书群消息自动进入 Nexora,Agent 回复自动推送飞书
- 无缝协作:在飞书中 @机器人 即可触发 Agent,无需切换工具
- 群聊同步:支持多个飞书群绑定不同频道
- 目录隔离:每个频道可绑定项目目录,Agent 操作受限于该目录
- 上下文注入:自动加载项目的
CLAUDE.md和PROJECT.md - 安全边界:防止 Agent 访问项目外的敏感文件
- 纯文件系统:JSONL + Markdown + YAML,无需数据库
- 易于备份:所有数据可直接用 Git 管理
- 透明可读:文件格式清晰,便于调试和审计
- 任务规划:复杂任务自动拆解为子任务
- 推理路由:LLM 智能判断最佳 Agent 人选
- 反思系统:Agent 自动沉淀技能和经验
- Bun >= 1.0
- Claude Code CLI — 已安装并可用
# 克隆仓库
git clone https://github.com/xuliuzhe/Nexora.git
cd Nexora
# 安装依赖
bun install注意:首次克隆后,
agents/和data/目录是空的(已在 .gitignore 中)。系统会在启动时自动创建默认频道#all。
# 启动后端(端口 3000)
bun run dev
# 启动前端(端口 5173,新开终端)
bun run dev:web访问 http://localhost:5173 即可开始使用 🎉
- 点击侧边栏 Channels 旁的
+按钮 - 填写频道名称(如
#frontend) - 选择要加入的 Agent 成员
- (可选)绑定项目目录和飞书群
- 点击侧边栏 Agents 旁的
+按钮 - 填写基本信息:
- Name:Agent 标识符(英文,如
coder) - Display Name:显示名称(如
程序员) - Description:简短描述
- Model:执行层级(cheap/standard/expensive)
- Name:Agent 标识符(英文,如
- 选择 Tools(Read、Edit、Write、Bash、Glob、Grep)
- 编辑
AGENT.md定义角色指令
方式 1:@mention
@coder 帮我修复登录页面的 bug
方式 2:多 Agent 链式调用
@coder 修复完后 @tester 跑一下测试
方式 3:DM(私聊)
- 创建 DM 频道,直接对话无需 @
勾选 "As Task" 或使用链式关键词(然后/之后/完成后)自动创建任务:
@coder 实现用户登录功能,完成后 @tester 写测试用例
系统会自动拆解为:
- Task #1:实现用户登录功能(指派给 coder)
- Task #2:写测试用例(指派给 tester,依赖 #1)
访问 http://localhost:5173/settings 配置以下功能:
| 功能 | 说明 | 需要配置 |
|---|---|---|
| 任务规划 | 自动拆解复杂任务为子任务 | cheap 模型 |
| 推理路由 | LLM 智能分配 Agent | cheap 模型 |
| 反思系统 | Agent 自动提取技能和记忆 | cheap 模型 |
配置示例:
在设置页面填入:
- Provider:
openai-compat或anthropic - Model:
gpt-4o-mini或claude-haiku-4-5 - API Key: 你的密钥
- Base URL: (可选)自定义 API 地址
npm install -g @larksuite/cli
npx skills add larksuite/cli -y -g# 初始化并创建应用
lark-cli config init
# 登录授权
lark-cli auth login --recommend- 进入 飞书开放平台
- 选择你的应用 → 事件订阅
- 订阅方式选择:使用长连接接收事件
- 添加事件:
im.message.receive_v1 - 开通权限:
im:message:receive_as_bot
在 Nexora 频道设置中填入:
- 飞书群 ID(群设置 → 群管理中获取,格式如
oc_xxxxxxxx)
重启服务后生效。在飞书群中 @机器人 发送消息即可触发 Agent。
nexora/
├── packages/
│ ├── server/ # 后端服务(Hono)
│ │ ├── src/
│ │ │ ├── services/ # AgentRunner + ChannelService
│ │ │ ├── storage/ # JSONL 文件存储
│ │ │ ├── feishu/ # 飞书集成
│ │ │ └── routes/ # HTTP API + WebSocket
│ ├── web/ # 前端 SPA(React 19 + Vite)
│ └── shared/ # 共享类型(Zod schemas)
├── agents/ # Agent 定义(YAML + Markdown)
├── data/ # 运行时数据
│ ├── channels/ # 频道消息(JSONL)
│ ├── tasks/ # 任务列表(JSONL)
│ ├── memory/ # 全局记忆(Markdown)
│ └── system/ # 系统设置(JSON)
└── .nexora/ # 废弃(配置已迁移到前端)
bun run dev # 启动后端
bun run dev:web # 启动前端
bun run test # 运行测试(386 个测试)
bun run typecheck # TypeScript 类型检查
bun run lint # Biome lint + format
bun run check # 完整质量门禁:lint + typecheck + testcd packages/server
bun test src/services/dispatcher.test.ts创建 agents/<name>/ 目录:
agents/my_agent/
├── agent.yaml # 配置
├── AGENT.md # 角色指令
└── memory/
└── MEMORY.md # Agent 个人记忆
agent.yaml 示例:
name: my_agent
displayName: 我的 Agent
description: Agent 简短描述
model: cheap
tools:
- Read
- Edit
- Write
- Bash
- Glob
- Grep
skills: []AGENT.md 示例:
你是一个专业的代码审查员,负责检查代码质量和规范。
## 工作流程
1. 阅读代码文件
2. 检查命名规范、注释完整性、边界处理
3. 输出审查报告
## 注意事项
- 重点关注安全漏洞(SQL 注入、XSS、命令注入)
- 代码风格参考项目根目录的 `.editorconfig`重启服务自动加载(访问 http://localhost:5173/settings 点击"重启服务")。
提示:查看 agents/EXAMPLES.md 获取更多示例。
用户消息 → ChannelService → dispatchMessage()
↓
路由规则(mention/dm/infer)
↓
executeAgentCore()
↓
Claude Agent SDK → Claude Code
↓
回复写入频道 → WebSocket 广播
- @mention:显式指定目标 Agent
- DM 频道:固定目标(
dmAgent) - 推理路由(可选):LLM 智能选择
- 兜底:频道第一个成员
每次执行调用 @anthropic-ai/claude-agent-sdk 的 query() 函数:
- permissionMode:
bypassPermissions(自动通过权限) - tools: Claude Code 内置工具(Read、Edit、Write、Bash、Glob、Grep)
- cwd: 频道绑定的
projectDir - maxTurns: 普通聊天 5 轮,委托任务 20 轮,Task 模式 30 轮
原则:文件即数据库,Git 即备份。
- JSONL:频道消息、任务列表(第一行
_meta存元数据) - Markdown:记忆系统(
§分隔条目) - YAML:Agent 定义、技能定义
- JSON:系统设置(单例文件)
所有写操作带文件锁,保证并发安全。
bun test
# 386 pass, 0 fail, 744 expect() calls测试覆盖:
- 单元测试:
services/,storage/,agent/ - 集成测试:
routes/,feishu/ - 边界测试:空输入、并发写入、文件锁
A: 检查:
- 后端是否在 3000 端口运行(
lsof -i :3000) - 前端是否正确 proxy 到 3000(
vite.config.ts) - 浏览器控制台是否有错误
A: 检查:
lark-cli auth status是否已登录- 飞书应用是否开启长连接事件订阅
- 频道是否正确绑定
chatId - 群聊是否 @了机器人(群聊需要 @触发)
A: 如果频道绑定了 projectDir,Agent 只能访问该目录内文件。检查:
- 文件路径是否在
projectDir内 projectDir路径是否正确(绝对路径)- 是否有读写权限
A: 检查:
- 前端
/settings是否已开启对应开关 - 是否配置了对应的 LLM(cheap 模型)
- 是否重启了服务(配置修改后需重启)
A: 删除 data/ 目录后重启服务:
rm -rf data/
bun run dev系统会自动创建默认频道 #all。
欢迎提交 Issue 和 Pull Request!
- 文件行数 ≤ 300,函数行数 ≤ 50
- 认知复杂度 ≤ 15,函数参数 ≤ 4
- TDD:先写失败测试 → 实现 → 确认通过
- YAGNI:不为假设需求建抽象
详见 CLAUDE.md。
- Claude Code — 强大的 AI 编程助手
- Anthropic — Claude Agent SDK
- 飞书开放平台 — 企业协作集成
Made with ❤️ by Nexora Team