Open Interpreter 交互模式完全指南:在终端 TUI 中驾驭提示、文件、批准与斜杠命令
导读
交互模式(Interactive Mode)是 Open Interpreter 的终端 UI(TUI)使用形态:在项目目录中启动 interpreter 后,你可以在同一个终端里完成提问、引用文件与图片、管理批准策略、切换模型、规划与代码评审以及控制多会话,全程无需离开编辑器所在的开发环境。读完本文,你将掌握启动交互模式的命令行方式、Composer 输入框的完整键盘操作、文件与图片的挂载方法、/permissions 批准策略、/model 与一次性 CLI 覆盖、/plan 与 /review 的评审流程、后台任务与会话控制,并从仓库源码层面理解这些斜杠命令的注册与分发机制。
说明:交互模式对应的完整界面与键位实现位于仓库的 codex-rs/tui 目录(其入口文件为 codex-rs/tui/src/lib.rs 与 codex-rs/tui/src/main.rs),文档主体为 docs/zh/interactive.md,英文原版见 docs/interactive.md。
一、启动交互模式
在任意项目目录下运行 interpreter 即可拉起终端 UI。官方文档推荐在项目目录中启动,这样代理从启动那一刻起就以当前目录为工作区:
cd my-project
interpreter
如果不想先进入空提示框再输入,可以把首个提示直接作为命令行参数传入:
interpreter "find the auth middleware and explain how it works"
这条命令等价于「先启动 TUI、再在 Composer 中提交同一条消息」,适用于快速进入一个具体任务。此外交互模式还支持把一系列「一次性覆盖」参数追加在同一条命令后面,例如模型指定(详见第五节)。交互模式/非交互模式共享的命令行参数(模型、图片、沙箱、批准等)统一定义在 codex-rs/utils/cli/src/shared_options.rs,由 TUI 的 CLI 入口 codex-rs/tui/src/cli.rs 引入,完整的参数清单可参考 docs/zh/cli-reference.md。
二、Composer:位于底部的提示输入框
在 TUI 中,位于屏幕底部的输入区域被称为 Composer,它是你与代理对话的入口。文档给出的完整键位与命令映射如下:
| 操作 | 键或命令 |
|---|---|
| 发送消息 | Enter |
| 添加换行 | Shift+Enter |
| 打开斜杠命令 | / |
| 提及文件 | @ 或 /mention |
在 $VISUAL 或 $EDITOR 中编辑提示 |
Ctrl+G |
| 搜索提示历史 | Ctrl+R |
| 在工作运行时排队后续操作 | Tab |
| 取消或退出 | Esc |
| 退出 | /exit 或按两次 Ctrl+C |
其中几项值得展开:
- 换行与发送分离:
Enter直接提交,而Shift+Enter插入换行,方便编写多行提示或粘贴大段指令。 - 文件提及:输入
@会触发文件的模糊搜索(fuzzy-search),选中后文件作为上下文元素进入输入框;/mention是同一能力的斜杠命令形式。对应实现见 codex-rs/tui/src/chatwidget/mention_codec.rs 与SlashCommand::Mention。 - 外部编辑器编辑:
Ctrl+G会把当前提示带出到$VISUAL(若设置)或$EDITOR(否则)指定的编辑器中,保存退出后内容回到 Composer,适合编辑长文本。 - 提示历史导航:Composer 支持
↑/↓上下翻阅历史,Ctrl+R则进入反向增量搜索模式:底部栏变为搜索输入框,查询非空时正文区实时预览当前匹配项,Enter采纳预览。从源码注释可见历史分为「跨会话持久历史」(仅文本)与「会话内本地历史」(含文本元素、附件、图片引用)两层,见 codex-rs/tui/src/bottom_pane/chat_composer.rs。 - 排队后续操作:当代理正在运行任务时,按
Tab不会打断当前工作,而是把你要输入的下一条指令排入队列,当前轮次结束后自动继续。 - 退出:
/exit立即退出;在主界面连续按两次Ctrl+C同样可以退出。
三、在输入框中「提及」文件与图片
3.1 使用 @ 引用文件
输入 @ 后开始键入文件名,TUI 会对工作区内的文件做模糊搜索,选中即把该文件作为上下文附加到当前提示。被提及的文件会随消息一起提交给模型,让代理基于真实文件内容作答,而不是只凭你的转述。
3.2 将图片附加到首个提示
图片只能附加到首个提示(即通过命令行启动交互模式时)。使用 -i / --image 参数,支持一次附加一张或多张图片,多张之间以英文逗号分隔:
interpreter -i screenshot.png "explain what is wrong in this UI"
interpreter -i before.png,after.png "compare these states"
参数 images 在 codex-rs/utils/cli/src/shared_options.rs 中定义:value_delimiter = ',' 意味着逗号分隔的多张图片会被展开为多个文件路径,num_args = 1.. 允许一次传入多个 -i 值;因此两种写法都合法:
interpreter -i screenshot.png "describe this UI bug"
interpreter -i before.png,after.png "compare these states"
注意:图片输入能否被模型理解取决于当前模型是否支持图像模态(
input_modalities中包含image)。仓库中多个 harness 显式声明了模型能力,例如 codex-rs/core/src/harness/kimi_cli.rs 中input_modalities: ["text", "image"],意味着该模型可接收图片输入。
四、批准(Approvals)与 /permissions
当代理即将执行的命令或工具调用超出当前安全策略时,TUI 会在真正执行前弹出批准请求,由你确认或拒绝。文档明确描述了默认姿态的设计取向:面向可信仓库的日常工作——允许工作区内操作,凡是超出活动策略范围的动作都会先征求你的同意。
使用 /permissions 可以随时更改活动策略:
/permissions
/permissions 会打开权限模式选择弹窗(实现在 codex-rs/tui/src/chatwidget/permission_popups.rs,open_permissions_popup 负责弹出),你可以在其中切换不同的批准力度;/permissions 属于在任务运行中依然可用的命令(见 SlashCommand::Permissions 的 available_during_task() 返回逻辑,codex-rs/tui/src/slash_command.rs)。
批准与沙箱是一体两面:命令行也提供对应的启动参数用于一次性覆盖,例如 -s/--sandbox 选择沙箱策略、--approve-for-me 走自动评审通道、--dangerously-bypass-approvals-and-sandbox(别名 yolo)跳过全部确认(高危,仅建议用于已被外部沙箱隔离的环境),参数定义同样位于 codex-rs/utils/cli/src/shared_options.rs。
关于策略的具体语义与沙箱机制,请阅读仓库内的两份专项指南:
- 沙箱与批准(英文:sandbox)
- 权限(英文:permissions)
五、模型与提供商:/model 与一次性 CLI 覆盖
在会话中运行 /model 可以打开模型选择弹窗,从中切换提供商(provider)、模型(model)与推理力度(reasoning effort)。弹窗实现位于 codex-rs/tui/src/chatwidget/model_popups.rs:open_model_popup 先展示快捷自动模型列表,选择「所有模型」后进入包含全部预设的完整选择器(model_popups 基于 TUI 侧的模型目录 codex-rs/tui/src/model_catalog.rs 渲染选项)。
Open Interpreter 支持的提供商范围包括:
- OpenAI
- Anthropic
- 本地提供商(如 LM Studio、Ollama,配合
--oss使用) - 来自生成模型目录的兼容自定义提供商
除 /model 交互式选择外,文档还给出了两种常见的一次性命令行覆盖(即在启动时直接指定,不进入弹窗):
interpreter -m gpt-5.1-codex "review this module"
interpreter --oss "try this with my local model"
-m/--model:直接指定本次会话使用的模型。--oss:强制走开源/本地模型提供商。若同时想明确指定本地后端,可用--local-provider指定lmstudio或ollama(源码注释说明:--oss不带该参数时,使用配置默认值或弹出选择)。
这些标志在 codex-rs/utils/cli/src/shared_options.rs 中定义,且 TUI 对执行子命令时做了「继承 + 覆盖」的合并处理(inherit_exec_root_options / apply_subcommand_overrides),确保外层指定的模型、OSS 开关和图片会正确传递给内部命令。
六、评审与规划:/plan 与 /review
交互模式内置了两种「先想后做」的工作流,对应源码中两个独立语义的命令(见 codex-rs/tui/src/slash_command.rs):
/plan:切换进入 Plan 模式(规划模式),让代理在动手编辑代码之前,先检查现场并给出执行计划或建议,经你确认后再落地。/review:对当前更改做一次代码评审(code-review pass),排查问题。它支持行内参数(如/review ...,见supports_inline_args),意味着可以直接附带评审关注点。
文档特别强调:评审模式是「侧重阅读」的模式(read-focused)。它会先在摘要之前报告错误(bugs)、回归(regressions)、缺失的测试(missing tests)以及风险行为(risky behavior),而不是急着输出总结——换句话说,它把「找问题」排在「下结论」之前。
从实现看,/plan 的分发逻辑位于 codex-rs/tui/src/chatwidget/slash_dispatch.rs:apply_plan_slash_command 会检查协作模式(collaboration modes)是否开启,若未开启则提示「Collaboration modes are disabled / 需要启用协作模式才能使用 /plan」;开启后则依据当前模型目录计算规划掩码 plan_mask 并应用到会话。这也解释了为什么文档提示在使用某些模型或配置时需先满足协作模式前提。/review 则会打开评审弹窗(open_review_popup),若 MCP 启动尚未完成还会先暂缓输入直至配置生效。
七、后台工作:让长命令常驻
长时间运行的命令(例如构建、测试、启动本地服务)不必阻塞对话:它们可以在**后台终端(background terminal)**中持续运行,而代理继续处理你的下一条指令。
| 命令 | 用途 |
|---|---|
/ps |
列出后台终端 |
/stop |
停止后台终端 |
从仓库源码可以还原这两个命令的底层调用链:TUI 侧通过 AppCommand::CleanBackgroundTerminals(见 codex-rs/tui/src/app_command.rs)发起请求,并由线程路由逻辑 app/thread_routing.rs 调用 app-server 的 thread_background_terminals_clean;服务端在 codex-rs/app-server/src/message_processor.rs 中分别处理三种后台终端请求——ThreadBackgroundTerminalsClean(清空/停止)、ThreadBackgroundTerminalsList(列出)与 ThreadBackgroundTerminalsTerminate(终止),最终在 codex-rs/app-server/src/request_processors/thread_processor.rs 中实现对应内部方法。也就是说,/ps 与 /stop 的本质是 TUI 通过 JSON-RPC 协议向运行时代理查询并清理与当前会话(thread)绑定的后台终端集合。
八、会话控制命令速查
交互模式围绕「会话(thread/session)」提供了一组管理命令:
| 命令 | 用途 |
|---|---|
/new |
开始一个新的会话 |
/resume |
选择一个旧的会话 |
/fork |
分叉当前会话 |
/compact |
压缩旧的上下文 |
/clear |
清除屏幕 |
/copy |
复制最新的助手输出 |
/theme |
更改语法高亮主题 |
/status |
检查模型、沙盒、批准和令牌状态 |
逐一说明其语义:
/new与/clear都用于「翻篇」,区别在于/clear只清空终端画面,而/new在对话进行中开启一条全新的会话(SlashCommand::New描述为 "start a new chat during a conversation")。两者都支持行内参数。/resume打开会话拾取器(codex-rs/tui/src/resume_picker.rs),从历史会话列表中选择一条继续;/fork则基于当前会话派生一条新分支而不影响原会话。/compact用于压缩旧上下文,把较早的对话折叠成摘要,以推迟接近上下文上限(context limit),对应描述 "summarize conversation to prevent hitting the context limit"。/copy把最新一条助手输出以 Markdown 格式复制到剪贴板(SlashCommand::Copy描述为 "copy last response as markdown")。/theme切换语法高亮主题;/status汇总展示当前会话的模型、沙箱、批准策略与令牌(token)用量等运行时状态。
需要留意的是,不是所有命令在所有时刻都可用。源码在 codex-rs/tui/src/slash_command.rs 中为每个命令声明了 available_during_task()(任务进行中是否可用)与 available_in_side_conversation()(旁路对话中是否可用)。例如 /new、/review、/plan、/clear 在任务运行中会被禁用(分发器会给出 "'/xxx' is disabled while a task is in progress." 提示),而 /model、/permissions、/status、/ps、/stop 等可以在任务进行中随时调用,方便你边跑边调。
会话状态的本地存储
Open Interpreter 将会话状态本地保存在 ~/.openinterpreter/ 目录下。也就是说,跨启动的 /resume、历史提示记录等依赖的数据都落在你的主目录中,不会上传到远端;如需了解会话存储的更多细节,可参考 docs/zh/sessions.md 与配置文档 docs/zh/config-reference.md。
九、斜杠命令的底层机制:从注册到分发
如果把整个交互模式比作一张命令台,那么所有的 / 命令都来自同一个枚举注册表。在 codex-rs/tui/src/slash_command.rs 中,SlashCommand 枚举以声明顺序即弹出菜单展示顺序的方式列出了全部内置命令(注释明确提醒「不要按字母排序,高频命令放前面」),并通过 description() 为每条命令提供面向用户的说明文本,例如:
/plan→ "switch to Plan mode"/review→ "review my current changes and find issues"/status→ "show current session configuration and token usage"/permissions→ "choose what Open Interpreter is allowed to do"/model→ "choose provider, model, reasoning effort, and harness"
从这份源码清单还可以挖掘出文档未展开但值得知道的信息:
- 别名:
/exit与/quit都指向退出;/clean是/stop的别名(并有对应单元测试clean_alias_parses_to_stop_command);/pet是/pets的别名;/approve对应自动评审拒绝的一次放行。可见 codex-rs/tui/src/slash_command.rs 中的测试模块对上述别名做了显式断言。 - 行内参数:
supports_inline_args()标明的命令可以直接携带参数,如/review ...、/rename ...、/resume ...、/goal ...。 - 可见性规则:
is_visible()控制命令是否出现在弹窗中,例如沙箱读目录命令仅在 Windows 上显示、/app仅在 macOS/Windows 上显示、调试专用命令仅在 debug 构建下出现。
命令的输入侧处理在 Composer 中完成:用户敲入 / 后弹出命令菜单,输入完整命令名时 Composer 会将其「提升」(promote)为独立的命令元素(见 codex-rs/tui/src/bottom_pane/chat_composer.rs 的模块说明),随后进入 codex-rs/tui/src/chatwidget/slash_dispatch.rs 的分发逻辑:先做「侧对话可用性」与「任务进行中可用性」两道闸门检查,再路由到具体处理函数(如 /model 打开模型弹窗、/permissions 打开权限弹窗、/plan 应用协作模式掩码)。这套「枚举注册 + 描述集中管理 + 分发器调度 + 任务态闸门」的结构,保证了即使命令数量庞大,行为也一致、可测试。
十、上手建议与完整工作流
把上面的能力串起来,一个典型的交互式开发循环可以是:
cd my-project && interpreter启动 TUI;- 在 Composer 中
@提及关键源文件,输入首个提示(或在启动时直接interpreter "首个提示"、-i附带截图/设计稿); - 需要动手大改之前先
/plan拿到方案;改动完成后用/review让代理做一轮侧重阅读的代码评审; - 借助
/model或启动参数-m/--oss在云端模型与本地模型之间切换对比效果; - 长命令跑起来后继续对话,需要时用
/ps查看、/stop停掉后台终端; - 收工前用
/status确认模型、沙箱与批准状态与令牌用量;换任务用/new,想回看旧任务用/resume,需要对比方案用/fork。
交互模式相关的界面实现、斜杠命令注册表与 CLI 参数定义均可直接在仓库中按本文给出的路径查阅,帮助你在使用之外进一步理解其工作机制。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
