// open source · macOS · for agent runners

PACK YOUR AGENTS.

Your coding agents keep working — lid closed, in the bag, on your phone's hotspot — while you keep steering from the Codex or Claude app in your hand. Rucksack runs every check before you walk out the door, then watches the link while you move and pings your phone if anything breaks.

Native remote control steers the agent. Rucksack keeps the host alive and reachable while you move — the other half.

curl -fsSL https://rucksack.sh/install | bash

// mission log

THE RUN

Every trip is the same four panels. Rucksack makes sure they end well.

Comic panel: a hacker at a desk of glowing terminals glances at the clock, rucksack hanging empty on the chair
01 · DEADLINE 19:42. The agents are mid-refactor. You have to leave.
Comic panel: hands slide a glowing laptop into a canvas rucksack while a phone shows five green checks
02 · PACK rucksack pack --lid-closed --yes --watch — every check green. Zip it.
Comic panel: the hacker strides through a neon subway, glowing rucksack on their back, watching logs stream on their phone
03 · TRANSIT Hotspot drops? The watchdog rejoins and pings your phone.
Comic panel: at a dawn-lit café counter the laptop reopens to a finished task list, rucksack slumped beside the stool
04 · ARRIVAL Arrive. Unpack. The work never stopped.

// the phone is the cockpit

KEEP WORKING FROM YOUR POCKET

The Mac in the bag is the compute node. The phone in your hand runs the show.

Comic panel: on a night bus, the hacker reviews an agent's diff on their phone and taps a glowing APPROVE button, rucksack on their lap
05 · COCKPIT Diff reviewed. APPROVE tapped. Next task queued — from seat 23A.
â–¸ STEER

Keep driving the run from the Codex app or claude.ai on your phone — review diffs, approve tools, redirect the agent mid-transit. Outbound-only: the Mac never needs inbound access.

â–¸ WATCH

The watchdog posts to your private ntfy.sh topic — link lost, link restored, process revived. Subscribe on your phone and know within seconds.

â–¸ REACH

Want a real terminal into the bag? Optional Tailscale plus any ssh client gives you a shell from anywhere. Strictly optional — steering and alerts work without it.

// gear check

LOADOUT

A transparent CLI. No daemon squatting on your Mac — everything is a command you can read.

$ rucksack doctor

Nine readiness checks: battery, hotspot SSID, real internet (captive-portal probe), Tailscale if you have it, your agent remotes.

$ rucksack pack --lid-closed --yes

Backpack mode. sudo pmset disablesleep with the previous value saved, verified, and restored on stop. The bag run, done properly.

$ rucksack pack --watch

A watchdog rides along: rejoins the hotspot when Wi-Fi drops, restarts the keep-awake process if it dies, and restores normal sleep if the CPU starts thermal-throttling in the bag. All logged, with a phone alert.

$ rucksack pack --warn-battery 20 --sleep-battery 10

Battery guardrails for a sealed laptop. At 20% your phone pings; at the 10% floor Rucksack restores normal sleep so the Mac sleeps and saves your work instead of running the battery flat.

$ rucksack notify test

Point --notify-url at an ntfy.sh topic. Link lost, link restored, process revived — your phone knows in seconds. Pack with --expose 3000 and your dev server's phone-tappable URL lands on the same topic.

$ rucksack hotspot connect "My iPhone"

Joins your phone's hotspot from the Keychain-saved password and verifies the association — even when macOS redacts the SSID.

$ rucksack unpack

Kills the watchdog, stops keep-awake, restores your saved previous sleep setting, cleans up state. No trace left behind.

$ rucksack recover

The reassurance button. If a run was interrupted — crash, force-quit, killed watchdog — recover kills leftovers and restores the saved sleep setting, so a tool that touches global power config never strands your Mac awake.

// one line

INSTALL

macOS · Windows via WSL2 (experimental) · Node 20+ · MIT licensed · no runtime dependencies

$ curl -fsSL https://rucksack.sh/install | bash
$ # prefer to read it first? same script, no pipe:
$ curl -fsSL https://rucksack.sh/install -o install.sh && less install.sh
$ # it runs sudo — pin a reviewed release instead of tracking main:
$ curl -fsSL https://rucksack.sh/install | RUCKSACK_REF=v0.2.0 bash

Tagged releases, a changelog, and CI on macOS + Linux — because this tool runs sudo and changes power settings. Secrets in ~/.rucksack are written 0600; the notify URL never rides in the watchdog's process arguments.

// no lies on this page

STRAIGHT TALK