{"id":44046596,"url":"https://github.com/marcus/nightshift","last_synced_at":"2026-03-01T00:07:23.763Z","repository":{"id":336583401,"uuid":"1150255568","full_name":"marcus/nightshift","owner":"marcus","description":"Nightshift uses your leftover Claude / Codex budget to surprise you with useful PRs. Love them or leave them.","archived":false,"fork":false,"pushed_at":"2026-02-05T16:32:26.000Z","size":1542,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-05T17:23:53.677Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-05T04:08:39.000Z","updated_at":"2026-02-05T16:45:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/marcus/nightshift","commit_stats":null,"previous_names":["marcus/nightshift"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/marcus/nightshift","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus%2Fnightshift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus%2Fnightshift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus%2Fnightshift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus%2Fnightshift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcus","download_url":"https://codeload.github.com/marcus/nightshift/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcus%2Fnightshift/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29210087,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-07T21:35:21.898Z","status":"ssl_error","status_checked_at":"2026-02-07T21:35:20.106Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-07T22:11:10.906Z","updated_at":"2026-02-07T22:11:11.405Z","avatar_url":"https://github.com/marcus.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Nightshift\n\n\u003e It finds what you forgot to look for.\n\n**[nightshift.haplab.com](https://nightshift.haplab.com)** · [Docs](https://nightshift.haplab.com/docs/intro) · [Quick Start](https://nightshift.haplab.com/docs/quick-start) · [CLI Reference](https://nightshift.haplab.com/docs/cli-reference)\n\n![Nightshift logo](logo.png)\n\nYour tokens get reset every week, you might as well use them. Nightshift runs overnight to find dead code, doc drift, test gaps, security issues, and 20+ other things silently accumulating while you ship features. Like a Roomba for your codebase — runs overnight, worst case you close the PR.\n\nEverything lands as a branch or PR. It never writes directly to your primary branch. Don't like something? Close it. That's the whole rollback plan.\n\n## Features\n\n- **Budget-aware**: Uses remaining daily allotment, never exceeds configurable max (default 75%)\n- **Multi-project**: Point it at your repos, it already knows what to look for\n- **Zero risk**: Everything is a PR — merge what surprises you, close the rest\n- **Great DX**: Thoughtful CLI defaults with clear output and reports\n\n## Installation\n\nFull guide: [Installation docs](https://nightshift.haplab.com/docs/installation)\n\n```bash\nbrew install marcus/tap/nightshift\n```\n\nBinary downloads are available on the GitHub releases page.\n\nManual install:\n\n```bash\ngo install github.com/marcus/nightshift/cmd/nightshift@latest\n```\n\n## Getting Started\n\nFull guide: [Quick Start docs](https://nightshift.haplab.com/docs/quick-start)\n\nAfter installing, run the guided setup:\n\n```bash\nnightshift setup\n```\n\nThis walks you through provider configuration, project selection, budget calibration, and daemon setup. Once complete you can preview what nightshift will do:\n\n```bash\nnightshift preview\nnightshift budget\n```\n\nOr kick off a run immediately:\n\n```bash\nnightshift run\n```\n\n## Common CLI Usage\n\nFull reference: [CLI Reference docs](https://nightshift.haplab.com/docs/cli-reference)\n\n```bash\n# Preview next scheduled runs with prompt previews\nnightshift preview -n 3\nnightshift preview --long\nnightshift preview --explain\nnightshift preview --plain\nnightshift preview --json\nnightshift preview --write ./nightshift-prompts\n\n# Guided global setup\nnightshift setup\n\n# Check environment and config health\nnightshift doctor\n\n# Budget status and calibration\nnightshift budget --provider claude\nnightshift budget snapshot --local-only\nnightshift budget history -n 10\nnightshift budget calibrate\n\n# Browse and inspect available tasks\nnightshift task list\nnightshift task list --category pr\nnightshift task list --cost low --json\n\n# Show task details and planning prompt\nnightshift task show lint-fix\nnightshift task show skill-groom\nnightshift task show lint-fix --prompt-only\n\n# Run a task immediately\nnightshift task run lint-fix --provider claude\nnightshift task run skill-groom --provider codex --dry-run\nnightshift task run lint-fix --provider codex --dry-run\n```\n\nIf `gum` is available, preview output is shown through the gum pager. Use `--plain` to disable.\n\nUseful flags:\n- `nightshift run --dry-run` to simulate tasks without changes\n- `nightshift run --project \u003cpath\u003e` to target a single repo\n- `nightshift run --task \u003ctask-type\u003e` to run a specific task\n- `nightshift status --today` to see today’s activity summary\n- `nightshift daemon start --foreground` for debug\n- `--category` — filter tasks by category (pr, analysis, options, safe, map, emergency)\n- `--cost` — filter by cost tier (low, medium, high, veryhigh)\n- `--prompt-only` — output just the raw prompt text for piping\n- `--provider` — required for `task run`, choose claude or codex\n- `--dry-run` — preview the prompt without executing\n- `--timeout` — execution timeout (default 30m)\n\n## Authentication (Subscriptions)\n\nNightshift relies on the local Claude Code and Codex CLIs. If you have subscriptions, you can sign in via the CLIs without API keys.\n\n```bash\n# Claude Code\nclaude\n/login\n\n# Codex\ncodex --login\n```\n\nClaude Code login supports Claude.ai subscriptions or Anthropic Console credentials. Codex CLI supports signing in with ChatGPT or an API key.\n\nIf you prefer API-based usage, you can authenticate those CLIs with API keys instead.\n\n## Configuration\n\nFull guide: [Configuration docs](https://nightshift.haplab.com/docs/configuration) · [Budget docs](https://nightshift.haplab.com/docs/budget) · [Scheduling docs](https://nightshift.haplab.com/docs/scheduling) · [Tasks docs](https://nightshift.haplab.com/docs/tasks)\n\nNightshift uses YAML config files to define:\n\n- Token budget limits\n- Target repositories\n- Task priorities\n- Schedule preferences\n\nRun `nightshift setup` to create/update the global config at `~/.config/nightshift/config.yaml`.\n\nSee the [full configuration docs](https://nightshift.haplab.com/docs/configuration) or [SPEC.md](docs/SPEC.md) for detailed options.\n\nMinimal example:\n\n```yaml\nschedule:\n  cron: \"0 2 * * *\"\n\nbudget:\n  mode: daily\n  max_percent: 75\n  reserve_percent: 5\n  billing_mode: subscription\n  calibrate_enabled: true\n  snapshot_interval: 30m\n\nproviders:\n  preference:\n    - claude\n    - codex\n  claude:\n    enabled: true\n    data_path: \"~/.claude\"\n    dangerously_skip_permissions: true\n  codex:\n    enabled: true\n    data_path: \"~/.codex\"\n    dangerously_bypass_approvals_and_sandbox: true\n\nprojects:\n  - path: ~/code/sidecar\n  - path: ~/code/td\n```\n\nTask selection:\n\n```yaml\ntasks:\n  enabled:\n    - lint-fix\n    - docs-backfill\n    - bug-finder\n  priorities:\n    lint-fix: 1\n    skill-groom: 2\n    bug-finder: 2\n  intervals:\n    lint-fix: \"24h\"\n    skill-groom: \"168h\"\n    docs-backfill: \"168h\"\n```\n\nEach task has a default cooldown interval to prevent the same task from running too frequently on a project (e.g., 24h for lint-fix, 7d for docs-backfill). Override per-task with `tasks.intervals`.\n\n`skill-groom` is enabled by default. Add it to `tasks.disabled` if you want to opt out. It updates project-local skills under `.claude/skills` and `.codex/skills` using `README.md` as project context and starts Agent Skills docs lookup from `https://agentskills.io/llms.txt`.\n\n## License\n\nMIT - see [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus%2Fnightshift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcus%2Fnightshift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcus%2Fnightshift/lists"}