Agent Skills: cronlytic

Cronlytic API for cron job monitoring. Use when user mentions "cron job",

UncategorizedID: vm0-ai/vm0-skills/cronlytic

Install this agent skill to your local

pnpm dlx add-skill https://github.com/vm0-ai/vm0-skills/tree/HEAD/cronlytic

Skill Files

Browse the full folder contents for cronlytic.

Download Skill

Loading file tree…

cronlytic/SKILL.md

Skill Metadata

Name
cronlytic
Description
Cronlytic API for cron job monitoring. Use when user mentions "cron job",

Troubleshooting

If requests fail, run zero doctor check-connector --env-name CRONLYTIC_API_KEY or zero doctor check-connector --url https://api.cronlytic.com/prog/ping --method GET

How to Use

1. Health Check (Ping)

Check if API is available (no auth required):

curl -s -X GET "https://api.cronlytic.com/prog/ping"

Response: {"message": "pong"}

2. Create a Cron Job

Create a scheduled job to call a webhook.

Write to /tmp/cronlytic_request.json:

{
  "name": "daily-backup",
  "url": "https://api.example.com/backup",
  "method": "POST",
  "headers": {"Authorization": "Bearer token123"},
  "body": "{\"type\": \"full\"}",
  "cron_expression": "0 2 * * *"
}

Then run:

curl -s -X POST "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID" -H "Content-Type: application/json" -d @/tmp/cronlytic_request.json | jq '{job_id, name, status, next_run_at}'

3. Create GET Request Job

Simple health check every 5 minutes.

Write to /tmp/cronlytic_request.json:

{
  "name": "health-check",
  "url": "https://api.example.com/health",
  "method": "GET",
  "headers": {},
  "body": "",
  "cron_expression": "*/5 * * * *"
}

Then run:

curl -s -X POST "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID" -H "Content-Type: application/json" -d @/tmp/cronlytic_request.json | jq '{name, status}'

4. List All Jobs

Get all your scheduled jobs:

curl -s -X GET "https://api.cronlytic.com/prog/jobs" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID" | jq '.[] | {job_id, name, status, cron_expression, next_run_at}'

5. Update a Job

Update an existing job (all fields required). Replace <your-job-id> with the actual job ID:

Write to /tmp/cronlytic_request.json:

{
  "name": "daily-backup-v2",
  "url": "https://api.example.com/backup/v2",
  "method": "POST",
  "headers": {"Authorization": "Bearer newtoken"},
  "body": "{\"type\": \"incremental\"}",
  "cron_expression": "0 3 * * *"
}

Then run:

curl -s -X PUT "https://api.cronlytic.com/prog/jobs/<your-job-id>" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID" -H "Content-Type: application/json" -d @/tmp/cronlytic_request.json | jq '{job_id, name, status, next_run_at}'

6. Pause a Job

Stop a job from executing. Replace <your-job-id> with the actual job ID:

curl -s -X POST "https://api.cronlytic.com/prog/jobs/<your-job-id>/pause" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID"

7. Resume a Job

Resume a paused job. Replace <your-job-id> with the actual job ID:

curl -s -X POST "https://api.cronlytic.com/prog/jobs/<your-job-id>/resume" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID"

8. Get Job Logs

View execution history (last 50 entries). Replace <your-job-id> with the actual job ID:

curl -s -X GET "https://api.cronlytic.com/prog/jobs/<your-job-id>/logs" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID" | jq '.logs[] | {timestamp, status, response_code, response_time}'

9. Delete a Job

Permanently delete a job and its logs. Replace <your-job-id> with the actual job ID:

curl -s -X DELETE "https://api.cronlytic.com/prog/jobs/<your-job-id>" -H "X-API-Key: $CRONLYTIC_API_KEY" -H "X-User-ID: $CRONLYTIC_USER_ID"

Cron Expression Format

Standard 5-field cron: minute hour day month day-of-week

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sun=0)
│ │ │ │ │
* * * * *

Common Examples

| Expression | Description | |------------|-------------| | */5 * * * * | Every 5 minutes | | 0 * * * * | Every hour at minute 0 | | 0 9 * * * | Daily at 9:00 AM | | 0 9 * * 1-5 | Weekdays at 9:00 AM | | 0 0 1 * * | First day of month at midnight | | 30 14 * * 0 | Sunday at 2:30 PM | | 0 */6 * * * | Every 6 hours |

Job Status Values

| Status | Description | |--------|-------------| | pending | Scheduled, waiting for next_run_at | | paused | Paused, won't execute | | success | Last execution succeeded | | failed | Last execution failed | | quota_reached | Skipped due to plan quota |

Create Job Parameters

| Field | Type | Required | Description | |-------|------|----------|-------------| | name | string | Yes | Job name (1-50 chars, alphanumeric/-/_) | | url | string | Yes | Target URL (HTTP/HTTPS) | | method | string | Yes | HTTP method (GET, POST, PUT, DELETE) | | headers | object | Yes | Request headers (can be {}) | | body | string | Yes | Request body (can be "") | | cron_expression | string | Yes | 5-field cron expression |

Job Name Rules

  • Only letters, numbers, hyphens (-), underscores (_)
  • Length: 1-50 characters
  • Regex: ^[a-zA-Z0-9_-]+$

Valid: my-job, test_job_1, API-Health-Check Invalid: my job (space), test@job (@), api.health (.)

Response Fields

| Field | Description | |-------|-------------| | job_id | Unique job identifier | | name | Job name | | url | Target URL | | method | HTTP method | | status | Current job status | | cron_expression | Schedule expression | | next_run_at | Next scheduled execution (ISO timestamp) | | created_at | Creation timestamp |

Guidelines

  1. Ping first: Call /ping to warm up the API (Lambda cold start)
  2. All fields required: When creating/updating, provide all fields
  3. Valid cron only: Use standard 5-field cron format
  4. Job names: Use alphanumeric with hyphens/underscores only
  5. Check logs: Use the logs endpoint to debug failed jobs
  6. Dashboard: Use https://www.cronlytic.com/dashboard for visual management
  7. Plan limits: Free tier has job limits - upgrade if needed