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