---
name: tether
description: Tether (install/uninstall) statusline-tools Stop hook to ~/.claude/settings.json. Renamed from 'hooks' to avoid clashing with.
allowed-tools: Read, Bash, TodoWrite, TodoRead, AskUserQuestion
argument-hint: "[install|uninstall|status]"
model: haiku
disable-model-invocation: true
---

> **Navigation**: [Plugin CLAUDE.md](../../CLAUDE.md) | [Root CLAUDE.md](../../../../CLAUDE.md)

# Status Line Hooks Manager

Manage Stop hook installation for link validation and path linting.

The Stop hook runs at session end to:

1. Validate markdown links using lychee
2. Check for relative path violations using lint-relative-paths
3. Cache results for status line display

> **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                         |
| ----------- | ----------------------------------- |
| `install`   | Add Stop hook to settings.json      |
| `uninstall` | Remove Stop hook from settings.json |
| `status`    | Show current hook configuration     |

## Coexistence Note

This hook can coexist with other Stop hooks (like check-links-hybrid.sh). Both will run on session end - statusline-tools caches results for display, while other hooks may take different actions.

## Execution

### Skip Logic

- If action provided (`install`, `uninstall`, `status`) -> execute directly
- If no arguments -> check current status, then use AskUserQuestion flow

### Workflow

1. **Check Current State**: Run `status` to show current hook configuration
2. **Action Selection**: Use AskUserQuestion to select action:
   - "Install hook" -> add Stop hook for link validation
   - "Uninstall hook" -> remove Stop hook
   - "Just show status" -> display and exit
3. **Execute**: Run the management script
4. **Verify**: Confirm changes applied

### AskUserQuestion Flow (No Arguments)

When invoked without arguments, guide the user interactively:

```
Question: "What would you like to do with the statusline-tools Stop hook?"
Options:
  - "Install" -> "Add Stop hook for link validation and path linting on session end"
  - "Uninstall" -> "Remove the Stop hook from settings.json"
  - "Status" -> "Show current hook configuration"
```

### Direct Execution (With Arguments)

Parse `$ARGUMENTS` and run the management script:

```bash
/usr/bin/env bash << 'HOOKS_SCRIPT_EOF'
PLUGIN_DIR="${CLAUDE_PLUGIN_ROOT:-$HOME/.claude/plugins/marketplaces/cc-skills/plugins/statusline-tools}"
ACTION="${ARGUMENTS:-status}"
bash "$PLUGIN_DIR/scripts/manage-hooks.sh" $ACTION
HOOKS_SCRIPT_EOF
```

## Post-Action Reminder

After install/uninstall operations:

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

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

## Examples

```bash
# Check current installation status
/statusline-tools:tether status

# Install the Stop hook for link validation
/statusline-tools:tether install

# Uninstall hooks
/statusline-tools:tether uninstall
```

## Troubleshooting

| Issue                      | Cause                        | Solution                                                                                 |
| -------------------------- | ---------------------------- | ---------------------------------------------------------------------------------------- |
| jq not found               | jq not installed             | `brew install jq`                                                                        |
| lychee not found           | Link validator not installed | `brew install lychee`                                                                    |
| Hooks not working          | Session not restarted        | Restart Claude Code session                                                              |
| lint-relative-paths errors | Invalid path patterns        | Check file paths in SKILL.md files                                                       |
| Cache stale                | Stop hook failed             | Check `.lychee-results.json` and `.lint-relative-paths-results.txt` in the git repo root |

## Note on hooks.json Hooks

`cron-tracker.ts` and `stop-cron-gc.ts` are registered directly in `hooks.json` and are **not** managed by `manage-hooks.sh`. They run automatically via the hooks framework and do not need manual install/uninstall.

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