Skip to main content
skill CX Codex

crontap-replace-github-actions-cron — Claude Code skill: setup guide

Replaces GitHub Actions cron triggers with Crontap HTTP dispatches with IANA timezone support. Eliminates schedule drift while keeping workflows and logs on GitHub.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add Crontap/skills --skill crontap-replace-github-actions-cron -a claude-code
Open on GitHub

What crontap-replace-github-actions-cron does

The skill migrates GitHub Actions pipelines from the built-in schedule block to external repository_dispatch events. Runners, workflow definitions, and run logs stay entirely on GitHub. It updates the workflow YAML to handle scheduled-run payloads and removes the old cron trigger so jobs never run twice.

It relies on the create_schedule, pause_schedule, and resume_schedule tools. Connection works through the MCP endpoint at https://mcp.crontap.com/mcp on any account tier. Direct calls to the REST API require an Ultra subscription. You also need a fine-grained GitHub token scoped to repo dispatch permissions.

What it helps with

  • eliminate schedule drift in GitHub Actions cron triggers
  • run scheduled workflows in specific IANA timezones
  • switch repository triggers to authenticated repository_dispatch
  • pause automated workflow runs during maintenance windows

Example prompts for the agent

  • Replace the schedule trigger in .github/workflows/sync.yml with Crontap dispatch
  • Create a Crontap schedule for 09:00 Europe/London on weekdays via MCP
  • Pause the Crontap schedule during deployment rollback

How to install crontap-replace-github-actions-cron

1Skills CLI (Vercel)

npx skills add Crontap/skills --skill crontap-replace-github-actions-cron -a claude-code

2Manually: put the files in place

~/.claude/skills/crontap-replace-github-actions-cron/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/crontap-replace-github-actions-cron/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about crontap-replace-github-actions-cron

How to install crontap-replace-github-actions-cron in Claude Code?

Run npx skills add Crontap/skills --skill crontap-replace-github-actions-cron -a claude-code. The file will be stored at ~/.claude/skills/crontap-replace-github-actions-cron/SKILL.md.

What does crontap-replace-github-actions-cron do?

It configures Crontap to trigger GitHub Actions workflows via HTTP repository_dispatch requests. GitHub continues executing runners and storing logs, while Crontap manages the clock.

What are the prerequisites for this skill?

You need a fine-grained GitHub token with dispatch permissions and Crontap access. MCP integration at https://mcp.crontap.com/mcp works across all tiers, while direct REST API calls require the Ultra plan.

Source text

SKILL.md · MIT
---
name: crontap-replace-github-actions-cron
description: >
  Replace a GitHub Actions schedule trigger with a Crontap HTTP dispatch while
  keeping the workflow, runner, and logs on GitHub. Use when a user needs a
  timezone-aware external clock or wants to avoid scheduled-workflow drift.
license: MIT
metadata:
  version: "1.0.0"
  group: patterns-migrations
  order: 9
  title: Replace GitHub Actions cron
  summary: Replace drifting repository schedules with a protected dispatch endpoint and evidence for every triggered run.
  bestFor: Repository dispatch, drift, and timezone-safe triggers
  guide: https://crontap.com/blog/github-actions-cron-drift-problem
  guideTitle: GitHub Actions cron drift
  tools: create_schedule,pause_schedule,resume_schedule
---

# Replace GitHub Actions cron

Crontap sends a repository dispatch request. GitHub still runs the workflow.

## Prerequisites

Before using the required tools, check whether they are available. If any are
missing, stop and offer the user exactly two choices:

1. Connect Crontap MCP at `https://mcp.crontap.com/mcp`. MCP access works on
   every Crontap tier.
2. Configure `$CRONTAP_CLIENT_ID` and `$CRONTAP_API_KEY` for the raw API. Raw
   API access requires Ultra.

Do not silently choose a path or continue until the user selects one.

- Make the workflow safe to dispatch more than once.
- Create a fine-grained GitHub token restricted to the target repository with
  the permission required by the repository dispatch endpoint.
- Store the token in a secure store and plan its expiration and rotation.
- Confirm the desired IANA timezone.

## Change the workflow

Replace the scheduled trigger with manual and repository dispatch triggers:

```yaml
on:
  workflow_dispatch:
  repository_dispatch:
    types: [scheduled-run]
```

Keep `workflow_dispatch` for manual operation. Crontap calls
`repository_dispatch`. Do not leave `on.schedule` enabled after cutover.

## Workflow

1. Commit and deploy the dispatch-capable workflow.
2. Test a repository dispatch with a non-production-safe workflow path.
3. Remove the old `schedule` trigger at the agreed cutover time.
4. Create the Crontap schedule.
5. Verify GitHub returns 204 and one workflow run appears.
6. Pause the Crontap schedule during maintenance or rollback.

