Skip to main content
failproofai được trang bị 39 chính sách tích hợp sẵn bắt được các chế độ lỗi thông thường của agent. Mỗi chính sách được kích hoạt trên một loại sự kiện hook cụ thể và tên công cụ. Mười chín chính sách chấp nhận các tham số cho phép bạn tinh chỉnh hành vi của chúng mà không cần viết mã. Năm chính sách quy trình làm việc thực thi đường dẫn commit → push → PR → CI trước khi Claude dừng lại.

Tổng quan

Các chính sách được nhóm vào các danh mục:
  • block- — dừng agent không được tiếp tục.
  • warn- — cung cấp ngữ cảnh bổ sung để agent có thể tự sửa chữa.
  • sanitize- — loại bỏ dữ liệu nhạy cảm từ kết quả công cụ trước khi agent nhìn thấy.

Không gian tên

Mỗi chính sách sống trong một vị trí <namespace>/<name>. Các chính sách tích hợp sẵn thuộc về không gian tên failproofai/ — ví dụ: failproofai/sanitize-jwt. Không gian tên ngăn chặn va chạm khi bạn cũng tải các chính sách tùy chỉnh hoặc của bên thứ ba có tên ngắn tương tự. Trong cấu hình của bạn, bạn có thể tham chiếu đến một chính sách tích hợp sẵn bằng tên ngắn hoặc tên đủ điều kiện; cả hai dạng đều giải quyết thành cùng một chính sách:
Nếu một tên không có /, failproofai coi nó thuộc về không gian tên mặc định failproofai. Các tên đã chứa / (ví dụ: myorg/foo, custom/my-hook) được giữ nguyên.
  • require- — chặn sự kiện Stop cho đến khi các điều kiện được đáp ứng.

Mỗi chính sách hỗ trợ một trường hint tùy chọn trong policyParams. Hint được nối vào tin nhắn deny hoặc instruct mà Claude nhìn thấy, cung cấp hướng dẫn có thể hành động mà không sửa đổi mã chính sách. Hoạt động với các chính sách tích hợp sẵn, tùy chỉnh và theo quy ước. Xem Configuration → hint để biết chi tiết.

Lệnh nguy hiểm

Ngăn chặn agent chạy các thao tác khó hoàn tác hoặc có thể làm hỏng hệ thống chủ nhà.

block-sudo

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh sudo nào.
Chặn các lần gọi bao gồm từ khóa sudo. Phối hợp mẫu được thực hiện trên các token lệnh được phân tích cú pháp, không phải chuỗi thô, để ngăn chặn bypass qua tiêm toán tử shell. Tham số: Ví dụ:
Với cấu hình này, sudo systemctl status nginx được phép, nhưng sudo rm /etc/hosts bị từ chối.
Các mẫu được so khớp với các token được phân tích cú pháp, không phải chuỗi lệnh thô. Điều này ngăn chặn bypass qua các toán tử shell được thêm vào (ví dụ: sudo systemctl status x; rm -rf / không khớp với sudo systemctl status *).

block-rm-rf

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối rm -rf, rm -fr và các dạng xóa đệ quy tương tự.
Tham số: Ví dụ:

block-curl-pipe-sh

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối curl <url> | bash, curl <url> | sh, wget <url> | bash và các mẫu tương tự.
Không có tham số.

block-failproofai-commands

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối các lệnh sẽ gỡ cài đặt hoặc vô hiệu hóa failproofai (ví dụ: npm uninstall failproofai, failproofai policies --uninstall).
Không có tham số.

Lệnh cơ sở hạ tầng

Dừng các agent mã hóa chạy CLI cơ sở hạ tầng hoặc kích hoạt đường ống CI/CD. Tất cả các chính sách trong danh mục này là opt-in (defaultEnabled: false) — các agent hợp pháp cần gọi kubectl, terraform, v.v. sẽ không bị gián đoạn trừ khi bạn bật chính sách. Khi được bật, mỗi lần gọi CLI phù hợp bị từ chối trừ khi lệnh khớp với một mục trong allowPatterns. Ngữ pháp mẫu giống như block-sudo: các token được so khớp với argv được phân tích cú pháp, * là ký tự đại diện cho một token, và bất kỳ lệnh nào chứa toán tử shell độc lập (&&, ||, |, ;) hoặc token có ký tự siêu dữ liệu shell nhúng bị từ chối trước khi so khớp danh sách cho phép để ngăn chặn bypass tiêm.

