الأكاديمية ← أدلة تطبيقيةتوثيق رسمي · إرشاد عربي

مهام Cron بسكربت فقط بلا نموذج

Script-Only Cron Jobs (No LLM)

متوسط9 دقائق قراءةالدرس 184 أسئلة✓ 2026-08-18
قبل أن تقرأ

ما هذه الصفحة، وماذا تحتوي.

المهام المجدولة: أن تطلب من Hermes تنفيذ شيء في وقت محدد أو كل يوم، من دون أن تكون حاضرًا. هنا يتحوّل من أداة تسألها إلى مساعد يسبقك: موجز صباحي، متابعة أسبوعية، تنبيه عند تغيّر شيء. ستستعمل هنا hermes cron create وhermes cron edit، والقراءة نحو 9 دقائق. انتبه: المهمة التي تعمل وأنت نائم تخطئ وأنت نائم أيضًا. اجعلها تكتب تقريرًا، وجرّبها يدويًا قبل جدولتها.

11أقسام
7أمثلة برمجية
3جداول
7أوامر
1,450كلمة من المصدر
الوصف الرسمي في سطر

Classic watchdog cron jobs that skip the LLM entirely — a script runs on schedule and its stdout gets delivered to your messaging platform. Memory alerts, disk alerts, CI pings, periodic health checks.

ماذا ستستطيع بعدها

نتائج مأخوذة من هذه الصفحة، لا من قالب.

  • تعرف ما المهام المجدولة ولماذا قد تحتاجه.
  • تنفّذ hermes cron create وhermes cron edit وتفهم ما يحدث بعدها.
  • تقرأ الجدول وتأخذ منه السطر الذي يخصّك فقط.
  • تضبط RAM_PCT في المكان الصحيح.
ما ستقابله من أسماء

كما تظهر تمامًا داخل Hermes.

الأوامر
  • hermes cron create
  • hermes cron edit
  • hermes cron list
  • hermes cron pause
  • hermes cron remove
  • hermes cron resume
  • hermes cron resume abc123
متغيرات البيئة
  • RAM_PCT
خريطة الصفحة

انتقل مباشرة إلى ما تحتاجه.

  1. 01When to Use It
  2. 02Create One from Chat
  3. 03Create One from the CLI
  4. 04How Script Output Maps to Delivery
  5. 05Script Rules
  6. 06Schedule Syntax
  7. 07Delivery Targets
  8. 08Editing and Lifecycle
  9. 09Worked Example: Disk Space Alert
  10. 10Comparison with Other Patterns
  11. 11Related
الصفحة الرسمية كاملة

بلا اختصار أو حذف.

النص أدناه منقول من المصدر الرسمي بالإنجليزية حتى تبقى الأوامر والأسماء دقيقة كما هي. قبل كل قسم شرح عربي يوضّح ما بداخله.

Sometimes you already know exactly what message you want to send. You don't need an agent to reason about it — you just need a script to run on a timer, and its output (if any) to land in Telegram / Discord / Slack / Signal.

Hermes calls this no-agent mode. It's the cron system minus the LLM.

Text11 سطرًا
   ┌──────────────────┐          ┌──────────────────┐
   │ scheduler tick   │  every   │ run script       │
   │ (every N minutes)│ ──────▶ │ (bash or python) │
   └──────────────────┘          └──────────────────┘
                                          │
                                          │ stdout
                                          ▼
                                 ┌──────────────────┐
                                 │ delivery router  │
                                 │ (telegram/disc…) │
                                 └──────────────────┘
  • No LLM call. Zero tokens, zero agent loop, zero model spend.
  • Script is the job. The script decides whether to alert. Emit output → message gets sent. Emit nothing → silent tick.
  • Bash or Python. .sh / .bash files run under bash from PATH when available, otherwise /bin/bash; any other extension runs under the current Python interpreter. Paths must resolve inside ~/.hermes/scripts/ (relative, absolute, or ~ forms are OK if they stay in that directory). Cron scripts do not inherit provider credentials from the Hermes process environment.
  • Same scheduler. Lives in cronjob alongside LLM jobs — pausing, resuming, listing, logs, and delivery targeting all work the same way.

When to Use It

شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه. تذكير: أن تطلب من Hermes تنفيذ شيء في وقت محدد أو كل يوم، من دون أن تكون حاضرًا.

Use no-agent mode for:

  • Memory / disk / GPU watchdogs. Run every 5 minutes, alert only when a threshold is breached.
  • CI hooks. Deploy finished → post the commit SHA. Build failed → send the last 100 lines of the log.
  • Periodic metrics. "Daily Stripe revenue at 9am" as a simple API call + pretty-print.
  • External event pollers. Check an API, alert on state change.
  • Heartbeats. Ping a dashboard every N minutes to prove the host is alive.

