v0.7 · multi-agent · nightshift queue · remote control

Autonomous coding
agents on rails._

Wraith dispatches Claude Code, Codex, Gemini and OpenCode runs from Linear issues — picks the right model, writes the prompt, opens the PR. Queue work overnight. Drive it from Telegram, Slack, or your phone.

See what it does →
Linear OpenRouter Bun Cloudflare Tunnel
~/regeno/platform·$ wraithpaired
W R A I T H
Headless code-agent runner
1
Issues
Browse Linear triage
2
Projects
By project
3
Runs
3 active
4
Settings
Tokens & drivers
5
Nightshift
2 queued · 23:00
6
Pair
QR + WebSocket
wraith v0.7.0 · regeno/platform · mainq quit select? help
01 · Drivers

One runner. Every coding agent.

Wraith is driver-agnostic. Pick the agent that fits the task — or let label-routing pick for you. Each run gets its own worktree, its own branch, its own PR.

Claude Code
anthropic native

First-class native driver. Spawns the Claude Code CLI in a fresh worktree with skill packs (/review, /qa, /qa-design-review).

$ claude --resume
Codex
openai cli

OpenAI's terminal coding agent. Wraith hands it the enriched prompt and worktree — Codex iterates until the diff is clean.

$ codex exec
Gemini
google cli

Google's Gemini CLI agent. Long context, fast turnarounds — great for large refactors and multi-file edits.

$ gemini --yolo
OpenCode
open-source · any model

Plug in any model via OpenRouter, Anthropic direct, OpenAI, Together, Fireworks, Groq — 200+ models routed through one client.

$ opencode run
wraith doctor — driver routing
$ wraith doctor
claude v1.0.78 installed
codex v0.31 installed
gemini-cli v0.4.2 installed
opencode v0.6 installed
routing matrix:
label:bugclaude / effort: low
label:refactorgemini / effort: high
label:experimentopencode / openrouter
defaultclaude / effort: medium
✓ all drivers reachable. ready.

Label-aware routing

Wraith classifies issues automatically — by labels, comment depth and description heft — then routes to the right driver and effort tier. A typo gets cheap. A protocol redesign gets opus-grade reasoning.

low
Quick fixes, typos, doc updates
haiku · gpt-4o-mini · gemini flash
medium
Bug fixes, small features, tests
sonnet · gpt-4o · gemini pro
high
Refactors, multi-file features
opus · gpt-5 · gemini ultra
02 · Models

200+ models.
One picker.

Press m in any run to swap models on the fly. Wraith ships with first-class support for OpenRouter — so anything they catalogue, you can run. Authenticate once, fuzzy-search by name, hit enter.

OpenRouter
200+ models
Anthropic
direct API
OpenAI
GPT + o-series
Google
Gemini
Groq
fast inference
Together
open weights
Fireworks
fast OSS
Local
Ollama / LM Studio

Configure cost-aware routing per label, per repo, or per effort tier. Get auto-classified runs that pick a cheap model for typos and an expensive one for architecture work.

wraith — model picker
Select model
select esc cancel
/14
anthropic · 3
openai · 3
google · 2
openrouter · 3
groq · 1
fireworks · 1
together · 1
03 · Prompt enrichment

From triage ticket
to surgical brief.

Wraith reads the entire issue — title, description, every comment, every attachment, even sibling issues — then synthesises a developer brief that knows where to start, what to test, and what "done" looks like.

LLinear · REG-412
Triage

Phone number validation drops international format

Users in DE/FR are getting bounced when they enter a +44 number with spaces. We're calling stripPhone() before E.164 normalise...

bugsignupP1
3 comments · 2 attachments
screenshot.png·stack-trace.log
"@alan said this regressed in #392 last week"
Enriched prompt → claude-sonnet-4-6
4.2k tok
## Goal
Fix phone validation regression — international numbers with spaces (e.g. +44 7700 900123) must pass E.164 normalisation.
## Context
Regression introduced in PR #392. Linear comment thread points at stripPhone() in utils/phone.ts.
## Repro
See stack-trace.log. Failing test: phone.spec.ts:42
## Done
Tests green
No DE/FR locale fallout
PR opens against main, links REG-412
+ skill packs: /review /qa attached
04 · Nightshift

Queue work.
Sleep through it.

Stack a backlog of issues, set a start time, and walk away. Nightshift wakes the supervisor at 11pm, processes the queue sequentially, and pings you on Telegram when the morning batch is ready to review.

Three queue modes
Triage flush · todo+label filter · hand-curated
Auto-retry with backoff
Crashed runs respawn up to 3 times
Time-window aware
Stops at the end-time, even mid-queue
systemd supervisor
Survives reboots on your VPS
wraith nightshift — queueARMED
MODE
todo+label
START
23:00
COUNTDOWN
10h 57m
QUEUE
5/8
progress3/8 · 38%
#idtitledrivertime
1REG-401Bump bun to 1.2claude3m 12s
2REG-403Fix dark mode flash on /pricingcodex5m 48s
3REG-407Add unit tests for date helpersclaude2m 04s
4REG-411Refactor billing reducer (state machine)gemini12m 30s
5REG-412Phone number validation drops international formatclaude
6REG-414Document Telegram bot setupopencode
7REG-417Migrate analytics to PostHogclaude
8REG-419Sentry alerts on 5xx > 0.5%claude
j/k navt set timeC customx remove
05 · Control surfaces

