npx claudepluginhub versoxbt/claude-initial-setup --plugin claude-initial-setupDefined in hooks/hooks.json
tool == "Bash" && tool_input.command matches "(npm run dev|pnpm( run)? dev|yarn dev|bun run dev)"echo '[Hook] Consider running dev servers in tmux for session persistence' >&2tool == "Bash" && tool_input.command matches "git push"echo '[Hook] Review changes before pushing. Run git diff and git status first.' >&2tool == "Bash" && tool_input.command matches "(npm|pnpm|yarn|bun) (install|add)"echo '[Hook] Verify package legitimacy before installing. Check for typosquatting.' >&2tool == "Edit" && tool_input.file_path matches "\\.(ts|tsx|js|jsx)$"node -e "const fs=require('fs');let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{const i=JSON.parse(d);const p=i.tool_input?.file_path;if(p&&fs.existsSync(p)){console.error('[Hook] Consider running prettier on the edited file');const c=fs.readFileSync(p,'utf8');const lines=c.split('\n');const matches=[];lines.forEach((l,idx)=>{if(/console\.log/.test(l))matches.push((idx+1)+': '+l.trim())});if(matches.length){console.error('[Hook] WARNING: console.log found in '+p);matches.slice(0,5).forEach(m=>console.error(m));console.error('[Hook] Remove console.log before committing')}}console.log(d)})"tool == "Write" && tool_input.file_path matches "\\.(ts|tsx)$"echo '[Hook] Consider running tsc --noEmit to check for type errors' >&2Runs Go precommit script on PreToolUse for Bash matcher and post-write script on PostToolUse for Edit|Write. Executes bash commands, touches file writes.