Skip to content

AI 终端执行与授权 ​

description: AI 向终端写入命令的两条路径(代码块按钮与工具提案)、授权弹窗、权限档、高危检测与输出回传配置

created: 2026-10-15 11:27:07

updated: 2026-10-15 15:30:00

author: sjzhao

1. 两条写入路径 ​

AI 向终端写入命令有两条独立路径,汇入同一 PTY 写入原语,无静默写入:

路径触发者授权
代码块按钮用户点击「插入终端 / 直接执行」按钮点击本身即意图确认;高危命令按确认档追加弹窗
工具提案模型调用 propose_command / edit_file / write_file 等经授权弹窗裁决,或按权限档自动放行

两条路径均只在工作台 scope、当前会话在线时可用。

2. 代码块按钮 ​

助手回复的代码块头部提供「插入终端」与「直接执行」(仅工作台、非流式输出期间可见):

按钮行为
插入终端把代码原文写入当前活动会话 PTY,不回车,可先编辑;多行文本用 bracketed paste 包装,整块进编辑缓冲区等用户回车
直接执行写入 PTY 并回车执行

规则:

  • 目标会话 = 点击时的当前活动会话(不是消息产生时的会话),避免向「当前看不见的终端」写入;
  • 无可用会话时提示「无可用会话,无法写入终端」;会话已断开提示「会话已断开,命令未执行」;
  • 插入成功提示「已插入终端」。

2.1 多行命令 ​

「直接执行」多行命令受设置「允许多行命令直接执行」约束(aiMultilineExec,默认关闭):

  • 关闭时(默认)多行命令「直接执行」被 100% 拦截,提示「多行命令直接执行未开启,可在设置 → AI → 终端执行中开启」;「插入终端」不受影响;
  • 开启后多行命令整块提交执行。

2.2 直接执行确认档 ​

设置「直接执行确认」(aiExecConfirmMode)控制弹窗频率:

取值行为
每次确认(always)每次点击都弹确认窗(完整展示命令原文,Esc 取消 / Enter 确认)
高危命令确认(risky,默认)仅在命中高危规则时弹窗并附橙色警示(「检测到高危命令(规则名)」),其余直接执行
不确认(never)点击即执行(按钮点击已是意图确认,命令原文就在眼前)

高危命令确认弹窗:橙色警示条标注命中的规则名,下方为命令原文,底部「取消(Esc)/ 执行(↵)」

2.3 高危命令检测 ​

两层规则,命中任一层即视为高危:

内置规则集(随版本演进维护,不可编辑,无关闭开关):

规则名判定匹配内容
删除文件命令词命令为 rm 即命中(rm -i、rm -rf、rm --force 等任意形式)
磁盘格式化/写入正则mkfs.、dd ... of=
系统关机/重启正则shutdown、reboot、poweroff、halt、init 0/6
递归放权正则chmod -R 777
清空系统文件正则重定向覆盖 /etc/、/dev/sd、/dev/nvme、/dev/vd
管道执行远程脚本正则curl | sh、wget | bash 等
强制覆盖远端历史正则git push --force

「命令词」判定会先剥离引号内文本(printf "rm" 这类字符串不误报)、按 ;/&/| 切分命令段,再跳过变量赋值与 sudo/env/nohup 等前缀词取命令名;rmdir 等仅前缀相同的命令不受影响。

已知边界:命令词不是 rm 的间接执行不命中——git rm、docker rm、sh -c "rm -rf /"、find -exec rm、xargs rm。

自定义高危关键词(设置 → AI 助手 → 终端执行 → 「自定义高危关键词」):一行一条,命令包含即命中;纯子串匹配(大小写敏感),支持 # 注释行。用于补充你关心的命令片段(如 docker system prune -a)。

多行命令逐行匹配,任一行命中即整段高危。该检测定位是把确认精力集中在大概率危险操作上,不构成安全边界。

3. 模型工具与授权 ​

3.1 工具清单 ​

工具类型作用执行方式
read_file只读读取远端文件内容(单次最多 8KB,超出截断)自动执行,无需授权
list_directory只读列出目录条目(含类型统计)自动执行,无需授权
get_system_info只读系统信息快照(OS、内核、CPU、内存、磁盘、运行时间)自动执行,无需授权
propose_command写提案一条 shell 命令,写入终端 PTY 执行授权路径
edit_file写用 new_text 精确替换 old_text(执行前自动备份,单次 ≤ 64KB)授权路径
write_file写全量写入/新建文件(已存在则先备份,单次 ≤ 64KB)授权路径
sftp_upload_file写本机文件上传到远端(≤ 64MB)授权路径
sftp_download_file写远端文件下载到本机(≤ 64MB)授权路径

只读工具无条件自动执行(不经授权弹窗),因此可快速完成探索类动作。

