安全执行本地命令
在桌面应用中,助理可以在聊天的工作目录里执行命令和测试。聊天中如何使用,请参见本地文件访问。本页介绍如何设置哪些情况下可免确认执行,以及命令如何在受保护环境中运行。
打开命令设置
在聊天中打开 命令 面板,选择 此文件夹的命令设置。设置按文件夹生效。
助理何时可以执行命令?
选择以下三种模式之一:
- 总是询问:你需要批准每个命令。
- 受信任命令自动执行:你保存过的命令会直接启动,不再询问。其他命令仍会请求权限。
- 在沙箱中自动执行:所有命令都会直接启动,但在受保护的环境中运行。
在任何模式下,还适用以下规则:
- 无害命令 会直接启动,无需卡片:
mkdir、ls、cat、head、tail、wc、grep、find(不带-exec或-delete)、touch、pwd、tree以及版本检查(node、npm、npx、python、pip和aischool-python的--version、-v或-V)。它们不会做比内置文件工具无需询问时更多的事情。它们在不联网的沙箱中运行,并且只允许使用工作目录内的路径,即使经过链接后也是如此(不允许绝对路径、~或..)。如果链接指向目录外,则会显示卡片。这需要沙箱(macOS 和 Linux)以及本地命令,但不需要管理员启用的 允许自动执行。在 命令 面板中会显示为 自动(无害命令)。像mkdir -p src/{components,utils}这样带有花括号列表的命令也会直接启动:应用会将其拆分为多个路径并逐一检查。 - 每张卡片都会显示精确的命令,以及在在线操作时显示精确地址。下方会以较小字号显示助理的说明。
- 如果沙箱可用且管理员允许自动执行,那么对于在沙箱中运行的命令,卡片上还会提供 今后在此文件夹中始终在沙箱中自动执行 按钮。它会将该文件夹设为 在沙箱中自动执行,这样后续命令就不会再显示卡片。需要网络的命令仍会再询问一次,除非允许安装包。
- 第一次在某个文件夹中运行、且不需要网络的沙箱命令,会显示一次性按钮 信任此项目。它会执行该命令,将该文件夹设为 在沙箱中自动执行,并开启 允许包安装时不询问。之后像
npm test、npm run build和node --test这样的测试和构建会在不联网的沙箱中直接启动。其他仍需要网络的命令,或在沙箱外运行的命令,仍会询问。点击 执行 或 拒绝 后,此文件夹不会再次出现该提示;模式可在命令设置中更改。如果自动执行已关闭,则每张卡片都会说明是你的管理员或这台电脑的管理策略在控制这一行为。
保存受信任的命令
对某个命令选择 始终允许在此文件夹中,然后选择 仅此命令 或 所有以此开头的命令。已保存的命令今后会直接执行,不再询问。带有特殊字符(如 ; | > $)的命令始终需要批准。
保存的规则会显示在命令设置中的 此文件夹中始终允许 下方。你也可以在那里将其删除。
沙箱与网络
- 使用沙箱:命令只能写入此文件夹。此选项默认在 macOS 和 Linux 上开启。
- 允许网络:决定命令是否可以访问互联网。此选项默认关闭。没有沙箱时,命令始终可以访问网络。
每张命令卡片都会显示沙箱和网络是否开启。
如果 允许网络 关闭,而助理想要下载内容,例如使用 npm install,命令卡片会询问你是否要让该命令带网络执行。也就是说,你不必为整个文件夹开启网络。
Windows 上尚不支持沙箱。
安装包
应用自带 Node.js 和 npm。因此,即使你的电脑没有安装 Node.js,node、npm 和 npx 也可以使用。如果你已经安装了自己的 Node.js,应用会使用那个版本。例外:如果项目本身启动 Electron(electron .),则需要你自己安装的 Node.js。
允许包安装时不询问
在 此文件夹的命令设置 中打开 允许包安装时不询问 开关。这样,按名称安装的包会直接启动,不再显示卡片:npm install <名称>,以及来自 package.json 的 npm install,pnpm、yarn 或 bun 的 install 或 add,还有 pip install <名称>(也可通过 uv)。它们始终在带网络的沙箱中运行。其他命令则遵循你为该文件夹选择的模式。
以下安装仍会显示卡片:
- 项目脚手架工具,例如
npm create vite@latest和npx create-…,因为它们会运行自己的代码; pip install .、pip install -r requirements.txt、来自其他仓库的安装(--registry、-i、--index-url),以及来自 git 地址、URL 或路径的包。
该开关仅在有沙箱(macOS 和 Linux)且管理员允许自动执行时可用。否则无法开启。
这样安装的包绝不会运行自己的安装脚本(npm 会带 --ignore-scripts 运行)。Python 包只会以现成的 wheel 形式安装。
本地服务器与内置浏览器
助理也可以启动一个持续运行的开发服务器,例如为一个小型 React + Vite 项目运行 npm run dev。这适用与其他命令相同的规则:你批准精确的命令,或者它通过已保存规则启动,或在沙箱中自动启动。卡片上不会显示最长运行时间,而是显示“会作为本地服务器持续运行,直到你停止它”。
助理回复后,服务器会继续运行。在 命令 面板中,卡片会显示状态 服务器正在运行,并带有 在浏览器中打开 和 停止 按钮。最多可同时运行 4 个服务器。服务器会在你停止它们或关闭应用时停止。
在不联网的沙箱中,服务器只能在本机监听(localhost)。关于助理如何安装包,请参见安装包。
显示一个简单网页
对于普通网页(包含 CSS 和 JavaScript 的 index.html,且没有构建步骤),不需要命令。此时助理会使用应用内置的网页服务器:
- 该文件夹只能在本机访问,地址为
http://127.0.0.1,端口随机分配。 - 隐藏文件,如
.git和.env,永远不会显示。 - 当某个文件发生变化时,页面会自动重新加载。
这里不会出现审批卡片。服务器会显示在 命令 面板中,带有 在浏览器中打开 和 停止,并计入最多 4 个服务器的限制。
你可以在内置浏览器中查看结果:点击顶部栏右侧的 浏览器 按钮(地球图标)。面板会在聊天旁边打开,包含后退、前进、重新加载(加载时为停止)、地址栏,以及 在默认浏览器中打开。
- 助理会自动打开浏览器来显示本地服务器的结果。这只能用于本地地址,例如
http://localhost:5173。 - 如果你在回复中点击 localhost 链接,它会在内置浏览器中打开。其他链接会在你的默认浏览器中打开。
- 你也可以手动输入任意网页地址。
- 浏览器有自己独立的会话:你在其中未登录 AI-Public,网站不会获得摄像头或麦克风等权限,也无法下载。
- 只要应用的菜单或对话框处于打开状态,页面就会暂时隐藏。
示例:
在此文件夹中创建一个带计数器的小型 React 应用,使用 Vite。安装依赖,启动开发服务器,并在浏览器中显示结果。
让助理查看
如果你要求助理查看内置浏览器中的页面,它会读取该页面的地址、标题、可见文本、截图和最新错误信息,并将它们发送给 AI 模型。
- 助理会在不询问的情况下查看本机上的页面(
localhost或127.0.0.1)。 - 对于任何其他网站,例如你已登录的页面,助理会先显示一张卡片:“助理想查看 onedrive.live.com。”点击 允许查看 或 拒绝。每次都会重新询问。
- 如果页面在你允许后跳转到另一个网站,助理不会读取任何内容。
- 只有在本机页面上,助理才会自己点击和输入,以测试它所创建的内容。在其他网站上,它不会点击、输入或导航。它不会获取你的 cookie 或密码。
- 在离线模式下,助理只会查看本机页面。
版本与 GitHub
助理内置了 git。因此你无需安装 git,即使在 Windows 上也是如此。助理可以保存版本、查看变更、创建分支,并将项目发布到线上。
- 此文件夹中的操作,例如保存一个版本,会直接开始,不会询问。看起来像机密的文件(例如
.env文件、代码中的密钥或令牌,包括以AIza开头的 Google API 密钥)绝不会包含在版本中。若有内容被跳过,助理会告知你。 - 在线操作(下载项目、获取最新版本、发布上线,以及创建 GitHub 仓库)会先显示一张卡片,包含精确地址,以及 内置于应用中 和 已开启网络 标签。如果地址不是 github.com,或要创建一个新的公开仓库,卡片会发出警告。发布上线时,卡片还会显示将发送哪些文件。请选择 执行 或 拒绝。
- 连接 github.com 之外的仓库也需要先获得批准。
关于如何连接 GitHub 并发布项目,请参见用 Vibe 编码。
在离线模式下,命令始终在不联网的沙箱中运行。需要网络的包安装,以及内置 git 的在线操作(下载、获取、发布上线和 GitHub)都无法使用。保存版本和显示简单网页仍然可用。
管理员设置
管理员可以为所有环境成员关闭本地命令或自动执行。他们可在管理环境的 功能(环境级别)里,在 桌面应用 卡片中进行设置:
- 允许本地命令:如果关闭,助理将无法执行命令。内置 git 的在线操作也将无法使用。保存版本和分支仍可正常工作:它们只会修改文件夹中的文件,就像文件工具一样。
- 允许自动执行:如果关闭,每个命令都需要批准,而且你无法开启 允许包安装时不询问。
- 允许应用内的 Python 处理 Office 文件:用于模板、图表和分析。此 Python 无需互联网,只会写入工作目录,且不能启动其他程序。若未设置,则遵循 允许本地命令。在没有沙箱(Windows)的情况下,只有在本地命令已开启时才可用,并且每次都需要批准。