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
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.
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.
About
Use cases: productivity, agent-building
Reviews
Write a reviewNo 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
- 0.474score
using-feather-browser
ROI-DANINO
Use whenever an agent will drive a website through the Feather Browser HTTP API — creating a session, navigating, clicking, typing, reading a page, or…
SkillCFreshness: CClaude Code +9 - 0.474score
blog-entry
ROI-DANINO
Write a new Feather Browser blog entry.
SkillCFreshness: CClaude Code +9 - 0.474score
feather-data-extraction
ROI-DANINO
Use when reading or scraping content from a web page through Feather Browser — pulling text, links, structured fields, or a list of items.
SkillCFreshness: CClaude Code +9 - 0.474score
feather-form-filling
ROI-DANINO
Use when filling out a web form through Feather Browser — signup, login, checkout, multi-field input, dropdowns, date pickers, or any "enter these values and…
SkillCFreshness: CClaude Code +9 - 0.471score
feather-operator
ROI-DANINO
How to drive Feather Browser over its local HTTP API — endpoint discovery, the golden loop, element targeting, sessions/profiles, honest result reporting.
SkillCFreshness: CClaude Code +9 - 0.470score
integrating-providers
ROI-DANINO
Adds new AI providers to claude-council, configures provider API settings, troubleshoots provider connections, and documents the provider script interface.
SkillCFreshness: CClaude Code +9 - 0.470score
querying-council-with-agents
ROI-DANINO
Executes agent-enhanced council queries by spawning parallel Claude subagents that each query a provider, evaluate response quality, ask follow-up questions…
SkillCFreshness: CClaude Code +9 - 0.469score
research
ROI-DANINO
Use when encountering an unfamiliar API, a potential better approach, a library update, an error pattern, or any technical uncertainty that warrants…
SkillCFreshness: CClaude Code +9 - 0.469score
fb-stop
ROI-DANINO
Feather Browser /stop command.
SkillCFreshness: CClaude Code +9 - 0.464score
fb-start
ROI-DANINO
Feather Browser /start command.
SkillCFreshness: CClaude Code +9
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
- Repository
- github.com/ROI-DANINO/feather-browser
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ROI-DANINO
- 0.474score
feather-data-extraction
ROI-DANINO
Use when reading or scraping content from a web page through Feather Browser — pulling text, links, structured fields, or a list of items.
SkillCFreshness: CClaude Code +9 - 0.474score
feather-form-filling
ROI-DANINO
Use when filling out a web form through Feather Browser — signup, login, checkout, multi-field input, dropdowns, date pickers, or any "enter these values and…
SkillCFreshness: CClaude Code +9 - 0.474score
using-feather-browser
ROI-DANINO
Use whenever an agent will drive a website through the Feather Browser HTTP API — creating a session, navigating, clicking, typing, reading a page, or…
SkillCFreshness: CClaude Code +9 - 0.474score
blog-entry
ROI-DANINO
Write a new Feather Browser blog entry.
SkillCFreshness: CClaude Code +9 - 0.471score
feather-operator
ROI-DANINO
How to drive Feather Browser over its local HTTP API — endpoint discovery, the golden loop, element targeting, sessions/profiles, honest result reporting.
SkillCFreshness: CClaude Code +9 - 0.470score
querying-council-with-agents
ROI-DANINO
Executes agent-enhanced council queries by spawning parallel Claude subagents that each query a provider, evaluate response quality, ask follow-up questions…
SkillCFreshness: CClaude Code +9
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.
Cite this page
feather-human-handoff skill. Agent Mart. https://agentmart.dev/skills/roi-danino-feather-human-handoff (last updated 2026-10-24)