Chuyển đến nội dung chính
failproofai đi kèm với 39 chính sách tích hợp giúp phát hiện các chế độ lỗi phổ biến 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 điều 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 một đường ống commit → push → PR → CI trước khi Claude dừng.

Tổng quan

Các chính sách được nhóm theo danh mục:
Danh mụcChính sáchLoại Hook
Lệnh nguy hiểmblock-sudo, block-rm-rf, block-curl-pipe-sh, block-failproofai-commandsPreToolUse
Lệnh cơ sở hạ tầngblock-kubectl, block-terraform, block-aws-cli, block-gcloud, block-az-cli, block-helm, block-gh-pipelinePreToolUse
Bí mật (sanitizers)sanitize-jwt, sanitize-api-keys, sanitize-connection-strings, sanitize-private-key-content, sanitize-bearer-tokensPostToolUse
Môi trườngblock-env-files, protect-env-varsPreToolUse
Truy cập tệpblock-read-outside-cwd, block-secrets-writePreToolUse
Gitblock-push-master, block-work-on-main, block-force-push, warn-git-amend, warn-git-stash-drop, warn-all-files-stagedPreToolUse
Cơ sở dữ liệuwarn-destructive-sql, warn-schema-alterationPreToolUse
Cảnh báowarn-large-file-write, warn-package-publish, warn-background-process, warn-global-package-installPreToolUse
Trình quản lý góiprefer-package-managerPreToolUse
Quy trình làm việcrequire-commit-before-stop, require-push-before-stop, require-pr-before-stop, require-no-conflicts-before-stop, require-ci-green-before-stopStop
  • block- — dừng agent từ việc tiếp tục.
  • warn- — cung cấp cho agent ngữ cảnh bổ sung để nó có thể tự sửa chữa.
  • sanitize- — xóa dữ liệu nhạy cảm từ đầu ra công cụ trước khi agent nhìn thấy nó.

Không gian tên

Mỗi chính sách tồn tại trong một khe <namespace>/<name>. Các chính sách tích hợp thuộc về không gian tên failproofai/ — ví dụ: failproofai/sanitize-jwt. Không gian tên ngăn chặn xung đột 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 một chính sách tích hợp bằng tên ngắn hoặc tên đủ điều kiện của nó; cả hai dạng đều giải quyết chính sách tương tự:
{
  "enabledPolicies": [
    "sanitize-jwt",
    "failproofai/block-rm-rf"
  ]
}
Nếu tên không có /, failproofai sẽ 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 thêm vào thông báo deny hoặc instruct mà Claude nhìn thấy, cung cấp hướng dẫn có thể thực hiện được mà không cần sửa đổi mã chính sách. Hoạt động với các chính sách tích hợp, tùy chỉnh và quy ước. Xem Cấu hình → hint để biết chi tiết.

Lệnh nguy hiểm

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

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ệnh gọi chứa từ khóa sudo. Khớ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 vượt qua qua injection operator shell. Tham số:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh chính xác được phép. Mỗi mục được so khớp với các token argv được phân tích.
Ví dụ:
{
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    }
  }
}
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, không phải chuỗi lệnh thô. Điều này ngăn chặn vượt qua qua các operator 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ố:
Tham sốLoạiMặc địnhMô tả
allowPathsstring[][]Các đường dẫn an toàn để xóa đệ quy (ví dụ: /tmp).
Ví dụ:
{
  "policyParams": {
    "block-rm-rf": {
      "allowPaths": ["/tmp", "/var/cache"]
    }
  }
}

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

Ngăn chặn agent viết mã chạy CLI cơ sở hạ tầng hoặc kích hoạt đường dẫn CI/CD. Tất cả các chính sách trong danh mục này là tùy chọn (defaultEnabled: false) — agent 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, * là ký tự đại diện cho một token, và bất kỳ lệnh nào chứa một operator shell độc lập (&&, ||, |, ;) hoặc token có ký tự siêu shell nhúng bị từ chối trước khi khớp danh sách cho phép để ngăn chặn injection.

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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh kubectl được phép.
Ví dụ:
{
  "policyParams": {
    "block-kubectl": {
      "allowPatterns": ["kubectl get *", "kubectl describe *", "kubectl logs *"]
    }
  }
}
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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh terraform/tofu được phép.
Ví dụ:
{
  "policyParams": {
    "block-terraform": {
      "allowPatterns": ["terraform plan", "terraform validate", "terraform show *"]
    }
  }
}

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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh CLI aws được phép.
Ví dụ:
{
  "policyParams": {
    "block-aws-cli": {
      "allowPatterns": ["aws s3 ls *", "aws sts get-caller-identity"]
    }
  }
}

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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh gcloud được phép.
Ví dụ:
{
  "policyParams": {
    "block-gcloud": {
      "allowPatterns": ["gcloud auth list", "gcloud config list"]
    }
  }
}

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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh CLI az được phép.
Ví dụ:
{
  "policyParams": {
    "block-az-cli": {
      "allowPatterns": ["az account show", "az group list"]
    }
  }
}

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ố:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Tiền tố lệnh helm được phép.
Ví dụ:
{
  "policyParams": {
    "block-helm": {
      "allowPatterns": ["helm list", "helm status *"]
    }
  }
}

block-gh-pipeline

Sự kiện: PreToolUse (Bash)
Mặc định: Từ chối các lệnh phụ sau của CLI gh thay đổi trạng thái hoặc kích hoạt đường dẫn:
  • 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ả require-ci-green-before-stop của failproofai). Tham số:
Tham sốLoạiMặc địnhMô tả
allowPatternsstring[][]Các lệnh gọi kịch bản cụ thể để cho phép mặc dù chúng sẽ bị từ chối.
Ví dụ:
{
  "policyParams": {
    "block-gh-pipeline": {
      "allowPatterns": ["gh run rerun *"]
    }
  }
}

Bí mật (sanitizers)

Ngăn chặn agent rò rỉ thông tin xác thực vào ngữ cảnh hoặc đầu ra 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 một lệnh Bash, đọc một 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 đầu ra trước khi nó được trả về cho Claude. Nếu phát hiện mẫu bí mật, chính sách sẽ trả về quyết định deny ngăn chặn đầu ra được truyền lại.

sanitize-jwt

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Loại bỏ các token JWT (ba đoạn base64url cách nhau bằng .).
Không có tham số.

sanitize-api-keys

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Loại bỏ các định dạng khóa API phổ biến: Anthropic (sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), khóa truy cập AWS (AKIA), khóa Stripe (sk_live_, sk_test_) và khóa API Google (AIza).
Tham số:
Tham sốLoạiMặc địnhMô tả
additionalPatterns{ regex: string; label: string }[][]Các mẫu regex bổ sung để coi là bí mật.
Ví dụ:
{
  "policyParams": {
    "sanitize-api-keys": {
      "additionalPatterns": [
        { "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo internal API key" },
        { "regex": "pat_[0-9a-f]{40}", "label": "Internal PAT" }
      ]
    }
  }
}

sanitize-connection-strings

Sự kiện: PostToolUse (tất cả công cụ)
Mặc định: Loại bỏ chuỗi kết nối cơ sở dữ liệu chứa thông tin xác thực 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: Loại bỏ 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: Loại bỏ các tiêu đề Authorization: Bearer <token> nơi token có 20 ký tự trở lê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 bị agent đọc hoặc tiếp xúc.

block-env-files

Sự kiện: PreToolUse (Bash, Read)
Mặc định: Từ chối đọc các tệp .env qua cat .env, các lệnh gọi công cụ Read có .env làm đườ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ỉ các 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 hoạt động bên trong ranh giới dự án và xa khỏi các tệp nhạy cảm.

block-read-outside-cwd

Sự kiện: PreToolUse (Read, Bash)
Mặc định: Từ chối đọc các tệp ngoài thư mục 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 sự hỗ trợ dự phòng cho thư mục làm việc hiện tại của phiên khi biến đó không được đặt. Sử dụng thư mục 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 một thư mục con.
Tham số:
Tham sốLoạiMặc địnhMô tả
allowPathsstring[][]Tiền tố đường dẫn tuyệt đối được phép ngay cả khi nằm ngoài thư mục gốc dự án.
Ví dụ:
{
  "policyParams": {
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company/config"]
    }
  }
}

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 khóa riêng tư và chứng chỉ: id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Tham số:
Tham sốLoạiMặc địnhMô tả
additionalPatternsstring[][]Các mẫu tên tệp bổ sung (kiểu glob) để chặn.
Ví dụ:
{
  "policyParams": {
    "block-secrets-write": {
      "additionalPatterns": [".token", ".secret"]
    }
  }
}

Git

