رفتن به محتوا

اجرای پرامپت‌ها روی یک زمان‌بندی

از /loop و ابزارهای زمان‌بندیِ cron استفاده کن تا پرامپت‌ها را به‌صورت تکراری اجرا کنی، وضعیت را poll کنی، یا یادآورهای یک‌بارمصرف را درون یک نشستِ Claude Code تنظیم کنی.

زمان‌بندیِ کارها به Claude اجازه می‌دهد یک پرامپت را به‌صورت خودکار و در یک بازه‌ی زمانی دوباره اجرا کند. از آن‌ها برای poll کردنِ یک استقرار، مراقبت از یک PR، بازبینیِ یک buildِ طولانی، یا یادآوریِ کاری برای بعد در همان نشست استفاده کن. اگر می‌خواهی به‌جای poll کردن به رویدادها همان لحظه‌ای که رخ می‌دهند واکنش نشان دهی، Channels را ببین: CIِ تو می‌تواند خطا را مستقیماً به نشست push کند. اگر می‌خواهی نشست به‌جای اجرای بازه‌ای، نوبت‌به‌نوبت کار کند تا یک شرط برآورده شود، /goal را ببین.

کارها در محدوده‌ی نشست هستند: درون گفتگوی فعلی زندگی می‌کنند و وقتی نشست تازه‌ای شروع کنی متوقف می‌شوند. ازسرگیری با --resume یا --continue هر کاری را که هنوز منقضی نشده بازمی‌گرداند: یک کارِ تکرارشونده که در ۷ روز گذشته ساخته شده، یا یک کارِ یک‌بارمصرف که زمانِ زمان‌بندی‌شده‌اش هنوز نگذشته است. برای زمان‌بندی‌ای که مستقل از هر نشستی پایدار بماند، از Routines استفاده کن تا یک routine روی زیرساختِ مدیریت‌شده‌ی Anthropic بسازی، یک کارِ زمان‌بندی‌شده‌ی Desktop راه بینداز، یا از GitHub Actions استفاده کن.

مقایسه‌ی گزینه‌های زمان‌بندی

Section titled “مقایسه‌ی گزینه‌های زمان‌بندی”

Claude Code سه راه برای زمان‌بندیِ کارهای تکرارشونده یا یک‌بارمصرف ارائه می‌دهد:

CloudDesktop/loop
اجرا رویابرِ Anthropicماشینِ توماشینِ تو
نیاز به روشن‌بودنِ ماشیننهبلهبله
نیاز به نشستِ بازنهنهبله
پایدار در ری‌استارت‌هابلهبلهبا --resume بازیابی می‌شود اگر منقضی نشده باشد
دسترسی به فایل‌های محلینه (clone تازه)بلهبله
سرورهای MCPکانکتورها برای هر کار پیکربندی می‌شوندفایل‌های پیکربندی و کانکتورهااز نشست به ارث می‌رسد
اعلان‌های دسترسینه (خودگردان اجرا می‌شود)برای هر کار قابل‌پیکربندیاز نشست به ارث می‌رسد
زمان‌بندیِ قابل‌سفارشی‌سازیاز طریق /schedule در CLIبلهبله
حداقل بازه۱ ساعت۱ دقیقه۱ دقیقه

یک پرامپت را به‌صورت تکراری با /loop اجرا کن

Section titled “یک پرامپت را به‌صورت تکراری با /loop اجرا کن”

اسکیلِ بسته‌بندی‌شده‌ی /loop سریع‌ترین راه برای اجرای تکراریِ یک پرامپت تا وقتی نشست باز است. هم بازه و هم پرامپت اختیاری‌اند و آنچه ارائه می‌دهی تعیین می‌کند که loop چطور رفتار کند.

چه چیزی می‌دهیمثالچه اتفاقی می‌افتد
بازه و پرامپت/loop 5m check the deployپرامپتِ تو روی یک زمان‌بندیِ ثابت اجرا می‌شود
فقط پرامپت/loop check the deployپرامپتِ تو در هر تکرار با بازه‌ای که Claude انتخاب می‌کند اجرا می‌شود
فقط بازه، یا هیچ‌چیز/loopپرامپتِ نگه‌داریِ داخلی اجرا می‌شود، یا loop.mdِ تو اگر وجود داشته باشد