Use a normal (LLM-driven) cron job when you need the agent to decide what to say — summarize a long document, pick interesting items from a feed, draft a human-friendly message. The no-agent path is for cases where the script's stdout already IS the message.

Create One from Chat

أوامر تكتبها في الطرفية. افهم ما يفعله الأمر قبل نسخه. الأوامر هنا: hermes cron resume abc123.

The real win of no-agent mode is that the agent itself can set up the watchdog for you — no editor, no shell, no remembering CLI flags. You describe what you want, Hermes writes the script, schedules it, and tells you when it'll fire.

Example transcript

You: ping me on telegram if RAM is over 85% every 5 minutes Hermes: (writes ~/.hermes/scripts/memory-watchdog.sh, then calls cronjob(...) with no_agent=true) Set up. Runs every 5 min, alerts Telegram only when RAM is over 85%. Script: memory-watchdog.sh. Job ID: abc123.

Under the hood, the agent makes two tool calls:

Python21 سطرًا
# 1. Write the check script
write_file(
    path="~/.hermes/scripts/memory-watchdog.sh",
    content='''#!/usr/bin/env bash
ram_pct=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$ram_pct" -ge 85 ]; then
  echo "RAM ${ram_pct}% on $(hostname)"
fi
# Empty stdout = silent tick; no message sent.
''',
)

# 2. Schedule it — no_agent=True skips the LLM on every tick
cronjob(
    action="create",
    schedule="every 5m",
    script="memory-watchdog.sh",
    no_agent=True,
    deliver="telegram",
    name="memory-watchdog",
)

From that point on every tick is free: the scheduler runs the script, pipes its stdout to Telegram if non-empty, and never touches a model.

What the agent decides for you

When you phrase a request like "alert me when X" or "every N minutes check Y and tell me if Z", Hermes' cronjob tool description tells it to reach for no_agent=True whenever the message content is fully determined by the script. It falls back to the normal LLM-driven path when the request needs reasoning ("summarize the new issues", "pick the most interesting headlines", "draft a friendly reminder").

You don't have to specify --no-agent yourself. Just describe the behavior.

Managing watchdogs from chat

The agent can pause, resume, edit, and remove jobs the same way it creates them:

You: stop the memory watchdog for tonight Hermes: (calls cronjob(action='pause', job_id='abc123')) Paused. Resume with "turn it back on" or via hermes cron resume abc123.
You: change it to every 15 minutes Hermes: (calls cronjob(action='update', job_id='abc123', schedule='every 15m'))

The full lifecycle (create / list / update / pause / resume / run-now / remove) is available to the agent without you learning any CLI commands.

Create One from the CLI

إعدادات تضبطها مرة وتنساها. غيّر واحدًا في كل مرة حتى تعرف أثر كل تغيير. الأوامر هنا: hermes cron create. تضبط RAM_PCT خارج المحادثة، في بيئة التشغيل.

Prefer the shell? The CLI path gives you the same result with three commands:

Shell22 سطرًا
# 1. Write your script
cat > ~/.hermes/scripts/memory-watchdog.sh <<'EOF'
#!/usr/bin/env bash
# Alert when RAM usage is over 85%. Silent otherwise.
RAM_PCT=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$RAM_PCT" -ge 85 ]; then
  echo "⚠ RAM ${RAM_PCT}% on $(hostname)"
fi
# Empty stdout = silent run; no message sent.
EOF
chmod +x ~/.hermes/scripts/memory-watchdog.sh

# 2. Schedule it
hermes cron create "every 5m" \
  --no-agent \
  --script memory-watchdog.sh \
  --deliver telegram \
  --name "memory-watchdog"

# 3. Verify
hermes cron list
hermes cron run <job_id>    # fire it once to test

That's the whole thing. No prompt, no skill, no model.

How Script Output Maps to Delivery

جدول مرجعي. لا تقرأه كله، ابحث عن السطر الذي يخصّك فقط.

