CI release MIT Rust 2024

Your Claude subscription,
working all week,
on one cheap VPS.

powerqueue turns Linear tickets and GitHub Issues into autonomous Claude Code sessions and keeps them running around the clock. It paces them so the whole weekly allowance goes to the work that matters, with fable held for what is critical. Add a Codex or Google subscription and it spreads the queue across all of them, each paced against its own budget. It needs nothing but the subscriptions you already pay for and a small box that stays on, or your laptop.

install.sh — re-run to update
curl -fsSL https://raw.githubusercontent.com/aleandros/powerqueue/main/install.sh | sh
~ powerqueue run

        

› why it's cheap

Most of a Claude subscription goes unused: the 5-hour windows reset while you sleep and the best model sits idle until something urgent lands. powerqueue spends that capacity for you and stops at the limit, so the bill is what you already pay. Already paying for Codex or Google AI Pro too? Those allowances join the same queue.

the subscription you have

Sessions run through your normal Claude Code login, so usage counts against Pro or Max, not an API account. No per-token bills, no keys to rotate.

# budget pacing, per tier, per week
fable   held for critical work
opus    high-priority tickets
sonnet  everything else, all week

one small box

The daemon only runs git, tmux and Claude Code. A VPS with a couple of gigabytes of RAM runs several sessions side by side. Your laptop works just as well while it is open.

ssh box
claude                  # log in once
powerqueue init --permission-mode auto
powerqueue run          # or a systemd unit

nothing else

One static binary, SQLite, a TOML policy file. No orchestration platform, no cloud account, no agents-as-a-service. Use Linear, GitHub Issues, or both. powerqueue add also queues work by hand.

$ powerqueue budget show
period  43% used, day 3.1 of 7
window  12% of the 5h window
fable   8% of 25% share, 12 tasks ok

› how it works

A queue of work. One small VPS. A fresh session for every task.

the task lifecycle
Tasks flow through a VPS running powerqueue Linear tickets, GitHub Issues and manual tasks enter the queue. Inside your VPS, powerqueue scores tasks and checks the budget, then fills three independent session slots. Each session has its own git worktree and tmux window. Completed branches are pushed, worktrees cleaned up, and the source issue updated with the configured state, labels and comments. The daemon watches usage and resumes crashed sessions. Incoming tasks Linear + GitHub + manual ENG-412P0 api/app#398P2 ENG-401P1 Your VPS powerqueue daemon 3 session slots priority.toml → budget → model The right task, when capacity allows. SESSION 01 ENG-412 fable worktree + tmux SESSION 02 api/app#398 sonnet worktree + tmux SESSION 03 ENG-401 opus worktree + tmux watch usage · resume crashes · free slots In review Ready for you push · clean up · sync
Queue → run → review Slots fill as work arrives, then open up for the next task. Illustrative timing.
1. syncQueued issues from your team become tasks. Manual tasks come from powerqueue add.
2. scoreRules in a typed TOML file set criticality and score. Edit it; the daemon reloads live. Optional Jev scoring.
3. pick a modelThe budget policy chooses the best tier the period and the 5-hour window can afford.
4. runA fresh worktree, a tmux window, an interactive Claude Code session you can attach to at any time.
5. watchHooks report turns, prompts and failures. Transcripts give tokens. A dead pane means a resumed retry.
6. finishClaude runs powerqueue task complete; the branch is pushed, the worktree removed, the source issue updated.

› what you get

ENG-412 ─▶ @3
api/app#398 ─▶ @4
ENG-401 ─▶ @5

One window per task

Each task gets its own git worktree and tmux window. powerqueue attach ENG-412 drops you into the live session.

fable  ████░░ 31%
opus   ██░░░░ 14%
sonnet █████░ 58%

Budget pacing

Per-tier shares across your weekly period and 5-hour window. Fable is held for critical work early and released as the week ages.

exit 1 → 30s
--resume <id>
attempt 2 ✓

Crash recovery

Dead pane, stale session or rate limit: the daemon backs off and resumes the same Claude session, context intact.

tokens 2.1M
cpu 38%  rss 612M
est ±18%

Learns what tasks cost

Token usage from transcripts, CPU and memory from the process tree. Predictions improve with every completed ticket.

## Critical
- label: incident
- priority: urgent

Priorities in Markdown

Plain bullet rules, per-ticket overrides, scoring, model mapping. Live reload. Optional Jev decision-model scoring.

