Skip to main content
failproofai משתמש בקובצי הגדרות JSON כדי לשלוט באילו מדיניות פעילה, כיצד הן מתנהגות, ומאיפה מדיניות מותאמת אישית נטענת. ההגדרות מעוצבות להיות קלות לשיתוף עם הצוות שלך - בצע commit אליהם למאגר שלך וכל מפתח יקבל את אותה רשת הבטיחות עבור agent.

היקפי הגדרות

יש שלושה היקפי הגדרות, המוערכים לפי סדר עדיפויות: כאשר failproofai מקבל אירוע hook, הוא טוען ומוזג את כל שלושת הקובצים שקיימים בספריית העבודה הנוכחית.

כללי מיזוג

enabledPolicies - האיחוד של כל שלושת ההיקפים. מדיניות שמופעלת בכל רמה פעילה.
policyParams - ההיקף הראשון שמגדיר פרמטרים לmדיניות מסוימת מנצח לחלוטין. אין מיזוג עמוק של ערכים בתוך הפרמטרים של המדיניות.
customPoliciesPath - ההיקף הראשון שמגדיר אותו מנצח. llm - ההיקף הראשון שמגדיר אותו מנצח.

פורמט קובץ הגדרות


התייחסות לשדות

enabledPolicies

סוג: string[] רשימת שמות המדיניות שיש להפעיל. השמות חייבים להתאים בדיוק לזהויות המדיניות המוצגות על ידי failproofai policies. ראה Built-in Policies לקבלת הרשימה המלאה. מדיניות שלא בenabledPolicies אינן פעילות, גם אם יש להן רשומות בpolicyParams.

policyParams

סוג: Record<string, Record<string, unknown>> עקיפות פרמטרים לכל מדיניות. המפתח החיצוני הוא שם המדיניות; המפתחות הפנימיים ספציפיים למדיניות. כל מדיניות מתעדת את הפרמטרים הזמינים שלה בBuilt-in Policies. אם למדיניות יש פרמטרים אך אתה לא מציין אותם, משמשים ברירות המחדל המובנות של המדיניות. משתמשים שאינם מגדירים את policyParams כלל מקבלים התנהגות זהה לגרסאות קודמות. מפתחות לא ידועים בתוך בלוק הפרמטרים של מדיניות מתעלמים בשקט בזמן הפעלת hook אך מסומנים כאזהרות כאשר אתה מריץ failproofai policies.

hint (חוצה פעולות)

סוג: string (בחירה) הודעה שצורפה לסיבה כאשר מדיניות מחזירה deny או instruct. השתמש בה כדי לתן לClaude הדרכה פעולה ישירה ללא שינוי המדיניות עצמה. עובד עם כל סוג מדיניות — מובנה, מותאם אישית (custom/), מוסכמת פרויקט (.failproofai-project/), או מוסכמת משתמש (.failproofai-user/).
כאשר block-force-push מסרב, Claude רואה: “Force-pushing is blocked. Try creating a fresh branch instead.” ערכים שאינם מחרוזות ומחרוזות ריקות מתעלמים בשקט. אם hint לא מוגדר, ההתנהגות לא משתנה (תאימות לאחור).

customPoliciesPath

סוג: string (נתיב מוחלט) נתיב לקובץ JavaScript המכיל מדיניות hook מותאמת אישית. זה מוגדר באופן אוטומטי על ידי failproofai policies --install --custom <path> (הנתיב מוחזר לערך מוחלט לפני שנשמר). הקובץ נטען מחדש בכל אירוע hook - אין caching. ראה Custom Policies לפרטי כתיבה.

מדיניות מבוססת מוסכמה

בנוסף לעקיפה ההפנייה customPoliciesPath, failproofai גילוי ויוטען באופן אוטומטי קובצי מדיניות מתיקיות .failproofai/policies/: התאמת קובץ: רק קובצים התואמים ל*policies.{js,mjs,ts} נטענים (לדוגמה security-policies.mjs, workflow-policies.js). קובצים אחרים בספרייה מתעלמים. אין צורך בהגדרה: מדיניות מוסכמה אינה דורשת רשומות בpolicies-config.json. פשוט שים קובצים בספרייה והם אוסף בהתקדמות hook הבא. טעינה איחוד: גם ספריות מוסכמה של פרויקט וגם משתמש סרוקות. כל קובצים תואמים משתי הרמות נטענים (שלא כמו customPoliciesPath אשר משתמש בראשון-היקף-מנצח). ראה Custom Policies לפרטים נוספים וודוגמאות.

