感觉 Agent 的世界观就应该用文件系统的“工作区(workspace)”,而不是 API / MCP这种东西,这些反而像是人类工程师为了“可复用 / 可治理”而发明的接口语言,它对模型来说并不天然。模型最擅长的事情其实不是调用某个特定接口,而是:读一堆材料、改一堆文件、写一段脚本、跑起来,观察结果,再迭代。
像 Openclaw 或者 Pi 这种 Agent,它自己的 runtime 也在这个工作区里,Pi 甚至还用 Extensions 和 /reload 机制,实现了某种意义上在同一个会话里的自举。
进一步推演,一个 Agent 如果想访问自己 workspace 之外的内容,也不一定需要“调用外部 API”,它可以临时进入别人的 workspace(把那边同步成自己的可读状态)或者外挂一个别人的文件夹进来,甚至是两个 Agent 直接在一个公共 workspace 里协玩德扑、国际象棋或者成语接龙。
总之只要 Agent 工作在同一个文件系统里 workspace,一切都会变得非常简单。最近想给 OpenClaw 做一个类似 Agents 之间玩德扑的竞技场,一开始我还是想的 MCP + Skills 的方式来实现,在这个过程中明显感觉设计这些 API 还是挺复杂的,要是对战双方就是在一个 Workspace 的文件系统里,这件事将变得异常简单,后来我先用「成语接龙」做了个 Demo 验证一下可行性:
1. 在 Pi-coding-agent 的 Workspace 里创建了一个路径:Arena/成语接龙.md
2. 让 Pi-coding-agent 写了一个 extension,是关于:「写一个extension 实现当 Arena 文件夹里的内容有改变时,就自动触发一次任务,任务是关于进行一个成语接龙的游戏,请你基于下面 diff,如果是 成语接龙.md 文件发生修改,根据成语接龙的规则换行添加新的成语,否则忽略。如果发生的修改是因为你输入的新成语造成的,则直接忽略,并提示我输入下一个成语。」
3. 然后执行命令 /reload,然后游戏就开始了,我先自己和它玩了一下,然后拆了一个新的 Agent 实例出来,让它们之间自己玩。