Jobs

A job is one configured unit of work. Every job has the same identity, destinations, optional restic tag, run command, status view, snapshot tools, and audit result. Its type determines how source is prepared before restic takes a snapshot.

Commands

Command Purpose
job list Show every configured job and its type
job run [JOB_ID] --repository ID... [--dry-run] Prepare and snapshot one job
job status [JOB_ID] Show the latest tagged snapshot at every destination
job restore [JOB_ID] ... Restore one repository from a GitHub job snapshot
job data-dir [JOB_ID] Show a GitHub job’s managed workspace

Run uv run restic-backups for the job-first arrow-key TUI. Choose Jobs, then select a job to run it, inspect status or snapshots, invoke advanced restic commands, or open its type-specific tools. A sole available destination starts checked; when several are available, they all start unchecked and must be selected with Space.

Jobs with no available destination are grouped under a grey Disabled heading at the bottom of the job picker. List, status, snapshot, data-path, and other read-only displays return to the current TUI menu after showing results.

For scripts, provide every destination explicitly:

uv run restic-backups job run documents \
  --repository personal-b2 \
  --repository personal-local

Files

jobs:
  - job-id: documents
    type: files
    restic-repository-ids: [personal-b2, personal-local]
    source:
      paths:
        - ~/Documents
        - ~/Desktop

Paths are passed to restic backup; ~ is expanded. Restic creates a complete snapshot view while uploading only data not already present in that destination repository.

Explicit GitHub repositories

jobs:
  - job-id: source-code
    type: github-repository
    restic-repository-ids: [personal-local]
    source:
      repository-urls:
        - git@github.com:example/source-code.git
        - git@github.com:example/another-project.git
      components:
        git: true
        lfs: false
        wiki: false
        metadata: false
        release-assets: false
      migration-timeout-seconds: 3600

The job updates an independent managed mirror and selected GitHub data for each URL before snapshotting the complete job workspace. With only git enabled, each mirror contains all commits, branches, tags, trees, and file content reachable through remote Git refs. It does not contain Git LFS payloads, GitHub issues, pull-request discussions, submodule repositories, or history already deleted from every remote ref. See GitHub Backups for components and credentials.

GitHub organization or user

jobs:
  - job-id: example-organization
    type: github-owner
    restic-repository-ids: [personal-local]
    source:
      owner-url: https://github.com/example
      clone-protocol: ssh
      components:
        git: true
        lfs: false
        wiki: false
        metadata: false
        release-assets: false
      migration-timeout-seconds: 3600

This type enumerates every repository visible to the active GitHub credentials for the supplied organization or user, then delegates to the same multi-repository workflow. A single snapshot therefore represents the complete discovered set at run time. Archived repositories and forks are included. Private repositories are included when the active gh credentials can see them and the configured Git credentials can clone them. Local runs may use credentials from gh auth login; unattended runs may configure authentication.api.token from an environment variable or file.

A dry run performs read-only enumeration and reports every planned repository component. It never creates workspaces, invokes Git, or contacts Restic.

Voice Memos

jobs:
  - job-id: memos
    type: voice-memos
    restic-repository-ids: [personal-b2]
    source:
      authentication:
        hugging-face:
          token: CHANGE_ME

Encrypt the inline token with SOPS. It may instead contain one env or file key; omit authentication when diarization is unused or HF_TOKEN is already in the process environment. The token is resolved only for diarization. Optional recordings-dir and summaries-dir fields override the standard macOS recordings location and managed summaries directory. Transcription and diarization remain type-specific tools on this job; creating its backup snapshot still uses job run.

Restic tags and snapshots

Every job applies its tag, which defaults to job-id. The tag groups that job’s snapshots when several jobs share a restic repository. Restic assigns a new immutable snapshot ID to every successful run; snapshot IDs are not configuration values.

job status includes all job types. Repository status is read once and matched by tag, so a GitHub job cannot disappear merely because it has a different source preparation workflow.