# שגרת הפצה שבועית עם skill: כל יום ראשון בבוקר, טיוטות לכל הלקוחות מחכות לאישור

_2026-09-29 · איך בונים skill עבור Claude Code שמריץ שגרת הפצה שבועית מול שַׁגֵּר: קריאת בריף, טיוטות לכל חשבון, שליחה לאישור, דוח לחיצות, והרצה אוטומטית עם claude -p וגם cron._

שגרת הפצה שבועית עם skill היא קובץ `SKILL.md` אחד בכלי Claude Code שמגדיר לסוכן מה לעשות כל שבוע: לקרוא את הבריף של הלקוח, לבדוק מה עבד בשבוע הקודם עם `get_analytics`, להכין טיוטות לכל החשבונות עם ניסוח שונה לכל אחד, ולשלוח אותן לאישור. מפעילים אותה ידנית עם `/shager-weekly` ושם הלקוח, או אוטומטית עם `claude -p` מתוך cron. התזמון בפועל נשאר אצל אדם, או אצל הסוכן רק אחרי אישור מפורש.

המדריך ממשיך את המדריך [על בניית skill לְשַׁגֵּר](/blog/build-a-claude-skill-for-shager). שם בנינו skill כללי שמלמד את הסוכן להשתמש בְּשַׁגֵּר נכון. כאן אנחנו בונים skill צר יותר, עם משימה אחת שחוזרת כל שבוע.

## למה שגרה ולא בקשה חופשית?

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

## המבנה בריפו

הנחת העבודה כאן היא ריפו אחד לכל התוכן של הסוכנות, עם תיקייה לכל לקוח:

```text
content-ops/
├── .mcp.json
├── .claude/
│   └── skills/
│       └── shager-weekly/
│           ├── SKILL.md
│           └── assets/
│               └── weekly-report-template.md
└── clients/
    ├── acme/
    │   ├── brand.md
    │   └── weeks/
    │       └── 2026-w40.md
    └── dental-north/
        ├── brand.md
        └── weeks/
```

הקובץ `brand.md` מחזיק את מה שקבוע ללקוח, ומשתנה רק כשהלקוח משנה כיוון: טון, מילים אסורות, מזהה סביבת העבודה בְּשַׁגֵּר, קבוצות החשבונות ושם הסוקר אצל הלקוח. קובץ השבוע מחזיק את מה שמשתנה: מסרים, קישורים, מדיה, ימים מועדפים. מנהלת התיק כותבת אותו ביום חמישי, והסוכן עובד ממנו ביום ראשון. החיבור לְשַׁגֵּר מוגדר בקובץ `.mcp.json` עם משתנה סביבה, כמו שהסברנו במדריך [לחיבור שַׁגֵּר אל Claude Code](/blog/connect-shager-to-claude-code).

## קובץ SKILL.md

```markdown
---
name: shager-weekly
description: Weekly distribution routine for one client in Shager. Use when asked to run the weekly routine, prepare this week's posts, or "shager weekly" for a client.
disable-model-invocation: true
argument-hint: [client-folder]
allowed-tools: Read Glob mcp__shager__whoami mcp__shager__list_workspaces mcp__shager__list_channels mcp__shager__list_groups mcp__shager__list_posts mcp__shager__get_post mcp__shager__get_analytics mcp__shager__upload_media_from_url mcp__shager__create_post mcp__shager__request_approval
---

# Weekly routine for clients/$ARGUMENTS

1. Read clients/$ARGUMENTS/brand.md and the newest file in
   clients/$ARGUMENTS/weeks/. If there is no file for this week, stop
   and say so.
2. get_analytics for the last 7 days. Note the 3 accounts with the most
   clicks and the 3 with the fewest.
3. list_posts with status SCHEDULED to avoid double posting.
4. For every post in the week file:
   a. upload_media_from_url with width, height, duration_ms for video.
   b. create_post as a draft with group_ids from brand.md, per_channel
      with a different caption for every account, cta_url, first_comment,
      campaign and a label "<client> <week> <n>".
5. request_approval for each draft with the reviewer from brand.md.
6. Fill assets/weekly-report-template.md and print it.

Never call schedule_post in this routine.
```

