Skip to Content

权限

没有任何权限的卡片可以在自己的方框里绘制、使用存储、读取自己的设置、设置自己的标题栏, 但不能和任何人交换任何东西。其余一切都是你在清单文件中声明、由用户授予的权限。

授权的工作方式:

  • 按卡片包授予,每次请求都检查。 用户把权限授予你的卡片包(它在所有画布上的每一份副本)。 应用会在每一次调用时检查授权——检查发生在应用里,而不是在 SDK 或你的卡片里。
  • 必需权限在安装时要么全给、要么不装。 安装对话框把它们按高风险在前的顺序列出。拒绝就意味着不安装。
  • 可选权限在运行时申请("optional": true)。在卡片显示在屏幕上时调用 card.permissions.request();应用会用它自己覆盖整个窗口的对话框询问,用户可以拒绝。
  • 有些权限包含其他权限。 fs.write 包含 fs.read;agents.output、agents.prompt 和 terminals.write 包含 agents.read。
  • 用户可以随时撤销任何权限(在 Settings → Custom cards 中)。卡片的页面会以缩小后的授权重新加载, 并收到 permissions.changed 事件;代码要做好防御。
  • 新增权限或网络主机的更新需要用户同意后才会生效。你去掉的权限会被撤销。
  • 箭头就是对数据的同意。 涉及另一张卡片、智能体或终端的权限,只对通过箭头与你的卡片相连的卡片生效—— 方向不限,除非另有说明。

缺少权限时调用会以 PERMISSION_DENIED 失败(error.permission 会给出缺的是哪一项)。

一览

权限风险解锁
agents.read低agents.list/get、状态/轮次/变更事件、智能体的 status 端口
agents.output高读取相连智能体和终端的屏幕与回复
agents.prompt高向相连的 AI 智能体发送提示词
terminals.write高在相连的终端中运行命令
cards.connected中读取和修改相连的笔记、待办清单、任务看板、便签
network + 主机中对列出的主机使用 net.fetch
network.local高对本机上的服务器使用 net.fetch
fs.read高读取工作区文件夹中的文件
fs.write高写入工作区文件夹中的文件(包含 fs.read)
clipboard.write低把文本复制到剪贴板
canvas.spawn低在自己旁边添加最多 4 张卡片
background低没人看时也保持运行
usage.read低工作区的令牌用量和费用

逐项说明

agents.read — low

用户看到: See the agents on this canvas.(查看此画布上的智能体)它们的名称、运行的工具,以及正在工作、等待你还是已完成。

解锁: card.agents.list() / get()、事件 agents.status、agents.turn、agents.changed, 以及内置智能体的 status 输出端口。

范围: 卡片所在工作区的 AI 智能体和终端。其他卡片不是智能体,不会被列出。

agents.output — high

用户看到: Read what agents and terminals connected to it print.(读取与其相连的智能体和终端的输出) 用箭头与它相连的智能体和终端卡片屏幕上的所有内容,包括其中显示的任何机密信息。

解锁: card.agents.readScreen()、card.agents.lastReply()、用 card.agents.onOutput() 获取实时输出, 以及智能体的 reply 和终端的 exit 输出端口。

范围: 仅限用箭头相连的智能体和终端。包含 agents.read。

agents.prompt — high

用户看到: Give instructions to agents connected to it.(向与其相连的智能体下达指令) 向用箭头与它相连的 AI 智能体输入并发送提示词。智能体可以编辑文件和运行命令,所以此卡片可以让它做智能体能做的任何事。

解锁: card.agents.prompt() 和智能体的 prompt 输入端口。

范围: 用箭头相连的 AI 智能体(不含终端)。提示词会经过提示词队列和工作区预算, 每张卡片每分钟最多 6 条(该方法和智能体的 prompt 端口合并计数);每条都会显示在箭头上并记入箭头日志。 发给危险模式下智能体的每条提示词,都要等用户在卡片上确认。包含 agents.read。

terminals.write — high

用户看到: Run commands in terminals connected to it.(在与其相连的终端中运行命令) 在用箭头与它相连的终端卡片中输入并运行命令——任何你自己能运行的命令。

解锁: card.terminals.run() 和 write(),以及终端的 command 输入端口。

范围: 用箭头相连的终端卡片(bash、PowerShell、cmd)。每张卡片每分钟最多 30 条命令,run 和终端的 command 端口合并计数; write 每分钟最多 60 次。每条命令都会显示在箭头上。包含 agents.read。

