cron-composer
Skill2 starsChanged 34 days agoMITView on GitHub
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.
- Installs packages
In this repository11 other files it gives its agents.
- approval-blocked-maintenance-loopsSkill
- cost-trackerSkill
- cron-doctorSkill
- daily-archivistSkill
- explain-codebaseSkill
- git-guardianSkill
- narrated-motion-explainersSkill
- self-monitorSkill
- skill-securitySkill
- static-site-release-verificationSkill
- weekly-meta-auditSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Why: When you have many cron jobs sharing common behaviours (git identity, error handling, backup patterns), editing each prompt …
- Very specific: line 91
Write reusable instructions.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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
# Set this to the actual installed package directory; do not assume the workspace.
SKILL_DIR="/path/to/skills/cron-composer"
python3 -m pip install -r "$SKILL_DIR/requirements.txt"
# 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 lintKey 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 the example manifest, the assembler, and the blocks directory for working examples.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

