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.
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.
wraith.json "driver": "claude" | "codex" | ...First-class native driver. Spawns the Claude Code CLI in a fresh worktree with skill packs (/review, /qa, /qa-design-review).
OpenAI's terminal coding agent. Wraith hands it the enriched prompt and worktree — Codex iterates until the diff is clean.
Google's Gemini CLI agent. Long context, fast turnarounds — great for large refactors and multi-file edits.
Plug in any model via OpenRouter, Anthropic direct, OpenAI, Together, Fireworks, Groq — 200+ models routed through one client.
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.
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.
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.
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.
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...
Fix phone validation regression — international numbers with spaces (e.g. +44 7700 900123) must pass E.164 normalisation.
Regression introduced in PR #392. Linear comment thread points at stripPhone() in utils/phone.ts.
See stack-trace.log. Failing test: phone.spec.ts:42
→ Tests green
→ No DE/FR locale fallout
→ PR opens against main, links REG-412
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.
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.
driver: claude · effort: medium
→ github.com/regeno/platform/pull/812
🟡 REG-411 running 12m
⏳ REG-414 queued
/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 / workspaceScan once. Run forever.
$ wraith pairPair 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.listruns.startruns.retryruns.archiveprojects.listrun.eventHow a run flows.
Pull title, description, comments, attachments and downstream PRs. Synthesise a developer brief tuned for the chosen agent.
Spawn the chosen driver in an isolated git worktree on its own branch. Persist run metadata to SQLite, stream stdout to disk.
Push the branch, open the PR linked to the Linear issue, move ticket to In Review, ping you on Telegram or Slack.
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.
wraithOpen the TUIwraith initCreate wraith.json configwraith doctorDiagnose driver + model routingwraith freshCheckout & pull base branchwraith issue <id> --run [--loop N]Run a Linear issuewraith custom "<prompt>" [--loop N]Custom run with raw promptwraith group <id>... [--loop N]Run multiple issues sequentiallywraith runsList active runswraith runs <prefix>Show run detailwraith retry <id|prefix>Smart retry — ticket or run prefixwraith archive <prefix>Archive a completed runwraith logs <prefix>Tail logs for a runwraith watchWatch run state transitions livewraith nightshiftShow nightshift queue statuswraith nightshift add <id>Queue an issue for nightshiftwraith nightshift custom "<p>"Queue a custom jobwraith nightshift time <HH:MM>Set the start timewraith nightshift runStart supervisor (waits for time)wraith nightshift nowStart processing immediatelywraith nightshift clearClear the queuewraith review-respondPoll PRs and respond to AI review verdictswraith pairStart pair mode (WebSocket + QR)wraith telegram pairPair the bot with a Telegram DMwraith telegram watchRun the Telegram botwraith telegram supervisorInstall systemd serviceThree commands.
First PR by lunchtime.
Install
Globally via Bun. Wraith ships as a single binary.
Configure
Walks you through Linear token, drivers, default model, notifiers.
Run
Launch the TUI — or skip straight to dispatching from the CLI.
bun update -g wraith-cli