2 שלב 1 — Foundation

GitHub Actions and CI/CD — אוטומציה עם GitHub Actions

איך לשלב את Claude Code בצנרת ה-CI/CD שלכם: בדיקת קוד אוטומטית על כל PR, סריקות אבטחה, יצירת Release Notes, המרת Issues ל-Pull Requests, ושליטה בעלויות — הכל עם הפעולה הרשמית claude-code-action@v1. עדכני למרץ 2026.

מה יהיה לך בסוף הפרק הזה
מה תוכלו לעשות אחרי הפרק הזה
דרישות קדם
הפרויקט שלך

בפרק 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 מגיב בהתאם
מתחיל 10 דקות חינם מושג

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. רק שהמפתח הזה זמין תמיד, לא מתעייף, לא מפספס בגלל לחץ, ועולה סנטים במקום שכר חודשי.

$0.10–$0.50

עלות ממוצעת של Code Review אוטומטי על PR בינוני (100-300 שורות) עם Claude Sonnet. לשם השוואה: מפתח בכיר שבודק PR לוקח 15-30 דקות. על שכר של 200 ש"ח/שעה — זה 50-100 ש"ח לריביו אחד. Claude לא מחליף את ה-Review האנושי — הוא מעשיר אותו. הבודק האנושי מקבל PR "מנוקה" עם הערות Claude, ויכול להתמקד בשאלות אדריכליות ועסקיות שClaude לא יתפוס.

הנה מה שנהיה אפשרי כש-Claude Code רץ בצנרת:

✍ עשו עכשיו 2 דקות

חשבו על הפרויקט שלכם. רשמו 3 דברים שאתם בודקים ידנית בכל PR שמגיע. לדוגמה: "שהטסטים עוברים", "שאין secrets בקוד", "שיש תיעוד לפונקציות חדשות", "ש-error handling קיים". אלה המועמדים הראשונים לאוטומציה עם Claude ב-CI.

מה Claude Code ב-CI לא עושה

חשוב להבין גם את המגבלות. Claude Code ב-CI לא מחליף:

המודל הנכון: כלים מסורתיים (Linter + Tests + SAST) מטפלים בשכבה הדטרמיניסטית. Claude מוסיף את השכבה ההיוריסטית — הבנה, הקשר, שיקול דעת. האדם מוסיף את השכבה העסקית — האם השינוי הזה נכון מבחינת המוצר?

משוואת הערך — מתי CI עם Claude משתלם

לפני שרצים להתקין, כדאי לעשות חשבון קר. לא כל פרויקט צריך CI עם Claude, ויש מצבים שבהם ההשקעה לא מצדיקה את עצמה.

מסגרת החלטה: האם לשלב Claude ב-CI?

הנוסחה:

ערך חודשי = (זמן שנחסך למפתח לכל PR) x (מספר PRs בשבוע x 4) x (שכר שעתי של מפתח)

אם ערך חודשי גבוה יותר מעלות טוקנים חודשית — שווה לאמץ.

סיטואציה החלטה סיבה
צוות 3+ מפתחים, 20+ PRs בשבוע כן, מייד חיסכון של שעות review בשבוע, עלות טוקנים זניחה ביחס לשכר הצוות
מפתח יחיד, 5-10 PRs בשבוע כן, לאבטחה עלות נמוכה מאוד, ותפיסת באג אבטחה אחד שווה יותר מכל עלות הטוקנים של שנה
Open Source עם contributors חיצוניים כן, Review + Security Contributors חיצוניים לא מכירים את ה-codebase — Claude עוזר לשמור על עקביות
פרויקט לא פעיל, PR אחד בחודש לא כדאי ההשקעה בהתקנה והתחזוקה לא מצדיקה את עצמה
מתחיל 20 דקות חינם הקמה

