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:
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
--reponames. - 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
--jsonto any command for Paperclip’s raw objects.
The outputs below are samples: IDs, times, numbers and addresses differ on your server.
Commands
Section titled “Commands”| 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. |
jobs.mjs listOne 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-119ee91af308After 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: syncacme/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: restoreWith no jobs: No jobs yet. Create one: create "<title>" --prompt "Run the <skill> skill." --cron "0 9 * * *" --tz <zone>.
create
Section titled “create”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-119ee91af308Recorded in acme/website's .claude/jobs.json: commit 1a2b3c4, pushed.update
Section titled “update”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, activeRecorded in acme/website's .claude/jobs.json: commit 2b3c4d5, pushed.pause, resume, archive
Section titled “pause, resume, archive”jobs.mjs pause <job>jobs.mjs resume <job>jobs.mjs archive <job>"Weekday open issues digest" is pausedRecorded 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.
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.
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 manualjobs.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: completedTask JOB-1: done https://your-paperclip.up.railway.app/JOB/issues/JOB-1Summary: 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 946Log 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.
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.
restore
Section titled “restore”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).
connectors
Section titled “connectors”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": nonePlugins installed: noneApps 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/pluginsPaperclip 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).Run states
Section titled “Run states”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.
Errors
Section titled “Errors”| 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