/plugin marketplace add zircote/lsp-tools/plugin install lsp-tools@zircote-lspDefined in hooks/hooks.json
{
"PreToolUse": [
{
"name": "lsp-hooks-pre-commit",
"hooks": [
{
"type": "command",
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/lsp-hooks.sh\" pre",
"timeout": 60,
"blocking": true
}
],
"matcher": "Bash",
"description": "Quality gate: block git commits if language-specific checks fail"
}
],
"PostToolUse": [
{
"name": "lsp-hooks-post",
"hooks": [
{
"type": "command",
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/scripts/lsp-hooks.sh\" post",
"timeout": 15
}
],
"matcher": "Write|Edit|str_replace_editor",
"conditions": {
"fileExtensions": [
".rs",
".py",
".pyi",
".go",
".ts",
".tsx",
".js",
".jsx",
".mts",
".cts",
".mjs",
".cjs",
".java",
".kt",
".kts",
".cpp",
".cc",
".cxx",
".c",
".h",
".hpp",
".hxx",
".cs",
".csx",
".php",
".phtml",
".rb",
".rake",
".gemspec",
".sh",
".bash",
".zsh",
".scala",
".sc",
".sbt",
".swift",
".ex",
".exs",
".vue",
".svelte",
".graphql",
".gql",
".hs",
".lhs",
".lua",
".sql",
".json",
".jsonc",
".yaml",
".yml",
".html",
".htm",
".css",
".scss",
".sass",
".less",
".tex",
".latex",
".sty",
".cls",
".bib",
".md",
".markdown",
".zig",
".tf",
".tfvars",
".hcl",
".toml",
".lock",
".mod",
".sum"
]
},
"description": "Run language-specific formatting, linting, and quick checks after file edits"
}
]
}{
"riskFlags": {
"touchesBash": true,
"matchAllTools": false,
"touchesFileWrites": true
},
"typeStats": {
"command": 2
},
"eventStats": {
"PreToolUse": 1,
"PostToolUse": 1
},
"originCounts": {
"absolutePaths": 0,
"pluginScripts": 2,
"projectScripts": 0
},
"timeoutStats": {
"commandsWithoutTimeout": 0
}
}