התקנת 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), עקבו אחרי הצעדים:

  1. היכנסו ל-GitHub → Settings → Developer Settings → GitHub Apps → New GitHub App
  2. תנו שם לאפליקציה (לדוגמה: claude-code-review-myteam). השם חייב להיות ייחודי בכל GitHub
  3. הגדירו הרשאות (Permissions): Read and Write על Pull Requests, Issues, ו-Contents. Read בלבד על Metadata
  4. ב-Webhook: אפשר להשאיר לא פעיל (ה-Action מטפל בעצמו)
  5. צרו Private Key (לחצו Generate a private key) — יירד קובץ PEM. שמרו אותו במקום בטוח
  6. רשמו את ה-App ID מדף הסקירה של ה-App (מספר בן 6-7 ספרות)
  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).

⚠ טעות נפוצה: API Key בקוד

מה הטעות: לשים את ה-ANTHROPIC_API_KEY ישירות בקובץ ה-Workflow YAML, ב-CLAUDE.md, או בכל קובץ שנמצא ב-Git.

למה זה קורה: כי רוצים לבדוק מהר שזה עובד, ו"רק לרגע" נדמה לא מסוכן.

מה לעשות במקום: תמיד השתמשו ב-GitHub Secrets (${{ secrets.ANTHROPIC_API_KEY }}). אם בטעות דחפתם מפתח ל-Git — גם אם מחקתם את ה-commit מייד — המפתח נשאר בהיסטוריית Git ואפשר למצוא אותו. במקרה כזה: (1) החליפו מייד ב-Anthropic Console, (2) בטלו את המפתח הישן, (3) עדכנו את ה-Secret ב-GitHub עם המפתח החדש.

✍ עשו עכשיו 5 דקות

פתחו את ה-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 }}

בואו נפרק מה כל חלק עושה:

✍ עשו עכשיו 5 דקות

צרו את הקובץ .github/workflows/claude-review.yml בפרויקט שלכם, עם התוכן למעלה. דחפו אותו ל-main. אחרי שהוא ב-main, צרו branch חדש, שנו משהו קטן (למשל הוסיפו שורה ל-README), פתחו PR, והמתינו — תוך 1-2 דקות Claude צריך להגיב עם Review.

בדיקה שההתקנה עובדת

אחרי שפתחתם PR ראשון, בדקו שלושה דברים:

  1. Claude הגיב: צריכה להיות תגובה מ-Claude על ה-PR עם ממצאי ה-Review. אם אין — בדקו ב-Actions Tab
  2. @claude עובד: כתבו תגובה "@claude summarize this PR in Hebrew" ובדקו ש-Claude מגיב
  3. 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. שגיאת השורש תופיע שם — בדרך כלל ברורה למדי.

בינוני 25 דקות freemium הקמה

Code Review אוטומטי על PRs

Code Review הוא ה-Use Case הקלאסי ומה שרוב הצוותים מתחילים איתו. הרעיון פשוט: על כל PR, Claude קורא את ה-Diff (השינויים), מנתח את הקוד בהקשר של שאר ה-codebase, ומפרסם תגובה מסודרת עם ממצאים מדורגים לפי חומרה — CRITICAL, WARNING, ו-SUGGESTION.

מה Claude בודק בברירת מחדל

בלי שום הגדרה מיוחדת, Claude מבצע סקירה מקיפה:

אבל הכוח האמיתי הוא בהתאמה אישית — לגרום ל-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 אנושי.

✍ עשו עכשיו 3 דקות

הוסיפו סעיף ## 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 בדיוק שם, עם הסבר מפורט והצעת קוד מתוקן.

📚 דוגמאות מייצגות — Inline Review

דוגמה 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.

⚠ טעות נפוצה: Review בלי Path Filtering

מה הטעות: להריץ Claude Review על כל הקבצים שהשתנו — כולל קבצים אוטומטיים, lock files, build artifacts.

למה זה קורה: ברירת המחדל היא לסרוק הכל, ואנשים לא חושבים להגביל.

מה לעשות: הגדירו Path Filtering מהיום הראשון. חוק אצבע: אם קובץ נוצר אוטומטית או שכלי אחר בודק אותו — אין טעם ש-Claude יסתכל עליו. שלושת הקבצים הנפוצים שתמיד כדאי לדלג: package-lock.json, yarn.lock, *.min.js.