block-kubectl

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi kubectl nào.
Tham số: Ví dụ:
Với cấu hình này, kubectl get pods được phép nhưng kubectl apply -f deploy.yaml bị từ chối.

block-terraform

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi terraform hoặc tofu (OpenTofu) nào.
Tham số: Ví dụ:

block-aws-cli

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi CLI aws nào.
Tham số: Ví dụ:

block-gcloud

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi CLI gcloud (Google Cloud) nào.
Tham số: Ví dụ:

block-az-cli

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi CLI az (Azure) nào.
Tham số: Ví dụ:

block-helm

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối bất kỳ lệnh gọi helm nào.
Tham số: Ví dụ:

block-gh-pipeline

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối các lệnh phụ CLI gh sau đây gây ra thay đổi trạng thái hoặc kích hoạt đường ống:
  • gh workflow run, gh workflow enable, gh workflow disable
  • gh run rerun, gh run cancel
  • gh pr merge
  • gh release create, gh release delete
  • gh cache delete
  • gh secret set, gh secret delete
Các lệnh phụ gh chỉ đọc như gh pr view, gh pr list, gh run list, gh release viewgh api repos/.../... không được khớp bởi chính sách này — chúng thường cần thiết cho các kiểm tra quy trình làm việc (bao gồm cả chính sách require-ci-green-before-stop của failproofai). Tham số: Ví dụ:

Bí mật (sanitizers)

Dừng agent rò rỉ thông tin đăng nhập vào ngữ cảnh hoặc kết quả của chúng. Các chính sách sanitizer được kích hoạt trên các sự kiện PostToolUse. Khi Claude chạy lệnh Bash, đọc tệp hoặc gọi bất kỳ công cụ nào, các chính sách này kiểm tra kết quả trước khi nó được trả về Claude. Nếu phát hiện mẫu bí mật, chính sách trả về quyết định deny ngăn chặn kết quả được truyền lại.

sanitize-jwt

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Che khuất các token JWT (ba đoạn base64url được phân cách bằng .).
Không có tham số.

sanitize-api-keys

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Che khuất các định dạng khóa API phổ biến: Anthropic (sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), AWS access keys (AKIA), Stripe keys (sk_live_, sk_test_) và Google API keys (AIza).
Tham số: Ví dụ:

