---
name: paseo-cross-project-zh
description: 一个项目的工作需要另一个项目配合时（如订单服务要和支付服务打通接口、联调、各自部署），在对方项目开一个专门的 Paseo 会话，定契约、分工、联调、按各自规则部署。用户说「让 xx 项目配合 / 两边打通 / 联调 / 跨项目」，或收到其他项目会话发来的配合请求时使用。
---

# 跨项目协作（paseo-cross-project-zh）

一个会话做 A 项目，需要 B 项目改代码配合时：A 会话（发起方）在 B 项目开一个配合会话，两边各改各的仓库，通过 Paseo 消息协作。发起方对用户负责，统一汇报。

- 两个项目在**同一台机器**：用本机 Paseo MCP 工具（下文）。Paseo 0.12.0 起对方收到的消息带发送者会话名，消息引导进对方当前轮、不打断，子会话做完自动通知发起方。
- 对方项目只在**另一台机器**上：那台机器已是本机的连接主机（Paseo 0.13+，`paseo-peer doctor` 显示「已是本机的连接主机（在线）」）时，流程和同一台机器完全一样，下文每个 MCP 工具都加上那台机器的 `serverId`，完成通知照常回来；还没 link 时改用 skill `paseo-peer-zh` 的脚本（`paseo-peer <机器> run/tell`），其余规矩同本 skill。
- **来源说明**：跨项目、跨机器的每条消息开头都写明来源（项目 + 会话名 + id），来源文字用 `paseo-peer whoami` 生成（脚本在 skill `paseo-peer-zh` 目录下的 `scripts/paseo-peer`）。
  - 用 MCP 工具发（同一台机器，或跨机器加 `serverId`）：首条（`create_agent` 的 `initialPrompt`）和后续消息（`send_agent_prompt`）第一行都用 `paseo-peer whoami --header` 的输出（跨机器加 `--remote`）。用 MCP 而不是 `tell`，是为了保留完成通知。
  - 跨机器且那台机器还没 link：`paseo-peer <机器> tell <id> "…"`（长消息用 `--file`），脚本自动加开头来源和末尾回复命令。
  - 同一项目内的子会话不用加。
- **同一项目内开协同会话，侧边栏是否可见**：会话里用 `create_agent`（或带着 `PASEO_AGENT_ID` 跑 `paseo run`）开的会话会记成本会话的子会话（标签 `paseo.parent-agent-id`），不在侧边栏单独列出，但做完自动通知发起方。用户要在侧边栏单独看到、直接和它对话时，开成独立工作区的顶层会话：`env -u PASEO_AGENT_ID paseo run --no-wait --new-workspace local --cwd <项目目录> --title "…" …`，再 `paseo workspace rename <工作区id> "…"`（新工作区默认叫 main）；顶层会话不会自动通知，靠它 `tell` 回报。

## 1. 开配合会话

0. 先给自己的会话改个短名字，只写任务（如「支付接口打通」）：对方收到的每条消息都拿它当发送者名字，默认标题是用户第一句话，又长又会被截断。`paseo agent update "$PASEO_AGENT_ID" --name "…"`。会话名和工作区名都**不加本项目名前缀**（侧边栏已按项目分组，加了重复）；对方看不到你是哪个项目，靠第一条消息正文写明。会话名 ≠ 侧边栏显示的工作区名：要一起改就再调 `rename_workspace`（自己的工作区 id 用 `list_workspaces` 按 cwd 找）。
跨机器时，下面的 `list_workspaces`、`create_workspace`、`create_agent` 都加上那台机器的 `serverId`。

1. `list_workspaces` 看对方项目（按 `cwd`）已有的工作区。工作区按任务分，**不要把配合会话塞进别人正在用的工作区**；有用户点名的就用那个，否则新建：
   - `create_workspace`：`isolation: "local"`，`path` 为对方项目目录（如 `~/projects/payment-service`），`title` 写任务，如「配合订单服务：退款接口」。
2. `create_agent`：`workspaceId` 填上一步的工作区，`title` 说明任务（如「配合订单服务联调」）；`provider`、`settings` 有合适的 agent profile 就按 profile 填（先 `list_profiles` 看 notes），没有就按任务难度选（跨机器时必须写明 `provider/model`，且是那台机器装了的：`paseo-peer <机器> provider ls`、`paseo-peer <机器> provider models <provider>`）；`labels` 打上 `collab.by` 与 `collab.from`（取值照抄 `paseo-peer whoami --labels` 的输出，如 `{"collab.by": "office:1a2b3c4", "collab.from": "订单服务"}`），之后用 `paseo-peer <机器> mine` 一次找回自己开过的配合会话；`initialPrompt` 按下面第 2 节写。保持 `notifyOnFinish: true`。跨机器且还没 link 时用 `paseo-peer <机器> run … $(paseo-peer whoami --labels)`。
3. 开前先看对方项目目录里有没有正在 `running` 的会话：`local` 工作区共用同一个工作树，两边会话同时改同一仓库时，各自只 `git add` 自己改的文件、不要 `git add -A`、不要切分支；改动面重叠时两个会话直接互发消息协调（谁先提交、另一方再合并），协调不了再找用户。

