歐盟網站合規
此技能讓AI代理能根據五組歐洲義務來編寫和檢查網站程式碼:無障礙、資料保護與追蹤器、AI 法案、網頁安全以及消費者與資訊法。它會判斷哪些義務與專案相關,讓你從一開始就依此建構,執行自動化檢查,並列出仍需人工驗證的項目。它不會使網站具有法律合規性,也不能取代無障礙稽核、資料保護官或律師:某些標準需要人類判斷,有些問題則屬於法律資格認定。生效日期、現行版本、門檻與罰則僅在一個文件中撰寫:references/regulatory-status.md;請在那裡閱讀它們。
路徑。 此技能中的所有路徑都是相對於包含此 SKILL.md 的資料夾,在指令中寫為 <skill>。請從使用者專案的根目錄執行指令,以便 compliance/ 目錄能在該處被建立:例如 python <skill>/scripts/applicability.py compliance/profile.json。腳本會在其旁邊找到自己的資料。Python 3.8+ 足以執行 .py 腳本;瀏覽器檢查(.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 <網站資料夾或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)。
任務 → 要閱讀的文件
閱讀第一個文件;僅在任務需要時才打開其他文件。
…(技能文件其餘部分為翻譯目標,此處因原始內容截斷而省略)
[truncated for translation]