می‌توانی یک فرمانِ دیگر را هم به‌عنوان پرامپت بدهی، مثلاً /loop 20m /review-pr 1234، تا یک اسکیل یا فرمانِ ذخیره‌شده در هر تکرار دوباره اجرا شود.

اجرا روی یک بازه‌ی ثابت

Section titled “اجرا روی یک بازه‌ی ثابت”

وقتی بازه‌ای می‌دهی، Claude آن را به یک عبارتِ cron تبدیل می‌کند، کار را زمان‌بندی می‌کند، و آهنگ و شناسه‌ی کار را تأیید می‌کند.

/loop 5m check if the deployment finished and tell me what happened

بازه می‌تواند پیشاپیشِ پرامپت به‌صورت یک توکنِ خام مثل 30m بیاید، یا پس از آن به‌صورت یک عبارت مثل every 2 hours. واحدهای پشتیبانی‌شده عبارت‌اند از s برای ثانیه، m برای دقیقه، h برای ساعت، و d برای روز.

ثانیه‌ها به نزدیک‌ترین دقیقه رو به بالا گرد می‌شوند، چون cron دانه‌بندیِ یک‌دقیقه‌ای دارد. بازه‌هایی که به یک گامِ تمیزِ cron نگاشت نمی‌شوند، مثل 7m یا 90m، به نزدیک‌ترین بازه‌ای که می‌شود گرد می‌شوند و Claude به تو می‌گوید چه چیزی انتخاب کرده است.

بگذار Claude بازه را انتخاب کند

Section titled “بگذار Claude بازه را انتخاب کند”

وقتی بازه را حذف می‌کنی، Claude به‌جای اجرا روی یک زمان‌بندیِ ثابتِ cron، یکی را به‌صورت پویا انتخاب می‌کند. پس از هر تکرار، براساس آنچه مشاهده کرده تأخیری بین یک دقیقه و یک ساعت انتخاب می‌کند: انتظارهای کوتاه وقتی یک build دارد تمام می‌شود یا یک PR فعال است، و انتظارهای طولانی‌تر وقتی چیزی در انتظار نیست. تأخیرِ انتخاب‌شده و دلیلِ آن در پایانِ هر تکرار چاپ می‌شود.

مثالِ زیر CI و کامنت‌های بازبینی را بررسی می‌کند، و Claude پس از اینکه PR ساکت می‌شود بینِ تکرارها بیشتر صبر می‌کند:

/loop check whether CI passed and address any review comments

وقتی یک زمان‌بندیِ پویای /loop می‌خواهی، Claude ممکن است مستقیماً از ابزارِ Monitor استفاده کند. Monitor یک اسکریپتِ پس‌زمینه اجرا می‌کند و هر خطِ خروجی را به‌صورت stream بازمی‌گرداند، که از poll کردن کاملاً پرهیز می‌کند و اغلب از اجرای دوباره‌ی یک پرامپت در یک بازه، از نظرِ توکن کارآمدتر و واکنش‌گراتر است.

یک loopِ زمان‌بندی‌شده‌ی پویا مثلِ هر کارِ دیگری در فهرستِ کارهای زمان‌بندی‌شده‌ی تو ظاهر می‌شود، پس می‌توانی آن را به همان روش فهرست یا لغو کنی. قواعدِ jitter برای آن اعمال نمی‌شود، اما انقضای هفت‌روزه اعمال می‌شود: loop به‌صورت خودکار هفت روز پس از شروعش پایان می‌یابد.

پرامپتِ نگه‌داریِ داخلی را اجرا کن

Section titled “پرامپتِ نگه‌داریِ داخلی را اجرا کن”

وقتی پرامپت را حذف می‌کنی، Claude به‌جای پرامپتی که تو می‌دهی از یک پرامپتِ نگه‌داریِ داخلی استفاده می‌کند. در هر تکرار، موارد زیر را به‌ترتیب پیش می‌برد:

  • هر کارِ ناتمامِ گفتگو را ادامه بده
  • به pull requestِ شاخه‌ی فعلی رسیدگی کن: کامنت‌های بازبینی، اجراهای ناموفقِ CI، تعارض‌های merge
  • وقتی چیزِ دیگری در انتظار نیست، گذرهای پاک‌سازی مثل شکارِ باگ یا ساده‌سازی را اجرا کن

