mcpField
T
Tower

Tower

本地服务
rohanxmalik.github.ioAI 与智能体24 周前更新

关于 Tower

Tower 是一个 MCP 服务,用于协调不同机器和账户上共同处理一个仓库的编码 Agent。Agent 可声明编辑意图以检测冲突、委派任务、互发消息,并在共享看板跟踪工作。

主要功能

  1. 01按文件和符号声明编辑意图
  2. 02语义检测重复工作
  3. 03跨 Agent 委派任务与消息沟通
  4. 04共享看板展示声明、任务和消息
  5. 05后台 Worker 执行委派的编码任务
  6. 06用于提交检查的 Git hooks

适用场景

  1. 01避免多个 Agent 编辑同一符号
  2. 02将仓库任务委派给队友的 Agent
  3. 03在开始工作前发现研究内容重叠
  4. 04跟踪团队 Agent 活动与任务回复

MCP 相关

Tower 向 MCP 客户端提供协调工具,包括意图声明、消息和任务委派。它支持 Stdio 或 HTTP,并可协调不同厂商的 Agent。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rohanxmalik-tower": {
"command": "npx",
"args": [
"-y",
"tower-mcp"
]
}
}
}
启动命令npx -y tower-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmtower-mcp0.12.1

工具

20

收录的工具列表 · 更新于 2 周前

参数类型必填说明
repostring是
filesarray否
forceboolean否
readsarray否
branchstring是
repoIdstring否
agentIdstring是
purposestring否
symbolsarray否
projectIdstring否
etaMinutesinteger否

详细介绍

Tower 🗼

CI Node ≥22.13 License: MIT

让团队的 AI 编码 Agent 实现多人协作。

npm 上的 tower-mcp · 网站 · 文档 — 设置:npx -y tower-mcp setup

每一款出色的工作工具都走向了多人协作——Docs 击败了 Word,Figma 击败了 Photoshop。AI 仍是人人独自使用的工具:一个提示词、一个输入框、一个人。

Tower 是一个 MCP 服务,可将团队的编码 Agent——Claude Code、Cursor、Codex,它们运行在不同的机器和不同的账户上——变成 同一代码仓库中的一支团队。你的 Agent 可以将任务委派给队友的 Agent;对方的 Agent 用_自己的_令牌完成工作、提交代码,并返回提交哈希——任务、回复和提交哈希都会显示在 整个团队都能看到的共享看板上,而不再散落于成千上万条私人对话中。而且,由于每个人都会在编辑前声明意图, 不会有两个 Agent 在同一段代码上重复消耗令牌——冲突会在敲下第一个 字符前就被拦截,而不是等到合并时才发现。

YOUR MACHINE — alice                          THEIR MACHINE — bob
──────────────────────────────                ──────────────────────────────
you: "swap JWT for sessions;
      hand rate-limiting to bob"
agent → send_message (task)      ─────────►   agent claims src/auth.ts
                                              → "unreadMessages: 1" → fetch_messages
                                              (or: tower work accepted it, running claude…)
                                              → does the task, their machine/tokens
                                              → commits (hook completes the claim)
[DONE] bob → alice:              ◄─────────   → send_message (task_update)
"rate limit 30/min, merged in ab12f3"

Tower 实时看板——委派的任务、回复,以及一次避免的冲突

状态:**v0.12.1——项目尚处早期,正在公开开发。**以下所有功能目前都已端到端可用, 并通过 CI 强制执行的 80% 覆盖率门槛。已发布内容和后续计划: CHANGELOG.md · 设计文档:MVP-SPEC.md。

为什么需要 Tower

每家厂商都会为你的 Agent 提供工具和记忆;却没有人让你的 Agent 与队友的 Agent 连接起来。两个人、十个 Agent、一个代码库——Agent 之间看不到彼此, 无法交接工作,还会在同一文件上发生冲突,除了合并冲突之外什么也留不下。Tower 是缺失的协作层:一座所有 Agent 都能交流的共享塔楼。 它位于 git 之上,使用 MCP,但不会取代两者。它从设计上就与模型无关——只有当_其他厂商的_ Agent 也在其中时,协作才有意义。

