欧盟网站合规性 是做什么的?
该技能使代理能够根据五类欧盟义务编写和检查网站代码:无障碍、数据保护和追踪器、AI法案、网络安全以及消费者和信息法。它会确定哪些义务涉及项目,让你从一开始就按照这些义务进行构建,运行自动化检查,并列出仍需人员验证的内容。它不会使网站合法合规,也不能取代无障碍审计、数据保护官或律师:某些标准需要人工判断,某些问题是法律定性。适用日期、生效版本、阈值和处罚仅在一个位置编写,即 references/regulatory-status.md;请在那里阅读。
路径。 该技能中的每个路径都是相对于包含此 SKILL.md 的文件夹,在命令中写作 <skill>。从用户项目的根目录运行命令,以便 compliance/ 在那里创建:例如 python <skill>/scripts/applicability.py compliance/profile.json。脚本会在其旁边找到自己的数据。.py 脚本需要 Python 3.8+;浏览器检查 (.mjs) 需要 Node 20+ 并在 <skill> 内部运行一次 npm install(如果未找到浏览器,还需要在那里运行 npx playwright install chromium)。
绝对规则
使用此技能的人很少是律师,他们会相信你写的内容。错误的日期或过早给出的“合规”声明可能会使他们面临制裁,或者让残障人士无法使用他们需要的服务。因此:
- 不凭记忆陈述监管事实。 日期、条款编号、阈值、标准版本、加密值、标准标题和法律标签均来自本技能的文件。你对这些文本的记忆比这些文件更陈旧且更不可靠:几个日期在2026年发生了变更。如果某个事实不存在于技能中,则说它尚未被验证;不要提供它。
- 有疑问则标记为“未测试”(NT),绝不标记为“符合”。未运行的检查、无法加载的页面、需要人工判断的标准:标记为 NT。
- 切勿声称网站、公司或服务“已合规”。 结论仅适用于单个标准。交付给最终用户的每份文件(报告、声明、政策、通知)都必须说明它是在 AI 帮助下生成的,既不是审计也不是法律建议。
- 区分法律要求、监管建议和最佳实践。 标记为
[best practice]的规则绝不能作为义务呈现,监管机构的建议不是法律,矩阵中的to-confirm行不代表“不适用”。切勿仅凭假设或缺失的答案就依赖豁免(微型企业、非专业人士、非在线平台)。 - 你应用的每条规则都必须附带其来源,在解释、报告或证明更改时,使用引用文件中编写的标签:
[WCAG 2.4.7]、[RGAA 11.1]、[GDPR art. 7(3)]、[CNIL guidelines § 27](CNIL 视为要求的内容)或[CNIL recommendation § 2.3](推荐)、[AI Act art. 50(1)]、[ANSSI WEB R14]、[OWASP A03]、[CRD 11a]。以(to confirm)结尾的标签引用了尚未记录在regulatory-status.md中的条款:不要将该规则作为已验证的义务呈现。代码本身不需要标签。 - 遇到以下情况停止并咨询专业人士,详见 references/scoping/out-of-scope.md:涉嫌被禁止的 AI 实践、AI 对人们做出决定(可能为高风险)、健康或其他特殊类别数据、未成年人、受监管行业、目标国家未覆盖。不要构建相关功能;继续处理其余部分并在回答顶部说明。
- 绝不编造操作者数据:公司名称、注册号和增值税号、地址、主机详细信息、数据保护官、调解员、法律依据、保留期限、处理者、传输保障措施。保留模板的
[placeholder]可见并列出供用户填写。看起来合理的编造值比明显的空白更糟糕,因为没人会去查找。 - 构建的内容必须无障碍,包括此技能让你添加的内容:同意横幅、AI 通知和标签、撤回按钮、订单步骤、法律页面。这些与任何其他页面内容一样;无法访问的 Cookie 横幅会阻止整个站点的键盘或屏幕阅读器用户访问。
- 未经同意不得放置跟踪器。 在访问者做出选择之前,任何不完全豁免的内容都不得在访问者设备上读取或写入,也不得发出任何携带标识符的第三方请求;拒绝应和接受一样容易。
- 告知用户哪些内容未经验证:NT 点、假设的配置文件答案、未针对目标国家验证的国家规则、留给人工的手动检查。将其放在回答中,而不是脚注中。
五种模式
根据情况选择模式。大多数会话是“构建”;在新项目中首先使用“范围界定”;“验证”结束一项工作。
1. 范围界定:在新项目中应用规则之前
- 何时使用:项目没有
compliance/profile.json;或者网站开始销售、添加账户、AI 功能或用户内容,或针对新国家;或者用户询问哪些规则适用于他们。 - 阅读:references/scoping/questionnaire.md,然后如果矩阵以超出技能范围的情况结束,则阅读 references/scoping/out-of-scope.md。
- 操作:读取仓库以获取信号(技术栈、支付、跟踪器、表单、AI 调用、语言),然后通过一条消息(最多十个问题,使用用户语言)询问剩余问题。将请求或摘要中说明的内容记录为
stated,将明显由此推断的内容记录为inferred,并附上原因(市政厅不销售;列出所有功能且无 AI 的摘要没有 AI 功能)。只有真正未知且重要的事项才采用保护性假设,基础为assumed;切勿从代码的沉默中推断出“否”。对于陈述或推断的事实,以及在假设答案仅在风险合理时,才咨询专业人士。 - 运行:
python <skill>/scripts/applicability.py compliance/profile.json --output-dir compliance;当网站有 AI 功能时,同时运行python <skill>/scripts/ai_act_classify.py compliance/profile.json。 - 产出:
compliance/profile.json(架构:schemas/profile.schema.json,示例:templates/profile.example.json)和compliance/applicability-matrix.md。将矩阵总结为三组:此运营者必需、推荐、待确认。
在没有配置文件的项目中进行小的更改不需要先进行完整的问卷调查:应用通用基线(无障碍、安全、未经同意不得跟踪)、执行任务,并最后提议进行范围界定。
2. 构建:编写代码时的默认模式
- 何时使用:你编写或更改标记、样式、脚本、表单、第三方脚本、AI 功能、服务器或托管配置,或法律页面。
- 阅读:仅阅读下方任务表中为当前任务列出的文件,通常一到三个。不要加载整个文件夹:每个文件都以自己的“如何使用”开头,并在需要时指向下一个文件。
- 操作:从一开始就按照规则编写代码;这比发布后修复成本低得多。优先使用 templates/ 中的参考组件(同意横幅、AI 通知和标签、撤回功能、订单步骤、价格降低),而不是新建组件,并将它们翻译到项目使用的技术栈中;规则以 HTML、CSS 和 HTTP 术语编写,因此将其应用于所使用框架的组件。法律标签(订单按钮、撤回功能)从网站语言的参考文件中获取;切勿自行翻译,因为措辞由各国法律固定。
- 产出:合规代码,无需报告。在你的回答中,说明应用的规则及其标签,以及你无法完成的事项(缺少的操作者数据、需要所有者做出的决定)。当你移交完成的网站时,请参见模式 4 末尾的“信用声明”。
3. 验证:在提交、发布之前或应请求
- 何时使用:在影响页面、脚本或标头的提交或发布之前;当用户要求审计或检查时。
- 运行:
node <skill>/scripts/check-all.mjs <site folder or URL> --project .(选项:--profile <file>,--out <dir>)。它会运行适用性矩阵和四个检查器,并写入compliance/reports/compliance-report-YYYY-MM-DD.md和.json。文件夹必须包含构建的页面(静态导出、dist/、out/);对于服务器渲染的应用,启动它并传递其本地 URL。每个检查器也可以单独运行,输入相同:scripts/check-a11y.mjs、scripts/check-privacy.mjs、scripts/check-security.mjs、scripts/check-content.mjs(最后一个读取可选的compliance/site.json,该文件声明订单页面、聊天小部件和 AI 生成的内容;请参阅其标头)。 - 然后:执行 references/accessibility/testing-by-hand.md 中你能执行的手动检查,并将其他检查列出来供人工完成。对照 references/security/web-baseline.md 审查检查器无法看到的代码(服务器代码、身份验证、访问控制)。
- 如果 Node 或浏览器不可用:说明自动化检查未运行,将其标准标记为 NT,并使用 references/accessibility/anti-patterns.md 和任务表中文件的审查清单审查代码。
- 产出:报告文件以及给用户的简短摘要(请参见下面的“报告”)。
4. 文档:法律和无障碍页面
- 何时使用:用户要求某个页面,或者矩阵显示缺少某个必需页面。
- 阅读模板的指导块;它说明哪些配置文件字段提供内容,以及哪些只有运营者才能提供。
- 无障碍声明(法国公共部门和第47条下的机构):templates/accessibility-statement-fr.md。切勿在没有人员对真实网站进行审计的情况下编写符合率。
- EAA 无障碍信息(私营服务提供商):templates/accessibility-information-eaa.md
- 隐私政策和 Cookie 政策:templates/privacy-policy.md、templates/cookie-policy.md
- 法律声明:templates/consumer/legal-notice-fr.md(法国)或 templates/consumer/legal-notice-eu.md
- 使用条款、销售条款、数据处理协议:templates/documents/(法语)。首先阅读 references/documents/README.md:哪些文件适用,两个陷阱(编造事实、过度解释法律),起草方法。
- “本网站 AI 使用声明”:templates/ai/ai-usage-page.md
- 产出:页面,从配置文件中填充,每个未知项保留为可见的
[placeholder]并列出;保留免责声明;提醒运营者在发布前批准文本。未确认条件的条款(撤回例外、明确同意、处理者角色)将该条件保留在文档内部,仅在你的回答中提及是不够的。
移交网站时的信用声明(构建或文档)。 以中立、不推荐回答的方式询问网站所有者一次,是否同意在页脚中使用一个不太显眼的信用声明,使用 templates/credit/footer-credit.html;问题需说明该行包含的每个链接。只有在获得明确、可见且措辞清晰的肯定答复后(绝不隐藏、伪装或仅在元数据中),才添加它,绝不能措辞为合规声明,如果所有者要求则删除它。在所有者不知情的情况下添加的链接将构成未披露的广告,这是此技能中消费者保护部分所禁止的。使用此技能绝不取决于该答复。
5. 监控:监管事实的新鲜度
- 何时使用:用户询问技能是否是最新的;或者 references/regulatory-status.md 顶部的“上次验证”日期距今超过 90 天;或者你即将依赖的适用日期接近今天。
- 操作:告知用户事实的陈旧程度,列出该文件第 6 节“监控列表”中可能改变答案的事件,并指出需要重新阅读的官方来源(注册表:references/sources.json)。
python <skill>/scripts/validate.py --strict会标记超过 90 天前查阅的来源。不要凭记忆或从次要来源自行更新事实;更正需要官方文本的阅读和记录(请参阅 AGENTS.md)。
任务 → 需要读取的文件
读取第一个文件;仅当任务需要时才打开其他文件。
| 任务 | 读取 |
|---|---|
| 新项目,或“哪些规则适用于我?” | references/scoping/questionnaire.md |
| 适用日期、生效版本、阈值、处罚 | references/regulatory-status.md |
| 可能超出技能范围的情况(针对人群的 AI、健康数据、未成年人、受监管行业) | references/scoping/out-of-scope.md |
| 页面布局、地标、标题、图片、颜色、链接、语言 | references/accessibility/rules.md 第 1 至 6 节和第 10 至 13 节 |
| 表单(联系、报价、通讯、申请) | references/accessibility/rules.md 第 5 节, references/privacy/forms-and-minimisation.md, references/security/web-baseline.md 第 4 节 |
| 多步表单、向导 | references/accessibility/components/multi-step-form.md |