agentsclimarketplace

Git guardian

Skill suryast/free-ai-agent-skills/git-guardian

Install
npx -y skills add suryast/free-ai-agent-skills --skill git-guardian

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Pre-commit safety checks for AI-assisted development. Detects secrets, large files, merge conflict markers, sensitive files, and common AI-coding mistakes before they hit your repo.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

11.1 KB, as published. Nobody here has run it

πŸ›‘οΈ Git Guardian

Compatible with Claude Code, Codex CLI, Cursor, Windsurf, and any SKILL.md-compatible agent.

Pre-commit safety checks built for AI-assisted development. AI agents generate code fast β€” sometimes too fast. Git Guardian catches secrets, sensitive files, merge conflicts, and common AI mistakes before they land in your history.


Triggers

Activate this skill when:

  • "check before commit", "is this safe to commit", "pre-commit check"
  • "any secrets in staged files?", "check for API keys"
  • About to commit AI-generated code
  • "run git guardian", "safety check", "audit staged changes"
  • After a large AI-generated code dump, before pushing
  • User sets up a new repo and wants pre-commit safety

The Full Check Suite

Run these checks against staged changes (or a specified path). Report findings with severity: πŸ”΄ BLOCK, 🟑 WARN, πŸ”΅ INFO.


Check 1: Secret Detection πŸ”΄

Patterns that indicate leaked credentials:

# Check staged files for secrets
git diff --cached --name-only | while read f; do
  echo "=== $f ==="
  git show ":$f" 2>/dev/null
done | grep -inE \
  'api[_-]?key|apikey|api[_-]?secret|\
secret[_-]?key|secret[_-]?token|\
auth[_-]?token|access[_-]?token|bearer[_-]?\
private[_-]?key|ssh[_-]?key|rsa[_-]?private|\
password\s*=\s*["\x27][^\x27"]{6,}|\
passwd\s*=\s*["\x27][^\x27"]{6,}|\
aws_access_key_id|aws_secret_access_key|\
AKIA[0-9A-Z]{16}|\
ghp_[a-zA-Z0-9]{36}|github_pat_|\
sk-[a-zA-Z0-9]{32,}|\
xoxb-|xoxa-|xoxp-|\
glpat-|glcpat-|\
npm_[a-zA-Z0-9]{36}|\
-----BEGIN (RSA|EC|DSA|OPENSSH) PRIVATE KEY'

High-risk literal patterns to check for:

# Check for raw high-entropy strings (possible tokens/keys)
git diff --cached | grep "^+" | grep -vE "^(\\+\\+\\+)" | \
  grep -E '[a-zA-Z0-9+/]{40,}={0,2}' | \
  grep -vE '(hash|sha|digest|checksum|fingerprint|base64|encoded|example|placeholder|YOUR_|REPLACE_|<.*>)' | \
  head -20

Common secret formats by provider:

