Chuyển tới nội dung chính

Nội bộ Cron

Hệ thống con cron cung cấp khả năng thực thi tác vụ theo lịch trình — từ độ trễ một lần đơn giản đến các tác vụ biểu thức cron định kỳ với tính năng chèn kỹ năng và phân phối đa nền tảng.

Tệp chính

Tập tinMục đích
cron/jobs.pyMô hình công việc, lưu trữ, đọc/ghi nguyên tử vào jobs.json
cron/scheduler.pyVòng lặp lập lịch trình - phát hiện công việc đến hạn, thực hiện, theo dõi lặp lại
tools/cronjob_tools.pyĐăng ký và xử lý công cụ cronjob đối mặt với mô hình
gateway/run.pyTích hợp cổng - tích tắc cron trong vòng lặp chạy dài
hermes_cli/cron.pyCLI hermes cron lệnh con

Mô hình lập kế hoạch

Bốn định dạng lịch trình được hỗ trợ:

Định dạngVí dụHành vi
Độ trễ tương đối30m , 2h , 1dMột phát, bắn sau thời gian quy định
Khoảng thời gianevery 2h , every 30mĐịnh kỳ, cháy đều đặn
Biểu thức Cron0 9 * * *Cú pháp cron 5 trường tiêu chuẩn (phút, giờ, ngày, tháng, ngày trong tuần)
Dấu thời gian ISO2025-01-15T09:00:00Một phát, bắn đúng thời điểm

Bề mặt đối diện với mô hình là một công cụ cronjob duy nhất với các thao tác kiểu hành động: create , list , update , pause , resume , run , remove .

Lưu trữ công việc

Công việc được lưu trữ trong ~/.hermes/cron/jobs.json với ngữ nghĩa ghi nguyên tử (ghi vào tệp tạm thời, sau đó đổi tên). Mỗi bản ghi công việc bao gồm:

{
"id": "job_abc123",
"name": "Daily briefing",
"prompt": "Summarize today's AI news and funding rounds",
"schedule": "0 9 * * *",
"skills": ["ai-funding-daily-report"],
"deliver": "telegram:-1001234567890",
"repeat": null,
"state": "scheduled",
"next_run": "2025-01-16T09:00:00Z",
"run_count": 42,
"created_at": "2025-01-01T00:00:00Z",
"model": null,
"provider": null,
"script": null
}

Trạng thái Vòng đời Công việc

Tiểu bangÝ nghĩa
scheduledĐang hoạt động, sẽ kích hoạt vào thời gian dự kiến ​​tiếp theo
pausedBị đình chỉ - sẽ không kích hoạt cho đến khi tiếp tục
completedSố lần lặp lại đã hết hoặc một phát đã bắn
runningHiện đang thực thi (trạng thái tạm thời)

Khả năng tương thích ngược

Các công việc cũ hơn có thể có một trường skill thay vì mảng skills. Bộ lập lịch bình thường hóa điều này khi tải - một skill được thăng cấp thành skills: [skill] .

Thời gian chạy của bộ lập lịch

Chu kỳ đánh dấu

Bộ lập lịch chạy theo chu kỳ (mặc định: 60 giây một lần):

tick()
1. Acquire scheduler lock (prevents overlapping ticks)
2. Load all jobs from jobs.json
3. Filter to due jobs (next_run <= now AND state == "scheduled")
4. For each due job:
a. Set state to "running"
b. Create fresh AIAgent session (no conversation history)
c. Load attached skills in order (injected as user messages)
d. Run the job prompt through the agent
e. Deliver the response to the configured target
f. Update run_count, compute next_run
g. If repeat count exhausted → state = "completed"
h. Otherwise → state = "scheduled"
5. Write updated jobs back to jobs.json
6. Release scheduler lock

Tích hợp cổng

Ở chế độ cổng, đánh dấu bộ lập lịch được tích hợp vào vòng lặp sự kiện chính của cổng. Cổng gọi scheduler.tick() theo chu kỳ bảo trì định kỳ, diễn ra cùng với việc xử lý tin nhắn.

Ở chế độ CLI, công việc định kỳ chỉ kích hoạt khi các lệnh hermes cron được chạy hoặc trong các phiên CLI đang hoạt động.

Cách ly phiên mới

Mỗi công việc định kỳ chạy trong một phiên tác nhân hoàn toàn mới:

  • Không có lịch sử hội thoại từ lần chạy trước
  • Không có bộ nhớ về các lần thực thi cron trước đó (trừ khi được lưu vào bộ nhớ/tệp)
  • Lời nhắc phải khép kín — công việc định kỳ không thể đặt câu hỏi làm rõ
  • Bộ công cụ cronjob bị tắt (bảo vệ đệ quy)

Công việc hỗ trợ kỹ năng

