Các phạm vi cấu hình
Có ba phạm vi cấu hình, được đánh giá theo thứ tự ưu tiên:| Phạm vi | Đường dẫn tệp | Mục đích |
|---|---|---|
| project | .failproofai/policies-config.json | Cài đặt cho mỗi kho, được cam kết vào kiểm soát phiên bản |
| local | .failproofai/policies-config.local.json | Ghi đè cục bộ cho mỗi kho, được gitignore |
| global | ~/.failproofai/policies-config.json | Giá trị mặc định cấp người dùng trên tất cả các dự án |
Quy tắc hợp nhất
enabledPolicies - hợp của cả ba phạm vi. Một chính sách được bật ở bất kỳ cấp nào đều hoạt động.
policyParams - phạm vi đầu tiên xác định tham số cho một chính sách nhất định sẽ chiến thắng hoàn toàn. Không có hợp nhất sâu của các giá trị trong tham số của chính sách.
customPoliciesPath - phạm vi đầu tiên xác định nó sẽ chiến thắng.
llm - phạm vi đầu tiên xác định nó sẽ chiến thắng.
Định dạng tệp cấu hình
Tham chiếu trường
enabledPolicies
Kiểu: string[]
Danh sách tên chính sách cần bật. Tên phải khớp chính xác với các định danh chính sách được hiển thị bởi failproofai policies. Xem Built-in Policies để có danh sách đầy đủ.
Các chính sách không có trong enabledPolicies không hoạt động, ngay cả khi chúng có các mục trong policyParams.
policyParams
Kiểu: Record<string, Record<string, unknown>>
Ghi đè tham số cho từng chính sách. Khóa bên ngoài là tên chính sách; các khóa bên trong là dành riêng cho từng chính sách. Mỗi chính sách ghi lại các tham số có sẵn của nó trong Built-in Policies.
Nếu một chính sách có các tham số nhưng bạn không chỉ định chúng, các giá trị mặc định tích hợp của chính sách sẽ được sử dụng. Người dùng không cấu hình policyParams hoàn toàn sẽ nhận được hành vi giống hệt như các phiên bản trước.
Các khóa không xác định bên trong khối tham số của chính sách bị bỏ qua im lặng khi hook kích hoạt nhưng được đánh dấu là cảnh báo khi bạn chạy failproofai policies.
hint (cross-cutting)
Kiểu: string (tùy chọn)
Một thông điệp được nối thêm vào lý do khi một chính sách trả về deny hoặc instruct. Sử dụng nó để cung cấp hướng dẫn có thể hành động cho Claude mà không cần sửa đổi chính sách.
Hoạt động với bất kỳ loại chính sách nào - tích hợp sẵn, tùy chỉnh (custom/), quy ước dự án (.failproofai-project/), hoặc quy ước người dùng (.failproofai-user/).
block-force-push từ chối, Claude sẽ thấy: “Force-pushing bị chặn. Hãy thử tạo một nhánh mới.”
Các giá trị không phải chuỗi và chuỗi rỗng bị bỏ qua im lặng. Nếu hint không được đặt, hành vi không thay đổi (tương thích ngược).
customPoliciesPath
Kiểu: string (đường dẫn tuyệt đối)
Đường dẫn đến tệp JavaScript chứa các chính sách hook tùy chỉnh. Điều này được đặt tự động bởi failproofai policies --install --custom <path> (đường dẫn được phân giải thành tuyệt đối trước khi được lưu trữ).
Tệp được tải lại trên mỗi sự kiện hook - không có bộ đệm. Xem Custom Policies để biết chi tiết tác giả.
Các chính sách dựa trên quy ước
NgoàicustomPoliciesPath rõ ràng, failproofai tự động phát hiện và tải các tệp chính sách từ các thư mục .failproofai/policies/:
| Cấp | Thư mục | Phạm vi |
|---|---|---|
| Dự án | .failproofai/policies/ | Chia sẻ với nhóm qua kiểm soát phiên bản |
| Người dùng | ~/.failproofai/policies/ | Cá nhân, áp dụng cho tất cả các dự án |
*policies.{js,mjs,ts} được tải (ví dụ: security-policies.mjs, workflow-policies.js). Các tệp khác trong thư mục bị bỏ qua.
Không cần cấu hình: Các chính sách quy ước không yêu cầu các mục trong policies-config.json. Chỉ cần thả các tệp vào thư mục và chúng sẽ được chọn khi sự kiện hook tiếp theo xảy ra.
Tải hợp: Cả hai thư mục quy ước dự án và người dùng được quét. Tất cả các tệp khớp từ cả hai cấp đều được tải (không giống customPoliciesPath sử dụng first-scope-wins).
Xem Custom Policies để biết thêm chi tiết và ví dụ.
llm
Kiểu: object (tùy chọn)
Cấu hình máy khách LLM cho các chính sách thực hiện các lệnh gọi AI. Không cần thiết cho hầu hết các thiết lập.
Quản lý cấu hình từ CLI
Các lệnhpolicies --install và policies --uninstall ghi vào tệp cài đặt hook của CLI agent của bạn (các điểm vào hook), trong khi policies-config.json là tệp bạn quản lý trực tiếp. Hai tệp này là riêng biệt:
- Cài đặt Agent CLI — yêu cầu agent gọi
failproofai --hook <event>trên mỗi sử dụng công cụ:- Claude Code:
~/.claude/settings.json(người dùng),<cwd>/.claude/settings.json(dự án),<cwd>/.claude/settings.local.json(cục bộ) - OpenAI Codex:
~/.codex/hooks.json(người dùng),<cwd>/.codex/hooks.json(dự án) — Codex không có phạm vilocal - GitHub Copilot CLI (beta):
~/.copilot/hooks/failproofai.json(người dùng),<cwd>/.github/hooks/failproofai.json(dự án) — Copilot không có phạm vilocal. Các mục hook sử dụng các trường lệnhbash/powershellđược xác định theo hệ điều hành của Copilot vớitimeoutSec; tệp mang một đánh dấuversion: 1cấp cao nhất. Hỗ trợ Copilot CLI là beta trong khi chúng tôi xác minh lược đồ bản ghievents.jsonl(mà các tài liệu công khai không chỉ định) so với các phiên làm việc thực tế hơn. - Cursor Agent (beta):
~/.cursor/hooks.json(người dùng),<cwd>/.cursor/hooks.json(dự án) — Cursor không có phạm vilocal. Các mục hook sử dụng hình thức{type, command, timeout}dạng Claude (không chiabash/powershell), nhưng được lưu trữ dưới các khóa sự kiện camelCase (preToolUse,beforeSubmitPrompt, …) trong một mảng phẳng theo hooks schema của Cursor; tệp mang một đánh dấuversion: 1cấp cao nhất. Trình xử lý chính tắc hóa camelCase → PascalCase thông quaCURSOR_EVENT_MAPđể các chính sách tích hợp sẵn hiện có kích hoạt không thay đổi. Hỗ trợ Cursor Agent là beta trong khi chúng tôi xác minh định dạng bảng điểm của Cursor trên đĩa (không được chỉ định trong tài liệu công khai) so với nhiều bản cài đặt thực tế hơn. - OpenCode (beta):
~/.config/opencode/opencode.json+~/.config/opencode/plugins/failproofai.mjs(người dùng),<cwd>/.opencode/opencode.json+<cwd>/.opencode/plugins/failproofai.mjs(dự án) — OpenCode không có phạm vilocal. Không giống như sáu CLI khác, OpenCode không có hệ thống hook lệnh bên ngoài: nó tải các plugin JS/TS trong quy trình được đăng ký rõ ràng qua mảngplugin: []trongopencode.json(tự động khám phá từ.opencode/plugins/không phải cách các plugin được tải trên opencode v1.14.33). Install thả một shim plugin nhỏ được tạo ra gọi lệnh phụ vào nhị phân failproofai và dịch phản hồi JSON dạng Claude của nhị phân trở lại ngữ semantics plugin:throw new Error()để từ chối sự kiện công cụ (hủy lệnh gọi công cụ),client.session.prompt(...)để instruct VÀ để từ chốiStop/SubagentStop(gửi lý do từ chối làm thông điệp người dùng tiếp theo — kênh retry-buộc duy nhất vìsession.idlechỉ là thông báo và ném từ nó là no-op), và no-op cho phép. Shim chính tắc hóa cả tên công cụ (chữ thường → PascalCase quaOPENCODE_TOOL_MAP) và các khóa đối số đầu vào công cụ (camelCase → snake_case quaOPENCODE_TOOL_INPUT_MAPchoRead/Write/Edit, ví dụ:filePath→file_path,oldString→old_string) trước khi chuyển tiếp đến nhị phân, vì vậy các chính sách kiểm tra đường dẫn tích hợp sẵn nhưblock-read-outside-cwd,block-env-files, vàblock-secrets-writekích hoạt không thay đổi trên các lệnh gọi công cụ OpenCode. Các phiên sống trong cơ sở dữ liệu SQLite của opencode tại~/.local/share/opencode/opencode.db; trình xem phiên của bảng điều khiển đọc chúng quaopencode db --format jsonvàopencode export <id>. Hỗ trợ OpenCode là beta trong khi chúng tôi xác minh hành vi trên các phiên bản và so với nhiều phiên làm việc thực tế hơn. Xem tài liệu plugin OpenCode. - Pi (beta):
~/.pi/agent/settings.json(người dùng),<cwd>/.pi/settings.json(dự án) — Pi không có phạm vilocal. Pi tải các gói mở rộng TypeScript khi khởi động; tệp cài đặt là một mảng chuỗi phẳng{"packages": ["./relative/path", …]}. failproofai ghi một mục mảng gói duy nhất trỏ vào thư mụcpi-extension/được đóng gói của nó. Phần mở rộng trội theo dõi các sự kiệntool_call/user_bash/input/session_startcủa Pi và lệnh shell tớifailproofai --hook <Event> --cli pi; trình xử lý chính tắc hóa underscore_lower_snake_case → PascalCase thông quaPI_EVENT_MAPđể các chính sách tích hợp sẵn hiện có kích hoạt không thay đổi. Các đối số đầu vào công cụ cũng được chính tắc hóa quaPI_TOOL_INPUT_MAP(Pi’s Read / Write / Edit giaopaththay vìfile_path; ánh xạ khóa cấp cao nhất cho phépblock-env-filesvàblock-secrets-writekích hoạt —block-read-outside-cwdđã có một dự phòngpath). Hỗ trợ Pi là beta trong khi API mở rộng Pi và bố cục nhật ký phiên ổn định. - Gemini CLI (beta):
~/.gemini/settings.json(người dùng),<cwd>/.gemini/settings.json(dự án) — Gemini không có phạm vilocal(nó ghi lại một phạm visystemtại/etc/gemini-cli/settings.jsonmà failproofai không hiển thị). Các mục hook sử dụng hình thức{type, command, timeout}của Claude được bao bọc trong lược đồ bộ khớp{matcher, hooks: [...]}của Gemini vớimatcher: "*"theo mặc định. Các sự kiện là PascalCase (SessionStart,BeforeAgent,AfterAgent,BeforeModel,AfterModel,BeforeToolSelection,BeforeTool,AfterTool,PreCompress,Notification,SessionEnd); trình xử lý ánh xạ tới các tên canonical Claude quaGEMINI_EVENT_MAP. Tên công cụ là snake_case (run_shell_command,read_file,write_file,replace, …) — trình xử lý chính tắc hóa quaGEMINI_TOOL_MAPđể các chính sách tích hợp sẵn hiện có kích hoạt không thay đổi. Đánh giá chính sách phát ra hình dạng phẳng{decision: "deny", reason}của Gemini (ưa thích theo “Golden Rule” hợp đồng exit-0 của Gemini),{hookSpecificOutput: {hookEventName, additionalContext}}để tiêm bối cảnh trên BeforeAgent / AfterTool / SessionStart, và{decision: "block", reason}trên AfterAgent để sử dụng ngữ semantics retry-buộc. Hỗ trợ Gemini CLI là beta trong khi chúng tôi mở rộng độ bao phủ thực tế. Xem tài liệu hooks Gemini CLI.
- Claude Code:
policies-config.json— yêu cầu failproofai đánh giá chính sách nào và với những tham số nào (dùng chung trên tất cả các CLI agent)
--cli claude|codex|copilot|cursor|opencode|pi|gemini để nhắm mục tiêu vào một agent cụ thể (cách nhau bằng dấu cách hoặc lặp lại cho bất kỳ tập hợp con nào):
--cli bị bỏ qua, failproofai phát hiện CLI agent nào được cài đặt (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which gemini):
- Một CLI được phát hiện — tự động chọn CLI đó mà không cần nhắc.
- Nhiều CLI được phát hiện trong terminal tương tác — hiển thị lời nhắc chọn đơn với phím mũi tên được nhóm thành một phần
Detected (N)(với một hàng tổng hợpInstall for all N detected+ từng CLI được phát hiện riêng lẻ) và một phầnNot installed (M) · install hooks ahead of timeliệt kê mọi CLI được hỗ trợ chưa được phát hiện như một tùy chọn cài đặt phía trước (↑↓ để di chuyển, Enter để chọn, ^C để thoát). Luồng gỡ cài đặt chỉ hiển thị phần Detected. - Nhiều CLI được phát hiện trong lần chạy không tương tác (CI, không TTY) — cài đặt cho tất cả các CLI được phát hiện mà không cần nhắc.
- Không có cái nào được phát hiện — quay trở lại
claude, với cảnh báo rằng không tìm thấy nhị phân agent nào trong PATH; lệnh hook vẫn được ghi để nó kích hoạt ngay khi bạn cài đặt một lệnh.
policies-config.json trực tiếp bất cứ lúc nào; các thay đổi có hiệu lực ngay lập tức trên sự kiện hook tiếp theo mà không cần khởi động lại.
Ví dụ: cấu hình cấp dự án có giá trị mặc định nhóm
Cam kết.failproofai/policies-config.json vào kho lưu trữ của bạn:
.failproofai/policies-config.local.json (gitignored) để ghi đè cá nhân mà không ảnh hưởng đến các đồng đội.
