Cron composer
Composable block system for OpenClaw cron job prompts. Assembles cron prompts from reusable markdown blocks so cross-cutting changes (e.g. git identity, error handling) only need updating in one place. Use when managing multiple cron jobs, authoring a cron manifest, composing blocks into prompts, running cron-compose.py, or asking about cron prompt assembly, block composition, manifest format, or `apply`/`lint`/`diff`/`sync`/`stats` commands.From its SKILL.md
npx -y skills add suryast/free-ai-agent-skills --skill cron-composerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 5 commands, including `python3 "$SKILL_DIR/scripts/cron-compose.py" "$SKILL_DIR/example-manifest.yaml" list` and 4 more.
SKILL.md
4.0 KB, 892 tokens by cl100k_base, as published. Nobody here has run it
Cron Composer
🧩 STARTER_CHARACTER = 🧩
Composable block system for OpenClaw cron job prompts. Define reusable blocks once; assemble prompts from them via a YAML manifest.
Why: When you have many cron jobs sharing common behaviours (git identity, error handling, backup patterns), editing each prompt individually is error-prone. Cron Composer centralises shared logic in block files and assembles final prompts on demand.
Quick Start
# Install: copy skill to your skills directory (already done if you're reading this)
SKILL_DIR="$HOME/.openclaw/workspace/skills/cron-composer"
# List all crons in manifest
python3 "$SKILL_DIR/scripts/cron-compose.py" "$SKILL_DIR/example-manifest.yaml" list
# Preview assembled prompt (dry-run)
python3 "$SKILL_DIR/scripts/cron-compose.py" /path/to/my-manifest.yaml apply my-cron --dry-run
# Apply one cron
python3 "$SKILL_DIR/scripts/cron-compose.py" /path/to/my-manifest.yaml apply my-cron
# Apply all crons
python3 "$SKILL_DIR/scripts/cron-compose.py" /path/to/my-manifest.yaml apply --all
# Validate manifest
python3 "$SKILL_DIR/scripts/cron-compose.py" /path/to/my-manifest.yaml lint
Key Concepts
- Blocks — Markdown files in
blocks/<category>/. Prepended to every cron that references them. - Manifest — YAML file mapping cron names → block lists + task prompt + variables.
- Variables —
{{VAR}}placeholders in blocks/tasks, resolved from thevars:section per cron.
Manifest Format
blocks_dir: /path/to/your/blocks # absolute or relative to manifest file
crons:
my-cron-name:
id: "uuid-from-openclaw-cron-list"
blocks:
- env/error-handling # prepended first
- env/workspace-context
- ops/git-commit
- ops/file-backup
vars:
PROJECT: /home/user/myproject # replaces {{PROJECT}} in blocks + task
SITE: my-site
task: |
Task-specific instructions only. Don't repeat what blocks already cover.
Check {{PROJECT}}/status.txt and report findings.
Commands
| Command | Description |
|---|---|
list | Tabular view: name, ID, blocks |
apply <name> | Assemble + push prompt to openclaw cron |
apply --all | Apply every cron in manifest |
apply <name> --dry-run | Print assembled prompt without applying |
apply <name> --diff | Show line diff vs live before applying |
lint | Validate UUIDs, block files, var coverage |
sync | Detect drift between manifest and live crons |
diff [name] | Summarise line changes vs live prompt |
stats | Block usage dashboard |
Block Categories (convention)
| Category | Purpose | Example blocks |
|---|---|---|
env/ | Environment constraints, always-prepended | error-handling, workspace-context |
ops/ | Reusable operations | git-commit, file-backup |
patterns/ | Multi-step task shape templates | check-and-fix |
Writing Blocks
- Create
blocks/<category>/<name>.md - Write reusable instructions. Use
{{VAR}}for anything job-specific. - Reference as
<category>/<name>in manifests (no.mdextension).
Good blocks cover one concern (commit, backup, error handling). Keep them short and composable.
blocks_dir Resolution
The assembler resolves blocks relative to blocks_dir in the manifest. You can:
- Set
blocks_dir:to an absolute path - Set
blocks_dir:relative to the manifest file location - Omit
blocks_dir:— defaults to ablocks/directory next to the manifest
Example
See example-manifest.yaml and blocks/ in this skill directory for working examples.
What ships with it: 8 files
25.1 KB alongside SKILL.md, 1 of them executable
blocks/
scripts/
- cron-compose.pyruns14.9 KB
- example-manifest.yaml3.3 KB
- README.md4.5 KB