项目简介
Schaltwerk 是一款专为 AI 编码代理设计的桌面应用,它提供了一个直观的界面,用于管理和协调多个 AI 代理在 Git 项目中的开发工作流。通过利用 Git worktree 进行任务隔离和规范驱动的开发模式,Schaltwerk 能够高效地支持并发任务和实时代码审查。其内置的 Model Context Protocol (MCP) 服务器使得外部 LLM 客户端(如编排器代理)能够以标准化的方式与 Schaltwerk 进行交互,调用其提供的工具和访问资源,从而实现更高级别的 AI 代理自动化和编排能力。
主要功能点
- AI 代理会话管理: 全面控制 AI 编码代理(例如 GitHub Copilot CLI、Claude Code 等)的生命周期。您可以创建、列出、启动、取消、暂停和恢复独立的开发会话,每个会话都拥有自己的隔离环境。
- 规范 (Spec) 管理: 将 AI 代理的任务或指令以 Markdown 格式的“规范”进行定义和管理。支持创建、编辑、读取和删除这些规范,并能直接从规范启动 AI 代理,实现任务的规划与执行解耦。
- Git 工作流集成: 为每个 AI 代理会话自动创建和管理独立的 Git 工作区及分支,确保代码更改的隔离性。提供查看代码变更摘要、详细差异,以及将已审查的会话合并到主分支或创建 Pull Request 的功能。
- 多代理编排: 作为 MCP 服务器,允许一个 LLM 代理(编排器)通过调用 Schaltwerk 的工具来控制和协调其他多个 AI 编码代理,实现复杂的自动化开发流程。
- 代码审查与会话状态: 支持对 AI 代理生成的代码进行 GitHub 风格的实时差异审查。会话可以被标记为“已审查”,表示其代码已准备好进行合并,并能在“活跃”和“规范”状态之间进行转换。
安装步骤
Schaltwerk 应用(包含 MCP 服务器)主要通过 Homebrew 进行安装。
-
系统要求: 确保您的系统满足以下条件:
- macOS 11+ (Big Sur 或更高版本)
- Git 2.30+
- 至少安装一个您想使用的 AI 编码命令行工具,例如 GitHub Copilot CLI, Claude Code, OpenCode, Qwen, Amp 等。
-
安装命令: 打开终端,运行以下 Homebrew 命令:
brew install --cask 2mawi2/tap/schaltwerk && open -a Schaltwerk -
首次启动: 首次启动 Schaltwerk 时,macOS 可能会因为应用未经过 Apple 开发者认证而显示安全警告。请按照以下步骤解除阻止:
- 尝试打开 Schaltwerk 应用程序(系统将阻止其运行)。
- 打开“系统设置”→“隐私与安全性”。
- 在窗口底部找到“Schaltwerk 已被阻止使用”或类似的消息。
- 点击旁边的“仍要打开”按钮,并根据提示确认。 此操作仅需执行一次,之后应用即可正常启动。
服务器配置(供 MCP 客户端使用)
MCP 客户端需要配置以下信息才能连接到 Schaltwerk MCP 服务器。Schaltwerk 服务器会根据项目路径自动计算并尝试多个端口。
{ "server_name": "schaltwerk-mcp-server", "command": "node", "args": [ "/Applications/Schaltwerk.app/Contents/Resources/app.asar.unpacked/mcp-server/src/schaltwerk-mcp-server.ts" ], "env": { "SCHALTWERK_PROJECT_PATH": "/Users/youruser/Projects/my_project_repo" }, "description": "连接到 Schaltwerk 应用程序的 Model Context Protocol (MCP) 服务器,用于管理 AI 代理会话和代码工作流。" }
配置信息注释:
- 'server_name': MCP 服务器的唯一标识符。
- 'command': 启动 MCP 服务器的命令,这里是 'node'。
- 'args': 传递给 'command' 的参数。'schaltwerk-mcp-server.ts' 是实际 MCP 服务器脚本的路径。请将上述示例路径 '/Applications/Schaltwerk.app/Contents/Resources/app.asar.unpacked/mcp-server/src/schaltwerk-mcp-server.ts' 替换为您实际 Schaltwerk 应用安装后该文件的准确路径。通常,它位于 'Schaltwerk.app' 应用程序包内部的 'Contents/Resources/app.asar.unpacked/mcp-server/src/' 目录。
- 'env': 环境变量,用于向服务器传递上下文信息。'SCHALTWERK_PROJECT_PATH' 必须 设置为您希望 Schaltwerk 管理的 Git 项目的根目录(例如,您的代码仓库的顶层目录)。这有助于服务器正确识别项目并管理相关的 AI 代理会话。
- 'description': 服务器功能的简要描述。
基本使用方法
一旦 MCP 客户端成功连接到 Schaltwerk MCP 服务器,您就可以通过调用服务器注册的工具和访问其资源来编排 AI 代理的工作流:
-
列出当前所有 AI 代理会话: 调用 'schaltwerk_list' 工具。例如,您可以通过 JSON 格式获取会话详情:
// LLM 客户端调用 call_tool("schaltwerk_list", {"json": true, "filter": "all"}) -
创建一个新的 AI 代理任务 (会话): 使用 'schaltwerk_create' 工具,为 AI 代理分配一个具体的开发任务。
// LLM 客户端调用 call_tool("schaltwerk_create", { "name": "implement-user-auth", "prompt": "实现一个基于 OAuth2 的用户身份验证模块,包括前端登录页面和后端 API 接口。", "agent_type": "claude", "base_branch": "main" }) -
创建并完善任务规范 (Spec): 在启动代理前,您可以先创建和修改一个 Markdown 格式的“规范”来详细规划任务。
- 创建规范:
// LLM 客户端调用 call_tool("schaltwerk_spec_create", { "name": "refactor-api-errors", "content": "# Refactor API Error Handling\n\n- Standardize error response format.\n- Implement centralized error logging." }) - 更新规范内容(追加或替换):
// LLM 客户端调用 call_tool("schaltwerk_draft_update", { "session_name": "refactor-api-errors", "content": "\n- Add specific error codes for common scenarios.", "append": true })
- 创建规范:
-
从规范启动 AI 代理: 当任务规范已准备就绪时,将其转换为一个活跃的 AI 代理会话。
// LLM 客户端调用 call_tool("schaltwerk_draft_start", { "session_name": "refactor-api-errors", "agent_type": "opencode" }) -
查看代码差异: 获取 AI 代理所做代码更改的摘要和详细差异,以便进行审查。
- 获取文件更改摘要:
// LLM 客户端调用 call_tool("schaltwerk_diff_summary", {"session": "implement-user-auth"}) - 获取特定文件的详细差异:
// LLM 客户端调用 call_tool("schaltwerk_diff_chunk", {"session": "implement-user-auth", "path": "src/auth_service.py"})
- 获取文件更改摘要:
-
标记会话为已审查: 在代码审查并确认更改无误后,将任务会话标记为“已审查”,表示它已准备好合并。
// LLM 客户端调用 call_tool("schaltwerk_mark_session_reviewed", {"session_name": "implement-user-auth"}) -
合并代码或创建 Pull Request: 将审查后的代码合并到父分支,或创建一个 GitHub Pull Request。
- 合并会话:
// LLM 客户端调用 (例如,执行 squash 合并) call_tool("schaltwerk_merge_session", { "session_name": "implement-user-auth", "mode": "squash", "commit_message": "feat: implement user authentication via OAuth2" }) - 创建 Pull Request:
// LLM 客户端调用 call_tool("schaltwerk_create_pr", { "session_name": "implement-user-auth", "options": { "default_branch": "develop", "commit_message": "feat: initial user auth", "cancel_after_pr": true } })
- 合并会话:
-
取消会话: 如果任务不再需要,删除会话及其 Git 工作区和分支。对于包含未提交更改的会话,需要谨慎操作。
// LLM 客户端调用 (强制取消,会丢失未提交工作) call_tool("schaltwerk_cancel", {"session_name": "stale-feature-branch", "force": true})
信息
分类
开发者工具