Simple Handoff — the agent keeps working after you close the laptop
Simple Handoff — the agent keeps working after you close the laptop. A new Hand off entry in the project's sidebar menu, on a machine's row and in the handoff task view opens a sheet where you say what the agent should do, and 1DevTool runs it on your own VPS as a systemd --user unit — rsync carries tracked and untracked files, staged and unstaged changes, deletions and .git across, so there is no "push to GitHub first", and .env travels over stdin at chmod 600 with values never logged. Follow-ups queue on the box and start themselves the moment the current run ends, and Take back holds the queue, stops the run, rsyncs the project home and cleans the units up. Open on phone puts the same handoff in your pocket: scanning one QR code opens a page served by the machine over a Cloudflare quick tunnel with no app to install, where you follow the live log, send the next instruction, stop a run, unlock a tmux shell with a 6-digit admin PIN, and get a push notification when a run ends. Seven fixes land with it, including a disabled Hand off button that looked clickable, multi-line follow-ups that broke the systemd unit, and an agent dying mid-task behind a frozen terminal.
Download v1.76.9
The download page always has the newest build; installers for this version are on GitHub.
What changed
New features
14- Hand off a project to a VPS — a new Hand off entry in the project's sidebar menu (and on a machine's row and the handoff task view) opens a sheet, you say what the agent should do, and 1DevTool runs it on the box as a
systemd --userunit; close the laptop, go for a walk, come back and your changes are waiting - One-time setup per machine — Settings → Machines → Handoff walks you through trusting the host key, installing
git/tmux/rsync/node, logging into Claude or Codex on the box in a real terminal (never a copied credential), and dropping in your agent config with any local-only paths and MCP commands rewritten rsynccarries everything — tracked and untracked files, staged and unstaged changes, deletions, executable bits and symlinks, including.git— so there's no "push to GitHub first", and the box always starts from exactly what you have on disk.envtravels with tight permissions — written over stdin,chmod 600, atomic replace, with the file and variable names shown and the values never logged- Follow-ups and the queue live on the box — the next instruction can be queued while a run is in flight, and it starts itself the moment the current one ends, with the laptop closed or quit
- Take back returns the work — the box queue is held first (so no new run can start under you), the current run is stopped, the project is rsynced home with your local changes, and the units on the box are cleaned up
- Live progress in the task view — assistant text, tool calls, results and exit status streamed from the box's log, with every run numbered
- Scan one QR code — the handoff success screen (and the task view, and the machine row) has an Open on phone button; scanning opens a web page in Safari or Chrome with no app to install, served by the machine over a Cloudflare quick tunnel so it keeps working with the laptop closed
- Watch the live log — the same entries the desktop task view shows, following in real time
- Send the next instruction — the box queues it if a run is in flight, or starts it now, and Stop ends the current run
- Admin PIN unlocks a shell — a 6-digit PIN opens a tmux shell on the box right in the phone's browser; it survives you closing the tab and resizes to the screen
- Push notifications when a run ends — opt in and the box sends one notification per ended run ("Run 3 finished in 2 min") and when the queue continues; works on Android Chrome today and on iPhone once added to the Home Screen
- See who's signed in — the scan screen lists open phone sessions with a Sign out all button, and Turn off kills the link altogether; taking back the last handoff on a machine turns phone access off automatically
- Verified binaries — cloudflared on the box is checked against its GitHub release digest before it runs
Bug fixes
7- Fixed the "Hand off" button looking enabled when it was disabled — a disabled primary button kept its blue background, hover effect and pointer cursor, so clicking it looked like a broken app; disabled buttons now dim and show a not-allowed cursor, and the sheet lists what's still missing as chips you can click to jump to the field
- Fixed a multi-line follow-up breaking the whole run — pressing Enter in the "What should it do next?" box ended the
systemdunit file in an unclosed quote, so the task failed to start; control characters are now escaped the way systemd expects, verified byte-for-byte on real systemd - Fixed signing in on the box deleting the credential it just created — the Codex Sign in terminal would remount and run
codex logina second time when the row moved from "Needs attention" to "Ready", wiping the freshauth.json; the setup terminal now has a fixed slot that doesn't move - Fixed the Machines → Sessions list failing with
Syntax error: ";" unexpectedon every Linux machine — the remote script was joined with;on lines that end in{ordo; it's now written in place, and a unit test runs it through/bin/sh - Fixed cloudflared downloads skipping their checksum verification — the downloader took the tag from the final redirect URL (which no longer carries one), so it looked up a checksum for the non-existent
latesttag and fell back to "trust"; the tag is now read from the first GitHub redirect hop and the binary is checked against the release API'sdigest - Fixed an agent that died mid-task leaving a silent, frozen terminal — when a Devin or Cursor CLI exited under its shell (connection drop, quota, crash), the PTY stayed alive, the stale last frame kept looking like an idle composer, Autopilot stamped bogus "finished" verdicts and nothing resumed; the drought lane now reads the box's process table before trusting the screen, and a verified "gone" either resumes the agent, hops to a backed seat, or shows one honest "exited mid-task" card
- Fixed Windows Agent Input chips stopping at the first backslash —
@src\bll\test\artifact_service.pyshowed@srcas an agent and the rest as plain text, and the file picker couldn't match a Windows basename; the chip, beautify and search paths now recognize complete Windows, UNC and drive paths, including escaped spaces and quoted paths, and preserve the literal token so chip widths stay right
Screenshots

