
Automation
- 17 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
Automation is a Claude Code skill that schedules recurring tasks using cron expressions and named presets.
About
Automation is a skill that schedules recurring tasks using cron expressions. It supports raw cron syntax and named presets such as EVERY_5_MINUTES, HOURLY, and DAILY_9AM, and lets a developer list, enable, disable, manually trigger, and remove jobs. A developer uses it to run recurring bot commands like price checks or portfolio syncs on a schedule.
- Schedules recurring tasks with cron expressions
- Ships named presets like EVERY_5_MINUTES and DAILY_9AM
- Enable, disable, trigger, and remove jobs via slash commands
Automation by the numbers
- 17 all-time installs (skills.sh)
- Ranked #1,379 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
automation capabilities & compatibility
- Capabilities
- task scheduling · cron jobs
- Use cases
- orchestration
- Runs
- Runs locally
What automation says it does
Schedule recurring tasks using cron expressions with preset support.
/auto cron EVERY_5_MINUTES portfolio-sync
npx skills add https://github.com/alsk1992/cloddsbot --skill automationAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 17 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Schedule recurring bot tasks with cron expressions or named presets.
Who is it for?
running recurring bot commands on a cron schedule
Skip if: one-off tasks or event-driven triggers rather than time-based schedules
When should I use this skill?
you want to run a bot command on a recurring schedule
What you get
Scheduled cron jobs that run bot commands on a recurring interval and can be enabled, disabled, or triggered on demand.
By the numbers
- 8 schedule presets
- 7 slash commands
Files
Automation - Cron Scheduler
Schedule recurring tasks using cron expressions with preset support.
Commands
/auto list - List all scheduled jobs
/auto cron <schedule> <command> - Create a cron job
/auto remove <id> - Remove a job
/auto enable <id> - Enable a job
/auto disable <id> - Disable a job
/auto trigger <id> - Manually run a job
/auto presets - Show available schedule presetsCron Expressions
| Expression | Description |
|---|---|
* * * * * | Every minute |
0 * * * * | Every hour |
0 9 * * * | Daily at 9am |
*/15 * * * * | Every 15 minutes |
0 0 1 * * | First of month |
Presets
Instead of a cron expression, you can use a named preset:
/auto cron EVERY_MINUTE check-prices
/auto cron EVERY_5_MINUTES portfolio-sync
/auto cron EVERY_15_MINUTES scan-arbs
/auto cron HOURLY report
/auto cron DAILY_MIDNIGHT snapshot
/auto cron DAILY_9AM morning-scan
/auto cron WEEKLY_MONDAY_9AM weekly-report
/auto cron MONTHLY monthly-summaryExamples
/auto cron "*/5 * * * *" portfolio-sync
/auto cron HOURLY check-positions
/auto list
/auto trigger job-1234567890
/auto disable job-1234567890
/auto remove job-1234567890
/auto presets/**
* Automation CLI Skill
*
* Commands:
* /auto list - List scheduled jobs
* /auto cron <schedule> <command> - Create cron job
* /auto remove <id> - Remove job
* /auto enable <id> - Enable job
* /auto disable <id> - Disable job
* /auto trigger <id> - Manually run a job
*/
// Store command strings for each cron job
const jobCommands = new Map<string, string>();
let schedulerInstance: any = null;
async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const cmd = parts[0]?.toLowerCase() || 'help';
try {
const { createCronScheduler, CronSchedules } = await import('../../../automation/cron');
if (!schedulerInstance) schedulerInstance = createCronScheduler();
const scheduler = schedulerInstance;
switch (cmd) {
case 'list':
case 'ls': {
const jobs = scheduler.list();
if (!jobs.length) return 'No scheduled jobs configured. Use `/auto cron` to create one.';
let output = `**Scheduled Jobs** (${jobs.length})\n\n`;
for (const job of jobs) {
const cmd = jobCommands.get(job.id);
output += `[${job.id}] \`${job.schedule}\`\n`;
if (cmd) output += ` Command: \`${cmd}\`\n`;
output += ` Enabled: ${job.enabled ? 'yes' : 'no'}\n`;
if (job.lastRun) output += ` Last run: ${job.lastRun.toISOString()}\n`;
if (job.nextRun) output += ` Next run: ${job.nextRun.toISOString()}\n`;
output += '\n';
}
return output;
}
case 'cron': {
if (parts.length < 3) {
return 'Usage: /auto cron <schedule> <command>\n\nExample: /auto cron "*/5 * * * *" portfolio-sync\n\nPresets: EVERY_MINUTE, EVERY_5_MINUTES, EVERY_15_MINUTES, HOURLY, DAILY_MIDNIGHT, DAILY_9AM, WEEKLY_MONDAY_9AM, MONTHLY';
}
const schedule = parts[1];
const command = parts.slice(2).join(' ');
const id = `job-${Date.now()}`;
// Resolve preset schedules
const presetMap: Record<string, string> = CronSchedules;
const resolvedSchedule = presetMap[schedule.toUpperCase()] || schedule;
jobCommands.set(id, command);
scheduler.add(id, resolvedSchedule, async () => {
const { logger } = await import('../../../utils/logger');
logger.info({ jobId: id, command }, 'Cron job fired');
});
const job = scheduler.get(id);
return `**Cron Job Created**\n\nID: ${id}\nSchedule: \`${resolvedSchedule}\`\nCommand: \`${command}\`\nNext run: ${job?.nextRun?.toISOString() || 'calculating...'}`;
}
case 'remove':
case 'delete': {
if (!parts[1]) return 'Usage: /auto remove <job-id>';
const removed = scheduler.remove(parts[1]);
return removed ? `Job \`${parts[1]}\` removed.` : `Job \`${parts[1]}\` not found.`;
}
case 'enable': {
if (!parts[1]) return 'Usage: /auto enable <job-id>';
scheduler.setEnabled(parts[1], true);
return `Job \`${parts[1]}\` enabled.`;
}
case 'disable': {
if (!parts[1]) return 'Usage: /auto disable <job-id>';
scheduler.setEnabled(parts[1], false);
return `Job \`${parts[1]}\` disabled.`;
}
case 'trigger':
case 'run': {
if (!parts[1]) return 'Usage: /auto trigger <job-id>';
const jobCmd = jobCommands.get(parts[1]);
await scheduler.trigger(parts[1]);
return `Job \`${parts[1]}\` triggered manually.${jobCmd ? `\nCommand: \`${jobCmd}\`` : ''}`;
}
case 'presets': {
let output = '**Cron Schedule Presets**\n\n';
for (const [name, expr] of Object.entries(CronSchedules)) {
output += ` ${name}: \`${expr}\`\n`;
}
return output;
}
default:
return helpText();
}
} catch (error) {
return `Error: ${error instanceof Error ? error.message : String(error)}`;
}
}
function helpText(): string {
return `**Automation Commands**
/auto list - List scheduled jobs
/auto cron <schedule> <command> - Create cron job
/auto remove <id> - Remove a job
/auto enable <id> - Enable a job
/auto disable <id> - Disable a job
/auto trigger <id> - Manually run a job
/auto presets - Show schedule presets
Cron format: "minute hour day month weekday"`;
}
export default {
name: 'automation',
description: 'Schedule cron jobs, manage webhooks, and automate recurring tasks',
commands: ['/auto', '/automation'],
handle: execute,
};