| 1 | # Reasonix 使用指南 |
| 2 | |
| 3 | <a href="../README.zh-CN.md">README</a> |
| 4 | · |
| 5 | <a href="./GUIDE.md">English</a> |
| 6 | · |
| 7 | <a href="./SPEC.md">规格</a> |
| 8 | |
| 9 | > 日常配置与使用。工程契约与内部实现(数据类型、registry、包结构、路线图)见 |
| 10 | > **[规格 SPEC.md](./SPEC.md)**。 |
| 11 | |
| 12 | ## 目录 |
| 13 | |
| 14 | - [配置](#配置) |
| 15 | - [CLI 命令参考](./CLI.zh-CN.md) |
| 16 | - [环境变量](#环境变量) |
| 17 | - [Serve Web 前端](#serve-web-前端) |
| 18 | - [配置路径](./CONFIG_PATHS.zh-CN.md) |
| 19 | - [思考语言](./REASONING_LANGUAGE.zh-CN.md) |
| 20 | - [任务合约与暂停策略](./TASK_CONTRACT.zh-CN.md) |
| 21 | - [自定义 OpenAI-compatible provider](#自定义-openai-compatible-provider) |
| 22 | - [桌面端 Hooks](./DESKTOP_HOOKS.zh-CN.md) |
| 23 | - [快捷键](#快捷键) |
| 24 | - [权限与沙盒](#权限与沙盒) |
| 25 | - [能力诊断](#能力诊断) |
| 26 | - [插件(MCP)](#插件mcp) |
| 27 | - [斜杠命令](#斜杠命令) |
| 28 | - [内置文档检索](#内置文档检索) |
| 29 | - [@ 引用](#-引用) |
| 30 | - [双模型协同](#双模型协同) |
| 31 | |
| 32 | ## 配置 |
| 33 | |
| 34 | 优先级:**flag > `./reasonix.toml` > 用户配置文件 > 内置默认值**。从 |
| 35 | **Reasonix v1.8.1** 开始,用户配置位于 macOS/Linux 的 |
| 36 | `~/.reasonix/config.toml`,Windows 为 `%AppData%\reasonix\config.toml`;迁移和相关数据路径见 |
| 37 | [配置路径](./CONFIG_PATHS.zh-CN.md)。标注为“仅用户/全局”的字段(包括 agent 轮数上限)不会被 `./reasonix.toml` 覆盖。 |
| 38 | Provider 通过 `api_key_env` 命名密钥,真实密钥值保存在 CLI 与桌面端共用的 |
| 39 | Reasonix 全局 `<Reasonix home>/.env`。项目 `.env`、home `.env`、继承的 shell 环境变量、旧 credentials 和系统 keyring 都不再作为 provider key 的运行时 fallback;旧凭据只作为迁移来源读取。项目 `.env` 仍会作为当前 workspace 范围内的 MCP/plugin 非 provider `${VAR}` 展开来源,但不会导入 provider key 或 Reasonix 控制变量。全局 `config.toml` 和 `.env` 的完整结构见 |
| 40 | [配置路径](./CONFIG_PATHS.zh-CN.md)。 |
| 41 | |
| 42 | 桌面端和 CLI 端的可见思考语言设置,见 [思考语言](./REASONING_LANGUAGE.zh-CN.md)。 |
| 43 | 桌面端 Hooks 的 JSON 配置、事件 key 和 payload 字段,见 [桌面端 Hooks](./DESKTOP_HOOKS.zh-CN.md)。 |
| 44 | `SessionStart` hook 可通过 stdout 或 `hookSpecificOutput.additionalContext` 把插件/工作流 bootstrap 内容一次性注入下一轮真实用户输入上下文,而不是写入稳定 system prompt。 |
| 45 | 插件包可通过 `hooks/session-start-codex` 或插件根目录 `CLAUDE.md` 提供该启动上下文;Claude 风格 `.claude/settings.json` command hooks 也会按同名事件映射到 Reasonix hooks。 |
| 46 | |
| 47 | ```toml |
| 48 | default_model = "deepseek-flash" # 执行器;设 [agent].planner_model 可加规划器 |
| 49 | # language = "zh" # 界面语言;为空则按 $LANG / $REASONIX_LANG 自动检测 |
| 50 | |
| 51 | [ui] |
| 52 | # shortcut_layout = "desktop" # classic|desktop;兼容旧配置 |
| 53 | # cursor_shape = "bar" # block|underline|bar;CLI/TUI 输入光标 |
| 54 | show_turn_usage = false # 隐藏 TUI 每轮 token/费用回执;默认 true |
| 55 | |
| 56 | [agent] |
| 57 | reasoning_language = "auto" # 可见思考过程语言:auto|zh|en |
| 58 | # plan_mode_read_only_commands = ["gh issue view"] # 仅兼容旧配置;Plan bash 现由 Permissions 决定 |
| 59 | # planner_model = "deepseek-pro" # 可选的低频规划器 |
| 60 | # subagent_model = "deepseek-pro" # runAs=subagent skill 的默认模型 |
| 61 | # subagent_models = { review = "deepseek-pro", security_review = "deepseek-pro" } |
| 62 | # max_subagent_depth = 2 # 子代理嵌套委派深度;设为 1 可恢复旧的单层边界 |
| 63 | # max_subagent_concurrency = 6 # 会话级子代理总并发(task/fleet/skills) |
| 64 | # max_parallel_writers = 3 # 互不重叠 write_paths 时的并行写入上限 |
| 65 | tool_result_snip_ratio = 0.6 # 在摘要 compaction 前先缩短旧工具输出 |
| 66 | |
| 67 | [[providers]] |
| 68 | name = "deepseek-flash" |
| 69 | kind = "openai" |
| 70 | base_url = "https://api.deepseek.com" |
| 71 | model = "deepseek-v4-flash" |
| 72 | api_key_env = "DEEPSEEK_API_KEY" |
| 73 | # 还有预设:deepseek-pro |
| 74 | |
| 75 | [tools] |
| 76 | enabled = [] # 省略/为空 = 全部内置工具 |
| 77 | bash_timeout_seconds = 120 # 前台安全上限;设为 0 表示不设工具层超时 |
| 78 | mcp_startup_timeout_seconds = 30 # 后台 initialize + tools/list 安全上限 |
| 79 | mcp_call_timeout_seconds = 300 # MCP 调用默认安全上限;可用 plugin/tool 覆盖 |
| 80 | |
| 81 | [environment] |
| 82 | enabled = true # 启动时把 OS、shell 和常见工具摘要稳定注入 prompt |
| 83 | # [environment.tools] |
| 84 | # go = "/opt/homebrew/bin/go" # 可选:显式可信路径;workspace 内路径不会在启动时自动执行 |
| 85 | |
| 86 | [skills] |
| 87 | # paths = ["~/my-skills", "../shared/skills"] # 额外的自定义技能目录 |
| 88 | # excluded_paths = ["~/.agents/skills"] # 隐藏约定来源,不删除目录 |
| 89 | # disabled_skills = ["review"] # 隐藏技能,直到 /skill enable <name> |
| 90 | |
| 91 | [permissions] |
| 92 | mode = "ask" # 无规则命中时 writer 的兜底:ask|allow|deny |
| 93 | deny = ["Bash(rm -rf*)", "Bash(git push*)"] # 任何模式下都硬阻断 |
| 94 | allow = ["Bash(go test:*)"] # 从不询问 |
| 95 | |
| 96 | [sandbox] |
| 97 | # workspace_root = "" # 文件写工具被限制在此目录;留空 = 当前目录 |
| 98 | # allow_write = ["/tmp"] # write_file/edit_file/multi_edit/move_file 额外可写的目录 |
| 99 | # forbid_read = ["${HOME}/.ssh"] # agent 不可读取或列出的路径 |
| 100 | |
| 101 | [serve] |
| 102 | auth_mode = "none" # none|token|password;绑定到非 localhost 前请先开启认证 |
| 103 | # token = "" # 可选固定 token;token 模式为空时启动时自动生成 |
| 104 | # password_hash = "" # 用 reasonix serve --hash-password --password '...' 生成 |
| 105 | # behind_proxy = false # 只在可信反向代理后方设为 true |
| 106 | |
| 107 | [[plugins]] |
| 108 | name = "example" |
| 109 | command = "reasonix-plugin-example" |
| 110 | startup_timeout_seconds = 60 # 可选:initialize + tools/list 上限 |
| 111 | call_timeout_seconds = 600 # 可选:单个 MCP server 的调用超时 |
| 112 | tool_timeout_seconds = { "generate_video" = 1800 } # 可选:raw MCP tool 名称 |
| 113 | ``` |
| 114 | |
| 115 | 完整 schema 与每个字段的契约见 [`SPEC.md` §5](./SPEC.md#5-configuration-toml)。 |
| 116 | |
| 117 | 已安装或由项目配置声明的 MCP server 不需要逐工具信任名单。独立双模型 Planner 可使用所有 |
| 118 | 非 destructive 工具,即使 server 没有声明 `readOnlyHint`;严格只读 subagent 仍要求 |
| 119 | `readOnlyHint: true` 且无 `destructiveHint`。 |
| 120 | |
| 121 | `[agent].plan_mode_read_only_commands` 也继续参与配置 round-trip,但主 Plan 工作流不再维护独立的 |
| 122 | bash allowlist 或信任提示。Plan 与常规模式使用相同的 Permissions 规则做 bash 分类和审批;Sandbox |
| 123 | 仍是文件系统、进程和网络的强制边界。独立 planner 和显式只读 subagent runner 继续使用自己的严格 |
| 124 | 只读工具 registry 与前台命令分类器。 |
| 125 | |
| 126 | ### 环境变量 |
| 127 | |
| 128 | 多数日常设置应写在 `config.toml` 或前文提到的 Reasonix 全局 `.env` 中。下面这些变量是进程级高级开关; |
| 129 | 需要在启动 Reasonix 之前设置。项目 `.env` 不是 Reasonix 控制变量的运行时来源。 |
| 130 | |
| 131 | ### CLI 上报统计 |
| 132 | |
| 133 | CLI 可以向 `https://crash.reasonix.io` 发送每日最多一次的匿名活跃安装 ping, |
| 134 | 以及有界、完全不含内容的事件计数。使用以下用户全局命令配置: |
| 135 | |
| 136 | ```bash |
| 137 | reasonix config telemetry # 查看当前生效模式 |
| 138 | reasonix config telemetry auto # 默认:仅本机交互式 TTY |
| 139 | reasonix config telemetry on # 也允许本机 headless `reasonix run` |
| 140 | reasonix config telemetry off # 关闭并删除待发送计数文件 |
| 141 | ``` |
| 142 | |
| 143 | 正式版 CLI 第一次在符合条件的交互式终端启动时,会先明确说明数据边界,并在任何 |
| 144 | telemetry 请求之前只询问一次。提示为 `[Y/n]`:直接回车、输入 `y` 或 `yes` 会保存为 |
| 145 | `auto`;输入 `n` 或 `no` 会保存为 `off` 并删除待发送计数。选择保存后不再提示,允许的 |
| 146 | 后续上报保持静默。如果偏好设置保存失败,则不会上传任何内容。 |
| 147 | |
| 148 | 在 CI、开发构建中始终关闭;设置 `DO_NOT_TRACK` 或 |
| 149 | `REASONIX_TELEMETRY=0` 也会关闭。`auto` 模式下,重定向、pipe 或其他非交互会话 |
| 150 | 不会上报。尚未保存选择时,这些不符合条件的会话既不会提示,也不会上报。授权后的 |
| 151 | 网络失败完全静默,不会改变 stdout、stderr 或进程退出码;未发送计数只会保存在有 |
| 152 | 数量和时效上限的本地队列中,等待后续启动重试。 |
| 153 | |
| 154 | ping 包含一个 CLI 专用的随机 128-bit 安装 ID、CLI 版本、OS、架构和 `cli` surface |
| 155 | 标记。计数批次使用同一个 ID 做每日活跃安装去重,只包含固定 bucket,例如 CLI 模式、 |
| 156 | 运行配置档、权限/会话模式、turn 延迟、finish reason、cache hit 区间、通用 |
| 157 | Provider/工具错误分类、compaction、恢复计数和归一化界面语言。这个 ID 与桌面端安装 |
| 158 | ID 分离,不是账号、硬件、仓库或 session 标识。 |
| 159 | |
| 160 | Reasonix 绝不会上传 prompt、回答、reasoning、工具名/参数/输出、路径、仓库/分支、 |
| 161 | session ID、精确 token/费用、Provider/model 名称、base URL 或环境变量。 |
| 162 | |
| 163 | ### CLI 崩溃报告 |
| 164 | |
| 165 | 当未处理的 Go panic 到达 CLI 入口调用栈时,Reasonix 会把脱敏报告保存在 |
| 166 | `<Reasonix home>/cli-crash-reports`。最多保留 10 份,文件权限仅限当前用户读取。 |
| 167 | panic 原文绝不会被序列化;绝对源码路径会变成 `<path>/<file>.go:<line>`,函数参数会被 |
| 168 | 移除,并且在本地保存和实际发送前都会再次清理密钥、token、邮箱及长标识符。 |
| 169 | |
| 170 | 崩溃报告绝不会自动上传。使用以下命令审阅和管理: |
| 171 | |
| 172 | ```bash |
| 173 | reasonix report # 预览最新报告;TTY 中询问后才发送 |
| 174 | reasonix report list # 列出本地报告 |
| 175 | reasonix report show [ID] # 仅预览,不发送 |
| 176 | reasonix report send [ID] # 明确发送;成功后才删除本地副本 |
| 177 | reasonix report delete [ID] # 不发送,直接删除 |
| 178 | ``` |
| 179 | |
| 180 | 通过 pipe 或重定向运行 `reasonix report` 时只会预览,不会询问或发送。CLI telemetry |
| 181 | 设置不会自动发送或自动删除这些 |
| 182 | 需要单独审阅的报告。Go 无法恢复 runtime fatal throw、操作系统强制终止,以及未包装 |
| 183 | 后台 goroutine 中的 panic,因此这些情况不会生成本地报告。 |
| 184 | |
| 185 | ## Serve Web 前端 |
| 186 | |
| 187 | `reasonix serve` 会用同一个本地 Reasonix 引擎启动浏览器 UI。适合不安装桌面端但想用可视化界面、 |
| 188 | 在远程开发机上通过 tunnel 使用,或把当前会话临时共享给浏览器查看的场景。 |
| 189 | |
| 190 | ```bash |
| 191 | cd your-project |
| 192 | reasonix serve |
| 193 | # 打开 http://127.0.0.1:8787 |
| 194 | ``` |
| 195 | |
| 196 | 默认监听 `127.0.0.1:8787`,认证模式是 `auth_mode = "none"`。这个默认值只适合本机使用。 |
| 197 | 如果要绑定到非 loopback 地址、通过 tunnel 暴露,或放到反向代理后面,请先开启认证再分享 URL: |
| 198 | |
| 199 | ```bash |
| 200 | reasonix serve --auth token |
| 201 | reasonix serve --addr 0.0.0.0:8787 --auth token |
| 202 | reasonix serve --auth password --password 'temporary-password' |
| 203 | ``` |
| 204 | |
| 205 | Token 模式会在终端打印带 `?token=...` 的分享链接;可通过 `--token` 或 `[serve].token` |
| 206 | 复用固定 token。Password 模式必须在启动时传 `--password`,或在配置里保存 bcrypt hash: |
| 207 | |
| 208 | ```bash |
| 209 | reasonix serve --hash-password --password 'strong-password' |
| 210 | |
| 211 | # <Reasonix home>/config.toml |
| 212 | [serve] |
| 213 | auth_mode = "password" # none|token|password |
| 214 | password_hash = "$2a$12$..." |
| 215 | behind_proxy = true # 仅可信反向代理后方使用 |
| 216 | ``` |
| 217 | |
| 218 | Web UI 提供聊天、工具审批、会话历史、rewind/fork/summarize、模型与 reasoning effort 控件、 |
| 219 | Goal、由 `todo_write` 工具驱动的实时 Todo 面板、扩展发布的 status/card/form/notification |
| 220 | 界面,以及已配置 provider 的余额显示。扩展提供的模型也会进入模型选择器。空闲时运行 |
| 221 | `/reload` 可在不重启 Serve 的情况下,以失败原子方式重载扩展 Sidecar 和运行时 generation。临时启动可用 |
| 222 | `--model`、`--max-steps` 或 `--resume`;不传 `--model` 时,`serve` 使用用户全局 |
| 223 | `default_model`。 |
| 224 | |
| 225 | 如果当前 Provider 尚未保存 API Key,绑定在回环地址的 Serve 仍会启动,并先显示 Provider |
| 226 | 配置页,而不是在浏览器连接前直接失败。通过 Serve 认证后可在该页输入 Key;Reasonix 会以受限 |
| 227 | 权限写入**当前主机**的全局凭据文件,在同一进程内重建 Controller,然后进入正常 Web UI。 |
| 228 | 凭据写入接口在非回环监听器上始终禁用。对于 SSH 远程窗口,“当前主机”指经 SSH 隧道访问的 |
| 229 | 远端主机;Key 不会从桌面本机自动复制过去。 |
| 230 | |
| 231 | ## 通过 ACP 接入编辑器 |
| 232 | |
| 233 | `reasonix acp` 把 Reasonix 作为 ACP v1 stdio agent 提供给编辑器和其他 host 客户端。 |
| 234 | 独立的 **[ACP 编辑器接入](./ACP.zh-CN.md)** 文档集中说明启动方式、能力协商、会话生命周期、 |
| 235 | 彼此独立的模型/工作/协作/审批控制轴、客户端文件与 terminal 能力、MCP server、权限请求, |
| 236 | 以及 Reasonix 的回合中引导扩展。 |
| 237 | |
| 238 | ## 远程 SSH |
| 239 | |
| 240 | 远程模块让 Reasonix 在远端主机上运行,并通过你自己的 SSH 连接访问它 —— 即 VS Code |
| 241 | Remote-SSH 式的体验。它在远端主机上引导一个常驻的 headless `reasonix serve`,把本地一个 |
| 242 | 回环端口转发过去,再经隧道打开现有的 serve Web 客户端。agent、工具与文件全部原生运行在远端 |
| 243 | 主机上,保真度 100%,不经过有损的文件代理。V1 支持 Linux 与 macOS 远端主机。 |
| 244 | |
| 245 | 主机保存在 `config.toml` 的用户级 `[remote]` 段。与 `[secrets]` 一样,项目级 |
| 246 | `reasonix.toml` 无法注入或覆盖远程主机 —— 克隆的仓库永远无法左右 Reasonix 向何处发起 SSH |
| 247 | 连接。凭据沿用 provider 惯例:主机只记录环境变量名(`passphrase_env`、`password_env`),其值 |
| 248 | 存放在 Reasonix 全局 `.env` 中;私钥内容本身从不存储 —— `identity_file` 只是路径。 |
| 249 | |
| 250 | ```toml |
| 251 | [remote] |
| 252 | [[remote.hosts]] |
| 253 | name = "gpu-box" |
| 254 | host = "203.0.113.7" |
| 255 | user = "dev" |
| 256 | identity_file = "~/.ssh/id_ed25519" |
| 257 | workspace = "~/projects/app" |
| 258 | serve_install = "auto" # 远端 CLI:auto | npm | upload | never |
| 259 | |
| 260 | [[remote.hosts.forwards]] |
| 261 | type = "local" # local (-L) | remote (-R) |
| 262 | bind = "127.0.0.1:5432" |
| 263 | target = "127.0.0.1:5432" |
| 264 | ``` |
| 265 | |
| 266 | 命令行: |
| 267 | |
| 268 | ```bash |
| 269 | reasonix remote add gpu-box dev@203.0.113.7 --workspace '~/projects/app' |
| 270 | reasonix remote import --all # 导入别名;连接时通过 ssh -G 解析 Include/Match 等规则 |
| 271 | reasonix remote test gpu-box # 拨号 + 认证 + 主机密钥确认 |
| 272 | reasonix remote connect gpu-box --open # 引导 serve、建隧道、打开 URL |
| 273 | reasonix remote serve status gpu-box |
| 274 | reasonix remote fs ls gpu-box:'~/projects/app' |
| 275 | ``` |
| 276 | |
| 277 | 启用 `use_ssh_config` 的主机会通过本机 OpenSSH `ssh -G` 获取最终有效配置,因此支持 |
| 278 | `Include`、通配 `Host`、`Match`(包括 `Match exec`)、多个 `IdentityFile`、`ProxyJump` 和 |
| 279 | `IdentitiesOnly`。导入时只保存原始别名,不复制一份容易过期的解析结果。 |
| 280 | |
| 281 | `connect` 是前台守护(相当于 `ssh -N` 加上 serve 引导):它保持隧道与已配置的转发存活,断线时 |
| 282 | 以指数退避自动重连,并在重连后重新挂载转发。Ctrl-C 只断开本地一侧 —— 远端 serve 继续运行, |
| 283 | 下次 `connect` 会复用它。V1 无后台守护进程。 |
| 284 | |
| 285 | 主机密钥会对照你的 OpenSSH `~/.ssh/known_hosts`(只读)以及 Reasonix 托管的 |
| 286 | `~/.reasonix/remote/known_hosts` 校验。首次见到的密钥会提示 TOFU 确认并记入托管文件;与已记录 |
| 287 | 密钥冲突的密钥会硬失败并指明出错的行,绝不自动接受。 |
| 288 | |
| 289 | 远端侧状态位于远端主机的 `~/.reasonix/remote/`:`serve-<工作区 slug>.json`(pid、绑定的回环 |
| 290 | 地址、工作区)、`serve-<slug>.token`(0600;认证 token,经 `--token-file` 传给 serve,因此不会 |
| 291 | 出现在 `ps` 中)、`serve-<slug>.log`。 |
| 292 | |
| 293 | 在桌面端,于 **设置 -> 远程 SSH** 管理主机,再通过状态栏徽标或主机行的 **远程浏览器** 按钮经 |
| 294 | SFTP 浏览与编辑文件、管理端口转发、启动/打开远程工作区。打开工作区时会创建一个类似 VS Code |
| 295 | Remote SSH 的独立 Reasonix 原生窗口。主窗口持有 SSH 隧道;远程窗口是隔离的轻量外壳,不会恢复 |
| 296 | 或抢占本地对话会话。远程网页使用**远端**主机上的 Provider 配置与 API Key —— 桌面端绝不会把 |
| 297 | 本机 Provider 暴露给远端主机。如果远端缺少当前 Provider 的 API Key,窗口会先显示经过认证的 |
| 298 | 配置页,只把 Key 保存到远端 Reasonix 凭据文件,并在不重启远端 Serve 的情况下激活 Provider。 |
| 299 | 短暂的 SSH 中断不会关闭远程窗口;桌面端会在后台重连、重新挂载回环转发,并让窗口重新加载已恢复的 |
| 300 | Serve。认证失败或主机密钥错误属于终止性故障,此时会关闭已经不可用的远程窗口。 |
| 301 | |
| 302 | ## 自定义 OpenAI-compatible provider |
| 303 | |
| 304 | 在桌面端打开 **设置 -> 模型 -> 接入 -> 添加模型服务 -> 自定义供应商**,用于接入代理、 |
| 305 | 聚合平台或自建 OpenAI-compatible chat API / Anthropic-compatible Messages API 服务。 |
| 306 | |
| 307 | 常用服务优先使用 **添加模型服务 -> 推荐预设**。DeepSeek 官方服务默认继续使用经过专项适配的 |
| 308 | OpenAI Chat Completions;需要 Anthropic Messages 兼容时,可单独添加 **DeepSeek Anthropic** |
| 309 | 可选预设,两者不会互相替换。Reasonix 还可以预填以下可编辑的自定义 provider: |
| 310 | Kimi CN、Kimi Global、Kimi Coding Plan、MiMo API、MiMo Anthropic、MiMo Token Plan |
| 311 | CN/SGP/AMS 及其 Anthropic-compatible 变体、MiniMax CN/Global API、MiniMax |
| 312 | CN/Global Anthropic、GLM CN、Z.AI Global、GLM/Z.AI Coding Plan 的 |
| 313 | OpenAI-compatible 与 Anthropic-compatible 端点、OpenCode Go、OpenCode Go |
| 314 | Anthropic、OpenCode Zen Anthropic、Qwen/DashScope CN/Global、Qwen Coding Plan |
| 315 | CN/Global 的 OpenAI-compatible 与 Anthropic-compatible 端点、StepFun |
| 316 | OpenAI-compatible 与 Anthropic-compatible 端点、NovitaAI、GMI Cloud、Vercel AI |
| 317 | Gateway、HuggingFace Router、NVIDIA NIM、KiloCode 和 Ollama Cloud。Plan 表示 |
| 318 | 访问/付费形态;只有服务商确实提供不同区域端点时,预设名才同时带 CN/Global。 |
| 319 | 因此 Kimi Coding Plan 是独立 plan 端点,Kimi 直连 API 才拆成 CN 和 Global。 |
| 320 | 预设路径通常只需要填写服务商 API Key:真实 key 会写入 Reasonix home `.env`, |
| 321 | `config.toml` 只保存端点、模型列表、key 环境变量名、上下文窗口、视觉模型元数据、 |
| 322 | 中国区端点直连、MiniMax `reasoning_split`、GLM/MiniMax thinking heuristic、 |
| 323 | Anthropic-compatible 网关需要的 Bearer 认证、Ollama Cloud max-effort 支持, |
| 324 | 以及 OpenCode Go 的每模型 reasoning 覆盖。OpenCode Go 预设原生包含订阅线路的 |
| 325 | `kimi-k3`,并配置图像输入、`high`/`max` 推理强度和 1,048,576 token 上下文窗口。未修改过 |
| 326 | 模型目录的既有 OpenCode Go 预设会自动升级;用户编辑过的模型目录保持不变。 |
| 327 | Kimi CN 和 Kimi Global 直连 API 预设也包含 `kimi-k3`,支持图像输入、1,048,576 token |
| 328 | 上下文窗口以及官方 `low`/`high`/`max` 推理强度(默认 `max`)。对官方 K3 端点,Reasonix |
| 329 | 会在多轮请求中保留完整 assistant message,使用 `max_completion_tokens` 传递输出上限, |
| 330 | 并省略 K3 的固定采样参数。未修改过的旧版 Kimi 直连模型目录会自动升级且不会改变默认模型; |
| 331 | 自定义模型目录和端点保持不变。添加后仍然可以打开 provider 卡片,继续修改模型、请求头、 |
| 332 | 端点或兼容设置。 |
| 333 | |
| 334 | **API 地址** 填写服务端点。默认模式下,Reasonix 会预览并把聊天请求发送到: |
| 335 | |
| 336 | ```text |
| 337 | <API 地址>/chat/completions |
| 338 | ``` |
| 339 | |
| 340 | 如果服务商给的是完整请求 URL,例如 `https://gateway.example.com/v1/chat/completions`, |
| 341 | 开启 **完整 URL**。开启后 Reasonix 会直接使用该地址,不再追加 `/chat/completions`。 |
| 342 | 输入框下方的预览就是最终请求地址。 |
| 343 | |
| 344 | 模型发现会基于 API 地址尝试 `/models`、`/v1/models` 等候选地址。如果网关要求单独的 |
| 345 | 模型列表端点,在 **兼容设置** 中填写 `models_url`,例如 |
| 346 | `https://gateway.example.com/v1/models`。如果接口不支持模型发现,也可以手动填写模型列表。 |
| 347 | |
| 348 | **完整 URL** 仍使用 OpenAI-compatible chat 请求体;它不会切换成 OpenAI Responses API |
| 349 | 的请求 schema。 |
| 350 | |
| 351 | ### 兼容设置 |
| 352 | |
| 353 | **兼容设置(通常不用改)** 用于处理认证变量、模型发现地址、请求头、以及 reasoning/thinking |
| 354 | 请求格式和普通 OpenAI-compatible 默认行为不一致的网关。除非服务商文档明确要求,或代理报错说明 |
| 355 | 不兼容,否则保持默认值即可。Kimi Coding Plan、MiniMax CN/Global Anthropic 这类 Anthropic-compatible 服务, |
| 356 | 保存前在基础区域把接入协议切到 **Anthropic-compatible**。 |
| 357 | |
| 358 | | 字段 | 作用 | 什么时候改 | |
| 359 | | --- | --- | --- | |
| 360 | | `api_key_env` | 该 provider 使用的 API key 环境变量名。桌面端保存的真实 key 会写入 Reasonix home `.env` 的同名变量;TOML 配置里只保存变量名。 | 多个 provider 需要不同 key 时改名;服务不需要 API key 时可以留空。 | |
| 361 | | `models_url` | 只用于自动发现模型列表的 URL。聊天请求仍使用上方的 API 地址或完整 URL。 | `/models` 或 `/v1/models` 不是该网关模型列表地址时填写。 | |
| 362 | | 额外请求头 | 静态 HTTP header,一行一个 `Header: value`。 | OpenRouter 等网关要求 `HTTP-Referer`、`X-Title` 或类似站点来源 header 时使用。API key 仍放在上方密钥字段,不要重复写到这里。 | |
| 363 | | 额外请求体 | 合并到聊天请求体顶层的 JSON 对象。 | 仅用于服务商专用开关,例如 `{"enable_thinking": true}`。`model`、`messages`、`tools`、`stream`、`thinking` 等核心字段仍由 Reasonix 控制,且不接受 `null` 值。 | |
| 364 | | Authorization: Bearer | 对 Anthropic-compatible provider,把已保存的 API key 用 `Authorization: Bearer <key>` 发送,而不是 `x-api-key`。 | MiniMax Global、Vercel AI Gateway 等网关文档明确要求 Bearer 认证时开启。 | |
| 365 | | 模型能力模式 | 指定 Reasonix 对该 provider 使用哪种 reasoning 请求协议。 | 默认用“自动识别”。只有网关被误判,或模型文档要求特定 reasoning 格式时再切换。 | |
| 366 | | Thinking 覆盖 | provider 专用的 `thinking.type` 覆盖项。 | 默认用 Auto。只有后端文档明确支持 `enabled`、`disabled` 或 `adaptive` 时再手动指定;不支持的值可能让中转站拒绝请求。 | |
| 367 | | 余额查询 URL | 可选的钱包余额查询接口。 | 服务商提供余额接口,且希望桌面端状态栏显示余额时填写。 | |
| 368 | | 上下文窗口 | Reasonix 用于自动清理上下文的 provider 级 token 预算。`0` 表示禁用自动 compaction。 | 按该 provider 的模型上下文上限填写;所选模型规格不同时使用下方的逐模型覆盖。 | |
| 369 | |
| 370 | 每个已选模型还提供一个可选的 **上下文窗口** 输入框。留空时继承 provider |
| 371 | 级设置;填写正整数时只覆盖该模型。这样,同一端点下的长上下文模型不会过早 |
| 372 | compaction,短上下文模型也不会在 Reasonix 清理前被服务端拒绝。 |
| 373 | 这里应填写模型文档标注的上下文窗口,而不是最大输出 token。例如 128K 通常填 |
| 374 | `128000`;如果服务商明确标注 `131072`,则按该精确值填写。小于 16384 时界面会 |
| 375 | 显示非阻断警告,因为过小的窗口可能导致频繁 compaction 并降低缓存命中率。 |
| 376 | |
| 377 | 模型能力模式选项: |
| 378 | |
| 379 | | 选项 | 作用 | |
| 380 | | --- | --- | |
| 381 | | 自动识别(推荐) | Reasonix 根据模型能力元数据和端点自动选择请求格式。 | |
| 382 | | DeepSeek 思考 | 使用 DeepSeek 风格的 thinking 控制,包括 `thinking.type` 和 DeepSeek 支持的推理深度。 | |
| 383 | | OpenAI reasoning | 使用标准 OpenAI-compatible 的 `reasoning_effort` 档位。 | |
| 384 | | 普通聊天(不发送思考参数) | 不发送 reasoning 或 thinking 控制字段。适合会拒绝 reasoning 参数的普通文本代理。 | |
| 385 | |
| 386 | Thinking 覆盖选项: |
| 387 | |
| 388 | | 选项 | 作用 | |
| 389 | | --- | --- | |
| 390 | | Auto(使用服务默认) | 不写 provider 级 `thinking` 覆盖,让 Reasonix 使用 provider/model 默认行为。 | |
| 391 | | Enabled(开启) | 对兼容 provider 发送 `thinking.type = "enabled"`。 | |
| 392 | | Disabled(关闭) | 对兼容 provider 发送 `thinking.type = "disabled"`。DeepSeek 风格 provider 下还会避免继续发送推理深度提示。 | |
| 393 | | Adaptive(自适应) | 仅在服务文档明确支持 adaptive thinking 时使用,例如 MiniMax-M3 风格端点;语义是发送或保留 `thinking.type = "adaptive"`。 | |
| 394 | |
| 395 | ## 快捷键 |
| 396 | |
| 397 | 这里按使用端来写,因为用户通常是先知道“我现在在桌面端/CLI”,再找对应按键。 |
| 398 | 桌面端仍用 `Shift+Tab` 切换 Plan;CLI 则用它在 Ask、Auto、Plan 之间循环。 |
| 399 | 桌面端默认用 macOS 的 `Cmd+Y` 或 Windows/Linux 的 `Ctrl+Y` 切换 YOLO; |
| 400 | 如果在 Windows/Linux 上改绑了 YOLO,`Ctrl+Y` 会成为输入框的标准重做兼容键。 |
| 401 | 桌面端粘贴继续走系统快捷键;CLI 则把终端原生文本粘贴和应用接管的图片粘贴拆成不同快捷键。 |
| 402 | |
| 403 | `[ui].shortcut_layout` 仍被接受以兼容旧配置,但下面的快捷键行为已经跨布局统一。 |
| 404 | |
| 405 | CLI/TUI 文本输入可通过 `[ui].cursor_shape` 设置光标形状,支持 `underline`、`block` |
| 406 | 和 `bar`。默认值是 `bar`:位置清晰,同时不会在中英混排输入时覆盖 CJK 双宽字符。 |
| 407 | 想使用传统终端块状光标可设为 `block`,偏好更弱的下划线光标可设为 `underline`。 |
| 408 | 该设置不影响桌面端或 Web 输入框。 |
| 409 | |
| 410 | ### 桌面端 GUI |
| 411 | |
| 412 | 桌面端快捷键在 **设置 → 快捷键** 中管理。选择可配置的行后按下新的组合键,Reasonix 会为桌面端保存该绑定。 |
| 413 | 撤销、重做等标准编辑快捷键会以锁定行展示,因为 WebView 的原生文本历史依赖这些平台组合键。 |
| 414 | 如果新组合键和已有动作冲突,会拒绝保存,避免一个快捷键触发两个动作。按 `?` 或点击 topic bar |
| 415 | 里的帮助按钮可打开快捷键帮助表;帮助表由同一份快捷键 registry 生成,因此会同步显示自定义后的绑定。 |
| 416 | |
| 417 | 全局快捷键: |
| 418 | |
| 419 | | 按键或控件 | 作用 | 说明 | |
| 420 | | --- | --- | --- | |
| 421 | | macOS `Cmd+K`,Windows/Linux `Ctrl+K` | 打开或关闭命令面板 | 打开时会聚焦搜索框;`Esc` 关闭命令面板。 | |
| 422 | | macOS `Cmd+,`,Windows/Linux `Ctrl+,` | 打开设置 | 在设置里的 **快捷键** 页可自定义桌面端绑定。 | |
| 423 | | macOS `Cmd+W`,Windows/Linux `Ctrl+W` | 关闭当前顶部标签页 | 最后一个标签页仍由原有关闭保护保留。 | |
| 424 | | `Cmd+B` / `Ctrl+B` | 显示或隐藏左侧边栏 | 和点击侧边栏开关是同一个动作。 | |
| 425 | | `Cmd+Shift+B` / `Ctrl+Shift+B` | 展开或收起最近的 shell 输出 | 和点击折叠 shell 输出提示是同一个动作。 | |
| 426 | | macOS `Cmd+1`-`Cmd+9`,其它平台 `Ctrl+1`-`Ctrl+9` | 跳转到侧边栏中对应编号的可见对话 | 短暂按住 `Cmd`/`Ctrl` 会显示编号标记;已有自定义快捷键占用相同按键时,自定义动作优先生效。 | |
| 427 | | macOS `Cmd++`、`Cmd+-`、`Cmd+0`;其它平台 `Ctrl++`、`Ctrl+-`、`Ctrl+0` | 放大、缩小或重置文字大小 | 对把加号上报为 `=` 的键盘也兼容。 | |
| 428 | | `?` | 打开键盘快捷键帮助表 | 帮助表显示当前实际生效的桌面端绑定。 | |
| 429 | |
| 430 | 输入框快捷键: |
| 431 | |
| 432 | | 按键或控件 | 作用 | 说明 | |
| 433 | | --- | --- | --- | |
| 434 | | `Enter` | 发送当前消息 | IME 组合输入确认不会被截获。 | |
| 435 | | `Shift+Enter` | 插入换行 | 输入框保持焦点。 | |
| 436 | | `Shift+Tab` | 切换 Plan 开/关 | Plan 只改变“先规划”的工作流;内置 writer 仍走当前 Ask/Auto/YOLO 与 Sandbox,MCP writer/destructive 目标在整个规划阶段保持硬阻断。 | |
| 437 | | macOS `Cmd+Z`,Windows/Linux `Ctrl+Z` | 撤销输入框中的最近一次编辑 | 普通键入继续由 WebView 原生历史管理;Reasonix 接管的粘贴、剪切、折叠块和结构化 token 会作为完整事务恢复。 | |
| 438 | | macOS `Cmd+Shift+Z`,Windows/Linux `Ctrl+Shift+Z` | 重做输入框中的最近一次编辑 | Windows/Linux 改绑 YOLO 后也可使用 `Ctrl+Y`。 | |
| 439 | | `Cmd+Y` / `Ctrl+Y`(默认) | 切换 YOLO 开/关 | 关闭 YOLO 时会尽量恢复之前的 Ask/Auto 基底;当前绑定可在 **设置 → 快捷键** 查看。 | |
| 440 | | macOS `Cmd+V`,Windows/Linux `Ctrl+V` | 粘贴剪贴板内容 | 剪贴板图片会作为附件加入;图片也可以拖进输入框。 | |
| 441 | | 输入边界处的普通 `Up` / `Down` | 回放更旧或更新的已提交提示词 | 带修饰键的方向键和原生文本导航仍交给 textarea。 | |
| 442 | | 运行中按 `Esc` | 取消当前 turn | 如果后端尚未开始回复,会恢复草稿。 | |
| 443 | |
| 444 | 菜单与控件: |
| 445 | |
| 446 | | 按键或控件 | 作用 | 说明 | |
| 447 | | --- | --- | --- | |
| 448 | | 斜杠、`@` 或 past-chat 菜单中的 `Up` / `Down` | 移动高亮项 | past-chat 搜索框使用同一套导航键。 | |
| 449 | | 这些菜单中的 `Enter` / `Tab` | 接受高亮项 | 类似目录的条目可能继续打开下一层菜单。 | |
| 450 | | 这些菜单中的 `Esc` | 关闭当前菜单或退出 past-chat 搜索 | 关闭后可继续正常输入。 | |
| 451 | | Ask / Auto / YOLO 审批控件 | 直接选择工具审批姿态 | 点击操作不受快捷键规则影响。 | |
| 452 | | 工具审批卡片 | `Left` / `Right`、`Enter`、`1`-`4`、`Esc` | 移动高亮动作、确认当前高亮、直接选择编号动作,或拒绝。默认高亮是“允许一次”。 | |
| 453 | | 计划审批卡片 | `Left` / `Right`、`Enter`、`1`-`3`、`Esc` | 在“修改计划 / 开始执行 / 退出计划”之间移动。默认高亮是“开始执行”。 | |
| 454 | | Plan 控件 | 切换 Plan 开/关 | 和 `Shift+Tab` 是同一个模式。 | |
| 455 | | 协作菜单里的 Goal | 启动、查看或清除 Goal | Goal 不进入任何快捷键循环。 | |
| 456 | |
| 457 | ### CLI / TUI |
| 458 | |
| 459 | 输入框上下边线使用当前主题强调色,默认光标为细竖线。长草稿会增长到可用的最大高度; |
| 460 | 超过后,在输入框内滚轮只滚动草稿视图,不移动插入光标,在 transcript 区域滚轮仍滚动 |
| 461 | 对话。使用 `/theme auto|light|dark` 选择背景模式,也可运行不带参数的 `/theme` 查看 |
| 462 | 命名配色,再用 `/theme <style>` 选择强调色。 |
| 463 | |
| 464 | 响应式底栏左侧保留当前 Ask/Auto/Plan 或 YOLO 姿态和交互状态;终端较宽时,模型、推理 |
| 465 | 强度和工作模式作为一组靠右显示,第二行按可用性显示 Git 标识、缓存命中率、上下文占用、 |
| 466 | 压缩余量、后台任务和余额。“就绪”只表示输入框空闲,并不是模型健康检查;选择器、审批、 |
| 467 | 图片粘贴、shell 模式等活动会替换这个状态。窄终端会按完整信息组移动、换行或压缩。 |
| 468 | 标签和展示用的工作模式值跟随 `/language`,但 `/work-mode` 的命令参数继续使用稳定的 |
| 469 | 英文标识。 |
| 470 | |
| 471 | 聊天与 transcript: |
| 472 | |
| 473 | | 按键或命令 | 作用 | 说明 | |
| 474 | | --- | --- | --- | |
| 475 | | `Enter` | 发送当前消息 | turn 运行中输入非空内容时,会排队作为后续反馈。 | |
| 476 | | `Shift+Enter`、`Alt+Enter` 或 `Ctrl+J` | 插入换行 | 普通 `Enter` 保留给发送/确认。 | |
| 477 | | 空闲时普通 `Up` / `Down` | 回放更旧或更新的已提交提示词 | turn 运行中同一组按键用于导航排队反馈。 | |
| 478 | | `PageUp` / `PageDown` | 滚动 transcript | 不受当前聊天状态影响。 | |
| 479 | | `Ctrl+Home` / `Ctrl+End` | 跳到 transcript 顶部或底部 | 长工具输出后很有用。 | |
| 480 | | `Ctrl+L` 或 `/cls` | 只清空可见 transcript | LLM 上下文、session 文件、工具、记忆和插件都保持加载;想丢弃对话上下文时用 `/clear`。 | |
| 481 | | `Esc` | 退出当前最具体的动作 | 可在无回复前撤回刚提交的 turn、取消运行中的 turn,或清空非空输入。 | |
| 482 | | 空闲且输入为空时双击 `Esc` | 打开 rewind 选择器 | 和 `/rewind` 是同一个入口。 | |
| 483 | | transcript 文本选择 | 复制 transcript 文本 | 应用内拖选松开后,本地会话通过可验证的系统剪贴板路径写入(macOS `pbcopy`、Linux 可用的 Wayland/X11 工具、Windows 系统剪贴板);SSH 才回退到 OSC 52,并明确标记为回退而不是宣称原生复制成功。`Ctrl+C`/`Super+C`/`Meta+C` 或右键当前选区可再次复制。 | |
| 484 | | 输入框文本选择 | 选中、复制或替换草稿文本 | 应用内拖选松开后,会通过与 transcript 相同的可验证剪贴板路径复制;输入或粘贴会替换选区,方向键会收起选区。 | |
| 485 | | 没有活动选区时右键 | 在本地会话粘贴剪贴板文本 | 本地会话开启鼠标接管时,Reasonix 只读取文本并交给正常的 bracketed-paste 处理。SSH 下远端进程无法读取本机剪贴板,请使用终端粘贴快捷键;`/mouse` 可恢复终端原生右键菜单。存在活动选区时,右键仍优先复制该选区。 | |
| 486 | | `/mouse` | 切换应用内鼠标接管 | 关闭后由终端处理原生拖选和右键菜单,但会失去应用内选区、滚动条和滚轮。可用 `REASONIX_DISABLE_MOUSE=1` 让每次会话默认关闭。 | |
| 487 | | `Ctrl+C` | 复制、取消、清空或退出 | 有 transcript 或输入框活动选区时优先复制;否则取消运行中的 turn、清空非空输入,或在空输入下连按两次退出。 | |
| 488 | | `Ctrl+D` | 退出 TUI | 立即退出。 | |
| 489 | | 终端的文本粘贴快捷键 | 粘贴文本 | 文本保持终端原生 bracketed-paste 路径:macOS 通常是 `Cmd+V`,Linux 通常是 `Ctrl+Shift+V`,其它环境使用终端自身配置。Reasonix 只消费收到的文本粘贴事件,不会先探测图片。 | |
| 490 | | macOS/Linux `Ctrl+V`;Windows `Alt+V` | 粘贴剪贴板图片 | 图片粘贴是独立的应用动作。读取期间底栏显示“正在粘贴图片…”,完成后在光标处插入可编辑的 `[image #N]` 标记。 | |
| 491 | | `/paste-image` | 粘贴剪贴板图片 | 与图片快捷键相同的纯图片命令入口。 | |
| 492 | | 以 `!` 开头的一行 | 直接运行 shell 命令 | 命令在本地执行,不经过模型。 | |
| 493 | |
| 494 | 模式与显示: |
| 495 | |
| 496 | | 按键或命令 | 作用 | 说明 | |
| 497 | | --- | --- | --- | |
| 498 | | `Shift+Tab` | 按 Ask → Auto → Plan → Ask 循环 | YOLO 不进入这个输入模式循环;底部状态栏会显示当前模式。 | |
| 499 | | `Ctrl+Y` | 切换 YOLO 开/关 | 关闭 YOLO 时会尽量恢复之前的 Ask/Auto 基底。终端若能转发 Command/Super,也可能识别 `Cmd+Y`,但稳定可用的是 `Ctrl+Y`。 | |
| 500 | | `--yolo`、`--dangerously-skip-permissions` | 启动时进入 YOLO | 和 `Ctrl+Y` 是同一个运行时模式。 | |
| 501 | | `/work-mode [economy|balanced|delivery]` | 查看或切换当前会话的工作模式 | `/profile` 是兼容别名。切换会原子重建运行时,保留对话和审批姿态;有工作正在进行时会拒绝切换。 | |
| 502 | | `/theme [auto|light|dark|style]` | 查看或切换 CLI 主题 | 不带参数会列出背景模式和命名配色。选择会保存到用户配置;单次运行可用 `REASONIX_THEME` 和 `REASONIX_THEME_STYLE` 覆盖。 | |
| 503 | | `Ctrl+O` | 切换详细 reasoning 显示 | 也可通过 `/verbose` 使用。 | |
| 504 | | `Ctrl+B` | 展开或收起较长 shell 输出 | 较长 shell 输出的提示行也可点击;全屏 TUI 开启鼠标接管时,文本选区由应用内处理。 | |
| 505 | | `/goal <目标>`、`/goal --research <目标>`、`/goal --simple <目标>`、`/goal status`、`/goal clear` | 启动、查看或清除 Goal | Goal 不进入任何快捷键循环;显式启动 Goal 后,明显长周期目标会自动启用 AutoResearch。 | |
| 506 | | `/migrate`、`/migrate --from <旧目录>` | 重试旧数据迁移,或从指定 v0.x 来源导入 sessions | Windows v0.52 自定义安装/数据目录用 `--from`;该形式只导入 sessions。详见[配置路径](./CONFIG_PATHS.zh-CN.md)。 | |
| 507 | |
| 508 | 选择器与审批: |
| 509 | |
| 510 | | 上下文 | 按键 | 作用 | |
| 511 | | --- | --- | --- | |
| 512 | | 斜杠或 `@` 补全 | `Up` / `Down`、`Ctrl+P` / `Ctrl+N`、`Tab` / `Enter`、`Esc` | 移动、接受或关闭补全菜单。 | |
| 513 | | 工具审批提示 | `y`/`1`、`a`/`2`、`p`/`3`、`n`/`4`、`Enter`、`Esc`、`Ctrl+C` | 允许一次、本会话允许、持久允许、拒绝、默认允许一次、拒绝,或取消当前 turn。 | |
| 514 | | Ask 问题卡 | `Up`/`Down` 或 `j`/`k`、`Left`/`Right` 或 `h`/`l`、`Space`、`Enter`、`1`-`9`、`Esc`、`Ctrl+C` | 导航答案/问题标签、切换多选、提交/激活、选择编号选项、关闭,或取消当前 turn。 | |
| 515 | | Rewind 选择器 | `Up`/`Down` 或 `j`/`k`、`Enter`、`b`、`c`、`d`、`f`、`s`、`u`、`Esc` | 选择 turn,应用 both/conversation/code/fork/summarize 动作,或返回/关闭。 | |
| 516 | | 模型、provider 或 Resume 选择器 | `Up`/`Down` 或 `Ctrl+P`/`Ctrl+N`;搜索词为空时可用 `j`/`k`;输入文字过滤;`Enter`;`Esc` | 搜索、选择或关闭选择器;开始搜索后 `j`/`k` 会作为查询字符输入;`/provider` 会继续打开该 provider 的模型列表。 | |
| 517 | | MCP 导入选择器 | `Up`/`Down` 或 `j`/`k`、`Space`、`Enter`、`Esc` / `Ctrl+C` | 移动、勾选服务器、导入勾选服务器,或取消。 | |
| 518 | | MCP 管理器 | `Up`/`Down` 或 `j`/`k`、`Enter`、`Left`/`Right` 或 `h`/`l`、`r`、数字键、`q` / `Ctrl+C` | 导航服务器列表/详情、刷新、选择动作,或关闭。 | |
| 519 | | `/clear` 确认 | 方向键或 `j`/`k` / `Tab`、`Enter`、`y`、`n`、`Esc` / `Ctrl+C` | 在 Clear/Cancel 间切换、确认清空,或取消。 | |
| 520 | |
| 521 | 模式含义: |
| 522 | |
| 523 | | 模式 | 含义 | |
| 524 | | --- | --- | |
| 525 | | Ask | writer 兜底审批时询问。 | |
| 526 | | Auto | 自动放行兜底审批;显式 `ask` / `deny` 规则仍生效。 | |
| 527 | | YOLO | 跳过普通工具审批;`deny`、用户 `ask` 问题和计划批准提示仍会等待。 | |
| 528 | | Plan | 要求模型先规划——这是 plan-first 工作流,不是全部工具只读。内置 writer 仍遵守当前 Ask/Auto/YOLO 与 Sandbox;已安装 MCP writer、destructive 目标与未信任 reader 在整个规划阶段硬阻断(审批不能放行,退出 Plan 后恢复);`complete_step` 等显式阶段工具需等到计划批准后。 | |
| 529 | | Goal | 持续追一个已保存目标,直到完成、阻塞或清除。 | |
| 530 | |
| 531 | ## 权限与沙盒 |
| 532 | |
| 533 | 权限逐次调用把关:`deny` > `ask` > `allow` > 兜底。Bash 和文件修改都要审核; |
| 534 | 只读工具一般不需要。审核规则不是按“按钮文案”存,而是按权限规则匹配,比如 |
| 535 | `Bash(npm run build)`、`Bash(npm run test:*)`、`Edit(docs/**)` 这种形式。 |
| 536 | `reasonix` 会在 writer 调用前征求同意(普通工具为 `1` 本次 · `2` 本会话允许此范围 · `3` 总是允许此范围(保存) · `4` 拒绝;Bash 可额外选择命令前缀授权); |
| 537 | 其中 Bash 默认按具体命令记,也可按安全推导出的命令前缀记(如 `Bash(go test:*)`);文件编辑类工具的本会话授权按编辑能力记,持久授权则写入 `Edit(<path>)` 文件路径规则; |
| 538 | 参数/算术展开、赋值、不含嵌套执行的 heredoc、文件重定向和 glob 不能复用裸 `Bash`、前缀或 glob Allow;用户保存时写入整条 `Bash=<literal>`,但它们仍按普通 fallback 执行,因此 Auto 不会额外询问。命令/进程替换、动态命令名、`eval`、`source`、Shell `-c`、运行时内联代码和无法解析的结构默认强制人工;无头 Ask/Auto/DontAsk 会拒绝这类未精确授权的命令,YOLO 可以绕过。高级用户可设置 `[permissions] allow_dynamic_bash = true`,让 Allow fallback(包括 Auto)覆盖这类动态命令;显式 `ask` 与 `deny` 规则仍然优先。由于无头运行没有审批界面,默认 Ask 对普通 writer fallback 和显式 ask 规则也会 fail closed;无人值守自动化需要放行普通 writer 时,使用 `reasonix run --auto ...`、`-y` 或 `--permission-mode auto`。配置的 `ask` 与 `deny` 始终优先。 |
| 539 | |
| 540 | Ask 不是只读模式:writer 获得批准后仍会执行。Permissions 决定放行或询问,Sandbox 才是强制能力边界。 |
| 541 | Sandbox 是授权之后的第二层边界,不能替代命令解析,也不能把无法证明静态安全的命令变成可自动授权命令。 |
| 542 | |
| 543 | 权限是**策略**(哪些调用放行/询问),**沙盒**是**强制**:文件写工具 |
| 544 | (`write_file` / `edit_file` / `multi_edit` / `move_file`)拒绝 `[sandbox] workspace_root` |
| 545 | 之外的任何路径(默认当前目录,编辑不出项目),并解析符号链接与 `..`,使链接无法 |
| 546 | 打洞越界。`forbid_read` 可选地隐藏敏感文件或目录,使 agent 的读文件、列目录和搜索工具不能读取或列出它们; |
| 547 | 建议使用绝对路径或 `${HOME}` / `${VAR}`,不要写 `~`,因为配置只做环境变量展开。 |
| 548 | `bash` 本身默认进 OS 沙盒(`[sandbox] bash`:macOS 使用 Seatbelt,Linux 使用 bubblewrap): |
| 549 | 命令只能写这些 root(外加平台按命令提供的临时/缓存 root), |
| 550 | OS 沙盒生效时也不能读取配置的 `forbid_read` roots,`[sandbox] network` 为真时才能联网。 |
| 551 | Reasonix 始终会从工具子进程环境中移除已保存的 provider 与 bot 凭据变量,并自动把 |
| 552 | 全局凭据 `.env` 加入运行时禁读边界;项目 `.env` 仍保持现有的 workspace 范围行为。 |
| 553 | |
| 554 | **会话私有标准临时目录。**同一逻辑会话内的多条 Bash 命令共享一个私有临时目录, |
| 555 | 因此连续调用可以通过 `$TMPDIR` 交换文件(在 Linux bubblewrap 下还可以通过字面 |
| 556 | `/tmp`)。用户不需要设置:Reasonix 会自动为 Bash 和客户端托管的 ACP 终端注入 |
| 557 | `TMPDIR`、`TMP`、`TEMP`。目录按需创建,不会回退到宿主公共临时目录;在 `/new`、 |
| 558 | `/clear`、恢复另一会话、切换分支时旋转。模型或设置热重建会保留同一目录。临时文件 |
| 559 | 不是持久存储:跨进程 resume 不会恢复其中内容;需要长期保留的数据应写入工作区或 |
| 560 | 用户指定路径。 |
| 561 | |
| 562 | Reasonix 生成的脚本和项目脚本应使用标准临时目录变量,不要硬编码 `/tmp`;用户无需 |
| 563 | 自行设置这些变量。例如: |
| 564 | |
| 565 | ```sh |
| 566 | tmp_file="${TMPDIR:?}/result.json" |
| 567 | ``` |
| 568 | |
| 569 | ```powershell |
| 570 | $tmpFile = Join-Path $env:TEMP "result.json" |
| 571 | ``` |
| 572 | |
| 573 | | 平台 | `$TMPDIR` / `$TMP` / `$TEMP` | 字面 `/tmp` | |
| 574 | | --- | --- | --- | |
| 575 | | Linux + bubblewrap | 虚拟 `/tmp`(绑定到私有目录) | 会话内共享(不再是每次新建的空 tmpfs) | |
| 576 | | macOS Seatbelt | 私有宿主目录路径(Seatbelt 允许写入) | 仍是 macOS 宿主临时目录;脚本应使用 `$TMPDIR` | |
| 577 | | Windows(无 OS 级 Bash 沙箱) | 私有宿主目录路径 | 不保证与该目录等价(例如 Git Bash 的 `/tmp`) | |
| 578 | |
| 579 | MCP 等独立沙盒继续使用自己的隔离规范,不继承父会话临时目录。获得批准后绕过沙盒的 |
| 580 | 命令仍继承私有临时变量,但在 Linux 上其字面 `/tmp` 不再由 bwrap 映射。 |
| 581 | |
| 582 | **Windows 说明:**Reasonix 不在 Windows 上提供 OS 级 Bash 沙箱,生效模式固定为 |
| 583 | `off`。旧配置即使写了 `bash = "enforce"` 也会解析为 `off`,`reasonix doctor` |
| 584 | 会提示该设置被忽略,桌面设置中的选择器也为只读。Bash 命令会在不受 OS 沙箱限制的 |
| 585 | 环境中运行;专用文件工具仍会在进程内执行 `workspace_root`、`allow_write` 和 |
| 586 | `forbid_read` 边界。已保存的凭据变量仍不会进入子进程环境,但获得批准的无沙箱 shell |
| 587 | 以当前用户身份运行,不能作为保护其他用户可读文件的安全边界。 |
| 588 | |
| 589 | 没有可用 OS 沙盒时,`bash = "enforce"` 会拒绝 bash 执行,不会无沙盒运行。 |
| 590 | Windows 上兼容的值始终为 `off`。 |
| 591 | |
| 592 | 反馈编码质量问题时,可运行 `reasonix doctor quality <branch-id-or-path>`(加 |
| 593 | `--json` 输出结构化结果)。命令会读取指定 session,但只输出不含内容的计数与 |
| 594 | Profile 分类:模型家族、运行模式、协作/审批模式、消息和工具调用数、验证与已持久化的 |
| 595 | compaction 摘要数,以及可用时的桌面端 token/cache telemetry。结果不会包含对话正文、 |
| 596 | 路径、session 标识、工具参数与输出、服务端点或自定义模型名,适合粘贴到公开 Issue |
| 597 | 或 Discussion。它不同于 `reasonix doctor session`:后者生成的支持 zip 含完整未脱敏 |
| 598 | 会话,只能在可信支持渠道分享。 |
| 599 | |
| 600 | ## 能力诊断 |
| 601 | |
| 602 | 当 skill、斜杠命令、Hook、插件包、MCP 或 `AGENTS.md` 缺失、被覆盖或启动失败时,用统一只读诊断。完整参数、JSON schema 与 issue code 见 |
| 603 | **[能力诊断](./CAPABILITY_DIAGNOSTICS.zh-CN.md)**。 |
| 604 | |
| 605 | ```bash |
| 606 | # 静态(默认):无网络、不启动 MCP 子进程 |
| 607 | reasonix doctor capabilities |
| 608 | |
| 609 | # 机器可读(stdout 仅为合法 JSON) |
| 610 | reasonix doctor capabilities --json |
| 611 | |
| 612 | # 指定工作区 |
| 613 | reasonix doctor capabilities --root /path/to/project |
| 614 | |
| 615 | # Live MCP 探测——仅在你明确允许启动第三方服务器时使用 |
| 616 | reasonix doctor capabilities --live --timeout 5s |
| 617 | ``` |
| 618 | |
| 619 | | 入口 | 用法 | |
| 620 | | --- | --- | |
| 621 | | CLI | 见上方 `reasonix doctor capabilities` | |
| 622 | | 桌面端 | **设置 → 诊断** — 刷新、复制脱敏 JSON、可选「包含当前会话运行状态」(只读活动标签 Host,**不**启动 MCP) | |
| 623 | | Agent | `/reasonix-guide`(内置 inline Skill)或自然语言描述症状;优先静态 doctor JSON,再问是否 `--live` | |
| 624 | |
| 625 | 退出码:`0` 允许 warning/info;`1` 表示存在 `error`(或 live 启动失败);`2` 为参数错误。与 `reasonix doctor`(provider/沙箱)以及 `reasonix plugin doctor <name>`(单个插件包)相互独立。 |
| 626 | |
| 627 | ## 插件(MCP) |
| 628 | |
| 629 | Reasonix 是一个 MCP 客户端。`[[plugins]]` 的 `type` 选择传输:`stdio`(默认)启动本地子进 |
| 630 | 程(`command`/`args`/`env`);`http`(Streamable HTTP)连接远程 `url`,可带静态 |
| 631 | `headers`(`${VAR}` / `${VAR:-default}` 从环境展开,密钥不入文件)。 |
| 632 | `sse` 则兼容仍使用持久 GET 与 server 公布 POST endpoint 的旧版远程 server。 |
| 633 | |
| 634 | 可在 **设置 → MCP 服务器 → 浏览市场** 打开官方 MCP Registry,也可使用 |
| 635 | `reasonix mcp browse [query]` 与 `reasonix mcp install <registry-name>`。Registry |
| 636 | 只在用户显式浏览或安装时联网,不进入启动路径。需要 secret 或必填参数的条目只显示为手动配置, |
| 637 | 不会写入不完整配置;Registry 故障时可回退到同一查询的缓存结果。 |
| 638 | |
| 639 | 普通配置流程现在只有一步:使用桌面端的“添加并连接”、`/mcp add`,或直接让 Reasonix |
| 640 | 安装一个 package 或 URL。此类主动安装统一写入用户全局 `config.toml`,安装本身就是授权: |
| 641 | server 会在当前会话连接,现在和下次启动都不会再弹出第二套信任步骤。当前项目 |
| 642 | `reasonix.toml` 或 `.mcp.json` 中声明的 server 保留在项目配置中,同样默认可信,不需要额外 |
| 643 | 启动确认。显式 deny 仍然优先;包括声明 |
| 644 | `destructiveHint` 的工具在内都可由普通 Executor 直接执行。独立 Planner 仍拒绝 destructive, |
| 645 | 严格只读 subagent 仍只暴露带只读 hint 的非破坏工具。 |
| 646 | |
| 647 | MCP 名称按 workspace 解析:项目声明覆盖同名全局安装;项目内部以 `reasonix.toml` 高于 |
| 648 | `.mcp.json`。编辑会写回当前生效声明的原文件;删除高优先级声明后,会显示并启用下一层同名 |
| 649 | 声明,而不会顺带删除其他作用域。 |
| 650 | |
| 651 | stdio server 从初始化到读写都复用同一个进程,因此浏览器等有状态 MCP 能保留会话和 |
| 652 | 已打开页面。由于进程启动后无法按调用切换 OS 沙箱,这个共享进程始终使用该 server 的普通 |
| 653 | 进程沙箱;`readOnlyHint` 与只读 subagent 过滤属于调用分发策略,不再对应第二个按调用隔离 |
| 654 | 的进程沙箱。 |
| 655 | |
| 656 | 工具以 `mcp__<server>__<tool>` 暴露给模型,与 Claude Code 一致;声明 MCP `readOnlyHint: true` |
| 657 | 的工具会参与并行调度并命中普通权限层的只读默认放行。用户安装或项目配置声明 server 后, |
| 658 | 独立 Planner 即可使用该 server 的全部非 destructive 工具,不再需要逐工具设置; |
| 659 | 严格只读研究 subagent 只获得带 `readOnlyHint` 的非破坏 reader。没有 `readOnlyHint` 的工具在调度和 |
| 660 | mutation 记账上仍按 writer 处理。计划期间,内置 writer 仍走 Permissions/Sandbox;独立 Planner |
| 661 | 允许已授权、非 destructive 的 MCP(包括缺少只读 hint 的 opaque writer),但在任何审批前硬阻断 |
| 662 | destructive 或未授权目标;没有独立 Planner 的单模型 Plan 仍维持原有 writer/destructive 阻断。 |
| 663 | |
| 664 | 安装 MCP server 本身就是授权决定。安装完成后,该 server 的所有工具都直接执行,不再存在 |
| 665 | server、raw tool、writer 或 destructive 的第二套审批设置;显式全局 deny 规则仍然优先。 |
| 666 | `readOnlyHint` 与 `destructiveHint` 只作为内部事实,用于并行调度、Plan 限制、严格只读 |
| 667 | subagent 和缓存到实时安全分类复核,不增加用户配置。 |
| 668 | Reasonix 明确信任已安装 server 会如实描述这些 hint。因此,planner/只读 subagent 的过滤是 |
| 669 | 面向可信 server 的工作流边界,不是针对恶意 MCP server 的隔离边界;显式 deny 与进程沙箱 |
| 670 | 仍由 host 控制。 |
| 671 | |
| 672 | 旧的 `trusted_read_only_tools`、`default_tools_approval_mode`、 |
| 673 | `tools.<raw>.approval_mode` 与 `approvals_reviewer` 字段在加载旧文件时会被忽略,并在 Reasonix |
| 674 | 下次保存该 MCP 条目时自动移除。 |
| 675 | |
| 676 | 服务器的 **prompts** 会暴露成 `/mcp__<server>__<prompt>` 斜杠命令(命令后空格分隔参 |
| 677 | 数);**resources** 通过在消息里写 `@<server>:<uri>` 拉入;`/mcp` 列出已连接服务器及 |
| 678 | 各自暴露的内容。`make build` 还会产出 `bin/reasonix-plugin-example`——一个可直接运行的 |
| 679 | stdio 参考实现(`echo`、`wordcount`、一个 `review` prompt、一个 style-guide 资源), |
| 680 | 可照抄。 |
| 681 | |
| 682 | ```toml |
| 683 | [[plugins]] # 本地 stdio 服务器 |
| 684 | name = "example" |
| 685 | command = "reasonix-plugin-example" |
| 686 | # startup_timeout_seconds = 60 # 可选:initialize + tools/list 上限 |
| 687 | # call_timeout_seconds = 600 # 可选:单个 MCP server 的调用超时 |
| 688 | # tool_timeout_seconds = { "generate_video" = 1800 } # 可选:raw MCP tool 名称 |
| 689 | |
| 690 | [[plugins]] # 远程 Streamable HTTP 服务器 |
| 691 | name = "stripe" |
| 692 | type = "http" |
| 693 | url = "https://mcp.stripe.com" |
| 694 | headers = { Authorization = "Bearer ${STRIPE_KEY}" } |
| 695 | ``` |
| 696 | |
| 697 | 启用的 MCP 服务器会在会话开始后于后台自动连接,因此工具上线期间聊天仍可正常使用。 |
| 698 | 用 `/mcp` 或桌面端 MCP 面板可刷新状态、重连服务器、查看失败原因,或在当前会话内禁用某个服务器。 |
| 699 | 若要跨 skills / hooks / 插件包 / MCP 做只读健康检查(不改配置),见 |
| 700 | [能力诊断](./CAPABILITY_DIAGNOSTICS.zh-CN.md) |
| 701 | (`reasonix doctor capabilities` 或 **设置 → 诊断**)。 |
| 702 | |
| 703 | 交互调用方只会为冷启动短暂等待;即使等待结束,共享启动仍会在后台继续,不会被杀掉后反复重启, |
| 704 | 服务器上线后重试工具即可。`mcp_startup_timeout_seconds`(默认 `30`)限制从进程启动、授权、 |
| 705 | `initialize` 到 `tools/list` 的完整启动流程;`mcp_call_timeout_seconds` 只作用于连接成功后的 |
| 706 | RPC 调用。两者都可按服务器覆盖。 |
| 707 | |
| 708 | **已有 Claude Code 的 `.mcp.json`?** 直接放到项目根目录,Reasonix 会原样读取——其 |
| 709 | `mcpServers` 规范(`command`/`args`/`env`、`type`/`url`/`headers`、`${VAR}` 展开) |
| 710 | 与 `[[plugins]]` 字段一一对应。两处来源会合并加载;同名时以 `reasonix.toml` 为准。 |
| 711 | |
| 712 | ```json |
| 713 | { |
| 714 | "mcpServers": { |
| 715 | "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path"] }, |
| 716 | "stripe": { "type": "http", "url": "https://mcp.stripe.com", "headers": { "Authorization": "Bearer ${STRIPE_KEY}" } } |
| 717 | } |
| 718 | } |
| 719 | ``` |
| 720 | |
| 721 | **从 `0.x` 升级?** 旧的 `~/.reasonix/config.json` 仍会被读取(读其 `mcpServers`、并遵从 |
| 722 | `mcpDisabled`),作为最低优先级来源——所以 MCP 服务器照常可用;方便时再把它们挪进 |
| 723 | `reasonix.toml` 的 `[[plugins]]` 或 `.mcp.json`。 |
| 724 | |
| 725 | ## 斜杠命令 |
| 726 | |
| 727 | 交互式 `reasonix` 会话里,内置命令(`/compact`、`/new`、`/clear`、`/rewind`、`/tree`、`/branch`、`/switch`、`/todo`、`/model`、`/work-mode`、`/mcp`、`/skills`、`/hooks`、`/memory`、`/goal`、`/output-style`、`/sandbox`、`/language`、`/reasoning-language`、`/help`)在本地执行——`/help` 可列出全部。 |
| 728 | 内置 **Skill**(如 `/init`、`/explore`、`/test`、`/reasonix-guide`)也会出现在斜杠菜单, |
| 729 | 并可通过 `run_skill` 调用(正文按需加载;只有索引行进入缓存稳定前缀)。配置或能力排障时 |
| 730 | 用 `/reasonix-guide`,它会引导运行 `reasonix doctor capabilities`(见 |
| 731 | [能力诊断](./CAPABILITY_DIAGNOSTICS.zh-CN.md))。 |
| 732 | `/new` 会开启新会话,同时保存之前的 transcript 供历史记录和恢复使用;`/clear` 会二次确认,确认后丢弃当前上下文且不保存。 |
| 733 | `/tree` 查看已保存的对话分支,`/branch [name]` 从当前对话末端分支,`/branch <turn> [name]` |
| 734 | 从较早的 checkpoint 轮次分支,`/switch <id|name>` 切换到另一个分支。**自定义命令** |
| 735 | 是放在 `.reasonix/commands/`(项目)或 `~/.reasonix/commands/`(用户)下的 Markdown 文件—— |
| 736 | `review.md` 即 `/review`,子目录构成命名空间(`git/commit.md` → `/git:commit`)。文件正文 |
| 737 | 是 prompt 模板,调用即作为一轮对话发出。 |
| 738 | |
| 739 | ### 子智能体 Profile |
| 740 | |
| 741 | 子智能体 profile 是带有 `runAs: subagent` 和 `invocation: manual` 的手动 Skill。 |
| 742 | 它与桌面设置页共用项目级/全局 Skill 目录,因此任一端创建的 profile 在会话刷新后都会被 |
| 743 | 另一端发现。交互式聊天里使用 `/<name> <任务>` 调用;Reasonix 会启动隔离子智能体, |
| 744 | 父会话只保留任务和最终答案。 |
| 745 | |
| 746 | Headless CLI 提供显式管理和运行命令,同时不改变普通 `reasonix run` 的任务语义: |
| 747 | |
| 748 | ```bash |
| 749 | reasonix subagent list |
| 750 | reasonix subagent create reviewer --description "审查改动" --prompt-file reviewer.md --tools read_file,grep,bash |
| 751 | reasonix subagent edit reviewer --effort high --model deepseek-pro |
| 752 | reasonix subagent try reviewer "审查当前 diff" # 始终只读 |
| 753 | reasonix subagent run reviewer "审查并修复当前 diff" |
| 754 | reasonix subagent delete reviewer --yes |
| 755 | ``` |
| 756 | |
| 757 | workspace 可用时,`create` 默认写入项目级目录,否则默认写入全局目录;可用 |
| 758 | `--scope project|global` 明确选择。`edit` 只修改显式传入的字段,`--model=`、`--tools=` |
| 759 | 这类空值会清除对应配置。Profile 编辑器会拒绝 |
| 760 | custom path 或包含更多手写结构的 Skill,避免丢失 frontmatter、references 或 scripts; |
| 761 | 这些文件仍应通过 Skills 工作流管理。内置 profile 没有可编辑文件,因此 `edit` 对它们只接受 |
| 762 | `--model` 和 `--effort`,并写入与桌面设置页相同的按名称覆盖配置。 |
| 763 | |
| 764 | 完整 CLI 参数、Skill 文件格式、模型优先级、安全行为和排障说明见 |
| 765 | [子智能体 Profile](./SUBAGENT_PROFILES.zh-CN.md)。 |
| 766 | |
| 767 | Context Engine v2 把上下文分成两个用途不同的层: |
| 768 | |
| 769 | - **常驻指令**来自分层加载的 `REASONIX.md`、`AGENTS.md` 和 `CLAUDE.md`。必须在每个 |
| 770 | 相关回合都存在的规则应放在这里。用户全局文件先加载,再加载 workspace 和更深目标目录, |
| 771 | 同一目录内 `.local.md` 变体优先。 |
| 772 | - **背景记忆**每个 Markdown 文件只保存一条持久事实。每条事实都有不变 ID、单调 revision、 |
| 773 | 时间戳、相互独立的 `type`(`user`、`feedback`、`project`、`reference`)与 |
| 774 | `scope`(`project`、`global`),以及 freshness。事实可能过时,因此永远不能覆盖 |
| 775 | 当前请求和常驻指令。 |
| 776 | |
| 777 | 每个真实用户回合前,Reasonix 会自动召回一小组相关事实。它用原始用户消息搜索,抑制“继续” |
| 778 | 这类泛化请求,在等价事实中优先项目级版本,对 stale 内容降权,并最多把四条事实 / 2,400 |
| 779 | 字符追加到本轮 user turn。这段动态后缀不会改写 cache-stable system prompt 或工具 schema。 |
| 780 | 运行 `/memory recall` 可查看选中的 ID、score、原因、freshness、预算和 suppressed 决定。 |
| 781 | |
| 782 | 新的、有界、非敏感 project/reference 事实可以零配置自动创建,不弹审批。全局事实、用户偏好、 |
| 783 | feedback、更新、重复项、敏感/超长内容,以及所有 `forget` 仍需显式确认。存储层会把自动授权 |
| 784 | 强制为 create-only,因此并发出现的新事实也不会被覆盖。顶层 headless controller 可使用同一条 |
| 785 | 一次性低风险创建路径;子智能体和不拥有该作用域 controller 的 headless surface 会 fail closed。 |
| 786 | |
| 787 | `forget` 只归档,不永久删除。每次更新都会快照上一 revision;恢复旧版本或 archive 时总会创建 |
| 788 | 更高的新 revision,不会覆盖历史: |
| 789 | |
| 790 | ```text |
| 791 | /memory instructions |
| 792 | /memory recall |
| 793 | /memory revisions <id-or-name> |
| 794 | /memory restore <id-or-name> <revision> |
| 795 | /memory archived |
| 796 | /memory recover <archive-path> |
| 797 | ``` |
| 798 | |
| 799 | 桌面 Context Center 展示相同的 provenance、冲突、revision history、recall trace 和恢复操作。 |
| 800 | 打开 Suggestions tab 会自动扫描近期本地用户回合;候选会与两个 scope 的记忆和指令正文去重, |
| 801 | 但只有用户接受后才会保存。远程 workspace 绝不回退读取桌面机器的本地 memory 或 session。 |
| 802 | |
| 803 | 旧事实会原地获得确定性 ID 和 revision 1;缺失 scope 时根据所在目录推导。Migration 幂等, |
| 804 | 旧客户端仍能安全路由,旧 Memory v5 transcript 也继续可读。完整行为、隐私与 cache 契约见 |
| 805 | [`Context Engine v2`](SESSION_MEMORY_RETRIEVAL.zh-CN.md)。 |
| 806 | |
| 807 | ```markdown |
| 808 | --- |
| 809 | description: Review the staged diff |
| 810 | argument-hint: [focus-area] |
| 811 | --- |
| 812 | Review the staged diff. Focus on $ARGUMENTS, list bugs with file:line. |
| 813 | ``` |
| 814 | |
| 815 | `$ARGUMENTS` 展开为全部空格分隔参数,`$1`…`$N` 为位置参数。MCP prompts 也以 |
| 816 | `/mcp__<server>__<prompt>` 形式出现在这里。 |
| 817 | |
| 818 | ## 内置文档检索 |
| 819 | |
| 820 | Reasonix 会把 `docs/` 中的 Markdown 文档和已审查的 `release-notes/releases.json` 更新日志 |
| 821 | 目录随 CLI 和桌面端一起编译发布。只读 `docs` 工具通过本地 BM25 检索这份与当前安装版本 |
| 822 | 完全一致的离线语料,并可按命中的 `section_id` 读取完整章节及来源。每个版本都会生成 |
| 823 | `changelog/v1.19.5.md`、`changelog/v1.19.5.zh-CN.md` 这类中英文虚拟文档,因此可以离线 |
| 824 | 查询指定版本的新增功能、升级说明、修复和已知风险。涉及 Reasonix 配置、CLI/桌面端行为、 |
| 825 | 版本历史、权限、MCP、记忆、恢复、Provider 或维护流程的问题,Agent 应先查询这里,再考虑 |
| 826 | 联网搜索或凭经验回答。 |
| 827 | |
| 828 | 普通路径不需要设置、联网、向量数据库或 embedding 服务。搜索会优先匹配提问语言,同时支持 |
| 829 | 显式 `en`、`zh-CN`、受众和目录筛选。Balanced 与 Delivery 默认暴露该工具;Economy 会在需要时 |
| 830 | 按需连接 `docs` 来源。每次返回都会给出产品版本、不可变源码 revision 与语料 SHA-256 digest。 |
| 831 | 发布 CI 会实际编译 CLI;只有编译后的清单与候选提交的 `docs/*.md`、 |
| 832 | `release-notes/releases.json` 和构建身份完全一致时才允许发布。因此,更新较快的在线 |
| 833 | `main-v2` 页面不会静默覆盖与本地版本匹配的说明或更新历史。 |
| 834 | |
| 835 | 直接输入 `/docs` 会在本地显示内置语料的版本、revision、digest 和使用示例,不调用模型。 |
| 836 | 输入 `/docs <问题>`(例如 `/docs 1.19.5 更新日志`)时,Reasonix 会先在本地完成检索,再把 |
| 837 | 与当前版本匹配的证据交给当前配置的 AI 生成带来源的回答。这个命令路径不依赖模型是否主动 |
| 838 | 选择 `docs` 工具;普通自然语言问题仍可由模型自动调用该工具。已有自定义命令以及兼容插件或 |
| 839 | Skill 别名会继续拥有 `/docs`;发生冲突时,CLI 与桌面端通常会改为通过 `/reasonix:docs` 暴露 |
| 840 | 内置语料。如果这个限定名也已被占用,Reasonix 会选择下一个空闲的 `reasonix:` 限定后备名, |
| 841 | 不会覆盖原命令。远程桌面端使用主机解析后的命令目录,因此菜单显示的入口与主机实际执行目标 |
| 842 | 保持一致。 |
| 843 | |
| 844 | 如果 Pull Request 修改了用户可见的 CLI、桌面端、配置、Provider、权限或工具行为,必须声明 |
| 845 | 是否已同步更新内置文档;如果无需更新,则必须说明现有的版本匹配说明为何仍然正确。 |
| 846 | |
| 847 | ## Goal 与 AutoResearch |
| 848 | |
| 849 | Goal 是长期目标的统一运行机制。普通 `/goal` 继续走轻量 Goal:Reasonix 会持续推进,直到 |
| 850 | 完成、阻塞、暂停或被清除。对于明显长周期的目标,Goal 会自动进入 AutoResearch 策略,而不是 |
| 851 | 要求用户单独运行 `/auto-research` skill;`auto-research` 也不会作为独立 builtin skill 出现在 |
| 852 | Settings -> Skills 或斜杠菜单里。普通聊天不会隐式改变协作模式;需要长目标时,请在输入框中 |
| 853 | 明确选择 Goal,或使用 `/goal` 启动。 |
| 854 | |
| 855 | Goal 按类别运行在**轮次**预算内:简单目标 10 轮,写入型 20 轮,AutoResearch 40 轮; |
| 856 | 连续 4 轮没有宿主可验证进展会暂停。累计 token 仍会统计并展示(便于诊断),但**没有 |
| 857 | token 硬上限**,也不会在 provider 请求前做 token 准入拦截。Goal 中只陈述 BUG/崩溃/异常 |
| 858 | 且未要求分析或禁止修改时,默认按写入型轮数类别。暂停会保留 Goal、todo、Delivery |
| 859 | checkpoint 与运行历史——用 `/goal resume` 继续(轮次型暂停会追加一档同类别轮数), |
| 860 | `/goal pause` 可手动暂停运行中的目标,`/goal status` 显示完整的轮次/累计 token/无进展 |
| 861 | 运行摘要。每个目标 turn 结束时,模型通过结构化的 `update_goal` 工具报告 |
| 862 | continue/complete/blocked;没有报告时由独立的有界 evaluator 判定一次,任何 evaluator |
| 863 | 故障都会安全暂停目标而不是静默继续。 |
| 864 | |
| 865 | 复杂任务建议把目标写成[任务合约](./TASK_CONTRACT.zh-CN.md):Context、Request、 |
| 866 | Output format、Constraints 和 Pause policy。Goal 模式会把这些部分当作自主执行的边界; |
| 867 | 除非下一步需要不可逆或对外可见操作、任务范围变化,或必须由用户提供信息,否则会继续采用合理默认值推进,并在最后汇报假设与结果。 |
| 868 | |
| 869 | AutoResearch 会在这些目标里自动启用:包含“持续”“长期”“彻底”“直到根因明确”“多轮排查” |
| 870 | “不要原地打转”“完整方案”“跑实验”“反复验证”“系统性研究”等强信号;或者目标同时包含 |
| 871 | 研究/排查、实现/修复、验证/测试、优化/文档/发布等多个阶段;或者用户明确给出 |
| 872 | `.reasonix/autoresearch/<task-id>/` 任务目录。高级用户可以用 |
| 873 | `/goal --research <目标>` 强制启用,也可以用 `/goal --simple <目标>` 强制保持轻量 Goal。 |
| 874 | 未显式启动 Goal 时,这些信号只作为普通聊天文本处理,不会创建持久化 AutoResearch 任务。 |
| 875 | |
| 876 | 进入 AutoResearch 后,agent 会把目标当成有状态的研究循环,而不是只靠聊天上下文续写。 |
| 877 | 它会创建或复用项目级 `.reasonix/autoresearch/<task-id>/` 目录。新任务默认使用 |
| 878 | `YYYYMMDD-HHMMSS-slug` 作为 id,例如 `20260618-224530-cache-audit`;创建前会先检查 |
| 879 | 当前项目目录,只有同名已存在时才追加 `-2`、`-3` 等后缀。任务状态包括 |
| 880 | `task_spec.md`、`progress.json`、`findings.jsonl`、`directions_tried.json` 和 |
| 881 | `iteration_log.jsonl`,记录每轮方向、证据、验证结果和卡住原因,并用 `stale_count` 判断 |
| 882 | 是否在低质量重复。连续停滞时,它会要求结构性 pivot,例如换证据源、入口、测试 oracle、 |
| 883 | 拆解方式、benchmark 或 worker 策略,而不是继续重复同一种尝试。 |
| 884 | |
| 885 | worker/subagent 可以独立探索,但 canonical state 由 orchestrator 负责写入。完成前必须 |
| 886 | 对照 `task_spec.md` 的 success criteria 做逐项证据审计;窄范围检查通过不能证明宽范围需求 |
| 887 | 完成。动态运行态只写进 `.reasonix/autoresearch/...`,不写入 `REASONIX.md`、`AGENTS.md`、 |
| 888 | project memory、tool schema 或 cache-stable system prompt。公开发布、破坏性操作、凭证、 |
| 889 | 付款和外部通知仍然遵守正常的 approval、privacy 与 cache gate。 |
| 890 | |
| 891 | ## @ 引用 |
| 892 | |
| 893 | 在消息里写 `@` 引用,Reasonix 会在发送前解析成带标签的上下文块:`@path/to/file`(或 |
| 894 | `@dir`)注入本地文件内容(或目录清单),`@<server>:<uri>` 注入 MCP 资源。本地路径**只有 |
| 895 | 真实存在**时才当作引用,普通 `@mention` 保持原文。敲 `/` 或 `@` 会弹出补全菜单——斜杠 |
| 896 | 命令,或**逐层**的文件导航(一次只列当前一层目录、可下钻进子目录)外加 MCP 资源。 |
| 897 | |
| 898 | ## 双模型协同 |
| 899 | |
| 900 | `reasonix setup` 现在统一管理 provider、模型列表、凭据、连接测试和默认模型;所有修改 |
| 901 | 会暂存到“保存并退出”,并同步维护桌面端 provider access。完整用法见 |
| 902 | [CLI 命令参考](./CLI.zh-CN.md#配置供应商)。若要让两个模型协同(执行器 + 规划器, |
| 903 | 各自独立、缓存稳定的 session),向导后手动在 `reasonix.toml` 加一行即可: |
| 904 | |
| 905 | ```toml |
| 906 | [agent] |
| 907 | planner_model = "deepseek-pro" # 作为低频规划器 |
| 908 | ``` |
| 909 | |
| 910 | Planner 会看到已加载的 `REASONIX.md` / `AGENTS.md` 记忆,并拿到一小组只读研究工具, |
| 911 | 因此可以先检查相关文件再把计划交给执行器。写入类和流程类工具仍只给执行器使用。 |
| 912 | |
| 913 | Reasonix 会用确定性规则路由每一轮,不再调用额外的 classifier 模型:问答、短回复、 |
| 914 | 明确的单点小改和边界清楚的纯只读动作直达 Executor;边界清楚的实现任务可生成简短的 |
| 915 | Light 计划;模糊、跨面、结构化、高风险、活跃 Goal 或 Delivery 的任务生成 Full 计划, |
| 916 | 明确的原子小改或纯只读动作除外。 |
| 917 | 显式 Plan Mode 仍是独立的宿主流程,不会发生双重规划。 |
| 918 | 明确的 `先规划` / `plan first` 会强制规划,`直接改` / `just do it` 则直达 Executor; |
| 919 | 执行边界可出现在请求中的任意子句,不要求位于句首,同时会忽略引号内的示例; |
| 920 | 普通的“先规划”会在规划完成后自动交接 Executor;明确要求“等我确认”的请求停在宿主 |
| 921 | 审批边界,批准后继续交接 Executor。只有明确的 `只规划` / `不要执行` 才以计划结束当前 |
| 922 | 回合而不执行,计划会写入同一会话,用户之后仍可继续要求 Executor 落地。阶段详情会记录 |
| 923 | 不含用户原文的 route、depth 与 reason code,便于诊断。 |
| 924 | |
| 925 | Light 计划包含紧凑目标、最多四个有序步骤、可能触点和主要验证;Full 计划会区分已验证 |
| 926 | 与候选触点,并按需补充非目标、风险、验收标准、命令级验证,以及难回滚操作的回滚方案。 |
| 927 | 这些合约位于同一个稳定的 Planner system prompt,单轮只在 user turn 追加很小的深度指令, |
| 928 | 因此除本次 prompt 升级的一次缓存未命中外,不会持续破坏 Planner prefix cache。宿主也会 |
| 929 | 为 Light 与 Full 调研设置不同的单轮轮次预算。若 Planner 在有界调研和最终总结轮后仍未 |
| 930 | 给出最终计划,普通 plan-and-execute 会用原始任务直接交给 Executor 继续;plan-only 与 |
| 931 | 等待批准请求仍保持 fail-closed,并回滚不完整的 Planner 回合,避免留下无法继续的会话尾部。 |
| 932 | |
| 933 | Reasonix 会自动管理正常执行:活跃 Todo 连续 8 个工具调用轮次没有新的完成项、唯一读取、 |
| 934 | 命令或修改时,宿主会要求执行器重新评估;连续 16 个无进展轮次后暂停并保存工作,可在 |
| 935 | 下一轮用户消息中继续。完全重复的操作不算进展,新的宿主可观测工作会自动续期。两级任务 |
| 936 | 列表保持同一"唯一当前项"契约:唯一的 `in_progress` 是活跃的 level-1 子步骤,其 level-0 |
| 937 | 阶段保持 `pending`;子步骤按顺序推进并签核,全部完成后阶段本身转为 `in_progress` 做 |
| 938 | 最后签核。 |
| 939 | |
| 940 | 升级时仍可解析已有的 `[agent].max_steps` 和 `planner_max_steps`,但其值会被忽略,并在一次性 |
| 941 | 迁移提示后从配置中移除,避免隐藏的旧上限截断自动进度管理或子 Agent 的继承任务。确实需要 |
| 942 | 为单次运行设置预算时使用 CLI `--max-steps`;无人值守 Bot 仍保留 `[bot].max_steps`。 |
| 943 | |
| 944 | Subagent skills 默认继承执行器模型。设置 `subagent_model` 可让它们统一走另一个已配置 |
| 945 | 模型;设置 `subagent_models` 则只覆盖 `review`、`security_review` 等指定 skill。 |
| 946 | |
| 947 | Subagent 默认允许再委派一层:根会话是 depth 0,第一层 subagent 是 depth 1, |
| 948 | `max_subagent_depth = 2` 表示 depth 1 的 workflow 可以再派 depth 2 的 reviewer |
| 949 | 或 implementer;depth 2 不再拿到递归 agent/skill 工具。设 |
| 950 | `agent.max_subagent_depth = 1` 可恢复旧的单层边界。这主要用于 Superpowers 这类 |
| 951 | workflow skill 派发 reviewer subagent 的场景,同时避免无限递归和后台 fanout。 |
| 952 | |
| 953 | 当计划阶段需要**明确隔离为只读**的深度调研时,用 `read_only_task`;如果更适合复用已有 skill, |
| 954 | 用 `read_only_skill`。两者都会启动 |
| 955 | ephemeral 只读 subagent,只暴露只读研究工具和安全前台 bash,只返回最终答案,不创建 |
| 956 | 可续接的 subagent transcript。只读嵌套委派会在 `max_subagent_depth` 内可用,其内部仍不提供 |
| 957 | 可写的 `task` / `run_skill`。在 token economy 模式下,只用 |
| 958 | `connect_tool_source(source="read_only_skill")` 连接这条窄入口;完整的 `skills` |
| 959 | source 也可在 Plan 中加载,后续 writer 调用仍通过 Permissions/Sandbox。 |
| 960 | |
| 961 | 所有严格只读子会话都经过同一对共享构造入口——`RunReadOnlySubAgentWithSession` / |
| 962 | `NewReadOnlyAgent`——两者都会把子会话标记为永久只读并做最终 registry 过滤:移除 writer、 |
| 963 | destructive MCP 目标、来自未授权 server 的 reader,以及一切会改变 host capability 的工具。 |
| 964 | 用户安装和项目配置声明的 server 都会立即获得授权。符合条件的 reader 仍可按需启动。严格只读入口一览: |
| 965 | |
| 966 | | 入口 | 用途 | |
| 967 | | --- | --- | |
| 968 | | `read_only_task` | 主会话派生的隔离只读调研子会话 | |
| 969 | | `parallel_tasks`(只读) | 并发只读调研子会话 | |
| 970 | | `fleet` 且 `read_only: true` | 可带 Profile 的并行批量(单项强制只读) | |
| 971 | | `read_only_skill` | 以既有 skill 驱动的同等隔离 | |
| 972 | | `reasonix review`(CLI) | 只读评审 diff 或分支 | |
| 973 | | 桌面端 preview/review 子代理 | 桌面端只读分析面 | |
| 974 | |
| 975 | 在持久化会话中,`parallel_tasks` 与 `fleet` 不再把所有完整答案拼成一个容易被截断的 |
| 976 | 工具结果,而是为每个已完成子 Agent 返回有界预览和独立的 `Subagent reference`。父 Agent |
| 977 | 可用 `read_subagent_result` 按 `offset_bytes` 分页读取该引用对应的完整答案;读取范围受当前 |
| 978 | 会话 lineage 与工作区约束。没有持久化父会话的 headless 运行仍保持 ephemeral,只返回公平 |
| 979 | 分配的有界预览,不能生成持久引用。 |
| 980 | |
| 981 | 交互式双模型 Planner 使用专用构造路径(`NewPlannerAgent`):仍阻止 bash、文件写入与普通 |
| 982 | writer,但可通过固定的 `use_capability` 代理调用已授权、非 destructive 的 MCP,不再要求 |
| 983 | `readOnlyHint`。直接 `mcp__*` schema 永不进入 Planner 工具列表,因此 MCP 安装/连接变动 |
| 984 | 不会在一次性 schema 升级后继续改变 Planner 缓存前缀。缺少 `readOnlyHint` 不再阻止 Planner; |
| 985 | 带 `destructiveHint` 的工具零执行,应写入方案交给 Executor。 |
| 986 | |
| 987 | 普通 `task` / `fleet` 子 Agent 同样获得该固定代理(会话共享 Host/连接,每 Agent 独立 |
| 988 | frontend/ledger),可调用已安装或项目配置 MCP,不要求 `readOnlyHint`。这些调用走可信 MCP |
| 989 | 权限路径(实时授权复核 + 仅显式 deny);writer/destructive 仍会串行、按 mutation 记账,并受 |
| 990 | Delivery 证据/租约门禁约束,而不是 Planner 的 Executor handoff。严格 `read_only_task` / |
| 991 | `read_only_skill` / review 子 Agent 共享稳定代理 schema 与连接复用,但执行仍要求 |
| 992 | `authorized && readOnlyHint && !destructiveHint`。Profile `allowed-tools` 中的 MCP 名称 |
| 993 | 会转换为代理上的 capability ID 白名单;子 Agent 从不继承动态 `mcp__*` schema。 |
| 994 | |
| 995 | 在严格只读子会话内:`use_capability` 在 Commit/permission/hook/执行前会对解析出的 |
| 996 | 真实目标再次校验;未连接且符合条件的 MCP reader 可从当前 schema cache 按需启动, |
| 997 | initialize/tools-list 后会在 `tools/call` 前核对缓存与 live 的 `readOnlyHint`/ |
| 998 | `destructiveHint`;reader 变 writer 或升级为 destructive 时零执行,普通重试会重新经过当前 |
| 999 | 边界。仅 schema 变化会静默刷新下一会话的缓存,不再中断已授权调用。分发前还会再次检查运行时 |
| 1000 | enable、授权与完整连接身份,因此共享 Host 中另一个项目/tab 的同名 client 不能被误复用。未授权 |
| 1001 | server 无法在这里提升权限。严格只读边界比独立 Planner 更窄:Planner 接受已授权的 opaque |
| 1002 | 非 destructive MCP,而严格只读子会话必须有明确 reader hint,且根本不暴露 writer。 |
| 1003 | |
| 1004 | 启动会话时可以用 `--profile economy|balanced|delivery` 选择运行模式,例如 |
| 1005 | `reasonix run --profile delivery "修复并验证这个 bug"`。Economy(轻量)初始只带 9 个工具: |
| 1006 | 直接读/bash/编辑/写入、后台 shell 生命周期控制、`ask` 和 `connect_tool_source`;内置文档、 |
| 1007 | 专用搜索/文件/ |
| 1008 | workflow 工具、session history、memory 写入、slash command、Skills、MCP、LSP、网络、安装与 |
| 1009 | subagent 都在任务需要时才连接。 |
| 1010 | Balanced(均衡)是提供完整工具面的默认档;配置独立 Planner 时,Planner 与 Executor 都会获得各自的 |
| 1011 | `use_capability` frontend,规划阶段发现的 capability 可在 handoff 后按同一 ID 直接执行,同时保留 |
| 1012 | Executor 的完整直接 MCP 工具面。固定代理自身的 schema 保持稳定,但由于 Balanced Executor 刻意保留 |
| 1013 | 直接 `mcp__*`,安装、连接或刷新这些直接工具时,Executor 的整体 provider 工具前缀仍可能变化。Delivery(交付优先) |
| 1014 | 保留完整工具面,额外增加稳定能力代理 `use_capability`(list/inspect/call MCP,包括 |
| 1015 | `auto_start=false`,且不改变主工具 Schema),并增加“明确验收标准、修复根因、运行验证、复审最终 |
| 1016 | diff”的稳定交付合约。该合约由宿主运行时强制执行:没有具体 `todo_write` 验收清单时会阻止变更和验证 |
| 1017 | 命令;发生变更后,必须复查结果、在最后一次变更之后运行验证,并用带证据的 `complete_step` 签收后才能 |
| 1018 | 结束;Skill/MCP 的 require/prefer 路由会被门禁;中/高风险改动强制结构化 review;`task`/`run_skill` |
| 1019 | 等元工具本身不算 mutation。纯只读分析不会被迫产生写入。 |
| 1020 | |
| 1021 | 交互式 TUI 会话内可用 `/work-mode` 查看当前模式,或用 |
| 1022 | `/work-mode economy|balanced|delivery` 热切换;`/profile` 是兼容别名。切换会原子重建 |
| 1023 | Controller,同时保留 history、session 路径、Lease 和 Ask/Auto/Yolo 审批姿态;当前 turn、审批/询问、 |
| 1024 | 后台任务或另一场运行时切换尚未结束时会拒绝切换。构建失败时旧 Controller 继续可用。该命令只修改当前 |
| 1025 | 会话,不持久化新的全局默认值。跨 Profile 切换会产生一次新的 provider 缓存前缀。均衡与交付优先模式下, |
| 1026 | system contract 和工具 Schema 在后续轮次保持稳定;轻量模式下,每次成功调用 `connect_tool_source` |
| 1027 | 都会在下一次请求加入对应工具 Schema,形成一次新前缀,之后在工具面再次变化前保持稳定。 |
| 1028 | |
| 1029 | 桌面端标签页提供相同三档并持久化轻量或交付优先 |
| 1030 | 模式;旧的空值/`full` 继续解释为均衡模式。 |
| 1031 | |
| 1032 | 交互式前端中的计划模式始终由用户显式选择:桌面端在“协作方式”中选择计划模式,CLI 用 |
| 1033 | `Shift+Tab` 切换到 Plan。Reasonix 先生成计划,待用户批准后工作流才切换到实施;规划期间的 |
| 1034 | 工具调用仍遵守当前 Permissions 与 Sandbox。旧的 `agent.auto_plan` 与 |
| 1035 | `agent.auto_plan_classifier` 会被忽略,并在升级时从用户配置中移除。可见思考语言可通过以下方式修改: |
| 1036 | 会话里用 `/reasoning-language auto|zh|en`,shell/脚本里用 |
| 1037 | `reasonix config reasoning-language auto|zh|en`。只有明确想为 |
| 1038 | reasoning-language 写项目级覆盖时,才给 shell 命令加 `--local`。 |
| 1039 | |
| 1040 | 桌面端“协作方式”菜单里的计划模式、目标模式和“轻量 / 均衡 / 交付优先”三档运行模式的使用方法与注意事项, |
| 1041 | 见 [`COLLABORATION_MODES.zh-CN.md`](./COLLABORATION_MODES.zh-CN.md)。 |
| 1042 | |
| 1043 | 桌面端“工具权限”里的询问、自动和 Yolo 模式的区别与使用场景, |
| 1044 | 见 [`TOOL_APPROVAL_MODES.zh-CN.md`](./TOOL_APPROVAL_MODES.zh-CN.md)。 |
| 1045 | |
| 1046 | 分离 session(让各模型前缀缓存稳定)背后的取舍见 |
| 1047 | [`SPEC.md` §3.5](./SPEC.md#35-two-model-collaboration-coordinator)。 |
| 1048 |