Công việc định kỳ có thể đính kèm một hoặc nhiều kỹ năng thông qua trường skills. Tại thời điểm thực hiện:1. Kỹ năng được nạp theo thứ tự quy định 2. Nội dung SKILL.md của mỗi kỹ năng được đưa vào dưới dạng ngữ cảnh 3. Lời nhắc công việc được thêm vào dưới dạng hướng dẫn nhiệm vụ 4. Tác nhân xử lý bối cảnh kỹ năng kết hợp + lời nhắc

Điều này cho phép các quy trình công việc được thử nghiệm và tái sử dụng mà không cần dán hướng dẫn đầy đủ vào lời nhắc cron. Ví dụ:

Create a daily funding report → attach "ai-funding-daily-report" skill

Công việc dựa trên tập lệnh

Công việc cũng có thể đính kèm tập lệnh Python thông qua trường script. Tập lệnh chạy trước mỗi lượt tác nhân và thiết bị xuất chuẩn của nó được đưa vào dấu nhắc dưới dạng ngữ cảnh. Điều này cho phép thu thập dữ liệu và thay đổi mẫu phát hiện:

# ~/.hermes/scripts/check_competitors.py
import requests, json
# Fetch competitor release notes, diff against last run
# Print summary to stdout — agent analyzes and reports

Mô hình giao hàng

Kết quả công việc định kỳ có thể được gửi đến bất kỳ nền tảng được hỗ trợ nào:

Mục tiêuCú phápVí dụ
Trò chuyện gốcoriginGửi đến cuộc trò chuyện nơi công việc được tạo
Tệp cục bộlocalLưu vào ~/.hermes/cron/output/
Điện tíntelegram hoặc telegram:<chat_id>telegram:-1001234567890
Bất hòadiscord hoặc discord:#channeldiscord:#engineering
Chần chừslackGửi tới kênh chủ Slack
WhatsAppwhatsappGiao hàng tới nhà WhatsApp
Tín hiệusignalGiao hàng tới Signal
Ma trậnmatrixGiao hàng tận phòng Matrix home
Quan trọng nhấtmattermostGiao hàng tận nhà Matter Extreme
EmailemailGửi qua email
SMSsmsGửi qua SMS
Trợ lý tại nhàhomeassistantĐưa đến cuộc trò chuyện HA
DingTalkdingtalkGiao hàng cho DingTalk
FeishufeishuGiao hàng đến Feishu
WeComwecomGiao hàng tới WeCom

Đối với các chủ đề Telegram, hãy sử dụng định dạng telegram:<chat_id>:<thread_id> (ví dụ: telegram:-1001234567890:17585 ).

Gói phản hồi

Theo mặc định ( cron.wrap_response: true ), việc phân phối cron được gói bằng:

  • Tiêu đề xác định tên và tác vụ cron job
  • Chân trang lưu ý rằng nhân viên không thể nhìn thấy tin nhắn đã gửi trong cuộc trò chuyện

Tiền tố [SILENT] trong phản hồi cron sẽ ngăn chặn hoàn toàn việc phân phối — hữu ích cho các công việc chỉ cần ghi vào tệp hoặc thực hiện các tác dụng phụ.

Cách ly phiên

Việc phân phối Cron KHÔNG được phản ánh vào lịch sử hội thoại phiên cổng. Chúng chỉ tồn tại trong phiên riêng của công việc định kỳ. Điều này ngăn chặn các hành vi vi phạm luân phiên tin nhắn trong cuộc trò chuyện của cuộc trò chuyện mục tiêu.

Bảo vệ đệ quy

Các phiên chạy cron đã tắt bộ công cụ cronjob. Điều này ngăn cản:

  • Một công việc được lên lịch từ việc tạo các công việc định kỳ mới
  • Lập kế hoạch đệ quy có thể làm bùng nổ việc sử dụng mã thông báo
  • Sự đột biến ngẫu nhiên của lịch trình công việc từ bên trong công việc

Khóa

Bộ lập lịch sử dụng khóa dựa trên tệp để ngăn các dấu tích chồng chéo thực hiện cùng một đợt công việc đến hạn hai lần. Điều này rất quan trọng trong chế độ cổng nơi nhiều chu kỳ bảo trì có thể trùng lặp nếu đánh dấu trước đó mất nhiều thời gian hơn khoảng thời gian đánh dấu.

Giao diện CLI

hermes cron CLI cung cấp khả năng quản lý công việc trực tiếp:

hermes cron list                    

# Show all jobs
hermes cron create

# Interactive job creation (alias: add)
hermes cron edit <job_id>

# Edit job configuration
hermes cron pause <job_id>

# Pause a running job
hermes cron resume <job_id>

# Resume a paused job
hermes cron run <job_id>

# Trigger immediate execution
hermes cron remove <job_id>

# Delete a job

Tài liệu liên quan