כמה בחירות שכדאי להסביר.

`disable-model-invocation: true` אומר שהמודל Claude לא יטען את הסקיל (skill) לבד, רק כשמישהו מקליד `/shager-weekly`. זה שדה של Claude Code, ו[התיעוד על skills](https://code.claude.com/docs/en/skills) ממליץ עליו בדיוק לזרימות עם השפעות חיצוניות. החיסרון הוא שה skill הזה לא יתאים להעלאה לאתר claude.ai, שמקבל רק את שדות המפרט הפתוח. לשגרה שרצה מהטרמינל זה בסדר גמור.

`$ARGUMENTS` מוחלף במה שכותבים אחרי שם הסקיל. `/shager-weekly acme` יריץ את השגרה על התיקייה `clients/acme`.

`allowed-tools` מאשר מראש את הכלים שהשגרה צריכה, כך שהיא לא נעצרת לשאול על כל קריאה. שימו לב שהפעולה `schedule_post` לא ברשימה, וגם `cancel_post` לא. אם הסוכן ינסה להשתמש בהם, הוא ייעצר לבקש אישור, ובהרצה אוטומטית הבקשה פשוט תידחה.

### הגנה נוספת בצד של שַׁגֵּר

הרשימה בשדה `allowed-tools` היא שכבה אחת. השכבה החזקה יותר היא המפתח. אם המפתח שהשגרה משתמשת בו נוצר בלי הרשאת `publish`, שום דבר בצד של Claude Code לא יוכל לתזמן פוסט, גם אם מישהו ישנה את הסקיל. בכתובת `https://app.shager.ai/dashboard/agents` יוצרים מפתח ייעודי לשגרה, ויומן הביקורת מראה בדיוק מה הוא עשה בכל הרצה.

## הרצה ידנית ביום ראשון

הדרך הפשוטה ביותר: מנהלת התיק פותחת `claude` בריפו ומקלידה:

```text
/shager-weekly acme
```

הסוכן קורא את הקבצים, בודק את השבוע הקודם, מכין טיוטות ושולח אותן לאישור. בסוף הוא מדפיס דוח קצר: כמה טיוטות נוצרו, לכמה חשבונות, אילו חשבונות הביאו הכי הרבה לחיצות בשבוע שעבר, ומה מחכה לאישור. הלקוח מקבל קישור אישור ומאשר בלי להתחבר לשום מערכת. התהליך מצד הלקוח מתואר במדריך [על תהליך אישור לקוחות בסוכנות](/blog/client-approval-workflow-for-agencies).

## הרצה אוטומטית עם `claude -p`

כשהשגרה יציבה, אפשר להריץ אותה בלי אדם מול המסך. [התיעוד על הרצה לא אינטראקטיבית](https://code.claude.com/docs/en/headless) מסביר שמיומנויות (skills) שמופעלות ידנית עובדים גם במצב `-p`: כוללים את `/skill-name` בפרומפט, והכלי Claude Code מרחיב אותו לפני ההרצה.

```bash
cd ~/content-ops && claude -p "/shager-weekly acme" \
  --permission-mode dontAsk \
  --output-format json > logs/acme-$(date +%Y-%m-%d).json
```

במצב `dontAsk`, כל פעולה שהייתה דורשת אישור נדחית, ורק מה שמאושר מראש רץ. זו בדיוק ההתנהגות שרוצים בהרצה ללא השגחה. מי שרוצה שכבת ביטחון נוספת יכול להעביר את אותה רשימת כלים גם בדגל `--allowedTools` של הפקודה, כך שההרשאות מוגדרות גם בסקריפט עצמו ולא רק בתוך הסקיל. כך, גם אם מישהו ישנה את הסקיל בטעות, הפקודה עדיין לא תאפשר יותר ממה שהגדרתם בה. את הפקודה מכניסים לתזמון cron, למשל כל יום ראשון בשבע בבוקר:

```text
0 7 * * 0  cd ~/content-ops && ./run-weekly.sh
```

עוד שתי הערות מהתיעוד. הראשונה: אל תשתמשו כאן בדגל `--bare`. מצב bare מדלג על skills ועל שרתי MCP מהקובץ `.mcp.json`, ואז השגרה לא תמצא לא את הסקיל ולא את שַׁגֵּר. השנייה: הרצת `-p` בתיקייה טוענת את ההגדרות ואת שרתי MCP שלה בלי לשאול. הריצו אותה רק בריפו שאתם שולטים בו.

משתנה הסביבה עם המפתח של שַׁגֵּר צריך להיות זמין לתזמון cron, שבדרך כלל לא טוען את קובץ ההגדרות של המעטפת (shell) שלכם. את זה פותרים בסקריפט העוטף, שטוען את המשתנה מקובץ סודות לפני ההרצה.

## מה עושים ביום שני

השגרה מכינה ושולחת לאישור. מה שקורה אחרי זה הוא החלטה שלכם. יש שתי גישות נפוצות:

1. **אדם מתזמן.** מנהלת התיק נכנסת לְשַׁגֵּר ביום שני, רואה מה אושר, ומתזמנת. זו הגישה הבטוחה, ומתאימה ללקוחות חדשים.
2. **skill שני מתזמן.** skill נפרד, למשל `/shager-schedule-approved`, שמריץ `list_posts` עם סטטוס `APPROVED` ומתזמן לפי הימים בקובץ השבוע. הוא רץ עם מפתח אחר, שיש לו `publish`, ואדם מפעיל אותו ידנית.

הפרדה בין "הכנה" לבין "תזמון" לשני skills ושני מפתחות נראית כמו עבודה כפולה, אבל היא מה שמאפשר לישון בשקט. ואם יוצא שבוע עם חג, עדיף שאדם יעבור על התאריכים. לוח השנה של שַׁגֵּר מציג חגים ישראליים, וזה המקום הנוח לבדוק את זה.

## דוח השבוע

התבנית `assets/weekly-report-template.md` היא מה שהופך את השגרה לשימושית גם ללקוח. היא יכולה להיות פשוטה: טבלה של חשבונות עם לחיצות בשבוע שעבר, שלושת הפוסטים המובילים, ומה מתוכנן לשבוע הבא. מכיוון שכל חשבון מקבל בְּשַׁגֵּר קישור מקוצר ותגיות UTM משלו, הנתונים ברמת החשבון זמינים בלי שום הגדרה נוספת.

הצעד הבא הוא להרחיב מלקוח אחד לכמה. התחילו בלקוח אחד במשך שלושה שבועות, תקנו את הסקיל לפי מה שלא עבד, ורק אז הוסיפו שורה לתזמון cron לכל לקוח נוסף. את התמונה המלאה, מבריף ועד דוח, פרשנו ב[מדריך לצינור תוכן של סוכן מקצה לקצה](/blog/agent-content-pipeline-end-to-end).

## שאלות נפוצות

### אפשר להריץ את השגרה הזו באתר claude.ai במקום בכלי Claude Code?

לא בצורה הזו. השדות `disable-model-invocation`, `allowed-tools` וגם `argument-hint` שייכים לכלי Claude Code, וההרצה האוטומטית עם `claude -p` ועם cron היא יכולת של הטרמינל. באתר claude.ai אפשר להעלות גרסה פשוטה יותר עם `name` וגם `description` בלבד ולהפעיל אותה בשיחה.

### מה קורה אם קובץ השבוע חסר?

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

### כמה זמן לוקחת הרצה כזו?

זה תלוי במספר הפוסטים ובכמות המדיה, ולא מדדנו מספר שאפשר להתחייב אליו. קריאה אחת לפעולה `create_post` עם `group_ids` מכסה עשרות חשבונות, כך שהצוואר בקבוק הוא בדרך כלל כתיבת הניסוחים ולא הקריאות לְשַׁגֵּר.

---
Source: https://shager.ai/blog/skill-weekly-distribution-routine
