{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pr-reviewer",
    "name": "pr-reviewer",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/briancolinger/pr-reviewer",
    "canonicalUrl": "https://clawhub.ai/briancolinger/pr-reviewer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pr-reviewer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pr-reviewer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/pr-review.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/pr-reviewer"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/pr-reviewer",
    "agentPageUrl": "https://openagent3.xyz/skills/pr-reviewer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pr-reviewer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pr-reviewer/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "PR Reviewer",
        "body": "Automated code review for GitHub pull requests. Analyzes diffs for security issues, error handling gaps, style problems, and test coverage."
      },
      {
        "title": "Prerequisites",
        "body": "gh CLI installed and authenticated (gh auth status)\nRepository access (read at minimum, write for posting comments)\nOptional: golangci-lint for Go linting, ruff for Python linting"
      },
      {
        "title": "Quick Start",
        "body": "# Review all open PRs in current repo\nscripts/github/pr-reviewer.sh check\n\n# Review a specific PR\nscripts/github/pr-reviewer.sh review 42\n\n# Post review as GitHub comment\nscripts/github/pr-reviewer.sh post 42\n\n# Check status of all open PRs\nscripts/github/pr-reviewer.sh status\n\n# List unreviewed PRs (useful for heartbeat/cron integration)\nscripts/github/pr-reviewer.sh list-unreviewed"
      },
      {
        "title": "Configuration",
        "body": "Set these environment variables or the script auto-detects from the current git repo:\n\nPR_REVIEW_REPO — GitHub repo in owner/repo format (default: detected from gh repo view)\nPR_REVIEW_DIR — Local checkout path for lint (default: git root of cwd)\nPR_REVIEW_STATE — State file path (default: ./data/pr-reviews.json)\nPR_REVIEW_OUTDIR — Report output directory (default: ./data/pr-reviews/)"
      },
      {
        "title": "Directories Written",
        "body": "PR_REVIEW_STATE (default: ./data/pr-reviews.json) — Tracks reviewed PRs and their HEAD SHAs\nPR_REVIEW_OUTDIR (default: ./data/pr-reviews/) — Markdown review reports"
      },
      {
        "title": "What It Checks",
        "body": "CategoryIconExamplesSecurity🔴Hardcoded credentials, AWS keys, secrets in codeError Handling🟡Discarded errors (Go _ :=), bare except: (Python), unchecked Close()Risk🟠panic() calls, process.exit()Style🔵fmt.Print/print()/console.log in prod, very long linesTODOs📝TODO, FIXME, HACK, XXX markersTest Coverage📊Source files changed without corresponding test changes"
      },
      {
        "title": "Smart Re-Review",
        "body": "Tracks HEAD SHA per PR. Only re-reviews when new commits are pushed. Use review <PR#> to force re-review."
      },
      {
        "title": "Report Format",
        "body": "Reports are saved as markdown files in the output directory. Each report includes:\n\nPR metadata (author, branch, changes)\nCommit list\nChanged file categorization by language/type\nAutomated diff findings with file, line, category, and context\nTest coverage analysis\nLocal lint results (when repo is checked out locally)\nSummary verdict: 🔴 SECURITY / 🟡 NEEDS ATTENTION / 🔵 MINOR NOTES / ✅ LOOKS GOOD"
      },
      {
        "title": "Heartbeat/Cron Integration",
        "body": "Add to a periodic check (heartbeat, cron job, or CI):\n\nUNREVIEWED=$(scripts/github/pr-reviewer.sh list-unreviewed)\nif [ -n \"$UNREVIEWED\" ]; then\n  scripts/github/pr-reviewer.sh check\nfi"
      },
      {
        "title": "Extending",
        "body": "The analysis patterns in the script are organized by language. Add new patterns by appending to the relevant pattern list in the analyze_diff() function:\n\n# Add a new Go pattern\ngo_patterns.append((r'^\\+.*os\\.Exit\\(', 'RISK', 'Direct os.Exit() — consider returning error'))"
      }
    ],
    "body": "PR Reviewer\n\nAutomated code review for GitHub pull requests. Analyzes diffs for security issues, error handling gaps, style problems, and test coverage.\n\nPrerequisites\ngh CLI installed and authenticated (gh auth status)\nRepository access (read at minimum, write for posting comments)\nOptional: golangci-lint for Go linting, ruff for Python linting\nQuick Start\n# Review all open PRs in current repo\nscripts/github/pr-reviewer.sh check\n\n# Review a specific PR\nscripts/github/pr-reviewer.sh review 42\n\n# Post review as GitHub comment\nscripts/github/pr-reviewer.sh post 42\n\n# Check status of all open PRs\nscripts/github/pr-reviewer.sh status\n\n# List unreviewed PRs (useful for heartbeat/cron integration)\nscripts/github/pr-reviewer.sh list-unreviewed\n\nConfiguration\n\nSet these environment variables or the script auto-detects from the current git repo:\n\nPR_REVIEW_REPO — GitHub repo in owner/repo format (default: detected from gh repo view)\nPR_REVIEW_DIR — Local checkout path for lint (default: git root of cwd)\nPR_REVIEW_STATE — State file path (default: ./data/pr-reviews.json)\nPR_REVIEW_OUTDIR — Report output directory (default: ./data/pr-reviews/)\nDirectories Written\nPR_REVIEW_STATE (default: ./data/pr-reviews.json) — Tracks reviewed PRs and their HEAD SHAs\nPR_REVIEW_OUTDIR (default: ./data/pr-reviews/) — Markdown review reports\nWhat It Checks\nCategory\tIcon\tExamples\nSecurity\t🔴\tHardcoded credentials, AWS keys, secrets in code\nError Handling\t🟡\tDiscarded errors (Go _ :=), bare except: (Python), unchecked Close()\nRisk\t🟠\tpanic() calls, process.exit()\nStyle\t🔵\tfmt.Print/print()/console.log in prod, very long lines\nTODOs\t📝\tTODO, FIXME, HACK, XXX markers\nTest Coverage\t📊\tSource files changed without corresponding test changes\nSmart Re-Review\n\nTracks HEAD SHA per PR. Only re-reviews when new commits are pushed. Use review <PR#> to force re-review.\n\nReport Format\n\nReports are saved as markdown files in the output directory. Each report includes:\n\nPR metadata (author, branch, changes)\nCommit list\nChanged file categorization by language/type\nAutomated diff findings with file, line, category, and context\nTest coverage analysis\nLocal lint results (when repo is checked out locally)\nSummary verdict: 🔴 SECURITY / 🟡 NEEDS ATTENTION / 🔵 MINOR NOTES / ✅ LOOKS GOOD\nHeartbeat/Cron Integration\n\nAdd to a periodic check (heartbeat, cron job, or CI):\n\nUNREVIEWED=$(scripts/github/pr-reviewer.sh list-unreviewed)\nif [ -n \"$UNREVIEWED\" ]; then\n  scripts/github/pr-reviewer.sh check\nfi\n\nExtending\n\nThe analysis patterns in the script are organized by language. Add new patterns by appending to the relevant pattern list in the analyze_diff() function:\n\n# Add a new Go pattern\ngo_patterns.append((r'^\\+.*os\\.Exit\\(', 'RISK', 'Direct os.Exit() — consider returning error'))"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/briancolinger/pr-reviewer",
    "publisherUrl": "https://clawhub.ai/briancolinger/pr-reviewer",
    "owner": "briancolinger",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pr-reviewer",
    "downloadUrl": "https://openagent3.xyz/downloads/pr-reviewer",
    "agentUrl": "https://openagent3.xyz/skills/pr-reviewer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pr-reviewer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pr-reviewer/agent.md"
  }
}