Configure human-in-the-loop gating for AI agent review

review-agent-governance — Setup

by wshobson · MIT license · ★ 39,857 on GitHub · updated Sep 21

review-agent-governance — Setup cover

Configure human-in-the-loop gating for AI agent review actions in Claude Code. Use when setting up a project where an agent may post PR reviews, comments, merges, or edit CI configuration, and you want a cryptographically auditable…

---
name: review-agent-setup
description: Configure human-in-the-loop gating for AI agent review actions in Claude Code. Use when setting up a project where an agent may post PR reviews, comments, merges, or edit CI configuration, and you want a cryptographically auditable approval trail with Cedar-enforced gates.
---

# review-agent-governance — Setup

Gate AI agent review actions (PR reviews, comments, merges, CI edits) behind
explicit human approval. Every attempt, approved or denied, produces an
Ed25519-signed receipt.

## When to use this plugin

Install it in projects where a Claude Code agent:

- Reviews, comments on, or merges pull requests (`gh pr review`, `gh pr merge`)
- Triages issues (`gh issue comment`, `gh issue close`)
- Publishes releases (`gh release create`)

Overview

Gate AI agent review actions (PR reviews, comments, merges, CI edits) behind explicit human approval. Every attempt, approved or denied, produces an Ed25519-signed receipt.

Manual install (npx, ZIP)
Claude Codenpx skills add wshobson/agents --skill review-agent-setup -g -a claude-code
Claude Code (manual)mkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/wshobson/agents/tar.gz/4236bb91f839 \ | tar -xz -C ~/.claude/skills --strip-components=4 agents-4236bb91f839/plugins/review-agent-governance/skills/review-agent-setup
Windows (PowerShell)New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/8d89931500a281de856b/review-agent-setup.zip" -OutFile "$env:TEMP\review-agent-setup.zip"; Expand-Archive "$env:TEMP\review-agent-setup.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude.ai / desktopDownload the ZIP and upload it under Settings → Capabilities → Skills.
Codex, Cursor, other agentsPoint them at SKILL.md. The other files are plain text.

Connects with Agent Alley MCP · agentalley.io/mcp

Files included

  • SKILL.md5.1 KB
Read the files here
wshobson/4236bb91 file
Shared references3SKILL.md reads these from elsewhere in the repo. Not in the ZIP.Get them on GitHub ↗
SKILL.md
Show the full text171 lines

review-agent-governance — Setup

Gate AI agent review actions (PR reviews, comments, merges, CI edits) behind explicit human approval. Every attempt, approved or denied, produces an Ed25519-signed receipt.

When to use this plugin

Install it in projects where a Claude Code agent:

  • Reviews, comments on, or merges pull requests (gh pr review, gh pr merge)
  • Triages issues (gh issue comment, gh issue close)
  • Publishes releases (gh release create)
  • Modifies CI configuration (.github/workflows/, .gitlab-ci.yml)
  • Pushes to protected branches (main, master, release, production)
  • Posts to external notification surfaces (Slack webhooks, Discord)

If the agent is only doing local file edits and running tests, this plugin is overkill. Use protect-mcp for general tool-call policy enforcement and skip this one.

One-time setup

1. Install the plugin
claude plugin install wshobson/agents/review-agent-governance
2. Copy the default policy to your project
cp .claude/plugins/review-agent-governance/policies/review-agent-governance.cedar \
   ./review-governance.cedar

You can edit this file to match your project's specific rules. See ../agents/review-policy-author.md for guidance on authoring review policies.

3. Create a receipts directory and sign key
mkdir -p ./review-receipts
echo "./review-receipts/" >> .gitignore
echo "./review-governance.key" >> .gitignore
echo "./.review-approved" >> .gitignore

The first invocation of protect-mcp sign will create the key. Commit the public key from the first receipt so auditors can verify later.

Per-session workflow

The Cedar policy denies review-surface actions unconditionally. To approve a specific action, open an approval window before it and close it after.

Flag file (simplest)
# Before the action you want to approve
touch ./.review-approved

# Let Claude Code run the review / comment / merge

# Immediately after
rm ./.review-approved
Slash command (from within Claude Code)
/approve-review "Reviewing PR #123 authored by contributor X"

This creates ./.review-approved with the given reason embedded as a note, and writes a human-approved receipt to the chain. A follow-up rm is still needed to close the window.

Dry-run everything (force full policy evaluation)

If you want every tool call to go through Cedar with no approval bypass:

export REVIEW_APPROVAL_FLAG=./.never-approve

Any tool call matching a forbid rule will be denied; approved windows have no effect. Useful for CI or for a locked-down audit run.

Verifying the chain

List all receipts:

ls -la ./review-receipts/

Verify the entire chain offline:

