Skip to content

Jobs script commands

The scheduled-jobs skill’s script is what Claude runs to manage your jobs. You rarely need it yourself, but you can run it in CloudCLI’s terminal, from a repo’s folder:

Terminal window
node ~/.claude/skills/scheduled-jobs/jobs.mjs <command> [options]
  • A job is named by its title, in any case, or the start of its ID. A part of the title works when only one job matches.
  • A job belongs to the repo the current folder is in (its git remote), or the one --repo names.
  • Every change to a job is recorded in its repo’s .claude/jobs.json, committed and pushed.
  • Times are shown in your time zone. Add --json to any command for Paperclip’s raw objects.

The outputs below are samples: IDs, times, numbers and addresses differ on your server.

Command Does
list Every job: status, repo, schedule, next and last run. Says where records and Paperclip disagree.
create Creates a job in the current repo’s project, and records it.
update Changes a job’s title, prompt, schedule, time zone, repo, agent or secret names, and records it.
pause, resume, archive Changes a job’s status, and records it.
run Runs a job now; with --wait, waits for it and prints its log.
runs A job’s recent runs.
log A run’s task, summary, tokens and log.
sync Records jobs changed in Paperclip’s dashboard.
restore Recreates the jobs a record lists that Paperclip doesn’t have.
connectors What exists for an outside service.
Terminal window
jobs.mjs list

One entry per job that isn’t archived: the start of its ID, title, status, repo, schedule, next and last run, then its prompt and its link.

e8b29a5f Weekday open issues digest [active] repo: acme/website 0 8 * * 1-5 America/Toronto next: 2026-11-04 08:00 America/Toronto last: 2026-11-03 22:45 America/Toronto completed
Run the open-issues-digest skill.
https://your-paperclip.up.railway.app/JOB/routines/e8b29a5f-ff89-4f8f-bef3-119ee91af308

After the list, it reports where a repo’s record and Paperclip disagree, and when a job’s agent lacks a secret:

Not recorded as they are now in acme/website's .claude/jobs.json: "Weekday open issues digest". Record them with: sync
acme/website's .claude/jobs.json lists jobs Paperclip doesn't have: "Daily uptime check" (0 7 * * * America/Toronto, active, needs STATUS_WEBHOOK_URL). Recreate them with: restore

With no jobs: No jobs yet. Create one: create "<title>" --prompt "Run the <skill> skill." --cron "0 9 * * *" --tz <zone>.

Terminal window
jobs.mjs create "<title>" --prompt "Run the <skill> skill." [--cron "<min hour dom mon dow>"] [--tz <zone>] [--paused] [--agent <name>] [--repo <name>] [--secrets "NAME,NAME"]
Option Meaning
--prompt Required. “Run the <skill> skill.”, plus at most one line of arguments.
--cron The schedule, 5-field cron. Without it, the job runs only by hand.
--tz An IANA zone. Default: your time zone.
--paused Create it paused.
--agent Runner (Claude, the default) or Codex, once connected.
--repo A connected repo, as name or owner/name. Default: the current folder’s repo.
--secrets The names of the secrets the skill needs, comma-separated. Never values.

Jobs are created so they never overlap and never pile up.

Created job e8b29a5f "Weekday open issues digest" for Runner in project "website" (repo acme/website): 0 8 * * 1-5 America/Toronto, active. Test it: run "Weekday open issues digest". https://your-paperclip.up.railway.app/JOB/routines/e8b29a5f-ff89-4f8f-bef3-119ee91af308
Recorded in acme/website's .claude/jobs.json: commit 1a2b3c4, pushed.
Terminal window
jobs.mjs update <job> [--title ...] [--prompt ...] [--cron ...] [--tz ...] [--repo ...] [--agent ...] [--secrets ...]
Option Changes
--title The job’s title.
--prompt The job’s prompt.
--cron, --tz Its schedule or time zone.
--repo Moves it to another connected repo, recorded in both.
--agent Hands it to Codex or back to Runner.
--secrets Replaces its secret names; --secrets "" clears them.
Updated "Weekday open issues digest": 0 9 * * 1-5 America/Toronto, active
Recorded in acme/website's .claude/jobs.json: commit 2b3c4d5, pushed.
Terminal window
jobs.mjs pause <job>
jobs.mjs resume <job>
jobs.mjs archive <job>
"Weekday open issues digest" is paused
Recorded in acme/website's .claude/jobs.json: commit 3c4d5e6, pushed.

resume sets the job active. archive takes it out of the record; git history keeps it.

Terminal window
jobs.mjs run <job> [--wait]
Started "Weekday open issues digest": run 7c1d9e20 issue_created. Read it with: log "Weekday open issues digest"

