AI DAILY / 2026-09-28
agent-office:3D虚拟办公室管理Claude Code团队
AgentSystemLabs/agent-office
全文中文翻译 · AI 生成,仅供学习交流
一个卡通 3D 办公室,团队成员可以在其中一起走动。在任意一张空着的工位前安排一位 Claude Code、OpenCode 或 Codex worker,观看它面前那台笔记本上的终端,大家一起跳进那个终端里使用。issue 和拉取请求(PR,Pull Request)挂在墙上的软木板上。你还可以语音交流,并把自己的屏幕投到休息室的电视上。
每个项目占用大楼的一层。乘电梯,从你的 GitHub 仓库中选一个,办公室会克隆它并为它新开一层,刷上属于它自己的颜色。这一层上的所有 worker、终端、看板和队列都工作在该项目的 checkout 下。
agent-office
里面有什么
一个项目对应一层。
办公室第一次启动时,你身处电梯内部,它会询问你的第一个项目:从你 gh 登录账号可见的仓库里挑一个(也可以直接输入 owner/name),办公室会把它克隆到 ~/agent-office/<owner>/<repo>。要添加新的项目或前往已有的项目,可以走到北墙的电梯里按 E。也可以点击左上角的项目名称查看楼层列表:选一层,一眨眼你就会出现在该层办公室中原有的位置上。每层都有自己的工位、worker、issue 与 PR 看板、任务队列、服务和图片,也有专属的墙面与地板颜色,所以你随时都清楚自己身处哪一层。你只能看到和听到所在层的同事。电梯面板显示每层上有多少 worker 在忙或在等用户,其他楼层上的 worker 一旦开始等待,你也会收到提示。
四处走动。
使用 WASD、Space 跳跃,拖动鼠标可以旋转摄像机视角。办公室里的所有人都会实时看到彼此的移动。
安静的屏幕。
办公室始终保持视野清爽:顶部栏只显示所在楼层、🤖 Workers 与 ☰ 菜单(或 Tab)。菜单里可以打开所有窗口(issue、PR、队列、服务、白板、搜索、语音、屏幕共享、设置)以及列出可在屏幕上显示的内容:worker、办公室里的同事、花费、Claude 限额、聊天、楼层详情等。在那里可以按需开关各项,也可以用各自面板的 ✕ 单独隐藏。把常用的内容钉到顶部栏上。这些选择会保存在你的浏览器中。聊天内容几秒后会淡出;将鼠标悬停在聊天上或按 T 可以回看。需要你处理的内容会自动出现在顶部栏:等待用户的 worker(点击前往,就像按 N)、语音通话时的静音按钮、屏幕共享时的 Sharing,以及有新版本时的 ⬆️ Update。
咖啡。
在厨房的咖啡机前按 E 可以取一杯咖啡,让行走更快、跳跃更高,效果持续约一分钟。项目名称下方的小仪表会显示剩余的咖啡因。如果上一杯效果还没完全消退就喝下第三杯,你会短暂出现手抖。
老板办公室。
后墙沿线的楼梯通向角落阁楼上一间玻璃墙的办公室。从那里可以俯瞰所有工位,观察 worker 的工作。
梯子与火警杆。
各层像真实的楼层一样堆叠,每层都有天花板。西墙上有一架梯子,穿过天花板和地板上的翻板活门:按 E 抓住梯子,W/S 上下爬,按 E(或 Space)松手。爬过天花板后,你会从上面那层地板的洞口钻出来。要下楼时,可以走到火警杆的圆洞前(或在杆旁按 E)。你会一边旋转一边滑下来,从下面那层的天花板洞口冲出。两根火警杆贯穿整栋大楼,因此一次下滑只会带你去一层,并在落点的同一根洞口旁把你甩出来,让你准备好再滑一次。在最底层,你会落在一块垫子上,消防警铃响起;在那里按 E 会让你转个圈。
楼上,街道上方有车库。
办公室位于二层。它的窗户是真正的玻璃,可以俯瞰街道、树木和邻居。从西墙的 EXIT 门走出去,顺楼梯下到街上。下方是一个开放式的车库,里面停满了 Lambos 与 Ferraris,你也可以跳到车顶上去。
一座随项目数量一起长高的大楼。
每层都是同一栋楼的一层,所以从外面看它有多高取决于你有多少个楼层:项目足够多时,它就变成一座摩天大楼,每层都有阳台,入夜后这里那里地亮起窗户,顶端还有一道飞檐。在更高的楼层上,街道也在脚下越来越远。只有底层有 EXIT 门和通往街上的楼梯;上方的楼层那面都是墙,所以要下楼离开时请乘电梯。
昼夜与天气。
窗外是办公室自有的时间流逝:太阳随运行主机的时钟升起、落下;夜幕降临时,街灯、阳台上的灯串和街对面的窗户都点亮,办公室里的灯也亮起暖光。天气自动变化(晴、多云、雨、雷暴、雾、冬季还有雪),玻璃上有雨滴,街道被打湿,外面也会积雪。使用 --city Berlin 启动办公室后,天空会跟随该城市的日出日落和实时天气预报。所有人看到同一片天空,⚙️ 会显示当前的状态。
万圣节与圣诞节。
在 ⚙️ → Holiday theme 下,任何人都可以为整栋楼、各个楼层的所有人换装。万圣节时,worker 会变成步履蹒跚的僵尸,嘴角缝着笑容,缠满绷带;你的第一人称双手也会变成不死巫师的爪子,骨骼嶙峋,爪尖弯曲,指间缠绕着绿色的鬼火;所有人都戴着歪歪的巫师帽;小狗则长出蝙蝠翅膀,戴上女巫帽。天空变得诡异,头顶紫色,地平线血红,巨大的丰收之月高悬,蝙蝠飞越月亮并绕着大楼盘旋,偶尔还有远处闪光。杰克南瓜灯在各处发光:每张桌子、窗台、柜台、阳台栏杆、街道两旁都点着南瓜灯,草坪上立起墓碑,角落布满蜘蛛网。圣诞节时,worker 变成精灵,你的手套上连指手套,所有人都戴圣诞帽,小狗变成鲁道夫(Rudolph),盆栽植物变成装饰好的小圣诞树,下面堆着礼物,办公室外面下着雪,屋外一棵亮灯的大圣诞树和几个雪人。
默认情况下,按办公室的日历时钟,从 10 月起布置万圣节,从 12 月起布置圣诞节。
抽烟时间。
南墙的玻璃门滑向阳台,上面有灯串、一条长凳和一张小圆桌。在烟灰缸前按 E 可以点烟。在你掐灭烟头或走回室内之前,每个人都能看到你吞云吐雾的样子。
坐下来。
在休息室沙发、懒人沙发、阳台长凳、小圆桌凳,或老板办公室里老板的椅子上按 E 即可坐下。走开、跳跃或再次按 E 即可起身。所在层的每个人都会看到你坐下。当有人正在共享屏幕时,在沙发上面对电视坐下,屏幕会自动为你切换成全屏。
老板显示器上的扫雷。
坐在老板椅子上时按 E 可在显示器上玩扫雷:镜头拉近,雷区就摆在屏幕上。左键挖开,右键(或 Shift + 左键)插旗,已插好旗的数字格点击后会挖开其周围。第一次点击绝不会踩到雷。
暂停游戏
时,先前的局面会留在显示器上,时钟暂停,直到你回来。走开即可起身。
挑选角色。
第一次进入时,角色选择界面会显示可选的皮肤色、发型、发色和上衣,并提供旋转预览。随时可在 ⚙️ 中,或在 ☰ 菜单里点击 👥 People 下方的自己名字来修改。
招聘 worker。
走到一张空工位前按 E 选择 Claude Code、OpenCode 或 Codex,也可以先按 P 写下一个任务。一位小小的 worker 坐下,一台笔记本打开,agent 的实时画面出现在屏幕上。每个队列任务也要选择对应的 agent。
备用懒人沙发。
办公室共有 16 张工位。一旦全部被占用,地板上会冒出一组懒人沙发,前面是一张矮矮的膝上桌。在那里招聘 worker 的方式与工位相同;下一组懒人沙发会紧接着冒出来,房间里最多 12 组。任务队列也会把 worker 安排到懒人沙发上。worker 在时该沙发保持张开,一旦有工位空出,最近空出的沙发就会收回。
共享 shell。
在空工位前按 B 可以打开一个普通的登录 shell,用于开发服务器、git 或测试。它的共享方式与 Claude 终端一致。
隔离分支。
带任务招聘时,可以勾选 own git worktree(独占的 git worktree)。该 worker 就会获得一条独有的 office/<name> 分支,放在 .agent-office/worktrees/ 下,因此并行的 worker 永远不会共用同一个 checkout。让该 worker 下班时,你可以选择保留 worktree 与分支、只删除 worktree,或者两者都删除;存在未提交的改动或没有远端保存的提交时,办公室会先提示你。
agent-office prune 会在确认安全后清除那些被保留的内容。
一键开 PR。
worktree worker 完成任务后,按其工位上的 O。办公室会推送分支,并根据任务内容起草标题和正文来打开拉取请求(从 issue 看板交接过来的会带上 Closes #n)。PR 立即出现在 PR 看板上,并标注该 worker 的工位;点击 Go to desk 可以直接前往。再按 O 可查看该 PR。
共享终端。
在有人占用的工位上按 E 可以打开真正的终端(基于 WebSockets 的 PTY)。多人可以同时在同一会话中输入,后加入的人会拿到完整的滚动历史。终端顶栏会显示所有打开该终端的人的头像,并在有人输入时显示一行类似 Sam is typing… 的提示,避免互相抢话。
查看队友正在做什么。
每个人名字标签下方都有一行说明他们打开的内容(💻 表示在 Pixel 的终端里,🔀 表示正在阅读 PR #12,📋 表示在 issue 看板上),或者他们所在的位置(🌇 在阳台,👔 在老板办公室,🛋️ 在沙发上)。同一行也会出现在侧边栏中他们的名字下方。点击侧边栏中的某个人,就会走过去找他;如果对方在别的楼层,会先乘电梯过去。你自己的任意按键都可以取消跟随。
工位旁的变更查看。
在已占用的工位上按 C(或点击其终端中的 🌿 Changes)可以查看 worker 改了什么:变更的文件,以及它们相对办公室打开时所在分支的 diff,每隔几秒刷新一次。从那里可以提交、丢弃,或推送分支并打开拉取请求。
实时状态。
Claude Code 与 Codex 的 hooks(钩子)以及 OpenCode 的插件共同驱动每个 worker 的状态:working、needs input 或 done。当 worker 需要人工介入或已经完成时,它会上下跳动,你也能听到一声叮。它的天线灯泡在房间另一头也能显示当前状态。
Worker 用动作演绎工作。
正在工作的 worker 会用动作表现最近一次的工具调用(tool call),方便你在房间里一眼看清它在做什么。读取文件时,它会举起一叠纸张并翻看。编辑时,它会俯身猛敲键盘。运行测试或构建时,它会往后一靠,双手抱头。搜索或联网时,旁边会转起一个地球仪。当连续两次测试或构建失败时,它会双手抱头做出苦恼状。等你处理时,它会跳几下,然后双手抱胸用脚尖打拍子。完成时,它会小小地转一圈,一团彩屑随之升起。Claude Code 的钩子会把运行测试的 shell 命令与只读的命令区分开,并上报失败。Codex 与 OpenCode 只能上报工具名,因此它们的 shell 命令会以普通敲键盘来演绎。
下一位需要你的 worker。
按 N 直接跳到等待时间最长的那位 worker(它需要输入,或者已经完成但还没人来查看),让你正好站在它身后面对笔记本。再按 N 跳到下一位,按等待时长从最久到最新依次循环;循环到底后再从头开始。屏幕边缘的指示针会指向那些你看不见的等待 worker:红色表示需要输入,绿色表示已完成;顶部栏会显示统计(🙋 2 waiting · ✅ 1 done;点击等同于 N)。如果所在层无人等待,N 会告诉你哪一层有人在等。
通知。
你不必一直守在办公室的标签页里。标签页标题会显示等待用户的 worker 数,形如 (2) my-project · Agent Office。开启桌面通知(首次招聘 worker 时办公室会询问,或在 ⚙️ 中开启)后,当 worker 需要输入或完成、而你正在别的标签页或应用里时,会弹出桌面通知;点击通知直接跳到该 worker 的终端。对于整个团队,把 Slack 或 Discord 的 incoming webhook 粘贴到 ⚙️ → Team notifications(也可以用 --webhook <url> 启动),当 worker 需要输入或已完成且一段时间内没人查看其终端时,办公室会向该频道发一条消息。
任务卡片。
每名 worker 头顶的卡片会显示任务名(例如 "Fix Login Redirect"),并用一行简述当前正在做的事。对于 Claude worker,Claude Haiku 通过 claude CLI 根据提示与最近的工具调用自动生成描述。OpenCode 与 Codex 使用本地任务摘要,不会调用 Claude 来命名任务。
重启后依然存活。
worker 的 agent 选择与会话 ID 持久化到磁盘,它们的终端各自运行在小进程里。当服务器重启(开发服务器 reload、进程被 kill)时,agent 会继续工作;新服务器重新接管所有终端,滚动历史一并恢复。已打开的终端会自动重连。Ctrl+C 会停止 worker;重启 systemd 服务也会停止其中的所有 worker;下一次启动时它们会在原会话中恢复,按 R 可以恢复已退出的 Claude Code、OpenCode 或 Codex 会话。聊天与每名 worker 最近 3,000 行终端输出也会保留,因此重启(或崩溃)之后依然能向上翻看 worker 的打印记录和所有人的发言。
搜索。
按 /(或在 ☰ 菜单里点 🔎 Search)可以一次性搜索聊天与所有 worker 的终端,包括办公室重启前显示过的内容。点击某行终端记录可以直接打开该终端并定位到该行,该行会被高亮。
每位 worker 的成本。
Claude Code worker 会显示已跟踪的会话成本与 token 数。OpenCode worker 会显示 token 数以及模型/服务方上报的成本估算(含子会话用量),工具提示里有 cache 与推理明细。这些估算并非账单;缺失的成本会显示为 unavailable。Codex worker 显示根会话的已记录 token,含 cache 与推理明细;成本与 API 调用次数不可用。当日与累计总额、--budget warnings 与 --budget-pause 仅基于已跟踪的 Claude Code 花费,无法约束 OpenCode 或 Codex。已跟踪的预算用尽后,新 worker 的招聘就会被暂停,对三者都生效。OpenCode 与 Codex 的会话快照、Claude 的累计数据会在重启后保留。当前工位的合计在 worker 下班后会消失。
主机监控与 worker 上限。
西墙窗户之间的显示器会展示办公室主机的负载情况:当前的 CPU 与内存,以及最近 5 分钟的两条曲线,还有当前运行的 worker 数。使用 --max-workers <n> 启动,或由管理员在 ⚙️ → Worker limit 中设置上限,办公室每时每刻运行的 worker 数(含 shell 和看板 agent)不会超过这个上限。超过上限的招聘会被拒绝并提示原因;任务队列会等到有空位再启动任务,而不是失败。在应用内,这个上限可以调低,但不能上调超过 --max-workers。当内存占用达到 90%,或 CPU 持续半分钟达到 90% 时,监视器提示主机处于高压状态,空工位上的提示也会相应改变,招聘对话框会在你确认前警告你。
Plan limits。
在 ☰ 菜单里开启 ⏳ Claude limits,一个仪表会显示你的 Claude 计划 5 小时会话与一周额度的使用情况,以及任何按模型的周限额(例如 Fable 的),以及各项何时重置。这些数字与 Claude Code 的 /usage 在每个楼层 Claude worker 所登录的账号上显示的数字一致。当有人在办公室里时,仪表每两分钟向 claude 询问一次,不会开启新会话,也不消耗费用。点击仪表可重新查询。当 Claude 以 API 密钥而非计划运行时,仪表会隐藏,也不计入 OpenCode 或 Codex。
Issues 看板。
一块软木板以 Open、In progress 与 Closed 三栏展示 GitHub issue。点击某个 issue 可以阅读正文与评论,也可以自己添加评论(以服务器上 gh 登录的账号身份发出;窗口会显示账号名),之后可以选择 Hand to a worker,让 worker 坐下并附上准备好的提示词,或者选 Add to queue 加入队列。也可以不打开直接把它从看板上取下:将准星(第一人称下是十字线,第三人称下是鼠标)指向便笺,按 E 或点击(按 O 则是打开它)。
在 issue 窗口中的 ✋ Pick it up 是同样的效果。你会把它捧在手里走遍整层,所在层的每个人都能看到(也会看到看板上少了一张):走到空工位前按 E 为它招聘 worker,到 worker 工位前按 E 把它交给那位 worker,到任务队列前按 E 加入队列。拿到便笺的 worker 会在 GitHub 上被指派该 issue,于是该 issue 会进入 In progress。
按 Q 可以把便笺放回看板上。
Close issue… 会将其以 completed 或 not planned 关闭,可附评论;若该 issue 之前在队列中等待也会一并移出。
PR 看板。
另一块软木板以 Draft、In review、Approved、Merged 与 Closed 五栏展示拉取请求,并显示 CI 状态与 diff 大小。点击某个 PR 可以查看其描述、评论、审阅意见与 CI 检查,并可在上面评论。
Files changed 会展示 diff,左侧按目录树或扁平列表展示文件,评论会显示在被评论的代码行下方。勾选 Reviewed(或按 V;J/K 在文件之间切换)会把该文件折叠。你的勾选会保存在浏览器中,被勾选过的文件若再次改动会被标记。
Merge… 会以 squash、merge 或 rebase 方式合并 PR,并可以让 GitHub 在 CI 通过后完成合并。
Close PR… 不合并地关闭 PR,可附评论,并可删除其分支。
Review and Fix comments & merge 会把 PR 交给一名 worker;它会修复评论、让检查通过后合并。当 PR 与其 base 分支存在冲突时,该按钮会变成 Fix conflicts & merge:默认新招一名 worker,把 base 合并进来、解决冲突后再合并。
合并锣。
电梯旁立着一面铜锣,位于 PR 看板的另一侧。每当有 PR 合并,它都为该层的所有人敲响,纸屑从天花板飘满整层(包括阁楼),并在该 PR 来源工位的上空(无人时则在锣上空)炸开;每个醒着的 worker 都会爬上自己的桌子来一段小舞,头顶灯泡像迪斯科球一样闪烁,然后跳回座位。坐在懒人沙发上的 worker 在沙发里跳舞,看板 agent 在各自的小亭子里跳。无论 PR 是从 PR 窗口、由 worker 的 gh pr merge、自动合并,还是直接在 GitHub 上合并,锣都会响。当任务队列的最后一项完成时,锣会连响三声,每张桌子上空都飘起纸屑。走过去按 E 也可以自己敲。
把看板上的任何内容问一位 worker。
每个 issue 与 PR 上都有 ✍️ Ask a worker…:输入你自己的提示,worker 会连同它要处理的 issue 或 PR 一并收到。可以发给新招的、坐在空工位的 worker,也可以发给已坐在工位上的 worker。
看板 agents。
在 issue 看板、PR 看板与任务队列旁各立着一座小亭子,亭子里站着一位 agent。走过去按 E,输入你想做的事,它会以 Claude Code(或你配置的)agent 身份运行,已经预先了解自己的工作。issue agent 会建单、查找、分诊、贴标签并用 gh 关闭 issue。PR agent 会总结、审阅、评论和合并拉取请求。队列 agent 会把你所要求的内容拆分成多张任务卡片放入队列(一张卡片对应一项工作),并能告诉你当前队列中有什么,或从中移走任务。它本身不会执行任务,哪怕只是一行修改:它只把任务排进队列并告诉你排了什么。第一次提示会招聘它;之后你的提示会进入同一会话,你可以继续追问,睡眠中的 agent 也会被你的提示唤醒。在那里按 O 可以查看其终端,按 X 可以让它下班;