Chrome扩展权限属于产品一部分,AI可能在不被要求时添加权限、依赖或改动数据读写逻辑——提出显式禁止擅自添加权限、要求解释必要性等5条约束。
AI Agent 可以快得惊人地构建 Chrome 扩展。
但在发布了八个扩展之后,我发现最大的风险通常不是代码能否运行。
风险来自于 Agent 在试图提供帮助时悄悄加入的东西:
一个我没有要求的重构
读取或存储用户数据的变更
所有这些都会影响安全性、隐私、维护以及 Chrome 网上应用店的审核。
所以在让 AI Agent 实现任何功能之前,我会给它一套小小的规则。
以下是我最常用的五条。
Chrome 扩展权限是产品的一部分。
"permissions": [
"storage",
"tabs"
]
或者扩展 host_permissions,这不只是一个实现细节。
它改变了扩展被允许访问的内容,也可能会改变用户在安装时看到的内容,或者我在审核时需要解释的内容。
所以我明确告诉 Agent:
不要擅自添加或扩大权限,必须先问我。
如果确实需要新权限,我希望 Agent 停下来并解释:
默认值应该是最小权限,而不是「为了让实现更简单」。
如果 Agent 引入了以下内容,一个小型本地扩展很容易变得完全不同:
有时候这些是有用的。
但它们不应该意外出现。
对于我的很多扩展,我有意保持设计简单:
Web page
↓
Chrome extension
↓
chrome.storage.local
没有外部传输。
这使得实现和隐私说明都更容易理解。
所以我的第二条规则是:
不要添加外部网络请求、分析、数据遥测或 CDN 依赖。
如果确实需要网络访问,我希望那是一个设计决策,而不是先变成代码。
当我开始将编码 Agent 用于更大的变更时,这一点变得更加重要。
比如添加一个将选中文本存储到 chrome.storage.local 的功能。
Agent 可能会注意到附近的代码,并决定也改进它们。
结果可能可以工作。
但现在一个小任务改变了五个文件。
这使得审核更难。
同时变得难以回答一个简单的问题:
这次请求到底改变了什么?
不要修改无关的文件、功能或架构。
对于小型 Chrome 扩展,我更喜欢易于理解和易于回退的变更。
我宁愿做五次小变更,也不愿做一次涉及整个项目的巧妙变更。
AI Agent 非常擅长查找包。
但这不意味着我想要它们。
如果一个 20 行的工具函数能解决问题,添加另一个 npm 依赖可能不值得。
每个依赖都会产生更多需要理解的东西:
不要添加新的依赖,除非它们是必要的。如果你认为需要一个,请先解释为什么,再添加。
这对于浏览器扩展特别有用,因为许多功能可以用浏览器 API 和普通 JavaScript 实现。
小型工具保持小巧是有益的。
这是最重要的一条规则。
如果实现改变了:
我不希望 Agent 默默决定这些。
如果你的变更影响了数据的读取、存储或传输,请在实现之前停下来并解释这个变更。
这将数据流变成一个明确的设计决策。
Selected text
↓
Content script
↓
chrome.storage.local
↓
Extension UI
如果 Agent 想把它改成:
Selected text
↓
Content script
↓
External API
↓
Extension UI
那就不是一个小的实现变更。
这是不同的产品架构。
我希望在代码变更之前就知道。
以下是我给编码 Agent 的简短版本:
当修改此 Chrome 扩展时:
- 不要添加或扩大权限,必须先问我。
- 不要添加外部网络请求、分析、数据遥测或 CDN 依赖。
- 不要修改无关的文件或功能。
- 不要添加新的依赖,除非它们是必要的。
- 如果你的变更影响了数据的读取、存储或传输,请在实现之前停下来并解释这个变更。
- 保持实现与 Manifest V3 兼容。
我通常在这段文字下面加上实际任务。
任务:
添加将选中文本保存到 chrome.storage.local 的功能。
不要更改列表 UI 或重新排序行为。
重要的一部分是 Agent 收到的是:
它不被允许自行决定的边界。
这些规则减少了意外。
但它们不能替代审核。
发布之前,我仍然会检查:
[ ] 所有权限都是必要的吗?
[ ] 是否有任何 host 权限变得更宽了?
[ ] 是否有意外的网络请求?
[ ] Agent 是否添加了依赖?
[ ] 我是否确切知道读取了什么数据?
[ ] 我是否确切知道存储了什么数据?
[ ] 是否有数据离开了浏览器?
[ ] Chrome 网上应用店的声明与实现是否一致?
我还通过以下方式加载扩展:
chrome://extensions
并在提交之前在真实页面上使用它。
一个扩展可以通过测试,但仍然感觉令人讨厌、请求过多访问权限,或行为与商店描述不符。
AI 确实让我的实现速度更快了。
但在发布了八个 Chrome 扩展之后,我花更少时间问:
Agent 能构建这个吗?
花更多时间问:
Agent 不应该被允许做出哪些决策?
这个区别已经成为我工作流程中最有用的部分之一。
AI Agent 擅长完成任务。
我的工作是定义这些任务周围的边界。
对于 Chrome 扩展,这些边界尤其重要,因为权限、网络访问、依赖和数据处理不仅影响代码,还影响用户被要求信任的内容。
我正在将这些实验的构建和文档作为 Legacy Tools 的一部分进行,Legacy Tools 是一个小型浏览器工具集合。
我使用的完整开发工作流程——从选择想法到 Chrome 网上应用店审核——也可以在 Legacy Tools 网站上找到。