你需要了解的六个词

词语在这里的含义
MCPAgent 调用外部工具的标准方式。Claude Code、Cursor 和 Codex 都支持它,因此 Tower 无需插件即可与它们配合使用
声明Agent 在编辑前说 “我即将编辑这些文件/函数”。这是核心操作
符号有名称的函数、类或方法 — 因此,两个 Agent 在同一个文件中编辑_不同_函数时,不会被视为发生冲突
硬 / 软hard = 相同符号 → 声明会被拒绝,并告知你可以改为处理什么(force 可覆盖)。soft = 同一文件中的不同符号,或另一个分支 → 系统会告知你,但你仍可继续
看板显示每个 Agent 的有效声明、任务和消息的网页
工作进程tower work — 在一台机器上运行的守护进程,可接收委派的任务并以无头模式运行编码 Agent

声明会自行过期(15 分钟 TTL,并通过心跳刷新),因此崩溃的 Agent 永远不会锁定文件 — 而且在线 Agent 的声明会自动延长,因此不会在任务进行中失效。

一个仓库意味着一个协作空间。 Tower 根据仓库的 root commit sha 对声明进行标识,所有克隆、分叉和镜像都共享此标识。因此,分叉仓库及其上游仓库可以相互协作,而 [email protected]:acme/app.git 和 https://github.com/Acme/App 指向同一个地方,而不是两个互不关联的群组。

30 秒快速体验

需要 Node 22.13+(它使用内置的 node:sqlite,因此无需编译)。 无需安装任何东西,也不会向磁盘写入任何内容:

npx -y tower-mcp demo

这会打开一个浏览器标签页,显示实时看板,其中预置了一个真实的硬冲突和一个已完成的委派任务:

Tower demo is live → http://localhost:52410/board#token=demo

What you're seeing: alice and bob both claimed AuthService.verify — a HARD
collision caught before either wrote a line. Below it: a delegated task with
bob's reply + commit, a broadcast still waiting, and a pinned team rule.
Ctrl+C stops the demo (nothing was written to disk).

没成功?npx -y tower-mcp doctor 会检查 Node、git、你的运行器和服务端,并准确指出缺少什么。

