#!/usr/bin/env bash set -euo pipefail # Cursor hook: preToolUse (Shell) # Strip Cursor co-author trailers from git commit/amend commands before execution. # Note: read stdin before Python (a heredoc would consume hook JSON). INPUT="$(cat)" python3 -c ' import json import re import sys raw = sys.argv[1] try: data = json.loads(raw) if raw.strip() else {} except Exception: print(json.dumps({"permission": "allow"})) raise SystemExit(0) tool_input = data.get("tool_input") or {} if not isinstance(tool_input, dict): print(json.dumps({"permission": "allow"})) raise SystemExit(0) command = (tool_input.get("command") or "").strip() if not command or "git" not in command: print(json.dumps({"permission": "allow"})) raise SystemExit(0) if not re.search(r"\bgit\b.*\b(commit|commit\s+-a|commit\s+--amend)\b", command): print(json.dumps({"permission": "allow"})) raise SystemExit(0) cleaned = command patterns = [ r"""\s*--trailer\s+(['"])Co-authored-by:\s*Cursor\s*\1""", r"""\s*--trailer\s+Co-authored-by:\s*Cursor\s*""", r"""\s*--footer\s+(['"])Co-authored-by:\s*Cursor\s*\1""", r"""\s*--footer\s+Co-authored-by:\s*Cursor\s*""", ] for pattern in patterns: cleaned = re.sub(pattern, "", cleaned, flags=re.I) cleaned = re.sub(r"\s{2,}", " ", cleaned).strip() if cleaned == command: print(json.dumps({"permission": "allow"})) else: tool_input["command"] = cleaned print(json.dumps({ "permission": "allow", "updated_input": tool_input, "agent_message": "Removed Cursor co-author trailer from git commit command." })) ' "$INPUT"