Install any skill in seconds. Free to start, no credit card required.
Get Started Free →iii-hq/iii-cron
Schedule any registered function on a 6- or 7-field cron expression, with once-only execution across a fleet when backed by the redis adapter. Its whole surface is the `cron` trigger type.
Passed 22 of 24 test cases with the skill, and 9 of 24 without it.
and 19 more in the full report
13 fixed9 passed either way2 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
What configuration property name specifies the endpoint connection string for the Redis distributed lock adapter?
| Checked | Without skill | With skill |
|---|---|---|
| The response identifies redis_url as the configuration property. | Missed | Passed |
The instructions your model reads when the skill loads.
The iii-cron worker schedules a registered function to run on a recurring cron expression. It exposes no callable functions — its entire surface is one trigger type, cron, bound via iii.registerTrigger({ type: 'cron', function_id, config }). On every firing the engine builds an event payload, optionally evaluates a condition function, acquires a distributed lock through the configured adapter, and invokes the target function. Each firing reports scheduled_time vs. actual_time so drift and reentrancy are observable from inside the handler.
The schedule grammar is the seven-field cron dialect — second minute hour day-of-month month day-of-week [year] — where the year is optional and defaults to *. Both six- and seven-field forms work; the leading field is always seconds, so 0 */5 * * * * fires every 5 minutes at second 0, not every 5 seconds.
Two adapters govern once-only execution: kv (default) takes a process-local lock and is single-instance only — on a multi-instance fleet every engine fires the same job (tunables lock_ttl_ms, lock_index); redis takes a distributed lock and is required for once-only firing across a fleet (tunable redis_url).
redis adapter.condition_function_id without threading the check through the handler.cron::* id; everything flows through iii.registerTrigger.kv adapter only locks process-local; never rely on it for once-only jobs in a multi-instance deployment — use redis.iii-state / iii-stream; iii-cron fires on the clock only.Bind a cron trigger when a handler should run on a recurring schedule. The handler runs server-side on a tokio task spawned by the engine; with the redis adapter it fires once across the fleet per scheduled run.
Reach for it when:
condition_function_id and the engine evaluates it before each run, skipping the handler (and releasing the lock) on a falsy or erroring result.iii.registerFunction('jobs::cleanup-old-data', handler).iii.registerTrigger({
type: 'cron',
function_id: 'jobs::cleanup-old-data',
config: {
test cases passed, vs 9 / 24 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.