All commands are accessed via jeeves-runner <command>. The CLI is built with createServiceCli(descriptor) from core, which provides standard commands, plus custom commands for job management.
startStart the runner daemon (foreground).
jeeves-runner start -c <path>
| Flag | Description |
|---|---|
-c, --config <path> |
Path to config file |
Starts the scheduler, API server, and begins executing jobs on their cron schedules.
statusProbe service health and version by querying GET /status.
jeeves-runner status [-p <port>]
| Flag | Default | Description |
|---|---|---|
-p, --port <port> |
1937 |
Service port |
configQuery or manage service configuration.
jeeves-runner config [jsonpath] [-p <port>]
Queries GET /config on the running instance. Pass a JSONPath expression to filter.
config validateValidate a config file against the Zod schema without starting the runner.
jeeves-runner config validate -c <path>
config applyApply a config patch to the running service.
jeeves-runner config apply [-p <port>] [-f <path>] [--replace]
| Flag | Description |
|---|---|
-p, --port <port> |
Service port (default: 1937) |
-f, --file <path> |
Config patch file (JSON); reads stdin if omitted |
--replace |
Replace entire config instead of merging |
initGenerate a default config file.
jeeves-runner init [-o <dir>]
| Flag | Default | Description |
|---|---|---|
-o, --output <dir> |
Platform config dir | Output directory for config.json |
serviceSystem service management subcommands.
service installInstall as a system service.
jeeves-runner service install [-c <path>] [-n <name>]
service uninstallUninstall the system service.
jeeves-runner service uninstall [-n <name>]
service startStart the system service.
jeeves-runner service start [-n <name>]
service stopStop the system service.
jeeves-runner service stop [-n <name>]
service restartRestart the system service.
jeeves-runner service restart [-n <name>]
service statusQuery system service state.
jeeves-runner service status [-n <name>]
add-jobRegister a new job in the database.
jeeves-runner add-job \
-c <config> \
--id <id> \
--name <name> \
--schedule <cron> \
--script <path> \
[--type <type>] \
[--description <desc>] \
[--timeout <ms>] \
[--overlap <policy>] \
[--on-failure <channel>] \
[--on-success <channel>]
| Flag | Required | Default | Description |
|---|---|---|---|
-i, --id <id> |
Yes | — | Unique job identifier |
-n, --name <name> |
Yes | — | Human-readable name |
-s, --schedule <schedule> |
Yes | — | Cron expression or RRStack JSON (validated on input) |
--script <path> |
Yes | — | Absolute path to executable script |
-t, --type <type> |
No | script |
Job type: script or session |
-d, --description <desc> |
No | — | Job description |
--timeout <ms> |
No | — | Timeout in milliseconds |
--overlap <policy> |
No | skip |
Overlap policy: skip or allow |
--on-failure <channel> |
No | — | Slack channel ID for failure alerts |
--on-success <channel> |
No | — | Slack channel ID for success alerts |
-c, --config <path> |
No | — | Config file (for database path) |
list-jobsList all registered jobs.
jeeves-runner list-jobs -c <path>
Output shows enabled/disabled status, job ID, schedule, and name.
triggerManually trigger a job via the API.
jeeves-runner trigger -i <id> -c <path>
| Flag | Required | Description |
|---|---|---|
-i, --id <id> |
Yes | Job ID to trigger |
-c, --config <path> |
No | Config file (for port) |
Calls POST /jobs/:id/run and prints the result.
sync-jobsSync job definitions into the database.
jeeves-runner sync-jobs [--scripts-dir <dir> | --jobs-dir <dir>] [--dry-run] [--reset-enabled] [--prune] [-c <path>]
| Flag | Description |
|---|---|
-c, --config <path> |
Config file path |
--scripts-dir <dir> |
jeeves-scripts repo dir (overrides config scriptsDir) |
--jobs-dir <dir> |
Legacy JSON jobs dir (deprecated; overrides config jobsDir) |
--dry-run |
Report what would change; write nothing |
--reset-enabled |
Overwrite enabled on existing jobs with the source value |
--prune |
Disable launcher jobs no longer listed (scripts source only; never deletes) |
Source. Flags first (not both), then config scriptsDir, then legacy jobsDir. With the jeeves-scripts source the runner runs node <scriptsDir>/bin/jeeves-scripts.js list --json with its own Node and environment (timeout 120 s; the launcher cold-starts in about 7 s) and registers each runnable that has a manifest: script is the launcher, args are ["run", <id>, ...manifest.args]. A manifest without timeout_seconds (or with null) stores no timeout: a script job then runs unbounded, matching jeeves-scripts, while a session job falls back to the session executor's 5-minute default. An operator-set timeout on an existing job is kept. A failing, unparseable, invalid or duplicate-id list aborts the sync with nothing written. The legacy source prints a deprecation warning.
What a sync changes.
enabled (default true). A manifest prerequisite is printed and never blocks the add.enabled on existing jobs is never changed unless --reset-enabled is given; disagreements are listed under Enabled drift.runner_update_job on launcher jobs don't last; change them in jeeves-scripts.json.--prune. Jobs from other sources are never touched. Paths are compared after normalisation (absolute, separators, case-insensitive on Windows).Exit codes. 0 when clean; 1 when any entry is skipped for an error or the sync is aborted.