המלצה | משתמשי קלוד, מצטערים על המכסה השעתית שמתבזבזת בלילה? זה הפתרון
-
בתור משתמש בקלוד שתמיד מסיים בשעות הפעילות שלי את המכסה של החמש שעות בקלוד, אני רוצה לשתף אתכם בפתרון חמוד,
אמרתי לו שיבנה לי סוכן (קראתי לו ׳יוסף מאיר׳ סתם מה שקפץ לי בראש..) שבנוי על המחשב עצמו (בניתי גם בווינדוס וגם במק)
הסקיל הזה מוכר לכל הסשנים כך שניתן לומר לקלוד באמצע שיחה את החלק הזה תאמר ל׳יוסף מאיר׳ שיבנה את זה בשעה זו וזו (ניתן להגדיר לו הרשאה שיוכל להפעיל את המק ממצב שינה)
מאוד שימושי!
(בלי קשר לזה ניתן לבקש מקלוד בדפדפן שיעשה משימה מתוזמנת כל חמש שעות ודקה כך שהמכסה תתחיל להספר כל פעם שנגמרת הקודמת, כך יותר פעמים תגיעו לעבודה עם מכסה שמתאפסת עוד כמה דקות ולעבוד ברצף בלי הגבלה)
ההנה הפרומט לכזה דבר (כמובן קלוד כתב אותו)
||אני רוצה שתבנה לי במחשב הזה "סוכן לילה": סוכן Claude שרץ לבד בשעה מתוזמנת, בלי שאני מול המסך.
שם הסוכן: יוסף מאיר (אפשר להחליף לכל שם אחר. בהמשך, "הסוכן" = השם הזה).הרעיון
כשהמכסה שלי נגמרת, או כשאני רוצה שמשהו ייעשה בלילה, אגיד לסשן: "תשלח ל<הסוכן> לעשות X בשעה Y". הסשן:
- כותב קובץ משימה (Markdown, בשפה שלי) עם כל ההקשר מהשיחה: נתיבים מלאים, מה כבר נוסה, מה הוחלט, גבולות, מתי המשימה נחשבת גמורה, ואילו פעולות בלתי הפיכות אישרתי במפורש. הסוכן מתחיל בלי לדעת כלום על השיחה.
- מתזמן ריצה חד-פעמית במתזמן של מערכת ההפעלה.
בשעה שנקבעה, סקריפט הרצה מפעיל
claude -p(מצב headless) עם--dangerously-skip-permissions, כלומר עם גישה מלאה. לפני שאתה בונה, תסביר לי במשפט-שניים מה המשמעות של גישה מלאה בלי השגחה, ותמשיך רק אחרי שאישרתי.שני מצבים
- task (ברירת המחדל): סשן חדש (
--session-id <uuid חדש>) מבצע את קובץ המשימה. - wake: "מעיר" את הסשן המקורי עם
claude -p --resume <session-id>ומוסר לו קובץ תזכורת. הסשן ממשיך עם כל ההקשר שלו.- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
scratchpad). - אם הוא לא מופיע שם, לוקחים את קובץ ה-
.jsonlהחדש ביותר ב-~/.claude/projects/<תיקיית העבודה כשהתווים / \ : מוחלפים ב-->/. - חובה להריץ את ה-resume מתוך תיקיית העבודה של הסשן המקורי, כי resume מוצא את הסשן לפי התיקייה.
- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
התנהגות הסוכן (קובץ הוראות קבע, נטען לכל ריצה עם
--append-system-prompt-fileאו--append-system-prompt)צור קובץ
AGENT.mdעם ההוראות האלה, בשפה שלי:- אין אף אחד מול המסך. אל תשאל ואל תחכה, כי שאלה בצ'אט פשוט תאבד.
- התלבטות קטנה: מחליטים לפי שיקול דעת סביר, ממשיכים, ורושמים את ההחלטה בדוח.
- שאלה אמיתית (כזו שטעות בה תקלקל משהו או תגרום לעבודה מיותרת): לא מנחשים. רושמים אותה ב-
journal.md, מדלגים על החלק הזה, וממשיכים בכל השאר. - לפני מחיקה או דריסה, מסתכלים על מה שעומד להימחק. פעולות בלתי הפיכות (מחיקת נתונים, שליחת מייל או הודעה החוצה, פרסום, push) מותרות רק אם המשימה מבקשת אותן במפורש. אחרת, זו שאלה אמיתית שהולכת ליומן.
- אם משהו נכשל: מנסים לתקן. אם אי אפשר, מתעדים מה נוסה ומה השגיאה, וממשיכים לשאר.
- יומן:
<ROOT>/journal.md. מוסיפים שורות בסוף הקובץ ולא דורסים. פורמט:- <תאריך ושעה> | <מזהה משימה> | <השאלה או הבעיה, עם מספיק הקשר שיהיה מובן בבוקר>. - דוח (במצב task):
<ROOT>/reports/<id>.md. מה נעשה, אילו קבצים השתנו, אילו החלטות התקבלו, מה לא נעשה ולמה, ומה לבדוק בבוקר. קצר. - במצב wake: אין צורך בדוח, כי התשובה נשמרת בסשן. שאלות אמיתיות עדיין הולכות ליומן.
מבנה
- תיקייה
~/<שם-הסוכן-באנגלית>/(להלן ROOT), ובה:tasks/,reports/,logs/,AGENT.md,journal.md(עם כותרת),queue.log, סקריפט שליחה (send) וסקריפט הרצה (run). - send מקבל: mode, שעה (
YYYY-MM-DD HH:MM), קובץ, session-id (חובה ב-wake), תיקיית עבודה, ו-id אופציונלי. אם לא ניתן id, הוא יוצר אחד בפורמט<mode>-<yyyyMMdd-HHmm>-<6 תווים אקראיים>. הוא:- בודק שהקובץ קיים ושהשעה בעתיד.
- הופך את נתיב הקובץ לנתיב מלא.
- רושם את המשימה במתזמן.
- מוסיף שורה ל-
queue.log. - מדפיס את ה-id ואת השעה.
- run:
- מוצא את claude (פירוט בהמשך) ובודק שהקובץ קיים.
- הפרומט שמועבר ל-
claude -pכתוב באנגלית ומפנה לקובץ, למשל:You are <name>. Read the task file <path> (UTF-8) and carry it out completely. Your task id is <id>. - מוסיף
--add-dir <ROOT>. - stdin ריק (
/dev/null, או קובץ ריק בווינדוס), אחרתclaude -pעלול להיתקע בהמתנה לקלט. - כותב את הפלט ללוג
logs/<id>.log. - מכסה חסומה: אם קוד היציאה שונה מ-0, או שהפלט מכיל
usage limit|rate limit|limit reached|hit your limit|out of usage|resets at|overloaded, מנסה שוב כל 30 דקות, עד 8 פעמים. אם כל הניסיונות נכשלו, נרשמת שורת FAILED ב-journal.md.
איפה claude נמצא
מי שמשתמש רק בתוסף של VSCode, claude לא נמצא אצלו ב-PATH. קובץ ההרצה נמצא בתוך התוסף, והנתיב משתנה בכל עדכון. לכן run מחפש בכל ריצה את הגרסה החדשה ביותר (מיון לפי מספר גרסה, לא לפי סדר אלפביתי):
- Windows:
%USERPROFILE%\.vscode\extensions\anthropic.claude-code-<ver>-win32-<arch>\resources\native-binary\claude.exe - Mac:
~/.vscode/extensions/anthropic.claude-code-<ver>-darwin-<arch>/resources/native-binary/claude - אם לא נמצא שם:
~/.local/bin/claude, \u200F/opt/homebrew/bin/claude, \u200F%APPDATA%\npm\claude.cmd, ואז PATH.
אם זה Windows (PowerShell + Task Scheduler)
- PowerShell 5.1 קורא קבצי .ps1 בלי BOM כ-ANSI. לכן אסור שיהיו בקבצי ה-ps1 תווים שאינם ASCII (עברית וכו'). כל הטקסט בשפה שלי נמצא בקבצי md.
- המשימה במתזמן:
powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File run.ps1 ..., בתיקייה\<AgentName>\. - Trigger
-Once -At, עםEndBoundary= השעה + יומיים. - Settings:
-WakeToRun -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 12h -MultipleInstances Parallel -DeleteExpiredTaskAfter 1d. כלומר: מעיר משינה, רץ כשהמחשב עולה אם הוא היה כבוי, ונמחק אחרי הריצה. - Principal: המשתמש הנוכחי,
-LogonType Interactive -RunLevel Limited. - הרצת claude דרך
Start-Process -RedirectStandardInput <קובץ ריק> -RedirectStandardOutput/-Error -NoNewWindow -Wait -PassThru. שים לב למירכאות בארגומנטים שיש בהם רווחים. - פקודות: מה מתוזמן:
Get-ScheduledTask -TaskPath '\<AgentName>\'. ביטול:Unregister-ScheduledTask -TaskPath '\<AgentName>\' -TaskName <id> -Confirm:$false.
אם זה Mac (bash + launchd)
ב-launchd אין "חד-פעמי" ואין "להעיר משינה", ולכן:
- send יוצר
~/Library/LaunchAgents/com.<agentname>.<id>.plistעםStartCalendarInterval(חודש, יום, שעה, דקה) ועםRunAtLoad=true, כדי שהמשימה תרוץ גם אחרי הפעלה מחדש. הוא טוען אותו עםlaunchctl bootstrap gui/$(id -u), ומעביר ל-run את השעה המתוזמנת כ-epoch.
️ באג שכבר קרה: date -j -f "%Y-%m-%d %H:%M"בלי שניות לוקח את השניות של הרגע הנוכחי, ולכן ה-epoch לא יוצא עגול. צריך לפרסר עם"%Y-%m-%d %H:%M:%S"ולהוסיף:00לשעה.- לעשות escape ל-XML בערכים (
&,<,>).
- run בודק בעצמו את השעה, כי launchd מפעיל אותו גם בטעינה:
- מוקדם מדי (לפני השעה, עם מרווח של 30 שניות בלבד): יוצא בלי לעשות כלום.
- יש קובץ סימון
logs/<id>.started: המשימה כבר רצה, אז הוא מנקה ויוצא. - איחור של יותר מיומיים: רושם EXPIRED ולא רץ.
- אחרת: יוצר את קובץ הסימון, מוחק את ה-plist מיד (כדי שהמשימה לא תרוץ שוב אחרי הפעלה מחדש), רץ, ובסוף מבצע
launchctl bootoutלעצמו. זו חייבת להיות השורה האחרונה.
- launchd מריץ עם PATH מינימלי, לכן run מגדיר בעצמו את PATH (כולל
/opt/homebrew/binו-~/.local/bin) ואתLANG/LC_ALL=en_US.UTF-8. - שינה: מריצים את claude דרך
caffeinate -i, כדי שהמק לא יירדם באמצע העבודה. caffeinate מעביר את קוד היציאה כמו שהוא. - השכמה לילית: כדי שהמק יתעורר לבד צריך להריץ
sudo pmset repeat wakeorpoweron MTWRFSU 02:55:00. תן לי את הפקודה ותסביר איך מריצים אותה ב-Terminal. אל תריץ אותה בעצמך, כי היא דורשת סיסמה. ביטול:sudo pmset repeat cancel. - פקודות: מה מתוזמן:
ls ~/Library/LaunchAgents/com.<agentname>.*. ביטול:launchctl bootout gui/$(id -u)/com.<agentname>.<id>, ואז למחוק את ה-plist.
אחרי שהקבצים מוכנים
-
בדיקה: כתוב
tasks/test-hello.md: לכתוב דוח עם השעה ותיקיית העבודה, ולהוסיף ליומן שורת בדיקה בשפה שלי. תזמן אותה לעוד 3 דקות עםid test-hello, ואז:- חכה ובדוק את הלוג, את הדוח ואת היומן. ודא גם שהטקסט בשפה שלי נכתב תקין.
- ודא שהיא רצה בשעה שנקבעה ולא מיד בטעינה (לפי חותמות הזמן בלוג).
- ודא שהמשימה נמחקה מהמתזמן אחרי הריצה.
- אחרי שהכל עבד, מחק מהיומן את שורת הבדיקה.
-
סקיל: צור
~/.claude/skills/<agentname>/SKILL.mdעםnameועםdescriptionשמזכיר את הביטויים "תשלח ל<הסוכן>", "ש<הסוכן> יעשה בלילה" ו"תעיר את הסשן בשעה X". בתוכן:- איך שולחים task ו-wake (פקודות מלאות).
- מה חייב להיות בקובץ משימה.
- איך מוצאים session-id.
- איך בודקים מה מתוזמן, איך מבטלים, ואיך רואים מה הסוכן עשה (
reports/,journal.md,logs/). - ברירות מחדל: "בלילה" בלי שעה = 03:00. אחרי שליחה, לדווח לי את ה-id ואת השעה.
אם מנגנון הבטיחות של Claude Code חוסם את יצירת הסקיל, אל תנסה לעקוף אותו. תגיד לי, ואני אאשר ידנית או אשמור את הקובץ בעצמי.
-
זיכרון: שמור memory שמסביר מי זה <הסוכן>, איפה הקבצים שלו, ושהסקיל קיים. כך גם סשנים אחרים ידעו למה אני מתכוון.
-
דווח לי: מה נבנה, מה נבדק ועבד, מה לא, ומה אני צריך לעשות בעצמי.
לזכור
- המחשב צריך להיות דלוק או במצב שינה, ואני צריך להיות מחובר למשתמש שלי. אם המחשב כבוי, המשימה תרוץ כשהוא יעלה (בתנאי שזה תוך יומיים).
- הסוכן משתמש במכסה הרגילה שלי. אם היא חסומה בשעה שנקבעה, הוא מנסה שוב כל חצי שעה, עד 4 שעות.
||
-
בתור משתמש בקלוד שתמיד מסיים בשעות הפעילות שלי את המכסה של החמש שעות בקלוד, אני רוצה לשתף אתכם בפתרון חמוד,
אמרתי לו שיבנה לי סוכן (קראתי לו ׳יוסף מאיר׳ סתם מה שקפץ לי בראש..) שבנוי על המחשב עצמו (בניתי גם בווינדוס וגם במק)
הסקיל הזה מוכר לכל הסשנים כך שניתן לומר לקלוד באמצע שיחה את החלק הזה תאמר ל׳יוסף מאיר׳ שיבנה את זה בשעה זו וזו (ניתן להגדיר לו הרשאה שיוכל להפעיל את המק ממצב שינה)
מאוד שימושי!
(בלי קשר לזה ניתן לבקש מקלוד בדפדפן שיעשה משימה מתוזמנת כל חמש שעות ודקה כך שהמכסה תתחיל להספר כל פעם שנגמרת הקודמת, כך יותר פעמים תגיעו לעבודה עם מכסה שמתאפסת עוד כמה דקות ולעבוד ברצף בלי הגבלה)
ההנה הפרומט לכזה דבר (כמובן קלוד כתב אותו)
||אני רוצה שתבנה לי במחשב הזה "סוכן לילה": סוכן Claude שרץ לבד בשעה מתוזמנת, בלי שאני מול המסך.
שם הסוכן: יוסף מאיר (אפשר להחליף לכל שם אחר. בהמשך, "הסוכן" = השם הזה).הרעיון
כשהמכסה שלי נגמרת, או כשאני רוצה שמשהו ייעשה בלילה, אגיד לסשן: "תשלח ל<הסוכן> לעשות X בשעה Y". הסשן:
- כותב קובץ משימה (Markdown, בשפה שלי) עם כל ההקשר מהשיחה: נתיבים מלאים, מה כבר נוסה, מה הוחלט, גבולות, מתי המשימה נחשבת גמורה, ואילו פעולות בלתי הפיכות אישרתי במפורש. הסוכן מתחיל בלי לדעת כלום על השיחה.
- מתזמן ריצה חד-פעמית במתזמן של מערכת ההפעלה.
בשעה שנקבעה, סקריפט הרצה מפעיל
claude -p(מצב headless) עם--dangerously-skip-permissions, כלומר עם גישה מלאה. לפני שאתה בונה, תסביר לי במשפט-שניים מה המשמעות של גישה מלאה בלי השגחה, ותמשיך רק אחרי שאישרתי.שני מצבים
- task (ברירת המחדל): סשן חדש (
--session-id <uuid חדש>) מבצע את קובץ המשימה. - wake: "מעיר" את הסשן המקורי עם
claude -p --resume <session-id>ומוסר לו קובץ תזכורת. הסשן ממשיך עם כל ההקשר שלו.- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
scratchpad). - אם הוא לא מופיע שם, לוקחים את קובץ ה-
.jsonlהחדש ביותר ב-~/.claude/projects/<תיקיית העבודה כשהתווים / \ : מוחלפים ב-->/. - חובה להריץ את ה-resume מתוך תיקיית העבודה של הסשן המקורי, כי resume מוצא את הסשן לפי התיקייה.
- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
התנהגות הסוכן (קובץ הוראות קבע, נטען לכל ריצה עם
--append-system-prompt-fileאו--append-system-prompt)צור קובץ
AGENT.mdעם ההוראות האלה, בשפה שלי:- אין אף אחד מול המסך. אל תשאל ואל תחכה, כי שאלה בצ'אט פשוט תאבד.
- התלבטות קטנה: מחליטים לפי שיקול דעת סביר, ממשיכים, ורושמים את ההחלטה בדוח.
- שאלה אמיתית (כזו שטעות בה תקלקל משהו או תגרום לעבודה מיותרת): לא מנחשים. רושמים אותה ב-
journal.md, מדלגים על החלק הזה, וממשיכים בכל השאר. - לפני מחיקה או דריסה, מסתכלים על מה שעומד להימחק. פעולות בלתי הפיכות (מחיקת נתונים, שליחת מייל או הודעה החוצה, פרסום, push) מותרות רק אם המשימה מבקשת אותן במפורש. אחרת, זו שאלה אמיתית שהולכת ליומן.
- אם משהו נכשל: מנסים לתקן. אם אי אפשר, מתעדים מה נוסה ומה השגיאה, וממשיכים לשאר.
- יומן:
<ROOT>/journal.md. מוסיפים שורות בסוף הקובץ ולא דורסים. פורמט:- <תאריך ושעה> | <מזהה משימה> | <השאלה או הבעיה, עם מספיק הקשר שיהיה מובן בבוקר>. - דוח (במצב task):
<ROOT>/reports/<id>.md. מה נעשה, אילו קבצים השתנו, אילו החלטות התקבלו, מה לא נעשה ולמה, ומה לבדוק בבוקר. קצר. - במצב wake: אין צורך בדוח, כי התשובה נשמרת בסשן. שאלות אמיתיות עדיין הולכות ליומן.
מבנה
- תיקייה
~/<שם-הסוכן-באנגלית>/(להלן ROOT), ובה:tasks/,reports/,logs/,AGENT.md,journal.md(עם כותרת),queue.log, סקריפט שליחה (send) וסקריפט הרצה (run). - send מקבל: mode, שעה (
YYYY-MM-DD HH:MM), קובץ, session-id (חובה ב-wake), תיקיית עבודה, ו-id אופציונלי. אם לא ניתן id, הוא יוצר אחד בפורמט<mode>-<yyyyMMdd-HHmm>-<6 תווים אקראיים>. הוא:- בודק שהקובץ קיים ושהשעה בעתיד.
- הופך את נתיב הקובץ לנתיב מלא.
- רושם את המשימה במתזמן.
- מוסיף שורה ל-
queue.log. - מדפיס את ה-id ואת השעה.
- run:
- מוצא את claude (פירוט בהמשך) ובודק שהקובץ קיים.
- הפרומט שמועבר ל-
claude -pכתוב באנגלית ומפנה לקובץ, למשל:You are <name>. Read the task file <path> (UTF-8) and carry it out completely. Your task id is <id>. - מוסיף
--add-dir <ROOT>. - stdin ריק (
/dev/null, או קובץ ריק בווינדוס), אחרתclaude -pעלול להיתקע בהמתנה לקלט. - כותב את הפלט ללוג
logs/<id>.log. - מכסה חסומה: אם קוד היציאה שונה מ-0, או שהפלט מכיל
usage limit|rate limit|limit reached|hit your limit|out of usage|resets at|overloaded, מנסה שוב כל 30 דקות, עד 8 פעמים. אם כל הניסיונות נכשלו, נרשמת שורת FAILED ב-journal.md.
איפה claude נמצא
מי שמשתמש רק בתוסף של VSCode, claude לא נמצא אצלו ב-PATH. קובץ ההרצה נמצא בתוך התוסף, והנתיב משתנה בכל עדכון. לכן run מחפש בכל ריצה את הגרסה החדשה ביותר (מיון לפי מספר גרסה, לא לפי סדר אלפביתי):
- Windows:
%USERPROFILE%\.vscode\extensions\anthropic.claude-code-<ver>-win32-<arch>\resources\native-binary\claude.exe - Mac:
~/.vscode/extensions/anthropic.claude-code-<ver>-darwin-<arch>/resources/native-binary/claude - אם לא נמצא שם:
~/.local/bin/claude, \u200F/opt/homebrew/bin/claude, \u200F%APPDATA%\npm\claude.cmd, ואז PATH.
אם זה Windows (PowerShell + Task Scheduler)
- PowerShell 5.1 קורא קבצי .ps1 בלי BOM כ-ANSI. לכן אסור שיהיו בקבצי ה-ps1 תווים שאינם ASCII (עברית וכו'). כל הטקסט בשפה שלי נמצא בקבצי md.
- המשימה במתזמן:
powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File run.ps1 ..., בתיקייה\<AgentName>\. - Trigger
-Once -At, עםEndBoundary= השעה + יומיים. - Settings:
-WakeToRun -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 12h -MultipleInstances Parallel -DeleteExpiredTaskAfter 1d. כלומר: מעיר משינה, רץ כשהמחשב עולה אם הוא היה כבוי, ונמחק אחרי הריצה. - Principal: המשתמש הנוכחי,
-LogonType Interactive -RunLevel Limited. - הרצת claude דרך
Start-Process -RedirectStandardInput <קובץ ריק> -RedirectStandardOutput/-Error -NoNewWindow -Wait -PassThru. שים לב למירכאות בארגומנטים שיש בהם רווחים. - פקודות: מה מתוזמן:
Get-ScheduledTask -TaskPath '\<AgentName>\'. ביטול:Unregister-ScheduledTask -TaskPath '\<AgentName>\' -TaskName <id> -Confirm:$false.
אם זה Mac (bash + launchd)
ב-launchd אין "חד-פעמי" ואין "להעיר משינה", ולכן:
- send יוצר
~/Library/LaunchAgents/com.<agentname>.<id>.plistעםStartCalendarInterval(חודש, יום, שעה, דקה) ועםRunAtLoad=true, כדי שהמשימה תרוץ גם אחרי הפעלה מחדש. הוא טוען אותו עםlaunchctl bootstrap gui/$(id -u), ומעביר ל-run את השעה המתוזמנת כ-epoch.
️ באג שכבר קרה: date -j -f "%Y-%m-%d %H:%M"בלי שניות לוקח את השניות של הרגע הנוכחי, ולכן ה-epoch לא יוצא עגול. צריך לפרסר עם"%Y-%m-%d %H:%M:%S"ולהוסיף:00לשעה.- לעשות escape ל-XML בערכים (
&,<,>).
- run בודק בעצמו את השעה, כי launchd מפעיל אותו גם בטעינה:
- מוקדם מדי (לפני השעה, עם מרווח של 30 שניות בלבד): יוצא בלי לעשות כלום.
- יש קובץ סימון
logs/<id>.started: המשימה כבר רצה, אז הוא מנקה ויוצא. - איחור של יותר מיומיים: רושם EXPIRED ולא רץ.
- אחרת: יוצר את קובץ הסימון, מוחק את ה-plist מיד (כדי שהמשימה לא תרוץ שוב אחרי הפעלה מחדש), רץ, ובסוף מבצע
launchctl bootoutלעצמו. זו חייבת להיות השורה האחרונה.
- launchd מריץ עם PATH מינימלי, לכן run מגדיר בעצמו את PATH (כולל
/opt/homebrew/binו-~/.local/bin) ואתLANG/LC_ALL=en_US.UTF-8. - שינה: מריצים את claude דרך
caffeinate -i, כדי שהמק לא יירדם באמצע העבודה. caffeinate מעביר את קוד היציאה כמו שהוא. - השכמה לילית: כדי שהמק יתעורר לבד צריך להריץ
sudo pmset repeat wakeorpoweron MTWRFSU 02:55:00. תן לי את הפקודה ותסביר איך מריצים אותה ב-Terminal. אל תריץ אותה בעצמך, כי היא דורשת סיסמה. ביטול:sudo pmset repeat cancel. - פקודות: מה מתוזמן:
ls ~/Library/LaunchAgents/com.<agentname>.*. ביטול:launchctl bootout gui/$(id -u)/com.<agentname>.<id>, ואז למחוק את ה-plist.
אחרי שהקבצים מוכנים
-
בדיקה: כתוב
tasks/test-hello.md: לכתוב דוח עם השעה ותיקיית העבודה, ולהוסיף ליומן שורת בדיקה בשפה שלי. תזמן אותה לעוד 3 דקות עםid test-hello, ואז:- חכה ובדוק את הלוג, את הדוח ואת היומן. ודא גם שהטקסט בשפה שלי נכתב תקין.
- ודא שהיא רצה בשעה שנקבעה ולא מיד בטעינה (לפי חותמות הזמן בלוג).
- ודא שהמשימה נמחקה מהמתזמן אחרי הריצה.
- אחרי שהכל עבד, מחק מהיומן את שורת הבדיקה.
-
סקיל: צור
~/.claude/skills/<agentname>/SKILL.mdעםnameועםdescriptionשמזכיר את הביטויים "תשלח ל<הסוכן>", "ש<הסוכן> יעשה בלילה" ו"תעיר את הסשן בשעה X". בתוכן:- איך שולחים task ו-wake (פקודות מלאות).
- מה חייב להיות בקובץ משימה.
- איך מוצאים session-id.
- איך בודקים מה מתוזמן, איך מבטלים, ואיך רואים מה הסוכן עשה (
reports/,journal.md,logs/). - ברירות מחדל: "בלילה" בלי שעה = 03:00. אחרי שליחה, לדווח לי את ה-id ואת השעה.
אם מנגנון הבטיחות של Claude Code חוסם את יצירת הסקיל, אל תנסה לעקוף אותו. תגיד לי, ואני אאשר ידנית או אשמור את הקובץ בעצמי.
-
זיכרון: שמור memory שמסביר מי זה <הסוכן>, איפה הקבצים שלו, ושהסקיל קיים. כך גם סשנים אחרים ידעו למה אני מתכוון.
-
דווח לי: מה נבנה, מה נבדק ועבד, מה לא, ומה אני צריך לעשות בעצמי.
לזכור
- המחשב צריך להיות דלוק או במצב שינה, ואני צריך להיות מחובר למשתמש שלי. אם המחשב כבוי, המשימה תרוץ כשהוא יעלה (בתנאי שזה תוך יומיים).
- הסוכן משתמש במכסה הרגילה שלי. אם היא חסומה בשעה שנקבעה, הוא מנסה שוב כל חצי שעה, עד 4 שעות.
||
-
מה העניין בזה?
יש hook שכותב ״המשך״ כשנגמרת המגבלה. תתחיל מתי שאתה רוצה - זה ימשיך כשהמגבלה תוסר. -
הוא גם מציע בעצמו בהודעה שהמכסה נגמרה לפעמים (יכול להיות שכיום יש את זה יותר או להיפך...)
-
רעיון ממש יפה
אבל אני העברתי את זה לסונט 5 והמגבלה עוברת לי הרבה יותר לאט בלי הגזמה יותר משתי שליש -
אבל זה שורף את המגבלה השבועית
חדש משמעית, אני בדרך כלל לא מסיים אותה אבל כל אחד לפי השימוש שלו
מה העניין בזה?
יש hook שכותב ״המשך״ כשנגמרת המגבלה. תתחיל מתי שאתה רוצה - זה ימשיך כשהמגבלה תוסר.לא ידעתי
בכל מקרה זה עדיין שימושי למי שרוצה שמשימות מסוימות יעשו בהמשך לי זה קורה בדרך כלל שיש לי את המשימה המרכזית ועל כל מיני חלקים נוספים יותר שוליים אני שולח ל׳יוסף מאיר׳ לעשות בהמשך הלילה,
יש ל מישהו מושג למה הספוילר לא עובד לי להכניס את הפרומט? זה מוגבל לאורך מסויים?
-
בתור משתמש בקלוד שתמיד מסיים בשעות הפעילות שלי את המכסה של החמש שעות בקלוד, אני רוצה לשתף אתכם בפתרון חמוד,
אמרתי לו שיבנה לי סוכן (קראתי לו ׳יוסף מאיר׳ סתם מה שקפץ לי בראש..) שבנוי על המחשב עצמו (בניתי גם בווינדוס וגם במק)
הסקיל הזה מוכר לכל הסשנים כך שניתן לומר לקלוד באמצע שיחה את החלק הזה תאמר ל׳יוסף מאיר׳ שיבנה את זה בשעה זו וזו (ניתן להגדיר לו הרשאה שיוכל להפעיל את המק ממצב שינה)
מאוד שימושי!
(בלי קשר לזה ניתן לבקש מקלוד בדפדפן שיעשה משימה מתוזמנת כל חמש שעות ודקה כך שהמכסה תתחיל להספר כל פעם שנגמרת הקודמת, כך יותר פעמים תגיעו לעבודה עם מכסה שמתאפסת עוד כמה דקות ולעבוד ברצף בלי הגבלה)
ההנה הפרומט לכזה דבר (כמובן קלוד כתב אותו)
||אני רוצה שתבנה לי במחשב הזה "סוכן לילה": סוכן Claude שרץ לבד בשעה מתוזמנת, בלי שאני מול המסך.
שם הסוכן: יוסף מאיר (אפשר להחליף לכל שם אחר. בהמשך, "הסוכן" = השם הזה).הרעיון
כשהמכסה שלי נגמרת, או כשאני רוצה שמשהו ייעשה בלילה, אגיד לסשן: "תשלח ל<הסוכן> לעשות X בשעה Y". הסשן:
- כותב קובץ משימה (Markdown, בשפה שלי) עם כל ההקשר מהשיחה: נתיבים מלאים, מה כבר נוסה, מה הוחלט, גבולות, מתי המשימה נחשבת גמורה, ואילו פעולות בלתי הפיכות אישרתי במפורש. הסוכן מתחיל בלי לדעת כלום על השיחה.
- מתזמן ריצה חד-פעמית במתזמן של מערכת ההפעלה.
בשעה שנקבעה, סקריפט הרצה מפעיל
claude -p(מצב headless) עם--dangerously-skip-permissions, כלומר עם גישה מלאה. לפני שאתה בונה, תסביר לי במשפט-שניים מה המשמעות של גישה מלאה בלי השגחה, ותמשיך רק אחרי שאישרתי.שני מצבים
- task (ברירת המחדל): סשן חדש (
--session-id <uuid חדש>) מבצע את קובץ המשימה. - wake: "מעיר" את הסשן המקורי עם
claude -p --resume <session-id>ומוסר לו קובץ תזכורת. הסשן ממשיך עם כל ההקשר שלו.- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
scratchpad). - אם הוא לא מופיע שם, לוקחים את קובץ ה-
.jsonlהחדש ביותר ב-~/.claude/projects/<תיקיית העבודה כשהתווים / \ : מוחלפים ב-->/. - חובה להריץ את ה-resume מתוך תיקיית העבודה של הסשן המקורי, כי resume מוצא את הסשן לפי התיקייה.
- את ה-UUID של הסשן הנוכחי לוקחים מנתיב ה-scratchpad שמופיע בהנחיות המערכת (שם התיקייה שמעל
התנהגות הסוכן (קובץ הוראות קבע, נטען לכל ריצה עם
--append-system-prompt-fileאו--append-system-prompt)צור קובץ
AGENT.mdעם ההוראות האלה, בשפה שלי:- אין אף אחד מול המסך. אל תשאל ואל תחכה, כי שאלה בצ'אט פשוט תאבד.
- התלבטות קטנה: מחליטים לפי שיקול דעת סביר, ממשיכים, ורושמים את ההחלטה בדוח.
- שאלה אמיתית (כזו שטעות בה תקלקל משהו או תגרום לעבודה מיותרת): לא מנחשים. רושמים אותה ב-
journal.md, מדלגים על החלק הזה, וממשיכים בכל השאר. - לפני מחיקה או דריסה, מסתכלים על מה שעומד להימחק. פעולות בלתי הפיכות (מחיקת נתונים, שליחת מייל או הודעה החוצה, פרסום, push) מותרות רק אם המשימה מבקשת אותן במפורש. אחרת, זו שאלה אמיתית שהולכת ליומן.
- אם משהו נכשל: מנסים לתקן. אם אי אפשר, מתעדים מה נוסה ומה השגיאה, וממשיכים לשאר.
- יומן:
<ROOT>/journal.md. מוסיפים שורות בסוף הקובץ ולא דורסים. פורמט:- <תאריך ושעה> | <מזהה משימה> | <השאלה או הבעיה, עם מספיק הקשר שיהיה מובן בבוקר>. - דוח (במצב task):
<ROOT>/reports/<id>.md. מה נעשה, אילו קבצים השתנו, אילו החלטות התקבלו, מה לא נעשה ולמה, ומה לבדוק בבוקר. קצר. - במצב wake: אין צורך בדוח, כי התשובה נשמרת בסשן. שאלות אמיתיות עדיין הולכות ליומן.
מבנה
- תיקייה
~/<שם-הסוכן-באנגלית>/(להלן ROOT), ובה:tasks/,reports/,logs/,AGENT.md,journal.md(עם כותרת),queue.log, סקריפט שליחה (send) וסקריפט הרצה (run). - send מקבל: mode, שעה (
YYYY-MM-DD HH:MM), קובץ, session-id (חובה ב-wake), תיקיית עבודה, ו-id אופציונלי. אם לא ניתן id, הוא יוצר אחד בפורמט<mode>-<yyyyMMdd-HHmm>-<6 תווים אקראיים>. הוא:- בודק שהקובץ קיים ושהשעה בעתיד.
- הופך את נתיב הקובץ לנתיב מלא.
- רושם את המשימה במתזמן.
- מוסיף שורה ל-
queue.log. - מדפיס את ה-id ואת השעה.
- run:
- מוצא את claude (פירוט בהמשך) ובודק שהקובץ קיים.
- הפרומט שמועבר ל-
claude -pכתוב באנגלית ומפנה לקובץ, למשל:You are <name>. Read the task file <path> (UTF-8) and carry it out completely. Your task id is <id>. - מוסיף
--add-dir <ROOT>. - stdin ריק (
/dev/null, או קובץ ריק בווינדוס), אחרתclaude -pעלול להיתקע בהמתנה לקלט. - כותב את הפלט ללוג
logs/<id>.log. - מכסה חסומה: אם קוד היציאה שונה מ-0, או שהפלט מכיל
usage limit|rate limit|limit reached|hit your limit|out of usage|resets at|overloaded, מנסה שוב כל 30 דקות, עד 8 פעמים. אם כל הניסיונות נכשלו, נרשמת שורת FAILED ב-journal.md.
איפה claude נמצא
מי שמשתמש רק בתוסף של VSCode, claude לא נמצא אצלו ב-PATH. קובץ ההרצה נמצא בתוך התוסף, והנתיב משתנה בכל עדכון. לכן run מחפש בכל ריצה את הגרסה החדשה ביותר (מיון לפי מספר גרסה, לא לפי סדר אלפביתי):
- Windows:
%USERPROFILE%\.vscode\extensions\anthropic.claude-code-<ver>-win32-<arch>\resources\native-binary\claude.exe - Mac:
~/.vscode/extensions/anthropic.claude-code-<ver>-darwin-<arch>/resources/native-binary/claude - אם לא נמצא שם:
~/.local/bin/claude, \u200F/opt/homebrew/bin/claude, \u200F%APPDATA%\npm\claude.cmd, ואז PATH.
אם זה Windows (PowerShell + Task Scheduler)
- PowerShell 5.1 קורא קבצי .ps1 בלי BOM כ-ANSI. לכן אסור שיהיו בקבצי ה-ps1 תווים שאינם ASCII (עברית וכו'). כל הטקסט בשפה שלי נמצא בקבצי md.
- המשימה במתזמן:
powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File run.ps1 ..., בתיקייה\<AgentName>\. - Trigger
-Once -At, עםEndBoundary= השעה + יומיים. - Settings:
-WakeToRun -StartWhenAvailable -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 12h -MultipleInstances Parallel -DeleteExpiredTaskAfter 1d. כלומר: מעיר משינה, רץ כשהמחשב עולה אם הוא היה כבוי, ונמחק אחרי הריצה. - Principal: המשתמש הנוכחי,
-LogonType Interactive -RunLevel Limited. - הרצת claude דרך
Start-Process -RedirectStandardInput <קובץ ריק> -RedirectStandardOutput/-Error -NoNewWindow -Wait -PassThru. שים לב למירכאות בארגומנטים שיש בהם רווחים. - פקודות: מה מתוזמן:
Get-ScheduledTask -TaskPath '\<AgentName>\'. ביטול:Unregister-ScheduledTask -TaskPath '\<AgentName>\' -TaskName <id> -Confirm:$false.
אם זה Mac (bash + launchd)
ב-launchd אין "חד-פעמי" ואין "להעיר משינה", ולכן:
- send יוצר
~/Library/LaunchAgents/com.<agentname>.<id>.plistעםStartCalendarInterval(חודש, יום, שעה, דקה) ועםRunAtLoad=true, כדי שהמשימה תרוץ גם אחרי הפעלה מחדש. הוא טוען אותו עםlaunchctl bootstrap gui/$(id -u), ומעביר ל-run את השעה המתוזמנת כ-epoch.
️ באג שכבר קרה: date -j -f "%Y-%m-%d %H:%M"בלי שניות לוקח את השניות של הרגע הנוכחי, ולכן ה-epoch לא יוצא עגול. צריך לפרסר עם"%Y-%m-%d %H:%M:%S"ולהוסיף:00לשעה.- לעשות escape ל-XML בערכים (
&,<,>).
- run בודק בעצמו את השעה, כי launchd מפעיל אותו גם בטעינה:
- מוקדם מדי (לפני השעה, עם מרווח של 30 שניות בלבד): יוצא בלי לעשות כלום.
- יש קובץ סימון
logs/<id>.started: המשימה כבר רצה, אז הוא מנקה ויוצא. - איחור של יותר מיומיים: רושם EXPIRED ולא רץ.
- אחרת: יוצר את קובץ הסימון, מוחק את ה-plist מיד (כדי שהמשימה לא תרוץ שוב אחרי הפעלה מחדש), רץ, ובסוף מבצע
launchctl bootoutלעצמו. זו חייבת להיות השורה האחרונה.
- launchd מריץ עם PATH מינימלי, לכן run מגדיר בעצמו את PATH (כולל
/opt/homebrew/binו-~/.local/bin) ואתLANG/LC_ALL=en_US.UTF-8. - שינה: מריצים את claude דרך
caffeinate -i, כדי שהמק לא יירדם באמצע העבודה. caffeinate מעביר את קוד היציאה כמו שהוא. - השכמה לילית: כדי שהמק יתעורר לבד צריך להריץ
sudo pmset repeat wakeorpoweron MTWRFSU 02:55:00. תן לי את הפקודה ותסביר איך מריצים אותה ב-Terminal. אל תריץ אותה בעצמך, כי היא דורשת סיסמה. ביטול:sudo pmset repeat cancel. - פקודות: מה מתוזמן:
ls ~/Library/LaunchAgents/com.<agentname>.*. ביטול:launchctl bootout gui/$(id -u)/com.<agentname>.<id>, ואז למחוק את ה-plist.
אחרי שהקבצים מוכנים
-
בדיקה: כתוב
tasks/test-hello.md: לכתוב דוח עם השעה ותיקיית העבודה, ולהוסיף ליומן שורת בדיקה בשפה שלי. תזמן אותה לעוד 3 דקות עםid test-hello, ואז:- חכה ובדוק את הלוג, את הדוח ואת היומן. ודא גם שהטקסט בשפה שלי נכתב תקין.
- ודא שהיא רצה בשעה שנקבעה ולא מיד בטעינה (לפי חותמות הזמן בלוג).
- ודא שהמשימה נמחקה מהמתזמן אחרי הריצה.
- אחרי שהכל עבד, מחק מהיומן את שורת הבדיקה.
-
סקיל: צור
~/.claude/skills/<agentname>/SKILL.mdעםnameועםdescriptionשמזכיר את הביטויים "תשלח ל<הסוכן>", "ש<הסוכן> יעשה בלילה" ו"תעיר את הסשן בשעה X". בתוכן:- איך שולחים task ו-wake (פקודות מלאות).
- מה חייב להיות בקובץ משימה.
- איך מוצאים session-id.
- איך בודקים מה מתוזמן, איך מבטלים, ואיך רואים מה הסוכן עשה (
reports/,journal.md,logs/). - ברירות מחדל: "בלילה" בלי שעה = 03:00. אחרי שליחה, לדווח לי את ה-id ואת השעה.
אם מנגנון הבטיחות של Claude Code חוסם את יצירת הסקיל, אל תנסה לעקוף אותו. תגיד לי, ואני אאשר ידנית או אשמור את הקובץ בעצמי.
-
זיכרון: שמור memory שמסביר מי זה <הסוכן>, איפה הקבצים שלו, ושהסקיל קיים. כך גם סשנים אחרים ידעו למה אני מתכוון.
-
דווח לי: מה נבנה, מה נבדק ועבד, מה לא, ומה אני צריך לעשות בעצמי.
לזכור
- המחשב צריך להיות דלוק או במצב שינה, ואני צריך להיות מחובר למשתמש שלי. אם המחשב כבוי, המשימה תרוץ כשהוא יעלה (בתנאי שזה תוך יומיים).
- הסוכן משתמש במכסה הרגילה שלי. אם היא חסומה בשעה שנקבעה, הוא מנסה שוב כל חצי שעה, עד 4 שעות.
||
@מנסה-לעבוד-את-ה בעיקרון יש המשך אוטומטית בקלוד אבל היו גרסאות שזה לא היה וכרגע יש אבל אולי לGPT זה יעבוד
-
@מנסה-לעבוד-את-ה בעיקרון יש המשך אוטומטית בקלוד אבל היו גרסאות שזה לא היה וכרגע יש אבל אולי לGPT זה יעבוד
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות