Shipeasy

Scheduled triggers

Provision a scheduled agent that runs ops:work --pr on a cadence, burning down the feedback queue one PR at a time — on Claude Code, Cursor, Copilot and more.

Production readyOn this page · 6 min readWorks with · Claude Code · Cursor · Copilot · Jules · Codex · Gemini

A trigger is an unattended, scheduled agent run. On a cron cadence it runs /shipeasy:ops:work --pr against your project — burning down the feedback queue (bugs, feature requests, auto-filed error/alert tickets) one item at a time, committing each fix on its own branch, and opening one PR per item for review. No human in the loop.

Provision it from the CLI:

shipeasy setup triggers
shipeasy setup triggers --platform claude

--platform is one of claude, codex, cursor, copilot, gemini, jules. The command explains the trade, has you pick a platform, then opens the guided setup on the dashboard's Triggers tab preselected to it — the same surface that manages the trigger afterwards. shipeasy setup offers this as an inline step.

Every provider schedules the same work — only what schedules it, and how the run is launched and authenticated, differs. The low-level plumbing is still there if you want it: shipeasy ops trigger create <provider> --help and shipeasy ops trigger prep.

Three scheduler tiers

TierPlatformsMechanism
A — Shipeasy fires itclaude, cursor, copilot, julesShipeasy's own cron starts the run over HTTPS — your machine can be off
B — scheduled on the platformcodexthe vendor's own scheduler or an Actions workflow starts it
C — headless + external crongemini (and codex)non-interactive run mode driven by system cron or a GitHub Actions schedule: job
--platformSchedulerLaunch / auth
claude/schedule cloud routineruns ops:work --pr; registers a Shipeasy connector
cursorShipeasy cron → POST https://api.cursor.com/v1/agentsautoCreatePR; CURSOR_API_KEY
copilotShipeasy cron → GitHub coding-agent task via .github/agents/shipeasy.agent.mdConnect GitHub (user-to-server token); PAT fallback
julesShipeasy cron → Jules sessionJules API key
codexCodex Automations (local cron) or an Actions schedule: jobcodex exec --sandbox danger-full-access
geminiActions schedule: (run-gemini-cli)gemini -p --approval-mode=yolo

The run is identical everywhere

Whatever the provider, the scheduled run authenticates with a restricted ops key, refreshes the plugin + CLI, and follows the installed ops:work --pr workflow. Mint the key with:

npx -y @shipeasy/cli@latest keys create --type ops

The ops key can read the queue, flip item status, link the PR it opens, and create resources — but never edits or deletes existing ones, and auto-extends its 7-day expiry on each run. A leaked trigger prompt can't compromise the project. Never embed your admin login token.

Tier C — the GitHub Actions shape

For headless providers with no native scheduler, a scheduled Actions workflow is the always-on driver (Gemini shown via the official run-gemini-cli Action — swap the run step for codex exec for Codex):

.github/workflows/shipeasy-feedback-trigger.yml
on:
  schedule:
    - cron: "0 9 * * 1-5" # weekdays 09:00 UTC
  workflow_dispatch:
permissions:
  contents: write
  pull-requests: write
jobs:
  trigger:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: google-github-actions/run-gemini-cli@v0
        env:
          GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
          SHIPEASY_CLI_TOKEN: ${{ secrets.SHIPEASY_OPS_KEY }}
          SHIPEASY_PROJECT_ID: ${{ secrets.SHIPEASY_PROJECT_ID }}
        with:
          prompt: "<trigger prompt>"
          settings: '{ "approval-mode": "yolo" }'

Unattended runs use an auto-approve flag (--approval-mode=yolo, --sandbox danger-full-access, --dangerously-skip-permissions) that removes the human gate — run only in an isolated env. They also spend tokens/credits on every fire, so start with a weekly or daily cron and watch the first runs. PRs land for review; nothing auto-merges.

Connector registration — Shipeasy-fired vs. platform-scheduled

A Shipeasy connector (Settings → Triggers, "Trigger now" + event auto-fire) means Shipeasy's own cron fires the run. That backend is a Cloudflare Worker, so it can only fire a provider that exposes (1) a clean HTTP "start a run" endpoint — a plain fetch(), no CLI binary, no local scheduler — and (2) a storable static token.

Four providers clear that bar and are registered as trigger connectors:

  • claudePOST …/routines/<id>/fire with a per-routine bearer token.
  • cursorPOST https://api.cursor.com/v1/agents with CURSOR_API_KEY + autoCreatePR.
  • copilot — a GitHub coding-agent task, via the GitHub connection you already made.
  • jules — a Jules session started from its API key.

Each gets a guided flow and a Trigger now button on the dashboard, plus auto-fire on new queue items. codex and gemini are platform-scheduled: they run on their own surface (Codex Automations, or a GitHub Actions schedule: job), so pause, run and inspect them there.

Rule of thumb: if a provider can't be started from nothing by one authenticated HTTP call, Shipeasy can't fire it — it schedules on the provider's own platform instead.

Was this page helpful?
Updated August 9, 2026✎ Edit this page

On this page