Ngăn chặn các lần push, force-push và lỗi nhánh ngẫu nhiên 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ố:
Tham sốLoạiMặc địnhMô tả
protectedBranchesstring[]["main", "master"]Tên nhánh không thể được push trực tiếp.
Ví dụ:
{
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "master", "release", "prod"]
    }
  }
}
Để cho phép push đến tất cả các nhánh (tệp vô hiệu hóa chính sách này mà không cần xóa nó khỏi enabledPolicies), hãy đặ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 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ố:
Tham sốLoạiMặc địnhMô tả
protectedBranchesstring[]["main", "master"]Tên nhánh trên đó commit/merge/rebase/cherry-pick bị từ chối.

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 xuyên suốt để đề xuất các giải pháp thay thế:
{
  "policyParams": {
    "block-force-push": {
      "hint": "Tạo một nhánh mới từ HEAD hiện tại của bạn (ví dụ: `git checkout -b <new-branch>`) và push nhánh đó 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 xét những gì nó đang tổ chứ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

Phát hiện các thao tác SQL tàn phá trước khi chúng thực thi 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 cho agent ngữ cảnh bổ sung trước các thao tác có rủi ro nhưng không tàn phá.

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ố:
Tham sốLoạiMặc địnhMô tả
thresholdKbnumber1024Ngưỡng kích thước tệp tính bằng kilobyte trên đó cảnh báo được phát hành.
Ví dụ:
{
  "policyParams": {
    "warn-large-file-write": {
      "thresholdKb": 256
    }
  }
}
Trình 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ỏ, hãy đặt thresholdKb thành giá trị ít hơn 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 được agent phép sử dụng.

prefer-package-manager

Sự kiện: PreToolUse (Bash)
Mặc định: Tắt. Khi bật, chặn bất kỳ lệnh trình quản lý gói nào không có 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.
Tham sốLoạiMặc địnhMô tả
allowedstring[][]Tên trình quản lý gói được phép. Bất kỳ trình quản lý được phát hiện nào không có trong danh sách này đều bị chặn. Khi để trống, chính sách là không hoạt động.
blockedstring[][]Tên trình quản lý bổ sung để chặn ngoài danh sách tích hợp (ví dụ: ['pdm', 'pipx']).
Danh sách chặn tích hợp 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ụ:
{
  "enabledPolicies": ["prefer-package-manager"],
  "policyParams": {
    "prefer-package-manager": {
      "allowed": ["uv", "bun"],
      "blocked": ["pdm", "pipx"]
    }
  }
}
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 thế. Các lệnh như uv pip install flask được phép vì uv có 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ị kẹt hoặc hoạt động không như mong đợi.

warn-repeated-tool-calls

Sự kiện: PreToolUse (tất cả công cụ)
Mặc định: Hướng dẫn Claude suy nghĩ lại khi cùng một công cụ được gọi 3 lần hoặc nhiều hơn với các tham số giống nhau - dấu hiệu phổ biến của agent bị kẹt trong 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 kỷ luật ở cuối phiên. 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 sẽ bị bỏ qua (deny ngắn mạch). Tất cả các chính sách quy trình làm việc fail-open: nếu công cụ yêu cầu không có sẵn (ví dụ: gh chưa 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 finished” khác nhau. Kết quả là giống nhau — agent không thoát khỏi việc dừng lại khi một cổng quy trình làm việc đang thất bại — nhưng cơ học khác nhau. Bảng dưới đây tóm tắt; chỉ có Pi có một đặc điểm nhạy cảm đáng hiểu trước khi bạn bật chính sách require-*-before-stop.
CLIKhi cổng kích hoạtBạn thấy gì
Claude CodeCùng một vòng lặp agent, ngay lập tứcClaude tiếp tục làm việc — sửa chữa vấn đề, sau đó cố gắng kết thúc lại. Không gián đoạn hiển thị cho bạn.
CodexCùng một vòng lặp agent, ngay lập tứcGiống như Claude.
GitHub Copilot CLICùng một vòng lặp agent, ngay lập tứcGiống như Claude (sử dụng kênh {decision:"block", reason} của Copilot — xác minh theo kinh nghiệm so với Copilot CLI 1.0.41).
Cursor AgentCùng một vòng lặp agent, ngay lập tứcGiống như Claude (sử dụng kênh {followup_message} của Cursor — bị giới hạn bởi loop_limit, mặc định 5 lần thử lại).
Gemini CLICùng một vòng lặp agent, ngay lập tứcGiống như Claude (sử dụng kênh {decision:"block", reason} của Gemini trên AfterAgent).
OpenCodeCùng một vòng lặp agent, ngay lập tứcGiống như Claude (sử dụng lệnh gọi SDK client.session.prompt(...) của OpenCode được định tuyến qua hookSpecificOutput.additionalContext).
Pi (pi-coding-agent)Lần tiếp theo người dùngPi dừng rõ ràng khi cổng kích hoạt — vòng lặp agent của nó thoát và bạn được trả về lời nhắc. Cổng sau đó kích hoạt lần tiếp theo bạn gửi lời nhắc: failproofai thêm một chỉ thị MANDATORY ACTION REQUIRED vào lời nhắc hệ thống của lần đó, hướng dẫn LLM hoàn thành bước quy trình làm việc (commit, push, v.v.) trước khi làm những gì bạn yêu cầu.
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 phải thử lại cùng một vòng lặp như Claude / Copilot / Cursor / Gemini / OpenCode có thể. failproofai chuyển cổng sang sự kiện before_agent_start của Pi (được kích hoạt sau lời 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ỉ là ở lần tiếp theo thay vì hiện tại.Điều này có nghĩa là gì trong thực tế:
  • Sau khi Pi dừng, lý do deny được lưu trong bộ nhớ được khóa theo id phiên Pi. Lời nhắc rất tiếp theo bạn gửi trong cùng một quy trình Pi xả nó: LLM 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ỉ sau đó tiếp tục với yêu cầu của bạn. Lý do deny được lưu lại là một lần — sau khi xả, cổng sạch.
  • Cổng được giới hạn bởi thời gian sống của quy trình Pi. Nếu bạn Ctrl+C Pi hoặc thoát giữa các lần, mục trong bộ nhớ bị xóa cùng với quy trình và cổng bị bỏ lỡ. Claude, Copilot, Cursor, Gemini và OpenCode có cách ràng buộc tương tự (giết agent và cổng bị bỏ lỡ) — Pi chỉ làm nó rõ ràng hơn vì agent rõ ràng thoát trước khi cổng kích hoạt.
  • Một deny đang chờ cũng bị xóa trên session_shutdown vì bất kỳ lý do gì (new / resume / fork / quit), vì vậy cổng cũ từ một phiên trước không thể rò rỉ vào một phiên mới được bắt đầu trong cùng một quy trình Pi.
Nếu bạn cần thử lại cùng một vòng lặp như Claude, chạy các chính sách Stop của bạn dưới bất kỳ trong sáu CLI được hỗ trợ khác. Chúng tôi đang theo dõi Pi thượng nguồn cho loại Result trong tương lai trên AgentEndEvent sẽ cho phép chúng tôi đóng khoảng trống này.

require-commit-before-stop

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

require-push-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng khi có các commit chưa push hoặc khi nhánh hiện tại không có nhánh remote theo dõi. Đề xuất 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ố:
Tham sốLoạiMặc địnhMô tả
remotestring"origin"Tên remote để push đến.
Ví dụ:
{
  "policyParams": {
    "require-push-before-stop": {
      "remote": "upstream"
    }
  }
}

require-pr-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng khi không có pull request nào 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 bằng 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 đổi 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 để truy cập đọc pull request. Nếu gh không được cài đặt hoặc chưa được 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 khi nhánh hiện tại không thể sạch sẽ merge vào nhánh cơ sở. Chính sách trước tiên xác nhận có một 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 rút ngắn để cho phép. Một khi PR OPEN được xác nhận, hai bộ thăm dò độc lập chạy:
  1. Cục bộgit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. Về xung đột, thông báo deny đặt tên các tệp xung đột để Claude biết chính xác những gì cần giải quyết.
  2. GitHub — sử dụng lại kết quả gh pr view --json mergeable,state đã được lấy trong kiểm tra trước. Nắm bắt các xung đột mà origin/<baseBranch> cũ cục bộ sẽ bỏ lỡ (ví dụ: ai đó đã đưa PR xung đột trên main kể từ lần fetch 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 — điều này ngăn chặn âm 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 cho nhánh, trạng thái PR không phải OPEN (ví dụ: MERGED, CLOSED), hoặc gh pr view trả về đầu ra 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ỗi rơi qua Lớp 1 đó vẫn tham khảo khả năng merge PR được lưu trước khi cho phép. Tham số:
Tham sốLoạiMặc địnhMô tả
baseBranchstring"main"Nhánh cơ sở để kiểm tra xung đột.
GitHub CLI (gh) được yêu cầu 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ỳ bộ thăm dò xung đột nào — nếu không có gh, chính sách rút ngắn để cho phép. Chạy gh auth login với token truy cập cá nhân có phạm vi repo để truy cập đọc pull request.

require-ci-green-before-stop

Sự kiện: Stop
Mặc định: Từ chối dừng khi các kiểm tra CI đang thất bại hoặc vẫn đang chạy trên nhánh hiện tại. Kiểm tra cả chạy quy trình GitHub Actions và 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 (điều sau bao gồm ví dụ: cảnh báo Socket Security trên PR của người đóng góp bên ngoài, nơi ứng dụng cố ý báo cáo neutral thay vì success/failure). Trả lại 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 để truy cập đọc chạy quy trình Actions và API Checks. Nếu gh không được cài đặt hoặc chưa được 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 tắt nó trên tab Chính sách của bảng điều khiển.
{
  "enabledPolicies": [
    "block-rm-rf",
    "sanitize-api-keys"
  ]
}
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.