# 智能体、CLI 与状态

> nsq 能运行哪些智能体 CLI，它如何准确知道智能体在工作、需要你还是已完成，以及它绝不会碰的东西。

Source: https://docs.neurosquad.ai/zh/cli/agents

## 支持的 CLI

| CLI | `nsq run …` | 状态来源 |
| --- | --- | --- |
| Claude Code | `claude` | Claude Code 的钩子，并与其会话记录核对 |
| Codex CLI | `codex` | Codex 钩子 |
| OpenCode 1.x 和 2.x | `opencode` | 一个 OpenCode 插件（nsq 会自行区分两个版本） |
| 任意命令 | `-- <command…>` | 命令的输出（没有钩子） |

按常规方式安装并登录每个 CLI——nsq 会以你自己的登录启动 `PATH` 中的那个副本。更多 CLI 会按需求陆续支持：[提出需求](https://github.com/glmn-ai/neurosquad-cli/issues/new?template=harness_request.yml)。

## nsq 如何知道智能体在做什么

nsq 不靠猜屏幕。每个 CLI 都通过**钩子**（OpenCode 通过插件）把自己的生命周期上报给本机上的 nsq（`127.0.0.1`，每个智能体有自己的密钥）：

- **working**（工作中）——一个回合开始了；
- **needs you**（需要你）——CLI 卡在等你：权限请求（"Claude wants to run: npm test"）、问题、待批准的计划。你看到的是 CLI 自己的原文；
- **finished**（已完成）——回合结束，答案已在屏幕上；
- **idle**（空闲）——回到提示符，没有新内容（你关闭了问题、中断了回合，或它重启了）。

你自己的按键也会被计入：在智能体终端里回答一个正在等待的智能体，它会立即变为「工作中」。对 Claude Code，nsq 还会读取会话记录的末尾，从而捕捉到不触发钩子的中断、API 错误和排队中的提示词。

普通命令（`nsq run -- …`）没有钩子：有输出即为「工作中」，安静几秒即为「已完成」，并且永远不会显示「需要你」。

## 绝不改写你的配置

nsq 需要的一切都按智能体单独传入——命令行参数、环境变量，以及 `~/.neurosquad-cli/layers/` 中的文件。你的 `~/.claude`、`~/.codex` 和 `opencode.json` 永远不会被改动。

## 会话与继续

每个智能体都保留自己的 CLI 会话。`nsq restart`、`nsq start` 以及守护进程自身的重启（`nsq down` 后 `nsq up`）都会继续原会话，而不是从头开始。如果 CLI 那边已经没有这个会话，则开启一个新会话。

## 中断

仪表盘里的 `i` 或 `nsq interrupt <agent>` 会发送该 CLI 真正用来停止回合的按键——Claude Code 和 Codex 是 Escape，OpenCode 是连按两次 Escape——而不是 Ctrl+C，因为 Ctrl+C 会让其中一些 CLI 直接退出。

## 危险模式

`--dangerous`（或仪表盘里的 `d`，或 `nsq set <agent> --dangerous on`）让智能体无需请求权限即可执行操作。对 Claude Code，它会即时切换；对其他 CLI，它从下次启动起生效，需要重启时 nsq 会提示你。

> 在危险模式下，智能体可以运行任何命令、修改它能访问的任何文件。请在 worktree 或可以丢弃的文件夹里使用。
