gh-protect — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited gh-protect (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Standalone GitHub protection management. Wraps bin/gh-integration.sh in two modes: --check (read-only audit) and apply (write). Lets users manage branch protection, tag rulesets, signing requirements, and repo-level merge settings independently of bootstrap or doctor.
Guard on gh:
command -v gh && gh auth statusIf either fails, tell the user gh is required for this skill and stop. Unlike other skills that soft-skip, protection management has no useful fallback without gh.
Load the active profile via bin/load-profile.sh <name> (resolves preferences → CLAUDE.md markers → "default" fallback).
If the user names a specific profile, use that instead.
Run the read-only check regardless of whether the user asked to audit or apply — the delta informs what apply would change:
bin/gh-integration.sh --target <cwd> --profile <name> --checkOutput conforms to schemas/protection-audit.schema.json. Show the user a summary table:
| Area | Expected | Actual | Drift |
|---|---|---|---|
Branch protection (branches[]) | from profile | from GitHub API | critical / warn / ok |
| Tag rulesets | .github.tag_protection_pattern | GitHub Rulesets API | critical / warn / ok |
| CODEOWNERS gate | .github.require_code_owner_reviews | branch protection | critical / warn / ok |
| Signing | .github.require_signed_commits/tags | branch protection + local git config | critical / warn / ok |
| Repo settings | .github.allow_*_merge, delete_branch_on_merge | repo API | warn / ok |
| Security signals | Dependabot, secret scanning, push protection, code scanning | repo API | info |
If everything is ok, report "protection matches profile" and stop (no apply needed).
If any drift exists at critical or warn level, ask:
"Apply protection rules to match the profile? This will update branch protection via the GitHub API."
On confirmation:
bin/gh-integration.sh --target <cwd> --profile <name>The apply mode never downgrades stricter remote rules — it only tightens. Relay this constraint so the user understands that loosening protection requires manual GitHub UI changes.
Output is a GhIntegrationResult JSON (schemas/gh-integration-result.schema.json). Report:
applied[] — rules that were created or updated.noop[] — rules already at or above the expected level.errors[] — rules that failed to apply (permission issues, etc.).After audit-only or audit+apply, end with:
errors[] that need manual attention.doctor skill (includes protectionas one signal among many).
bootstrap-project skill (appliesprotection as part of the full pipeline).
apply the updated expectations.
gh-integration.sh neverdowngrades; the user must change the rule via the GitHub UI or API directly.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.