npx @veritasacta/verify ./review-receipts/*.json

Exit 0 means every receipt is authentic and the chain is intact. Exit 1 means one receipt has been tampered with. Exit 2 means a receipt is malformed.

Look at recent denials:

/list-pending

Within Claude Code this slash command walks the receipt chain and prints any recent decision: deny entries with the tool name, command pattern, and timestamp.

Example: approving a PR review

# 1. Human reviews the agent's proposed comment
$ /list-pending
  Recent denials:
  - 2026-04-17T14:23:01Z  Bash "gh pr review 42 --approve --body 'LGTM'"
  - 2026-04-17T14:23:02Z  Bash "gh pr comment 42 --body 'Looking good'"

# 2. Human decides the first one is appropriate, approves it
$ /approve-review "Approving LGTM on PR 42 after visual inspection"
  ./.review-approved created

# 3. Agent retries the action; this time it succeeds
$ agent: gh pr review 42 --approve --body "LGTM"
  [receipt: rec_XXX, decision=allow, reason=human_approved]

# 4. Human closes the window
$ rm ./.review-approved

Every step is in the receipt chain. The chain is offline-verifiable for regulators, counterparties, or downstream auditors who want to confirm that no review action bypassed the human gate.

Composing with protect-mcp

If both plugins are installed, each plugin's hooks/hooks.json registers its own PreToolUse hook, and Claude Code runs both on every tool call:

{ "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/hooks/evaluate.sh" }

Each evaluate.sh reads tool_name and tool_input from the hook payload on stdin (Claude Code sets no TOOL_NAME variable) and evaluates its own policy: ./protect.cedar for protect-mcp and ./review-governance.cedar here.

Both hooks must pass for the tool call to proceed. Cedar deny in either policy blocks it.

Standards

  • Ed25519 — RFC 8032 (digital signatures)
  • JCS — RFC 8785 (deterministic JSON canonicalization)
  • Cedar — AWS's open authorization policy language
  • IETF draft — draft-farley-acta-signed-receipts
1---
2name: review-agent-setup
3description: Configure human-in-the-loop gating for AI agent review actions in Claude Code. Use when setting up a project where an agent may post PR reviews, comments, merges, or edit CI configuration, and you want a cryptographically auditable approval trail with Cedar-enforced gates.
4---
5 
6# review-agent-governance — Setup
7 
8Gate AI agent review actions (PR reviews, comments, merges, CI edits) behind
9explicit human approval. Every attempt, approved or denied, produces an
10Ed25519-signed receipt.
11 
12## When to use this plugin
13 
14Install it in projects where a Claude Code agent:
15 
16- Reviews, comments on, or merges pull requests (`gh pr review`, `gh pr merge`)
17- Triages issues (`gh issue comment`, `gh issue close`)
18- Publishes releases (`gh release create`)
19- Modifies CI configuration (`.github/workflows/`, `.gitlab-ci.yml`)
20- Pushes to protected branches (`main`, `master`, `release`, `production`)
21- Posts to external notification surfaces (Slack webhooks, Discord)
22 
23If the agent is only doing local file edits and running tests, this plugin is
24overkill. Use `protect-mcp` for general tool-call policy enforcement and skip
25this one.
26 
27## One-time setup
28 
29### 1. Install the plugin
30 
31```bash
32claude plugin install wshobson/agents/review-agent-governance
33```
34 
35### 2. Copy the default policy to your project
36 
37```bash
38cp .claude/plugins/review-agent-governance/policies/review-agent-governance.cedar \
39 ./review-governance.cedar
40```
41 
42You can edit this file to match your project's specific rules. See
43`../agents/review-policy-author.md` for guidance on authoring review
44policies.
45 
46### 3. Create a receipts directory and sign key
47 
48```bash
49mkdir -p ./review-receipts
50echo "./review-receipts/" >> .gitignore
51echo "./review-governance.key" >> .gitignore
52echo "./.review-approved" >> .gitignore
53```
54 
55The first invocation of `protect-mcp sign` will create the key. Commit the
56public key from the first receipt so auditors can verify later.
57 
58## Per-session workflow
59 
60The Cedar policy denies review-surface actions unconditionally. To approve
61a specific action, open an approval window before it and close it after.
62 
63### Flag file (simplest)
64 
65```bash
66# Before the action you want to approve
67touch ./.review-approved
68 
69# Let Claude Code run the review / comment / merge
70 
71# Immediately after
72rm ./.review-approved
73```
74 
75### Slash command (from within Claude Code)
76 
77```
78/approve-review "Reviewing PR #123 authored by contributor X"
79```
80 
81This creates `./.review-approved` with the given reason embedded as a note,
82and writes a human-approved receipt to the chain. A follow-up `rm` is still
83needed to close the window.
84 
85### Dry-run everything (force full policy evaluation)
86 
87If you want every tool call to go through Cedar with no approval bypass:
88 
89```bash
90export REVIEW_APPROVAL_FLAG=./.never-approve
91```
92 
93Any tool call matching a forbid rule will be denied; approved windows have
94no effect. Useful for CI or for a locked-down audit run.
95 
96## Verifying the chain
97 
98List all receipts:
99 
100```bash
101ls -la ./review-receipts/
102```
103 
104Verify the entire chain offline:
105 
106```bash
107npx @veritasacta/verify ./review-receipts/*.json
108```
109 
110Exit 0 means every receipt is authentic and the chain is intact. Exit 1
111means one receipt has been tampered with. Exit 2 means a receipt is
112malformed.
113 
114Look at recent denials:
115 
116```
117/list-pending
118```
119 
120Within Claude Code this slash command walks the receipt chain and prints
121any recent `decision: deny` entries with the tool name, command pattern,
122and timestamp.
123 
124## Example: approving a PR review
125 
126```bash
127# 1. Human reviews the agent's proposed comment
128$ /list-pending
129 Recent denials:
130 - 2026-04-17T14:23:01Z Bash "gh pr review 42 --approve --body 'LGTM'"
131 - 2026-04-17T14:23:02Z Bash "gh pr comment 42 --body 'Looking good'"
132 
133# 2. Human decides the first one is appropriate, approves it
134$ /approve-review "Approving LGTM on PR 42 after visual inspection"
135 ./.review-approved created
136 
137# 3. Agent retries the action; this time it succeeds
138$ agent: gh pr review 42 --approve --body "LGTM"
139 [receipt: rec_XXX, decision=allow, reason=human_approved]
140 
141# 4. Human closes the window
142$ rm ./.review-approved
143```
144 
145Every step is in the receipt chain. The chain is offline-verifiable for
146regulators, counterparties, or downstream auditors who want to confirm
147that no review action bypassed the human gate.
148 
149## Composing with protect-mcp
150 
151If both plugins are installed, each plugin's `hooks/hooks.json` registers its
152own PreToolUse hook, and Claude Code runs both on every tool call:
153 
154```json
155{ "type": "command", "command": "\"${CLAUDE_PLUGIN_ROOT}\"/hooks/evaluate.sh" }
156```
157 
158Each `evaluate.sh` reads `tool_name` and `tool_input` from the hook payload on
159stdin (Claude Code sets no `TOOL_NAME` variable) and evaluates its own policy:
160`./protect.cedar` for protect-mcp and `./review-governance.cedar` here.
161 
162Both hooks must pass for the tool call to proceed. Cedar deny in either
163policy blocks it.
164 
165## Standards
166 
167- **Ed25519** — RFC 8032 (digital signatures)
168- **JCS** — RFC 8785 (deterministic JSON canonicalization)
169- **Cedar** — AWS's open authorization policy language
170- **IETF draft** — [draft-farley-acta-signed-receipts](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/)
171 
View all files on GitHub →

Details

Updated
Sep 21, 2026
License
MIT
Stars on the repo
★ 39,857
Checked
Source
wshobson/agents ↗
Creator
wshobson · 179 listings
View creator

Similar skills

See all →
SkillTests in real browsers via Chrome DevTools MCPBrowser testing with devtoolsaddyosmani/agent-skills · by addyosmaniTests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.★ 98.7k GitHub starsMCPThis MCP server attempts to exercise all the featuresEverything MCP Servermodelcontextprotocol/servers · by modelcontextprotocolThis MCP server attempts to exercise all the features of the MCP protocol. It is not intended to be a useful server, but rather a test…★ 90.5k GitHub starsMCPA Model Context Protocol server that provides web contentFetch MCP Servermodelcontextprotocol/servers · by modelcontextprotocolA Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content…★ 90.5k GitHub starsMCPNode.js server implementing Model Context ProtocolFilesystem MCP Servermodelcontextprotocol/servers · by modelcontextprotocolNode.js server implementing Model Context Protocol (MCP) for filesystem operations.★ 90.5k GitHub starsSkillAbout libraries, frameworks, API referencesContext7 MCPupstash/context7 · by upstashThis skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.★ 62.3k GitHub starsSkillUses Chrome DevTools via MCP for efficient debuggingChromeDevTools/chrome-devtools-mcp · by ChromeDevToolsUses Chrome DevTools via MCP for efficient debugging, troubleshooting and browser automation. Use when debugging web pages, automating browser interactions, analyzing performance, or inspecting network requests. This skill does not apply to `--slim` mode (MCP configuration).★ 52.4k GitHub stars

More from wshobson

SkillMaster C/.NET backend development patterns for buildingwshobson/agents · by wshobsonMaster C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures.★ 39.9k GitHub starsSkillImplement WCAG 2.2 compliant interfaces with mobileAccessibility compliancewshobson/agents · by wshobsonImplement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences.★ 39.9k GitHub starsSkillMaster Material Design 3 and Jetpack Compose patternsAndroid Mobile Designwshobson/agents · by wshobsonMaster Material Design 3 and Jetpack Compose patterns for building native Android apps. Use when designing Android interfaces, implementing Compose UI, or following Google's Material Design guidelines.★ 39.9k GitHub starsSkillMigrate from AngularJS to Angular using hybrid modeAngular migrationwshobson/agents · by wshobsonMigrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code.★ 39.9k GitHub starsSkillUnderstand anti-reversing, obfuscationAnti reversing techniqueswshobson/agents · by wshobsonUnderstand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use this skill when analyzing malware evasion techniques, when implementing anti-debugging protections for CTF challenges, when reverse engineering packed binaries, or when building security research tools that need to detect virtualized environments.★ 39.9k GitHub starsSkillBuild production Apache Airflow DAGs with best practicesApache Airflow DAG Patternswshobson/agents · by wshobsonBuild production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs.★ 39.9k GitHub stars