Codemode 是一个 harness‑side 执行环境,使 LLM 代理能够在不将结果倾倒进模型上下文窗口的情况下编排复杂的工具交互。通过通常的接口调用工具时,只有输出的后 2000 行会被保留在代理的上下文中,这对于产生大量输出的操作(如图像生成或处理大规模数据集)很快就会成为瓶颈。Codemode 将编排层移入 harness 自身,在代理的“大脑”(LLM 及其上下文)和实际运行工具的“手部”之间建立了清晰的分离,从而使代理能够在保持上下文轻量的情况下链式执行多个步骤。

此图像可视化了 Codemode 的核心概念,即 LLM 代理的上下文保持轻量级,而复杂的工具编排则发生在 harness‑side JavaScript 沙盒中。
在 harness 内部,Codemode 作为一个基于 QuickJS 在 WebAssembly 运行时构建的 JavaScript 沙盒运行,该沙盒故意禁用网络访问、文件系统访问、计时器,并仅提供有限的 RAM。在这些限制下,代理可以发出工具调用并接收它们的完整结构化输出,这些输出可以通过编程方式处理,而不是被截断为纯文本。store() 函数使代理能够在会话转录中持久化数据,以便后续的 Codemode 调用可以读取它,从而实现有状态的工作流,例如探测工具的响应以检查其形状,然后编写脚本来处理剩余的项目。博文给出了具体示例:通过 models.getAvailableOfType 和 models.generateImages 调用图像生成模型;使用 Jev 分类器对一批 GitHub 议题进行情感分类;以及驱动一个简单的游戏调试循环,其中 Jev 根据游戏状态决定下一步操作。
虽然 Codemode 解锁了更丰富的代理行为,但这是在显著的权衡下实现的。由于沙盒无法直接访问网络或文件系统,每次交互都必须通过对底层系统的工具调用来进行,这保证了安全性,但在不添加新工具的情况下限制了可实现的功能。关于将 JavaScript 作为 Codemode 语言的选择在讨论中已经被指出,一些观察者认为基于 bash 的方法可能对已经习惯命令行工具的代理来说感觉更自然;然而,JavaScript 的异步特性和对象操作使其非常适合 Codemode 所实现的并发操作和状态管理模式。此外,Codemode 提供了通往 MCP 服务器的途径:代理可以在沙盒内使用工具搜索实用程序来发现并调用诸如 Sentry MCP 之类的服务,这表明 harness‑side 脚本层也可以充当外部可扩展点的桥梁。