Drive your runners
from anywhere.

Wraith fans out to the channels you already live in. Telegram for on-the-go runs. Slack for team-wide visibility. A QR-paired Android companion for your pocket. The TUI when you're at the keyboard.

Telegram bot
Two-way control · phone-first
live
/run REG-412 attach screenshot too
🟡 spawning REG-412
Phone validation regression
driver: claude · effort: medium
✅ completed in 4m 12s
github.com/regeno/platform/pull/812
/status
REG-412 → PR #812
🟡 REG-411 running 12m
REG-414 queued
Commands
/run REG-123dispatch a run
/prompt custom prompt
/statusall live runs
/issue REG-123full ticket
/retry REG-123re-run failed
/group REG-1 REG-2batch run
/branchshow / change
/freshreset to base
/switchrepo / workspace
Slack notifications
Block kit · per-channel routing
wraithAPPjust now
Run completed
issue
REG-412
driver
claude · sonnet-4-6
duration
4m 12s
wraithAPPjust now
Run failed · retrying
issue
REG-419
error
rate limit (529)
attempt
2/3
Pair mode

Scan once. Run forever.

$ wraith pair

Pair mode spins up a token-authenticated WebSocket on port 7280, prints a QR code, and accepts events from the Wraith Android app. Toggle "tunnel": true for Cloudflare-fronted access from anywhere.

issues.list
browse triage
runs.start
fire from phone
runs.retry
respawn failed
runs.archive
tidy completed
projects.list
drill by project
run.event
live event stream
9:41●●●5G100%
wraith
Live runs
REG-411gemini · 12m
REG-407claude · 2m
REG-403codex · 5m
Triage · 8
Phone number validation
Document Telegram bot setup
Migrate analytics to PostHog
06 · Architecture

How a run flows.

L
Linear
issue · triage
Wraith
TUI · CLI · bot
Driver
claude · codex · gemini · opencode
GitHub
branch · PR
Telegram + Slack notifications fan out at every state change
Pair WebSocket streams events to your phone
Nightshift queue picks the next ticket and repeats
1Enrich

Pull title, description, comments, attachments and downstream PRs. Synthesise a developer brief tuned for the chosen agent.

2Dispatch

Spawn the chosen driver in an isolated git worktree on its own branch. Persist run metadata to SQLite, stream stdout to disk.

3Land

Push the branch, open the PR linked to the Linear issue, move ticket to In Review, ping you on Telegram or Slack.

07 · CLI

Every command,
keyboard-first.

Wraith is at home in your terminal. Same surface area whether you're at your desk, in tmux, or SSH'd into a VPS.

~/regeno/platform — wraith --help
wraith — autonomous coding agents on rails
v0.7.0 · drives claude · codex · gemini · opencode
usage
wraithOpen the TUI
wraith initCreate wraith.json config
wraith doctorDiagnose driver + model routing
wraith freshCheckout & pull base branch
wraith issue <id> --run [--loop N]Run a Linear issue
wraith custom "<prompt>" [--loop N]Custom run with raw prompt
wraith group <id>... [--loop N]Run multiple issues sequentially
wraith runsList active runs
wraith runs <prefix>Show run detail
wraith retry <id|prefix>Smart retry — ticket or run prefix
wraith archive <prefix>Archive a completed run
wraith logs <prefix>Tail logs for a run
wraith watchWatch run state transitions live
wraith nightshiftShow nightshift queue status
wraith nightshift add <id>Queue an issue for nightshift
wraith nightshift custom "<p>"Queue a custom job
wraith nightshift time <HH:MM>Set the start time
wraith nightshift runStart supervisor (waits for time)
wraith nightshift nowStart processing immediately
wraith nightshift clearClear the queue
wraith review-respondPoll PRs and respond to AI review verdicts
wraith pairStart pair mode (WebSocket + QR)
wraith telegram pairPair the bot with a Telegram DM
wraith telegram watchRun the Telegram bot
wraith telegram supervisorInstall systemd service
08 · Quickstart

Three commands.
First PR by lunchtime.

Read the full setup → wraith on GitHub
1

Install

Globally via Bun. Wraith ships as a single binary.

2

Configure

Walks you through Linear token, drivers, default model, notifiers.

3

Run

Launch the TUI — or skip straight to dispatching from the CLI.

Already have it?
Update to the latest:
bun update -g wraith-cli
Prefer a VPS?
Spin up a headless box with the dispatcher running 24/7. Full guide in the README.
Headless setup guide →