Projects

A Project is a folder of related schedules that share defaults. Set the working directory, runner tags, Claude args, notify policy, effort level once on the project; each schedule under it inherits those values unless it overrides them.

Projects are optional. If you only have one or two schedules and they don't share anything, skip the project layer and create schedules directly.

When you want one

  • Several schedules touch the same codebase — share workingDir, runner tags, project-specific claude args.
  • You want a single switch to mute all alerts (set notify policy on the project; every child inherits).
  • You want to scope "Cancel all queued" in the Jobs page to one stream of work.

Inheritance / override

For each inheritable field — workingDir, claudeArgs, timeoutSec, runnerTags, notifyOn, telegramChatId, dangerouslySkipPermissions, effort — the resolved value is:

schedule override → project default → org / hard default

Values are snapshotted into the Job at queue time, so editing a project does not retroactively change past jobs. Jobs "in the air" keep the values they were enqueued with.

Fields

  • Name — display name. Shown in tables, sidebars, notifications.
  • Slug — URL-safe identifier. Locked after creation.
  • Color — the dot you see next to the name across the dashboard. Pure cosmetic; helpful to scan a busy Jobs page.
  • Working dir — absolute path on the runner. Use a datalist-suggested path or type your own. Settings → Project dir suggestions controls what shows up.
  • Default runner tags — comma-separated. Sends every child schedule's jobs to runners that include all of these.
  • Default claude args — appended to claude -p for every child schedule.
  • Skip permissions — whether to pass --dangerously-skip-permissions. Default on (required for unattended runs).
  • Effort / timeout / notify — same semantics as on a schedule.
  • Archived — hidden from default lists. Existing schedules keep firing; you just don't see the project in dropdowns.

Deletion

Deleting a project cascades to its schedules and finished jobs. Active (queued/claimed/running) jobs become orphaned and the cron tick reaps them on the next pass.