Human gate
Runs the human-verification lane of an agent loop, and proves review happened before work is called done.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/human-gate, including the files SKILL.md points to. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit alirezarezvani/claude-skills/engineering/human-gate/skills/human-gate#main ~/.claude/skills/human-gateFor one project only, change the path to .claude/skills/human-gate. This skill also uses human-gate-context.md, plan.md, human_gate.py, review_page_builder.py, feedback_parser.py — copying SKILL.md alone won't be enough. See the folder on GitHub.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Source of Human gate
Show the full text101 lines
| name | description | license | metadata |
|---|---|---|---|
| human-gate | Runs the human-verification lane of an agent loop, and proves review happened before work is called done. Builds a single-file HTML review page, collects batched feedback as a structured artifact instead of chat prose, and runs a gate that refuses to close while a BLOCKER is open, the reviewer is unnamed, or nobody has reviewed at all. Use when a plan, spec, RFC, report, landing page, migration, or any irreversible action needs human sign-off before shipping, or on requests such as 'get sign-off', 'have someone check this', 'hold until reviewed', 'needs approval first'. NOT for making AI text sound human (use content-humanizer or behuman). NOT for reviewing code diffs (use md-review or code-reviewer). | MIT | version: 1.0.0 author: Alireza Rezvani category: engineering updated: 2026-08-09 |
Human Gate
You are the part of the loop that refuses to let an agent mark its own homework.
Machine verification answers "do the checks pass?" — engineering/agent-harness does that.
This answers what no script can: has a person looked at this, and are their objections
resolved? Feedback becomes a machine-parseable artifact rather than a message — anchored,
severity-graded, countable — and a gate either passes or names what is still open.
Before starting, establish: which artifact (.md/.html), who the named reviewer is (a
person, not "the team" — G3 enforces it), whether the work is reversible, and whether a human
is available now. Read human-gate-context.md first if it exists.
The loop
S=engineering/human-gate/skills/human-gate/scripts
python3 $S/human_gate.py open plan.md --launch # build page, start round N → END YOUR TURN
python3 $S/human_gate.py status plan.md # non-blocking: 0 clear·2 blocked·3 collect·4 none
python3 $S/human_gate.py collect plan.md --output json # batch.v1 — apply every item
python3 $S/human_gate.py close plan.md # exit 2 = NOT done
human_gate.py --sample runs the whole loop, refusals included, in ~1s. It drives
review_page_builder.py (Markdown/HTML → single-file anchored page that makes no network
request of its own and sanitizes reviewed HTML — on*, javascript:, iframe dropped) and
feedback_parser.py (sidecar → batch.v1, quotes checked against raw and rendered text).
The sidecar
Feedback lands in <artifact>.review.md. The page exports it; anyone can also write it by hand
in any editor — which keeps this working over SSH and in CI. Worked example and JSON contract
are in assets/.
<!-- human-gate:v1 target=plan.md round=1 -->
reviewer: reza
## BLOCKER b2
> We expect a 40% lift in activation.
No source, and it drives the whole plan. Cite it or cut it.
Severities BLOCKER / MAJOR / MINOR / NIT (matching markdown-html/md-review, from Google's
code-review guidance), plus NOTE, APPROVE, and EDIT — a replacement the reviewer
already wrote, as - before: / + after: lines.
Gate rules
| Refuses to close when | |||
|---|---|---|---|
| G1 | no round collected | G4 | sidecar changed after the last collect |
| G2 | a BLOCKER or MAJOR is open | G5 | round cap exhausted → escalate, never pass |
| G3 | no named reviewer | G6 | waiver used without a recorded reason |
| G7 | the round carries unresolved integrity problems — a mistyped severity silently downgrades to NIT, so a real blocker can be lost to a typo |
Overrides must be explicit — close plan.md --waive "<reason>" — but G1 is never waivable:
a waiver accepts objections a reviewer raised; it cannot stand in for review happening.
Hard rules
- Never report done while
closeexits 2. Say what is open instead. - Never invent a reviewer name to satisfy G3. No reviewer is the finding.
- Never paraphrase an EDIT's
after— verbatim, or a human was silently overruled. Apply it to whatever generates the artifact too, or it dies on the next build. - Never block-poll for a human. Hand over the path and end the turn;
opendetects a headless host. Rounds are capped and exhaustion escalates. - Never auto-fetch and run unpinned code. The richer editor at
petergyang/human-reviewis opt-in, asked-first, and always pinned (npx -y [email protected]) — unpinnednpx -yruns whatever was published most recently. Itspollblocks and it rewrites HTML in place, so wrap both. It changes the editor, never the gate. Seeaudit/human-review-2026-08/. - Never treat the review page as source of truth. It is a viewing surface.
Forcing questions
One at a time when scope is fuzzy: Who, by name, signs off? · What would make them reject it outright? (name it before reading — Klein's pre-mortem) · Is this reversible? (if not, require explicit APPROVE, not merely no blockers) · The artifact or its generator? (both) · How many rounds is this worth? · Is a human available now? (if not, hand over and stop). Two consecutive NIT-only rounds means it is done — say so rather than opening a third.
Related skills
engineering/agent-harness — machine verification; this is the human lane it lacks.
markdown-html/md-review — renders a code review to HTML, one-way; use when the agent
reviews, human-gate when a person does. engineering/grill-me — interrogates a plan before
an artifact exists. content-humanizer/behuman — human voice, not approval.
Reasoning lives in references/ — human-in-the-loop canon, feedback batching, loop discipline.
Conceptual derivation of the batched-review pattern from
petergyang/human-review (MIT © 2026 Peter Yang);
no upstream code is used — stdlib Python, no server, non-blocking, plus a gate upstream lacks.
| 1 | |
| 2 | name human-gate |
| 3 | description "Runs the human-verification lane of an agent loop, and proves review happened before work is called done. Builds a single-file HTML review page, collects batched feedback as a structured artifact instead of chat prose, and runs a gate that refuses to close while a BLOCKER is open, the reviewer is unnamed, or nobody has reviewed at all. Use when a plan, spec, RFC, report, landing page, migration, or any irreversible action needs human sign-off before shipping, or on requests such as 'get sign-off', 'have someone check this', 'hold until reviewed', 'needs approval first'. NOT for making AI text sound human (use content-humanizer or behuman). NOT for reviewing code diffs (use md-review or code-reviewer)." |
| 4 | license MIT |
| 5 | metadata |
| 6 | version 1.0.0 |
| 7 | author Alireza Rezvani |
| 8 | category engineering |
| 9 | updated 2026-08-09 |
| 10 | |
| 11 | |
| 12 | # Human Gate |
| 13 | |
| 14 | You are the part of the loop that refuses to let an agent mark its own homework. |
| 15 | Machine verification answers *"do the checks pass?"* — `engineering/agent-harness` does that. |
| 16 | This answers what no script can: **has a person looked at this, and are their objections |
| 17 | resolved?** Feedback becomes a machine-parseable artifact rather than a message — anchored, |
| 18 | severity-graded, countable — and a gate either passes or names what is still open. |
| 19 | **Before starting**, establish: which artifact (`.md`/`.html`), who the named reviewer is (a |
| 20 | person, not "the team" — G3 enforces it), whether the work is reversible, and whether a human |
| 21 | is available now. Read `human-gate-context.md` first if it exists. |
| 22 | |
| 23 | ## The loop |
| 24 | |
| 25 | |
| 26 | S=engineering/human-gate/skills/human-gate/scripts |
| 27 | |
| 28 | python3 $S/human_gate.py open plan.md --launch # build page, start round N → END YOUR TURN |
| 29 | python3 $S/human_gate.py status plan.md # non-blocking: 0 clear·2 blocked·3 collect·4 none |
| 30 | python3 $S/human_gate.py collect plan.md --output json # batch.v1 — apply every item |
| 31 | python3 $S/human_gate.py close plan.md # exit 2 = NOT done |
| 32 | |
| 33 | |
| 34 | `human_gate.py --sample` runs the whole loop, refusals included, in ~1s. It drives |
| 35 | `review_page_builder.py` (Markdown/HTML → single-file anchored page that makes no network |
| 36 | request of its own and sanitizes reviewed HTML — `on*`, `javascript:`, `iframe` dropped) and |
| 37 | `feedback_parser.py` (sidecar → `batch.v1`, quotes checked against raw *and* rendered text). |
| 38 | |
| 39 | ## The sidecar |
| 40 | |
| 41 | Feedback lands in `<artifact>.review.md`. The page exports it; anyone can also write it by hand |
| 42 | in any editor — which keeps this working over SSH and in CI. Worked example and JSON contract |
| 43 | are in `assets/`. |
| 44 | |
| 45 | |
| 46 | <!-- human-gate:v1 target=plan.md round=1 --> |
| 47 | reviewer: reza |
| 48 | |
| 49 | ## BLOCKER b2 |
| 50 | > We expect a 40% lift in activation. |
| 51 | No source, and it drives the whole plan. Cite it or cut it. |
| 52 | |
| 53 | |
| 54 | Severities **BLOCKER / MAJOR / MINOR / NIT** (matching `markdown-html/md-review`, from Google's |
| 55 | code-review guidance), plus **NOTE**, **APPROVE**, and **EDIT** — a replacement the reviewer |
| 56 | already wrote, as `- before:` / `+ after:` lines. |
| 57 | |
| 58 | ## Gate rules |
| 59 | |
| 60 | | | Refuses to close when | | | |
| 61 | |---|---|---|---| |
| 62 | | **G1** | no round collected | **G4** | sidecar changed after the last collect | |
| 63 | | **G2** | a BLOCKER or MAJOR is open | **G5** | round cap exhausted → **escalate**, never pass | |
| 64 | | **G3** | no named reviewer | **G6** | waiver used without a recorded reason | |
| 65 | | **G7** | the round carries unresolved integrity problems — a mistyped severity silently downgrades to NIT, so a real blocker can be lost to a typo | | | |
| 66 | |
| 67 | Overrides must be explicit — `close plan.md --waive "<reason>"` — but **G1 is never waivable**: |
| 68 | a waiver accepts objections a reviewer raised; it cannot stand in for review happening. |
| 69 | |
| 70 | ## Hard rules |
| 71 | |
| 72 | **Never report done while `close` exits 2.** Say what is open instead. |
| 73 | **Never invent a reviewer name** to satisfy G3. No reviewer *is* the finding. |
| 74 | **Never paraphrase an EDIT's `after`** — verbatim, or a human was silently overruled. Apply |
| 75 | it to whatever *generates* the artifact too, or it dies on the next build. |
| 76 | **Never block-poll for a human.** Hand over the path and end the turn; `open` detects a |
| 77 | headless host. Rounds are capped and exhaustion escalates. |
| 78 | **Never auto-fetch and run unpinned code.** The richer editor at `petergyang/human-review` |
| 79 | is opt-in, asked-first, and always pinned (`npx -y [email protected]`) — unpinned `npx -y` |
| 80 | runs whatever was published most recently. Its `poll` blocks and it rewrites HTML in place, |
| 81 | so wrap both. It changes the editor, never the gate. See `audit/human-review-2026-08/`. |
| 82 | **Never treat the review page as source of truth.** It is a viewing surface. |
| 83 | |
| 84 | ## Forcing questions |
| 85 | One at a time when scope is fuzzy: **Who, by name, signs off?** · **What would make them reject |
| 86 | it outright?** (name it before reading — Klein's pre-mortem) · **Is this reversible?** (if not, |
| 87 | require explicit APPROVE, not merely no blockers) · **The artifact or its generator?** (both) · |
| 88 | **How many rounds is this worth?** · **Is a human available now?** (if not, hand over and stop). |
| 89 | Two consecutive NIT-only rounds means it is done — say so rather than opening a third. |
| 90 | |
| 91 | ## Related skills |
| 92 | **`engineering/agent-harness`** — machine verification; this is the human lane it lacks. |
| 93 | **`markdown-html/md-review`** — renders a code review *to* HTML, one-way; use when the agent |
| 94 | reviews, human-gate when a person does. **`engineering/grill-me`** — interrogates a plan before |
| 95 | an artifact exists. **`content-humanizer`**/**`behuman`** — human *voice*, not approval. |
| 96 | |
| 97 | Reasoning lives in `references/` — human-in-the-loop canon, feedback batching, loop discipline. |
| 98 | Conceptual derivation of the batched-review pattern from |
| 99 | [`petergyang/human-review`] (MIT © 2026 Peter Yang); |
| 100 | no upstream code is used — stdlib Python, no server, non-blocking, plus a gate upstream lacks. |
| 101 |
Discussion
Browse more free Claude skills.