- קובץ Workflow עובד ל-Code Review אוטומטי על כל Pull Request
- קובץ Workflow לסריקת אבטחה (Security Audit) על Push ל-main
- קובץ Workflow ליצירת Release Notes אוטומטיים על כל Tag
- תבנית Issue-to-PR — Workflow שממיר Issue עם Label ל-Draft PR
- קובץ CLAUDE.md עם סעיף CI/CD ייעודי + קובץ .claude/rules/ לכללים מותנים
- מודל עלויות מחושב לפרויקט שלכם — עלות חודשית, ROI, ותקציב
- לפחות Workflow מותאם אישית אחד (תיעוד, i18n, טסטים, או מיגרציות)
- תוכלו להתקין את GitHub App של Claude Code ולהגדיר את כל ה-Secrets הנדרשים ב-Repository
- תוכלו לכתוב GitHub Actions Workflows מלאים שמפעילים Claude Code על PRs, pushes, ו-tags
- תוכלו להעריך את העלות החודשית של CI עם Claude ולבנות מודל תקציבי לפרויקט
- תוכלו להתאים את ההוראות ב-CLAUDE.md לסביבת CI באמצעות כללים מותנים וקבצי rules
- תוכלו לשכפל את הדפוסים שלמדתם לכל מערכת CI/CD — GitLab, Jenkins, CircleCI או Azure DevOps
- פרקים קודמים: פרק 1 (Headless Mode) — שליטה ב-
-p,--bare, פלט JSON, וסקריפטים - כלים נדרשים: חשבון GitHub (חינם), מאגר Git פעיל לניסויים, מפתח ANTHROPIC_API_KEY, Claude Code מותקן (v2.1.81+)
- ידע נדרש: בסיס ב-Git ו-Pull Requests, היכרות בסיסית עם YAML, הבנת מושגי CI/CD
- זמן משוער: 3-4 שעות | עלות משוערת: $5-15 (טוקנים לריצות CI)
בפרק 1 בנית את ארגז הכלים של מצב Headless — סקריפטים שמפעילים claude -p --bare, מנתחים JSON, מעבדים קבצים באצווה, ומריצים משימות מתוזמנות בלי התערבות אנושית. עכשיו אנחנו לוקחים את הדפוסים האלה ומכניסים אותם ל-GitHub Actions כדי שהם ירוצו אוטומטית — על כל Pull Request, על כל Push ל-main, ועל כל Release חדש. בפרק 3 ניקח את הצעד הבא ונעבור מ-CLI לקוד: Agent SDK ב-Python, שנותן לכם שליטה מתוכנתת מלאה על Claude מתוך הקוד שלכם.
| מונח (English) | תרגום | הסבר |
|---|---|---|
| CI/CD | אינטגרציה רציפה / פריסה רציפה | תהליך אוטומטי שבודק, בונה ומפרסם קוד בכל שינוי — Continuous Integration / Continuous Deployment |
| GitHub Action | פעולת GitHub | יחידת אוטומציה שרצה בתשתית GitHub בתגובה לאירוע (push, PR, schedule, comment) |
| Workflow | זרימת עבודה | קובץ YAML שמגדיר מתי ואיך פעולות ירוצו — נמצא ב-.github/workflows/ |
| claude-code-action@v1 | הפעולה הרשמית | ה-GitHub Action הרשמי של Anthropic לשילוב Claude Code בצנרת CI/CD |
| GitHub App | אפליקציית GitHub | ישות מאומתת שיכולה לפעול על repositories — נדרשת כדי ש-Claude יוכל להגיב על PRs |
| Secrets | סודות | משתנים מוצפנים באחסון GitHub שזמינים ל-Workflows בלי לחשוף את הערך בלוגים |
| Trigger | מפעיל / טריגר | האירוע שגורם ל-Workflow לרוץ: push, pull_request, issue, schedule, workflow_dispatch |
| SBOM | רשימת חומרים של תוכנה | Software Bill of Materials — רשימה מלאה של כל התלויות בפרויקט, לניתוח אבטחה |
| Release Notes | הערות גרסה | תיאור ידידותי של השינויים בגרסה חדשה — מיועד למשתמשים ובעלי עניין, לא רק למפתחים |
| Draft PR | PR טיוטה | Pull Request במצב טיוטה שלא ניתן למזג עד שמישהו מסמן אותו ידנית כ-Ready for Review |
| Path Filtering | סינון נתיבים | הגבלת ה-Workflow לקבצים ספציפיים — למשל רק src/** — כדי לחסוך טוקנים ולמקד את הסריקה |
| Security Gate | שער אבטחה | מנגנון שחוסם מיזוג קוד אם נמצאו חולשות קריטיות — Claude מדרג findings וה-CI מגיב בהתאם |
Claude Code ב-CI/CD — החזון
CI/CD — ראשי תיבות של Continuous Integration ו-Continuous Deployment — הוא התהליך שבו כל שינוי בקוד עובר אוטומטית בדיקות, בנייה, ופריסה. כל מפתח מכיר את הרצף: אתה דוחף קוד, הבדיקות רצות, ואם הכל ירוק — הקוד עובר הלאה. זה מה שעושה GitHub Actions, GitLab CI, Jenkins, CircleCI, ומערכות CI/CD אחרות.
אבל יש בעיה מהותית: הבדיקות המסורתיות הן בינאריות. הטסט עובר או נכשל. הלינטר מוצא שגיאת תחביר או לא. SAST (כלי סריקת אבטחה סטטי) מזהה Pattern מוכר או לא. אין "חוות דעת". אין הבנת הקשר עסקי. אין שיקול דעת. זה כמו לשים שומר בכניסה לבנק עם רשימת 10 חוקים מודפסת — הוא יבדוק אותם בקפידה, אבל לא יבחין בהתנהגות חשודה שלא כתובה ברשימה.
Claude Code ב-CI/CD משנה את המשחק: במקום בדיקות בינאריות בלבד, אתם מוסיפים שכבה של בינה מלאכותית שמבינה הקשר. Claude קורא את ה-Diff, מבין מה הקוד עושה ולמה, מזהה באגים פוטנציאליים שלא נמצאים ברשימת כללים, מציע שיפורים מבוססי ניסיון, ואפילו כותב קוד או תיעוד בעצמו — הכל אוטומטית, על כל PR, 24/7.
חשבו על זה כמו להוסיף מפתח בכיר לצוות שבודק כל PR. רק שהמפתח הזה זמין תמיד, לא מתעייף, לא מפספס בגלל לחץ, ועולה סנטים במקום שכר חודשי.
עלות ממוצעת של Code Review אוטומטי על PR בינוני (100-300 שורות) עם Claude Sonnet. לשם השוואה: מפתח בכיר שבודק PR לוקח 15-30 דקות. על שכר של 200 ש"ח/שעה — זה 50-100 ש"ח לריביו אחד. Claude לא מחליף את ה-Review האנושי — הוא מעשיר אותו. הבודק האנושי מקבל PR "מנוקה" עם הערות Claude, ויכול להתמקד בשאלות אדריכליות ועסקיות שClaude לא יתפוס.
הנה מה שנהיה אפשרי כש-Claude Code רץ בצנרת:
- Code Review שמבין Business Logic: לא רק "שורה 42 ארוכה מדי" — אלא "הפונקציה הזו לא מטפלת במקרה שהמשתמש ישראלי ומשלם בש"ח — צריך לטפל בהמרת מטבע לפני שמירה ל-DB"
- סריקות אבטחה שמסבירות למה: לא רק "SQL Injection detected" — אלא "הפרמטר user_id מגיע ישירות מ-req.params בלי סניטיזציה. תוקף יכול לשלוח ערך זדוני ולגשת לנתונים של משתמשים אחרים"
- Release Notes ידידותיים: במקום רשימת commits טכנית (fix: resolve auth bug #1234), מקבלים תיאור ברור: "תוקנה בעיה שלפעמים גרמה למשתמשים להתנתק באמצע פעולה"
- Issue → PR אוטומטי: מישהו מדווח על באג בעברית, Claude מנתח את הבעיה, מאתר את הקוד הרלוונטי, כותב Fix, מריץ טסטים, ופותח Draft PR — בלי התערבות אנושית
- בדיקת תרגומים: על כל PR, Claude מוודא שכל String חדש שמוצג למשתמש קיים גם בקובץ התרגום העברי
חשבו על הפרויקט שלכם. רשמו 3 דברים שאתם בודקים ידנית בכל PR שמגיע. לדוגמה: "שהטסטים עוברים", "שאין secrets בקוד", "שיש תיעוד לפונקציות חדשות", "ש-error handling קיים". אלה המועמדים הראשונים לאוטומציה עם Claude ב-CI.
מה Claude Code ב-CI לא עושה
חשוב להבין גם את המגבלות. Claude Code ב-CI לא מחליף:
- Unit Tests: Claude יכול לזהות קוד בלי טסטים ואפילו לכתוב טסטים, אבל הוא לא מריץ אותם (ה-CI runner מריץ). טסטים אוטומטיים שעוברים הם עדיין הבסיס
- Type Checking: TypeScript compiler או mypy תופסים שגיאות טיפוס דטרמיניסטית — Claude לא צריך לעשות את זה
- Linting ו-Formatting: ESLint, Prettier, Black — כלים אלה דטרמיניסטיים ומהירים. אל תבזבזו טוקנים על בדיקות שהם עושים טוב יותר
- Review אנושי: Claude לא מבין את ההקשר העסקי המלא, את החזון של המוצר, או את הפוליטיקה הצוותית. הוא כלי שמשלים את הבודק האנושי, לא מחליף אותו
המודל הנכון: כלים מסורתיים (Linter + Tests + SAST) מטפלים בשכבה הדטרמיניסטית. Claude מוסיף את השכבה ההיוריסטית — הבנה, הקשר, שיקול דעת. האדם מוסיף את השכבה העסקית — האם השינוי הזה נכון מבחינת המוצר?
משוואת הערך — מתי CI עם Claude משתלם
לפני שרצים להתקין, כדאי לעשות חשבון קר. לא כל פרויקט צריך CI עם Claude, ויש מצבים שבהם ההשקעה לא מצדיקה את עצמה.
הנוסחה:
ערך חודשי = (זמן שנחסך למפתח לכל PR) x (מספר PRs בשבוע x 4) x (שכר שעתי של מפתח)
אם ערך חודשי גבוה יותר מעלות טוקנים חודשית — שווה לאמץ.
| סיטואציה | החלטה | סיבה |
|---|---|---|
| צוות 3+ מפתחים, 20+ PRs בשבוע | כן, מייד | חיסכון של שעות review בשבוע, עלות טוקנים זניחה ביחס לשכר הצוות |
| מפתח יחיד, 5-10 PRs בשבוע | כן, לאבטחה | עלות נמוכה מאוד, ותפיסת באג אבטחה אחד שווה יותר מכל עלות הטוקנים של שנה |
| Open Source עם contributors חיצוניים | כן, Review + Security | Contributors חיצוניים לא מכירים את ה-codebase — Claude עוזר לשמור על עקביות |
| פרויקט לא פעיל, PR אחד בחודש | לא כדאי | ההשקעה בהתקנה והתחזוקה לא מצדיקה את עצמה |
התקנת claude-code-action@v1
הפעולה הרשמית של Anthropic נקראת claude-code-action@v1 (הנתיב המלא: anthropics/claude-code-action@v1). היא זמינה ב-GitHub Marketplace, מתוחזקת על ידי Anthropic, ומספקת אינטגרציה עמוקה עם GitHub — כולל תגובות על PRs, הגבה על issues, inline comments על שורות קוד ספציפיות, ותמיכה ב-@claude mention.
יש שני מסלולי התקנה. המסלול המהיר מתאים לרוב האנשים, המסלול הידני מתאים לארגונים שדורשים אישורים מפורשים.
מסלול 1 — המהיר (מומלץ)
מתוך Claude Code, בסשן אינטראקטיבי, הריצו:
/install-github-app
הפקודה הזו מאתחלת אוטומטית GitHub App, מייצרת Private Key, מגדירה את כל ההרשאות הנדרשות, ומנחה אתכם צעד אחרי צעד. בסוף התהליך, תקבלו APP_ID ו-APP_PRIVATE_KEY שצריך להוסיף כ-Secrets ב-Repository. זה המסלול הכי מהיר — דקות ספורות מהתחלה ועד Workflow עובד.
מסלול 2 — ידני
אם אתם צריכים שליטה מלאה (או שהארגון שלכם דורש אישורים על כל App), עקבו אחרי הצעדים:
- היכנסו ל-GitHub → Settings → Developer Settings → GitHub Apps → New GitHub App
- תנו שם לאפליקציה (לדוגמה:
claude-code-review-myteam). השם חייב להיות ייחודי בכל GitHub - הגדירו הרשאות (Permissions): Read and Write על Pull Requests, Issues, ו-Contents. Read בלבד על Metadata
- ב-Webhook: אפשר להשאיר לא פעיל (ה-Action מטפל בעצמו)
- צרו Private Key (לחצו Generate a private key) — יירד קובץ PEM. שמרו אותו במקום בטוח
- רשמו את ה-App ID מדף הסקירה של ה-App (מספר בן 6-7 ספרות)
- לכו ל-Install App → בחרו את ה-Repository או ה-Organization שרוצים
הגדרת Secrets ב-Repository
בכל מסלול, חייבים להגדיר 3 Secrets ב-Repository שלכם ב-GitHub. ככה:
| Secret Name | תיאור | איפה מקבלים |
|---|---|---|
ANTHROPIC_API_KEY |
מפתח ה-API של Anthropic — זה מה ש-Claude Code משתמש בו כדי לתקשר עם ה-API | console.anthropic.com → API Keys → Create Key |
APP_ID |
מזהה ה-GitHub App — מספר מזהה ייחודי | דף ה-GitHub App שיצרתם → General → App ID |
APP_PRIVATE_KEY |
המפתח הפרטי של ה-App — קובץ PEM שלם, כולל שורות BEGIN/END | הקובץ .pem שירד כשיצרתם Private Key |
איך מוסיפים Secret: Repository → Settings → Secrets and variables → Actions → New repository secret. מדביקים את הערך (למפתח PEM — מדביקים את כל תוכן הקובץ, כולל שורות ה-BEGIN ו-END).
מה הטעות: לשים את ה-ANTHROPIC_API_KEY ישירות בקובץ ה-Workflow YAML, ב-CLAUDE.md, או בכל קובץ שנמצא ב-Git.
למה זה קורה: כי רוצים לבדוק מהר שזה עובד, ו"רק לרגע" נדמה לא מסוכן.
מה לעשות במקום: תמיד השתמשו ב-GitHub Secrets (${{ secrets.ANTHROPIC_API_KEY }}). אם בטעות דחפתם מפתח ל-Git — גם אם מחקתם את ה-commit מייד — המפתח נשאר בהיסטוריית Git ואפשר למצוא אותו. במקרה כזה: (1) החליפו מייד ב-Anthropic Console, (2) בטלו את המפתח הישן, (3) עדכנו את ה-Secret ב-GitHub עם המפתח החדש.
פתחו את ה-Repository שלכם ב-GitHub, לכו ל-Settings → Secrets and variables → Actions. ווודאו שיש ANTHROPIC_API_KEY. אם אין — צרו מפתח ב-console.anthropic.com והוסיפו אותו כ-Secret עכשיו.
קובץ ה-Workflow הבסיסי
אחרי שה-Secrets מוגדרים, צריך ליצור את קובץ ה-Workflow. צרו תיקייה ובתוכה קובץ: .github/workflows/claude-review.yml.
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize]
issue_comment:
types: [created]
jobs:
review:
if: |
(github.event_name == 'pull_request') ||
(github.event_name == 'issue_comment' &&
contains(github.event.comment.body, '@claude'))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
בואו נפרק מה כל חלק עושה:
on: pull_request— ה-Workflow מופעל כשנפתח PR חדש (opened) או שדוחפים commits חדשים ל-PR קיים (synchronize)on: issue_comment— ה-Workflow מופעל כשמישהו כותב תגובה. ה-ifבשורה הבאה מסנן רק תגובות שמכילות@claudepermissions— מגדיר מה ל-Job מותר לעשות: לקרוא קוד (contents: read), לכתוב תגובות על PRs, ולכתוב על Issuesfetch-depth: 0— מוריד את כל ההיסטוריה של ה-repository (לא רק ה-commit האחרון) — חיוני כדי ש-Claude יוכל לחשב Diffanthropics/claude-code-action@v1— ה-Action הרשמי שמפעיל את Claude Code עם ה-Secrets שהגדרנו
צרו את הקובץ .github/workflows/claude-review.yml בפרויקט שלכם, עם התוכן למעלה. דחפו אותו ל-main. אחרי שהוא ב-main, צרו branch חדש, שנו משהו קטן (למשל הוסיפו שורה ל-README), פתחו PR, והמתינו — תוך 1-2 דקות Claude צריך להגיב עם Review.
בדיקה שההתקנה עובדת
אחרי שפתחתם PR ראשון, בדקו שלושה דברים:
- Claude הגיב: צריכה להיות תגובה מ-Claude על ה-PR עם ממצאי ה-Review. אם אין — בדקו ב-Actions Tab
- @claude עובד: כתבו תגובה "
@claude summarize this PR in Hebrew" ובדקו ש-Claude מגיב - Actions Tab ירוק: לכו ל-Actions → ובדקו שה-run סיים בהצלחה (סימן V ירוק)
אם משהו לא עובד — הבעיות הנפוצות:
| סימפטום | סיבה אפשרית | פתרון |
|---|---|---|
| Workflow לא רץ בכלל | הקובץ לא ב-main, או שם הקובץ שגוי | ודאו שהקובץ ב-.github/workflows/ ושדחפתם ל-main |
| Workflow רץ אבל נכשל | Secret חסר או שגוי (case-sensitive) | בדקו שמות ב-Settings → Secrets. ANTHROPIC_API_KEY ולא anthropic_api_key |
| Claude לא מגיב על PR | ה-App לא מותקן על ה-Repository הספציפי | GitHub App Settings → Install → בחרו Repository |
| @claude לא עובד | ה-if condition ב-Workflow לא מתאים |
ודאו שיש trigger על issue_comment עם filter על @claude |
| שגיאת permissions | חסרות הרשאות Pull Requests: Write | הוסיפו permissions: pull-requests: write ל-Job |
טיפ לדיבאג: ב-Actions Tab, לחצו על ה-run שנכשל, פתחו את הלוגים של כל Step. שגיאת השורש תופיע שם — בדרך כלל ברורה למדי.
Code Review אוטומטי על PRs
Code Review הוא ה-Use Case הקלאסי ומה שרוב הצוותים מתחילים איתו. הרעיון פשוט: על כל PR, Claude קורא את ה-Diff (השינויים), מנתח את הקוד בהקשר של שאר ה-codebase, ומפרסם תגובה מסודרת עם ממצאים מדורגים לפי חומרה — CRITICAL, WARNING, ו-SUGGESTION.
מה Claude בודק בברירת מחדל
בלי שום הגדרה מיוחדת, Claude מבצע סקירה מקיפה:
- איכות קוד (Code Quality): שכפול קוד, פונקציות ארוכות מדי, naming לא ברור, חוסר עקביות בדפוסים
- באגים פוטנציאליים: Race conditions, null/undefined references, off-by-one errors, logic errors
- אבטחה: SQL/NoSQL injection, XSS, חשיפת מידע רגיש, חוסר אימות
- ביצועים (Performance): N+1 queries, לולאות מיותרות, memory leaks, חוסר caching
- כיסוי טסטים: קוד חדש בלי טסטים, edge cases חסרים, מבנה טסטים לקוי
- תיעוד: פונקציות ציבוריות בלי documentation, API endpoints חסרי תיאור
אבל הכוח האמיתי הוא בהתאמה אישית — לגרום ל-Claude לבדוק מה שחשוב לכם, ולהתעלם ממה שכלים אחרים כבר מטפלים בו.
התאמה אישית עם CLAUDE.md
הוסיפו סעיף מפורט ל-CLAUDE.md שמנחה את Claude מה לבדוק, מה לדלג, ואיך לדווח:
## CI/CD Context
When reviewing PRs in CI:
### Focus areas:
- Security: SQL injection, XSS, secret leaks, auth bypass
- Error handling: all async functions must have try/catch
- Hebrew strings: RTL issues, Unicode handling, translation coverage
- API contracts: breaking changes to public endpoints must be flagged
### Skip (handled by other tools):
- Formatting (Prettier handles this)
- Import order (ESLint rule)
- CSS property order
### Severity classification:
- CRITICAL: secrets in code, SQL injection, auth bypass, data loss risk
- WARNING: missing error handling, missing tests, N+1 queries
- SUGGESTION: performance improvements, readability, naming
### Response format:
- Summary in Hebrew
- Specific findings with file:line reference
- Code suggestion for each finding when possible
שימו לב לרמת הפירוט: אנחנו אומרים ל-Claude בדיוק מה לבדוק, מה לדלג (כי כלים אחרים כבר מטפלים), איך לדרג ממצאים, ובאיזה פורמט לכתוב. זה יוצר review עקבי — כל PR מקבל את אותה רמת בדיקה, בלי תלות במצב הרוח של reviewer אנושי.
הוסיפו סעיף ## CI/CD Context ל-CLAUDE.md שלכם עם לפחות 3 כללי Focus areas ו-2 כללי Skip. התאימו לטכנולוגיות של הפרויקט שלכם. לדוגמה לפרויקט React: "Check for missing key props in lists", "Flag useEffect without cleanup for subscriptions".
Inline Comments — הערות על שורות ספציפיות
אחד הפיצ׳רים החזקים של claude-code-action: Claude לא רק כותב תגובה כללית על ה-PR. הוא מגיב על שורות ספציפיות ב-Diff, בדיוק כמו Reviewer אנושי. כשהוא מזהה בעיה בשורה 42, הוא פותח Inline Comment בדיוק שם, עם הסבר מפורט והצעת קוד מתוקן.
דוגמה 1 — אבטחה (CRITICAL):
// Line 42 - src/api/users.js
// CRITICAL: SQL Injection vulnerability
//
// The user_id parameter comes directly from req.params
// without validation or sanitization.
//
// Before (vulnerable):
db.query(`SELECT * FROM users WHERE id = ${req.params.id}`)
//
// After (safe):
db.query('SELECT * FROM users WHERE id = $1', [req.params.id])
דוגמה 2 — ביצועים (WARNING):
// Line 78 - src/services/orders.js
// WARNING: N+1 Query Problem
//
// This loop fires a separate DB query for each order.
// 100 orders = 100 queries instead of 1.
//
// Consider using a batch query:
const allItems = await db.query(
'SELECT * FROM items WHERE order_id = ANY($1)',
[orderIds]
)
Claude מצביע על הבעיה, מסביר למה היא חשובה, ומציג תיקון עם קוד. המפתח שפתח את ה-PR חוסך זמן — התיקון מוגש מוכן.
טיפול ב-PRs גדולים — Path Filtering
PR עם 500+ שורות שהשתנו הוא אתגר כפול: (1) Claude צריך הרבה טוקנים כדי לקרוא את כל ה-Diff, והעלות עולה. (2) PR גדול בדרך כלל כולל קבצים שלא צריכים review — כמו package-lock.json (אלפי שורות אוטומטיות), קבצי build, ותמונות. הפתרון — Path Filtering:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
# Focus only on source code
paths: |
src/**
lib/**
!**/*.generated.ts
!**/package-lock.json
!**/*.min.js
עם Path Filtering, Claude מתמקד רק בקבצים שחשובים. ב-PR של 20 קבצים שהשתנו, אולי רק 5 הם source code אמיתי. זה חותך עלויות ב-75% וגם מייצר ממצאים רלוונטיים יותר — בלי רעש מ-lockfiles וקבצי build.
מה הטעות: להריץ Claude Review על כל הקבצים שהשתנו — כולל קבצים אוטומטיים, lock files, build artifacts.
למה זה קורה: ברירת המחדל היא לסרוק הכל, ואנשים לא חושבים להגביל.
מה לעשות: הגדירו Path Filtering מהיום הראשון. חוק אצבע: אם קובץ נוצר אוטומטית או שכלי אחר בודק אותו — אין טעם ש-Claude יסתכל עליו. שלושת הקבצים הנפוצים שתמיד כדאי לדלג: package-lock.json, yarn.lock, *.min.js.
לא כל בדיקה שווה. סדרו את הפוקוס של Claude מהחשוב ביותר לפחות:
| רמה | בדיקה | מדיניות |
|---|---|---|
| 1. אבטחה | Injection, secrets, auth bypass, data exposure | תמיד — בכל PR, בכל branch, בכל פרויקט |
| 2. נכונות | באגים, logic errors, edge cases, race conditions | תמיד — זו הליבה של code review |
| 3. ביצועים | N+1, memory leaks, missing indexes | אם רלוונטי — לא כל שינוי משפיע |
| 4. סטייל | Naming, patterns, organization | אופציונלי — אפשר להשאיר ל-Linter |
| 5. תיעוד | JSDoc, README, API docs | Public APIs בלבד |
דפוס ה-Review Cascade — כשClaude רץ ראשון
הדפוס הכי אפקטיבי לצוותים הוא מה שנקרא Review Cascade — תהליך מדורג:
- שלב 1 — בדיקות אוטומטיות: Linter, Type Checker, Unit Tests — בינאריים, מהירים, חינם
- שלב 2 — Claude Review: בודק את מה שהכלים לא תופסים — לוגיקה, אבטחה, ביצועים. עלות: סנטים
- שלב 3 — Review אנושי: הבודק האנושי מקבל PR "מנוקה" — כל הבעיות הפשוטות כבר נתפסו. הוא יכול להתמקד בשאלות גדולות: "האם האדריכלות נכונה?", "האם זה מתאים לרודמאפ?"
התוצאה: הבודק האנושי עובד יותר מהר ויותר ביעילות כי הוא לא צריך לטפל ברעש. Claude עושה את העבודה השחורה, האדם מוסיף את הערך שרק אדם יכול.
חשבו על ה-Review process שלכם היום. כמה זמן הבודק מבזבז על הערות "טכניות" (missing error handling, naming, missing tests) לעומת הערות "אסטרטגיות" (architecture, design, product fit)? Review Cascade נועד לשחרר את הבודק מהטכניקה כדי שיתמקד באסטרטגיה.
זמן: 25 דקות | תוצר: Workflow עובד + CLAUDE.md מותאם
- צרו מאגר GitHub (או השתמשו בקיים — עדיף לא פרודקשן לניסויים)
- הגדירו 3 Secrets:
ANTHROPIC_API_KEY,APP_ID,APP_PRIVATE_KEY - צרו
.github/workflows/claude-review.ymlכולל Path Filtering ל-src/** - הוסיפו
## CI/CD Contextל-CLAUDE.md עם 5+ כללים (focus, skip, severity) - דחפו הכל ל-main
- צרו branch, שנו קובץ source, פתחו PR
- המתינו ל-Review. קראו הערות — רלוונטיות? מדויקות?
- כתבו
@claude explain the security implications— ודאו ש-Claude מגיב
תוצאה מצופה: PR עם Review מ-Claude: ממצאים מדורגים, inline comments, ותגובה ל-@claude mention.
סריקות אבטחה בצנרת
Code Review כללי זה טוב. סריקת אבטחה ייעודית — זה חיוני. ההבדל? ב-Review כללי, אבטחה היא נושא אחד מתוך חמישה. בסריקת אבטחה ייעודית, Claude ממוקד אך ורק באיתור חולשות. זה כמו ההבדל בין רופא משפחה לקרדיולוג — שניהם יודעים על הלב, אבל המומחה מוצא דברים שהכללי מפספס.
דמיינו אפליקציית e-commerce ישראלית. מפתח ג׳וניור מוסיף endpoint חדש שמחזיר היסטוריית הזמנות. בלי סריקת אבטחה, ה-PR עובר review רגיל שמתמקד בלוגיקה — הכל נראה תקין. אבל ה-endpoint לא בודק שהמשתמש רואה רק את ההזמנות שלו. כל user_id שמועבר ב-URL מחזיר את ההזמנות של אותו משתמש — כולל כרטיסי אשראי חלקיים. זה IDOR (Insecure Direct Object Reference) — אחת מ-10 החולשות הנפוצות ביותר. Claude ב-Security Audit תופס את זה ומציין: "This endpoint returns order history for any user_id without verifying the requesting user owns those orders."
למה Workflow נפרד לאבטחה — שלוש סיבות
- מודל חזק יותר: לסריקת אבטחה כדאי להשתמש ב-Opus 4.6 (המודל החכם ביותר). עלות הפספוס של חולשת אבטחה — פריצה, דליפת מידע, קנסות — גבוהה הרבה יותר מהפרש עלות הטוקנים בין Sonnet ל-Opus
- תזמון שונה: Review רץ על כל PR. סריקת אבטחה ייעודית רצה על Push ל-main ועל PRs שנוגעים בקבצים רגישים (auth, API, middleware, DB)
- פלט שונה: Review נותן הערות. סריקת אבטחה נותנת ציון חומרה שיכול לחסום מיזוג דרך Security Gate
קובץ Workflow — Security Audit
name: Claude Security Audit
on:
push:
branches: [main, release/*]
pull_request:
paths:
- 'src/auth/**'
- 'src/api/**'
- 'src/middleware/**'
- 'src/db/**'
jobs:
security-audit:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
security-events: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run dependency audit
run: npm audit --json > npm-audit.json 2>/dev/null || true
- uses: anthropics/claude-code-action@v1
id: security
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
model: claude-opus-4-6
prompt: |
You are a senior application security engineer.
Review this diff and codebase context for:
1. OWASP Top 10 (injection, broken auth, XSS, SSRF)
2. Secrets or API keys committed to code
3. Unvalidated or unsanitized user input
4. Insecure defaults or misconfigurations
5. Missing input validation, rate limiting, CSRF
6. Data exposure (PII logged, sensitive data in responses)
Also review npm-audit.json for dependency risks.
Rate each finding: CRITICAL / HIGH / MEDIUM / LOW.
If ANY CRITICAL finding, start response with "SECURITY_BLOCK".
- name: Check for critical findings
if: always()
run: |
RESPONSE="${{ steps.security.outputs.response }}"
if echo "$RESPONSE" | grep -q "SECURITY_BLOCK"; then
echo "::error::CRITICAL security finding — merge blocked"
exit 1
fi
echo "No critical security findings"
מה חכם כאן:
- תזמון כפול: כל Push ל-main (תמיד), ועל PRs רק בנתיבים רגישים (auth, API, middleware, DB)
- שילוב כלים:
npm auditרץ קודם, תוצאות עוברות ל-Claude לפרשנות ותעדוף - Opus 4.6: המודל החכם ביותר — על אבטחה לא חוסכים
- Security Gate: אם Claude מוצא חולשה קריטית, "SECURITY_BLOCK" מופיע ו-
exit 1חוסם Merge
כתבו Security Audit Prompt ספציפי לפרויקט שלכם. התחילו עם: "This project is a [TYPE] application written in [LANGUAGE/FRAMEWORK]." הוסיפו 3 חולשות ספציפיות: React? בדקו XSS components. Node+PostgreSQL? בדקו raw SQL. Express? בדקו CORS ו-helmet headers.
שילוב עם כלי SAST מסורתיים
Claude לא מחליף Snyk, SonarQube, או Trivy — הוא משלים אותם. הדפוס העוצמתי ביותר הוא לרוץ SAST קודם ולהעביר תוצאות ל-Claude לפרשנות:
- name: Run Snyk
run: npx snyk test --json > snyk-results.json || true
- uses: anthropics/claude-code-action@v1
with:
prompt: |
Review snyk-results.json. For each vulnerability:
1. Is it actually exploitable in our codebase?
2. Realistic impact?
3. Recommended fix with code example?
4. Priority: fix now / this sprint / can wait
SAST מוצא דפוסים. Claude מבין אם הדפוס מסוכן בהקשר שלכם. Snyk יגיד "vulnerability in lodash 4.17.20". Claude יבדוק אם אתם משתמשים בפונקציה הפגיעה ויגיד "כן, קריטי — אתם קוראים ל-_.template עם user input" או "לא דחוף — הפגיעות ב-_.merge שאתם לא קוראים". זה חוסך שעות של triage ידני על רשימות CVE ארוכות.
מה הטעות: להריץ סריקת אבטחה עם Opus על כל PR — כולל PRs שמשנים תיעוד, CSS, או configs.
למה: הרצון להרגיש בטוחים ב-100%.
מה לעשות: Path Filtering. Opus עולה $0.50-$2.00 לריצה. 50 PRs בשבוע = $100-400/חודש. חצי סורק README. Opus לנתיבים רגישים, Sonnet או שום דבר לשאר.
Release Notes אוטומטיים
מי אוהב לכתוב Release Notes? כמעט אף אחד. זו משימה שנדחית שוב ושוב, ובסוף Release Notes נכתבים ברגע האחרון, חסרים, או לא קיימים. ובכל זאת, הם קריטיים — משתמשים, לקוחות, ובעלי עניין רוצים לדעת מה חדש.
Claude הופך את זה לאוטומטי: כשדוחפים Tag חדש (v2.1.0), ה-Workflow קורא היסטוריית Git מאז ה-Tag הקודם, שולף PRs שמוזגו, מעביר ל-Claude, ומקבל Release Notes מסודרים ובשפה אנושית.
קובץ ה-Workflow
name: Generate Release Notes
on:
push:
tags:
- 'v*'
jobs:
release-notes:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get changes since last tag
id: changes
run: |
PREV_TAG=$(git describe --abbrev=0 --tags HEAD^ 2>/dev/null || echo "")
if [ -z "$PREV_TAG" ]; then
CHANGES=$(git log --oneline)
else
CHANGES=$(git log ${PREV_TAG}..HEAD --oneline)
fi
echo "changes<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Get merged PRs
id: prs
run: |
PREV_TAG=$(git describe --abbrev=0 --tags HEAD^ 2>/dev/null || echo "")
DATE=$(git log -1 --format=%ci $PREV_TAG 2>/dev/null || echo '2020-01-01')
PRS=$(gh pr list --state merged --search "merged:>=$DATE" \
--json title,number \
--jq '.[] | "- #\(.number) \(.title)"' 2>/dev/null || echo "")
echo "prs<<EOF" >> $GITHUB_OUTPUT
echo "$PRS" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: anthropics/claude-code-action@v1
id: notes
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
prompt: |
Generate release notes for ${{ github.ref_name }}.
Commits: ${{ steps.changes.outputs.changes }}
PRs: ${{ steps.prs.outputs.prs }}
Format:
## What's New
## Improvements
## Bug Fixes
## Breaking Changes (only if applicable)
Rules: clear language, group related changes, bilingual
(English + Hebrew for each item).
- name: Create GitHub Release
run: |
gh release create ${{ github.ref_name }} \
--title "Release ${{ github.ref_name }}" \
--notes "${{ steps.notes.outputs.response }}"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
מה מיוחד: ה-Workflow שולף גם commits וגם PRs. כותרות PRs תיאוריות יותר מ-commit messages ונותנות ל-Claude הקשר עשיר יותר ליצירת Release Notes איכותיים.
הריצו git log --oneline -15 על הפרויקט שלכם. קראו את ה-commit messages. שאלו: האם מנהל מוצר יבין? האם לקוח יבין? אם לא — זו הסיבה ש-Release Notes אוטומטיים כל כך שימושיים.
Semantic Versioning אוטומטי
אפשר לבקש מ-Claude להמליץ על מספר הגרסה הבא. הוסיפו ל-Prompt:
Also recommend semantic version:
- MAJOR (x.0.0): breaking changes requiring user action
- MINOR (0.x.0): new features, backwards-compatible
- PATCH (0.0.x): bug fixes only
Current: v2.0.3. What should the next version be and why?
Claude ינתח את השינויים ויגיד למשל: "This is a MINOR release (v2.1.0) — includes 2 new features (search API, webhook support) with no breaking changes." כמובן שההמלצה צריכה אישור אנושי — אבל היא חוסכת את הדיון הצוותי של "זה major או minor?".
Release Notes בעברית ובאנגלית
בפרויקטים ישראליים, Release Notes דו-לשוניים הם יתרון גדול. הוסיפו ל-Prompt: Include both English and Hebrew for each item. Claude ייצר כל סעיף פעמיים — פעם באנגלית לצוות הטכני ופעם בעברית למנהלי מוצר ובעלי עניין.
## What's New / חדש
- Search API endpoint for products / API חיפוש מוצרים חדש
Allows filtering by category, price, and availability
מאפשר סינון לפי קטגוריה, מחיר, וזמינות
## Bug Fixes / תיקוני באגים
- Fixed login timeout on slow connections / תוקנה בעיית timeout בהתחברות
Users on mobile networks experienced 30s timeouts, now set to 60s
משתמשים ברשתות סלולריות חוו timeout של 30 שניות, עכשיו 60 שניות
בדקו אם לפרויקט שלכם יש Release Notes. אם לא — זו הזדמנות מצוינת. אם כן — השוו את האיכות שלהם למה ש-Claude יכול לייצר. בדרך כלל Claude מייצר notes מפורטים ומאורגנים יותר מכתיבה ידנית.
מה הטעות: לתת ל-Claude ליצור Release Notes כרשימה שטוחה — בלי חלוקה ל-What's New, Bug Fixes, Breaking Changes.
למה זה קורה: ב-Prompt הראשוני שוכחים לציין את המבנה הרצוי, ו-Claude מחזיר פסקה ארוכה.
מה לעשות: תמיד ציינו Format ב-Prompt עם קטגוריות ברורות. הוסיפו "If no breaking changes, omit that section entirely" כדי למנוע קטגוריות ריקות. זה ההבדל בין Release Notes שאנשים קוראים לבין כאלה שמתעלמים מהם.
Issue-to-PR — מ-Issue ל-Pull Request
הדפוס שמרגיש כמו קסם: מישהו פותח Issue, מוסיף Label ספציפי, Claude מנתח, כותב קוד, מריץ טסטים, ופותח Draft PR. ובעברית: אפשר לכתוב Issues בעברית ("הכפתור 'הוסף לעגלה' לא עובד בדף המוצר") ו-Claude יבין, ימצא קוד, יתקן, ויפתח PR עם תיאור באנגלית.
קובץ ה-Workflow
name: Issue to PR
on:
issues:
types: [labeled]
jobs:
auto-implement:
if: contains(github.event.label.name, 'claude-auto')
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
issues: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
prompt: |
Implement the change described in issue
#${{ github.event.issue.number }}:
Title: ${{ github.event.issue.title }}
Body: ${{ github.event.issue.body }}
Steps:
1. Analyze codebase to find relevant code
2. Create branch: auto/${{ github.event.issue.number }}
3. Implement with clean, tested code
4. Run existing tests
5. Open Draft PR referencing the issue
If too complex or ambiguous, comment on the issue
asking for clarification instead of implementing.
Always open as Draft PR. Include tests.
ה-Workflow מופעל רק עם Label claude-auto. שליטה מלאה — לא כל Issue יגרום ליצירת PR. רק Issues שהצוות מסמן במפורש כמתאימים לאוטומציה.
מה עובד ומה לא
מצוין עבור:
- תיקוני באגים ברורים: "הכפתור X לא עובד כשלוחצים פעמיים" — Claude מוצא הבעיה ומתקן
- משימות מוגדרות: "הוסיפו validation למייל בטופס הרשמה" — ברור מה צריך
- עדכוני תצורה: "שנו timeout מ-30 ל-60 שניות" — פשוט וחד-משמעי
- Good first issue: משימות קטנות שמתאימות ל-contributors חדשים
לא מתאים ל:
- פיצ׳רים מורכבים שדורשים תכנון אדריכלי וראייה רחבה
- Issues עמומים — "הביצועים לא טובים" (מה בדיוק? איפה? לפי איזה מדד?)
- שינויים בחוויית משתמש שדורשים שיקול דעת עיצובי
- Refactoring נרחב שמשפיע על מודולים רבים
Issues בעברית
יתרון מפתיע: אפשר לכתוב Issues בעברית מלאה. Claude מבין עברית ויכול לנתח Issue שכתוב "הכפתור 'הוסף לעגלה' בדף המוצר לא מגיב ללחיצה כשהמשתמש כבר הוסיף 3 פריטים" — הוא ימצא את הקוד הרלוונטי, יתקן, ויפתח PR עם תיאור באנגלית (או בעברית, אם תגדירו ב-CLAUDE.md). זה מאפשר גם לאנשים שלא טכניים לפתוח Issues שClaude יטפל בהם.
Issue #47: "בדף ההרשמה, כשמזינים מייל עם אותיות גדולות (למשל User@Gmail.COM) המערכת אומרת שהמייל לא תקין"
מה Claude עושה:
- מנתח את ה-Issue — מבין שזו בעיית Case Sensitivity ב-email validation
- מחפש ב-codebase את קוד ה-validation:
src/utils/validators.js - מזהה שה-regex לא כולל
iflag (case insensitive) — או שחסר.toLowerCase() - מתקן, מוסיף טסט, ופותח Draft PR: "Fix #47: Normalize email to lowercase before validation"
כל הזמן: 2-3 דקות. בלי התערבות אנושית. הצוות רק צריך לעשות review ולמזג.
Issue-to-PR — הגדרות בטיחות
כמה הגדרות בטיחות שמומלץ להוסיף:
- Label ספציפי: רק
claude-autoמפעיל את ה-Workflow. אל תשתמשו ב-Labels כלליים כמו "bug" — לא כל באג מתאים לאוטומציה - Branch Protection: ודאו שה-main branch דורש PR review לפני merge — ככה גם אם Claude פותח PR, הוא לא יכול למזג לבד
- הגבלת scope: בקשו מ-Claude ב-Prompt שאם ה-Issue מורכב מדי, הוא יגיב על ה-Issue במקום לנסות לפתור — "If the issue requires changes to more than 3 files or architectural decisions, comment asking for clarification instead of implementing"
חשבו על 3 Issues שהיו מתאימים ל-Issue-to-PR. רשמו עם תיאור ברור. אם יש לכם Workflow — נסו אחד בפועל.
מה הטעות: לתת ל-Issue-to-PR workflow גם למזג PR בלי review אנושי.
למה מסוכן: קוד אוטומטי יכול לעבוד טכנית אבל לא להתאים לדפוסים, להחדיר tech debt, או לא לכסות edge cases.
מה לעשות: תמיד Draft PR + Review אנושי + Test Suite מלא. לעולם לא auto-merge על PRs אוטומטיים.
CLAUDE.md בסביבת CI
בקורסים הקודמים למדנו ש-CLAUDE.md הוא קובץ ההוראות של Claude — הזיכרון המתמשך. חדשות טובות: הוא עובד גם ב-CI. כש-claude-code-action רץ, הוא טוען CLAUDE.md מה-Repository אוטומטית. הוראות שנכתבות פעם אחת משפיעות על כל ריצת CI.
מבנה מומלץ
# Project: My SaaS App
## Project Context (Always)
- Node.js 20 + TypeScript + React 19
- PostgreSQL with Prisma ORM
- Hebrew-first (RTL, Unicode)
- Deployed to Vercel
## Coding Standards (Always)
- JSDoc on all exported functions
- Error handling with AppError class
- Hebrew strings via i18n only
- Tests for all business logic
## CI/CD Context
When reviewing PRs in CI:
- Focus: security, error handling, Hebrew coverage
- Skip: formatting (Prettier), imports (ESLint)
- Severity: CRITICAL / WARNING / SUGGESTION
- Be concise in CI — findings only
## Security Requirements
- CRITICAL: any secret or API key in code
- CRITICAL: unvalidated user input reaching DB
- HIGH: missing rate limiting on public endpoints
- HIGH: missing auth on protected routes
כללים מותנים — .claude/rules/
קבצי .md ב-.claude/rules/ נטענים אוטומטית. YAML frontmatter מגביל מתי:
# .claude/rules/ci-auth-review.md
---
activation:
context: ci
paths:
- src/auth/**
- src/api/middleware/**
---
When reviewing authentication code:
- JWT: verify expiry check and signature validation
- Passwords: bcrypt with cost >= 12 (not MD5/SHA)
- Sessions: httpOnly + sameSite + secure cookie flags
- Login: rate limit max 5 attempts/minute
הכלל נטען רק ב-CI ורק לנתיבי auth/middleware. חוסך טוקנים ומייצר ממצאים ממוקדים.
צרו .claude/rules/ci-review.md עם 3-5 כללים ספציפיים לפרויקט. דחפו ל-main. מעכשיו כל CI review משתמש בכללים האלה.
סביבה-מודעת — Environment-Aware
ב-GitHub Actions, משתנה הסביבה CI=true קיים אוטומטית. אפשר לנצל את זה ב-CLAUDE.md כדי ש-Claude יתנהג אחרת ב-CI לעומת סשן אינטראקטיבי:
## Environment Behavior
If running in CI (CI=true):
- Do NOT ask interactive questions — default to safe choices
- Output structured findings with severity labels
- Be concise — findings and recommendations only, no tutorials
- Always include file path and line number with each finding
- Default to blocking on CRITICAL findings
למה זה חשוב? כי ב-CI אין מי שיענה על שאלות. אם Claude מבקש "Should I also check the test files?" — אין מי שיגיד כן. הוא צריך לפעול באופן עצמאי ולהחזיר תוצאות מובנות.
שיתוף CLAUDE.md בצוות
הכי חשוב: ה-CLAUDE.md חייב להיות ב-Git. כשהוא committed ל-Repository, כל מפתח וכל ריצת CI מקבלים את אותן הוראות. זה מבטיח עקביות — Claude בודק את אותם הדברים לכולם, ולא משנה מי פתח את ה-PR או מאיזה branch.
טיפ: צרפו את .claude/rules/ גם ל-Git. מפתחים חדשים שמצטרפים לצוות מקבלים אוטומטית את כל הכללים שלמדתם מניסיון.
זמן: 20 דקות | תוצר: CLAUDE.md + 2 קבצי rules
- פתחו/צרו CLAUDE.md בפרויקט
- הוסיפו 4 סעיפים: Project Context, Coding Standards, CI/CD Context, Security Requirements
- צרו
.claude/rules/ci-review.mdעם 5+ כללים - צרו
.claude/rules/ci-security.mdעם frontmatter שמגביל לנתיבים רגישים - דחפו ל-main, פתחו PR, בדקו שה-Review משקף את הכללים
- אם יש false positives — עדכנו rules ובדקו שוב
תוצאה: CLAUDE.md מקיף + 2 קבצי rules שמשפרים CI Reviews.
Workflows מותאמים אישית
Review, אבטחה, Release Notes — ההתחלה. Claude ב-CI יכול הרבה יותר. הנה 5 דפוסים מעשיים:
1. Documentation Sync
על merge ל-main, Claude מעדכן API docs אם endpoints השתנו:
name: Sync API Docs
on:
push:
branches: [main]
paths: ['src/api/**']
jobs:
sync-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
app_id: ${{ secrets.APP_ID }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}
prompt: |
API routes changed. Update docs/api/ to match:
- description, method, URL, parameters, response, errors
- Match existing style. Open PR with updates.
2. i18n Validation — בדיקת תרגומים
קריטי לפרויקטים ישראליים. Claude מוודא שכל String חדש קיים בעברית ובאנגלית:
prompt: |
Scan changed files for new user-facing strings.
Check each exists in locales/he.json and locales/en.json.
Report missing translations with file path and string text.
3. Dependency Review
כש-Dependabot פותח PR, Claude קורא Changelog ומעריך סיכון:
prompt: |
For each updated package: read changelog, assess risk
(LOW=patch, MEDIUM=minor, HIGH=major/breaking),
flag security changes, recommend merge strategy.
4. Test Generation
קוד חדש בלי טסטים? Claude מייצר test stubs:
prompt: |
For new functions without tests, generate meaningful
test cases (happy path + edge cases). Follow existing
test patterns. Open separate PR with tests.
5. Migration Safety
Claude בודק שמיגרציות DB בטוחות ו-reversible:
prompt: |
Review migration files for: data loss risk,
missing rollback, long-running ops on large tables,
breaking changes to existing queries.
טיפ: איטרציה על Prompts
ה-Prompt הוא הלב של כל Workflow מותאם. בפעם הראשונה, הוא כנראה לא יהיה מושלם. התהליך המומלץ:
- כתבו Prompt ראשוני — מה שנראה לכם הגיוני
- הריצו על PR אמיתי — בדקו מה Claude מחזיר
- שפרו: אם Claude מפספס — הוסיפו הנחיות. אם הוא נותן יותר מדי — צמצמו
- חזרו עוד 2-3 סיבובים עד שהתוצאות מדויקות
זה בדיוק כמו לכתוב Test Cases — אתם צריכים לדעת מה אתם מצפים לקבל כדי לדעת אם התוצאה טובה.
| אם הפרויקט שלכם... | ה-Workflow המומלץ | ROI צפוי |
|---|---|---|
| משרת שוק ישראלי + בינלאומי | i18n Validation | מונע String שנשכח בתרגום — כל אחד = חוויית משתמש שבורה |
| API עם צרכנים חיצוניים | Documentation Sync | Docs מעודכנים = פחות support tickets = חיסכון בשעות |
| PostgreSQL/MySQL עם מיגרציות תכופות | Migration Safety | מונע downtime ממיגרציה שבורה — יכול לחסוך אלפי ש"ח |
| Dependabot פעיל, הרבה תלויות | Dependency Review | חוסך שעות triage — Claude קורא Changelogs במקומכם |
| חוסר כיסוי טסטים על legacy code | Test Generation | כיסוי עולה בהדרגה בלי להקדיש sprints שלמים |
בחרו הדפוס הרלוונטי ביותר לפרויקט שלכם מהטבלה למעלה. כתבו Workflow YAML בסיסי (trigger + steps + prompt). שמרו כטיוטה ב-.github/workflows/ — תשלימו בתרגיל.
זמן: 25 דקות | תוצר: Workflow עובד לצורך אמיתי
- בחרו צורך: docs? i18n? tests? dependency review? migration?
- כתבו Workflow YAML מלא: trigger, permissions, steps, prompt
- הוסיפו Path Filtering
- בחרו מודל: Sonnet לרוב, Opus רק למשימות קריטיות
- דחפו, trigger, בדקו תוצאה ב-Actions Tab
- תקנו Prompt אם צריך (איטרציה)
תוצאה: Workflow עובד שרץ אוטומטית ומייצר ערך אמיתי.
שליטה בעלויות CI
עלות טוקנים ב-CI צומחת מהר אם לא שמים לב. בואו נבנה נוסחה ואסטרטגיה חכמה.
עלות/חודש = (PRs/שבוע x 4) x (טוקנים/ריצה / 1M) x ($/M tokens)
דוגמה: 30 PRs/שבוע x 4 x 50K tokens x $15/M (Sonnet) = ~$90/חודש. פחות משעת מפתח בכיר. אם Claude חוסך שעה review בשבוע — הוא משלם את עצמו.
Tiered Review — מודל לכל משימה
| משימה | מודל | עלות/ריצה | למה |
|---|---|---|---|
| Code Review | Sonnet 4.6 | $0.10-$0.30 | מספיק ל-90% מהממצאים, מהיר |
| Security Audit | Opus 4.6 | $0.50-$2.00 | אבטחה דורשת את הטוב ביותר |
| Release Notes | Sonnet 4.6 | $0.05-$0.15 | כתיבה פשוטה יחסית |
| Lint checks | Haiku | $0.01-$0.05 | משימות טריוויאליות |
| Issue-to-PR | Sonnet/Opus | $0.30-$3.00 | תלוי מורכבות |
5 טכניקות חיסכון שעובדות
- Path Filtering (הכי אפקטיבי): סרקו רק קבצי source code. ב-PR ממוצע, 40-60% מהשינויים הם lock files, configs, וקבצים שנוצרו אוטומטית שלא צריכים review. Path Filtering חותך עלויות ב-50-75% מיידית
- MAX_THINKING_TOKENS=8192: הגדירו את משתנה הסביבה הזה ב-CI. רוב משימות CI לא דורשות חשיבה עמוקה — Claude יכול לתת תשובה ישירה. זה חותך את עלות הטוקנים של extended thinking
- --bare flag: חוסך 2-5 שניות startup per invocation. לא חוסך טוקנים, אבל ב-GitHub Actions Minutes זמן = כסף. על 100+ ריצות בשבוע — זה מצטבר
- Skip Logic: אם אותם קבצים לא השתנו מאז ה-Review האחרון — דלגו על הריצה. אפשר לממש עם cache של SHA hashes ותנאי if ב-Workflow
- Budget Alerts: היכנסו ל-Anthropic Console → Usage → הגדירו התראה ב-80% מהתקציב החודשי. ככה תדעו לפני שנגמר הכסף ולא תתעוררו מופתעים
דוגמה לחישוב ריאלי
נניח סטארטאפ ישראלי קטן עם 4 מפתחים:
| Workflow | תדירות | מודל | עלות/ריצה | עלות/חודש |
|---|---|---|---|---|
| Code Review | 25 PRs/שבוע | Sonnet | $0.20 | $20 |
| Security (main only) | 10 pushes/שבוע | Opus | $1.00 | $40 |
| Release Notes | 2 tags/חודש | Sonnet | $0.10 | $0.20 |
| i18n Check | 15 PRs/שבוע | Haiku | $0.03 | $1.80 |
| סה"כ | ~$62/חודש | |||
$62 בחודש — כ-220 ש"ח (לפי שער של 3.6 ש"ח/$) — עבור Code Review + Security Audit + Release Notes + i18n Validation על כל PR ועל כל push. לשם השוואה: שכר שעתי ממוצע של מפתח Full Stack בישראל (2026) הוא 180-280 ש"ח לשעה. אם Claude חוסך אפילו שעה אחת בשבוע של review אנושי (ובדרך כלל הוא חוסך יותר) — ה-ROI חיובי מאוד. סטארטאפ ישראלי אופייני עם 4-6 מפתחים יחסוך 4-8 שעות review בשבוע, שזה 720-2,240 ש"ח/שבוע בערך — לעומת 55 ש"ח/שבוע עלות Claude.
שימו לב שהמספרים נכונים למרץ 2026. Anthropic משנים מחירים מעת לעת — בדרך כלל למטה. מחירי Sonnet ירדו פי 5 בשנה האחרונה. כדאי לבדוק מחירים עדכניים ב-console.anthropic.com/pricing כשאתם מחשבים תקציב. וזכרו שגם GitHub Actions Minutes עולים — ראו את ההערה למטה.
מה שוכחים: מעבר לעלות טוקנים, יש גם עלות של GitHub Actions Minutes. החשבון החינמי מקבל 2,000 דקות/חודש. כל ריצה של Claude לוקחת 1-3 דקות.
למה חשוב: 100 ריצות/שבוע x 2 דקות = 800 דקות/שבוע = 3,200 דקות/חודש — מעבר לחינם.
מה לעשות: בדקו את מכסת ה-Minutes שלכם ב-GitHub Settings → Billing. ב-Team/Enterprise plan זה בדרך כלל לא בעיה, אבל ב-Free plan — תכננו מראש.
כמה PRs בשבוע בפרויקט שלכם? הכניסו לנוסחה: PRs x 4 x $0.20. זו עלות ה-Review בלבד. הוסיפו security ($40/חודש אם יש 10 pushes/שבוע ל-main). סכמו — זה התקציב שצריך לאשר.
זמן: 30 דקות | תוצר: Pipeline שלם + טבלת עלויות
- ודאו 3 Workflows: review, security, release-notes
- ודאו CLAUDE.md + rules מותאמים
- Path Filtering + מודל מתאים בכל Workflow
- טבלת עלויות: Workflow, תדירות, מודל, עלות/ריצה, עלות/חודש
- סכמו עלות חודשית. חשבו ROI מול שעות review אנושי
- בדקו Pipeline מלא: PR → Review → Merge → Tag → Release
- הגדירו Budget Alert ב-Anthropic Console
תוצאה: Pipeline מתועד עם מודל עלויות ו-Budget Alert.
CI/CD מעבר ל-GitHub — GitLab, Jenkins ואחרים
הדפוס האוניברסלי עובד בכל מערכת CI שתומכת ב-Shell:
claude -p "review this diff for security issues" --bare
GitLab CI
# .gitlab-ci.yml
claude-review:
stage: test
image: node:20
before_script:
- npm install -g @anthropic-ai/claude-code
script:
- git diff origin/main...HEAD | claude -p "Review this diff. CRITICAL/WARNING/SUGGESTION format." --bare
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
Jenkins
pipeline {
agent any
environment {
ANTHROPIC_API_KEY = credentials('anthropic-api-key')
}
stages {
stage('Claude Review') {
when { changeRequest() }
steps {
sh '''
npm install -g @anthropic-ai/claude-code
git diff origin/main...HEAD | \
claude -p "Review for quality and security" --bare \
> claude-review.txt
'''
archiveArtifacts artifacts: 'claude-review.txt'
}
}
}
}
CircleCI
jobs:
claude-review:
docker:
- image: node:20
steps:
- checkout
- run: npm install -g @anthropic-ai/claude-code
- run: git diff origin/main...HEAD | claude -p "Review this diff" --bare
Azure DevOps
steps:
- task: Bash@3
displayName: 'Claude Review'
inputs:
targetType: 'inline'
script: |
npm install -g @anthropic-ai/claude-code
git diff origin/main...HEAD | claude -p "Review" --bare
env:
ANTHROPIC_API_KEY: $(ANTHROPIC_API_KEY)
ב-Terminal, הריצו: claude -p "What files changed in the last commit?" --bare. אם זה עובד — הפלט הזה אפשר לשלב בכל מערכת CI. זה ה-building block הבסיסי.
הדפוס האוניברסלי — מה שמשותף לכולם
בלי קשר לאיזו מערכת CI אתם משתמשים, הדפוס זהה:
- התקינו Claude Code:
npm install -g @anthropic-ai/claude-code - הגדירו API Key: דרך Secrets/Credentials של המערכת
- חשבו Diff:
git diff origin/main...HEAD - שלחו ל-Claude:
echo "$DIFF" | claude -p "Review this" --bare - תפסו פלט: שמרו כ-artifact, שלחו כ-comment, או בדקו exit code
זה עובד בכל מקום. ההבדל בין מערכות הוא רק תחביר ההגדרות (YAML ב-GitHub/GitLab, Groovy ב-Jenkins, JSON ב-Azure) ואיך מנהלים Secrets. הלוגיקה זהה.
מה הטעות: להריץ claude -p ב-CI בלי לבדוק Exit Code. ב-GitHub Actions עם claude-code-action זה מנוהל אוטומטית, אבל ב-GitLab/Jenkins צריך לטפל ביד.
למה מסוכן: אם Claude נכשל (API error, timeout) — בלי בדיקת exit code, ה-pipeline ימשיך כאילו הכל תקין, ותחשבו שהיה review כשלא היה.
מה לעשות: תמיד set -e בסקריפט, או בדקו $? אחרי הריצה. אם Claude מחזיר exit code לא-אפס — ה-stage צריך להיכשל, ותקבלו התראה.
claude-code-action vs CLI — השוואה
| תכונה | claude-code-action@v1 | claude -p --bare |
|---|---|---|
| Inline PR comments | אוטומטית, שורה-שורה | צריך לבנות עם API |
| @claude mention | Out-of-the-box | לא זמין |
| Issue interaction | מובנית | צריך CLI/API |
| Auth מנוהל | GitHub App | API Key |
| תאימות | GitHub בלבד | כל מערכת CI |
אם לא בטוחים באיזו CI תהיו — למדו claude -p --bare. הוא עובד בכל מקום. מאוחר יותר, ב-GitHub, שדרגו ל-claude-code-action לפיצ׳רים מתקדמים (inline comments, @mention, Issue integration).
הערה על Bedrock ו-Vertex
אם הארגון שלכם משתמש ב-AWS Bedrock או Google Vertex AI במקום ב-API הישיר של Anthropic — הגדירו את משתני הסביבה המתאימים:
- AWS Bedrock:
CLAUDE_CODE_USE_BEDROCK=1+ AWS credentials (IAM role recommended) - Google Vertex:
CLAUDE_CODE_USE_VERTEX=1+ Google Cloud credentials
claude-code-action@v1 תומך בשני הפרוביידרים. פשוט החליפו anthropic_api_key ב-credentials המתאימים. היתרון: billing דרך חשבון הענן הקיים שלכם, compliance מובנה, ואולי מחירים מוזלים אם יש לכם הסכם enterprise עם AWS או Google.
זהו את מערכת ה-CI הראשית שלכם ואת הפרוביידר (Anthropic Direct / AWS Bedrock / Google Vertex). סמנו הדוגמה הרלוונטית. אם אתם ב-GitHub עם Anthropic Direct — הכל מוכן לשימוש מייד.
בנוסף לשגרה מפרק 1 (סקריפטים, Headless, cron), הוסיפו:
| תדירות | משימה | פרטים |
|---|---|---|
| יומי | קראו Claude Review Comments | על PRs שלכם ושל אחרים. CRITICAL = לטפל מייד |
| יומי | בדקו Actions Tab | אין Workflow failures? הכל ירוק? מעולה |
| שבועי | בדקו עלויות | Anthropic Console → Usage. בגבולות התקציב? |
| שבועי | שפרו CLAUDE.md / rules | False positives? עדכנו. Claude מפספס? הוסיפו כללים |
| שבועי | טפלו ב-Draft PRs | Issue-to-PR יצר PRs? בדקו, מזגו או סגרו. לא להשאיר פתוח |
| חודשי | סקירת ROI | כמה שעות חסך? כמה באגים תפס? העלות מוצדקת? |
| חודשי | עדכון מודלים | Anthropic משחררים גרסאות. מודל חדש זול/טוב יותר? |
דוגמה מהשטח: שיפור הדרגתי של CLAUDE.md
שבוע 1: מגדירים CLAUDE.md בסיסי. Claude נותן review שכולל הרבה הערות על formatting — אבל יש לכם Prettier שמטפל בזה. תוסיפו לסעיף Skip: "formatting (Prettier handles this)".
שבוע 2: Claude מסמן SQL injection על כל שימוש ב-Prisma ORM — אבל Prisma כבר מטפל בפרמטריזציה. תוסיפו: "Prisma ORM handles parameterization — only flag raw SQL queries (prisma.$queryRaw)."
שבוע 3: Claude לא תופס שאתם שוכחים תמיד auth middleware על routes חדשים. תוסיפו: "CRITICAL: Every new API route in src/api/ MUST have authMiddleware. Flag any route without it."
אחרי חודש של שיפורים קטנים — CLAUDE.md שלכם מותאם בצורה מושלמת לפרויקט, ו-false positives יורדים ל-minimum. זה תהליך אורגני שמשתפר עם הזמן.
פתחו את CLAUDE.md שלכם ובדקו: יש סעיף CI/CD Context? אם לא — הוסיפו את שלוש השורות הבסיסיות: (1) "When in CI, be concise", (2) "Focus: security, error handling", (3) "Skip: formatting (handled by [your linter])". שלוש שורות שישפרו כל review.
התקינו claude-code-action@v1 על Repository אחד והגדירו Code Review Workflow. 15 דקות: 3 Secrets, 20 שורות YAML, דחפו ל-main, פתחו PR. מהרגע הזה — כל PR מקבל Review שתופס דברים שאתם מפספסים. כל שיפור נוסף (אבטחה, release notes, issue-to-PR) הוא בונוס שנבנה על הבסיס הזה.
ענו על לפחות 4 מתוך 5 כדי לעבור:
- למה כדאי להפריד Workflow של Review מ-Workflow של Security, ולא לשים הכל באחד?
(רמז: מודל, תזמון, עלות, סוג פלט — review comments vs. security gate) - איך Path Filtering חוסך עלויות, ומה הסיכון בלעדיו?
(רמז: PR של 20 קבצים — כמה באמת צריכים review?) - מה ההבדל בין claude-code-action@v1 לבין
claude -p --bareב-CI, ומתי כל גישה עדיפה?
(רמז: inline comments, @mention, תאימות בין מערכות) - למה Issue-to-PR חייב ליצור Draft PR ולא PR רגיל?
(רמז: מגבלות קוד אוטומטי, צורך בשיקול דעת אנושי) - איך CLAUDE.md ו-.claude/rules/ משפיעים על CI, ומה קורה בלעדיהם?
(רמז: false positives, ממצאים לא רלוונטיים, טוקנים מבוזבזים, עקביות)
בפרק הזה עשינו את הקפיצה מ-Headless Mode — הרצת Claude ידנית משורת הפקודה — לאוטומציה מלאה בצנרת CI/CD. התובנה המרכזית: Claude Code ב-CI לא מחליף Linter, Unit Tests, ו-SAST. הוא מוסיף שכבה של בינה הקשרית שלא הייתה קיימת: הבנת הקשר עסקי, זיהוי דפוסים שלא ברשימת כללים, ויצירת תוכן אוטומטי. הכלל החשוב ביותר: התאימו מודל למשימה (Sonnet ל-review, Opus לאבטחה, Haiku לבדיקות פשוטות), השתמשו ב-Path Filtering, וכתבו CLAUDE.md מותאם. בפרק הבא נעבור לרמה חדשה: Agent SDK ב-Python — שם Claude הופך מכלי CLI ל-engine מתוכנת, עם שליטה מלאה על Tools, Context, ולולאת הסוכן.
- ☐ התקנתי GitHub App (דרך
/install-github-appאו ידנית) - ☐ הגדרתי 3 Secrets: ANTHROPIC_API_KEY, APP_ID, APP_PRIVATE_KEY
- ☐ יצרתי Code Review Workflow ובדקתי שעובד
- ☐ פתחתי PR וקיבלתי Review Comment מ-Claude
- ☐ ניסיתי @claude mention וקיבלתי מענה
- ☐ יצרתי Security Audit Workflow עם Opus + Security Gate
- ☐ יצרתי Release Notes Workflow
- ☐ הוספתי CI/CD Context ו-Security Requirements ל-CLAUDE.md
- ☐ יצרתי לפחות קובץ rules אחד ב-
.claude/rules/ - ☐ הגדרתי Path Filtering בכל Workflows
- ☐ חישבתי עלות חודשית ובניתי מודל ROI
- ☐ הגדרתי Budget Alert ב-Anthropic Console
- ☐ יצרתי Workflow מותאם (docs / i18n / tests / dependencies)
- ☐ בדקתי Pipeline מלא: PR → Review → Merge → Tag → Release