gate-concierge · git:20260710.31c2709 · 2026-07-10 · sha256 1a5b3f82d12826b0
gate-concierge git:20260710.31c2709A
Immutable. This exact content never changes and is served at /api/v1/blob/1a5b3f82d12826b0.
---
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 either does it directly **or authorizes you to do it under their eyes, per gate,
with their granted access**. 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 → deploy → keys → submission), 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.
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.