스크립트 전용 크론 작업
때로는 보내려는 메시지가 무엇인지 이미 정확히 알고 있는 경우도 있습니다. 이에 대해 추론하는 데 에이전트가 필요하지 않습니다. 타이머에서 실행할 스크립트와 Telegram/Discord/Slack/Signal에 출력할 출력(있는 경우)만 있으면 됩니다.
헤르메스는 이를 에이전트 없음 모드라고 부릅니다. LLM을 뺀 크론 시스템입니다.
┌──────────────────┐ ┌──────────────────┐
│ scheduler tick │ every │ run script │
│ (every N minutes)│ ──────▶ │ (bash or python) │
└──────────────────┘ └──────────────────┘
│
│ stdout
▼
┌──────────────────┐
│ delivery router │
│ (telegram/disc…) │
└──────────────────┘
- LLM 통화 없음. 토큰 없음, 에이전트 루프 없음, 모델 지출 없음.
- 스크립트가 작업입니다. 스크립트는 경고 여부를 결정합니다. 출력 방출 → 메시지가 전송됩니다. 아무것도 방출하지 않음 → 자동 틱.
- Bash or Python.
.sh/.bashfiles run under/bin/bash; 다른 확장은 현재 Python 인터프리터에서 실행됩니다.~/.hermes/scripts/의 모든 항목이 허용됩니다. - 동일한 스케줄러. LLM 작업과 함께
cronjob에 상주합니다. 일시 중지, 재개, 나열, 로그 및 전달 타겟팅이 모두 동일한 방식으로 작동합니다.
언제 사용해야 하는가
다음의 경우 에이전트 없음 모드를 사용하세요.
- 메모리/디스크/GPU 감시. 5분마다 실행되며 임계값을 위반한 경우에만 경고합니다.
- CI 후크. 배포 완료 → 커밋 SHA 게시. 빌드 실패 → 로그의 마지막 100줄을 보냅니다.
- 주기적인 측정항목. 간단한 API 호출 + 예쁜 인쇄로 "오전 9시에 일일 스트라이프 수익"을 제공합니다.
- 외부 이벤트 폴러. API를 확인하고 상태 변경에 대해 경고합니다.
- 하트비트. N분마다 대시보드를 핑하여 호스트가 살아 있음을 증명합니다.
에이전트가 말할 내용을 결정해야 하는 경우 일반(LLM 기반) 크론 작업을 사용하세요. 긴 문서를 요약하고, 피드에서 흥미로운 항목을 선택하고, 인간 친화적인 메시지 초안을 작성하세요. 에이전트 없음 경로는 스크립트의 stdout이 이미 메시지인 경우를 위한 것입니다.
채팅에서 하나 만들기
에이전트 없음 모드의 진정한 장점은 에이전트 자체가 워치독을 설정할 수 있다는 것입니다. 즉, 편집기도 없고, 셸도 없고, CLI 플래그도 기억하지 않습니다. 원하는 것을 설명하면 Hermes가 스크립트를 작성하고 일정을 잡은 다음 실행 시기를 알려줍니다.
예시 성적표
당신: RAM이 5분마다 85%를 초과하면 텔레그램으로 나에게 핑을 보냅니다.
헤르메스: (
~/.hermes/scripts/memory-watchdog.sh을 쓴 다음no_agent=true로cronjob(...)을 호출합니다.)설정합니다. 5분마다 실행되며 RAM이 85%를 초과하는 경우에만 Telegram에 경고합니다. 스크립트:
memory-watchdog.sh. 작업 ID:abc123.
내부적으로 에이전트는 두 가지 도구 호출을 수행합니다.
# 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",
)
그 시점부터 모든 틱은 무료입니다. 스케줄러는 스크립트를 실행하고 비어 있지 않은 경우 stdout을 Telegram으로 파이프하며 모델을 건드리지 않습니다.
에이전트이 당신을 위해 결정하는 것
"X일 때 알림" 또는 "N분마다 Y를 확인하고 Z인지 알려주세요"와 같은 요청을 구문으로 표현하면 Hermes의 cronjob 도구 설명은 메시지 내용이 스크립트에 의해 완전히 결정될 때마다 no_agent=True에 도달하도록 지시합니다. 요청에 추론이 필요할 때("새로운 문제 요약", "가장 흥미로운 헤드라인 선택", "친숙한 알림 초안 작성") 일반 LLM 기반 경로로 돌아갑니다.
--no-agent을 직접 지정할 필요는 없습니다. 행동을 설명하면 됩니다.
채팅에서 감시자 관리
에이전트는 작업을 생성하는 것과 동일한 방식으로 작업을 일시 중지, 재개, 편집 및 제거할 수 있습니다.
당신: 오늘 밤 메모리 감시를 중지하세요
헤르메스: (
cronjob(action='pause', job_id='abc123')호출)일시중지되었습니다. "다시 켜기" 또는
hermes cron resume abc123을 통해 재개하세요.
당신: 15분마다로 변경
헤르메스: (
cronjob(action='update', job_id='abc123', schedule='every 15m')호출)
CLI 명령을 배우지 않고도 에이전트에서 전체 수명 주기(생성/목록/업데이트/일시 중지/재개/지금 실행/제거)를 사용할 수 있습니다.
CLI에서 하나 생성
껍질을 선호하시나요? CLI 경로는 다음 세 가지 명령으로 동일한 결과를 제공합니다.
# 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
그게 전부입니다. 프롬프트도 없고, 기술도 없고, 모델도 없습니다.
스크립트 출력이 전달에 매핑되는 방식
| 스크립트 동작 | 결과 |
|---|---|
| 출구 0, 비어 있지 않은 표준 출력 | stdout은 그대로 전달됩니다. |
| 0번 종료, 표준 출력 비어 있음 | 자동 틱 — 배송 불가 |
Exit 0, stdout의 마지막 줄에 {"wakeAgent": false}이 포함되어 있습니다. | 자동 틱(LLM 작업과 게이트 공유) |
| 0이 아닌 종료 코드 | 오류 경고가 전달됩니다(깨진 워치독이 자동으로 실패하지 않도록). |
| 스크립트 시간 초과 | 오류 알림이 전달되었습니다. |
"비어 있을 때 자동" 동작은 클래식 감시 패턴의 핵심입니다. 스크립트는 매분마다 자유롭게 실행되지만 채널은 실제로 주의가 필요한 경우에만 메시지를 봅니다.
스크립트 규칙
스크립트는 ~/.hermes/scripts/에 있어야 합니다. 이는 작업 생성 시간과 런타임 모두에 적용됩니다. 절대 경로, ~/ 확장 및 경로 순회 패턴(../)은 거부됩니다. 동일한 디렉터리는 LLM 작업에서 사용되는 사전 확인 스크립트 게이트와 공유됩니다.
통역사 선택은 파일 확장자에 따라 결정됩니다.
| 확장 | 통역사 |
|---|---|
.sh, .bash | /bin/bash |
| 다른 것 | sys.executable (현재 Python) |
우리는 의도적으로 #!/... shebang을 존중하지 않습니다. 통역사 설정을 명시적이고 작게 유지하면 스케줄러가 신뢰하는 표면이 줄어듭니다.
일정 구문
다른 모든 크론 작업과 동일합니다.
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
전체 구문은 cron 기능 참조를 참조하세요.
납품대상
--deliver은 게이트웨이가 알고 있는 모든 것을 받아들입니다. 몇 가지 일반적인 모양:
--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/
봇 토큰 플랫폼(Telegram, Discord, Slack, Signal, SMS, WhatsApp)의 경우 스크립트 실행 시 실행 중인 게이트웨이가 필요하지 않습니다. 이 도구는 ~/.hermes/.env / ~/.hermes/config.yaml에 이미 있는 자격 증명을 사용하여 각 플랫폼의 REST 엔드포인트를 직접 호출합니다.
편집 및 수명주기
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
LLM 작업에서 작동하는 모든 것(일시 중지, 재개, 수동 트리거, 전달 대상 변경)은 에이전트가 없는 작업에서도 작동합니다.
실제 예: 디스크 공간 경고
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"
두 파일 시스템이 모두 90% 미만이면 침묵합니다. 임계값 초과 파일 시스템이 가득 차면 각 라인당 정확히 한 라인을 실행합니다.
다른 패턴과의 비교
| 접근 | 실행되는 것 | 언제 사용하나요? |
|---|---|---|
cronjob --no-agent (이 페이지) | 헤르메스 일정에 대한 사용자의 스크립트 | 추론이 필요하지 않은 반복 감시/경고/메트릭 |
cronjob (기본값, LLM) | 선택적 사전 확인 스크립트가 있는 에이전트 | 메시지 내용에 데이터에 대한 추론이 필요한 경우 |
웹훅 구독에 대한 OS 크론 + curl | OS 일정에 대한 스크립트 | 헤르메스가 건강에 해로울 수 있는 경우(모니터링 중인 것) |
게이트웨이가 다운된 경우에도 실행해야 하는 중요한 시스템 상태 감시의 경우 Hermes 웹후크 구독(또는 외부 경고 엔드포인트)에 대한 일반 curl과 함께 OS 수준 크론을 사용합니다. 이는 독립적인 OS 프로세스로 실행되며 Hermes 작동에 의존하지 않습니다. 모니터링 대상이 외부인 경우에는 게이트웨이 내 스케줄러가 올바른 선택입니다.
관련
- Cron으로 모든 것을 자동화 — LLM 기반 cron 패턴입니다.
- 예약된 작업(Cron) 참조 — 전체 일정 구문, 수명 주기, 전달 라우팅.
- 웹훅 구독 — 외부 스케줄러에 대한 Fire-and-forget HTTP 진입점입니다.
- 게이트웨이 내부 — 전달 라우터 내부.