Handoff
Mark a tab for human intervention, inspect the handoff state, then resume automation when the manual step is complete.
CLI wrappers are available:
pinchtab tab handoff <tabId> --reason captcha --timeout-ms 120000pinchtab tab handoff-status <tabId>pinchtab tab resume <tabId> --status completed
pinchtab tab handoff <tabId> --reason captcha --timeout-ms 120000pinchtab tab handoff-status <tabId>pinchtab tab resume <tabId> --status completed
API equivalents:
When a tab is in paused_handoff, action execution routes reject with 409 tab_paused_handoff
until the tab is resumed or the optional handoff timeout expires.
curl -X POST http://localhost:9867/tabs/<tabId>/handoff \ -H "Content-Type: application/json" \ -d '{"reason":"captcha","timeoutMs":120000}'curl http://localhost:9867/tabs/<tabId>/handoffcurl -X POST http://localhost:9867/tabs/<tabId>/resume \ -H "Content-Type: application/json" \ -d '{"status":"completed","resolvedData":{"operator":"human"}}'
curl -X POST http://localhost:9867/tabs/<tabId>/handoff \ -H "Content-Type: application/json" \ -d '{"reason":"captcha","timeoutMs":120000}'curl http://localhost:9867/tabs/<tabId>/handoffcurl -X POST http://localhost:9867/tabs/<tabId>/resume \ -H "Content-Type: application/json" \ -d '{"status":"completed","resolvedData":{"operator":"human"}}'
Notes:
POST /tabs/{id}/handoffsets the tab state topaused_handoffGET /tabs/{id}/handoffreturns the current handoff state, oractivewhen no handoff is set- when a timeout is set, status also includes
expiresAtandtimeoutMs POST /tabs/{id}/resumeclears the handoff state and can carry resume metadata such asstatusorresolvedData- paused tabs reject
/action,/actions, and/macrorequests withtab_paused_handoff - use this for CAPTCHA, 2FA, login approval, or other human-only steps