# Reasonix 使用指南 README  ·  English  ·  规格 > 日常配置与使用。工程契约与内部实现(数据类型、registry、包结构、路线图)见 > **[规格 SPEC.md](./SPEC.md)**。 ## 目录 - [配置](#配置) - [计费与展示币种](./BILLING.zh-CN.md) - [CLI 命令参考](./CLI.zh-CN.md) - [环境变量](#环境变量) - [Web 前端](#web-前端) - [配置路径](./CONFIG_PATHS.zh-CN.md) - [思考语言](./REASONING_LANGUAGE.zh-CN.md) - [任务合约与暂停策略](./TASK_CONTRACT.zh-CN.md) - [自定义 OpenAI-compatible provider](#自定义-openai-compatible-provider) - [桌面端 Hooks](./DESKTOP_HOOKS.zh-CN.md) - [快捷键](#快捷键) - [权限与沙盒](#权限与沙盒) - [能力诊断](#能力诊断) - [插件(MCP)](#插件mcp) - [斜杠命令](#斜杠命令) - [内置文档检索](#内置文档检索) - [@ 引用](#-引用) - [双模型协同](#双模型协同) ## 配置 优先级:**flag > `./reasonix.toml` > 用户配置文件 > 内置默认值**。从 **Reasonix v1.8.1** 开始,用户配置位于 macOS/Linux 的 `~/.reasonix/config.toml`,Windows 为 `%AppData%\reasonix\config.toml`;迁移和相关数据路径见 [配置路径](./CONFIG_PATHS.zh-CN.md)。标注为“仅用户/全局”的字段(包括 agent 轮数上限)不会被 `./reasonix.toml` 覆盖。 Provider 通过 `api_key_env` 命名密钥,真实密钥值保存在 CLI 与桌面端共用的 Reasonix 全局 `/.env`。项目 `.env`、home `.env`、继承的 shell 环境变量、旧 credentials 和系统 keyring 都不再作为 provider key 的运行时 fallback;旧凭据只作为迁移来源读取。项目 `.env` 仍会作为当前 workspace 范围内的 MCP/plugin 非 provider `${VAR}` 展开来源,但不会导入 provider key 或 Reasonix 控制变量。全局 `config.toml` 和 `.env` 的完整结构见 [配置路径](./CONFIG_PATHS.zh-CN.md)。 桌面端和 CLI 端的可见思考语言设置,见 [思考语言](./REASONING_LANGUAGE.zh-CN.md)。 桌面端 Hooks 的 JSON 配置、事件 key 和 payload 字段,见 [桌面端 Hooks](./DESKTOP_HOOKS.zh-CN.md)。 `SessionStart` hook 可通过 stdout 或 `hookSpecificOutput.additionalContext` 把插件/工作流 bootstrap 内容一次性注入下一轮真实用户输入上下文,而不是写入稳定 system prompt。 插件包可通过 `hooks/session-start-codex` 或插件根目录 `CLAUDE.md` 提供该启动上下文;Claude 风格 `.claude/settings.json` command hooks 也会按同名事件映射到 Reasonix hooks。 ```toml default_model = "deepseek-flash" # 执行器;设 [agent].planner_model 可加规划器 # language = "zh" # 界面语言;为空则按 $LANG / $REASONIX_LANG 自动检测 [ui] # shortcut_layout = "desktop" # classic|desktop;兼容旧配置 # cursor_shape = "bar" # block|underline|bar;CLI/TUI 输入光标 show_turn_usage = false # 隐藏 TUI 每轮 token/费用回执;默认 true [agent] reasoning_language = "auto" # 可见思考过程语言:auto|zh|en # plan_mode_read_only_commands = ["gh issue view"] # 仅兼容旧配置;Plan bash 现由 Permissions 决定 # planner_model = "deepseek-pro" # 可选的低频规划器 # subagent_model = "deepseek-pro" # runAs=subagent skill 的默认模型 # subagent_models = { review = "deepseek-pro", security_review = "deepseek-pro" } # max_subagent_depth = 2 # 子代理嵌套委派深度;设为 1 可恢复旧的单层边界 # max_subagent_concurrency = 6 # 会话级子代理总并发(task/fleet/skills) # max_parallel_writers = 3 # 互不重叠 write_paths 时的并行写入上限 # compact_ratio 是唯一自动维护阈值(默认 0.80;预设 0.70/0.80/0.85) # max_output_tokens = 0 # 自动:官方 DeepSeek 空间充足时省略字段(服务端 384K),临界时裁剪 # max_output_tokens = 32768 # 可选控费上限,仍可按物理剩余继续下调 # max_output_tokens = 65536 # 可选控费上限 # max_output_tokens = -1 # 明确省略 wire 字段;已知自动预算放不下时压缩 # max_output_tokens 不参与 compact_ratio;0 是 Provider 自动值,不再表示“跳过本地检查” [[providers]] name = "deepseek-flash" kind = "anthropic" base_url = "https://api.deepseek.com/anthropic" model = "deepseek-v4-flash" api_key_env = "DEEPSEEK_API_KEY" web_search = true # 还有预设:deepseek-pro [tools] enabled = [] # 省略/为空 = 全部内置工具 bash_timeout_seconds = 120 # 前台安全上限;设为 0 表示不设工具层超时 mcp_startup_timeout_seconds = 30 # 后台 initialize + tools/list 安全上限 mcp_call_timeout_seconds = 300 # MCP 调用默认安全上限;可用 plugin/tool 覆盖 [environment] enabled = true # 启动时把 OS、shell 和常见工具摘要稳定注入 prompt offline = false # 无出站网络时设为 true,避免 agent 无效重试网络请求 # [environment.tools] # go = "/opt/homebrew/bin/go" # 可选:显式可信路径;workspace 内路径不会在启动时自动执行 [skills] # paths = ["~/my-skills", "../shared/skills"] # 额外的自定义技能目录 # excluded_paths = ["~/.agents/skills"] # 隐藏约定来源,不删除目录 # disabled_skills = ["review"] # 隐藏技能,直到 /skill enable [permissions] mode = "ask" # 无规则命中时 writer 的兜底:ask|allow|deny deny = ["Bash(rm -rf*)", "Bash(git push*)"] # 任何模式下都硬阻断 allow = ["Bash(go test:*)"] # 从不询问 [sandbox] # workspace_root = "" # 文件写工具被限制在此目录;留空 = 当前目录 # allow_write = ["/tmp"] # write_file/edit_file/multi_edit/move_file 额外可写的目录 # forbid_read = ["${HOME}/.ssh"] # agent 不可读取或列出的路径 [serve] auth_mode = "none" # none|token|password;绑定到非 localhost 前请先开启认证 # token = "" # 可选固定 token;token 模式为空时启动时自动生成 # password_hash = "" # 用 reasonix serve --hash-password --password '...' 生成 # behind_proxy = false # 只在可信反向代理后方设为 true [[plugins]] name = "example" command = "reasonix-plugin-example" startup_timeout_seconds = 60 # 可选:initialize + tools/list 上限 call_timeout_seconds = 600 # 可选:单个 MCP server 的调用超时 tool_timeout_seconds = { "generate_video" = 1800 } # 可选:raw MCP tool 名称 ``` 完整 schema 与每个字段的契约见 [`SPEC.md` §5](./SPEC.md#5-configuration-toml)。 已安装或由项目配置声明的 MCP server 不需要逐工具信任名单。独立双模型 Planner 可使用所有 非 destructive 工具,即使 server 没有声明 `readOnlyHint`;严格只读 subagent 仍要求 `readOnlyHint: true` 且无 `destructiveHint`。 `[agent].plan_mode_read_only_commands` 也继续参与配置 round-trip,但主 Plan 工作流不再维护独立的 bash allowlist 或信任提示。Plan 与常规模式使用相同的 Permissions 规则做 bash 分类和审批;Sandbox 仍是文件系统、进程和网络的强制边界。独立 planner 和显式只读 subagent runner 继续使用自己的严格 只读工具 registry 与前台命令分类器。 ### 环境变量 多数日常设置应写在 `config.toml` 或前文提到的 Reasonix 全局 `.env` 中。下面这些变量是进程级高级开关; 需要在启动 Reasonix 之前设置。项目 `.env` 不是 Reasonix 控制变量的运行时来源。 ### CLI 上报统计 CLI 可以向 `https://crash.reasonix.io` 发送每日最多一次的匿名活跃安装 ping, 以及有界、完全不含内容的事件计数。使用以下用户全局命令配置: ```bash reasonix config telemetry # 查看当前生效模式 reasonix config telemetry auto # 默认:仅本机交互式 TTY reasonix config telemetry on # 也允许本机 headless `reasonix run` reasonix config telemetry off # 关闭并删除待发送计数文件 ``` 正式版 CLI 第一次在符合条件的交互式终端启动时,会先明确说明数据边界,并在任何 telemetry 请求之前只询问一次。提示为 `[Y/n]`:直接回车、输入 `y` 或 `yes` 会保存为 `auto`;输入 `n` 或 `no` 会保存为 `off` 并删除待发送计数。选择保存后不再提示,允许的 后续上报保持静默。如果偏好设置保存失败,则不会上传任何内容。 在 CI、开发构建中始终关闭;设置 `DO_NOT_TRACK` 或 `REASONIX_TELEMETRY=0` 也会关闭。`auto` 模式下,重定向、pipe 或其他非交互会话 不会上报。尚未保存选择时,这些不符合条件的会话既不会提示,也不会上报。授权后的 网络失败完全静默,不会改变 stdout、stderr 或进程退出码;未发送计数只会保存在有 数量和时效上限的本地队列中,等待后续启动重试。 ping 包含一个 CLI 专用的随机 128-bit 安装 ID、CLI 版本、OS、架构和 `cli` surface 标记。计数批次使用同一个 ID 做每日活跃安装去重,只包含固定 bucket,例如 CLI 模式、 运行配置档、权限/会话模式、turn 延迟、finish reason、cache hit 区间、通用 Provider/工具错误分类、compaction、恢复计数和归一化界面语言。这个 ID 与桌面端安装 ID 分离,不是账号、硬件、仓库或 session 标识。 Reasonix 绝不会上传 prompt、回答、reasoning、工具名/参数/输出、路径、仓库/分支、 session ID、精确 token/费用、Provider/model 名称、base URL 或环境变量。 ### CLI 崩溃报告 当未处理的 Go panic 到达 CLI 入口调用栈时,Reasonix 会把脱敏报告保存在 `/cli-crash-reports`。最多保留 10 份,文件权限仅限当前用户读取。 panic 原文绝不会被序列化;绝对源码路径会变成 `/.go:`,函数参数会被 移除,并且在本地保存和实际发送前都会再次清理密钥、token、邮箱及长标识符。 崩溃报告绝不会自动上传。使用以下命令审阅和管理: ```bash reasonix report # 预览最新报告;TTY 中询问后才发送 reasonix report list # 列出本地报告 reasonix report show [ID] # 仅预览,不发送 reasonix report send [ID] # 明确发送;成功后才删除本地副本 reasonix report delete [ID] # 不发送,直接删除 ``` 通过 pipe 或重定向运行 `reasonix report` 时只会预览,不会询问或发送。CLI telemetry 设置不会自动发送或自动删除这些 需要单独审阅的报告。Go 无法恢复 runtime fatal throw、操作系统强制终止,以及未包装 后台 goroutine 中的 panic,因此这些情况不会生成本地报告。 ## Web 前端 本机使用时,`reasonix web` 会启动浏览器 UI,并自动用默认浏览器打开。也可以在 CLI 交互会话中 执行 `/web`:Reasonix 会保存当前会话、恢复终端,然后打开明确的 `/sessions/#token=...` 深链。即使会话尚未产生第一轮消息,也会延续已预留的 Session ID, 同时继续保持“空会话不提前写 transcript”的惰性落盘行为。 ```bash cd your-project reasonix web ``` 如果想启动前台 Web 服务并打印地址、但不自动新开浏览器标签页,可使用 `reasonix web --no-open`。底层的 `reasonix serve` 默认不会打开浏览器,继续用于远程开发机、进程托管、tunnel、反向代理和需要认证分享的场景。 `reasonix web` 从 `127.0.0.1:8787` 开始监听;端口占用时会依次尝试 8788、8789……, 最多递增重试 100 次。它默认启用自动生成的 Token,即使配置中的 `[serve].auth_mode` 是 `none` 也一样。每个运行实例都会在 `/server/instances/` 下写入自己的 单写者 heartbeat 文件;正常退出时只删除自己的文件,新实例则会惰性清理已确认进程死亡的记录。 因此多个 Web 实例可以共用同一个 Reasonix home,而不会相互覆盖登记状态。服务保持在前台运行, 按 Ctrl-C 停止。 显式传入 `reasonix web --auth none` 可以关闭默认 Token,只应在监听地址确定可信时使用。 `reasonix serve` 则保持向后兼容:默认监听 `127.0.0.1:8787`,认证模式仍由配置决定,空配置为 `auth_mode = "none"`。如果要绑定到非 loopback 地址、通过 tunnel 暴露,或放到反向代理后面, 请先开启认证再分享 URL: ```bash reasonix serve --auth token reasonix serve --addr 0.0.0.0:8787 --auth token reasonix serve --auth password --password 'temporary-password' ``` Token 模式会在终端打印带 `#token=...` 的分享链接;Web 页面会先将 fragment 换成 HttpOnly Cookie,再启动 API 与 SSE 请求,从而避免 Token 进入请求 URL、浏览器历史、 Referrer 和访问日志。可通过 `--token` 或 `[serve].token` 复用固定 token。Password 模式必须在启动时传 `--password`,或在配置里保存 bcrypt hash: ```bash reasonix serve --hash-password --password 'strong-password' # /config.toml [serve] auth_mode = "password" # none|token|password password_hash = "$2a$12$..." behind_proxy = true # 仅可信反向代理后方使用 ``` Web UI 提供聊天、工具审批、会话历史、rewind/fork/summarize、模型与 reasoning effort 控件、 Goal、由 `todo_write` 工具驱动的实时 Todo 面板、扩展发布的 status/card/form/notification 界面,以及已配置 provider 的余额显示。扩展提供的模型也会进入模型选择器。空闲时运行 `/reload` 可在不重启 Serve 的情况下,以失败原子方式重载扩展 Sidecar 和运行时 generation。临时启动可用 `--model`、`--max-steps` 或 `--resume`;不传 `--model` 时,`serve` 使用用户全局 `default_model`。 如果当前 Provider 尚未保存 API Key,绑定在回环地址的 Serve 仍会启动,并先显示 Provider 配置页,而不是在浏览器连接前直接失败。通过 Serve 认证后可在该页输入 Key;Reasonix 会以受限 权限写入**当前主机**的全局凭据文件,在同一进程内重建 Controller,然后进入正常 Web UI。 凭据写入接口在非回环监听器上始终禁用。对于 SSH 远程窗口,“当前主机”指经 SSH 隧道访问的 远端主机;Key 不会从桌面本机自动复制过去。 ## 通过 ACP 接入编辑器 `reasonix acp` 把 Reasonix 作为 ACP v1 stdio agent 提供给编辑器和其他 host 客户端。 独立的 **[ACP 编辑器接入](./ACP.zh-CN.md)** 文档集中说明启动方式、能力协商、会话生命周期、 彼此独立的模型/工作/协作/审批控制轴、客户端文件与 terminal 能力、MCP server、权限请求, 以及 Reasonix 的回合中引导扩展。 ## 远程 SSH 远程模块让 Reasonix 在远端主机上运行,并通过你自己的 SSH 连接访问它 —— 即 VS Code Remote-SSH 式的体验。它在远端主机上引导一个常驻的 headless `reasonix serve`,把本地一个 回环端口转发过去,再经隧道打开现有的 serve Web 客户端。agent、工具与文件全部原生运行在远端 主机上,保真度 100%,不经过有损的文件代理。V1 支持 Linux 与 macOS 远端主机。 主机保存在 `config.toml` 的用户级 `[remote]` 段。与 `[secrets]` 一样,项目级 `reasonix.toml` 无法注入或覆盖远程主机 —— 克隆的仓库永远无法左右 Reasonix 向何处发起 SSH 连接。凭据沿用 provider 惯例:主机只记录环境变量名(`passphrase_env`、`password_env`),其值 存放在 Reasonix 全局 `.env` 中;私钥内容本身从不存储 —— `identity_file` 只是路径。 ```toml [remote] [[remote.hosts]] name = "gpu-box" host = "203.0.113.7" user = "dev" identity_file = "~/.ssh/id_ed25519" workspace = "~/projects/app" serve_install = "auto" # 远端 CLI:auto | npm | upload | never [[remote.hosts.forwards]] type = "local" # local (-L) | remote (-R) bind = "127.0.0.1:5432" target = "127.0.0.1:5432" ``` 命令行: ```bash reasonix remote add gpu-box dev@203.0.113.7 --workspace '~/projects/app' reasonix remote import --all # 导入别名;连接时通过 ssh -G 解析 Include/Match 等规则 reasonix remote test gpu-box # 拨号 + 认证 + 主机密钥确认 reasonix remote connect gpu-box --open # 引导 serve、建隧道、打开 URL reasonix remote serve status gpu-box reasonix remote fs ls gpu-box:'~/projects/app' ``` 启用 `use_ssh_config` 的主机会通过本机 OpenSSH `ssh -G` 获取最终有效配置,因此支持 `Include`、通配 `Host`、`Match`(包括 `Match exec`)、多个 `IdentityFile`、`ProxyJump` 和 `IdentitiesOnly`。导入时只保存原始别名,不复制一份容易过期的解析结果。 `connect` 是前台守护(相当于 `ssh -N` 加上 serve 引导):它保持隧道与已配置的转发存活,断线时 以指数退避自动重连,并在重连后重新挂载转发。Ctrl-C 只断开本地一侧 —— 远端 serve 继续运行, 下次 `connect` 会复用它。V1 无后台守护进程。 主机密钥会对照你的 OpenSSH `~/.ssh/known_hosts`(只读)以及 Reasonix 托管的 `~/.reasonix/remote/known_hosts` 校验。首次见到的密钥会提示 TOFU 确认并记入托管文件;与已记录 密钥冲突的密钥会硬失败并指明出错的行,绝不自动接受。 远端侧状态位于远端主机的 `~/.reasonix/remote/`:`serve-<工作区 slug>.json`(pid、绑定的回环 地址、工作区)、`serve-.token`(0600;认证 token,经 `--token-file` 传给 serve,因此不会 出现在 `ps` 中)、`serve-.log`。 在桌面端,于 **设置 -> 远程 SSH** 管理主机,再通过状态栏徽标或主机行的 **远程浏览器** 按钮经 SFTP 浏览与编辑文件、管理端口转发、启动/打开远程工作区。打开工作区时会创建一个类似 VS Code Remote SSH 的独立 Reasonix 原生窗口。主窗口持有 SSH 隧道;远程窗口是隔离的轻量外壳,不会恢复 或抢占本地对话会话。远程网页使用**远端**主机上的 Provider 配置与 API Key —— 桌面端绝不会把 本机 Provider 暴露给远端主机。如果远端缺少当前 Provider 的 API Key,窗口会先显示经过认证的 配置页,只把 Key 保存到远端 Reasonix 凭据文件,并在不重启远端 Serve 的情况下激活 Provider。 短暂的 SSH 中断不会关闭远程窗口;桌面端会在后台重连、重新挂载回环转发,并让窗口重新加载已恢复的 Serve。认证失败或主机密钥错误属于终止性故障,此时会关闭已经不可用的远程窗口。 ## 自定义 OpenAI-compatible provider 在桌面端打开 **设置 -> 模型 -> 接入 -> 添加模型服务 -> 自定义供应商**,用于接入代理、 聚合平台或自建 OpenAI-compatible chat API / Anthropic-compatible Messages API 服务。 常用服务优先使用 **添加模型服务 -> 推荐预设**。新建的官方 DeepSeek provider 默认使用 Anthropic-compatible Messages 端点,并开启 provider 侧 `web_search`;两种协议都复用同一个 `DEEPSEEK_API_KEY`。启动时,Reasonix 会自动升级仍使用官方端点、标准密钥和标准模型设置且 未修改过的旧 `deepseek-flash` / `deepseek-pro` 条目。修改过的官方 Chat Completions 配置保持 原样,设置页会提供 **升级到推荐协议** 操作。代理地址、自定义 Headers、模型列表和能力覆盖 都不会自动迁移。已有单独命名的 `deepseek-anthropic` 条目继续兼容,但新增 接入不再展示这个重复预设。Reasonix 还可以预填以下可编辑的自定义 provider: Kimi CN、Kimi Global、Kimi Coding Plan、MiMo API、MiMo Anthropic、MiMo Token Plan CN/SGP/AMS 及其 Anthropic-compatible 变体、MiniMax CN/Global API、MiniMax CN/Global Anthropic、GLM CN、Z.AI Global、GLM/Z.AI Coding Plan 的 OpenAI-compatible 与 Anthropic-compatible 端点、OpenCode Go、OpenCode Go Anthropic、OpenCode Go DeepSeek Anthropic、OpenCode Go DeepSeek Responses、 OpenCode Zen Anthropic、Qwen/DashScope CN/Global、 Qwen Coding Plan CN/Global 的 OpenAI-compatible 与 Anthropic-compatible 端点、StepFun OpenAI-compatible 与 Anthropic-compatible 端点、NovitaAI、GMI Cloud、Vercel AI Gateway、HuggingFace Router、NVIDIA NIM、KiloCode 和 Ollama Cloud。Plan 表示 访问/付费形态;只有服务商确实提供不同区域端点时,预设名才同时带 CN/Global。 因此 Kimi Coding Plan 是独立 plan 端点,Kimi 直连 API 才拆成 CN 和 Global。 预设路径通常只需要填写服务商 API Key:真实 key 会写入 Reasonix home `.env`, `config.toml` 只保存端点、模型列表、key 环境变量名、上下文窗口、视觉模型元数据、 中国区端点直连、MiniMax `reasoning_split`、GLM/MiniMax thinking heuristic、 Anthropic-compatible 网关需要的 Bearer 认证、Ollama Cloud max-effort 支持, 以及 OpenCode Go 的每模型 reasoning 覆盖。专用的 OpenCode Go DeepSeek Anthropic 与 DeepSeek Responses 预设接入已验证的 Flash 线路,并默认启用 provider 侧 `web_search`; Responses 变体使用无状态上下文回放。原有混合 OpenCode Go Anthropic 预设仍只包含 Qwen 与 MiniMax,避免把服务端搜索工具发送给未验证模型。DeepSeek Pro 暂时仍只放在 Chat Completions 预设中,因为真实 Anthropic 和 Responses 请求目前会在 OpenCode Go 的上游转换阶段失败。OpenCode Go 预设原生包含 订阅线路的 `kimi-k3`,并配置图像输入、`high`/`max` 推理强度和 1,048,576 token 上下文窗口。未修改过 模型目录的既有 OpenCode Go 预设会自动升级;用户编辑过的模型目录保持不变。 Kimi CN 和 Kimi Global 直连 API 预设也包含 `kimi-k3`,支持图像输入、1,048,576 token 上下文窗口以及官方 `low`/`high`/`max` 推理强度(默认 `max`)。对官方 K3 端点,Reasonix 会在多轮请求中保留完整 assistant message,使用 `max_completion_tokens` 传递输出上限, 并省略 K3 的固定采样参数。未修改过的旧版 Kimi 直连模型目录会自动升级且不会改变默认模型; 自定义模型目录和端点保持不变。添加后仍然可以打开 provider 卡片,继续修改模型、请求头、 端点或兼容设置。 **API 地址** 填写服务端点。默认模式下,Reasonix 会预览并把聊天请求发送到: ```text /chat/completions ``` 如果服务商给的是完整请求 URL,例如 `https://gateway.example.com/v1/chat/completions`, 开启 **完整 URL**。开启后 Reasonix 会直接使用该地址,不再追加 `/chat/completions`。 输入框下方的预览就是最终请求地址。 模型发现会基于 API 地址尝试 `/models`、`/v1/models` 等候选地址。如果网关要求单独的 模型列表端点,在 **兼容设置** 中填写 `models_url`,例如 `https://gateway.example.com/v1/models`。如果接口不支持模型发现,也可以手动填写模型列表。 **完整 URL** 仍使用 OpenAI-compatible chat 请求体;它不会切换成 OpenAI Responses API 的请求 schema。 ### 兼容设置 **兼容设置(通常不用改)** 用于处理认证变量、模型发现地址、请求头、以及 reasoning/thinking 请求格式和普通 OpenAI-compatible 默认行为不一致的网关。除非服务商文档明确要求,或代理报错说明 不兼容,否则保持默认值即可。Kimi Coding Plan、MiniMax CN/Global Anthropic 这类 Anthropic-compatible 服务, 保存前在基础区域把接入协议切到 **Anthropic-compatible**。 | 字段 | 作用 | 什么时候改 | | --- | --- | --- | | `api_key_env` | 该 provider 使用的 API key 环境变量名。桌面端保存的真实 key 会写入 Reasonix home `.env` 的同名变量;TOML 配置里只保存变量名。 | 多个 provider 需要不同 key 时改名;服务不需要 API key 时可以留空。 | | `models_url` | 只用于自动发现模型列表的 URL。聊天请求仍使用上方的 API 地址或完整 URL。 | `/models` 或 `/v1/models` 不是该网关模型列表地址时填写。 | | 额外请求头 | 静态 HTTP header,一行一个 `Header: value`。 | OpenRouter 等网关要求 `HTTP-Referer`、`X-Title` 或类似站点来源 header 时使用。API key 仍放在上方密钥字段,不要重复写到这里。 | | 额外请求体 | 合并到聊天请求体顶层的 JSON 对象。 | 仅用于服务商专用开关,例如 `{"enable_thinking": true}`。`model`、`messages`、`tools`、`stream`、`thinking` 等核心字段仍由 Reasonix 控制,且不接受 `null` 值。 | | Authorization: Bearer | 对 Anthropic-compatible provider,把已保存的 API key 用 `Authorization: Bearer ` 发送,而不是 `x-api-key`。 | MiniMax Global、Vercel AI Gateway 等网关文档明确要求 Bearer 认证时开启。 | | 模型能力模式 | 指定 Reasonix 对该 provider 使用哪种 reasoning 请求协议。 | 默认用“自动识别”。只有网关被误判,或模型文档要求特定 reasoning 格式时再切换。 | | Thinking 覆盖 | provider 专用的 `thinking.type` 覆盖项。 | 默认用 Auto。只有后端文档明确支持 `enabled`、`disabled` 或 `adaptive` 时再手动指定;不支持的值可能让中转站拒绝请求。 | | 余额查询 URL | 可选的钱包余额查询接口。 | 服务商提供余额接口,且希望桌面端状态栏显示余额时填写。 | | 上下文窗口 | Reasonix 用于自动清理上下文的 provider 级 token 预算。`0` 表示禁用自动 compaction。 | 按该 provider 的模型上下文上限填写;所选模型规格不同时使用下方的逐模型覆盖。 | 每个已选模型还提供一个可选的 **上下文窗口** 输入框。留空时继承 provider 级设置;填写正整数时只覆盖该模型。这样,同一端点下的长上下文模型不会过早 compaction,短上下文模型也不会在 Reasonix 清理前被服务端拒绝。 这里应填写模型文档标注的上下文窗口,而不是最大输出 token。例如 128K 通常填 `128000`;如果服务商明确标注 `131072`,则按该精确值填写。小于 16384 时界面会 显示非阻断警告,因为过小的窗口可能导致频繁 compaction 并降低缓存命中率。 模型能力模式选项: | 选项 | 作用 | | --- | --- | | 自动识别(推荐) | Reasonix 根据模型能力元数据和端点自动选择请求格式。 | | DeepSeek 思考 | 使用 DeepSeek 风格的 thinking 控制,包括 `thinking.type` 和 DeepSeek 支持的推理深度。 | | OpenAI reasoning | 使用标准 OpenAI-compatible 的 `reasoning_effort` 档位。 | | 普通聊天(不发送思考参数) | 不发送 reasoning 或 thinking 控制字段。适合会拒绝 reasoning 参数的普通文本代理。 | Thinking 覆盖选项: | 选项 | 作用 | | --- | --- | | Auto(使用服务默认) | 不写 provider 级 `thinking` 覆盖,让 Reasonix 使用 provider/model 默认行为。 | | Enabled(开启) | 对兼容 provider 发送 `thinking.type = "enabled"`。 | | Disabled(关闭) | 对兼容 provider 发送 `thinking.type = "disabled"`。DeepSeek 风格 provider 下还会避免继续发送推理深度提示。 | | Adaptive(自适应) | 仅在服务文档明确支持 adaptive thinking 时使用,例如 MiniMax-M3 风格端点;语义是发送或保留 `thinking.type = "adaptive"`。 | ## 快捷键 这里按使用端来写,因为用户通常是先知道“我现在在桌面端/CLI”,再找对应按键。 桌面端仍用 `Shift+Tab` 切换 Plan;CLI 则用它在 Ask、Auto、Plan 之间循环。 桌面端默认用 macOS 的 `Cmd+Y` 或 Windows/Linux 的 `Ctrl+Y` 切换 YOLO; 如果在 Windows/Linux 上改绑了 YOLO,`Ctrl+Y` 会成为输入框的标准重做兼容键。 桌面端粘贴继续走系统快捷键;CLI 则把终端原生文本粘贴和应用接管的图片粘贴拆成不同快捷键。 `[ui].shortcut_layout` 仍被接受以兼容旧配置,但下面的快捷键行为已经跨布局统一。 CLI/TUI 文本输入可通过 `[ui].cursor_shape` 设置光标形状,支持 `underline`、`block` 和 `bar`。默认值是 `bar`:位置清晰,同时不会在中英混排输入时覆盖 CJK 双宽字符。 想使用传统终端块状光标可设为 `block`,偏好更弱的下划线光标可设为 `underline`。 该设置不影响桌面端或 Web 输入框。 ### 桌面端 GUI 桌面端快捷键在 **设置 → 快捷键** 中管理。选择可配置的行后按下新的组合键,Reasonix 会为桌面端保存该绑定。 撤销、重做等标准编辑快捷键会以锁定行展示,因为 WebView 的原生文本历史依赖这些平台组合键。 如果新组合键和已有动作冲突,会拒绝保存,避免一个快捷键触发两个动作。按 `?` 或点击 topic bar 里的帮助按钮可打开快捷键帮助表;帮助表由同一份快捷键 registry 生成,因此会同步显示自定义后的绑定。 全局快捷键: | 按键或控件 | 作用 | 说明 | | --- | --- | --- | | macOS `Cmd+K`,Windows/Linux `Ctrl+K` | 打开或关闭命令面板 | 打开时会聚焦搜索框;`Esc` 关闭命令面板。 | | macOS `Cmd+,`,Windows/Linux `Ctrl+,` | 打开设置 | 在设置里的 **快捷键** 页可自定义桌面端绑定。 | | macOS `Cmd+W`,Windows/Linux `Ctrl+W` | 关闭当前顶部标签页 | 最后一个标签页仍由原有关闭保护保留。 | | `Cmd+B` / `Ctrl+B` | 显示或隐藏左侧边栏 | 和点击侧边栏开关是同一个动作。 | | `Cmd+Shift+B` / `Ctrl+Shift+B` | 展开或收起最近的 shell 输出 | 和点击折叠 shell 输出提示是同一个动作。 | | macOS `Cmd+1`-`Cmd+9`,其它平台 `Ctrl+1`-`Ctrl+9` | 跳转到侧边栏中对应编号的可见对话 | 短暂按住 `Cmd`/`Ctrl` 会显示编号标记;已有自定义快捷键占用相同按键时,自定义动作优先生效。 | | macOS `Cmd++`、`Cmd+-`、`Cmd+0`;其它平台 `Ctrl++`、`Ctrl+-`、`Ctrl+0` | 放大、缩小或重置文字大小 | 对把加号上报为 `=` 的键盘也兼容。 | | `?` | 打开键盘快捷键帮助表 | 帮助表显示当前实际生效的桌面端绑定。 | 输入框快捷键: | 按键或控件 | 作用 | 说明 | | --- | --- | --- | | `Enter` | 发送当前消息 | IME 组合输入确认不会被截获。 | | `Shift+Enter` | 插入换行 | 输入框保持焦点。 | | `Shift+Tab` | 切换 Plan 开/关 | Plan 只改变“先规划”的工作流;内置 writer 仍走当前 Ask/Auto/YOLO 与 Sandbox,MCP writer/destructive 目标在整个规划阶段保持硬阻断。 | | macOS `Cmd+Z`,Windows/Linux `Ctrl+Z` | 撤销输入框中的最近一次编辑 | 普通键入继续由 WebView 原生历史管理;Reasonix 接管的粘贴、剪切、折叠块和结构化 token 会作为完整事务恢复。 | | macOS `Cmd+Shift+Z`,Windows/Linux `Ctrl+Shift+Z` | 重做输入框中的最近一次编辑 | Windows/Linux 改绑 YOLO 后也可使用 `Ctrl+Y`。 | | `Cmd+Y` / `Ctrl+Y`(默认) | 切换 YOLO 开/关 | 关闭 YOLO 时会尽量恢复之前的 Ask/Auto 基底;当前绑定可在 **设置 → 快捷键** 查看。 | | macOS `Cmd+V`,Windows/Linux `Ctrl+V` | 粘贴剪贴板内容 | 剪贴板图片会作为附件加入;图片也可以拖进输入框。 | | 输入边界处的普通 `Up` / `Down` | 回放更旧或更新的已提交提示词 | 带修饰键的方向键和原生文本导航仍交给 textarea。 | | 运行中按 `Esc` | 取消当前 turn | 如果后端尚未开始回复,会恢复草稿。 | 菜单与控件: | 按键或控件 | 作用 | 说明 | | --- | --- | --- | | 斜杠、`@` 或 past-chat 菜单中的 `Up` / `Down` | 移动高亮项 | past-chat 搜索框使用同一套导航键。 | | 这些菜单中的 `Enter` / `Tab` | 接受高亮项 | 类似目录的条目可能继续打开下一层菜单。 | | 这些菜单中的 `Esc` | 关闭当前菜单或退出 past-chat 搜索 | 关闭后可继续正常输入。 | | Ask / Auto / YOLO 审批控件 | 直接选择工具审批姿态 | 点击操作不受快捷键规则影响。 | | 工具审批卡片 | `Left` / `Right`、`Enter`、`1`-`4`、`Esc` | 移动高亮动作、确认当前高亮、直接选择编号动作,或拒绝。默认高亮是“允许一次”。 | | 计划审批卡片 | `Left` / `Right`、`Enter`、`1`-`3`、`Esc` | 在“修改计划 / 开始执行 / 退出计划”之间移动。默认高亮是“开始执行”。 | | Plan 控件 | 切换 Plan 开/关 | 和 `Shift+Tab` 是同一个模式。 | | 协作菜单里的 Goal | 启动、查看或清除 Goal | Goal 不进入任何快捷键循环。 | ### CLI / TUI 输入框上下边线使用当前主题强调色,默认光标为细竖线。长草稿会增长到可用的最大高度; 超过后,在输入框内滚轮只滚动草稿视图,不移动插入光标,在 transcript 区域滚轮仍滚动 对话。使用 `/theme auto|light|dark` 选择背景模式,也可运行不带参数的 `/theme` 查看 命名配色,再用 `/theme