Cc-skills hooks

Install/uninstall gh-tools hooks to ~/.claude/settings.json. TRIGGERS - gh hooks, github hooks, install gh hook, webfetch guard hook.

install
source · Clone the upstream repo
git clone https://github.com/terrylica/cc-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/terrylica/cc-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/gh-tools/skills/hooks" ~/.claude/skills/terrylica-cc-skills-hooks-18ae26 && rm -rf "$T"
manifest: plugins/gh-tools/skills/hooks/SKILL.md
source content

gh-tools Hooks Manager

Manage gh-tools hook installation in

~/.claude/settings.json
.

This hook soft-blocks WebFetch requests to github.com URLs and suggests using the

gh
CLI instead for better data access.

Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

Actions

ActionDescription
status
Check hook installation status and dependencies
install
Add gh-tools hooks to settings.json
uninstall
Remove gh-tools hooks from settings.json

Why Use gh CLI Instead of WebFetch?

AspectWebFetchgh CLI
AuthenticationNonegh auth token
Data formatHTML scrapingNative JSON API
Rate limitsStrict (anonymous)Higher (authenticated)
PaginationManualAutomatic
MetadataLimitedFull (labels, etc.)

Execution

Parse

$ARGUMENTS
and run the management script:

/usr/bin/env bash << 'GH_TOOLS_HOOKS_SCRIPT'
set -euo pipefail

ACTION="${ARGUMENTS:-status}"

# Auto-detect plugin root
detect_plugin_root() {
    if [[ -n "${CLAUDE_PLUGIN_ROOT:-}" ]]; then
        echo "$CLAUDE_PLUGIN_ROOT"
        return
    fi
    local marketplace="$HOME/.claude/plugins/marketplaces/cc-skills/plugins/gh-tools"
    if [[ -d "$marketplace/hooks" ]]; then
        echo "$marketplace"
        return
    fi
    local cache_base="$HOME/.claude/plugins/cache/cc-skills/gh-tools"
    if [[ -d "$cache_base" ]]; then
        local latest
        latest=$(ls -1 "$cache_base" 2>/dev/null | grep -E '^[0-9]+\.[0-9]+' | sort -V | tail -1)
        if [[ -n "$latest" && -d "$cache_base/$latest/hooks" ]]; then
            echo "$cache_base/$latest"
            return
        fi
    fi
    echo ""
}

PLUGIN_DIR="$(detect_plugin_root)"
if [[ -z "$PLUGIN_DIR" ]]; then
    echo "ERROR: Cannot detect gh-tools plugin installation" >&2
    exit 1
fi

bash "$PLUGIN_DIR/scripts/manage-hooks.sh" "$ACTION"
GH_TOOLS_HOOKS_SCRIPT

Post-Action Reminder

After install/uninstall operations:

IMPORTANT: Restart Claude Code session for changes to take effect.

The hooks are loaded at session start. Modifications to settings.json require a restart.

Examples

# Check current installation status
/gh-tools:hooks status

# Install the WebFetch enforcement hook
/gh-tools:hooks install

# Uninstall hooks
/gh-tools:hooks uninstall

Troubleshooting

IssueCauseSolution
jq not foundjq not installed
brew install jq
Plugin root not foundPlugin not installedRe-install via marketplace
Hooks not workingSession not restartedRestart Claude Code session
gh not authenticatedgh CLI not set upRun
gh auth login
WebFetch still allowedHook not triggeredCheck settings.json has hooks entry

Reference

Post-Execution Reflection

After this skill completes, check before closing:

  1. Did the command succeed? — If not, fix the instruction or error table that caused the failure.
  2. Did parameters or output change? — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
  3. Was a workaround needed? — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.

Only update if the issue is real and reproducible — not speculative.