thirdshift
A factory that turns GitHub issues into ready-for-review pull requests with unattended coding agents. The humans are the day shift; the agents work the third shift while you do something else.
Use Claude Code, Codex, Antigravity CLI, Grok Build, Muse Code or OpenCode, logged in as you. Runs use the selected agent's plan or account; thirdshift itself is free and open source.
Each Ticket run implements the issue, reviews the change against the issue and your repository's standards, and keeps the pull request mergeable and passing CI. It leaves the pull request for your review, or merges it when asked. If a run fails, it reports what work was preserved and how to continue.
Read the user manual here on GitHub or on thirdshift.app. For a visual introduction, see How thirdshift works. Coding agents can start from thirdshift.app/llms.txt, a Markdown index of the manual, the site and the source.
Install
|
The installer puts a single binary in ~/.local/bin; no Rust toolchain or checkout of this repo is needed. Supported: x86_64 Linux (Rocky, Ubuntu and WSL2) and Apple Silicon macOS. See supported versions and other installation methods.
Have git, authenticated gh, and one of the supported coding agent CLIs installed. Set git's user.name and user.email and make sure it can push. Prerequisites and permissions covers setup and access: sessions run unattended as your user, with access to that account's files, credentials and tools.
Use thirdshift update to update a shell-installer copy.
Usage
From a clone of the issue's repository, on the branch you want the pull request to target:
You can also use the issue number from that clone, choose a Harness, or ask for a merge:
These examples use the default settings. Command options override your User config; --no-merge leaves a pull request for review even if your defaults request merging.
The Ticket run works in its own git worktree. Your checkout's uncommitted changes stay out of it; push any Base branch commits first. thirdshift watches CI and starts Repair sessions for merge conflicts or failing checks. Run the same issue again to continue existing work.
Use thirdshift help for the command reference, or read Ticket run behavior, command options and failure recovery.
Workflows
| Start with | Command | What happens |
|---|---|---|
| One GitHub issue | thirdshift 7 |
A Ticket run delivers one pull request, with optional Self-merge. |
| An issue with sub-issues | thirdshift 42 |
A Spec run works through Tickets in dependency order, in parallel where possible, and delivers one Spec PR. |
Issues marked ready-for-agent |
thirdshift pickup |
A Pickup run takes the lowest-numbered Ready issue. |
| Architecture improvements | thirdshift architect |
An Architect run reviews the codebase, publishes a plan and builds it, or files an idea for triage. |
| A security audit | thirdshift secure |
A Security run records findings privately; fixing a reproduced finding is optional. |
| Merged factory work | thirdshift score |
A Scoring run samples and grades it, and proposes Bug origins; thirdshift scores --json lists samples, five criterion Scores, calibration and proposals by week; thirdshift scores <pull request> --mine records yours before revealing the model's. |
| One skill | thirdshift skill <skill> [issue <issue>] |
A standalone skill runs headlessly and prints its final message. |
| A Custom process | thirdshift process <name> [issue <issue>] |
An experimental Custom process runs skill, command or catalogue Steps from ~/.thirdshift/processes/<name>.toml, in named throwaway worktrees when the file declares them. The catalogue Step run-published-issue starts a Ticket run or a Spec run on the issue the session Step before it published. An optional Step can fail without stopping the process. issue <issue> gives every session Step that issue. One Issue-branch worktree plus a delivery Step publishes a ready-for-review pull request from that Issue branch and then removes the Claim. A self-merge Step directly after it merges when merge or the User config asks, and a file can only tighten limits. With no issue, and no Issue-branch worktree, it is a Pass and skips while another Pass on the repository is running. Status, the Console and the Activity log list it as Process <name>. A failed one is in Needs you, and it sends a Run notification under the same email rules as a Ticket run. A skipped Process sends none. Each Step may name its Harness, Model and Effort, otherwise inheriting the Command's. |
A Custom process can use implement → delivery on an Issue-branch worktree for the Ticket run's implementation and bug diagnosis. An unreproduced bug ends successfully with needs-info, skipping later Steps and cleaning up the Claim and worktree.
Each Architect, Pickup or Security run makes one pass. Use cron or another operating system scheduler to repeat it. See scheduling, Architect runs every few minutes and Security runs on a schedule.
Monitor and manage work
From another terminal, inspect this machine's work across repositories:
status groups Commands by what needs you, what is ready for review, what is landing and what is still working. show includes stages and child Ticket runs. Session traces retain agent events and timed work; you can inspect the span tree or export a Command's whole Trace.
For a live browser view of the same Inbox, with stages, logs and Session traces:
Open the localhost address it prints. The Console never starts work. Use thirdshift stop <command> to stop a live Command and wait for cleanup; add --requeue to return its issue to Pickup. A signed-in Console account can do the same.
Console on a server
The Console and status show the serving OS account's Commands by default. To add readable Commands from other local accounts, use thirdshift console other-accounts readable (or a comma-separated list of account names). Other-account Commands show their owner and are read-only. See account visibility for filesystem access requirements.
The Console can run as a persistent service behind HTTPS and sign-in. See server installation for configuration, passwords, the generated Linux installer and Caddy, Apache or nginx setup.
Documentation
- Configuration, Harness, Model and Effort, and email notifications.
- Machine status, showing Commands and reading logs, and stopping a Command.
- Console installation and Console Themes and browser tests.
- Host resources:
thirdshift resources --jsonand the Console's Resources page show RAM, CPU load and configurable limits that delay new sessions. - Building and testing and releasing.
- Exact prompts and Factory skills, also readable on the site.
- Built-in processes are compiled into the binary.
thirdshift process listlists Processes and marks Built-in processes;thirdshift process show <name>prints a Process file exactly so you can copy it under a new Custom process name. - Domain vocabulary and architectural decisions.
- Open issues for known gaps and planned work.
Credits and license
Released under the MIT License. Factory skills include work by Matt Pocock, Dex Horthy and Cloudflare. See full credits and license notices.
These section links keep older bookmarks useful. The complete explanations now live in the user manual.
- What a Ticket run does
- The Claim
- When the Claim ends
- Status
- Machine status
- Show and read one Command
- Updating
- Supported platforms
- Prerequisites
- Unattended sessions
- What sessions leave behind
- Usage and cost
- User config
- Harness, Model and Effort
- Run notifications
- Stopping a Command
- Logs
- Foreign commits in a Ticket run that Self-merges
- Base fix
- One Base fix per Base branch
- Continuation
- Failed ticket runs
- An Inherited failure links the Base branch's checks
- Spec runs
- Architect runs
- One Run notification
- No Strong candidate
- An Architect idea waits for triage
- A Ready issue goes first
- One at a time
- One Architect plan at a time
- On a schedule
- Architect runs every few minutes
- Security runs
- Security review
- Security runs on a schedule, with fixing allowed
- Pickup runs
- The Claim limit
- The Sweep
- Why an issue was passed over
- One Run notification for the issue taken
- A Pickup run on a schedule
- Building from source
- The Rust version
- Releasing