cards.connected — medium

用户看到: Read and change cards connected to it.(读取和修改与其相连的卡片)用箭头与它相连的笔记、清单、任务看板和便签。

解锁: 笔记、待办清单、任务看板和便签的内置卡片端口——向笔记追加内容、添加任务、读取清单。

范围: 用箭头相连的这四类卡片。

network — medium, needs hosts

用户看到: Connect to api.github.com, *.example.com.(连接到这些主机)只与这些互联网地址收发数据。 卡片能看到的任何内容都可能被发送到那里。

解锁: 通过 https 对这些主机使用 card.net.fetch()。

范围: 严格限于声明的主机模式,且只允许公网地址——解析到私有、回环或云元数据地址的主机会被拒绝,每次重定向也同样检查。 第 1 版中,卡片无法申请“任意主机”。

network.local — high

用户看到: Connect to servers on this computer.(连接到本机上的服务器)访问在 localhost 上监听的程序,例如开发服务器和本地数据库。

解锁: 通过 http 或 https 对 localhost、127.0.0.1 和 ::1 使用 card.net.fetch()。

范围: 除 NeuroSquad 自己的服务器以外的任何端口:它的 MCP 服务器、远程访问服务器、开发者链接服务器、 每张浏览器卡片中 Chrome 的调试端口,以及应用自身的开发服务器。发往本机的请求永远不会填入密钥占位符。

fs.read — high

用户看到: Read files in the workspace folder.(读取工作区文件夹中的文件)此工作区项目文件夹中的任何文件,包括 .env 等文件中保存的机密。

解锁: card.fs.stat/list/read*/watch(),以及 card.workspace 中工作区的绝对路径 path。

范围: 工作区文件夹。路径相对于它;.. 和绝对路径会被拒绝,指向文件夹外部的链接也会被拒绝。 如果工作区文件夹是用户的主文件夹、某个磁盘的根目录,或包含 NeuroSquad 自己的数据文件夹,所有文件调用都会被拒绝。

fs.write — high

用户看到: Change files in the workspace folder.(修改工作区文件夹中的文件)在此工作区的项目文件夹中创建、覆盖文件或将其移入回收站。 此工作区的智能体会读取并运行这些文件,因此此卡片可以让它们执行命令。受保护:.git、智能体设置(.claude、.mcp.json、CLAUDE.md、AGENTS.md 等)以及 NeuroSquad 自身的数据。

解锁: card.fs.writeText/writeBytes/mkdir/trash()。

范围: 同 fs.read,但不包括受保护的路径:任何 .git、智能体和编辑器的设置、CI 工作流。 没有彻底删除——trash 会移入系统回收站。包含 fs.read。

clipboard.write — low

用户看到: Copy to your clipboard.(复制到剪贴板)用卡片中的文本替换剪贴板内容。

解锁: card.copyText(),每秒一次。无法读取剪贴板。

canvas.spawn — low

用户看到: Add cards next to itself.(在旁边添加卡片)在画布上它的旁边放置最多 4 张新卡片。

解锁: card.spawn()——你的卡片的另一份副本,或一篇笔记、待办清单、任务看板、便签,并用箭头与它相连。

范围: 每张卡片 4 张、每分钟 4 张,并受工作区卡片数量上限约束。

background — low

用户看到: Keep running when you are not looking.(在你不看时继续运行)在其工作区隐藏时保持活动。会消耗更多内存和电量。

解锁: 卡片在隐藏时不会被暂停。

范围: 整个应用中最多 8 张这样的卡片在后台运行;超出后,最久未被看到的仍会被暂停。

usage.read — low

用户看到: See token usage and costs.(查看令牌用量和费用)此工作区的智能体用了多少令牌以及花费多少。

解锁: card.usage()。

范围: 卡片自己所在的工作区。

安装对话框中除权限外还列出什么

以下内容由清单推导得出,并不是权限:卡片向相连智能体提供的工具名称,以及它有多少个输入和输出端口。 可选权限出现在 It may ask later for 之下。

只申请你需要的最少权限。每一行高风险都会让谨慎的用户犹豫,而缺少 reason 会让他们只能去猜。 如果某个功能只是偶尔需要一项强权限,就把它设为可选,等用户真正要用这个功能时再申请。