Claude ابتکارهای تازه‌ی خارج از این محدوده را شروع نمی‌کند، و اقدام‌های برگشت‌ناپذیر مثل push یا حذف فقط وقتی پیش می‌روند که چیزی را ادامه دهند که متنِ گفتگو از پیش مجاز کرده است.

/loop

یک /loopِ خام این پرامپت را با بازه‌ای که به‌صورت پویا انتخاب می‌شود اجرا می‌کند. یک بازه اضافه کن، مثلاً /loop 15m، تا به‌جای آن روی یک زمان‌بندیِ ثابت اجرا شود. برای جایگزین‌کردنِ پرامپتِ داخلی با پرامپتِ پیش‌فرضِ خودت، سفارشی‌سازیِ پرامپتِ پیش‌فرض با loop.md را ببین.

پرامپتِ پیش‌فرض را با loop.md سفارشی کن

Section titled “پرامپتِ پیش‌فرض را با loop.md سفارشی کن”

یک فایلِ loop.md پرامپتِ نگه‌داریِ داخلی را با دستورهای خودت جایگزین می‌کند. این فایل یک پرامپتِ پیش‌فرضِ واحد برای /loopِ خام تعریف می‌کند، نه فهرستی از کارهای زمان‌بندی‌شده‌ی جداگانه، و هر وقت پرامپتی در خطِ فرمان بدهی نادیده گرفته می‌شود. برای زمان‌بندیِ پرامپت‌های بیشتر در کنارِ آن، از /loop <prompt> استفاده کن یا مستقیم از Claude بخواه.

Claude این فایل را در دو مکان جستجو می‌کند و از اولینی که پیدا کند استفاده می‌کند.

مسیرمحدوده
.claude/loop.mdسطحِ پروژه. وقتی هر دو فایل وجود داشته باشند اولویت دارد.
~/.claude/loop.mdسطحِ کاربر. در هر پروژه‌ای که فایلِ خودش را تعریف نکرده اعمال می‌شود.

این فایل Markdownِ ساده و بدونِ ساختارِ الزامی است. آن را طوری بنویس که انگار پرامپتِ /loop را مستقیم تایپ می‌کنی. مثالِ زیر یک شاخه‌ی انتشار را سالم نگه می‌دارد:

.claude/loop.md
Check the `release/next` PR. If CI is red, pull the failing job log,
diagnose, and push a minimal fix. If new review comments have arrived,
address each one and resolve the thread. If everything is green and
quiet, say so in one line.

ویرایش‌های loop.md در تکرارِ بعدی اثر می‌گذارند، پس می‌توانی در حالی که یک loop در حالِ اجراست دستورها را بپالایی. وقتی هیچ loop.mdای در هیچ‌یک از دو مکان وجود نداشته باشد، loop به پرامپتِ نگه‌داریِ داخلی بازمی‌گردد. فایل را موجز نگه دار: محتوای بیش از ۲۵٬۰۰۰ بایت بریده می‌شود.

برای متوقف‌کردنِ یک /loop در حالی که منتظرِ تکرارِ بعدی است، Esc را فشار بده. این کار بیداریِ در انتظار را پاک می‌کند تا loop دوباره شلیک نکند. کارهایی که با مستقیم خواستن از Claude زمان‌بندی کرده‌ای تحتِ تأثیرِ Esc نیستند و تا وقتی حذفشان نکنی سرِ جای خود می‌مانند.

در حالتِ خودآهنگ، Claude می‌تواند با زمان‌بندی‌نکردنِ بیداریِ بعدی، وقتی کار به‌طورِ اثبات‌پذیر کامل شده، خودش loop را هم پایان دهد. loopهای روی بازه‌ی ثابت تا وقتی متوقفشان کنی یا هفت روز بگذرد به اجرا ادامه می‌دهند.

یک یادآورِ یک‌بارمصرف تنظیم کن

Section titled “یک یادآورِ یک‌بارمصرف تنظیم کن”

