# 十九个智能体 CLI，同一种集成深度

> NeuroSquad 如何把 19 个智能体 CLI 提升到 Claude Code 的水平：一份约四十项能力的清单，每个工具各用一套机制，做不到的地方给出证明。

- URL: https://neurosquad.ai/zh/blog/nineteen-agent-clis/
- Published: 2026-09-26
- Publisher: NeuroSquad (https://neurosquad.ai/)

NeuroSquad 0.1.137 新增了九个智能体 CLI——Gemini CLI、GitHub Copilot CLI、Amp、Factory Droid、aider、Goose、Kimi Code、Cline 和 Auggie——并把 Cursor CLI 和 Crush 提升到与其他成员相同的水平。总数达到十九个，而“支持”一词第一次对它们所有人都意味着同一件事。

三天前还不是这样。第一个版本就能在卡片里运行十个 CLI，但只有 Claude Code 是深度集成的：它的状态来自它自己的钩子，重启后会话能够恢复，它能通过箭头拿到工具。其他的只是跑在终端里，大多靠启发式判断来盯着。这篇文章讲的就是如何补上这个差距——在一天之内的三个版本里。

*各个版本中，哪些 CLI 拥有完整集成。在各步之间切换看看。* (interactive: https://neurosquad.ai/zh/blog/nineteen-agent-clis/)

## “同一种深度”指的是什么

我们把应用为 Claude Code 做的所有事情写成了一份约四十项能力的清单，每个 CLI 都有一份自己的文档，逐行对照这份清单。每一行只可能是三种情况之一：**原生**（CLI 本身具备，应用直接使用）、**模拟**（借助该 CLI 的另一种机制实现，并写明怎么做），或者**不可能**——附上证明，通常是 CLI 自己源代码中的一行。

对画布使用者来说最重要的几行：

- **会话恢复**：重启应用或卡片后，智能体接着同一段对话继续。
- **精确状态**：工作中、等你处理、已完成——来自 CLI 自身的事件，并附上它具体在问什么。
- **通过箭头使用工具**：应用的 MCP 工具，加上已连接的 MCP 服务器和技能。
- **卡片模式**：智能体通过卡片（用终端跑命令，用浏览器上网）而不是自带的内置工具来工作，而且在危险模式下同样有效。
- **安全中断**：由预算刹车触发，不会丢失会话。
- 按卡片统计的**用量和模型**、**上下文指示**和压缩，以及达到速率限制后的**自动继续**。

## 每个 CLI 都需要一条不同的路子

清单是同一份，机制却几乎从不相同。对 Claude Code，应用会在你的设置之上叠加一个设置文件，它的钩子用一行 `curl` 上报每一次状态变化。下面是其他几个是怎么做到的。

**OpenCode** 用的是一个插件——所有卡片共用一个文件——负责上报会话状态和权限请求。它的配置通过一个环境变量传入，这个变量是用排除法选出来的：用于内联 JSON 的那个变量已经在承载 OpenRouter 署名请求头，同一个变量有两个写入方就会互相覆盖；而用于配置*目录*的那个变量，会让你的全局指令文件失效。中断它也得小心：在 OpenCode 里，输入框为空时按 Ctrl+C 会**直接关闭应用**，而预算刹车以前发的恰恰就是这个。现在它改为连按两次 Escape。

**Hermes Agent** 会读取一个管理员级别的配置层，应用把它指向每张卡片专属的一个文件，并按叶子节点逐项合并到你的配置之上。一次实测发现，它的交互模式只有在 MCP 服务器写在你的原始配置里时才会去连接——所以卡片会在提示符就绪后自己输入 `/reload-mcp`，第一个提示词要等出现 `Agent updated` 之后才会插入。另一个发现是：模型提供方出错时，Hermes 永远不会发出会话结束事件，卡片就一直停在“工作中”；现在只要一轮尚未结束，应用还会在终端里留意 Hermes 打印出的提供方错误。

**Gemini CLI** 和它的分支 Qwen Code 一样有一个系统设置路径，但只有当那个文件归管理员所有、且普通用户不可写时，它才会加载。放在应用文件夹里的文件会被跳过，并给出一条安全警告。Gemini 认的是主目录覆盖，所以每张 Gemini 卡片都用一个自己的主目录运行，里面放着它的设置层——而你真实 `~/.gemini` 里的其他一切，包括会话和登录信息，都通过目录联接链接进来。卡片的会话就是你的会话：`gemini --resume` 在普通终端里也能用，反之亦然。

**aider** 没有 MCP 客户端，没有钩子，也没有插件 API。不过它是个 Python 程序，而 Python 会在一切代码之前，先从路径中导入 `sitecustomize` 模块。aider 卡片启动时，`PYTHONPATH` 的第一位是一个专用文件夹，其中的模块会在 aider 的六个模块加载时逐个打补丁——每个补丁都有防护，如果以后的 aider 改了某个方法的名字，只会关掉那一个功能——然后再把自己的变量移除，这样 aider 启动的任何东西都不会继承它们。

**Kilo Code** 默认会连接到一个正在运行的 Kilo 守护进程，而不是启动自己的工作进程；可守护进程有它自己的环境——卡片会悄无声息地丢掉自己的配置、工具和 MCP 令牌。现在每张 Kilo 卡片启动时都会打开关闭这种连接的开关。**Codex CLI** 以前在卡片停止后还能活下来：npm 包装脚本退出了，`codex.exe` 却还在跑。现在卡片直接启动真正的可执行文件。

![“新建智能体”对话框，展开了智能体 CLI 列表](https://neurosquad.ai/blog/nineteen-agent-clis/new-agent-zh.webp)

*创建智能体时选择 CLI、提供方和模型。已安装的 CLI 是在本机当前的 PATH 中找到的。*

## “不可能”也是一种答案

有些行填不上，而把这一点说清楚，本身就是工作的一部分。有几个 CLI——Auggie、Droid、Goose、Kimi——不允许调用方指定会话 id；应用会记下它们自己生成的 id，并据此恢复会话。Auggie 没有压缩命令，因为上下文窗口满了它会自己总结历史；所以它的卡片上干脆没有“压缩”按钮。Cline 只在会话启动时读取一次服务器的工具列表，之后不会刷新——所以会话中途画的箭头要到下次启动才生效，文档里也写明了这一点。

Kimi Code 有同样的限制，但在它身上做成了模拟：Kimi 卡片从一开始就拿到所有内置工具组，由箭头在调用时决定是否放行。一张在会话中途新建的笔记卡片，在同一个会话里就被写入了内容。

Amp 是最坦率的一个例子。它的智能体循环——包括模型调用——运行在 Amp 的服务器上；本地 CLI 只负责执行工具。所以对 Amp 来说，OpenRouter 及其署名都是不可能的，应用围绕它所做的一切，都是对着一个本地伪造的 Amp 服务器验证的。

> **实测发现：被终端折断的一行** Goose 的会话被删除后，它会打印 `no such session exists`，应用本该据此用一个新会话恢复。第一个版本没认出来：Windows 控制台把这一行折成了 `no suc / h session exists`。现在匹配恢复标记时会先去掉所有空白。

## 怎么测的

每个 CLI 都装在临时文件夹里，从不全局安装，并由一个独立的应用构建来运行，它有自己的配置文件和一个临时主目录，所以没有读写任何人的真实配置。大多数 CLI 都指向本地回环接口上的一个小型脚本化模型服务器——它会回答 `PING`、调用工具、卡住十五秒、返回 429——这样速率限制、卡顿和权限提示都能按需制造，而不必干等。

同一个服务器还记录了请求头，OpenRouter 署名就是这样核对的：每个与 OpenRouter 通信的 CLI 现在都会发送 NeuroSquad 的请求头，包括使用 CLI 自己的 OpenRouter 登录的卡片，而且每一个都是**在拦截服务器上实测的**，而不是照搬文档。

![添加卡片菜单：智能体 CLI 排在最前，有搜索框，并标出已安装的](https://neurosquad.ai/blog/nineteen-agent-clis/add-menu-zh.webp)

*添加卡片菜单把智能体排在最前；本机已安装的会被标出。*

一路上还顺带修了两个小问题：Kilo Code 卡片不再因为共享的守护进程而丢失设置，Qwen Code 访问应用 MCP 服务器的令牌也不再写入磁盘。完整列表见 [0.1.128](https://neurosquad.ai/zh/changelog/#v0.1.128)、[0.1.133](https://neurosquad.ai/zh/changelog/#v0.1.133) 和 [0.1.137](https://neurosquad.ai/zh/changelog/#v0.1.137) 的更新日志。