$ powerqueue doctor
 ✓ 21  ! 1  ✗ 0
 fix: lower relax…

Diagnoses itself

doctor checks tools, keys, state and the algorithm, and tells you which knob to turn. --fix repairs what is safe.

claude  period 34%
codex   period 17%
gemini  period  3%

Three subscriptions, one queue

Claude Code, Codex CLI and Antigravity CLI, each with its own weekly budget and usage probe. critical: fable | gpt-6.1-sol names the fallback; when one provider is out, the queue moves to the next.

› get it running

one-liner

Detects OS + architecture, drops the binary in /usr/local/bin (or ~/.local/bin). Run it again to update.

curl -fsSL https://raw.githubusercontent.com/aleandros/powerqueue/main/install.sh | sh

cargo

Rust toolchain required. Builds the latest main.

cargo install --git https://github.com/aleandros/powerqueue

pinned

Pin a release or pick the install directory with environment variables.

POWERQUEUE_VERSION=v0.9.0 \
POWERQUEUE_INSTALL_DIR=~/bin \
  sh -c "$(curl -fsSL https://raw.githubusercontent.com/aleandros/powerqueue/main/install.sh)"

GitHub Issues setup

Use the repository that matches your local checkout. Add the powerqueue label to issues you want the agent to pick up. Automatic closing defaults to off.

powerqueue init --no-linear
powerqueue secrets set github       # prompts for your GitHub token
powerqueue config set github.repository '"owner/repo"'
powerqueue config set github.enabled true
powerqueue github test
powerqueue github sync              # preview intake
powerqueue run

Already using Linear? Keep it enabled and add the GitHub settings. GitHub configuration and token permissions →

Linear setup and daily use

# Linear setup: key → keychain, team, states, permission mode, priority.toml
powerqueue init

# check tools, keys, state and the algorithm
powerqueue doctor

# start the scheduler (keep it in a tmux window or a service)
powerqueue run

# watch sessions, budget and the queue
powerqueue dashboard

# jump into a task's session, or queue something by hand
powerqueue attach ENG-412
powerqueue add "Rotate the staging certs" --criticality high

› rules and budget

priority.toml

Typed TOML classifies tasks in criticality order and adds matching score deltas. Model lists are preferences the budget may downgrade. Invalid edits keep the last valid policy. Markdown can record intent; only TOML executes.

version = 1

[[criticality]]
level = "critical"
all = [{ field = "label", op = "eq", value = "incident" }]

[[scoring]]
delta = 40
all = [{ field = "label", op = "eq", value = "customer" }]

[[overrides]]
key = "ENG-377"
skip = true

[models]
critical = ["fable"]
high = ["opus"]
normal = ["sonnet"]

Existing rules: powerqueue priority migrate --from PRIORITY.md --to priority.toml, then update the configured policy path.

budget policy

Each tier gets a share of the period's weighted tokens and a minimum criticality. Early in the week only critical work touches Fable. Once a tier is under-paced it relaxes one level; in the end game it opens up so nothing is wasted. A rate_limit pauses every tier until the cooldown.

# config.toml
[budget]
period_hours = 168
window_hours = 5
period_weighted_tokens = 80_000_000
endgame_fraction = 0.8

[budget.models.fable]
share = 0.25
min_criticality = "critical"
relax_after_fraction = 0.5

[budget.models.opus]
share = 0.35
min_criticality = "high"
relax_after_fraction = 0.3

Calibrate with what /usage shows: powerqueue budget set-reset "in 3d4h" and powerqueue budget set-observed 43%. doctor says when Fable is over- or under-reserved.

› why

Claude Code is great at a ticket, and you are already paying for far more tickets than you run. The chore is everything around them: the worktree, the window, noticing the session died, remembering which model you can still afford this week, cleaning up, moving the issue.

powerqueue does the chore on a box that never sleeps. You keep attach, answer, review, and come back to pushed branches.

Scope. Sessions are interactive so you can always attach, which means a permission prompt waits for you (the task goes to needs_attention). For a VPS that nobody watches pick the auto permission mode in init (or bypassPermissions), or pre-approve commands in claude.allowed_tools; change it later with powerqueue config set claude.permission_mode auto. Linear and GitHub Issues are supported independently, including in the same queue. GitHub intake uses repository, label and assignee filters; issue closing is opt-in.

let the queue run.

Spend the subscription you already pay for. Come back to pushed branches, updated tickets and a dashboard that explains what happened.