内容
# 多终端
一个用于运行和协调多个 Claude Code 终端会话的 Windows 桌面应用程序(.NET 8 / WinForms / WebView2)——具有看板任务板、终端间消息传递、每个任务的 Git 隔离、机构记忆和手机访问功能。
## 功能
- **多个终端会话**:在停靠的选项卡界面中运行多个 Claude Code 实例
- **看板任务工作流**:认领 → 计划 → 检查清单(编码/测试/完成)→ 继续注释,并带有帮助程序和审查流程
- **终端间消息传递**:Claude 实例通过 MCP 工具和应用内的聊天相互通信(以及与您)
- **Git 工作树隔离**:每个任务/代理都有自己的工作树,在完成后自动合并和修剪
- **多连接(手机访问)**:通过私有 Tailscale 网络从手机访问任务和终端
- **存在感知路由**:毫米波 + 手机蓝牙存在检测将代理问题路由到桌面或手机
- **代码智能**:基于 Roslyn 的代码图(符号、调用者/被调用者、影响分析)和自动生成的子系统 wiki
- **机构记忆**:可查询的知识库 + 可搜索的会话历史/血统
- **会话持久性**:在重启期间恢复会话并保持身份
- **启动上下文注入**:在会话启动时为终端提供自动任务/计划上下文
## 文档
完整的文档作为本地 HTML 站点随应用程序一起提供,位于 [`docs/html/`](docs/html/index.html) 下。可以通过工具栏中的 **帮助** 按钮(❓)随时打开,位于历史记录的右侧。
亮点:
[快速入门](docs/html/getting-started.html) ·
[看板工作流](docs/html/kanban-workflow.html) ·
[Git 工作树](docs/html/worktrees.html) ·
[多连接(手机)](docs/html/multi-connect.html) ·
[存在传感器](docs/html/presence.html) ·
[代码图](docs/html/code-graph.html) ·
[故障排除/常见问题](docs/html/troubleshooting.html)
## 计划系统概述
> **注意:** 以下部分(计划系统和 MCP 工具参考)描述了原始的以计划为中心的 workflow 和早期工具集。日常工作现在以 **看板任务工作流** 为中心 - 请参阅 [`docs/html/kanban-workflow.html`](docs/html/kanban-workflow.html) 和 [MCP 工具](docs/html/mcp-tools.html) 参考,了解当前界面。
计划系统使多个 Claude 终端能够协同工作,以实现共同目标。计划通过定义的阶段进行,具有团队分配和决策跟踪。
### 核心概念
**计划** 跟踪从开始到结束的目标:
- **标题和描述**:计划要实现的目标
- **内容**:详细的实现细节
- **负责人**:负责协调的终端
- **状态**:`draft`、`active`、`paused`、`completed`、`abandoned`
**阶段** 代表工作流阶段:
- `design` - 规划和架构
- `coding` - 实现
- `testing` - 验证和质量保证
- `completed` - 完成
每个阶段都可以有一个 **检查清单** 以跟踪进度。
**分配** 将终端链接到计划:
- **角色**:`leader` 或 `member`
- **任务摘要**:终端正在处理的内容
- **状态**:`assigned`、`in_progress`、`blocked`、`done`
**决策** 记录在执行过程中做出的重要选择,以便于未来的参考。
### 工作流示例
1. 负责人使用 `create_plan` 创建计划
2. 通过 `assign_terminal` 分配终端
3. 工作开始,分配进入 `in_progress` 状态
4. 负责人使用 `update_phase` 推进阶段
5. 使用 `record_decision` 记录决策
6. 检查清单项跟踪阶段完成情况
7. 当所有阶段完成后,计划完成
### 启动上下文
当终端启动时,它会自动接收:
- 活动计划标题、阶段及其分配
- 阶段检查清单项
- 最近的池活动(共享学习)
这使终端能够在具有完整上下文的情况下继续工作。
## MCP 工具参考
多终端 MCP 服务器在三个类别中公开工具:**消息传递**、**计划管理** 和 **任务管理**。
### 消息传递工具
#### `register_terminal`
注册此终端用于消息传递。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `name` | 字符串 | 是 | 友好名称(例如,“爱丽丝”,“鲍勃”) |
| `doc_id` | 字符串 | 是 | 来自 `$env:MULTITERMINAL_DOC_ID` 的值 |
#### `list_terminals`
列出所有已注册的终端以进行消息传递。
*无参数*
返回:`{id, name, docId}` 数组
#### `send_message`
向另一个终端发送消息。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `from_terminal_id` | 字符串 | 是 | 您的终端 ID(来自注册) |
| `to` | 字符串 | 是 | 目标终端名称或 ID |
| `message` | 字符串 | 是 | 消息内容 |
#### `get_messages`
获取发送到您的终端的待处理消息。消息在检索后会被删除。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `terminal_id` | 字符串 | 是 | 您的终端 ID |
#### `broadcast`
向所有其他已注册的终端广播消息。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `from_terminal_id` | 字符串 | 是 | 您的终端 ID |
| `message` | 字符串 | 是 | 要广播的消息 |
#### `get_resume_session`
获取用于恢复终端身份的 Claude Code 会话 ID。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `name` | 字符串 | 是 | 身份名称 |
| `project_path` | 字符串 | 否 | 项目路径(默认为当前工作目录) |
#### `list_identities`
列出项目的所有已知终端身份。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `project_path` | 字符串 | 否 | 项目路径(默认为当前工作目录) |
---
### 计划管理工具
#### `create_plan`
使用阶段创建新计划。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `title` | 字符串 | 是 | 计划标题 |
| `description` | 字符串 | 否 | 详细目标描述 |
| `content` | 字符串 | 否 | 完整实现细节 |
| `leader_id` | 字符串 | 否 | 领导者的终端名称 |
| `set_active` | 布尔值 | 否 | 立即设置为活动状态(默认:true) |
#### `get_active_plan`
获取具有阶段和分配的当前活动计划。
*无参数*
返回:计划信息、具有检查清单的阶段、分配、最近的决策
#### `set_active_plan`
将现有计划设置为活动计划。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 要激活的计划 ID |
#### `list_plans`
列出具有状态的所有计划。
*无参数*
返回:具有活动/草稿/完成计数的计划数组
#### `update_phase`
推进或更改计划的当前阶段。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `new_phase` | 字符串 | 是 | 阶段:`design`、`coding`、`testing`、`completed` |
#### `add_checklist_item`
向阶段添加新的检查清单项。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `phase` | 字符串 | 是 | 阶段名称 |
| `item_text` | 字符串 | 是 | 检查清单项文本 |
#### `update_checklist_item`
更新检查清单项(标记为完成/未完成)。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `phase` | 字符串 | 是 | 阶段名称 |
| `item_index` | 整数 | 是 | 项索引(基于 0) |
| `done` | 布尔值 | 是 | 项是否完成 |
---
### 分配工具
#### `assign_terminal`
将终端分配给计划中的角色/任务。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `terminal_name` | 字符串 | 是 | 要分配的终端名称 |
| `role` | 字符串 | 否 | `leader` 或 `member`(默认:member) |
| `task_summary` | 字符串 | 否 | 分配任务的摘要 |
#### `get_my_assignment`
获取在活动计划中的分配。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `terminal_name` | 字符串 | 是 | 您的终端名称 |
返回:计划信息、当前阶段、您的分配详细信息
#### `update_assignment_status`
更新分配的状态。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `terminal_name` | 字符串 | 是 | 要更新的终端名称 |
| `status` | 字符串 | 是 | `assigned`、`in_progress`、`blocked`、`done` |
| `blocked_by` | 字符串 | 否 | 阻止的内容(如果状态为 `blocked`) |
---
### 决策记录
#### `record_decision`
记录在计划执行过程中做出的决策,以便于未来的参考。
| 参数 | 类型 | 必需 | 描述 |
|-----------|------|----------|-------------|
| `plan_id` | 字符串 | 是 | 计划 ID |
| `phase` | 字符串 | 是 | 做出决策时的阶段 |
| `decision_text` | 字符串 | 是 | 决策 |
| `rationale` | 字符串 | 否 | 为什么做出该决策 |
| `decided_by` | 字符串 | 否 | 决策者的终端名称 |
## 架构
```
MultiTerminal/
├── MCPServer/
│ ├── MultiTerminalMcpServer.cs # HTTP MCP 服务器主机
│ ├── Models/
│ │ ├── Plan.cs # 计划、计划阶段、计划分配、计划决策
│ │ ├── Message.cs # 终端间消息
│ │ └── TerminalInfo.cs # 终端注册
│ ├── Services/
│ │ ├── MessageBroker.cs # 消息路由
│ │ ├── PoolCoordinator.cs # 共享内存/学习
│ │ └── SessionDiscovery.cs # 会话 ID 发现
│ └── Tools/
│ ├── MessagingTools.cs # 消息传递 MCP 工具
│ ├── PlanTools.cs # 计划管理 MCP 工具
│ └── TaskTools.cs # 看板任务工具
├── Services/
│ ├── SessionDatabase.cs # SQLite 用于会话/身份
│ └── PlanDatabase.cs # SQLite 用于计划/阶段/分配
└── Terminal/
└── TerminalDocument.cs # 终端 UI 托管
```
## 配置
MCP 服务器默认在 `http://localhost:5050/mcp` 上运行。
在 `~/.claude/settings.json` 或项目的 `.claude/settings.json` 中配置 Claude Code 以使用多终端 MCP 服务器:
```json
{
"mcpServers": {
"multiterminal": {
"url": "http://localhost:5050/mcp"
}
}
}
```
## 许可证
详见 LICENSE 文件。