Skip to content
Back to skills

Omc Gh Auto Review

ASecurity

Auto-review GitHub PRs where you are a requested reviewer and post AI review comments. Not for interactive review (omc-gh-review), issue triage, or Azure DevOps repos.

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 5, 2026
ai-agentsbashnodeazurecode-reviewgitapidevops

Works with

  • api

Security analysis

A100/100

Scanned October 5, 2026

npx -y skills add RobinNorberg/oh-my-copilot --skill omc-gh-auto-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Omc Gh Auto Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Omc Gh Auto Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/robinnorberg-omc-gh-auto-review/badge)](https://www.skillsdirectory.com/skills/robinnorberg-omc-gh-auto-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: omc-gh-auto-review
description: "Auto-review GitHub PRs where you are a requested reviewer and post AI review comments. Not for interactive review (omc-gh-review), issue triage, or Azure DevOps repos."
---

# OMC GitHub Auto Review

Automatically review GitHub pull requests where the current user is requested as a reviewer. Reads `.omg/config.json` for connection settings, discovers pending PRs, fetches diffs, spawns a code-reviewer agent to analyse changes, and posts structured inline comments back to each PR as a batched review.

**When this skill is invoked, immediately execute the workflow below. Do not only restate or summarize these instructions back to the user.**

## Trigger Patterns

- "auto review"
- "auto-review prs"
- "review my assigned prs"
- "automated pr review"
- "omc-gh-auto-review"

---

## Step 1: Load Configuration

Read `.omg/config.json`:

```bash
node -e "const f=require('fs');try{process.stdout.write(f.readFileSync('.omg/config.json','utf8'))}catch{console.log('NOT_FOUND')}"
```

Extract from the `github` key:
- `owner` — GitHub owner (org or user)
- `repo` — repository name

Also read optional `github.autoReview` settings (apply defaults when absent):

| Setting | Default | Purpose |
|---------|---------|---------|
| `severityThreshold` | `"MEDIUM"` | Minimum severity to post as inline comment |
| `autoSubmit` | `false` | Automatically submit approve/request-changes |
| `maxFilesPerReview` | `50` | Cap on number of files analysed per PR |
| `excludePatterns` | `["*.lock", "*.min.js", "*.generated.*"]` | Glob patterns for files to skip |

If config is NOT_FOUND or missing the `github` key: tell the user to run `/oh-my-copilot:omc-gh-setup` first and stop.

---

## Step 2: Find PRs Requesting My Review

```bash
gh pr list --repo {owner}/{repo} --search "review-requested:@me" --state open --json number,title,author,headRefName --limit 10 2>&1
```

Present a table of pending PRs:

```
### PRs Pending Your Review ({N})
| # | Title | Author | Branch | Age |
|---|-------|--------|--------|-----|
| #42 | Add retry logic | alice | feat/retry | 3d |
| #43 | Fix login timeout | bob | fix/login | 1d |
```

**If no PRs are found:** report "No PRs pending your review" and stop.

**If invoked with a specific PR number** (e.g. `omc-gh-auto-review 42`): skip discovery and process that PR directly, regardless of reviewer assignment.

---

## Step 3: Fetch PR Diff and Changed Files

For each PR to be reviewed:

### 3a. Fetch the unified diff

```bash
gh pr diff {prNumber} --repo {owner}/{repo} 2>&1
```

### 3b. Retrieve PR details for context

```bash
gh pr view {prNumber} --repo {owner}/{repo} --json title,body,files,headRefOid 2>&1
```

### 3c. Filter files

Parse file paths from the diff headers (lines beginning `diff --git a/`). Apply `excludePatterns` from config — skip any file whose path matches one of those glob patterns.

If the remaining file count exceeds `maxFilesPerReview`, warn the user:

```
Warning: PR #{number} touches {total} files. Reviewing first {maxFilesPerReview} by diff order.
```

Then truncate to the first `maxFilesPerReview` files.

### 3d. Read full file content

For each included file, read the full content using the Read tool to provide complete context to the reviewer agent.

---

## Step 4: Spawn Code Reviewer Agent

For each PR, spawn an `oh-my-copilot:code-reviewer` agent via the Agent tool with the following payload:

- Full unified diff of the PR
- Full content of each changed file (post-filter)
- PR title and description
- Instruction to output **only** a structured JSON findings array:

```json
[
  {
    "file": "src/auth/login.ts",
    "line": 42,
    "severity": "HIGH",
    "message": "Unhandled null return from getUser() will throw at runtime.",
    "suggestion": "Add a null check: `if (!user) return { error: 'USER_NOT_FOUND' };`"
  }
]
```

Each finding must contain:

| Field | Type | Values |
|-------|------|--------|
| `file` | string | Relative file path |
| `line` | number | Line number in the post-merge file |
| `severity` | string | `CRITICAL`, `HIGH`, `MEDIUM`, or `LOW` |
| `message` | string | What is wrong and why |
| `suggestion` | string | Concrete fix or improvement |

Parse the agent's response and extract the findings array. If parsing fails, treat the raw response as a general summary and proceed to Step 5 in summary-only mode.

---

## Step 5: Post Findings as Batched Review

Apply the `severityThreshold` filter: only post findings whose severity meets or exceeds the threshold.

Severity order (highest to lowest): `CRITICAL > HIGH > MEDIUM > LOW`

### 5a. Batch all inline comments into a single review submission

GitHub's review API allows submitting multiple inline comments as one review — this produces a single notification instead of one per comment.

Build the review payload:

```bash
gh api repos/{owner}/{repo}/pulls/{prNumber}/reviews \
  --method POST \
  -f event=COMMENT \
  -f body="{summary}" \
  --input comments.json \
  2>&1
```

Where `comments.json` contains:

```json
{
  "event": "COMMENT",
  "body": "## Code Review Summary — PR #{number}\n\n| Severity | Count |\n|----------|-------|\n| CRITICAL | {n} |\n| HIGH | {n} |\n| MEDIUM | {n} |\n| LOW | {n} |\n\n**Files reviewed:** {N} of {total}\n\n---\n*Automated review by oh-my-copilot*",
  "comments": [
    {
      "path": "src/auth/login.ts",
      "line": 42,
      "body": "**[HIGH]** Unhandled null return from getUser() will throw at runtime.\n\n**Suggestion:** Add a null check: `if (!user) return { error: 'USER_NOT_FOUND' };`\n\n---\n*Automated review by oh-my-copilot*"
    }
  ]
}
```

Format each inline comment body:

```
**[{severity}]** {message}

**Suggestion:** {suggestion}

---
*Automated review by oh-my-copilot*
```

Report progress:

```
Posted {N} inline comments on PR #{number} ({CRITICAL}C / {HIGH}H / {MEDIUM}M / {LOW}L)
```

---

## Step 6: Submit Review Decision (Optional)

Only execute this step if `autoSubmit` is `true` in config.

Determine the decision from the highest severity finding:

| Highest Severity | Decision | gh Command |
|-----------------|----------|------------|
| `CRITICAL` | Request changes | `gh pr review {n} --request-changes --body "{reason}"` |
| `HIGH` | Request changes | `gh pr review {n} --request-changes --body "{reason}"` |
| `MEDIUM` | Comment only | `gh pr review {n} --comment --body "{summary}"` |
| `LOW` or none | Approve | `gh pr review {n} --approve --body "LGTM"` |

Report:

```
Submitted review on PR #{number}: {Approved / Changes Requested / Commented}
```

If `autoSubmit` is false, inform the user of the recommended decision and let them choose.

---

## Error Handling

| Error | Action |
|-------|--------|
| `.omg/config.json` missing | Tell user to run `/oh-my-copilot:omc-gh-setup` first |
| `gh auth` required | Prompt user to authenticate; stop execution |
| No PRs for review | Report "No PRs pending your review" and stop |
| PR diff too large (>`maxFilesPerReview` files) | Warn and review first N files per `maxFilesPerReview` config |
| Code reviewer agent fails | Post summary-only comment without inline findings |
| Review submission fails (rate limit) | Wait 2s and retry once; if still failing, post as individual comments |
| Permission denied | Warn user they may need write access to review |

---

## Configuration Reference

`.omg/config.json` with optional `autoReview` section:

```json
{
  "github": {
    "owner": "RobinNorberg",
    "repo": "oh-my-copilot",
    "defaultBranch": "dev",
    "autoReview": {
      "severityThreshold": "MEDIUM",
      "autoSubmit": false,
      "maxFilesPerReview": 50,
      "excludePatterns": [
        "*.lock",
        "*.min.js",
        "*.generated.*"
      ]
    }
  }
}
```

All `autoReview` fields are optional. Defaults are applied when the key is absent.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.