sanitize-connection-strings

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Che khuất chuỗi kết nối cơ sở dữ liệu chứa thông tin đăng nhập nhúng (ví dụ: postgresql://user:password@host/db).
Không có tham số.

sanitize-private-key-content

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Che khuất các khối PEM (-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----, v.v.).
Không có tham số.

sanitize-bearer-tokens

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Che khuất các tiêu đề Authorization: Bearer <token> nơi token là 20 hoặc nhiều ký tự hơn.
Không có tham số.

Môi trường

Bảo vệ cấu hình môi trường nhạy cảm khỏi việc agent đọc hoặc tiếp xúc.

block-env-files

Sự kiện: PreToolUse (Bash, Read)
Mặc định: Từ chối đọc tệp .env qua cat .env, gọi công cụ Read với .env là đường dẫn tệp, v.v.
Không chặn .envrc hoặc các tệp liên quan môi trường khác - chỉ những tệp được đặt tên chính xác là .env. Không có tham số.

protect-env-vars

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối các lệnh in biến môi trường: printenv, env, echo $VAR.
Không có tham số.

Truy cập tệp

Giữ agent làm việc trong ranh giới dự án và tránh xa những tệp nhạy cảm.

block-read-outside-cwd

Sự kiện: PreToolUse (Read, Bash)
Mặc định: Từ chối đọc tệp bên ngoài gốc dự án. Ranh giới là CLAUDE_PROJECT_DIR (được đặt một lần mỗi phiên bởi Claude Code), với dự phòng là thư mục làm việc hiện tại của phiên khi biến đó chưa được đặt. Sử dụng gốc dự án thay vì cwd trực tiếp có nghĩa là ranh giới vẫn ổn định ngay cả sau khi Claude cd vào thư mục con.
Tham số: Ví dụ:

block-secrets-write

Sự kiện: PreToolUse (Write, Edit)
Mặc định: Từ chối ghi vào các tệp thường được sử dụng cho các khóa riêng tư và chứng chỉ: id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Tham số: Ví dụ:

Git

Ngăn chặn các lần push tình cờ, force-push và các lỗi nhánh khó hoàn tác.

block-push-master

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối git push origin maingit push origin master.
Tham số: Ví dụ:
Để cho phép push đến tất cả các nhánh (có hiệu lực là vô hiệu hóa chính sách này mà không xóa nó khỏi enabledPolicies), đặt protectedBranches: [].

block-work-on-main

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối git commit, git merge, git rebasegit cherry-pick khi cây làm việc nằm trên main hoặc master. Tạo nhánh và chuyển đổi (git checkout, git checkout -b, git switch, git switch -c) không bị ảnh hưởng.
Tham số:

block-force-push

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối git push --forcegit push -f.
Không có tham số cụ thể chính sách. Sử dụng hint cắt ngang để gợi ý các giải pháp thay thế:

warn-git-amend

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude tiến hành cẩn thận khi chạy git commit --amend. Không chặn lệnh.
Không có tham số.

warn-git-stash-drop

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xác nhận trước khi chạy git stash drop. Không chặn lệnh.
Không có tham số.

warn-all-files-staged

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xem lại những gì nó sắp sàng lọc khi chạy git add -A hoặc git add .. Không chặn lệnh.
Không có tham số.

Cơ sở dữ liệu

Bắt các thao tác SQL phá hủy trước khi chúng thực thi đối với cơ sở dữ liệu của bạn.

warn-destructive-sql

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xác nhận trước khi chạy SQL chứa DROP TABLE, DROP DATABASE hoặc DELETE mà không có mệnh đề WHERE.
Không có tham số.

warn-schema-alteration

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xác nhận trước khi chạy các câu lệnh ALTER TABLE.
Không có tham số.

Cảnh báo

Cung cấp agent ngữ cảnh bổ sung trước các hoạt động tiềm ẩn rủi ro nhưng không phá hủy.

warn-large-file-write

Sự kiện: PreToolUse (Write)
Mặc định: Hướng dẫn Claude xác nhận trước khi ghi các tệp lớn hơn 1024 KB.
Tham số: Ví dụ:
Xử lý hook thực thi giới hạn stdin 1 MB trên tải trọng. Để kiểm tra chính sách này với nội dung nhỏ, đặt thresholdKb thành giá trị tốt dưới 1024.

warn-package-publish

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xác nhận trước khi chạy npm publish.
Không có tham số.

warn-background-process

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude cẩn thận khi khởi chạy các quy trình nền qua nohup, &, disown hoặc screen.
Không có tham số.

warn-global-package-install

Sự kiện: PreToolUse (Bash)
Mặc định: Hướng dẫn Claude xác nhận trước khi chạy npm install -g, yarn global add hoặc pip install mà không có môi trường ảo.
Không có tham số.

Trình quản lý gói

Thực thi trình quản lý gói nào agent được phép sử dụng.

prefer-package-manager

Sự kiện: PreToolUse (Bash)
Mặc định: Bị vô hiệu hóa. Khi được bật, chặn bất kỳ lệnh trình quản lý gói nào không trong danh sách allowed và yêu cầu Claude viết lại lệnh bằng trình quản lý được phép.
Phát hiện: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Danh sách chặn tích hợp sẵn bao gồm: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Sử dụng blocked để thêm các trình quản lý không có trong danh sách này. Cấu hình ví dụ:
Với cấu hình này, pip install flaskpdm install flask đều bị từ chối với thông báo yêu cầu Claude sử dụng uv hoặc bun thay vì. Các lệnh như uv pip install flask được phép vì uv nằm trong danh sách cho phép và được kiểm tra trước tiên.

Hành vi AI

Phát hiện khi agent bị mắc kẹt hoặc có hành vi bất thường.

warn-repeated-tool-calls

Sự kiện: PreToolUse (tất cả công cụ)
Mặc định: Hướng dẫn Claude xem xét lại khi cùng một công cụ được gọi 3 lần trở lên với các tham số giống hệt nhau - dấu hiệu phổ biến của agent bị mắc vòng lặp.
Không có tham số.

Quy trình làm việc

Thực thi quy trình làm việc cuối phiên kỷ luật. Các chính sách này được kích hoạt trên sự kiện Stop và từ chối agent dừng lại cho đến khi mỗi điều kiện được đáp ứng. Chúng tuân theo chuỗi phụ thuộc tự nhiên: commit → push → PR → CI. Nếu chính sách từ chối, các chính sách sau trong chuỗi bị bỏ qua (deny short-circuits). Tất cả các chính sách quy trình làm việc là fail-open: nếu công cụ được yêu cầu không có sẵn (ví dụ: gh không cài đặt, không có git remote), chính sách cho phép với thông báo thông tin giải thích lý do kiểm tra bị bỏ qua.

Ngữ nghĩa Stop theo CLI

Thực thi Stop trông hơi khác nhau trên bảy CLI được hỗ trợ vì mỗi CLI tiếp xúc với hợp đồng hook “agent kết thúc” khác nhau. Kết quả là như nhau — agent không thoát khỏi việc dừng lại trong khi cổng quy trình làm việc đang thất bại — nhưng cơ chế khác nhau. Bảng dưới đây tóm tắt; chỉ Pi có một điểm kỳ lạ hiển thị cho người dùng đáng hiểu trước khi bạn bật chính sách require-*-before-stop.
Giới hạn Pi. AgentEndEvent của Pi (tương đương thượng nguồn của hook Stop của Claude) không có loại Result — khi nó kích hoạt, vòng lặp agent của Pi đã thoát. Pi không thể bị buộc thử lại cùng một vòng lặp theo cách Claude / Copilot / Cursor / OpenCode. failproofai thay đổi cổng sang sự kiện before_agent_start của Pi (được kích hoạt sau dấu nhắc người dùng tiếp theo) để kiểm tra quy trình làm việc vẫn thực thi, chỉ trên lần tới thay vì lần hiện tại.Điều này có nghĩa gì trong thực tế:
  • Sau khi Pi dừng lại, lý do từ chối được ghi vào bộ nhớ trong bằng id phiên Pi. Dấu nhắc rất tiếp theo bạn gửi trong cùng quy trình Pi lấy ra nó: LLM nhìn thấy chỉ thị MANDATORY ACTION REQUIRED ở đầu lời nhắc hệ thống của nó, commit (hoặc push / mở PR / chờ CI) và chỉ khi đó tiếp tục với yêu cầu của bạn. Lý do từ chối được ghi lại là một lần — sau khi lấy ra, cổng rõ ràng.
  • Cổng bị ràng buộc bởi vòng đời quá trình Pi. Nếu bạn Ctrl+C Pi hoặc thoát giữa các lần, mục bộ nhớ trong được loại bỏ cùng với quá trình và cổng bị bỏ lỡ. Claude, Copilot, Cursor và OpenCode có cùng ranh giới (giết agent và cổng bị bỏ lỡ) — Pi chỉ làm cho nó rõ ràng hơn vì agent rõ ràng thoát trước khi cổng kích hoạt.
  • Một từ chối đang chờ cũng bị xóa trên session_shutdown vì lý do gì đó (new / resume / fork / quit), vì vậy cổng cũ từ phiên trước không thể bị rò rỉ vào phiên mới được khởi động trong cùng quy trình Pi.
Nếu bạn cần thử lại cùng vòng lặp kiểu Claude, hãy chạy các chính sách Stop của bạn dưới bất kỳ năm CLI được hỗ trợ khác. Chúng tôi đang theo dõi Pi thượng nguồn để có loại Result trong tương lai trên AgentEndEvent sẽ cho phép chúng tôi đóng khoảng cách này.

require-commit-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng lại khi có thay đổi chưa được xác nhận (tệp đã sửa đổi, được sắp xếp hoặc chưa theo dõi). Trả về thông báo thông tin khi thư mục làm việc sạch sẽ.
Không có tham số.

require-push-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng lại khi có các lần commit chưa được push hoặc khi nhánh hiện tại không có nhánh theo dõi từ xa. Gợi ý git push -u để tạo nhánh theo dõi nếu cần. Thất bại mở nếu không có remote được cấu hình.
Tham số: Ví dụ:

require-pr-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng lại khi không có yêu cầu pull tồn tại cho nhánh hiện tại hoặc khi PR hiện có bị đóng mà không merge. Hướng dẫn Claude tạo PR với gh pr create. Khi PR được merge, chính sách cho phép (công việc đã được gửi) và thông báo gợi ý chuyển ra khỏi nhánh (git checkout main && git pull).
Không có tham số.
Chính sách này yêu cầu GitHub CLI (gh) được cài đặt và xác thực. Chạy gh auth login với token truy cập cá nhân có phạm vi repo để đọc yêu cầu pull. Nếu gh không được cài đặt hoặc không xác thực, chính sách thất bại mở và báo cáo lý do cho Claude.

require-no-conflicts-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng lại khi nhánh hiện tại không thể merge sạch vào nhánh cơ sở. Chính sách trước tiên xác nhận có PR OPEN trên GitHub cho nhánh — nếu không có, không có mục tiêu merge để thực thi, vì vậy toàn bộ chính sách short-circuit cho phép. Khi PR OPEN được xác nhận, hai điều tra độc lập chạy:
  1. Localgit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. Xung đột, thông báo từ chối đặt tên các tệp xung đột để Claude biết chính xác phải giải quyết cái gì.
  2. GitHub — tái sử dụng kết quả gh pr view --json mergeable,state đã được tìm nạp trong kiểm tra trước. Bắt những xung đột mà origin/<baseBranch> cũ cục bộ sẽ bỏ lỡ (ví dụ: ai đó đã hạ cánh PR xung đột trên main kể từ lần tìm nạp cuối cùng). Kết quả CONFLICTING từ chối. Kết quả UNKNOWN cũng từ chối và hướng dẫn Claude chờ ~10 giây và kiểm tra lại trước khi cố gắng dừng lại lại — điều này ngăn chặn dương tính giả trong khi GitHub tính toán lại.
Bỏ qua hoàn toàn (cho phép) khi: gh không được cài đặt, không có PR nào cho nhánh, trạng thái PR không phải OPEN (ví dụ: MERGED, CLOSED), hoặc gh pr view trả về kết quả không thể phân tích. Cũng thất bại mở khi origin/<baseBranch> bị thiếu cục bộ hoặc khi không có commit trước cơ sở — những lần rơi qua Layer 1 đó vẫn tham khảo kết quả PR mergeability được lưu trong bộ nhớ cache trước khi cho phép. Tham số:
GitHub CLI (gh) là bắt buộc cho chính sách này. Chính sách sử dụng gh pr view để xác nhận một PR OPEN tồn tại trước khi chạy bất kỳ điều tra xung đột nào — nếu không có gh, chính sách short-circuit cho phép. Chạy gh auth login với token truy cập cá nhân có phạm vi repo để đọc yêu cầu pull.

require-ci-green-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng lại khi các kiểm tra CI đang thất bại hoặc vẫn chạy trên nhánh hiện tại. Kiểm tra cả công việc GitHub Actions workflow và các kiểm tra bot của bên thứ ba (ví dụ: CodeRabbit, SonarCloud, Codecov). Coi skipped, cancelledneutral kết luận là không thất bại (cái sau bao gồm ví dụ: Socket Security alerts trên PR của người đóng góp bên ngoài, nơi ứng dụng cố tình báo cáo neutral thay vì success/failure). Trả về thông báo thông tin khi tất cả các kiểm tra vượt qua.
Không có tham số.
Chính sách này yêu cầu GitHub CLI (gh) được cài đặt và xác thực. Chạy gh auth login với token truy cập cá nhân có phạm vi repo để đọc quy trình làm việc Actions và Checks API. Nếu gh không được cài đặt hoặc không xác thực, chính sách thất bại mở và báo cáo lý do cho Claude.


Vô hiệu hóa các chính sách riêng lẻ

Xóa một chính sách cụ thể khỏi enabledPolicies trong cấu hình của bạn hoặc bật tắt nó trên tab Policies của bảng điều khiển.
Các chính sách không được liệt kê trong enabledPolicies không chạy, ngay cả khi các mục policyParams tồn tại cho chúng.