3.2 授权弹窗 ​

写操作提案在提案卡片下方弹出授权弹窗,采用文档流布局固定在消息区与输入框之间(不遮挡上方消息,宽度与输入框一致);内容超出时弹窗内滚动。

授权弹窗:展示待执行的命令/文件内容,选项为「仅本次执行 / 本会话允许此命令 / 拒绝执行」

选项快捷键可用范围
仅本次执行Enter / 1全部写操作
本会话允许此命令(后续相同命令自动执行)2仅 propose_command
拒绝执行Esc /(数字键随项数)全部写操作
  • 会话豁免表按会话级、命令精确匹配维护,仅内存态,应用重启即失效;
  • edit_file / write_file 无会话级豁免,每次均需确认;
  • 弹窗出现时活动规划面板让位隐藏,裁决完自动恢复。

3.3 提案卡片 ​

每条提案以卡片展示状态:

提案卡片:头部为工具标签与状态标签,主体按工具类型展示命令原文 / old → new 对比 / 内容预览

状态文案
等待授权等待授权
已执行已执行 / 已执行 · 会话允许
执行失败执行失败
已拒绝已拒绝
未裁决即失效已失效

卡片内容随工具而异:

工具卡片展示
propose_command命令原文
edit_fileold → new 文本对比
write_file写入内容预览
sftp_upload_file / sftp_download_file传输进度(在提案卡片内,不进 Dock 传输队列面板)

文件编辑类工具写入前自动备份,路径命中系统关键文件黑名单时拒绝写入。

4. 权限档(代理执行权限) ​

输入区权限档下拉(盾牌图标)控制模型写操作的自动放行程度。会话级内存态,不持久化,切换 scope 自动回落默认档。

档位图标语义行为
手动审批(默认)盾(全防护)所有写操作执行前都需人工确认
低危自动盾 + 勾低危写操作自动执行,高危仍需确认
完全访问盾 + 斜杠全部写操作自动执行,不再弹窗

输入区权限档下拉:三档并列展示,每档含图标语义与行为说明

「低危/高危」判定复用 §2.3 的高危规则集。只读工具在任何档位下都自动执行。

该档位是降低操作摩擦的便利开关,不是安全边界:切回默认档可随时收回自动执行。

5. 执行结果回传 ​

设置「执行结果自动回传」(aiAutoReturnOutput,默认关闭):

状态行为
关闭(默认)终端输出零字节自动发送给模型,保持隐私边界;模型仅凭提案结果知道「执行完了」
开启提案命令执行完成时,捕获终端输出作为 tool 结果回传,模型可据此自主推进多步执行

开启后的捕获规则:订阅终端输出帧,按提示符正则(bash/sh/zsh/fish 常见 PS1)判定命令结束,超时 30 秒则截断并附加超时提示;结果中截断命令回显与提示符行,只保留真实输出。

无论开关状态,终端内容都不会以其它自动形式离开本机;用户仍可随时通过终端右键 → 「添加到 AI 对话」显式发送选中内容。

6. 文件传输工具 ​

sftp_upload_file / sftp_download_file 让 AI 直接完成小文件传输:

约束取值
体积上限64MB(后端在打开目标文件写入前完成校验,超限直接返回明确错误,不产生残留文件)
超限提示明确提示超限并引导用户改用 SFTP 面板手动传输
下载目标路径命中敏感目录黑名单时拒绝;建议填 ~/Downloads/ 下的路径
上传来源路径local_path 必须是本机已存在的文件

模型侧工具描述已明确禁止用 scp / rsync / sftp 或 cat | ssh 管道类命令传输文件,超 64MB 时引导走 SFTP 面板。文件传输进度显示在提案卡片内,不进入 Dock 传输队列面板。

7. 轮次上限与中止 ​

  • 单次用户输入允许的任务循环轮次上限为 6 轮(约 3~4 次只读探索 + 2~3 次命令执行),达上限自动终止续跑;
  • 点消息区的停止生成立即切断模型循环与 SSE 流,但不回滚已执行的终端命令与文件修改,已裁决的提案状态保留;
  • 切换会话时取消该会话在飞的只读工具执行任务;
  • 会话断开时清理 AI 执行产生的 /tmp/.ri-* 临时脚本残留。

8. 相关设置一览 ​

设置项位置默认值说明
允许多行命令直接执行AI 助手 → 终端执行关闭关闭时多行命令仅可插入终端人工编辑
执行结果自动回传AI 助手 → 终端执行关闭开启后捕获输出回传模型,实现自主多步执行
直接执行确认AI 助手 → 终端执行高危命令确认每次确认 / 高危命令确认 / 不确认
自定义高危关键词AI 助手 → 终端执行空每行一条,子串匹配,支持 # 注释

9. 相关文档 ​