The jobs record
Each connected repo has a file, .claude/jobs.json, that lists its jobs: title, prompt, schedule, time zone and status. The jobs script writes it at every change, then commits and pushes that file alone.
So git keeps every job, and the history of every change: who changed which schedule, and when.
What it looks like
Section titled “What it looks like”{ "about": "Scheduled jobs on this repo, kept by the scheduled-jobs skill (https://github.com/mikedepo/paperclip-cloudcli): every change to a job is a commit of this file. Each job runs its prompt in this repo with Claude Code (the Runner agent), or with the agent its \"agent\" names (Codex: OpenAI's Codex), on its 5-field cron schedule in its time zone; paused jobs don't run. To recreate them on a new server: node ~/.claude/skills/scheduled-jobs/jobs.mjs restore", "jobs": [ { "title": "Weekday open issues digest", "prompt": "Run the open-issues-digest skill.", "cron": "0 8 * * 1-5", "timezone": "America/Toronto", "status": "active", "paperclipId": "e8b29a5f-ff89-4f8f-bef3-119ee91af308" }, { "title": "Daily uptime check", "prompt": "Run the uptime-check skill.", "cron": "0 7 * * *", "timezone": "America/Toronto", "status": "paused", "secrets": ["STATUS_WEBHOOK_URL"], "paperclipId": "4c0d9b12-6a5e-4f3b-9d77-2b8e1f0a6c31" } ]}| Field | Meaning |
|---|---|
title |
The job’s name. |
prompt |
What the run is told: the skill to run. |
cron, timezone |
When it runs. A job with several schedules has a schedules list instead; a job with none has "cron": null. |
status |
active or paused. Archived jobs leave the file. |
agent |
Only when the job isn’t run by the Runner: "Codex". |
secrets |
The names of the keys the job’s skill needs, never their values. See Secrets. |
paperclipId |
The job’s ID in Paperclip, to follow a job renamed in the dashboard. |
Its history
Section titled “Its history”Each change is a commit of this file alone, with a message that says what changed:
Job "Weekday open issues digest" created: 0 8 * * 1-5 America/Toronto, activeJob "Weekday open issues digest" changed: schedule 0 9 * * 1-5 America/TorontoJob "Weekday open issues digest" pausedJob "Daily uptime check" created: 0 7 * * * America/Toronto, active, needs STATUS_WEBHOOK_URLJobs recorded as they are in PaperclipLook at the file’s history on GitHub, or ask Claude: “what changed in my jobs this month?”.
- Change jobs through Claude, not by editing the file. The record follows Paperclip, not the reverse: an edit to the file isn’t applied to Paperclip. Only jobs missing from Paperclip are, by restore.
- Only that file is committed. Other work in progress in the repo stays out of the commit.
- It goes to the default branch. If the clone is on another branch, Claude says so; merge it to keep the record there.
- Nothing is written at start, and nothing is restored on its own. A new server never empties your records, and never runs your jobs twice by surprise.
Jobs made before the record
Section titled “Jobs made before the record”Jobs created before the record existed (before the 2026-11-02 update) are added at their next change. Or ask Claude to “record my jobs” to write them all at once.
Paperclip (w/ CloudCLI) is a Railway template by AvgSoft. Paperclip, CloudCLI, Claude Code, Codex and Railway belong to their makers. Template codeDeploy on Railway