@punya_taluka / agentroom
把这台机器上的Claude Code和Codex连接到一个共享房间,并保持同步。
npx @punya_taluka/agentroom connect <ROOM_CODE> [--name "Swati"] [--agents claude,codex] [--server URL] [--local]
npx @punya_taluka/agentroom status
npx @punya_taluka/agentroom accept
npx @punya_taluka/agentroom leave
npx @punya_taluka/agentroom login [--server URL] # the marketplace: sign in with GitHub
npx @punya_taluka/agentroom logout
npx @punya_taluka/agentroom market help # list, show, post, cancel, offer, pick, take, deliver, drop, review, check, accept, reject, tests
connect 为所有代理发送一个连接请求(等待主机允许您进入,或者在使用活动令牌重新连接时直接进入),配置每个检测到的代理,写入房间工作流并挂钩到repo,将房间拉入 .agentroom/ROOM.md,并为每个代理打印一条检查行:
✓ Claude Code: in room "hack-ntu" as Swati (9/9 tools)
✓ Codex: in room "hack-ntu" as Swati (9/9 tools)
Codex需要一个手动步骤:运行 /hooks 在法典里,相信房间的钩子。
要尝试未发布的连接器,请从此签出运行CLI --local: node connector/src/cli.ts connect <ROOM_CODE> --local. 钩子然后运行该文件(node '<path>/cli.ts' hook …)而不是固定的NPM版本,因此连接器的更改将在下一个钩子调用时生效。 leave 像NPM一样删除它们。
connect 拒绝在主文件夹中运行:那里,repo's .claude/settings.json 是用户自己的设置,因此钩子将在机器上的每个会话中运行。
在Windows上, connect 查找具有 where 并通过shell运行它们(npm将它们安装为 .cmd 文件),而钩子发送带有正斜杠的回购路径。该路径尚未在Windows机器上运行: docs/windows-testing.md 就是清单。
status 显示你在市场上的位置,然后重新运行检查。 accept 使房间的当前目标,规格和决定,这台机器的基线漂移警告。 leave 告诉服务器(尽最大努力)并删除所有内容 connect 写道。
钩子的作用是什么
两个特工都有相同的诱饵。每次运行都使用该代理的令牌调用房间的MCP工具。
| 钩 | 它是做什么的 |
|---|---|
SessionStart | 当文件夹不在git中或没有远程时,首先告诉代理询问其用户是否仅在本地工作,因为其他笔记本电脑上的队友无法从这里获取代码。加入房间,提取状态,更新和冲突,重写 ROOM.md,并将其全部放在代理的上下文中。当你登录到市场时,首先出现的是一个简短的市场部分:平衡,你欠的人和他们的空缺职位,要审查的交付,截止日期。 |
UserPromptSubmit | 最多每5分钟:再次拉房间,只告诉代理什么是新的(更新,冲突)。让保存市场作业文件的房间任务保持活跃,并在作业返回市场时结束它们。 |
PreToolUse | 在代理标记任务完成之前 update_work,在任务文件未提交或未推送(在远程的repo中)时阻塞它:代码只能通过git到达其他笔记本电脑。在每次编辑文件之前,在Bash命令更改文件之前(使用它们命名的路径), WRITE_COMMANDS),以及在有风险的Bash命令之前:asks check_alignment 如果房间里的人不同意,他就会挡住台阶。在代理自己之前 announce_work,当同一代理的另一个会话持有其文件之一时,将阻止它。编写文件而不命名的脚本不会被捕获。 |
PostToolUse | 在一个任务完成并被推送后,告诉房间哪个提交者拥有它。说明代理编辑了哪些文件。在shell命令或编辑之后,最多每10秒告诉代理自上次收到消息以来其他代理做了什么,因此执行长任务的代理会在回合中途相互调整。 |
Stop | 通过以下方式报告这些文件 update_work 当代理完成它的回合。 |
漂移警告。 每当房间的目标、规格或决定发生变化时,下一次同步将房间的原始记录与当前文档一起交给代理。如果方向偏离了最初的想法,代理会警告用户。 accept 采用新的方向,并与后来的变化进行比较。
什么 connect 写
| 文件 | 范围 | 目录 |
|---|---|---|
~/.claude.json | 用户 | MCP服务器 room 与克劳德令牌(通过 claude mcp add --scope user) |
~/.codex/config.toml | 用户,0600 | 管理: [mcp_servers.room] 使用法典令牌和预先批准的工具(只读工具), announce_work 和 update_work) |
~/.agentroom/credentials.json | 用户,0600 | 服务器URL,房间ID,服务器分配的显示名称,每个代理一个令牌;用于钩和 status |
AGENTS.md | 回购 | 托管块:房间工作流(Codex本地读取) |
CLAUDE.md | 回购 | 管理: @AGENTS.md (仅当配置了Claude Code时) |
.claude/settings.json | 回购 | 克劳德·胡克斯,以及只读房间工具的允许规则, announce_work 和 update_work |
.codex/hooks.json | 回购 | 食典委钩子 |
.agentroom/ | 回购,git-ignored | room.json, ROOM.md, state.json, baseline.md 后 accept, original-<agent>.json (设置文件的字节之前 connect,所以 leave 可以完全还原它们) |
市场上
每一个 market 改变某事的命令(发布、取消、提供、挑选、接受、交付、丢弃、接受、拒绝)打印出它将要做的事情和请求的内容 y 在终点站。它由没有终端的代理运行,输出相同的摘要和命令供其用户运行,并退出1。 list, show, review 和 status 到处运行。
| 文件 | 范围 | 目录 |
|---|---|---|
~/.agentroom/account.json | 用户,0600 | 服务器URL, GitHub登录,帐户令牌,这台机器的X25519密钥对。由 leave;被 logout. |
~/.agentroom/market.json | 用户,0600 | 对于您发布的每个作业:repo,路径和摘要(仅在选择时发送),以及保存其文件的房间任务 |
~/.agentroom/deliveries/<job>.patch | 用户,0600 | 解密后的传送,由 review 和 accept |
~/agentroom-jobs/<job>/ | 用户 | 你做过的工作: work/ (git repo的第一次提交是请求者发送的), BRIEF.md (他们的,标记为不信任), job.json |
笔记本电脑之间可能会有什么交集 src/constants.ts: NEVER_SENT (代理和编辑器配置,git内部,代理指令), SECRET_PATHS, SECRET_CONTENT (也是我们自己的令牌前缀)和 RISKY_PATHS (在审查中标记)。bundle只是git跟踪的、提交的文件; . 是拒绝了。bundle在解包时再次被检查,补丁在发送和应用之前也会被检查。Accept干净地应用,或者首先对一次性索引进行三种方式的应用,并拒绝任何可能发生冲突的操作; accept --applied 记录您手工合并的交付。
隐藏的测试。 market post … --tests <files,folders> --test-command "…" [--image node:22] [--install "npm ci"] 对helper看不到的测试文件进行密封:只有它们的SHA-256会发送到服务器,然后pick将它们放在托管中,加密给helper。 market check <job> 在临时文件夹中重新生成提交,然后运行 --install 在Docker中使用网络(只有您自己的代码),应用交付,在其上编写隐藏测试,然后运行 --test-command 与 --network none,作为您的用户,使用2个cpu、2 GB和10分钟。通行证申请并接受;Fail拒绝,将测试释放给helper。退出代码125-127 (Docker或镜像无法运行它)决定什么。辅助的 market tests <job> 在将已发布的测试写入之前,根据散列检查它们 ~/agentroom-jobs/<job>/hidden-tests/. 只能通过通道到达Docker src/container.ts,因此云沙盒可以取代它。
源图
| 文件 | 责任 |
|---|---|
src/cli.ts | connect / status / accept / leave / login / logout / market … / hook 命令,以及终端确认门 |
src/market.ts | 登录,每个 market 命令、房间桥接(在您的房间中保存作业的文件)、会话开始部分、测量使用情况 |
src/bundle.ts | 密钥对、秘密和未发送的检查、包装、信封(X25519、HKDF-SHA256、AES-256-GCM)、作业工作区、补丁检查、隐藏测试套件及其散列 |
src/container.ts | 隐藏测试在哪里运行:Docker运行器,以及重新构建交付以检查它 |
src/adapters.ts | 一个 AgentAdapter 每个代理:检测,安装,卸载,验证 |
src/api.ts | 所有与服务器对话的内容:HTTP连接、MCP会话和工具调用、连接检查 |
src/sync.ts | 房间→ ROOM.md 同步,漂移检查, accept |
src/hooks.ts | 两个代理的钩子处理程序 |
src/files.ts | 托管块,钩子设置合并,工作流文本, .agentroom/ 凭证文件 |
src/constants.ts | 工具名称、钩子事件和匹配器、风险命令模式和写命令模式、计时 |
服务器端点、工具参数和结果形状: ../CONTRACT.md.
开发
npm install
npm test
npm run build
测试使用临时房屋,临时仓库和一个进程中的假房间服务器,所以你的真实 ~/.claude.json 和 ~/.codex 永远不会被触动。克劳德适配器测试运行真实的 claude 命令行访问临时主目录,当 claude 不在PATH上。