OpenProgram Docs

终端 TUI#

工具审批行为及运行中切换请参见工具权限模式。

不离开终端使用 OpenProgram 的完整聊天界面。本页覆盖进入退出、按键和斜杠命令。

终端 TUI

进入与退出#

openprogram tui      # 直接进入终端聊天(别名:openprogram chat)
openprogram          # 裸命令会先询问:进终端 UI 还是 Web UI
openprogram tui --no-alt-screen  # 行内模式,保留终端滚屏
openprogram tui --screen-reader  # 无鼠标追踪的行内无障碍模式

Windows、macOS 和 Linux 的 release CLI 都自带独立的 Node.js Ink 界面。启动时检测终端实际是否支持 raw input,而不是按操作系统一刀切:Windows Terminal、ConPTY 下的 PowerShell 和现代 IDE 集成终端会进入完整全屏界面;终端无法提供 raw input 时,会给出明确提示并回退到内置 Python Rich 界面。两种实现都通过 WebSocket 连接同一个本地 worker,并与 Web UI 共用会话。

全屏界面要求 stdin 和 stdout 都连接终端。重定向或管道调用会在写出任何 ANSI frame 前跳过 Ink,进入行式 fallback;自动化调用请使用 openprogram --print "..."。Alternate screen 不再清除 shell 主屏内容,退出时会原样恢复。光标移动和删除以完整 Unicode grapheme cluster 为单位,因此编辑 emoji、组合字符和中日韩文字时不会把字符拆开。

/copy 在 Wayland 会话使用 wl-copy,在 X11 会话使用 xclip 或 xsel,在 WSL 中使用 clip.exe。通过 SSH 使用时不会误写远端图形剪贴板,而改用 OSC 52;在 tmux 中还会使用 passthrough 与 paste buffer。原生剪贴板命令带有超时,失效的 display 不会卡死 TUI。

Windows 推荐使用 Windows Terminal。运行在 MinTTY 中的 Git Bash 可能回退到 Rich;Windows Terminal 内的 PowerShell 可使用完整界面。Release 已携带 Node.js executable,用户不需要为 TUI 另装 Node.js。

退出:/quit,或空闲时快速按两次 Ctrl-C。

续聊历史会话:TUI 内用 /resume 挑选,也可以直接运行 openprogram --resume <id>。会话 id 可用 openprogram sessions list 查。

使用 --profile <名称> 时,启动诊断写入该 profile 的状态目录(~/.openprogram-<名称>/logs/ink-startup.log),不会混入默认 profile。

按键#

按键 作用
Enter 发送
空输入时按 ? 打开键盘快捷键参考
Alt+Enter 换行
Esc 清空输入行;生成中则中止本轮
Ctrl-C(生成中) 三段式停止:第一次提示、第二次优雅停止、第三次强制停止
Ctrl-C 双击(空闲) 退出
↑ / ↓ 历史输入回溯;补全菜单打开时上下选择
Tab 接受文件 / 斜杠命令补全
→(行尾)或 Ctrl+E 接受自动补全建议
Ctrl+A / Ctrl+E 没有待接受建议时移到输入开头 / 结尾
Ctrl+W 删除前一个单词
Ctrl+R 搜索已保存上下文
Shift+Tab 循环切换权限档(ask → acceptEdits → plan → auto)
Ctrl+K 命令面板(覆盖全部斜杠命令)
PageUp / PageDown、Ctrl+U / Ctrl+D 回滚翻页 / 半页
Home / End 跳到最上 / 最下

斜杠命令#

输入 / 触发补全。常用:

命令 作用
/help、/keybindings 命令列表与键盘快捷键参考
/model、/fetch-models 切换模型、重新拉取模型列表
/effort 调整 thinking effort(档位见 thinking effort)
/new、/resume、/sessions、/session 新会话、续聊、会话列表、当前会话信息
/rewind 回退会话到某条消息
/compact、/context、/clear 压缩上下文、查看上下文、清屏
/permissions、/sandbox 权限档与沙箱
/login <provider>、/logout provider 登录 / 登出(见认证与凭据)
/agents、/agent 管理 / 切换 agent
/mcp、/tools、/memory 查看和管理与 Web UI 对应页面同源的数据
/cost 本会话 token 用量
/export、/copy 导出会话、复制回复
/config、/theme、/bell 设置、主题、提示音
/doctor 健康检查
/channel、/attach、/detach、/connections 聊天渠道接入与会话路由
/quit 退出

/compact 总结较早的完整轮次及其可见工具结果,保留最近轮次。它改变下一次模型请求的上下文, 原始消息仍保存在会话中。前后 token 数为本地估算;历史过短、摘要失败或没有节省空间时, 上下文保持不变。

另有 /search、/review、/diff、/init、/browser、/welcome。完整清单以 /help 输出为准。

除这些内置命令外,补全菜单还会列出统一命令注册表里的全部命令——skill、MCP prompt、插件命令,以及你放在 ~/.openprogram/commands/ 或 <项目>/.openprogram/commands/ 下的自定义命令文件(markdown,可带 YAML frontmatter)。执行时命令正文展开后作为消息发送,与 Web composer 完全一致:TUI 和 Web UI 读同一张注册表,命令定义一次两边都有。

同一条用户消息内的工具续调也能压缩已完成的文本结果,无需额外发送 /compact。原始执行记录仍然保留。

Channel 消息的用户或助手正文如果不是字符串,TUI 会忽略该字段,保留后台会话已有的正文,也不会将无效正文加入对话记录。

工具结果摘要仍不足以满足预算时,下一次请求可以用任务摘要替代较早的完整纯文本执行历史。 所有用户消息和最近的助手执行片段保持原样。未完成的工具调用组、多模态输入和带签名的推理 不参与这类请求检查点。检查点只在本次调用中复用,且模型和原始消息前缀必须一致;DAG 仍保存原始记录。

摘要请求按预算分段处理长文本,遇到上下文超限时缩小分段重试。请求次数和时间均有限制; 失败时保留原始历史。受保护内容本身超过窗口时,请求明确失败,不会静默删除用户指令。

Last updated · 2026-10-10