ProviderPatternExample prefix
OpenAIsk-[a-zA-Z0-9]{48}sk-proj-...
Anthropicsk-ant-[a-zA-Z0-9-]{95}sk-ant-api03-...
GitHubghp_[a-zA-Z0-9]{36}ghp_abc...
AWSAKIA[A-Z0-9]{16}AKIAIOSFODNN7...
Google APIAIza[0-9A-Za-z-_]{35}AIzaSy...
Slackxoxb-[0-9-]{50,}xoxb-123-...
Stripesk_live_[a-zA-Z0-9]{24}sk_live_...
TwilioSK[a-zA-Z0-9]{32}SK1234...
JWTeyJ[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.eyJhbGc...

Severity: πŸ”΄ BLOCK β€” never commit real credentials. If found:

  1. Remove the secret from staged files
  2. Rotate the credential immediately β€” assume it's compromised
  3. Use environment variables, a secrets manager, or .env (gitignored)

Check 2: Sensitive File Detection πŸ”΄

# Check if sensitive file types are staged
git diff --cached --name-only | grep -iE \
  '\.(env|pem|key|p12|pfx|jks|keystore|ppk|ovpn)$|
  ^\.env(\.|$)|
  \.env\.(local|production|staging|dev|test)$|
  id_rsa|id_dsa|id_ecdsa|id_ed25519|
  \.ssh/|
  credentials$|credentials\.json|
  secrets\.json|secrets\.yaml|secrets\.yml|
  \.netrc$|
  wp-config\.php|
  database\.yml$|
  settings\/local\.py|
  config\/secrets\.'

Never commit these:

  • .env files with real values
  • Private key files (.pem, .key, .p12, .ppk)
  • SSH private keys (id_rsa, id_ed25519, etc.)
  • VPN configs (.ovpn)
  • credentials.json (Google service accounts)
  • secrets.yaml / secrets.yml

Severity: πŸ”΄ BLOCK β€” add to .gitignore immediately.


Check 3: Large Files 🟑

# Find staged files over 1MB
git diff --cached --name-only | while read f; do
  size=$(git cat-file -s ":$f" 2>/dev/null || echo 0)
  if [ "$size" -gt 1048576 ]; then
    echo "LARGE: $f ($(( size / 1024 ))KB)"
  fi
done

Thresholds:

  • 1MB: 🟑 WARN β€” is this intentional? Should it be in .gitignore or git-lfs?

  • 10MB: πŸ”΄ BLOCK β€” almost certainly wrong. Binary, dataset, or dependency artifact.

  • 50MB: πŸ”΄ BLOCK β€” will fail on GitHub/GitLab push limits.

Common large file mistakes:

  • node_modules/ committed by accident
  • Binary build artifacts (dist/, build/, *.pyc, *.class)
  • Datasets or fixtures that should be downloaded at runtime
  • Media files (images, video) that should use git-lfs or external storage

Check 4: Merge Conflict Markers πŸ”΄

# Detect unresolved merge conflicts in staged files
git diff --cached --name-only | while read f; do
  if git show ":$f" 2>/dev/null | grep -qE '^(<{7}|>{7}|={7}|[|]{7}) '; then
    echo "CONFLICT MARKERS: $f"
    git show ":$f" | grep -nE '^(<{7}|>{7}|={7}|[|]{7}) ' | head -5
  fi
done

Markers to detect:

  • <<<<<<< HEAD
  • =======
  • >>>>>>> branch-name
  • ||||||| merged common ancestors (diff3 style)

Severity: πŸ”΄ BLOCK β€” code with conflict markers will not compile or run.


Check 5: TODO/FIXME/HACK in New Code πŸ”΅

# Find new lines with quality flags in staged diff
git diff --cached | grep "^+" | grep -vE "^\+\+\+" | \
  grep -iE '\b(TODO|FIXME|HACK|XXX|BUG|TEMP|KLUDGE|NOCOMMIT)\b' | \
  head -20

Severity: πŸ”΅ INFO β€” not a blocker, but worth knowing what's going in.

Special case β€” πŸ”΄ BLOCK on NOCOMMIT:

git diff --cached | grep "^+" | grep -iE '\bNOCOMMIT\b'

If found, stop β€” this was intentionally marked to not be committed.


Check 6: .gitignore Coverage Audit 🟑

# Check if common sensitive paths are covered by .gitignore
cat .gitignore 2>/dev/null | sort > /tmp/gi_current.txt

echo "Checking .gitignore coverage..."

patterns=(
  "*.env"
  ".env"
  ".env.*"
  "*.pem"
  "*.key"
  "*.p12"
  "id_rsa"
  "id_ed25519"
  "*.log"
  "node_modules/"
  "__pycache__/"
  "*.pyc"
  "dist/"
  "build/"
  ".DS_Store"
  "Thumbs.db"
  "*.sqlite"
  "*.sqlite3"
  "venv/"
  ".venv/"
  "*.orig"
  "secrets.*"
  "credentials.json"
)

for p in "${patterns[@]}"; do
  if ! grep -qF "$p" .gitignore 2>/dev/null; then
    echo "MISSING: $p"
  fi
done

Severity: 🟑 WARN for missing patterns β€” add them before the next commit touches those file types.

Recommended .gitignore additions for AI-assisted projects:

# Secrets & credentials
.env
.env.*
!.env.example
*.pem
*.key
*.p12
*.pfx
*.ppk
id_rsa
id_ed25519
id_ecdsa
credentials.json
secrets.yaml
secrets.yml
.netrc

# AI agent artifacts (if applicable)
.agent_memory/
agent_logs/
session_*.json

# Common build artifacts
node_modules/
dist/
build/
__pycache__/
*.pyc
*.pyo
.venv/
venv/
*.egg-info/

# OS
.DS_Store
Thumbs.db
*.orig

Check 7: Accidental Debug Code πŸ”΅

# Detect common debug artifacts in staged diff
git diff --cached | grep "^+" | grep -vE "^\+\+\+" | \
  grep -iE \
  'console\.log\(|print\(f?["\x27](debug|test|tmp|REMOVE|DELETE ME)|\
debugger;|\
pdb\.set_trace|breakpoint\(\)|\
binding\.pry|\
var_dump\(|die\(|exit\(1\)' | \
  head -20

Severity: πŸ”΅ INFO β€” common in AI-generated code. Review before merging to main.


Full Run Command

Run the complete suite against currently staged changes:

echo "πŸ›‘οΈ  Git Guardian β€” Pre-Commit Safety Check"
echo "==========================================="
echo ""

# 1. What's staged?
echo "πŸ“‹ Staged files:"
git diff --cached --name-only
echo ""

# 2. Run checks (see above for full implementations)
echo "πŸ”΄ Check 1: Secrets..."
echo "πŸ”΄ Check 2: Sensitive files..."
echo "🟑 Check 3: Large files..."
echo "πŸ”΄ Check 4: Merge conflict markers..."
echo "πŸ”΅ Check 5: TODO/FIXME/NOCOMMIT..."
echo "🟑 Check 6: .gitignore coverage..."
echo "πŸ”΅ Check 7: Debug artifacts..."

Output Format

πŸ›‘οΈ  Git Guardian β€” Pre-Commit Safety Check
===========================================
Staged files: 4 | Checks: 7 | Time: 0.3s

πŸ”΄ BLOCKED (2 issues β€” fix before committing)
─────────────────────────────────────────────
[1] SECRET DETECTED in src/config.py (line 14)
    OPENAI_API_KEY = "sk-proj-abc123..."
    β†’ Remove key, rotate immediately, use env var

[2] MERGE CONFLICT MARKERS in src/api/routes.py
    Line 47: <<<<<<< HEAD
    Line 52: >>>>>>> feature/auth-refactor
    β†’ Resolve conflict before committing

🟑 WARNINGS (1 issue β€” review recommended)
──────────────────────────────────────────
[3] LARGE FILE: data/fixtures.json (8.2MB)
    β†’ Add to .gitignore or move to git-lfs

πŸ”΅ INFO (3 notes)
─────────────────
[4] TODO found in src/auth.py (line 88)
    # TODO: add rate limiting here
[5] console.log found in frontend/app.ts (line 23)
[6] .gitignore missing: *.pem, .env.*

══════════════════════════════════════════
❌ COMMIT BLOCKED β€” resolve 2 critical issue(s) first
πŸ›‘οΈ  Git Guardian β€” Pre-Commit Safety Check
===========================================
Staged files: 3 | Checks: 7 | Time: 0.2s

βœ… All checks passed β€” safe to commit

Installing as a Git Hook

To run automatically before every commit in a project:

cat > .git/hooks/pre-commit << 'EOF'
#!/bin/bash
# Git Guardian pre-commit hook
# Runs basic safety checks before allowing commit

# Check for secrets
if git diff --cached | grep -qiE 'api[_-]?key\s*=\s*["\x27][^\x27"]{10,}|AKIA[0-9A-Z]{16}|sk-[a-zA-Z0-9]{32,}|ghp_[a-zA-Z0-9]{36}'; then
  echo "πŸ”΄ Git Guardian: Possible secret detected in staged changes"
  echo "   Run a full check: ask your AI agent to run git-guardian"
  exit 1
fi

# Check for merge conflict markers
if git diff --cached | grep -qE '^(<{7}|>{7}|={7}) '; then
  echo "πŸ”΄ Git Guardian: Merge conflict markers detected"
  exit 1
fi

# Check for NOCOMMIT
if git diff --cached | grep -qiE '\bNOCOMMIT\b'; then
  echo "πŸ”΄ Git Guardian: NOCOMMIT marker found β€” this change was flagged to not be committed"
  exit 1
fi

echo "βœ… Git Guardian: Basic checks passed"
exit 0
EOF

chmod +x .git/hooks/pre-commit
echo "βœ… Git Guardian pre-commit hook installed"

Why This Matters for AI-Assisted Development

AI coding tools are fast β€” sometimes too fast. Common failure modes:

  1. Context leakage β€” agent reads a .env file for context, then writes the values into generated code
  2. Conflict confusion β€” agent sees conflict markers and treats them as code, writes around them instead of resolving
  3. Overeager staging β€” git add . after AI-generated files includes things that should be ignored
  4. Debug trails β€” AI includes console.log, print, breakpoint() for its own reasoning, forgets to remove them
  5. Fixture bloat β€” AI generates large test fixtures inline instead of loading from external source

Git Guardian is your last line of defense before those mistakes become permanent history.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.