内容
<p align="center">
<img src="public/banner.jpg" width="100%" alt="Tower" />
</p>
<p align="center">
人工智能任务编排平台
</p>
<p align="center">
<b>English</b> | <a href="./README.zh.md">中文</a>
</p>
人工智能任务编排平台 — 通过可视化看板管理、调度并执行 AI 辅助开发任务。
将终端、代码编辑器、文件树、实时预览和 MCP 工具链集成到全功能的 AI 开发工作流助手,适用于个人开发者。
## 快速开始
### 要求
- Node.js >= 22
- pnpm(推荐)
### 安装
全局安装 CLI 并在默认环回地址启动 Tower:
```bash
npm install -g @tower-org/cli
tower
```
源码开发:
```bash
git clone https://github.com/tower-org/tower.git
cd tower
pnpm install
# 配置环境
cp .env.example .env
# 默认使用 SQLite,无需额外设置
# 初始化数据库
pnpm db:push
pnpm db:seed
pnpm db:init-fts
# 启动开发服务器
pnpm dev
```
在浏览器中打开 http://localhost:3000。
### 生产构建
```bash
pnpm build
pnpm start
```
生产环境默认绑定到 `127.0.0.1`。仅在需要远程访问时,使用 `pnpm start -- --host 0.0.0.0` 或显式指定局域网地址。
## 核心概念
```
工作空间(Workspace)
├── 项目(Project)
│ └── 任务(Task)
│ ├── 标签(Label)
│ ├── 执行(Execution)
│ └── 消息(Message)
└── 标签(Label)(共享)
```
- **工作空间(Workspace)** — 项目和共享标签的顶级容器
- **项目(Project)** — 链接到 Git 仓库和/或本地路径;类型为 NORMAL 或 GIT
- **任务(Task)** — 在看板中以卡片形式显示的工作项,按状态分组
## 功能
### 看板
- 任务卡片在列之间拖拽(TODO → 进行中 → 评审中 → 已完成)
- 右键上下文菜单:更改状态、启动执行、查看详情
- 搜索框支持模糊匹配任务标题和描述
- 优先级:低 / 中 / 高 / 关键
- 自定义标签及颜色
### 任务工作台
任务详情页左侧为终端面板,右侧为三标签工作区:
#### 终端
- 基于 xterm.js + node-pty 的浏览器终端
- 完整的 ANSI 渲染(颜色、进度条、光标移动)
- 通过终端插槽启动 Claude Code、Codex CLI、Gemini CLI 或启用的第三方 CLI
- 会话创建前显式有序回退;会话启动后连接/模型保持固定
- 直接向选定 CLI 输入键盘交互
- 自动同步终端尺寸
- 无需重新连接即可恢复会话
#### 文件浏览器(文件)
- 工作树目录结构的树形视图
- 自动 gitignore 过滤
- Git 状态徽章(M/A/D)
- 上下文菜单:创建文件/文件夹、重命名、删除
- 执行过程中自动刷新
#### 代码编辑器
- Monaco 编辑器(与 VS Code 相同引擎)
- 语法高亮:TypeScript、JavaScript、Python、JSON、YAML、CSS、HTML、Markdown、Prisma
- 多标签编辑,支持 Ctrl+S 保存
- 未保存文件指示器
- 随主题切换暗黑/亮色模式
#### 变更
- 任务分支与基准分支的差异视图
- 合并确认工作流
#### 预览
- 启动前端开发服务器(例如 `npm run dev`)
- 内嵌 iframe 预览
- 根据命令模式自动检测预览 URL
- 文件保存时自动刷新
- 离开页面时自动停止开发服务器
### 任务执行生命周期
```
创建任务 → 点击执行 → TODO 自动转为进行中
→ 选择的 CLI 在终端运行 → 完成(退出 0)→ 评审中
→ 人工评审 → 通过 → 已完成 / 失败 → 重新执行
```
- 执行时自动创建 Git 工作树(如果设置了基准分支)
- 配置后在完成时发送飞书通知
- 失败时任务保持进行中以便重试
### 项目管理
- 选择本地文件夹时自动检测 Git 远程并填充 gitUrl
- 项目类型:前端 / 后端(控制预览可用性)
- Git 路径映射规则:通过主机 + 所有者自动解析本地路径
### 任务调度
- `/missions` 仪表盘监控所有工作空间中正在运行的任务执行,内嵌实时终端
- 网格布局预设(1×1 … 3×3)本地持久化;工作空间筛选下拉菜单
- **启动任务** 打开搜索对话框 — 模糊搜索任务、按工作空间 → 项目浏览,或从最近任务中选择;启动新任务或恢复上一会话
- 双重导航:*输入* 模式(输入到面板)和 *导航* 模式(居中面板选择器,快捷键 `1–9 / A–Z`),按 `Ctrl+;` 切换
### AI 工具和助手
- 连接上方,五个能力槽下方:终端、摘要、构思、分析、助手
- 内置 Claude/Codex/Gemini CLI 连接,以及 OpenAI、OpenAI 兼容、Anthropic 和 Google API 连接
- Tower 独有的多轮助手会话,支持 SSE、附件、Tower 工具、取消和按需导入旧版 Claude
- 显式主/备用目标仅在首次活动前切换;API 连接支持健康的轮询
- 参考 [AI 工具 0.3](./docs/zh/guide/ai-tools.md)、[升级指南](./docs/zh/guide/upgrade-0.3.md) 和 [CLI 提供商 SDK](./docs/zh/guide/cli-provider-sdk.md)
### 版本时间线
- 按项目版本分组任务,发布后按版本评审;未版本化任务保留在待办列表中
### 备注和资产
- 项目备注(全文可搜索)和资产上传(文件、图片、粘贴截图),可在 UI 或通过 MCP 工具管理
### 设置
| 类别 | 选项 |
|----------|---------|
| 通用 | 主题(暗黑/亮色/系统),语言(中文/英文),默认终端应用 |
| 终端 | WebSocket 端口,空闲超时 |
| 系统 | 上传限制、并发、Git 超时、搜索参数 |
| AI 工具 | CLI/API 连接、模型、五个能力槽、CLI 插件 |
| CLI 配置文件 | 兼容旧版 CLI 命令、参数、环境变量 |
| 提示 | 自定义智能体提示模板 |
| 智能体 | 智能体配置管理 |
| Git 规则 | 路径映射规则(主机/所有者 → 本地路径) |
### 国际化
支持中文和英文,在设置中切换。
## MCP 集成
Tower 暴露 MCP 服务器,供外部 AI 代理使用:
```json
{
"mcpServers": {
"tower": {
"command": "npx",
"args": ["tsx", "<project-root>/src/mcp/index.ts"]
}
}
}
```
### 可用工具(35)
| 类别 | 工具 |
|----------|-------|
| 工作空间 | list_workspaces, create_workspace, update_workspace, delete_workspace |
| 项目 | list_projects, create_project, update_project, delete_project |
| 任务 | list_tasks, create_task, update_task, move_task, delete_task, set_task_defaults, list_versions |
| 标签 | list_labels, create_label, delete_label, set_task_labels |
| 搜索 | search(全局搜索任务/项目/仓库) |
| 知识 | identify_project, ask_project_knowledge, manage_project_facts |
| 备注/资产 | manage_notes, manage_assets |
| 终端 | start_task_execution, get_task_terminal_output, send_task_terminal_input, get_task_execution_status, stop_task_execution, resume_task_execution |
| 报告 | daily_summary, daily_todo |
## 开发命令
```bash
pnpm dev # 启动开发服务器(Webpack 模式 — node-pty 需要)
pnpm build # 生产构建
pnpm test # 运行测试(监听模式)
pnpm test:run # 运行测试(单次运行)
pnpm db:push # 同步 Prisma 架构到数据库
pnpm db:seed # 种子初始化数据
pnpm db:studio # 打开 Prisma Studio(数据库 GUI)
pnpm db:init-fts # 初始化全文搜索索引
pnpm mcp # 启动 MCP 服务器(独立进程)
```
## 技术栈
- **框架**:Next.js 16(应用路由器)
- **语言**:TypeScript
- **数据库**:SQLite(Prisma ORM)
- **终端**:node-pty + xterm.js + WebSocket
- **编辑器**:Monaco 编辑器
- **样式**:TailwindCSS 4
- **拖拽**:dnd-kit
- **测试**:Vitest
## 环境变量
| 变量 | 描述 | 默认值 |
|----------|-------------|---------|
| DATABASE_URL | 数据库连接字符串 | `file:./prisma/dev.db`(SQLite) |
| PORT | 服务器端口 | 3000 |
| TOWER_DATA_DIR | 生产环境数据目录 | `~/.tower` |
<!-- 内部备注(TODO、陷阱)已移动到 .notes/(gitignored) -->