מסגרת החלטה: פירמידת ה-Review — מה לבדוק קודם

לא כל בדיקה שווה. סדרו את הפוקוס של 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. שלב 1 — בדיקות אוטומטיות: Linter, Type Checker, Unit Tests — בינאריים, מהירים, חינם
  2. שלב 2 — Claude Review: בודק את מה שהכלים לא תופסים — לוגיקה, אבטחה, ביצועים. עלות: סנטים
  3. שלב 3 — Review אנושי: הבודק האנושי מקבל PR "מנוקה" — כל הבעיות הפשוטות כבר נתפסו. הוא יכול להתמקד בשאלות גדולות: "האם האדריכלות נכונה?", "האם זה מתאים לרודמאפ?"

התוצאה: הבודק האנושי עובד יותר מהר ויותר ביעילות כי הוא לא צריך לטפל ברעש. Claude עושה את העבודה השחורה, האדם מוסיף את הערך שרק אדם יכול.

✍ עשו עכשיו 2 דקות

חשבו על ה-Review process שלכם היום. כמה זמן הבודק מבזבז על הערות "טכניות" (missing error handling, naming, missing tests) לעומת הערות "אסטרטגיות" (architecture, design, product fit)? Review Cascade נועד לשחרר את הבודק מהטכניקה כדי שיתמקד באסטרטגיה.

🎓 תרגיל 1: Workflow של Code Review מלא

