terrylica

tether

Tether (install/uninstall) gh-tools hooks to ~/.claude/settings.json. Renamed from 'hooks' to avoid clashing with Claude Code's.

terrylica 61 9 Updated 4w ago

Resources

1
GitHub

Install

npx skillscat add terrylica/cc-skills/plugins-gh-tools-skills-tether

Install via the SkillsCat registry.

SKILL.md

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

Action Description
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?

Aspect WebFetch gh CLI
Authentication None gh auth token
Data format HTML scraping Native JSON API
Rate limits Strict (anonymous) Higher (authenticated)
Pagination Manual Automatic
Metadata Limited Full (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
# Note: $CLAUDE_PLUGIN_ROOT is injected into hook/MCP processes only, not skills.
# For skill scripts, use: cc-plugin-root <plugin-name>
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:tether status

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

# Uninstall hooks
/gh-tools:tether uninstall

Troubleshooting

Issue Cause Solution
jq not found jq not installed brew install jq
Plugin root not found Plugin not installed Re-install via marketplace
Hooks not working Session not restarted Restart Claude Code session
gh not authenticated gh CLI not set up Run gh auth login
WebFetch still allowed Hook not triggered Check 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.

Categories