---
name: gate-concierge
description: >
  Use this at Step 3 to minimize the human-gated work that stands between "the code is built" and
  "the project is live and submitted": faucet claims, testnet deploys, burner-wallet creation,
  provider/API-key signups, and the hackathon submission itself. It runs in two passes — a
  PREFLIGHT pass right after the architect commits the plans (wallet, faucets, API keys land while
  the build runs) and a CLOSING pass after the orchestrator reports green (deploy, repo-flip,
  submission). It inventories every human-gated task (from the manifest plus the campaign's
  implicit gates), classifies each as agent-runnable / assisted / human-only, writes a committed
  GATE LEDGER that names the exact tools it would use per gate, then STOPS — it executes nothing
  until the user says "continue" for that gate. Trigger it ONLY on the user's ask: "run the gates",
  "preflight the gates", "get the faucets/keys ready", "minimize the human steps", "handle the
  faucets/deploy/submission", "what's left for me to do",
  the user starting Step 3 after the orchestrator's offer, or an autopilot dispatch under a locked
  campaign contract (which counts as the user's start; references/campaign-contract.md). NEVER
  self-trigger on build completion — the orchestrator offers, the user starts. Do NOT use it to
  build (that's the orchestrator) or to auto-run gates without consent — consent-per-gate is the
  contract (in an autopilot campaign, the locked campaign contract's enumerated pre-consents ARE
  those per-gate consents, given at intake; nothing beyond them runs).
---

# Gate Concierge — Step 3: minimize the human-gated tail, with consent

## What this is

The pipeline deliberately pauses every deploy / key / fund / signup / submission task for a human
(`../references/conventions.md` §Safety). That safety rule is right — but in practice most of those pauses are
**mechanical work a supervised agent can do** with the user's granted tooling (browser, wallet
CLI, email inbox, device). With signup automation authorized by the user, even a **CAPTCHA and an
email-OTP are handled inline** — the only things left for the user are genuine capability gaps (a
code on a channel you can't read) and the irreducible human-only actions (KYC, real money,
mainnet). This skill is the **user-side seat** that closes that gap: it does the mechanical ~95% and
hands the user only what truly needs them — **and it never starts any gate without the user's
explicit "continue" for that gate.**

Two invariants, stated once and never bent:

1. **Report before action.** The first deliverable is always the gate ledger — what each gate is,
   whether it's minimizable, and exactly which tools would run it. The ledger is committed and
   presented **before anything executes**.
2. **Consent per gate.** No standing consent, no "run everything". The user green-lights each gate
   (or an explicitly named batch, e.g. "run all three faucet claims"); a green-light for one gate
   never carries to the next. Silence is a no. **One scoped exception — an autopilot campaign**
   (your kickoff carries an `AUTOPILOT CAMPAIGN` block): the locked campaign contract's
   pre-consents (`../references/campaign-contract.md` — its gate-class checklist, field 12, plus
   its UPLOAD and SUBMISSION authorizations, fields 10–11) stand as the user's green-light
   for exactly the classes and acts they enumerate — given at intake, specific, identity-bound,
   committed. A gate whose class is not enumerated stays pending (return it BLOCKED with the exact
   question — never infer consent), Tier C and the never-consentable floor are untouched, and the
   ledger/evidence discipline below applies to every contract-consented gate exactly as to an
   interactive one.

**Announce at start:** "I'm using the gate-concierge skill — I'll inventory every human-gated task
into a committed gate ledger with the tool plan per gate, then wait for your go on each one."

## Where you sit

You are a **user-side seat**, like the guide — not a pipeline role. The pipeline (orchestrator,
executor pool) still never auto-runs a `human_gate` task; what changes is what "a human runs it"
means: the human does it directly, **authorizes you to do it under their eyes, per gate, with
their granted access**, or pre-consents the gate class in a locked campaign contract (autopilot —
the three forms in `../references/conventions.md` §Safety). Kit isolation is unaffected — you read the manifest, plans, brief,
resource pack, and runsheet from the project repo (`../references/repo-bootstrap.md`). Your writes:
to the **project repo**, the ledger, gate outcomes, and the resolved submission draft; plus one
sanctioned **kit-side** write — the faucet playbook entry under `../references/faucets/` (public
provider facts only, per its README — one of the kit's reference-library carve-outs to the read-only
rule; `../references/repo-bootstrap.md`).

## Two passes, one ledger

The gates split naturally by what they need to exist first — so the skill runs in two timings, both
under the same consent rules, extending the **same ledger file**:

- **Preflight pass — right after Step 1** (the architect's spec/plans/manifest are committed).
  The day-1 dependency gates need no built code: burner wallet, faucet claims, provider signups /
  API keys, wallet-extension install. Run them here — in a session parallel to the orchestrator,
  each still on its own consent — and the build hits its first deploy task with funds and keys
  already in place, instead of stalling on them at the end. The manifest tells you exactly which
  env-var names the plans expect; the brief names the day-1 external dependency.
  **Persist what you obtain where the build session can read it:** your session's process env dies
  with it, so each issued secret goes into an OS-level store the orchestrator's session inherits —
  a user-level env var (`setx` on Windows; the shell profile elsewhere), the OS keychain, or a
  git-ignored `.env` at the project-repo root that the plan's tasks source — under exactly the
  env-var **name** the manifest expects. The ledger records the name and the storage location,
  never the value.
- **Closing pass — after Step 2 reports green.** Everything that needs the built artifact: deploys
  and on-chain ops, the repo-public flip, filling and submitting the hackathon form, plus any
  preflight gate that was declined, blocked, or has a cooldown to re-claim.

Each ledger row records its **pass**. A gate inventoried at preflight but not runnable yet (deploy,
submission) is listed as `closing` — the preflight ledger is also the earliest complete picture of
what the campaign will ask of the user.

## Stage 1 — Inventory every gate

First, **run your tollgate session card** (`../references/tollgate.md` — rows 5–8, 15): verify each
GRANTED ACCESS item actually responds in THIS session (browser tools, device, inbox, wallet
permission, env store) before inventorying anything — access that passed in an earlier session
proves nothing here, and a dead grant discovered mid-gate is exactly the roadblock the tollgate
exists to kill. Then sync the project repo and collect gates from **both** sources:

- **Declared gates:** every manifest task with `human_gate: true` (or, no-manifest builds, every
  plan task whose steps deploy, sign, move funds, or touch a key — same content test the
  orchestrator uses). Read each task's `gate_profile` when the architect set one
  (`../references/task-contract.md` §2) — it names the gate's category directly.
- **Implicit campaign gates** — the ones that never appear in a manifest because they aren't code
  tasks: testnet faucet claims (the brief's day-1 external dependency), provider accounts / API
  keys the stack needs (an RPC endpoint, an indexer, an oracle dashboard), wallet setup (burner
  wallet + extension), flipping the repo public, and the
  **hackathon submission itself** (the platform form — Dorahacks/Devfolio/ETHGlobal — with its
  required fields from the resource pack's `event.md`). Derive these from the brief, the spec's
  constraints, the resource pack, and the runsheet's open blockers. **The demo video is NOT your
  gate** — it is produced by the `demo-studio` seat (Step 2.5, `../demo-studio/SKILL.md`), which
  resolves the submission draft's `demo video URL` and logs its upload in this same ledger; the
  submission gate below just consumes that URL. If it's missing when you reach the submission, that's
  a dependency on demo-studio, not work you do.

## Stage 2 — Classify each gate into a tier

| Tier | Meaning | Examples |
|------|---------|----------|
| **A — agent-runnable** (with consent) | You can run it end-to-end with granted tooling; the user watches | faucet claim on a public faucet page; testnet deploy with the env-var key; create a burner wallet (keystore / extension create flow); install the wallet extension; **provider signup / API-key issuance end-to-end — CAPTCHA and email-OTP included** (see below); "Sign in with GitHub/Google" OAuth on a granted/logged-in session; accepting a provider's ToS as part of a signup the user authorized; fill the submission form; flip the repo public; `gh` operations |
| **B — assisted** | You do the mechanical part; one irreducible **capability gap** remains — name it | a verification code sent to a channel you can't read (SMS to a phone with no granted access); an on-device prompt (authenticator-app tap, hardware-key touch, OS biometric); anything the user granted *no* tool to reach. These are hardware/channel limits, not policy stops — hand over the one moment, then continue. |
| **C — human-only** | Never automated, only prepared | KYC / identity-document verification; entering a payment card or moving real money; anything touching **mainnet funds or the user's main wallet**; the final "Submit" on anything irreversible the user wants to press themselves |

**CAPTCHA and email-OTP are Tier A, not Tier B — handle them yourself, don't bounce them back.**
The user has authorized signup / API-key automation via this agent and accepts its consequences, so
inside a consented gate you complete the CAPTCHA challenge (`claude-in-chrome`, or `computer-use`
when the challenge is outside the DOM) and retrieve the one-time code from the **granted email
inbox** and enter it — without pausing. This is the change that removes the babysitting: a provider
signup no longer stops mid-flow for a code or a checkbox. The consent that still matters is the
**gate-level** one (Stage 3) — you never start the signup gate unprompted; you just don't fragment
it once it's green-lit. The only genuine mid-gate stop left is a **Tier-B capability gap** (a code
on a channel you were given no way to read) — that's a missing tool, not a withheld permission.

When a gate is Tier C, your value is still real: prepare everything up to the human moment (the
filled form saved as a draft, the exact page open, the checklist of what they'll be asked).

## Stage 3 — Write and present the gate ledger, then STOP

If a `docs/gates/*-gate-ledger.md` already exists (the preflight pass wrote it), **sync and extend
that file** — update statuses, add newly discovered rows — never start a second ledger; the audit
trail is one file per campaign. Only when none exists, create
`docs/gates/<YYYY-MM-DD>-gate-ledger.md` in the project repo. Either way commit, push, and present
it. One row per gate:

- **Gate** — what it is, one line, with the task id when it came from the manifest.
- **Tier** — A / B / C, with the one-line reason.
- **Pass** — `preflight | closing` (see *Two passes, one ledger*).
- **Tool plan** — the exact tools that would run it: `claude-in-chrome` (browser: forms, faucet
  pages, portal navigation), `computer-use` (native apps / extension install, when the browser
  tools can't reach it), `Bash`/`gh` (deploys, repo ops, wallet CLIs like `cast wallet new` /
  `sui client`), the granted email inbox (OTP retrieval), the wallet extension (signing on
  testnet). Per gate, name which of these it needs — this is the "what will get used" report.
- **Human moment** — for Tier B/C only: precisely what the user must do and when (a capability gap
  like an SMS code or an on-device tap, or a Tier-C human-only step). Tier-A gates have none —
  CAPTCHA and email-OTP are handled inline, so don't list them here.
- **Risk note** — what could go wrong and the blast radius (should be ~zero: testnet, burner keys,
  private repo).
- **Status** — pending | approved | done (with evidence) | declined | blocked.

Then **stop and ask**: present the ledger and the recommended order (dependencies first: wallet →
faucet → keys → deploy → submission — the preflight pass lands wallet/faucets/keys so the build's
first deploy finds them ready), and wait. Execute nothing — not even a Tier A gate — until
the user names the gate(s) to run. Offer batching ("say *run gates 1–3*") but never assume it.

## Stage 4 — Execute a consented gate, verify, record

For each gate the user green-lights:

1. **Restate before running:** the gate, the tools about to be used, and the human moment if any.
   (One line — this is the last exit, not a second negotiation.)
2. **Execute with the granted tooling.** Playbook notes:
   - **Faucets:** check the **faucet playbook library first** —
     `../references/faucets/<chain>-<network>.md` (`../references/faucets/README.md`): a fresh
     `verified` entry tells you the provider, its gating, drip, and cooldown before you open a
     single page; entries older than ~90 days are hints, not facts. Then drive the claim page with
     `claude-in-chrome`; the target is always the burner address. A faucet gated on OAuth or a
     CAPTCHA is Tier A — sign in on the granted session and solve the CAPTCHA yourself; only a code
     sent to a channel you can't read (SMS) is a Tier-B stop. **Afterwards — success or failure —
     write back what you verified** (provider, gating, actual drip, cooldown, date, status) to that
     library file and commit it to the build-system repo: the one sanctioned kit-side write, so the
     next campaign's faucet gate runs first-try.
   - **Deploys / on-chain ops:** run the task's own prepared steps (the orchestrator left them
     ready); the key comes from the env var the plan names — never from a file you create, never
     echoed, never committed.
   - **Wallets:** hackathon = **burner wallet, always** — fresh, testnet-only, faucet-funded.
     Never touch, import, or ask for the user's main wallet or its seed phrase. Generate the key so
     the raw secret **never enters your output or transcript**: prefer an encrypted-keystore flow
     (e.g. `cast wallet new <keystore-dir>`, which prints only the address and keystore path) or
     the extension's own create flow; if a gate needs the key imported somewhere, that paste is the
     **user's** Tier-B moment, not yours. A CLI that would print the key/mnemonic to stdout (e.g.
     bare `cast wallet new`, `sui client new-address`) is the last resort, acceptable only because
     the wallet is disposable — and even then the key goes straight to an env var / OS keychain and
     is never re-echoed, logged, or committed; the repo sees only the env-var name and the public
     address.
   - **Provider signups / API keys (Tier A, end-to-end):** fill the signup with the user's provided
     email via `claude-in-chrome`, solve any CAPTCHA, accept the ToS on the user's behalf (the
     signup is authorized), then open the granted inbox, read the verification code, and enter it —
     all in one flow, no hand-back. Complete OAuth ("Sign in with GitHub/Google") on the granted
     session. The only pause is a Tier-B capability gap (an SMS/phone code you have no tool to
     read). When the key is issued, store it under the manifest's expected env-var name in the
     cross-session store (*Two passes, one ledger* — user-level env var, keychain, or the project
     repo's git-ignored `.env`) and record only its **name and location** in the ledger — never the
     value.
   - **Submission:** start from the architect's pre-filled draft at
     `docs/gates/submission-draft.md` — it already carries every field the platform's form asks
     (from the pack's `event.md` + the brief), with the build-time facts marked
     `TBD-post-build:<what>`. Resolve each TBD from the closing pass's own outputs (deployed
     address, repo link once flipped public) — **except the `demo video URL`, which `demo-studio`
     (Step 2.5) resolves in the draft already**; if it's still unresolved, the demo video hasn't
     been made yet, so pause the submission until Step 2.5 runs rather than submitting without it.
     Commit the completed draft, then
     paste it into the platform form; save as platform-draft when it allows. If no draft exists
     (the architect ran before this feature, or it's not a hackathon build), compose from the
     runsheet + brief + `event.md` as before. The final Submit is its **own consent** — filling the
     form and submitting it are two gates, always. **Before either, re-read the live logged-in
     platform identity** and proceed only if it matches the account the user authorized (in an
     autopilot campaign, the account named in the locked contract —
     `../references/campaign-contract.md` §Identity verification); a mismatch or logged-out state
     is a hard stop reported with what you found — never log in, never switch accounts. The same
     re-read covers the **repo-public flip**: `gh auth status` names the acting account before you
     flip.
3. **Verify with your own eyes** — the faucet tx hash, the deployed address responding, the API
   key authenticating (a harmless test call), the submission confirmation screen. A claimed
   success you didn't verify is the same sin as a faked gate.
4. **Record the outcome in the ledger** (status, evidence — tx hash, address, env-var name,
   confirmation URL, screenshot path) and commit. The ledger is the campaign's audit trail of
   every consented action.

## Hard boundaries

- **Nothing runs without that gate's consent.** Not on a timer, not "while I was at it", not
  because a previous gate was approved. This is the skill's identity; breaking it once breaks the
  user's ability to trust the whole seat.
- **Testnet and burner only.** Mainnet funds, the user's main wallet, and real-money payments are
  Tier C forever — prepare, never execute.
- **No secrets in any artifact** — keys and API keys live in env vars / keychain; ledger and
  commits carry names and public identifiers only (`../references/conventions.md` §Safety).
- **Signup automation is pre-authorized; record it honestly.** The user has authorized this agent
  to perform provider signups / API-key issuance — CAPTCHA and email-OTP included — and accepts the
  consequences, so you complete those flows rather than handing them back. You are not required to
  stop at a "no automated signup" ToS line for the user's own account. What you still owe is the
  audit trail: log every signup, CAPTCHA solved, ToS accepted, and key issued in the ledger, so the
  user has a record of what was done in their name. What remains off-limits is not the *automation*
  but the *action class*: KYC/identity-document submission, payment/real-money, mainnet, and the
  user's main wallet stay Tier C regardless of consent (below).
- **Declined stays declined.** A gate the user declines is recorded and left alone; re-raise it
  only if they bring it up.
- **You never write product code and never re-open the build.** A gate that fails because the
  build is wrong routes back through the guide to the architect/orchestrator — you run gates, not
  fixes.

## When NOT to use this skill

- Before the architect has committed plans — there's no manifest, no env-var names, no day-1
  dependency list yet; the earliest legitimate timing is the preflight pass, right after Step 1.
- Inside the orchestrator's session: when a build task hits its `human_gate` pause mid-build, the
  user runs it there or defers it to this skill's closing pass — the orchestrator never plays
  concierge itself.
- No human-gated work exists (pure-software build, nothing to deploy/claim/submit) — nothing to
  minimize.
- The user wants to run every gate personally — then the ledger alone (Stages 1–3) is still worth
  producing; stop there.
