← Back to Skills Marketplace
thegoaldev

cron-skills-session

by TheGoalDev · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
113
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install cron-skills-session
Description
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...
README (SKILL.md)

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:

  1. Run uuidgen to generate a UUID for the job
  2. Run date +%s%3N to get the current epoch timestamp in milliseconds
  3. Build the JSON entry using the required format below
  4. Read ~/.openclaw/cron/jobs.json to get the current content
  5. Insert the new job into the jobs array
  6. Write the updated file back
  7. Validate the JSON: python3 -m json.tool ~/.openclaw/cron/jobs.json > /dev/null
  8. Restart the gateway: openclaw gateway restart
  9. 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, deleteAfterRun can be true since 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
Usage Guidance
This skill will autonomously edit ~/.openclaw/cron/jobs.json and restart your OpenClaw gateway to install scheduled agent-driven tasks. Before installing or using it: 1) confirm the skill's source and trustworthiness (no homepage or known owner listed); 2) verify you have backups of ~/.openclaw/cron/jobs.json and confirm the 'openclaw' binary behavior; 3) ask the maintainer why required binaries/config paths are missing from the metadata and request that the skill require explicit user confirmation before writing or restarting the gateway; 4) consider whether you want scheduled 'agentTurn' messages that run in the main session (these can trigger future agent actions) — if unsure, do not allow autonomous execution and require human approval for each change; 5) prefer a version that offers a preview/dry-run of the JSON change and logs edits for auditing.
Capability Analysis
Type: OpenClaw Skill Name: cron-skills-session Version: 1.0.0 The skill bundle provides standardized instructions and JSON templates for an AI agent to manage scheduled tasks within the OpenClaw environment. It guides the agent to interact with the local configuration file `~/.openclaw/cron/jobs.json` and use standard utilities like `uuidgen` and `openclaw gateway restart` to maintain task persistence. The behavior is transparent and aligns with the stated purpose of automating reminders and recurring tasks without any indicators of malicious intent or data exfiltration.
Capability Assessment
Purpose & Capability
The skill claims to standardize cron job entries for OpenClaw and the SKILL.md is consistent with that goal, but the package metadata lists no required binaries or config paths while the instructions require uuidgen, date, python3 (for json validation), and the openclaw gateway binary and operate on ~/.openclaw/cron/jobs.json. The missing declarations are disproportionate and make the manifest inaccurate.
Instruction Scope
The runtime instructions explicitly direct the agent to generate UUIDs, read and overwrite ~/.openclaw/cron/jobs.json, validate JSON, and run 'openclaw gateway restart' without asking the user to confirm edits. They also mandate always targeting 'session:agent:main:user-session' and using 'agentTurn' payloads, which gives the skill the ability to create scheduled agent-driven actions. The instructions are prescriptive and perform persistent system changes beyond simply suggesting a cron entry.
Install Mechanism
This is an instruction-only skill with no install spec and no code files, so there is no additional install-time execution risk. However, lack of install does not eliminate runtime risks from the agent following the instructions.
Credentials
No environment variables or credentials are requested in the metadata, which is appropriate. However, the instructions implicitly require access to the user's home config (~/.openclaw/cron/jobs.json) and the 'openclaw' binary to restart the gateway; those config path and binary requirements are not declared in the manifest and should have been. The requirement to always target the 'main' agent session and inject 'agentTurn' payloads is powerful and should be justified.
Persistence & Privilege
The skill does not set always:true, but it instructs the agent to create persistent scheduled jobs that will invoke the agent's main session in the future. Autonomous invocation combined with the ability to write scheduled agentTurn messages expands the blast radius if the agent is allowed to act without human confirmation. This is not disallowed by itself, but is an important risk factor to consider.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install cron-skills-session
  3. After installation, invoke the skill by name or use /cron-skills-session
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
**Initial release of the cron-session-target skill for OpenClaw** - Standardizes OpenClaw cron job entries to use the current user session as target. - Enforces direct editing of `~/.openclaw/cron/jobs.json` for all scheduled tasks, reminders, or recurring checks. - Provides required JSON schema and detailed examples for creating and updating jobs. - Includes instructions for correct session targeting, timestamp handling, and gateway reload. - Prevents common configuration errors by specifying strict field and value requirements.
Metadata
Slug cron-skills-session
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is 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... It is an AI Agent Skill for Claude Code / OpenClaw, with 113 downloads so far.

How do I install cron-skills-session?

Run "/install cron-skills-session" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is cron-skills-session free?

Yes, cron-skills-session is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does cron-skills-session support?

cron-skills-session is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created cron-skills-session?

It is built and maintained by TheGoalDev (@thegoaldev); the current version is v1.0.0.

💬 Comments