--- name: 'Fix Broken Links' description: 'Checks changed web files for broken hyperlinks and SEO anchor issues after each Copilot tool use.' tags: ['links', 'seo', 'html', 'markdown', 'post-tool-use'] --- # Fix Broken Links Hook Scans recently-changed web files for broken hyperlinks after each GitHub Copilot tool use. For each broken URL the hook tries common spelling variations, then hands the link to the Copilot CLI agent for suggested replacements, and presents an interactive fix menu. Generic anchor text (`click here`, `read more`, etc.) is flagged as an SEO issue. ## Overview Broken links accumulate silently in web projects. Running on the `postToolUse` event, this hook checks the web files the agent just edited — and only those — right after each change, so you can fix, replace, or remove each broken link in the same terminal session. The hook has two modes: - **With file paths** (the edited files injected from the hook payload, or paths passed on the command line): it checks each link, looks up replacement candidates, and presents the interactive fix menu. - **With no file arguments**: it simply lists the broken links it finds — no replacement lookups and no prompts. ## Features - **Self-contained core**: bash and PowerShell ports — no runtime to install (the optional agent hand-off reuses the Copilot CLI you already have) - **Edited-files scope**: as a `postToolUse` hook it only checks the files the agent just changed — never a full repo scan - **Format-agnostic link scan**: extracts every `http(s)` URL with `grep`, covering HTML, Markdown, JS/TS, JSON, CSS, SQL, and templates at once - **Automatic URL healing**: tries www, https, and trailing-slash variations - **Agent-assisted suggestions**: hands the broken link to the Copilot CLI agent (a lightweight, low-token `gpt-5-mini` prompt with no tools) for replacement candidates; if the CLI is missing or errors, it simply offers none - **SEO audit**: flags anchor text that is too generic to benefit search ranking - **Large-file guard**: prompts before checking files with more than 50 links - **Interactive fix menu**: replace with suggestion, enter custom URL, strip tag keeping text, or skip - **Standard tools only**: `curl`, `grep`, `sed` — present on any POSIX system ## Installation 1. Copy the hook folder to your repository: ```bash cp -r hooks/fix-broken-links .github/hooks/ ``` 2. Make the script executable: ```bash chmod +x .github/hooks/fix-broken-links/link-fix.sh ``` 3. Commit the hook configuration to your repository's default branch. ## Configuration The hook is configured in `hooks.json` to run on the `postToolUse` event: ```json { "version": 1, "hooks": { "postToolUse": [ { "type": "command", "bash": ".github/hooks/fix-broken-links/link-fix.sh", "powershell": ".github/hooks/fix-broken-links/link-fix.ps1", "cwd": ".", "timeoutSec": 120 } ] } } ``` ## Supported Source Types Links are found by scanning each file for `http(s)://` URLs, so the same logic covers every format that embeds absolute URLs: | Source | Examples matched | | --- | --- | | HTML | ``, ``, `