Skip to content
Development
Skill

/gh-protect

Audit or apply GitHub branch protection, tag rulesets, repo security settings, and signing requirements based on the active profile. TRIGGER when the user says "check branch protection", "audit GitHub protection", "apply branch protection", "enforce branch protection", "set up

From plugin
nyann
641 skills41 commands3 hooks
Install
$ npx -y skills add thettwe/nyann --skill gh-protect --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/gh-protect

Context preview

The summary Claude sees to decide when to auto-load this skill.

Audit or apply GitHub branch protection, tag rulesets, repo security settings, and signing requirements based on the active profile. TRIGGER when the user says "check branch protection", "audit GitHub protection", "apply branch protection", "enforce branch protection", "set up

SKILL.md

gh-protect.SKILL.md
name: gh-protect
description: >
  Audit or apply GitHub branch protection, tag rulesets, repo security
  settings, and signing requirements based on the active profile.
  TRIGGER when the user says "check branch protection", "audit GitHub
  protection", "apply branch protection", "enforce branch protection",
  "set up branch protection", "configure branch rules", "check tag
  protection", "audit repo security", "apply GitHub settings",
  "enable branch protection", "protection audit", "are my branches
  protected", "/nyann:gh-protect".
  Do NOT trigger on "is this repo healthy" — that's `doctor` (which
  includes a protection check among many other signals).
  Do NOT trigger on "bootstrap this project" — bootstrap applies
  protection as one step of the full pipeline.

gh-protect

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.

1. Pre-flight

Guard on `gh`:

command -v gh && gh auth status

If 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`.

2. Resolve profile

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.

3. Audit first (always)

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> --check

Output 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).

4. Offer to apply (if drift found)

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.).

5. Report

After audit-only or audit+apply, end with:

  • Protection status per branch (protected / unprotected / partial).
  • Tag ruleset status.
  • Any `errors[]` that need manual attention.

When to hand off

  • "Check overall repo health" → `doctor` skill (includes protection

as one signal among many).

  • "Set up this repo from scratch" → `bootstrap-project` skill (applies

protection as part of the full pipeline).

  • "I changed my profile's GitHub settings" → re-run this skill to

apply the updated expectations.

  • "Loosen a protection rule" → explain that `gh-integration.sh` never

downgrades; the user must change the rule via the GitHub UI or API directly.

Read more
Ships withnyann

ငြမ်း is Burmese for scaffolding. Nyann is the Claude Code plugin that picks expert git defaults for your stack — branching, working hooks (Husky / pre-commit.com / lefthook), commits, releases, CI, docs — then keeps the repo on those rails through every PR

Get the whole plugin

Other skills on nyann.