Script behaviorResult
Exit 0, non-empty stdoutstdout is delivered verbatim
Exit 0, empty stdoutSilent tick — no delivery
Exit 0, stdout contains {"wakeAgent": false} on the last lineSilent tick (shared gate with LLM jobs)
Non-zero exit codeError alert is delivered (so a broken watchdog doesn't fail silently)
Script timeoutError alert is delivered

The "silent when empty" behavior is the key to the classic watchdog pattern: the script is free to run every minute, but the channel only sees a message when something actually needs attention.

Script Rules

شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.

Scripts must live in ~/.hermes/scripts/. This is enforced at both job-creation time and run time — absolute paths, ~/ expansion, and path-traversal patterns (../) are rejected. The same directory is shared with the pre-check script gate used by LLM jobs.

Interpreter choice is by file extension:

ExtensionInterpreter
.sh, .bashbash from PATH (fallback /bin/bash)
anything elsesys.executable (current Python)

We intentionally do NOT honour #!/... shebangs — keeping the interpreter set explicit and small reduces the surface the scheduler trusts.

Schedule Syntax

أوامر تكتبها في الطرفية. افهم ما يفعله الأمر قبل نسخه. الأوامر هنا: hermes cron create.

Same as all other cron jobs:

Shell4 أسطر
hermes cron create "every 5m"        # interval
hermes cron create "every 2h"
hermes cron create "0 9 * * *"       # standard cron: 9am daily
hermes cron create "30m"             # one-shot: run once in 30 minutes

See the cron feature reference for the full syntax.

Delivery Targets

شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.

--deliver accepts everything the gateway knows about. Some common shapes:

Shell7 أسطر
--deliver telegram                       # platform home channel
--deliver telegram:-1001234567890        # specific chat
--deliver telegram:-1001234567890:17585  # specific Telegram forum topic
--deliver discord:#ops
--deliver slack:#engineering
--deliver signal:+15551234567
--deliver local                          # just save to ~/.hermes/cron/output/

No running gateway is required at script-run time for bot-token platforms (Telegram, Discord, Slack, Signal, SMS, WhatsApp) — the tool calls each platform's REST endpoint directly using the credentials already in ~/.hermes/.env / ~/.hermes/config.yaml.

Editing and Lifecycle

أوامر تكتبها في الطرفية. افهم ما يفعله الأمر قبل نسخه. الأوامر هنا: hermes cron list.

Shell7 أسطر
hermes cron list                                    # see all jobs
hermes cron pause <job_id>                          # stop firing, keep definition
hermes cron resume <job_id>
hermes cron edit <job_id> --schedule "every 10m"    # adjust cadence
hermes cron edit <job_id> --agent                   # flip to LLM mode
hermes cron edit <job_id> --no-agent --script …     # flip back
hermes cron remove <job_id>                         # delete it

Everything that works on LLM jobs (pause, resume, manual trigger, delivery target changes) works on no-agent jobs too.

Worked Example: Disk Space Alert

أوامر تكتبها في الطرفية. افهم ما يفعله الأمر قبل نسخه. الأوامر هنا: hermes cron create.

Shell17 سطرًا
cat > ~/.hermes/scripts/disk-alert.sh <<'EOF'
#!/usr/bin/env bash
# Alert when / or /home is over 90% full.
THRESHOLD=90
df -h / /home 2>/dev/null | awk -v t="$THRESHOLD" '
  NR > 1 && $5+0 >= t {
    printf "⚠ Disk %s full on %s\n", $5, $6
  }
'
EOF
chmod +x ~/.hermes/scripts/disk-alert.sh

hermes cron create "*/15 * * * *" \
  --no-agent \
  --script disk-alert.sh \
  --deliver telegram \
  --name "disk-alert"

Silent when both filesystems are under 90%; fires exactly one line per over-threshold filesystem when one fills up.

Comparison with Other Patterns

شرح للفكرة نفسها. اقرأه ببطء، فبقية الأقسام تبني عليه.

ApproachWhat runsWhen to use
cronjob --no-agent (this page)Your script on Hermes' scheduleRecurring watchdogs / alerts / metrics that don't need reasoning
cronjob (default, LLM)Agent with optional pre-check scriptWhen the message content requires reasoning over data
OS cron + curl to a webhook subscriptionYour script on the OS scheduleWhen Hermes might be unhealthy (the thing you're monitoring)

For critical system-health watchdogs that must fire even when the gateway is down, use OS-level cron with a plain curl to a Hermes webhook subscription (or any external alerting endpoint) — those run as independent OS processes and don't depend on Hermes being up. The in-gateway scheduler is the right choice when the thing being monitored is external.

اختبار الفهم

4 أسئلة إجاباتها كلها في هذه الصفحة.

كل خيار اسم حقيقي من توثيق Hermes. حتى الخيارات الخاطئة حقيقية، لكنها من صفحات أخرى.

1. بحسب هذا الدرس، أي أمر يقوم بـ«see all jobs»؟
2. في جدول هذا الدرس، ما «Result» المقابل لـ«Non-zero exit code»؟
3. أي متغير بيئة من التالي يظهر فعليًا في هذا الدرس؟
4. أي عنوان من التالي لا يظهر في هذا الدرس؟