With --wait, it waits for the run to finish, up to 9 minutes (under the 10 minutes a Claude Code command may take), then prints what log prints. This is how Claude tests a job.

Terminal window
jobs.mjs runs <job> [--limit N]

Newest first, 10 by default: when, the run state, and what started it (schedule, manual, api or webhook).

1. 2026-11-03 22:45 America/Toronto completed manual
Terminal window
jobs.mjs log <job> [--run N] [--full]

The latest run, or the Nth latest with --run N. The last 30 lines of its log, or all of it with --full.

Job "Weekday open issues digest", run of 2026-11-03 22:45 America/Toronto: completed
Task JOB-1: done https://your-paperclip.up.railway.app/JOB/issues/JOB-1
Summary: Open issues, 2026-11-03: 3. #1 Contact form messages are lost ...
Agent run b4259770: succeeded, 2026-11-03 22:47 America/Toronto, tokens: input 10512, cachedInput 74688, output 946
Log of agent run b4259770 (https://your-paperclip.up.railway.app/JOB/agents/<agent id>/runs/<run id>), last 30 lines (--full for all):
[system init]
[tool Bash]
...
[result] The digest is done and JOB-1 is marked done.
Job: https://your-paperclip.up.railway.app/JOB/routines/e8b29a5f-ff89-4f8f-bef3-119ee91af308
  • Agent run lines list each Claude (or Codex) session of the run. A line marked (follow-up of ...) means an earlier one left the task open.
  • In the log, Claude’s messages show as text, its tool calls as [tool <name>], and the end as [result] .... For Codex, its commands show as [command] ....
  • When the job’s agent is paused, a last line says why and how to fix it.
Terminal window
jobs.mjs sync [--repo <name>]

Writes every job into its repo’s record as it is in Paperclip, drops archived ones, and keeps jobs Paperclip doesn’t have.

Recorded in acme/website's .claude/jobs.json: commit 4d5e6f7, pushed.

When nothing changed: Already recorded in acme/website's .claude/jobs.json.

Terminal window
jobs.mjs restore [--repo <name>] [--yes]

Without --yes, only shows what it would recreate:

acme/website: would recreate "Weekday open issues digest" (0 8 * * 1-5 America/Toronto, active). Run again with --yes to do it.

With --yes:

acme/website: recreated "Weekday open issues digest" (0 8 * * 1-5 America/Toronto, active).
Recorded in acme/website's .claude/jobs.json: commit 5e6f7a8, pushed.

When there’s nothing to do: acme/website: nothing to recreate (1 recorded).

Terminal window
jobs.mjs connectors [<service>]

Read-only. Lists Paperclip’s apps for the service and how each connects, the connections set up, the installed plugins with their tools, and links to Paperclip’s apps and plugins pages. Given a service’s name, it also searches npm for Paperclip plugins and the official MCP registry for MCP servers. Without a name, it lists Paperclip’s whole catalog. See Outside services.

Paperclip apps for "telegram": 1
Telegram (telegram): channel (people reach one agent through it, and it answers there). ...
Connections set up for "telegram": none
Plugins installed: none
Apps page: https://your-paperclip.up.railway.app/JOB/apps (your own MCP server: https://your-paperclip.up.railway.app/JOB/apps/byo). Plugins: https://your-paperclip.up.railway.app/JOB/company/settings/instance/plugins
Paperclip plugins on npm for "telegram": ...
MCP servers in the MCP registry for "telegram": ...
Check one before suggesting it: fit, our Paperclip version, upkeep, and what it can reach (connectors.md).

The state of a job’s run, as runs and log show it:

State Means
received Paperclip received the trigger and is starting the run.
issue_created Paperclip opened the run’s task for the agent, which works on it.
completed The run is over and its task closed.
skipped The job’s last run was still working, so this one didn’t start.
coalesced Joined a run already in progress. The template’s jobs skip instead.
failed The run failed; log shows what happened.

A task’s status is done or blocked once its run closes it. An agent run is succeeded, failed, timed_out or cancelled, among others.

Message Means
No job "<name>". Run: list No job matches that title or ID.
"<name>" matches 2 jobs: ... Use a longer part of the title.
Which repo is this job for? Several are connected: ... Run it from the repo’s folder, or pass --repo.
The current folder is in the repo ..., which isn't connected to Paperclip Connect the repo on step 3 of /setup, or pass --repo.
No "Codex" agent in Paperclip yet Connect Codex on /setup.
--secrets takes variable names (letters, digits, _), not values Pass names only.
This job has no schedule yet: give --cron. A time zone alone needs a schedule.

Paperclip (w/ CloudCLI) is a Railway template by AvgSoft. Paperclip, CloudCLI, Claude Code, Codex and Railway belong to their makers. Template codeDeploy on Railway