llm

סוג: object (בחירה) הגדרות לקוח LLM למדיניות שמבצעות קריאות AI. לא נדרש לרוב ההגדרות.

ניהול הגדרות מ-CLI

הפקודות policies --install וpolicies --uninstall כותבות לקובץ הגדרות hook של ה-CLI של ה-agent (נקודות הכניסה של hook), בעוד שpolicies-config.json הוא הקובץ שאתה מנהל ישירות. שניהם נפרדים:
  • הגדרות Agent CLI — אומרות ל-agent להתקשר לfailproofai --hook <event> בכל שימוש בכלי:
    • Claude Code: ~/.claude/settings.json (משתמש), <cwd>/.claude/settings.json (פרויקט), <cwd>/.claude/settings.local.json (מקומי)
    • OpenAI Codex: ~/.codex/hooks.json (משתמש), <cwd>/.codex/hooks.json (פרויקט) — Codex אין לו היקף local
    • GitHub Copilot CLI (beta): ~/.copilot/hooks/failproofai.json (משתמש), <cwd>/.github/hooks/failproofai.json (פרויקט) — Copilot אין לו היקף local. רשומות Hook משתמשות בשדות פקודה bash/powershell של Copilot עם מפתח OS עם timeoutSec; הקובץ נושא סימן version: 1 ברמה העליונה. תמיכת Copilot CLI היא beta בעודנו מאמתים את סכימת רשומת events.jsonl (שהדוקים הציבוריים אינם מציינים) מול יותר ישיבות בעולם האמיתי.
    • Cursor Agent (beta): ~/.cursor/hooks.json (משתמש), <cwd>/.cursor/hooks.json (פרויקט) — Cursor אין לו היקף local. רשומות Hook משתמשות בצורה בעיצוב Claude {type, command, timeout} (לא פיצול 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 (משתמש), <cwd>/.opencode/opencode.json + <cwd>/.opencode/plugins/failproofai.mjs (פרויקט) — OpenCode אין לו היקף local. בשונה מחמש ה-CLI האחרים, OpenCode אין לו מערכת hook פקודה חיצונית: הוא טוען בתוך התהליך תוספי JS/TS שנרשמו במפורש דרך מערך plugin: [] בopencode.json (גילוי אוטומטי מ.opencode/plugins/ אינו כיצד תוספים נטענים ב-opencode v1.14.33). ההתקנה מושכת שים של תוספון שנוצר בזריעה שקוראות ב-subprocess את הבינארי failproofai ומתרגמת את התגובה JSON בעיצוב Claude של הבינארי חזרה לסמנטיקה של תוספון: throw new Error() עבור deny של אירוע כלי (מבטל את קריאת הכלי), client.session.prompt(...) עבור instruct וגם עבור deny של Stop / SubagentStop (משדרת את סיבת הreject כהודעת המשתמש הבאה — הערוץ היחיד כלומל-retry מכיוון שsession.idle הוא התראה בלבד ו-throwing ממנו הוא no-op), ו-no-op עבור allow. השם מנרמל גם שמות כלים (אותיות קטנות → PascalCase דרך OPENCODE_TOOL_MAP) וגם מפתחות טיעון קלט כלי (camelCase → snake_case דרך OPENCODE_TOOL_INPUT_MAP עבור Read / Write / Edit, לדוגמה filePathfile_path, oldStringold_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 בעודנו מאמתים התנהגות על פני גרסאות ומול יותר ישיבות בעולם האמיתי. ראה את דוקים של תוספי OpenCode.
    • Pi (beta): ~/.pi/agent/settings.json (משתמש), <cwd>/.pi/settings.json (פרויקט) — Pi אין לו היקף local. Pi טוען חבילות הרחבה TypeScript בעת ההתחלה; קובץ ההגדרות הוא מערך מחרוזות שטוח {"packages": ["./relative/path", …]}. failproofai כותב רשומת מערך פקיות אחת המצביעה על תיקיית pi-extension/ המכוסה שלה. ההרחבה מחתום פנימית על אירועי tool_call / user_bash / input / session_start של Pi ופורקת failproofai --hook <Event> --cli pi; המטפל מנרמל underscore_lower_snake_case → PascalCase דרך PI_EVENT_MAP כך שמדיניות מובנות קיימות נשרפות ללא שינוי. טיעון קלט כלי מנורמל גם דרך PI_TOOL_INPUT_MAP (Read / Write / Edit של Pi משדרות path ולא file_path; מיפוי המפתח ברמה העליונה מאפשר לblock-env-files וblock-secrets-write נשרפות — block-read-outside-cwd כבר היה פנייה חוזרת של path). תמיכת Pi היא beta בזמן שה-API הרחבה של Pi וסכימת יומן הישיבה מתייצבות.
    • Hermes (hermes-agent): ~/.hermes/config.yaml (היקף משתמש בלבד — Hermes אין לו תצורת פרויקט/מקומית). Hermes הוא שער Slack/Telegram, כך שהתקנה אחת מיירטת קריאות כלים מכל פלטפורמה (Slack/Telegram/cli/cron) וגם תוך-אג’נטים. רשומות Hook הן זוג {command, timeout} (timeout בשניות) תחת מפת hooks: שבאופן events snake_case של Hermes (pre_tool_call / post_tool_call / on_session_start / on_session_end / subagent_stop); המטפל מנרמל אירועים דרך HERMES_EVENT_MAP וגם שמות כלים דרך HERMES_TOOL_MAP כך שמדיניות מובנות נשרפות ללא שינוי. התצורה נערכת דרך תעודת YAML דורכת-שומרת-הערות Document כך שהגדרות אחרות של המנהל שורדות, והתקנה מוגדרת hooks_auto_accept: true כך השער חסר-TTY מריץ את ה-hooks ללא בקשת הסכמה. המעריך משדרת חוזה {"decision":"block","reason"} stdout של Hermes (Hermes מתעלם מקודי יציאה). מגבלות: Hermes אין להשקע stop Stop של turn-end, כך שהrequire-*-before-stop מובנה לעולם לא נשרפים עבורו (בלא הגבלה, לא שבור); instruct מדרדר ל-allow-עם-logged-note (אין ערוץ הקשר נוסף); ו-redaction-secret של פלט (sanitize-*) לא יכול לשכתב פלט כלים דרך חוזה shell-hook. Hermes הוא גם מקור ביקורת offline — הדשבורד קורא ישיבות שער שלו ישירות מ~/.hermes/state.db.
  • policies-config.json — אומר ל-failproofai איזו מדיניות להעריך ועם אילו פרמטרים (משותף על פני כל ה-CLI של ה-agent)
עבור --cli claude|codex|copilot|cursor|opencode|pi|hermes למטרה סוכן ספציפי (space-separated או חוזר לכל תת-קבוצה):
כאשר --cli מושמט, failproofai מגלה אילו CLI של agent מותקנות (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which hermes):
  • CLI אחד זוהה — בחירה אוטומטית של ה-CLI הזה ללא הנחיות.
  • מספר CLI זוהו בטרמינל אינטראקטיבי — מציג הנחיות בחירה חד-בחירה בחצי-מקלדת מקובצות לחלק Detected (N) (עם שורה מצומצמת Install for all N detected + כל CLI זוהה בנפרד) וחלק Not installed (M) · install hooks ahead of time הרשום כל CLI לא זוהה שנתמך כאפשרות התקנה קדימה (↑↓ להזיז, Enter בחר, ^C יצא). זרימת ההסרה מציגה רק את החלק Detected.
  • מספר CLI זוהו בריצה לא אינטראקטיבית (CI, ללא TTY) — מתקנת את כל CLI זוהה ללא הנחיות.
  • אף אחד לא זוהה — יורדת חזרה לclaude, עם אזהרה שלא מצא בינארי agent ב-PATH; פקודת ה-hook עדיין נכתבה כך היא מופעלת ברגע שתתקין אחד.
אתה יכול לערוך policies-config.json ישירות בכל עת; השינויים נכנסים לתוקף מיד באירוע hook הבא ללא צורך בהפעלה מחדש.

דוגמה: תצורה ברמת פרויקט עם ברירות ברירת מחדל לצוות

Commit .failproofai/policies-config.json למאגר שלך:
כל מפתח יכול ליצור .failproofai/policies-config.local.json (מתוך gitignore) לעקיפות אישיות ללא הפרת עמיתים.