Skip to content

Use when typos keep slipping into READMEs and docs. After each Markdown edit, the hook runs cspell and feeds any unknown words back to Claude, which corrects them immediately.

v1 0 stars 0 forks 0 watchers 1 branch 0 runs Public
mikicreated via APIv1
1
Install jq and cspell

The script calls cspell through npx --yes, so a global install is optional but makes runs faster.

$jq --version && npm install -g cspell
2
Create the spell-check script

Non-Markdown files exit immediately, so code edits pay nothing.

$mkdir -p .claude/hooks && cat > .claude/hooks/spellcheck-md.sh <<'EOF' #!/bin/bash INPUT=$(cat) FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty') case "$FILE" in *.md|*.mdx|*.markdown) ;; *) exit 0 ;; esac ISSUES=$(npx --yes cspell lint --no-progress --no-summary "$FILE" 2>/dev/null) if [ -n "$ISSUES" ]; then echo "Possible spelling issues in $FILE:" >&2 echo "$ISSUES" | head -n 15 >&2 exit 2 fi exit 0 EOF
3
Make the script executable
$chmod +x .claude/hooks/spellcheck-md.sh
4
Register the PostToolUse hook

Merge into .claude/settings.json.

${ "hooks": { "PostToolUse": [ { "matcher": "Edit|Write", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/spellcheck-md.sh", "timeout": 60 } ] } ] } }
5
Test with a planted typo

Ask Claude to add a sentence containing 'recieve' to the README.

Check
  • The hook report lists the misspelling with file and line
  • Claude fixes the typo in a follow-up edit without being asked
  • Editing a .ts file triggers no spell-check
6
Add a project dictionaryOptional

Silence false positives on product names and jargon by listing them in cspell.json at the repo root.

$cat > cspell.json <<'EOF' { "version": "0.2", "words": ["setfork", "your-product-name", "kubectl"] } EOF