Link Validation Skill
Validates markdown links in your workspace using lychee.
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.
When to Use This Skill
Use this skill when:
- Checking for broken links in markdown files
- Validating link paths before committing documentation
- Detecting path policy violations (absolute paths, excessive traversal)
What It Does
When invoked, this skill:
- Discovers all markdown files in your workspace
- Runs lychee to check for broken links
- Lints paths for policy violations (absolute paths, excessive traversal)
- Outputs JSON results for programmatic consumption
Requirements
- lychee installed (
brew install lychee)
- Python 3.11+ and uv
Output
Results are written to .link-check-results.md in your workspace:
# Link Check Results
**Correlation ID**: `01JEGQXV8KHTNF3YD8G7ZC9XYK`
## Lychee Link Validation
No broken links found.
## Path Policy Violations
No path violations found.
Path Policy Rules
| Rule |
Severity |
Description |
| NO_ABSOLUTE_PATHS |
Error |
Filesystem absolute paths not allowed |
| NO_PARENT_ESCAPES |
Warning |
Excessive ../ may escape repository |
| MARKETPLACE_RELATIVE |
Warning |
Plugins should use ./ relative paths |
Configuration
Override the default lychee config by placing .lycheerc.toml in your workspace root.
See config/lychee.toml for the default configuration.
References
Troubleshooting
| Issue |
Cause |
Solution |
| lychee not found |
Not installed |
Run mise install lychee |
| Too many 403 errors |
Rate limiting |
Add rate limit to .lycheerc.toml |
| Relative path errors |
Wrong base directory |
Run from repository root |
| False positives |
Dynamic content |
Add URL pattern to exclude list |
| Timeout on links |
Slow external sites |
Increase timeout in config |
| Cache issues |
Stale cached results |
Clear cache with --no-cache flag |
Post-Execution Reflection
After this skill completes, check before closing:
- Did the command succeed? — If not, fix the instruction or error table that caused the failure.
- Did parameters or output change? — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
- 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.