## MCP examples

Create the external dispatch:

```json
{
  "tool": "create_schedule",
  "arguments": {
    "url": "https://api.github.com/repos/example-org/example-repo/dispatches",
    "text": "every weekday at 09:00",
    "timezone": "Europe/London",
    "method": "POST",
    "headers": {
      "Authorization": "Bearer <fine-grained-token-from-secure-store>",
      "Accept": "application/vnd.github+json",
      "X-GitHub-Api-Version": "2022-11-28",
      "Content-Type": "application/json"
    },
    "body": {
      "event_type": "scheduled-run"
    },
    "label": "GitHub scheduled run"
  }
}
```

Pause:

```json
{
  "tool": "pause_schedule",
  "arguments": {
    "scheduleId": "<schedule-id>"
  }
}
```

Resume:

```json
{
  "tool": "resume_schedule",
  "arguments": {
    "scheduleId": "<schedule-id>"
  }
}
```

## REST fallback

REST creation requires Ultra API access:

```bash
curl --fail-with-body https://api.crontap.com/v1/schedule \
  -X POST \
  -H "ClientId: $CRONTAP_CLIENT_ID" \
  -H "ApiKey: $CRONTAP_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
    "url": "https://api.github.com/repos/example-org/example-repo/dispatches",
    "interval": "0 9 * * 1-5",
    "timezone": "Europe/London",
    "verb": "POST",
    "headers": {
      "Authorization": "Bearer <fine-grained-token-from-secure-store>",
      "Accept": "application/vnd.github+json",
      "X-GitHub-Api-Version": "2022-11-28",
      "Content-Type": "application/json"
    },
    "data": {"event_type": "scheduled-run"},
    "label": "GitHub scheduled run"
  }'
```

## Verification

- Confirm the deployed workflow no longer contains `on.schedule`.
- Confirm `event_type` matches the workflow's dispatch type exactly.
- Verify one Crontap run corresponds to one GitHub workflow run.
- Confirm a non-expired token is scoped only to the required repository and
  operation.

## Safety and plan limits

- Never use a broad classic token when a restricted fine-grained token works.
- Avoid top-of-hour assumptions when comparing old GitHub timing evidence.
- Make downstream workflow writes idempotent.
- If the Crontap create call hits a cap or cadence floor, present the returned
  four-option ladder and smallest viable option.

## Troubleshooting

- GitHub 401 means the token is invalid or expired.
- GitHub 403 usually means repository access or permissions are insufficient.
- GitHub 404 can intentionally hide a repository the token cannot access.
- GitHub 422 often means the event type or request body is invalid.
- Duplicate runs usually mean both the old schedule trigger and Crontap remain
  active.

## References

- [Crontap Agent Skills catalogue](https://crontap.com/skills)
- [GitHub Actions cron drift](https://crontap.com/blog/github-actions-cron-drift-problem)
- [Crontap vs GitHub Actions cron](https://crontap.com/alternatives/github-actions-cron)
- [GitHub repository dispatch API](https://docs.github.com/en/rest/repos/repos#create-a-repository-dispatch-event)
- [Cron troubleshooting](https://crontap.com/guides/cron-troubleshooting)

© Crontap · MIT · Crontap/skills

Similar skills

All skills for DevOps and infrastructure →

From the same set12

crontap-quickstart Selects the right Crontap resource, inspects plan limits, and verifies IANA timezones before provisioning jobs. CX Codex +1 883installs crontap-uptime-monitor Configures Crontap HTTP endpoint monitoring from Claude Code. It sets up health checks, defines failure thresholds, pauses monitors during releases, and inspects probe logs. CX Codex +1 882installs crontap-retries-and-idempotency Sets up Crontap retry policy and helps make a scheduled endpoint idempotent, so a repeated request does not create a second side effect. CX Codex +1 881installs crontap-ai-built-apps Configures recurring HTTP jobs and heartbeat monitoring for apps created in Lovable, Bolt, Replit, or v0. It offloads scheduling to Crontap after deployment. CX Codex +1 881installs crontap-recurring-agent-endpoint Puts an app-owned HTTP endpoint on a Crontap schedule and tracks completion with a heartbeat. Useful when your agent runtime already exists but has no clock of its own. CX Codex +1 880installs crontap-natural-language-schedules Turns everyday timing requests into reviewed cron, timezone details, and upcoming runs. It previews the result without creating a schedule. CX Codex +1 880installs crontap-debug-failed-runs Walks through failed Crontap schedule runs using saved config and execution history. Useful when a scheduled HTTP job is late, failing or returning 401. CX Codex +1 879installs crontap-schedule-http-job Configures and manages recurring HTTP requests, webhooks, and cloud functions in Crontap using cron syntax or plain English expressions. CX Codex +1 879installs

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor