Stats
Actions
Tags
From devils-advocate
Runs shell scripts before Write/Edit/Bash to remind of skills, and after Skill events to mark completion. Executes bash commands and writes files.
2 events · 2 hooks
Safety signals detected in this hook configuration
Where this hook configuration is defined
Defined in hooks/hooks.json
Event handlers and matchers — expand Raw Configuration for the full JSON
Bashnode -e "const fs=require('fs');try{const c=JSON.parse(fs.readFileSync('.devils-advocate/config.json','utf8'));if(c.hooks&&c.hooks['pre-commit-warning']===false)process.exit(0)}catch(e){}let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const cmd=JSON.parse(d).tool_input.command||'';if(/git\s+commit/.test(cmd)){if(fs.existsSync('.devils-advocate/.commit-reviewed')){fs.unlinkSync('.devils-advocate/.commit-reviewed')}else{process.stdout.write(JSON.stringify({hookSpecificOutput:{hookEventName:'PreToolUse',additionalContext:'Devil\'s Advocate: No critique found for uncommitted changes. Consider running /devils-advocate:critique before committing.'}}));}}}catch(e){}})"Writenode -e "const fs=require('fs');try{const c=JSON.parse(fs.readFileSync('.devils-advocate/config.json','utf8'));if(c.hooks&&c.hooks['plan-file-detect']===false)process.exit(0)}catch(e){}let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const fp=JSON.parse(d).tool_input.file_path||'';if(/plans?\/|\/plan[-_.]|[-_]plan\./i.test(fp)){process.stdout.write(JSON.stringify({additionalContext:'Devil\'s Advocate: Plan file written. Run /devils-advocate:critique to review it.'}))}}catch(e){}})"npx claudepluginhub brandonsimpson/devils-advocate --plugin devils-advocate