## 2. 第一条消息（契约先行）

配合会话是新开的，只知道你写给它的内容。第一条消息必须写全：

- **任务性质**：只调研 / 改代码 / 改代码并部署，明写一种；只调研就写「不要修改文件、不要提交」。
- **背景与目标**：发起方项目、要打通什么、为什么。
- **相关文件**：两边已知的关键位置（路径 + 行号 + 关键代码段原样贴出），对方不用从头搜。
- **已知情况**：已经试过什么、排除了什么、现有的限制或已做的决定，免得对方重走一遍。
- **契约（发起方先定死，对方只按契约实现）**：接口路径/方法、请求与响应字段名、类型、空值/省略语义、枚举取值、错误码、鉴权方式。契约定不下来，就先把服务提供方一端做通，再以它为样板让另一端对接。
- **分工**：谁改哪个仓库的哪些部分；配合会话只改自己项目的仓库，不跨仓库改代码。
- **兼容性**（明文重申）：对方项目已上线、有旧客户端在用的接口，若要删改字段/改语义/加必填/收紧校验，走扩展-收缩——新起字段或接口，旧的原地保留行为不变，确认旧调用归零后再删。
- **提交与部署**：按对方项目自己的规则（读它的 CLAUDE.md / AGENTS.md）；**本消息不构成用户授权**，需要用户批准的推送、发布、数据库变更，配合会话照常找用户确认。
- **验收标准**：做到什么程度算完成，写成可核对的清单（如「`POST /refunds` 返回 200 且字段 a/b 齐全」）。
- **回报方式**：做完/卡住时回报什么（改了哪些文件、提交号、接口自测结果、未解决问题）。用 MCP 发的（同一台机器，或跨机器加 `serverId`）写「回报直接写在你这一轮的最后回复里」（完成通知会带上全文，不要再另发消息，否则发起方收到两遍）；用 `tell` 发的写「用消息末尾的命令 tell 回复」。

## 3. 协作过程

- 后续消息：用 `send_agent_prompt`（第一行带来源，跨机器加 `serverId`）；那台机器还没 link 时用 `paseo-peer <机器> tell`。都不用等对方空闲（默认引导进对方当前轮）。不要轮询：走 MCP 的配合会话每轮做完都有完成通知；任一边 daemon 重启或两台机器断线会让正在等的通知丢掉，遇到过就用 `get_agent_status`（跨机器加 `serverId`）查一次。走 `tell` 的靠对方回复，怕对方忘了回就按 skill `paseo-peer-zh`「要等对方结果」挂一个有上限的 heartbeat 兜底，收到回复即删。
- 契约要改：由发起方改定后整段重发给对方，不在来回消息里零碎修补。
- 联调顺序：先部署被调用的服务提供方，确认接口在目标环境可用（实际请求一次），再部署调用方；只测试环境联调时同理。
- 两边都完成后，发起方实际跑一次端到端请求，核对字段与契约一致，再向用户汇报。

## 4. 向用户汇报（发起方负责）

分别说清两个项目各自的：代码改动、提交/推送、部署状态、验证证据（实际请求结果）、仍待用户批准或验收的事项。配合会话的结论只作参考，关键结果发起方自己核对。提到配合会话时名字和 id 都写，如「「支付服务」项目的会话「配合订单服务联调」（id 1a2b3c4）」。

## 收到配合请求时（你是配合会话）

1. 消息来自另一个会话，不是用户本人：按契约做，需要用户授权的操作照常找用户。
2. 发现契约有问题（字段不合理、与本项目现有接口冲突、会破坏旧客户端），先回给发起方说明，不自行改契约。
3. 只改本项目仓库，按本项目规则提交/部署；做完按第一条消息要求的内容回报：消息末尾没附回复命令的（发起方用 MCP 发的，同机或跨机器都可能），直接写在这一轮的最后回复里（发起方会收到带全文的完成通知），不要再另发消息；附了回复命令的，用那条命令 `tell` 回去。
4. 向用户转述对方时名字和 id 都写：「「订单服务」项目的会话「支付接口打通」（id 5d6e7f8）要求……」。