זמן: 25 דקות | תוצר: Workflow עובד + CLAUDE.md מותאם

  1. צרו מאגר GitHub (או השתמשו בקיים — עדיף לא פרודקשן לניסויים)
  2. הגדירו 3 Secrets: ANTHROPIC_API_KEY, APP_ID, APP_PRIVATE_KEY
  3. צרו .github/workflows/claude-review.yml כולל Path Filtering ל-src/**
  4. הוסיפו ## CI/CD Context ל-CLAUDE.md עם 5+ כללים (focus, skip, severity)
  5. דחפו הכל ל-main
  6. צרו branch, שנו קובץ source, פתחו PR
  7. המתינו ל-Review. קראו הערות — רלוונטיות? מדויקות?
  8. כתבו @claude explain the security implications — ודאו ש-Claude מגיב

תוצאה מצופה: PR עם Review מ-Claude: ממצאים מדורגים, inline comments, ותגובה ל-@claude mention.

בינוני 20 דקות freemium הקמה

סריקות אבטחה בצנרת

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 נפרד לאבטחה — שלוש סיבות

  1. מודל חזק יותר: לסריקת אבטחה כדאי להשתמש ב-Opus 4.6 (המודל החכם ביותר). עלות הפספוס של חולשת אבטחה — פריצה, דליפת מידע, קנסות — גבוהה הרבה יותר מהפרש עלות הטוקנים בין Sonnet ל-Opus
  2. תזמון שונה: Review רץ על כל PR. סריקת אבטחה ייעודית רצה על Push ל-main ועל PRs שנוגעים בקבצים רגישים (auth, API, middleware, DB)
  3. פלט שונה: 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"

מה חכם כאן:

✍ עשו עכשיו 4 דקות

כתבו 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

מה הטעות: להריץ סריקת אבטחה עם Opus על כל PR — כולל PRs שמשנים תיעוד, CSS, או configs.

למה: הרצון להרגיש בטוחים ב-100%.

מה לעשות: Path Filtering. Opus עולה $0.50-$2.00 לריצה. 50 PRs בשבוע = $100-400/חודש. חצי סורק README. Opus לנתיבים רגישים, Sonnet או שום דבר לשאר.

בינוני 15 דקות freemium כלי

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 איכותיים.

✍ עשו עכשיו 3 דקות

הריצו 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 ייצר כל סעיף פעמיים — פעם באנגלית לצוות הטכני ופעם בעברית למנהלי מוצר ובעלי עניין.

📚 דוגמאות מייצגות — Release Notes
## 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 שניות
✍ עשו עכשיו 2 דקות

בדקו אם לפרויקט שלכם יש Release Notes. אם לא — זו הזדמנות מצוינת. אם כן — השוו את האיכות שלהם למה ש-Claude יכול לייצר. בדרך כלל Claude מייצר notes מפורטים ומאורגנים יותר מכתיבה ידנית.

⚠ טעות נפוצה: Release 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 שאנשים קוראים לבין כאלה שמתעלמים מהם.

מתקדם 20 דקות freemium אסטרטגיה

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 שהצוות מסמן במפורש כמתאימים לאוטומציה.

מה עובד ומה לא

מצוין עבור:

לא מתאים ל:

Issues בעברית

יתרון מפתיע: אפשר לכתוב Issues בעברית מלאה. Claude מבין עברית ויכול לנתח Issue שכתוב "הכפתור 'הוסף לעגלה' בדף המוצר לא מגיב ללחיצה כשהמשתמש כבר הוסיף 3 פריטים" — הוא ימצא את הקוד הרלוונטי, יתקן, ויפתח PR עם תיאור באנגלית (או בעברית, אם תגדירו ב-CLAUDE.md). זה מאפשר גם לאנשים שלא טכניים לפתוח Issues שClaude יטפל בהם.

📚 דוגמאות מייצגות — Issue-to-PR Flow

Issue #47: "בדף ההרשמה, כשמזינים מייל עם אותיות גדולות (למשל [email protected]) המערכת אומרת שהמייל לא תקין"

מה Claude עושה:

  1. מנתח את ה-Issue — מבין שזו בעיית Case Sensitivity ב-email validation
  2. מחפש ב-codebase את קוד ה-validation: src/utils/validators.js
  3. מזהה שה-regex לא כולל i flag (case insensitive) — או שחסר .toLowerCase()
  4. מתקן, מוסיף טסט, ופותח Draft PR: "Fix #47: Normalize email to lowercase before validation"

כל הזמן: 2-3 דקות. בלי התערבות אנושית. הצוות רק צריך לעשות review ולמזג.

Issue-to-PR — הגדרות בטיחות

כמה הגדרות בטיחות שמומלץ להוסיף:

✍ עשו עכשיו 4 דקות

חשבו על 3 Issues שהיו מתאימים ל-Issue-to-PR. רשמו עם תיאור ברור. אם יש לכם Workflow — נסו אחד בפועל.

⚠ טעות נפוצה: Auto-merge על קוד אוטומטי

מה הטעות: לתת ל-Issue-to-PR workflow גם למזג PR בלי review אנושי.

למה מסוכן: קוד אוטומטי יכול לעבוד טכנית אבל לא להתאים לדפוסים, להחדיר tech debt, או לא לכסות edge cases.

מה לעשות: תמיד Draft PR + Review אנושי + Test Suite מלא. לעולם לא auto-merge על PRs אוטומטיים.

בינוני 15 דקות חינם הקמה

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. חוסך טוקנים ומייצר ממצאים ממוקדים.

✍ עשו עכשיו 4 דקות

צרו .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. מפתחים חדשים שמצטרפים לצוות מקבלים אוטומטית את כל הכללים שלמדתם מניסיון.

🎓 תרגיל 2: CLAUDE.md ו-Rules מותאמים ל-CI

זמן: 20 דקות | תוצר: CLAUDE.md + 2 קבצי rules

  1. פתחו/צרו CLAUDE.md בפרויקט
  2. הוסיפו 4 סעיפים: Project Context, Coding Standards, CI/CD Context, Security Requirements
  3. צרו .claude/rules/ci-review.md עם 5+ כללים
  4. צרו .claude/rules/ci-security.md עם frontmatter שמגביל לנתיבים רגישים
  5. דחפו ל-main, פתחו PR, בדקו שה-Review משקף את הכללים
  6. אם יש false positives — עדכנו rules ובדקו שוב

תוצאה: CLAUDE.md מקיף + 2 קבצי rules שמשפרים CI Reviews.

בינוני 20 דקות freemium תרגול

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 מותאם. בפעם הראשונה, הוא כנראה לא יהיה מושלם. התהליך המומלץ:

  1. כתבו Prompt ראשוני — מה שנראה לכם הגיוני
  2. הריצו על PR אמיתי — בדקו מה Claude מחזיר
  3. שפרו: אם Claude מפספס — הוסיפו הנחיות. אם הוא נותן יותר מדי — צמצמו
  4. חזרו עוד 2-3 סיבובים עד שהתוצאות מדויקות

זה בדיוק כמו לכתוב Test Cases — אתם צריכים לדעת מה אתם מצפים לקבל כדי לדעת אם התוצאה טובה.

מסגרת החלטה: בחירת Custom Workflow
אם הפרויקט שלכם... ה-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 שלמים
✍ עשו עכשיו 5 דקות

בחרו הדפוס הרלוונטי ביותר לפרויקט שלכם מהטבלה למעלה. כתבו Workflow YAML בסיסי (trigger + steps + prompt). שמרו כטיוטה ב-.github/workflows/ — תשלימו בתרגיל.

🎓 תרגיל 3: Custom Workflow End-to-End

זמן: 25 דקות | תוצר: Workflow עובד לצורך אמיתי

  1. בחרו צורך: docs? i18n? tests? dependency review? migration?
  2. כתבו Workflow YAML מלא: trigger, permissions, steps, prompt
  3. הוסיפו Path Filtering
  4. בחרו מודל: Sonnet לרוב, Opus רק למשימות קריטיות
  5. דחפו, trigger, בדקו תוצאה ב-Actions Tab
  6. תקנו Prompt אם צריך (איטרציה)

תוצאה: Workflow עובד שרץ אוטומטית ומייצר ערך אמיתי.

בינוני 15 דקות freemium אסטרטגיה

שליטה בעלויות 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 טכניקות חיסכון שעובדות

  1. Path Filtering (הכי אפקטיבי): סרקו רק קבצי source code. ב-PR ממוצע, 40-60% מהשינויים הם lock files, configs, וקבצים שנוצרו אוטומטית שלא צריכים review. Path Filtering חותך עלויות ב-50-75% מיידית
  2. MAX_THINKING_TOKENS=8192: הגדירו את משתנה הסביבה הזה ב-CI. רוב משימות CI לא דורשות חשיבה עמוקה — Claude יכול לתת תשובה ישירה. זה חותך את עלות הטוקנים של extended thinking
  3. --bare flag: חוסך 2-5 שניות startup per invocation. לא חוסך טוקנים, אבל ב-GitHub Actions Minutes זמן = כסף. על 100+ ריצות בשבוע — זה מצטבר
  4. Skip Logic: אם אותם קבצים לא השתנו מאז ה-Review האחרון — דלגו על הריצה. אפשר לממש עם cache של SHA hashes ותנאי if ב-Workflow
  5. 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

מה שוכחים: מעבר לעלות טוקנים, יש גם עלות של GitHub Actions Minutes. החשבון החינמי מקבל 2,000 דקות/חודש. כל ריצה של Claude לוקחת 1-3 דקות.

למה חשוב: 100 ריצות/שבוע x 2 דקות = 800 דקות/שבוע = 3,200 דקות/חודש — מעבר לחינם.

מה לעשות: בדקו את מכסת ה-Minutes שלכם ב-GitHub Settings → Billing. ב-Team/Enterprise plan זה בדרך כלל לא בעיה, אבל ב-Free plan — תכננו מראש.

✍ עשו עכשיו 3 דקות

כמה PRs בשבוע בפרויקט שלכם? הכניסו לנוסחה: PRs x 4 x $0.20. זו עלות ה-Review בלבד. הוסיפו security ($40/חודש אם יש 10 pushes/שבוע ל-main). סכמו — זה התקציב שצריך לאשר.

🎓 תרגיל 4: Pipeline מלא + מודל עלויות

זמן: 30 דקות | תוצר: Pipeline שלם + טבלת עלויות

  1. ודאו 3 Workflows: review, security, release-notes
  2. ודאו CLAUDE.md + rules מותאמים
  3. Path Filtering + מודל מתאים בכל Workflow
  4. טבלת עלויות: Workflow, תדירות, מודל, עלות/ריצה, עלות/חודש
  5. סכמו עלות חודשית. חשבו ROI מול שעות review אנושי
  6. בדקו Pipeline מלא: PR → Review → Merge → Tag → Release
  7. הגדירו Budget Alert ב-Anthropic Console

תוצאה: Pipeline מתועד עם מודל עלויות ו-Budget Alert.

בינוני 15 דקות חינם מושג

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)
✍ עשו עכשיו 3 דקות

ב-Terminal, הריצו: claude -p "What files changed in the last commit?" --bare. אם זה עובד — הפלט הזה אפשר לשלב בכל מערכת CI. זה ה-building block הבסיסי.

הדפוס האוניברסלי — מה שמשותף לכולם

בלי קשר לאיזו מערכת CI אתם משתמשים, הדפוס זהה:

  1. התקינו Claude Code: npm install -g @anthropic-ai/claude-code
  2. הגדירו API Key: דרך Secrets/Credentials של המערכת
  3. חשבו Diff: git diff origin/main...HEAD
  4. שלחו ל-Claude: echo "$DIFF" | claude -p "Review this" --bare
  5. תפסו פלט: שמרו כ-artifact, שלחו כ-comment, או בדקו exit code

זה עובד בכל מקום. ההבדל בין מערכות הוא רק תחביר ההגדרות (YAML ב-GitHub/GitLab, Groovy ב-Jenkins, JSON ב-Azure) ואיך מנהלים Secrets. הלוגיקה זהה.

⚠ טעות נפוצה: התעלמות מ-Exit Code

מה הטעות: להריץ 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 — הגדירו את משתני הסביבה המתאימים:

claude-code-action@v1 תומך בשני הפרוביידרים. פשוט החליפו anthropic_api_key ב-credentials המתאימים. היתרון: billing דרך חשבון הענן הקיים שלכם, compliance מובנה, ואולי מחירים מוזלים אם יש לכם הסכם enterprise עם AWS או Google.

✍ עשו עכשיו 2 דקות

זהו את מערכת ה-CI הראשית שלכם ואת הפרוביידר (Anthropic Direct / AWS Bedrock / Google Vertex). סמנו הדוגמה הרלוונטית. אם אתם ב-GitHub עם Anthropic Direct — הכל מוכן לשימוש מייד.

שגרת עבודה — CI/CD עם Claude Code

בנוסף לשגרה מפרק 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. זה תהליך אורגני שמשתפר עם הזמן.

✍ עשו עכשיו 2 דקות

פתחו את 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) הוא בונוס שנבנה על הבסיס הזה.

✅ בדוק את עצמך — 5 שאלות

ענו על לפחות 4 מתוך 5 כדי לעבור:

  1. למה כדאי להפריד Workflow של Review מ-Workflow של Security, ולא לשים הכל באחד?
    (רמז: מודל, תזמון, עלות, סוג פלט — review comments vs. security gate)
  2. איך Path Filtering חוסך עלויות, ומה הסיכון בלעדיו?
    (רמז: PR של 20 קבצים — כמה באמת צריכים review?)
  3. מה ההבדל בין claude-code-action@v1 לבין claude -p --bare ב-CI, ומתי כל גישה עדיפה?
    (רמז: inline comments, @mention, תאימות בין מערכות)
  4. למה Issue-to-PR חייב ליצור Draft PR ולא PR רגיל?
    (רמז: מגבלות קוד אוטומטי, צורך בשיקול דעת אנושי)
  5. איך 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, ולולאת הסוכן.

☑ צ׳קליסט השלמת הפרק