برای یادآورهای یک‌بارمصرف، به‌جای استفاده از /loop آنچه می‌خواهی را به زبانِ طبیعی توصیف کن. Claude یک کارِ تک‌شلیک زمان‌بندی می‌کند که پس از اجرا خودش را حذف می‌کند.

remind me at 3pm to push the release branch
in 45 minutes, check whether the integration tests passed

Claude زمانِ شلیک را با یک عبارتِ cron به دقیقه و ساعتی مشخص میخ‌کوب می‌کند و تأیید می‌کند که کِی شلیک خواهد شد.

کارهای زمان‌بندی‌شده را مدیریت کن

Section titled “کارهای زمان‌بندی‌شده را مدیریت کن”

به زبانِ طبیعی از Claude بخواه که کارها را فهرست یا لغو کند، یا مستقیماً به ابزارهای زیربنایی ارجاع بده.

what scheduled tasks do I have?
cancel the deploy check job

پشتِ صحنه، Claude از این ابزارها استفاده می‌کند:

ابزارهدف
CronCreateزمان‌بندیِ یک کارِ تازه. یک عبارتِ cronِ ۵فیلده، پرامپتِ اجرایی، و اینکه تکرار شود یا یک‌بار شلیک، را می‌پذیرد.
CronListفهرستِ همه‌ی کارهای زمان‌بندی‌شده با شناسه‌ها، زمان‌بندی‌ها، و پرامپت‌هایشان.
CronDeleteلغوِ یک کار با شناسه.

هر کارِ زمان‌بندی‌شده یک شناسه‌ی ۸کاراکتری دارد که می‌توانی به CronDelete بدهی. یک نشست می‌تواند هم‌زمان تا ۵۰ کارِ زمان‌بندی‌شده نگه دارد.

کارهای زمان‌بندی‌شده چطور اجرا می‌شوند

Section titled “کارهای زمان‌بندی‌شده چطور اجرا می‌شوند”

زمان‌بند هر ثانیه کارهای موعدرسیده را بررسی می‌کند و آن‌ها را با اولویتِ پایین در صف می‌گذارد. یک پرامپتِ زمان‌بندی‌شده بینِ نوبت‌های تو شلیک می‌شود، نه در میانه‌ی پاسخِ Claude. اگر وقتی کاری موعدش می‌رسد Claude مشغول باشد، پرامپت تا پایانِ نوبتِ فعلی صبر می‌کند.

همه‌ی زمان‌ها در منطقه‌ی زمانیِ محلیِ تو تفسیر می‌شوند. یک عبارتِ cron مثل 0 9 * * * یعنی ۹ صبح هرجا که Claude Code را اجرا می‌کنی، نه به وقتِ UTC.

برای اینکه هر نشست در یک لحظه‌ی ساعتیِ یکسان به API نخورد، زمان‌بند یک آفستِ قطعی به زمان‌های شلیک اضافه می‌کند:

  • کارهای تکرارشونده تا ۳۰ دقیقه پس از زمانِ زمان‌بندی‌شده شلیک می‌شوند (یا تا نصفِ بازه، برای کارهایی که بیش از ساعتی یک‌بار اجرا می‌شوند). یک کارِ ساعتی که برای :00 زمان‌بندی شده ممکن است هرجایی تا :30 شلیک شود.
  • کارهای یک‌بارمصرفی که برای سرِ ساعت یا نیمِ ساعت زمان‌بندی شده‌اند تا ۹۰ ثانیه زودتر شلیک می‌شوند.

آفست از شناسه‌ی کار مشتق می‌شود، پس همان کار همیشه همان آفست را می‌گیرد. اگر زمان‌بندیِ دقیق مهم است، دقیقه‌ای انتخاب کن که :00 یا :30 نباشد، مثلاً 3 9 * * * به‌جای 0 9 * * *، آن‌وقت jitterِ یک‌بارمصرف اعمال نمی‌شود.

کارهای تکرارشونده به‌صورت خودکار ۷ روز پس از ساخته‌شدن منقضی می‌شوند. کار یک‌بارِ آخر شلیک می‌شود، بعد خودش را حذف می‌کند. این کار حد می‌گذارد که یک loopِ فراموش‌شده چقدر می‌تواند اجرا شود. اگر نیاز داری یک کارِ تکرارشونده بیشتر دوام بیاورد، پیش از انقضا لغو و دوباره بساز، یا برای زمان‌بندیِ بادوام از Routines یا کارهای زمان‌بندی‌شده‌ی Desktop استفاده کن.

