░█░█░█▀▄░█▀█░▀█▀░▀█▀░█░█░█▄█░█▀▄░█▀█░░█░░░█░░█▀█░▀░▀░▀░▀░▀░▀░▀▀▀░░▀░░▀░▀
Headless Claude Code runner
┌─ Issues (triage) ──────────────────────┐│ ││ ● REG-142 Fix auth token refresh ││ ○ REG-143 Add rate limiting to API ││ ○ REG-144 Update user onboarding ││ ││ [f] Run [/] Search [q] Quit │└─────────────────────────────────────────┘→ Spawning Claude run for REG-142...
"Pick an issue. Press f. Claude takes it from here."
┌─ Runs ──────────────────────────────────┐│ ││ ● abc1 REG-142 ██████████░ running ││ ✓ def2 REG-138 ██████████ completed ││ ✗ ghi3 REG-140 ██████░░░░ failed ││ │└─────────────────────────────────────────┘✓ def2 → github.com/regeno/api/pull/87
"Real-time run tracking. PR link when it's done."
▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄▄▄▄█ ▄▄▄ █ █▀▄▄█ █ ▄▄▄ ██ ███ █ ▄▀█▄▀ █ ███ ██▄▄▄▄▄█ █ █ █ █▄▄▄▄▄█▄▄▄▄▄ ▄██▀▄▀ ▄ ▄ ▄█▄▄▄▄▄█ ▀▀▀▀▀ █▄▄▄▄▄█Listening on ws://192.168.1.42:7280● Status: Paired!
"Scan. Pair. Control from your pocket."
What it does
Browse triage, search across your workspace, view full details with comments and attachments. Press f to start a Claude run.
View active projects, drill into project issues, track progress. Start runs directly from project context.
Spawn detached Claude Code sessions that work in git worktrees. Each run gets its own branch, creates a PR when done.
AI-generated prompts from issue context — title, description, comments, attachments. Anthropic, OpenAI, or Together backends.
Start a WebSocket server, scan a QR code from the Android companion app, and remote-control wraith from your phone.
Get Slack or Telegram alerts when runs complete, fail, or crash. Never miss a finished PR.
How it works
┌─────────────┐
│ Linear │
│ Issue │
└──────┬──────┘
│
▼
┌─────────────┐
│ wraith │
│ TUI / CLI │
└──┬──────┬───┘
│ │
│ │ WebSocket
▼ ▼
┌──────┐ ┌─────────┐
│Claude│ │ Android │
│ Code │ │ App │
└──┬───┘ └─────────┘
│
▼
┌──────────┐
│ GitHub │
│ PR │
└──────────┘Issue → Prompt
Wraith fetches the full issue from Linear — description, attachments, comments. An AI-powered prompt is generated from the context (or a basic template if no API key).
Prompt → Run
A git worktree is created at .wraith/worktrees/ for branch isolation. A detached Claude Code process spawns in the worktree. Run metadata is stored in SQLite, logs stream to .wraith/runs/.
Run → PR
When Claude finishes, it pushes the branch and creates a pull request. Wraith updates the Linear issue status and notifies you via Slack or Telegram.
Commands
Wraith — headless Claude Code runner
Usage:
Run prefixes are the first 8 characters of the run ID.
Configuration
{ "linear_token": "lin_api_...", "base_branch": "main", "workspace": "my-workspace", "prompt": { "provider": "anthropic", "api_key": "sk-ant-..." }, "notifiers": [ { "type": "slack", "webhook_url": "..." } ], "pair": { "port": 7280, "tunnel": true } }
Per-project config — created by wraith init
Wraith looks for wraith.json in your project root, plus any .env variables. Bun auto-loads .env files — no extra setup.
| Setting | Required |
|---|---|
| linear_token | Yes |
| anthropic_api_key | No |
| base_branch | No |
| prompt.provider | No |
If no prompt provider is configured, a basic template is used instead of AI-generated prompts.
Your terminal, your pocket
Fix auth refresh
Rate limiting
User onboarding
Scan a QR code from wraith pair and your Android phone becomes a remote control.
Browse issues. Start runs. Move statuses. Watch events stream in real time.
Works on LAN out of the box. Add "tunnel": true to wraith.json for access from anywhere via Cloudflare.
{ "pair": { "port": 7280, "tunnel": false } }
wraith.json
Headless server setup
Wraith is designed to run headless on a remote server so Claude Code can work autonomously while you monitor from anywhere.
Ubuntu 24.04 LTS, 8 GB RAM minimum, 2+ vCPUs, 50 GB+ SSD. Claude Code sessions are memory-hungry.
Enable UFW firewall (SSH only), install fail2ban, create a dedicated claude user with sudo access.
Install Bun, Git, and Claude Code CLI. Clone your project, install dependencies, authenticate Claude Code with your Max subscription.
Launch wraith in a tmux session so it survives SSH disconnects. Set up Telegram or Slack notifications to monitor runs from anywhere.
$ tmux new -s wraith $ cd ~/my-project $ bunx wraith-cli
Get started
Prerequisites
v1.1+
wraith creates worktrees for each run
account + API key
CLI installed globally
Run
bunx wraith-cliRun wraith directly with Bun. No install needed.
Configure
wraith initWalks you through setting up your Linear API key, Anthropic key, and base branch. Creates a wraith.json in your project.
Launch
wraithOpens the TUI dashboard. Or go headless: wraith issue REG-123 --run
Or install globally: bun install -g wraith-cli