היקפי תצורה
ישנם שלוש היקפי תצורה, המוערכים לפי סדר עדיפויות:| Scope | File path | Purpose |
|---|---|---|
| project | .failproofai/policies-config.json | הגדרות לפי ריפו, תופסות בשליטה גרסאות |
| local | .failproofai/policies-config.local.json | דריסות אישיות לפי ריפו, gitignored |
| global | ~/.failproofai/policies-config.json | ברירות מחדל ברמת משתמש בכל הפרויקטים |
כללי מיזוג
enabledPolicies - איחוד של כל שלושת ההיקפים. כלל שמופעל בכל רמה פעיל.
policyParams - ההיקף הראשון שמגדיר פרמטרים לכלל מסוים מנצח לחלוטין. אין מיזוג עמוק של ערכים בתוך פרמטרים של כלל.
customPoliciesPath - ההיקף הראשון שמגדיר אותו מנצח.
llm - ההיקף הראשון שמגדיר אותו מנצח.
פורמט קובץ קונפיגורציה
הפניה לשדות
enabledPolicies
Type: string[]
רשימת שמות כללים להפעלה. השמות חייבים להתאים בדיוק למזהי הכללים המוצגים על ידי failproofai policies. ראה Built-in Policies לקבלת הרשימה המלאה.
כללים שאינם ב-enabledPolicies אינם פעילים, גם אם יש להם ערכים ב-policyParams.
policyParams
Type: Record<string, Record<string, unknown>>
דריסות פרמטרים לפי כלל. המפתח החיצוני הוא שם הכלל; המפתחות הפנימיים הם ספציפיים לכלל. כל כלל מתעד את הפרמטרים הזמינים שלו ב-Built-in Policies.
אם לכלל יש פרמטרים אך אתה לא מציין אותם, משתמשים בברירות המחדל המובנות של הכלל. משתמשים שלא מגדירים policyParams בכלל מקבלים התנהגות זהה לגרסאות קודמות.
מפתחות לא ידועים בתוך בלוק פרמטרים של כלל מתעלמים בשקט בעת הפעלת hook אך מסומנים כאזהרות כאשר אתה מריץ failproofai policies.
hint (cross-cutting)
Type: string (optional)
הודעה שמצורפת לסיבה כאשר כלל מחזיר deny או instruct. השתמש בה כדי להדריך את Claude עם הנחיות ניתנות לפעולה מבלי לשנות את הכלל עצמו.
עובד עם כל סוג כלל — מובנה, מותאם (custom/), קונבנציה של פרויקט (.failproofai-project/), או קונבנציה של משתמש (.failproofai-user/).
block-force-push מסרב, Claude רואה: “Force-pushing is blocked. Try creating a fresh branch instead.”
ערכים שאינם string ומחרוזות ריקות מתעלמים בשקט. אם hint אינו מוגדר, ההתנהגות לא משתנית (תואמת לאחור).
customPoliciesPath
Type: string (absolute path)
נתיב לקובץ JavaScript המכיל כללים מותאמים לחטיפה. זה מוגדר באופן אוטומטי על ידי failproofai policies --install --custom <path> (הנתיב מומר להנחלה מוחלטת לפני שהוא מאוחסן).
הקובץ נטען מחדש בכל אירוע hook - אין קשימון. ראה Custom Policies לפרטי יצירה.
כללים מבוססי קונבנציה
בנוסף ל-customPoliciesPath המפורש, failproofai גם גילוי ותיקטון באופן אוטומטי קבצי כללים מספריות .failproofai/policies/:
| Level | Directory | Scope |
|---|---|---|
| Project | .failproofai/policies/ | משותף עם הצוות דרך בקרת גרסאות |
| User | ~/.failproofai/policies/ | אישי, חל על כל הפרויקטים |
*policies.{js,mjs,ts} נטענים (למשל security-policies.mjs, workflow-policies.js). קבצים אחרים בספרייה מתעלמים.
אין צורך בקונפיגורציה: כללי קונבנציה אינם דורשים ערכים ב-policies-config.json. פשוט צניח קבצים לתוך הספרייה והם יילקחו בחדוות אירוע hook הבא.
טעינת איחוד: גם ספריות קונבנציה של פרויקט וגם משתמש נסרקות. כל הקבצים המתאימים משתי הרמות נטענים (בניגוד ל-customPoliciesPath שמשתמש בניצחון ההיקף הראשון).
ראה Custom Policies לפרטים ודוגמאות נוספים.
llm
Type: object (optional)
תצורת לקוח LLM לכללים העורכים קריאות AI. לא נדרש לרוב ההגדרות.
ניהול תצורה מה-CLI
הפקודותpolicies --install ו-policies --uninstall כותבות לקובץ הגדרות hook של ה-CLI של הסוכן שלך (נקודות הכניסה של hook), בעוד policies-config.json הוא הקובץ שאתה מנהל ישירות. השניים נפרדים:
- הגדרות סוכן CLI — אומר לסוכן להתקשר
failproofai --hook <event>בכל שימוש בכלי:- Claude Code:
~/.claude/settings.json(user),<cwd>/.claude/settings.json(project),<cwd>/.claude/settings.local.json(local) - OpenAI Codex:
~/.codex/hooks.json(user),<cwd>/.codex/hooks.json(project) — Codex אין לו היקףlocal - GitHub Copilot CLI (beta):
~/.copilot/hooks/failproofai.json(user),<cwd>/.github/hooks/failproofai.json(project) — Copilot אין לו היקףlocal. ערכי Hook משתמשים בשדות הפקודהbash/powershellשל Copilot עםtimeoutSec; הקובץ נושא סימןversion: 1ברמה עליונה. תמיכת Copilot CLI היא beta בזמן שאנו מאמתים את סכמת רשומותevents.jsonl(שהתיעוד הציבורי אינו מציין) מול יותר הפעלות בעולם האמיתי. - Cursor Agent (beta):
~/.cursor/hooks.json(user),<cwd>/.cursor/hooks.json(project) — Cursor אין לו היקףlocal. ערכי Hook משתמשים בצורה{type, command, timeout}בצורת Claude (אין חלוקהbash/powershell), אך מאוחסנים תחת מפתחות אירוע camelCase (preToolUse,beforeSubmitPrompt, …) במערך שטוח לפי סכמת hooks של Cursor; הקובץ נושא סימןversion: 1ברמה עליונה. המטפל קנוני camelCase → PascalCase דרךCURSOR_EVENT_MAPכך שכללים מובנים קיימים יורים ללא שינוי. תמיכת Cursor Agent היא beta בזמן שאנו מאמתים את תמלול של Cursor על דיסק (לא מצוין בתיעוד הציבורי) מול יותר התקנות בעולם האמיתי. - OpenCode (beta):
~/.config/opencode/opencode.json+~/.config/opencode/plugins/failproofai.mjs(user),<cwd>/.opencode/opencode.json+<cwd>/.opencode/plugins/failproofai.mjs(project) — OpenCode אין לו היקףlocal. בניגוד לשישת ה-CLIs האחרים, OpenCode אין לו מערכת hook חיצונית: הוא טוען בתהליך JS/TS plugins שנרשמו במפורש דרך המערךplugin: []ב-opencode.json(auto-discovery מ-.opencode/plugins/אינו כיצד plugins טוענים ב-opencode v1.14.33). Install טוען קובץ זעיר שנוצר של plugin שקורא subprocess לבינארי failproofai ותורגם את התגובה JSON של הבינארי חזרה לסמנטיקה של plugin:throw new Error()להכחשת אירוע כלי (מבטל את קריאת הכלי),client.session.prompt(...)עבור instruct וגם עבורStop/SubagentStopdeny (שולח את סיבת ההכחשה כהודעת המשתמש הבאה — ערוץ force-retry היחיד מאזsession.idleהוא notification-only והשלכת זה אינו פעולה), ו-no-op לאפשרות. קובץ קנוני שם של כלי (lowercase → PascalCase דרךOPENCODE_TOOL_MAP) וקלידי arg של כניסת כלי (camelCase → snake_case דרךOPENCODE_TOOL_INPUT_MAPעבורRead/Write/Edit, למשלfilePath→file_path,oldString→old_string) לפני שידור לבינארי, כך שבנויים של בדיקת נתיב כמוblock-read-outside-cwd,block-env-files, ו-block-secrets-writeיורים ללא שינוי על קריאות כלי OpenCode. הפעלות חיות בבסיס נתונים SQLite של opencode ב-~/.local/share/opencode/opencode.db; מערכת הדפים של הלוח קוראת אותם דרךopencode db --format jsonו-opencode export <id>. תמיכת OpenCode היא beta בזמן שאנו מאמתים התנהגות בחדוות וגרסאות מול יותר הפעלות בעולם האמיתי. ראה את תיעוד plugins של OpenCode. - Pi (beta):
~/.pi/agent/settings.json(user),<cwd>/.pi/settings.json(project) — Pi אין לו היקףlocal. Pi טוען חבילות הרחבה TypeScript בעת ההפעלה; הקובץ הגדרות הוא מערך string שטוח{"packages": ["./relative/path", …]}. failproofai כותב ערך מערך packages אחד המצביע על ספרייהpi-extension/משובצת שלו. ההרחבה מבחינים פנימיים במחזור subscriptions של Pi כדיtool_call/user_bash/input/session_startופירות לתוךfailproofai --hook <Event> --cli pi; המטפל קנוני underscore_lower_snake_case → PascalCase דרךPI_EVENT_MAPכך שכללים מובנים קיימים יורים ללא שינוי. קלידי arg של כניסת כלי גם קנוניים דרךPI_TOOL_INPUT_MAP(Pi’s Read / Write / Edit מסירהpathרמוק מאשרfile_path; קלידי המפתח העליון מאפשרblock-env-filesו-block-secrets-writeלירות —block-read-outside-cwdכבר היהpathfallback). תמיכת Pi היא beta בזמן שעומדת ל-stabilize. - Gemini CLI (beta):
~/.gemini/settings.json(user),<cwd>/.gemini/settings.json(project) — Gemini אין לו היקףlocal(הוא מתעד היקףsystemב-/etc/gemini-cli/settings.jsonאשר failproofai לא חשוף). Hook entries משתמשים בצורה{type, command, timeout}של Claude עטופה בסכמת matcher של Gemini{matcher, hooks: [...]}עםmatcher: "*"כברירת מחדל. אירועים הם PascalCase (SessionStart,BeforeAgent,AfterAgent,BeforeModel,AfterModel,BeforeToolSelection,BeforeTool,AfterTool,PreCompress,Notification,SessionEnd); המטפל ממפה לשמות קנוניים של Claude דרךGEMINI_EVENT_MAP. שמות כלים הם snake_case (run_shell_command,read_file,write_file,replace, …) — המטפל מקנוני דרךGEMINI_TOOL_MAPכך שכללים מובנים קיימים יורים ללא שינוי. משקיף מדיניות משיג צורה שטוחה של Gemini{decision: "deny", reason}(מועדפת לכל Golden Rule exit-0 של Gemini),{hookSpecificOutput: {hookEventName, additionalContext}}להזרקת הקשר ב-BeforeAgent / AfterTool / SessionStart, ו-{decision: "block", reason}ב-AfterAgent לסמנטיקה force-retry. תמיכת Gemini CLI היא beta בזמן שאנו מגדילים כיסוי בעולם האמיתי. ראה את תיעוד hooks של Gemini CLI.
- Claude Code:
policies-config.json— אומר ל-failproofai אילו כללים להעריך וויים פרמטרים (משותף בכל סוכני CLI)
--cli claude|codex|copilot|cursor|opencode|pi|gemini למטרה סוכן ספציפי (space-separated או חוזר לכל תת-קבוצה):
--cli מושמט, failproofai מגלה אילו סוכני CLI מותקנים (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which gemini):
- CLI אחד detected — בחר אוטומטי את זה CLI ללא הנמקה.
- מספר CLIs detected בטרמינל אינטראקטיבי — מציג בחירה יחידה במקלדת בחצים מקובצת לחלק
Detected (N)(עם שורה מצטברתInstall for all N detected+ כל CLI detected בנפרד) וחלקNot installed (M) · install hooks ahead of timeרשימה כל CLI שלא detected כאפשרות forward-install (↑↓ להעברה, Enter לבחירה, ^C לצאת). זרימת ה-uninstall מציגה רק את חלק Detected. - מספר CLIs detected בריצה לא אינטראקטיבית (CI, no TTY) — מתקן להמון detected CLIs ללא הנמקה.
- None detected — חוזר ל-
claude, עם אזהרה שלא binary agent נמצא ב-PATH; פקודת hook עדיין כתובה כך היא מופעלת ברגע שאתה מתקן אחד.
policies-config.json ישירות בכל עת; שינויים ישפיעו מיד על אירוע hook הבא ללא צורך בהפעלה מחדש.
דוגמה: תצורה ברמת פרויקט עם ברירות מחדל של צוות
Commit.failproofai/policies-config.json לריפו שלך:
.failproofai/policies-config.local.json (gitignored) עבור דריסות אישיות ללא הפרעה לעמיתים.