CronCreate عبارت‌های استانداردِ ۵فیلده‌ی cron را می‌پذیرد: minute hour day-of-month month day-of-week. همه‌ی فیلدها از wildcard (*)، مقادیرِ تکی (5)، گام‌ها (*/15)، بازه‌ها (1-5)، و فهرست‌های جداشده با کاما (1,15,30) پشتیبانی می‌کنند.

مثالمعنا
*/5 * * * *هر ۵ دقیقه
0 * * * *هر ساعت سرِ ساعت
7 * * * *هر ساعت در دقیقه‌ی ۷
0 9 * * *هر روز ساعت ۹ صبحِ محلی
0 9 * * 1-5روزهای کاری ساعت ۹ صبحِ محلی
30 14 15 3 *۱۵ مارس ساعت ۲:۳۰ بعدازظهرِ محلی

روزِ هفته از 0 یا 7 برای یکشنبه تا 6 برای شنبه استفاده می‌کند. نحوِ گسترش‌یافته مثل L، W، ?، و نام‌های مستعار مثل MON یا JAN پشتیبانی نمی‌شود.

وقتی هم روزِ ماه و هم روزِ هفته محدود شده باشند، یک تاریخ مطابقت می‌کند اگر هر یک از دو فیلد مطابقت کند. این از معناشناسیِ استانداردِ vixie-cron پیروی می‌کند.

غیرفعال‌کردنِ کارهای زمان‌بندی‌شده

Section titled “غیرفعال‌کردنِ کارهای زمان‌بندی‌شده”

CLAUDE_CODE_DISABLE_CRON=1 را در محیطِ خود تنظیم کن تا زمان‌بند به‌کلی غیرفعال شود. ابزارهای cron و /loop در دسترس نخواهند بود، و هر کارِ از‌پیش‌زمان‌بندی‌شده‌ای از شلیک بازمی‌ایستد. برای فهرستِ کاملِ پرچم‌های غیرفعال‌سازی، متغیرهای محیطی را ببین.

زمان‌بندیِ در محدوده‌ی نشست محدودیت‌های ذاتی دارد:

  • کارها فقط وقتی Claude Code در حالِ اجرا و بی‌کار است شلیک می‌شوند. بستنِ ترمینال یا گذاشتن نشست برای خروج، شلیکِ آن‌ها را متوقف می‌کند.
  • جبرانی برای شلیک‌های ازدست‌رفته وجود ندارد. اگر زمانِ زمان‌بندی‌شده‌ی یک کار در حالی بگذرد که Claude روی یک درخواستِ طولانی مشغول است، یک‌بار وقتی Claude بی‌کار می‌شود شلیک می‌شود، نه یک‌بار برای هر بازه‌ی ازدست‌رفته.
  • شروعِ یک گفتگوی تازه همه‌ی کارهای در محدوده‌ی نشست را پاک می‌کند. ازسرگیری با claude --resume یا claude --continue کارهایی را که منقضی نشده‌اند بازمی‌گرداند: کارهای تکرارشونده در محدوده‌ی هفت روز از ساخت، و کارهای یک‌بارمصرفی که زمانِ زمان‌بندی‌شده‌شان هنوز نگذشته است. کارهای پس‌زمینه‌ی Bash و monitor هیچ‌گاه هنگامِ ازسرگیری بازیابی نمی‌شوند.

برای خودکارسازیِ مبتنی بر cron که باید بدونِ نظارت اجرا شود:

  • Routines: روی زیرساختِ مدیریت‌شده‌ی Anthropic، طبقِ یک زمان‌بندی، از طریقِ فراخوانِ API، یا روی رویدادهای GitHub اجرا می‌شود
  • GitHub Actions: از یک تریگرِ schedule در CI استفاده کن
  • کارهای زمان‌بندی‌شده‌ی Desktop: به‌صورت محلی روی ماشینِ تو اجرا می‌شود