claude-overnight
research while you sleep

Queue questions all day. Wake up to answers.

claude-overnight puts your idle Claude Code quota to work. Queue research or coding jobs during the day. A scheduler runs them at night after your limits reset, and checks your usage before every job.

github stars
★ 13
pypi downloads
7k
last push
6 days ago
license
MIT

how it works

  1. 01

    Queue

    Type /queue in any Claude Code session, or overnight add from a shell.

  2. 02

    Sleep

    A launchd or systemd timer wakes every 30 minutes. It checks the night window and your 5-hour and weekly limits.

  3. 03

    Run

    Jobs run through headless claude -p. Research jobs get web search only. Coding jobs get a fresh git worktree on their own branch.

  4. 04

    Wake up

    One markdown report per job, a digest, and a summary page that opens in your browser.

see it

Queueing a question with /queue
Queue from inside Claude Code.
The morning summary page
What you wake up to.
A report rendered inline on the summary page
Every report, rendered inline.

what you get

◆Limit-aware, not only time-aware

Cron can run at 3 am. It cannot see your quota. This checks it before the batch and between every job, and stops at your threshold.

◆Coding jobs on a branch

Trust a repo once. Jobs work in a worktree, commit, and write SUMMARY.md. Your checkout is never touched.

◆Threads, not one-shots

Every job keeps its session. Resume it in the morning, or queue a follow-up for the next night.

◆Zero dependencies

Pure Python standard library. Runs on your Pro or Max plan with no API key.

◆Edge cases handled

A sleeping laptop runs the missed tick on wake. A lockfile stops two runners. A blown weekly cap skips the night.

get started

$ uv tool install claude-overnight
$ overnight install

Needs macOS or Linux, Python 3.11 or later, and Claude Code on a Pro or Max plan. The usage endpoint is undocumented, so the runner falls back safely if it changes.

PythonClaude Codelaunchdsystemdgit worktrees

~/.overnight/config.toml

[window]
start = "01:00"
end = "07:00"

[limits]
start_max_utilization = 20   # don't start if the 5h window is >20% used
stop_utilization = 60        # stop the batch at 60%
weekly_max_utilization = 80  # never run past 80% of the week