npx claudepluginhub joshuarweaver/cascade-code-general-misc-1 --plugin ambushdata-ai-setupDefined in hooks/hooks.json
*python -c "import sys, subprocess, os; subprocess.run(['git', 'rev-parse', '--git-dir'], capture_output=True, check=True); files = subprocess.run(['git', 'diff', '--name-only', 'HEAD'], capture_output=True, text=True).stdout.split('\n'); pyfiles = [f for f in files if f.endswith('.py') and os.path.exists(f)]; has_print = False; [print(f'[Hook] WARNING: print() found in {f}', file=sys.stderr) or (has_print := True) for f in pyfiles if 'print(' in open(f).read()]; print('[Hook] Remove print() statements before committing', file=sys.stderr) if has_print else None" 2>/dev/null || true*python "${COPILOT_CONFIG_ROOT}/scripts/hooks/pre_compact.py"tool == "run_in_terminal" && tool_input.command matches "(python|pytest|poetry run|pipenv run|uv run).*"python -c "import sys; print('[Hook] Consider running long-running commands in a separate terminal for persistence', file=sys.stderr)"tool == "run_in_terminal" && tool_input.command matches "git push"python -c "import sys; print('[Hook] Review changes before push...', file=sys.stderr); print('[Hook] Continuing with push (remove this hook to add interactive review)', file=sys.stderr)"tool == "create_file" && tool_input.filePath matches "\\.(md|txt)$" && !(tool_input.filePath matches "README\\.md|CONTRIBUTING\\.md")python -c "import sys, json; data = sys.stdin.read(); obj = json.loads(data) if data else {}; path = obj.get('tool_input', {}).get('filePath', ''); print(f'[Hook] Consider consolidating documentation in README.md instead of creating {path}', file=sys.stderr) if path.endswith(('.md', '.txt')) else None; print(data)"tool == "edit_file" || tool == "create_file"python "${COPILOT_CONFIG_ROOT}/scripts/hooks/suggest_compact.py"*python "${COPILOT_CONFIG_ROOT}/scripts/hooks/session_end.py"*python "${COPILOT_CONFIG_ROOT}/scripts/hooks/evaluate_session.py"tool == "run_in_terminal" && tool_input.command matches "gh pr create"python -c "import sys, json, re; data = sys.stdin.read(); obj = json.loads(data) if data else {}; output = obj.get('tool_output', {}).get('output', ''); match = re.search(r'https://github.com/[^/]+/[^/]+/pull/\d+', output); print(f'[Hook] PR created: {match.group(0)}', file=sys.stderr) if match else None; print(data)"tool == "edit_file" && tool_input.filePath matches "\\.(py)$"python -c "import sys, json, subprocess, os; data = sys.stdin.read(); obj = json.loads(data) if data else {}; path = obj.get('tool_input', {}).get('filePath'); subprocess.run(['black', path], capture_output=True) if path and os.path.exists(path) else None; print(data)"tool == "edit_file" && tool_input.filePath matches "\\.(py)$"python -c "import sys, json, subprocess, os; data = sys.stdin.read(); obj = json.loads(data) if data else {}; path = obj.get('tool_input', {}).get('filePath'); result = subprocess.run(['flake8', path], capture_output=True, text=True) if path and os.path.exists(path) else None; print(result.stdout[:500], file=sys.stderr) if result and result.stdout else None; print(data)"tool == "edit_file" && tool_input.filePath matches "\\.(py)$"python -c "import sys, json, os; data = sys.stdin.read(); obj = json.loads(data) if data else {}; path = obj.get('tool_input', {}).get('filePath'); content = open(path).read() if path and os.path.exists(path) else ''; lines = [f'{i+1}: {l.strip()}' for i, l in enumerate(content.split('\n')) if 'print(' in l and not l.strip().startswith('#')]; print('[Hook] WARNING: print() found in ' + path, file=sys.stderr) if lines else None; [print(l, file=sys.stderr) for l in lines[:5]] if lines else None; print(data)"*python "${COPILOT_CONFIG_ROOT}/scripts/hooks/session_start.py"Automates cron job management: reconciles crons on SessionStart, runs bash scripts pre/post CronCreate/Delete tool uses. Logs session ends to memory/.dreams/events.jsonl; echoes reminders to save summaries on Stop/PreCompact.