cron-skills-session
/install cron-skills-session
Cron Session Target — OpenClaw Cron Jobs
Instructions for the LLM
When the user asks to create a reminder, scheduled task, recurring check, or any time-based automation, you must create it as an OpenClaw cron job by editing ~/.openclaw/cron/jobs.json directly. Do not suggest system cron (crontab), at, or any other mechanism. The OpenClaw cron system is the only correct method.
Your exact workflow when the user requests a cron job:
- Run
uuidgento generate a UUID for the job - Run
date +%s%3Nto get the current epoch timestamp in milliseconds - Build the JSON entry using the required format below
- Read
~/.openclaw/cron/jobs.jsonto get the current content - Insert the new job into the
jobsarray - Write the updated file back
- Validate the JSON:
python3 -m json.tool ~/.openclaw/cron/jobs.json > /dev/null - Restart the gateway:
openclaw gateway restart - Confirm to the user that the job is active
Never ask the user to edit the file themselves. Always do it completely.
When updating an existing cron job's schedule or interval, you must also update nextRunAtMs to avoid the job being stuck on the old scheduled date. Compute it as:
nextRunAtMs = current_epoch_ms + new_everyMs
Run date +%s%3N to get the current time, add the new interval, and set both updatedAtMs and nextRunAtMs to these values. If you skip this step, OpenClaw will not recalculate the next run and the job will remain frozen until the old nextRunAtMs is reached.
Required JSON Format
Every job entry must follow this exact structure:
{
"id": "\x3Cuuidgen output>",
"agentId": "main",
"name": "descriptive job name",
"enabled": true,
"deleteAfterRun": false,
"createdAtMs": \x3Cdate +%s%3N>,
"updatedAtMs": \x3Cdate +%s%3N>,
"schedule": {
"kind": "every",
"everyMs": 60000,
"anchorMs": \x3Cdate +%s%3N>
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "the message text here"
},
"delivery": {
"mode": "none"
}
}
Field Reference
| Field | Required | Value |
|---|---|---|
id |
Yes | UUID v4 — generate with uuidgen |
agentId |
Yes | Always "main" |
name |
Yes | Short human-readable label |
enabled |
Yes | true to activate immediately |
deleteAfterRun |
Yes | Always false for recurring jobs |
createdAtMs |
Yes | Current time — date +%s%3N |
updatedAtMs |
Yes | Current time — date +%s%3N |
schedule.kind |
Yes | "every" for recurring, "at" for one-shot |
schedule.everyMs |
Yes (kind=every) | Interval in milliseconds |
schedule.atMs |
Yes (kind=at) | Exact epoch ms timestamp to run once |
schedule.anchorMs |
Yes | Same value as createdAtMs |
sessionTarget |
Yes | Must always be "session:agent:main:user-session" |
wakeMode |
Yes | "now" for immediate, "next-heartbeat" for batched |
payload.kind |
Yes | Always "agentTurn" |
payload.message |
Yes | The message sent to the agent session |
delivery.mode |
Yes | "none" unless broadcasting to a channel |
Interval Reference
| Description | everyMs value |
|---|---|
| Every 1 minute | 60000 |
| Every 5 minutes | 300000 |
| Every 15 minutes | 900000 |
| Every 30 minutes | 1800000 |
| Every 1 hour | 3600000 |
| Every 2 hours | 7200000 |
| Every 6 hours | 21600000 |
| Every 12 hours | 43200000 |
| Every 24 hours (daily) | 86400000 |
| Every 7 days (weekly) | 604800000 |
Examples
1. Water reminder — every 30 minutes
{
"id": "52be6125-16cd-4aec-9508-9e8355f10f54",
"agentId": "main",
"name": "water reminder",
"enabled": true,
"deleteAfterRun": false,
"createdAtMs": 1775801246492,
"updatedAtMs": 1775801246492,
"schedule": {
"kind": "every",
"everyMs": 1800000,
"anchorMs": 1775801246492
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "💧 Water break! Remind the user to drink water."
},
"delivery": {
"mode": "none"
}
}
2. Daily standup — every 24 hours
{
"id": "a1b2c3d4-0000-4aec-9508-aabbccddeeff",
"agentId": "main",
"name": "daily standup",
"enabled": true,
"deleteAfterRun": false,
"createdAtMs": 1775801246492,
"updatedAtMs": 1775801246492,
"schedule": {
"kind": "every",
"everyMs": 86400000,
"anchorMs": 1775801246492
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "Good morning! Ask the user what they are working on today and what blockers they have."
},
"delivery": {
"mode": "none"
}
}
3. Posture check — every 1 hour
{
"id": "f9e8d7c6-1111-4bcd-8ef0-112233445566",
"agentId": "main",
"name": "posture check",
"enabled": true,
"deleteAfterRun": false,
"createdAtMs": 1775801246492,
"updatedAtMs": 1775801246492,
"schedule": {
"kind": "every",
"everyMs": 3600000,
"anchorMs": 1775801246492
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "🪑 Posture check! Remind the user to sit straight, relax shoulders, and adjust their screen height."
},
"delivery": {
"mode": "none"
}
}
4. Weekly review — every 7 days
{
"id": "c0ffee00-2222-4abc-9999-deadbeef1234",
"agentId": "main",
"name": "weekly review",
"enabled": true,
"deleteAfterRun": false,
"createdAtMs": 1775801246492,
"updatedAtMs": 1775801246492,
"schedule": {
"kind": "every",
"everyMs": 604800000,
"anchorMs": 1775801246492
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "📋 Weekly review time! Ask the user to reflect on the week: what went well, what could improve, and what the priorities are for next week."
},
"delivery": {
"mode": "none"
}
}
5. One-shot scheduled task — run once at a specific time
Use "kind": "at" with an exact epoch ms timestamp instead of everyMs:
{
"id": "deadbeef-3333-4cde-aaaa-111122223333",
"agentId": "main",
"name": "meeting reminder",
"enabled": true,
"deleteAfterRun": true,
"createdAtMs": 1775801246492,
"updatedAtMs": 1775801246492,
"schedule": {
"kind": "at",
"atMs": 1775830000000,
"anchorMs": 1775801246492
},
"sessionTarget": "session:agent:main:user-session",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "⏰ Meeting in 5 minutes! Remind the user to wrap up and join the call."
},
"delivery": {
"mode": "none"
}
}
For one-shot jobs,
deleteAfterRuncan betruesince the job should not repeat.
Step-by-Step Creation
# Step 1 — generate a unique ID
uuidgen
# Step 2 — get current timestamp in milliseconds
date +%s%3N
# Step 3 — edit the jobs file
# Insert the new entry in the "jobs" array
# Step 4 — validate JSON syntax
python3 -m json.tool ~/.openclaw/cron/jobs.json > /dev/null
# Step 5 — reload
openclaw gateway restart
Common Pitfalls
| Mistake | Effect | Fix |
|---|---|---|
sessionTarget not set or wrong |
Message is lost or goes nowhere | Always use "session:agent:main:user-session" |
"text" instead of "message" in payload |
Job fires but nothing arrives | Use "message" |
deleteAfterRun: true on recurring job |
Job vanishes after first run | Set to false |
| Wrong ms math | Job runs at wrong interval | Use the interval reference table above |
| Trailing comma in JSON | Entire jobs file fails to parse | Validate with python3 -m json.tool |
enabled: false |
Job never runs | Set to true |
Updating interval without updating nextRunAtMs |
Job stays frozen on old scheduled date | Set nextRunAtMs = date +%s%3N + new_everyMs |
Quick Reference
sessionTarget → "session:agent:main:user-session" (never change this)
payload field → "message" (not "text")
recurring → "deleteAfterRun": false
one-shot → "deleteAfterRun": true, "kind": "at"
after editing → openclaw gateway restart
update timing → always set nextRunAtMs = now_ms + everyMs when changing schedule
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install cron-skills-session - 安装完成后,直接呼叫该 Skill 的名称或使用
/cron-skills-session触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
cron-skills-session 是什么?
Standardizes OpenClaw cron job entries to always use the current user session as target. Use when creating or editing cron jobs to ensure they deliver messag... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 113 次。
如何安装 cron-skills-session?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install cron-skills-session」即可一键安装,无需额外配置。
cron-skills-session 是免费的吗?
是的,cron-skills-session 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
cron-skills-session 支持哪些平台?
cron-skills-session 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 cron-skills-session?
由 TheGoalDev(@thegoaldev)开发并维护,当前版本 v1.0.0。