Nightshift
Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.
Best use case
Nightshift is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.
Teams using Nightshift should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/nightshift/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Nightshift Compares
| Feature / Agent | Nightshift | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Nightshift
Manage and interact with Nightshift, an AI-powered development automation tool that runs coding tasks during off-hours.
## Triggers
Use when the user wants to:
1. Check nightshift status, logs, or reports
2. Run nightshift tasks manually
3. Preview upcoming scheduled runs
4. Check or manage the nightshift budget
5. Start/stop the nightshift daemon
6. Diagnose nightshift issues
7. Modify nightshift configuration (nightshift.yaml)
8. View what nightshift did overnight
Triggers on: "nightshift", "night shift", "overnight tasks", "run nightshift", "nightshift status", "nightshift report", "what did nightshift do".
## What Nightshift Is
Nightshift runs AI coding agents during off-hours to handle development tasks like content writing, code review, refactoring, testing, and documentation. It's configured per-project via `nightshift.yaml` and manages scheduling, budgets, and task execution.
Installed at: `/opt/homebrew/bin/nightshift`
## CLI Reference
### Core Commands
```bash
# Run tasks immediately (interactive confirmation by default)
nightshift run
nightshift run --yes # Skip confirmation
nightshift run --dry-run # Preview only
nightshift run -p ./my-project -t my-task # Specific project + task
nightshift run --random-task # Pick random eligible task
nightshift run --max-tasks 3 # Up to 3 tasks per project
nightshift run --max-projects 3 # Process up to 3 projects
nightshift run --ignore-budget # Bypass budget checks
# Task catalog (built-in tasks only)
nightshift task list # List all built-in tasks
nightshift task show <task-name> # Show built-in task details
nightshift task run <task-name> # Run a built-in task immediately
```
### Important: `nightshift run` vs `nightshift task run`
These are different commands with different task registries:
- **`nightshift run`** loads project config (`nightshift.yaml`), registers custom tasks, and runs them through the full scheduler. Use `-t <task-id>` to target a specific custom task.
- **`nightshift task run`** only knows about the ~59 built-in catalog tasks. It does NOT load custom tasks from project config. Custom task IDs will fail with `Error: unknown task`.
To test or manually execute a custom task, always use `nightshift run`:
```bash
nightshift run --dry-run -p . -t content-rewrite # dry-run a custom task
nightshift run -y -p . -t content-rewrite # execute a custom task
```
### Monitoring & Reporting
```bash
# Run history
nightshift status # Last 5 runs
nightshift status --last 10 # Last N runs
nightshift status --today # Today's summary
# Reports (what nightshift did)
nightshift report # Last night overview
nightshift report --period last-run # Most recent run
nightshift report --period last-24h # Last 24 hours
nightshift report --period last-7d # Last 7 days
nightshift report --period today # Today
nightshift report --period yesterday # Yesterday
nightshift report --report tasks # Task-focused report
nightshift report --report budget # Budget report
nightshift report --format markdown # Markdown output
nightshift report --format json # JSON output
nightshift report --paths # Include file paths
# Preview upcoming
nightshift preview # Next 3 scheduled runs
nightshift preview --runs 5 # Next N runs
nightshift preview --explain # Show budget/filter explanations
nightshift preview --long # Show full prompts
nightshift preview -t content-rewrite # Preview specific task type
# Logs
nightshift logs # Last 50 log lines
nightshift logs -f # Follow/stream logs
nightshift logs --level error # Filter by level
nightshift logs --match "content" # Filter by message
nightshift logs --since 2024-01-01 # Since date
nightshift logs --summary # Summary only
```
### Daemon Management
```bash
nightshift daemon start # Start background daemon
nightshift daemon stop # Stop daemon
nightshift daemon status # Check if running
```
### Budget
```bash
nightshift budget # Current budget status
nightshift budget -p claude # Specific provider
nightshift budget history # Recent snapshots
nightshift budget snapshot # Capture usage snapshot
nightshift budget calibrate # Show calibration status
```
### Configuration & Diagnostics
```bash
nightshift config # Show merged config
nightshift config get <key> # Get specific value
nightshift config set <key> <value> # Set value
nightshift config validate # Validate config file
nightshift doctor # Run diagnostics
nightshift --version # Show version
```
## Configuration (nightshift.yaml)
The config file lives at the root of each project. Structure:
```yaml
tasks:
disabled:
- task-type-to-disable # Skip built-in tasks not relevant to project
enabled:
- content-rewrite # Enable built-in task types
- content-freshness
custom:
- type: content-rewrite # Arbitrary ID; does NOT need to match a built-in
name: "Human-readable name"
category: pr # pr | options | analysis | safe | map | emergency
cost_tier: low # low | med | high | vhigh
risk_level: low # low | medium | high
interval: "24h" # How often to run (e.g., 24h, 72h, 168h)
description: |
Multi-line prompt that tells the AI agent what to do.
This is the full instruction set for the task.
```
### Task Categories
- **pr**: Creates a pull request with changes
- **options**: Generates suggestions/ideas (e.g., as GitHub issues)
- **analysis**: Produces analysis reports
- **safe**: Runs safe operations (profiling, testing)
- **map**: Maps/visualizes codebase aspects
- **emergency**: Incident response tasks
## Common Workflows
### Check what nightshift did overnight
```bash
nightshift report
nightshift report --period last-night --paths
```
### Manually trigger a specific task
```bash
nightshift run -y -p . -t content-gap # custom task by ID
nightshift task run idea-generator --provider claude # built-in task only
```
### Debug why a task didn't run
```bash
nightshift doctor
nightshift preview --explain
nightshift logs --level error --since "yesterday"
```
### Gotchas
- **"already processed today"**: `nightshift run` (without `-t`) will skip a project if it already ran today. Using `-t` to target a specific task bypasses this.
- **Cannot run nightshift while Claude Code is active**: Nightshift spawns its own Claude agent. If a Claude Code session is already running, the agent may fail with `exit status 1`. Close Claude Code first or wait for the scheduled overnight run.
- **Budget calibration**: If `nightshift budget` shows `none confidence`, the weekly_tokens value in `~/.config/nightshift/config.yaml` is a manual estimate. Adjust based on your plan (Max $100 = ~25M/week).
- **Global vs project config**: Global config lives at `~/.config/nightshift/config.yaml` (schedule, budget, providers, global enabled list). Project config lives at `nightshift.yaml` in the repo root (task definitions, project-level enabled list). Both enabled lists must include a task for it to run.
### See budget remaining
```bash
nightshift budget
```Related Skills
stop-slop
Use this skill when writing or editing prose to eliminate predictable AI writing patterns. Helps make writing more direct, authentic, and human.
sonos-control
Control Sonos speakers on Tim's home network. Use when the user wants to (1) play, pause, or stop music on Sonos speakers, (2) change volume on speakers, (3) skip tracks, (4) check what's playing, (5) see speaker status, (6) group or ungroup speakers, (7) any Sonos or music/audio playback task involving home speakers. Triggers on "sonos", "speakers", "play music", "what's playing", "volume", "turn up", "turn down", "pause music", "stop music".
slack-message
Draft and send Slack messages in Tim's natural voice. Use when the user wants to (1) post an update to a channel, (2) draft a Slack message, (3) share something on Slack, (4) send a DM, (5) reply in a thread. Applies Tim's Slack writing style and prose principles automatically.
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
sending-to-codex
Delegate tasks or ask questions to OpenAI's Codex CLI from within Claude Code. Use this skill when the user says "ask codex", "send to codex", "delegate to codex", "have codex do this", "get codex's opinion", "run this in codex", or wants to offload a coding task or question to the Codex agent. Supports both fire-and-forget coding tasks (fix bugs, add features, refactor) and research questions (analyze code, explain behavior, get a second opinion).
reviewing-writing
Review and critique writing using Michael Nielsen's principles on craft. Analyzes text for purpose focus, brevity, danger words, opening strength, originality, reader psychology, truthfulness, and title impact. Use when the user says "review my writing", "nielsen review", "writing review", "review this writing", "critique my writing", or asks for feedback on prose quality.
reviewing-code
Review pull requests, branch changes, or code diffs. Triggers on "review this PR", "review my changes", "code review", "review branch", or GitHub PR URLs. Focuses on bugs, tests, complexity, and performance - not linting.
resend-email
Send emails via Resend.com API. Use when the user wants to (1) send an email, (2) email someone, (3) send a message to an email address, (4) send email with attachments, (5) schedule an email for later. Requires RESEND_API_KEY environment variable.
refresh-dotfiles
Full sync of personal (yadm) and work (yadm-work) dotfiles. Pulls remote changes, commits and pushes local changes, and audits for untracked files that should be tracked. Use when the user says 'refresh yadm', 'sync dotfiles', 'dotfiles sync', or 'update dotfiles'.
omnifocus
Interact with OmniFocus task manager via the command-line interface (@stephendolan/omnifocus-cli). Use when the user wants to: (1) Add tasks or projects to OmniFocus, (2) List, view, or search tasks/projects, (3) Update or complete tasks, (4) Manage inbox items, (5) Work with tags and analyze tag usage, (6) Process or organize their OmniFocus database from the command line.
omnifocus-triage
Interactively process OmniFocus inbox items using AskUserQuestion. Use when the user wants to (1) triage their inbox, (2) process inbox items, (3) organize their OmniFocus inbox, (4) clear out their inbox, (5) do a GTD-style inbox review. Triggers on "triage inbox", "process inbox", "organize inbox", "clear inbox", "inbox zero".
modal
Run code on Modal's cloud infrastructure via `uvx modal run`. Use whenever the user wants to (1) validate handbook tutorial shell commands on a fresh Debian container from scratch (uv, pip, build tooling, etc. with no cached state from Tim's laptop), (2) test GPU-specific Python code (torch, CUDA, cupy, transformers, CUDA wheels) on real hardware, or (3) reproduce a "does this actually work from zero?" check. Trigger on phrases like "run this on modal", "test on a fresh machine", "try this on a GPU", "validate from scratch", "does the tutorial work end-to-end", "test this without my venv state", or any mention of modal.com / cloud GPUs / ephemeral containers for verification. Also trigger when the user is writing a handbook tutorial that involves GPU installs (PyTorch, CUDA wheels) and they want to confirm the commands work.