Getting started
Night Porter watches GitHub and GitLab for activity on your PRs and MRs: review comments, failing CI and merge conflicts. When something happens, it runs your coding agent (Claude Code or OpenCode) in a separate git worktree, checks the result, and then pushes and replies, or waits for you. How far it goes is up to you.
Early development
Night Porter is 0.x. Expect breaking changes.
1. Install the tools it needs
| tool | needed for |
|---|---|
git | everything |
gh | GitHub |
glab | GitLab (gitlab.com or self-hosted) |
claude or opencode | the agent |
gitleaks | optional, a stronger secrets check |
herdr | optional, for taking over jobs |
bubblewrap and socat | Linux only, for Claude Code’s sandbox |
Log in to gh and/or glab first (gh auth login, glab auth login), and run claude or opencode once so it’s logged in too.
2. Install Night Porter
Releases aren’t published yet. Build it from source with Rust:
git clone https://github.com/night-porter/nightporter
cd nightporter
cargo install --path .3. Run the setup wizard
nightporter setupIt asks for:
- Forges: GitHub, GitLab or both, and the host if it’s self-hosted.
- Default agent: Claude Code or OpenCode.
- A tool check: the same as
nightporter doctor. Nothing is installed for you; it prints the command to fix each problem. - Where your clones live (
~/codingby default). Night Porter works on the clones you already have. - Default autonomy level. Start with
draft, orsuggestif you want to watch it for a while first. See autonomy levels. - Active hours, for example
mon-fri 08:00-09:00,17:00-22:00. Leave it empty to run any time. - Repos to subscribe to, picked from the clones it found.
- The background service, so the daemon starts at login (launchd on macOS, systemd
--useron Linux).
Everything it writes ends up in ~/.config/nightporter/config.toml, which you can edit by hand. See the configuration reference.
4. Check everything is ready
nightporter doctorEvery line should be OK. Anything else comes with a fix: line. See Troubleshooting if one doesn’t go away.
5. Open the TUI
nightporterJobs show up in the Queue tab when your subscribed PRs get activity. Press ? for help. Daily use explains the rest.
Autonomy levels
| level | what happens |
|---|---|
observe | notify only |
suggest | the agent commits locally; you get copy-paste reply text and a push command, and Night Porter posts nothing |
draft | the agent commits; Night Porter pushes and replies after you approve |
auto | Night Porter pushes and replies on its own (pre-push checks still apply) |
At any level, Night Porter never merges, force-pushes, closes or approves.
Subscribing to more repos
nightporter repos # what it found, and what’s subscribed
nightporter subscribe acme/api # owner/name
nightporter subscribe git.example.com/team/app # self-hosted host
nightporter unsubscribe acme/apiOr press 4 in the TUI and toggle repos with the space bar.