The whole shift, start to finish
How it works
From the moment you switch it on to the reply on your PR: every state Night Porter can be in, and who decides what happens next. Amber boxes wait for you.
The same, in words
- 1
Check in
nightporter setupconnects your accounts (tokens fromgh,glab,teaor your keychain) and finds your clones undercode_dir. Subscribe the repos it should watch, thennightporter start, or let launchd or systemd run it. - 2
On watch
Every
poll_intervalit checks GitHub and Forgejo/Gitea notifications and your open GitLab MRs, and everysweep_intervalit looks over your open PRs for merge conflicts and red CI. No webhooks.nightporter pausestops new jobs (running ones finish) untilresume.nightporter stop, Ctrl-C or SIGTERM shut it down cleanly. - 3
At the door
Repos you didn’t subscribe, triggers you switched off, your own comments and denied authors are dropped. Trusted people go through. Anyone unknown waits in the inbox until you allow or ignore them. Maintainer requests (a label,
/nightporter fixand friends, ornightporter sweep) need maintainer mode. - 4
The queue
It waits for the PR to go quiet (the debounce) and for a schedule window. Everything new on a PR becomes one job, within the daily cap, the CI-attempt cap and the concurrency limit. Your own PRs go first, and sweep jobs never use the last quarter of the daily cap.
- 5
On the job
A git worktree of its own, so your checkout stays put. DDEV or Docker if the repo needs them, then your agent (Claude Code, OpenCode, Codex or Gemini CLI) runs sandboxed, plus any review steps from packs. Someone else’s code waits for your OK before it runs.
- 6
Bag check
Secrets, protected files, dependency changes, diff size and history rewrites. The blocking checks can’t be turned off, and a failed one holds the push until you look.
- 7
By level
observepings you.suggestcommits locally and hands you a reply to paste.draftwaits for you: a in the TUI,nightporter approveor a/nightporter approvecomment, or x to dismiss it with nothing posted.autopushes and replies on its own. - 8
Ring the bell
A desktop ping, Slack, Discord, ntfy, a webhook or your own command. Then it’s back on watch. It never merges, force-pushes, closes or approves.
- 9
The side door
Press h (or
nightporter handoff <id>) on a finished or waiting job and its worktree opens in herdr, Rex, tmux, Zellij or a terminal, with an agent already briefed: the one that ran the job, or Claude, OpenCode, Codex, Gemini, pi, Cursor, Copilot, Goose, Qwen, Droid or Kiro (handoff_agent).
Every setting named here is in the configuration reference.