Skip to content
Agentmart
Submit a tool

feather-human-handoff

Use when a Feather Browser task needs a human to step in — solving a CAPTCHA, completing MFA/2FA, approving a consent dialog, or any step the agent literally…

Skill by ROI-DANINO

IndexedApache-2.0
Write a review

Chalk Labs

Need help deploying feather-human-handoff?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/roi-danino-feather-human-handoff

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Use when a Feather Browser task needs a human to step in — solving a CAPTCHA, completing MFA/2FA, approving a consent dialog, or any step the agent literally cannot do alone. Covers await-human, the on-page Resume banner, headed sessions, auto-detect via resumeOn, and the critical banner-dies-on-navigation limit. Triggers on "captcha", "pause for a human", "human in the loop", "MFA", "2FA", "verification code", "let me approve", "I'll do this part manually".

Use cases: productivity, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/feather-human-handoff

What's inside

Skill name
feather-human-handoff
Description
Use when a Feather Browser task needs a human to step in — solving a CAPTCHA, completing MFA/2FA, approving a consent dialog, or any step the agent literally cannot do alone. Covers await-human, the on-page Resume banner, headed sessions, auto-detect via resumeOn, and the critical banner-dies-on-navigation limit. Triggers on "captcha", "pause for a human", "human in the loop", "MFA", "2FA", "verification code", "let me approve", "I'll do this part manually".
License
Apache-2.0
Instructions
107 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Feather: Human Handoff

Builds on **using-feather-browser**. When the agent hits a wall only a human can clear, pause cleanly
with `await-human` instead of failing or guessing.

## Spotting the wall in observe

A CAPTCHA/consent wall is a *typed signal*, not a mystery: the `observe` response shows a blocking
overlay (`blocking: true`, high `coverPct`), page elements turn `state: "covered"` with `occludedBy`
set, and the only `actionable` entries carry an `overlayIndex` (they belong to the overlay). When you
see that pattern: stop, don't flail — try `dismiss` once if it's a consent banner, else hand off.
Note: `dismiss` handles same-origin iframe overlays, but **cannot reach buttons inside
cross-origin iframes** — and third-party CAPTCHA frames are exactly that. Those are the handoff
case.

## Requirements

- **Use a headed session** so the human can see and act: create with
  `"browserMode": "chromium-headed-cdp"`. A headless session has no window for the human to use.
- The server must have been started from a shell with the desktop display env
  (`WAYLAND_DISPLAY`/`DISPLAY`) or no window appears.

## Pause for a human

```http
POST /v1/sessions/:sessionId/await-human
{ "reason": "Solve the CAPTCHA, then click Resume", "banner": true }
```
- Injects an on-page **Resume** banner. Blocks until the human clicks it, an optional `resumeOn`
  signal fires, or `timeoutMs` elapses.
- Returns `resumedBy: "human" | "signal" | "timeout"`. Always branch on this — `timeout` means the
  human never acted; don't proceed as if they did.
- `banner: false` keeps the pause off-page (stealth) — only do this if you also provide `resumeOn`,
  or the pause has no visible way to resume.

## ⚠️ The one critical limit: the banner dies on navigation

The Resume banner is injected DOM. **A full page navigation destroys it** — so there's nothing left
to click and the call dangles until timeout.

- ✅ **Works:** in-place steps that stay on the same page — CAPTCHA, a consent checkbox, a
  same-page modal.
- ❌ **Breaks:** any step where the human's action causes a redirect — submitting a login, an OAuth
  hop, an MFA page that reloads. This is exactly the login/MFA case.

### Handling navigation steps

**Option A — auto-detect the landed page with `resumeOn`** (preferred for login/MFA). Instead of
relying on the banner click, tell Feather what the *post*-step page looks like and let it resume
itself when that appears:
```http
POST /v1/sessions/:sessionId/await-human
{
  "reason": "Complete the login in the window",
  "resumeOn": { "target": { "by": "text", "text": "Welcome back" }, "until": "visible" },
  "timeoutMs": 180000
}
```
This survives the navigation because it polls for an end-state, not a DOM banner.

**Option B — split the flow.** Pause *before* the navigating action for any same-page prep, let it
return, then `navigate`/`wait` for the post-login page yourself in a separate step.

## Pattern: CAPTCHA mid-task

```http
POST /v1/sessions/:sessionId/await-human
{ "reason": "Please solve the CAPTCHA shown, then click Resume ▸", "timeoutMs": 120000 }
```
Then check `resumedBy === "human"` before continuing. After resume, **re-observe** — the page
changed under you while you weren't looking; pre-pause refs are stale at best, and if the human's
action navigated they are expired (`REF_EXPIRED`). Act only on fresh refs.

## Typed codes & push — the MFA Handler (shipped, 5b)

For a **TOTP/SMS code** or a **"tap yes on your phone" push**, there's a dedicated flow that's better
than a bare `await-human`: the human relays the code on a small local page and Feather types it in —
the agent never sees the raw code, and the agent is frozen (`HUMAN_IN_CONTROL`) until it resolves.

```http
POST /v1/sessions/:sessionId/mfa/challenge
{ "type": "totp", "target": { "by": "css", "selector": "#otp" }, "prompt": "LinkedIn 2FA" }
# push: { "type": "push", "prompt": "Approve the Google sign-in on your phone" }  (no target)
```
- `target` is **required** for `totp`/`sms` (where Feather types the code), **omitted** for `push`.
- The response `localUrl` is token-less; the human gets the real link (with a `humanToken`) on the
  **server console** or **Telegram** (`FEATHER_TELEGRAM_BOT_TOKEN` + `FEATHER_TELEGRAM_CHAT_ID`).
- Poll `GET /v1/sessions/:sessionId/mfa/:challengeId` for `resolved` | `timed-out` (or watch the
  `mfa.challenge.*` SSE events). Branch on `timed-out` — the human never acted.
- Anti-phishing: Feather refuses to type if the page **origin changed** since you created the
  challenge. Create the challenge on the page that actually shows the wall.

**When to use which:** `await-human` = the human does the action in the real browser (CAPTCHA,
consent). MFA challenge = the human just hands over a code/approval and Feather acts. Full contract in
`docs/api-reference.md` → "Multi-Factor Authentication (MFA)".

## Checklist

- [ ] Headed session (`chromium-headed-cdp`)?
- [ ] Will the human's action navigate? → use `resumeOn`, not the bare banner.
- [ ] Branched on `resumedBy` (handled `timeout`)?
- [ ] Re-observed after resume, acting on fresh refs?

(Design background — why the banner is DOM-injected, and the v2 MFA Handler direction — is in
`docs/agent-playbook.md` → "The await-human navigation gotcha".)

From ROI-DANINO/feather-browser, Apache-2.0.

More from ROI-DANINO/feather-browser

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Jun 23, 2026 (4 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from ROI-DANINO

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get feather-human-handoff running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying feather-human-handoff?

CallGet help
Cite this page

feather-human-handoff skill. Agent Mart. https://agentmart.dev/skills/roi-danino-feather-human-handoff (last updated 2026-10-24)