更喜欢仅使用终端的演示?(需要克隆仓库)
npm run demo    # after: git clone … && npm install
⛔ COLLISION — AuthService.verify
   Agent "cursor-bob" is mid-change (started 2s ago, ETA ~6m, purpose: replace JWT).
   Options:
     [w] wait      — no need to retry: Tower messages you when their claim ends
     [d] dependent — run: tower next-task  (a module that's safe to start now)
     [b] branch    — build on their WIP instead of racing them
     [f] force     — re-run guard with --force; you own the merge risk
## 在你的仓库中安装

setup 写入的内容——全部都在你的仓库中,不会写入全局位置,也不会发起任何你未配置的网络调用:

路径内容
.mcp.jsontower 服务条目(与现有服务合并)
CLAUDE.md追加先声明规则(如果文件不存在则创建)
AGENTS.md追加相同规则——仅当文件已存在时
.tower/本地 SQLite 状态(声明、消息、任务)。可安全删除
.gitignore追加 .tower/,以免提交本地数据库
.git/hooks/pre-commit, post-commit仅在使用 --hooks 时
npx -y tower-mcp setup

重新加载编辑器——完成。添加 --keep-going 后,写入的规则会指示 Agent 绕开冲突,而不是停下来询问你(参见无人等待)。要加入团队服务端?

npx -y tower-mcp setup --url https://tower-xxxx.onrender.com/mcp --token <team-secret> --hooks
setup 的操作 / 手动配置

setup 会将 tower 条目写入 .mcp.json(与现有服务合并),将先声明 + 检查收件箱规则追加到 CLAUDE.md(以及存在时的 AGENTS.md),并在使用 --hooks 时安装 git 提交前/后保护钩子。手动配置方法:

// Claude Code — .mcp.json
{
  "mcpServers": {
    "tower": { "command": "npx", "args": ["-y", "tower-mcp", "serve"] },
  },
}
npx -y tower-mcp init      # writes .tower/policy.yaml + prints MCP setup
npx -y tower-mcp serve     # MCP over stdio (or: serve --http --port 4319 --token <secret>)
从源代码安装(贡献者)
git clone https://github.com/Rohanxmalik/Tower && cd Tower
npm install && npm run build
node packages/cli/dist/index.js serve

然后将以下内容添加到 Agent 的规则文件中:

“编辑任何文件之前,请调用 claim_intent,并提供你要修改的文件和符号。 如果返回 hard 冲突,请停下来询问用户;响应中的 alternatives 会说明此时可以安全处理哪些内容。”

完整安装说明 → docs/quickstart.md。

跨机器委派工作(核心循环)

两个人、两台机器、两个账户——同一个仓库。这就是 Tower 的用途:

  1. 委派——告诉你的 Agent:“把限流工作交给 bob”(也可以根据你的规则由它自行决定);它会调用 send_message,并设置 kind: "task"。也可以在任意终端中手动操作:tower send(按提示选择对象并描述任务;身份和仓库信息来自 git)。
  2. 接手——下次 bob 的 Agent 使用 Tower 时(调用任意一次 claim_intent),响应会显示 unreadMessages: 1;规则文件会指示它调用 fetch_messages 并采取行动。消息以收件箱方式送达——MCP 没有推送通道——因此这是异步的,类似 Slack,而不是打电话。**也可以让它始终在线:**在 bob 的机器上运行 tower work 后,任务会自动接手——工作进程接受任务,并在后台运行本地 Agent,无需编辑器。
  3. **完成工作——在对方的机器上,使用对方的账户。**Bob 的 Agent 会认领文件(避免其他人和它冲突),并使用 bob 的令牌和 git 身份编写代码。API 密钥绝不会跨机器传输。
  4. 提交并完成闭环——提交时,git 的 post-commit 钩子会使用 sha 完成认领;Agent 会回复 send_message { kind: "task_update", replyTo: <task> }:“/login 的限流设为每分钟 30 次,已合并到 ab12f3。” 你的 Agent 下次连接时就会看到消息——整个交流过程也会始终显示在看板的 COMMS 面板中。通过 tower work,结果会以分支 + PR的形式送达:工作进程在 tower/task-<id> 上提交、更改推送并创建 PR,task_update 中会包含 sha 和 PR 链接。

始终在线的委派:npx -y tower-mcp work 可将任意机器变成任务工作进程——它会轮询已委派的任务,向你确认(或使用 --auto 无人值守运行),在后台驱动 claude -p / codex exec,并为结果创建 PR。完整指南和安全模型 → docs/worker.md。

工作进程需要三项条件(运行 npx -y tower-mcp doctor 可检查全部条件):干净的 git 工作树——存在未提交更改时它会拒绝运行,因此绝不会将你的工作混入任务提交;PATH 中有 claude 或 codex;如果需要创建拉取请求,还需要经过身份验证的 gh(没有它仍会推送分支)。

明确说明信任模型:收到的任务是队友的 Agent 将要执行的代码——应将共享的 TOWER_TOKEN 视为拥有推送权限;对于超出范围的任务,Agent 应向其使用者确认(SECURITY.md)。

用手机操作

看板是遥控器,而不只是仪表板。在手机上打开 https://<your-tower>/board:

  • 发送框——用一句话委派任务。从在线工作进程下拉列表中选择接收者(绿色 = 在线,将立即运行;离线 = 将排队等待)。该机器上的 tower work 守护进程会接收任务、运行 Agent 并创建 PR。
  • 批准 / 拒绝——使用 --approve remote 运行工作进程,它会暂存每个任务,而不再通过终端询问。手机上会显示 “cursor-dana 想要运行:添加一个 /health 端点”,并提供两个按钮。点击“批准”,你的笔记本电脑就会开始工作。
  • 地图视图——命令流树:谁指挥谁、每项任务及其回复,以及实时在线状态圆点。点击任意 Agent 即可向其下达指令。(docs/map.png)
  • 一键身份验证——打开 /board#token=<token>,即可连接,无需输入。

与其他功能使用相同的 TOWER_TOKEN——任何能打开看板的人都能驱动你的工作进程,因此应像拥有推送权限一样谨慎分享。详情 → docs/worker.md。

在重复工作发生前及时发现

代价高昂的失败通常不是合并冲突,而是两个 Agent 做了相同的工作。它们选择了不同的文件名,git 顺利合并了双方的修改,而你却为同一份交付成果付了两次钱。文件级检查无法发现这种情况;等到任一 Agent 开始修改文件时,令牌已经花出去了。

因此,在开始任何研究之前,Agent 会先说明自己打算做什么:

propose_intent  "write a blog post about prompt injection"

⚠️  claude-bob is already on this (2m ago):
    "AI agent security / prompt injection"
    → stand down, or pick something else

匹配依据是含义,而不是路径——即使一个 Agent 打算写入 prompt-injection-agent-security.mdx,另一个打算写入 ai-agent-security-prompt-injection.mdx,也能触发。完全在本地运行:不调用模型,不用嵌入,也不发起网络请求。

及时发现你依赖的接口已经变更

一条声明是否新鲜,取决于产生它时读取的信息。

比较两个 Agent 将要写入的内容,可以发现它们正在编辑同一个函数。但这无法发现更常见的失败:alice 在 auth.ts 中修改了 AuthService.verify,而十分钟前读过旧签名的 bob 在 payments.ts 中编写了调用代码。文件不同、符号不同——没有任何重叠,系统却告知双方可以继续,直到 CI 才让 bob 发现问题。

因此,声明还会记录它所基于的内容:

claim_intent  files: ["src/payments.ts"]  symbols: ["charge"]

[HARD] AuthService.verify moved under you — alice changed the declaration you read
    was: verify(token: string)
    now: verify(token: string, opts: Opts)

有两个细节让这个功能值得启用:

它展示的是差异,而不是警告。 告诉 Agent“你的上下文可能已过时,请重新读取文件”,会让它消耗整整一个模块的上下文,只为发现一个参数发生了变化。用两行差异就能替代这些内容,Agent 无需重新打开文件,就能修补调用处。

只有调用方确实可能出错时才会触发。 指纹只涵盖_声明_,绝不包括函数体——因此,重写实现、重命名局部变量、添加注释或运行 prettier 都不会触发。添加参数或更改返回类型则一定会触发。

你无需声明自己读取了什么:PostToolUse 钩子会监视 Read 并代你记录,同时保存你查看时每个声明的签名。如果你先声明了任务,之后又有内容发生变化,heartbeat 会在你的 Agent 每 60 秒都会调用的请求中告知你。

需要坦诚说明其局限:签名不变时,行为变化无法被发现;正是这种取舍让误报率接近于零。请参阅 docs/protocol.md。

没人等待

过去,拒绝就意味着停止:stand_down,并附上一条要求 Agent 询问你的规则。 一次冲突就会让 Agent 停下来,直到有人类注意到。自 0.12.0 起,冲突变成了 绕行:

拒绝会说明哪些操作仍然安全。 它会携带 alternatives,说明哪些内容应当避开, 并提供一行建议:

(claim REFUSED — another agent holds this. Re-run with --force to override.)
What to do instead:
  Held by bob (~10 min). Don't wait: work on anything outside the 2 symbols in
  `avoid`. Tower will message you when it frees up — no need to retry.
  Avoid for now: AuthService.verify() (src/auth.ts), charge() (src/payments.ts)

其中有 charge,因为 Tower 推断出了它:之前有一条声明在读取 verify 后写入了 charge,因此 charge 依赖于它。无需编写依赖关系映射——它来自 Agent 实际读取的内容。

没人轮询。 Bob 的声明一完成、被释放或过期,遭到拒绝的 Agent 就会收到 tower 发来的消息,告知它是什么内容腾出了空间。

当阻止操作的是 PreToolUse hook 或 git pre-commit guard 时也是如此 (自 0.12.1 起):受阻的 Agent 会看到替代方案,并在声明释放时收到消息。

在你读取时获知,而不是在你编辑时。 打开某人正在修改的文件, PostToolUse hook 会立即通知你的 Agent——在它基于即将变动的代码规划任何事情之前。

依赖工作并行推进——以契约为先。 如果 Alice 正在更改签名, 她会说明它将变成什么:

claim_intent  symbols: [{ symbol: "AuthService.verify",
                          declares: "verify(token: string, opts: Opts): boolean" }]

编写调用方的 Bob 会拿到这份契约——而不只是收到 verify 即将变动的警告—— 于是可以立即据此编写代码,而不必等待 Alice 提交更改。Alice 完成后,Tower 会检查实际提交的内容,并告知 Bob 是否与她声明的一致——因此,如果计划有变,他会从 Tower 而不是 CI 那里得知。

让 Agent 自行继续工作。 tower setup --keep-going 会写入一条规则: 发生冲突时,在 avoid 之外继续工作,只有在没有安全的剩余选项时才询问人类。 默认规则仍然要求停止并询问——等待某个人是更谨慎的选择,也仍是默认设置。

实际发生的冲突

$ tower stats

2 collision(s) recorded

  by kind
    write_write  1  (50%)  two agents on the same symbol
    write_read   1  (50%)  a contract moved under a reader

这里只统计数量——不包含文件名、符号名或代码,也不会有任何内容离开你的机器。 这个功能之所以存在,是因为 Tower 花了四个版本检测冲突,却把每次冲突都忘得一干二净, 因此没人能说清楚实际发生的是哪类冲突。

20 个工具

工具用途
claim_intent一次调用即可登记意图并获取冲突(主要工具)
check_collision试运行冲突检查,不会持久化声明
heartbeat保持声明有效(否则会自动过期)
complete_claim / release_claim提交 / 放弃时释放声明;并告知等待中的 Agent 该声明已释放
list_claims查看实时声明状态
log_decision / get_decisions共享架构决策记忆
next_task基于规则的排序器:找出现在可以安全开始的模块
send_message / fetch_messagesAgent 通道:Agent 之间的异步消息和任务委派
pending只读统计未读消息和等待你处理的未完成任务(提醒)
accept_task / complete_task / list_tasks任务生命周期:由第一个接受的 Agent 获得任务,结果附带 sha/PR
request_approval / resolve_approval人工审批关卡:暂挂任务,并通过看板 / 手机批准
heartbeat_worker实时在线状态 — 工作进程宣布已上线并准备好执行任务
propose_intent**开始研究前:**说明计划要做什么;发现重复工作
record_reads记录刚刚读取的内容 — 以及当前正在修改这些内容的人(由钩子调用)

协议约定 → docs/protocol.md。

工作原理

MCP clients (Claude Code / Cursor / Codex)
        │  stdio  ·  HTTP/SSE
        ▼
Tower server ── collision engine (tree-sitter) · agent inbox · sequencer · SQLite · /board UI
        ▲
tower CLI: demo · doctor · init · setup · serve · status · stats · watch · complete · claim · guard · next-task · send · inbox · nudge · work · version
  • **基于语义,而非文本:**符号来自 tree-sitter AST(TS/JS/Python),因此即使位于不同的 diff 区块,AuthService.verify 也会产生冲突。
  • **与模型无关:**这是一个 MCP 服务 — 目前所有主流 Agent 均可使用。

强制执行(不要依赖 Agent 记得)

Agent 选择 发起的工具调用并非安全保障。Tower 有 三层强制执行机制 — 请叠加使用:

  1. MCP 工具 + 规则文件 — 每个 Agent(Claude、Cursor、Codex)都会在编辑前声明。
    tower setup 会为你写入此文件。
  2. Claude Code hooks — 冲突的 Edit/Write/MultiEdit 会被直接 阻止。⚠️ 目前需要克隆 Tower — hook 脚本不在 npm 包中;它们从克隆目录运行,并导入其中构建好的 CLI:
    npm install && npm run build
    npx tower-mcp init --hooks   # writes .claude/settings.json, then reload Claude Code
    
    这会配置五个 hook:SessionStart 注册会话,UserPromptSubmit 提醒你有待处理的任务或消息,PreToolUse 阻止硬冲突编辑(退出码为 2),PostToolUse 在编辑后保持你的在线状态,并在 Read 时记录你读取的内容;如果有人正在修改这些内容,还会发出警告;SessionEnd 释放你的声明。升级现有安装时使用同一条命令 — git pull && npm install && npm run build && npx tower-mcp init --hooks — 它会将 Tower 自身的条目更新为当前版本,且绝不会更改你自己的 hooks。重新运行不会造成任何变化。
  3. 通用 git pre-commit 防护 — 适用于 任何 编辑器或 Agent;如果队友的 Agent 持有冲突声明,就会拒绝提交:
    cp examples/git-hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
    

hook 的精准度:它会定位每处编辑,并声明其所在的函数,因此同一文件中不同函数里的两个 Agent 不会互相阻止。Write、新文件,或声明之间的编辑(导入、顶层代码)会退回到整个文件 — 多声明是安全的,少声明则不安全。完整的适用范围和限制 → docs/enforcement.md。

实时看板

每个启用 serve --http 的 Tower 都会在 /board 提供实时看板(每 2 秒刷新一次):每个 Agent 的有效声明、以红色标记的冲突、每项声明已持续的时间 — 以及 COMMS 面板,实时显示每条消息和委派的任务。将它放在编辑器旁边,即可查看谁在处理什么、哪些任务正在进行,以及 Agent 之间的所有消息(截图见本 README 顶部)。

需要明确的是:看板显示的是声明、任务和消息 — 并非 Agent 会话的实时记录。你看到的是每个 Agent 声明自己正在处理的内容以及它汇报的结果,而不是它的按键操作。

从终端使用 Agent 通道 — 只需运行 send;它会询问其余信息(你的身份和仓库会从 git 获取):

$ npx -y tower-mcp send
To (agent id, or * for everyone): bob
Message: add rate limiting to /login
Is this a task for them? [y/N]: y
📨 Sent task c78094d1 → bob

$ npx -y tower-mcp inbox         # your messages (identity inferred from git)

(脚本/Agent 则传入标志:send --to bob --body "..." --task — 提示只会在真实终端中出现。)

GitHub Action:PR 冲突报告

无需服务器 — 一个工作流文件就能对触及与其他未关闭 PR 相同文件的任何 PR 发表评论(并标记重叠的行);如果你运行了托管版 Tower,还会显示 Agent 的实时声明:

- uses: Rohanxmalik/Tower/[email protected]

像这样固定发行版标签;也可以使用 @main,但它会跟踪最新开发版本。设置说明 + 截图 → docs/action.md。

团队模式(整个团队,使用不同设备)

让所有人的 Agent——Claude、Cursor、Codex——都连接到同一个 Tower。当两个人的 Agent 要访问同一个文件时,第二个 Agent 会在消耗一个 token 之前收到提示,而不是等到 合并时才发现。团队可根据情况选择以下两种配置:

  • 同一办公室/同一 WiFi(或住在一起): 无需部署或建立隧道——用一台笔记本电脑托管 (serve --http --host 0.0.0.0),其他人连接它的 192.168.x.x 地址。只需 2 分钟。
  • 远程办公/网络不同: 在线托管一个 Tower,获得永久 HTTPS URL。

大约 5 分钟即可将自己的 Tower 部署到线上(提供免费方案),无需建立隧道:

部署到 Render

也可以使用 Docker 自行管理:

TOWER_TOKEN=your-secret docker compose up -d   # http://<host>:4319/mcp

每位开发者的 .mcp.json 都使用 "type": "http", "url": ".../mcp"——现在,你的 Claude 会告诉 联合创始人的 Codex:“在提交 abc123 之前不要动 auth。”完整配置指南,适合初学者—— 同 WiFi 模式、Render 逐步操作说明,以及各编辑器的配置 → docs/team.md。

🚀 不想自己托管? 面向团队的托管式常驻协调服务 Tower Cloud 即将推出。加入候补名单。

信任、数据,以及如何移除

  • 不收集遥测数据。 除了你配置的网络调用,Tower 不会发起其他网络调用。看板 页面不会加载任何外部资源——没有 CDN、字体或分析工具。
  • 你的数据保留在仓库中。 声明、消息、任务和决策都存储在 .tower/tower.db 中——这是一个普通的 SQLite 文件。删除该目录即可彻底移除数据。
  • API 密钥不会在设备间传递。 Worker 会调用该设备上已经安装的 claude / codex。 Tower 永远不会接触供应商凭据。
  • TOWER_TOKEN 是共享密钥——请像对待推送权限一样谨慎保管。 持有它的任何人都可以 向团队中的 Worker 分派任务。请参阅 SECURITY.md。
  • Tower 出错时绝不会阻止你工作。 所有钩子都采用_开放式失败_:如果 Tower 无法访问 或钩子出错,你仍可继续编辑和提交。
  • 移除方法: 删除 .tower/,从 .mcp.json 中移除 tower 条目;如果使用 --hooks 安装了钩子,还要删除 .git/hooks/pre-commit 和 .git/hooks/post-commit。如果 运行过 init --hooks,还要从 .claude/settings.json 中移除 Tower 的 node hooks/… 条目。

Monorepo 目录结构

packages/shared   protocol types + zod schemas (source of truth)
packages/server   collision engine, sequencer, SQLite store, MCP server, transports
packages/cli      the `tower` command
hooks/            the five Claude Code hooks (SessionStart … SessionEnd; PreToolUse blocks)
action/           GitHub Action — PR collision reports
extensions/       tower-anywhere — claim-before-you-edit for non-code work (docs, briefs)
examples/         two-agents-demo, git-hooks (pre-commit guard, post-commit release)
docs/             quickstart, protocol, worker, enforcement, team, action
Dockerfile        hosted team server

开发

npm install
npm test          # vitest, 80% coverage gate
npm run build     # tsc -b

路线图

  • 每个 Agent 独立的身份与身份验证(当前:团队共用一个令牌)——Tower Cloud 的基础
  • 支持更多用于符号提取的语言语法(Go、Rust、Java——欢迎贡献)
  • 预测式冲突检测(基于合并历史的 ML)——未来的竞争优势
  • 自动解决/协调 Agent
  • 跨仓库/组织级意图图谱 + API 合约变更检测
  • 企业功能:策略引擎、SSO、审计台账

贡献与社区

欢迎提交 PR——请参阅 CONTRIBUTING.md(TDD、小型 PR,内含适合初次贡献者的建议)。 安全问题报告 → SECURITY.md。变更记录 → CHANGELOG.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。