Job reference

Job reference

Every Cronable job is a YAML file in your jobs directory (~/cronable-jobs by default) — the source of truth. Jobs run on a schedule or chain off another job’s outcome, and you edit them either in the visual DAG editor or by hand.

Job types

Cronable ships 28 built-in types, grouped as:

  • Actionsclaude, claude-api, openai, codex, terminal, ssh, http, email, code, git, database, slack, telegram, sms, file, sheets, calendar, hostaway
  • Operatorswait, switch, filter
  • Triggerswebhook, folder-watch, inbox, calendar-watch, telegram-watch, sheet-watch, hostaway-watch (see the Triggers guide)

Each runs on your own machine, using your own AI accounts and MCP connections.

Running a command on a remote host — ssh

The ssh action runs a command on a remote machine over SSH — a first-class version of a terminal job that runs elsewhere (deploy, restart a service, tail a remote log):

id: restart-web
name: Restart web
type: ssh
host: web-01.example.com
user: deploy
command: systemctl restart myapp
schedule:
  - { kind: daily, time: '04:00' }
FieldRequiredNotes
host, useryesRemote host + login user (both support {{ expressions }}).
commandyesRuns on the remote host’s shell; supports {{ expressions }}.
portnoDefaults to 22.
identityFilenoPath to a private key; omit to use your SSH agent / default keys.
hostKeyPolicynoaccept-new (default) · strict (known hosts only) · off (insecure).

Non-interactive by design. ssh runs with BatchMode — it never prompts, so authentication must be an SSH agent or a key file (a host that needs a password fails fast rather than hanging the run). No secret lives in the YAML: identityFile is a path, so your key never leaves the box. The command runs on the remote shell with the same operator trust as a terminal job.

Anatomy of a job

A job has an id, a type, type-specific fields, and its schedule points — a daily/hourly/weekly/monthly time point, or afterParent to chain off another job. A job can have several, one, or none: a trigger, an error handler, or a manual-only job runs without any schedule. Optional: env, secrets references ({{ $secrets.X }}), retry, and an onFailure handler.

More fields and worked examples are documented per job type — this reference expands as we go.

Expressions & data flow

Fields can use {{ }} expressions with $vars, $secrets, $credentials (reusable encrypted credentials, by name), $parent (the parent run’s output), $now, and $env — so a job can transform and pass data to the next. See the Expressions & data flow guide.