Skip to main content
command CX Codex

approve-review — Claude Code command: open a review approval window

Opens a window where review actions skip policy checks. Handy when the agent needs to approve a PR or a comment.

Install into Claude Code · Plugin marketplace All methods and platforms ↓
/plugin marketplace add wshobson/agents
/plugin install review-agent-governance@claude-code-workflows
Open on GitHub

What approve-review does

The command drops a flag file at ./.review-approved in your project root. While that file exists, the Cedar policy rules for review-surface actions (PR reviews, comments, merges, CI edits) are bypassed. Everything else still runs through the policy.

Pass a reason string and it lands in the flag file and in a timestamped entry under ./review-receipts/approvals/. Reasons with spaces survive intact because the argument is captured as $ARGUMENTS and JSON-escaped through python3 before writing. The approval log is not signed. Only tool-call receipts flow through the protect-mcp signer, and those receipts do not show that the window was open.

The window stays open until you run rm ./.review-approved or restart the session. Forget to close it and the agent can take further review actions without prompting. Close it right after the approved action finishes.

What it helps with

  • approve a PR review without confirming every step
  • record why an approval happened with a timestamp
  • let a comment or merge skip the policy rules
  • keep an approval trail in a separate log
  • close the window right after the action

Example prompts for the agent

  • /approve-review "Approving LGTM on PR #42 after visual inspection"
  • /approve-review
  • /list-pending

How to install approve-review

1Plugin marketplace

/plugin marketplace add wshobson/agents
/plugin install review-agent-governance@claude-code-workflows

2Manually: put the files in place

.claude/commands/approve-review.md

Call it with /approve-review. For all projects use ~/.claude/commands/

Questions about approve-review

How do I install approve-review in Claude?

Add the marketplace: /plugin marketplace add wshobson/agents, then install the plugin: /plugin install review-agent-governance@claude-code-workflows. The command file lands at .claude/commands/approve-review.md.

What does approve-review do?

It creates the ./.review-approved flag file in the project root, which opens a window where review-surface actions bypass the policy rules. If you gave a reason, it writes that into the flag and into ./review-receipts/approvals/.

How is the approval log different from signed receipts?

Entries under ./review-receipts/approvals/ are not signed. Only tool-call receipts go through the protect-mcp signer, and they do not record that the window was open.

Source text

approve-review.md · MIT
---
description: "Open a review-action approval window by creating the ./.review-approved flag file. Takes an optional reason string that is recorded in the flag file and an unsigned approval log."
argument-hint: "[reason for approval]"
---

# Approve Review

Open a human-approval window for review-surface actions (PR reviews,
comments, merges, CI edits). The window stays open until you remove the
flag file with `rm ./.review-approved` or restart the session.

## Usage

```
/approve-review "Approving LGTM on PR #42 after visual inspection"
/approve-review                     # no reason, still opens the window
```

## What this does

1. Creates a `./.review-approved` flag file in the project root.
2. If the user provided a reason, writes it into the file and into a
   timestamped entry under `./review-receipts/approvals/`.
3. Prints a confirmation with the timestamp and, if provided, the reason.
4. Reminds the user to close the window with `rm ./.review-approved` as
   soon as the approved action completes.

## Implementation

Run this in a shell. Capture the full user argument as `$ARGUMENTS`
(the marketplace slash-command convention) so a reason with spaces is
preserved verbatim.

```bash
REASON="$ARGUMENTS"
TS="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
FLAG="./.review-approved"

# JSON-escape the reason so quotes, backslashes, newlines do not break
# the approval-record JSON below.
REASON_ESCAPED="$(printf '%s' "$REASON" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))')"

# Write the flag file (human-readable key=value, not JSON).
{
  echo "approved_at=$TS"
  if [ -n "$REASON" ]; then
    echo "reason=$REASON"
  fi
} > "$FLAG"

# Record the approval. This is a plain JSON log file, NOT a signed
# receipt. The README explicitly notes that approval records are not
# signed by protect-mcp; only the PostToolUse tool-call receipts flow
# through the signer.
mkdir -p ./review-receipts/approvals
cat > "./review-receipts/approvals/$TS.json" <<JSON
{
  "approved_at": "$TS",
  "reason": $REASON_ESCAPED,
  "flag_file": "$FLAG"
}
JSON

# Confirmation to the user
echo "Approval window opened at $TS"
if [ -n "$REASON" ]; then
  echo "Reason: $REASON"
fi
echo ""
echo "Close the window with: rm $FLAG"
echo "The next tool call will be permitted without policy evaluation."
```

## What to show the user

```
Approval window opened at 2026-04-17T12:34:56Z
Reason: Approving LGTM on PR #42 after visual inspection

Close the window with: rm ./.review-approved
The next tool call will be permitted without policy evaluation.

Remember: every tool call that runs in the window still gets a signed
receipt, but the receipt does not show that the window was open.
The approval log records the reason and time, and it is not signed.
```

## Important notes

- **This does NOT grant blanket approval.** It opens a short window during
  which the Cedar policy's review-surface rules are bypassed. Everything
  else still runs through the policy.
- **Every action in the window still gets a signed receipt.** The receipt
  does not record the window or the reason. Only the unsigned approval log
  under `./review-receipts/approvals/` does.
- **The window stays open until closed.** If you forget to `rm ./.review-approved`,
  the agent could make additional review actions without prompting. Close
  the window immediately after the approved action.
- **The flag file is session-scoped.** A new Claude Code session in the same
  project directory starts clean if the file was removed at the end of the
  previous session.

## References

- Plugin README: `../README.md`
- Policy authoring: `../agents/review-policy-author.md`
- Close the window: `rm ./.review-approved`
- See calls blocked in this session: `/list-pending`

© Tom Farley · MIT · wshobson/agents

Similar slash commands

All slash commands for Code review and refactoring →

From the same set342

The whole set →

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor