跳到主要内容

safe-push 标准

Pre-push hygiene check for GitHub repositories. Scans for PII, secrets, and sensitive data before pushing. Audits commit messages, enforces repo-specific blocklists, and rate-limits pushes to avoid GitHub abuse detection. Use before any git push, especially to public repos.

在 GitHub 打开

安装方式

cp -r skills/safe-push ~/.claude/skills/safe-push

把该 skill 目录放进客户端 skills 目录。不同客户端的目录可能不同,Claude Code 默认是 ~/.claude/skills/

整仓一次性获取:git clone --depth 1 https://github.com/thatrebeccarae/claude-marketing.git

依赖与权限

  • 需要 API Key —— 使用前需配置相应的密钥环境变量
  • 需要联网访问外部服务
  • 依赖外部命令:git go aws
  • 以上为按正文与 frontmatter 自动推断的信号,仅供参考;安装前建议先阅读原文。

SKILL.md 正文

来源 thatrebeccarae/claude-marketing@a8a63ec · 许可 MIT · 内容未修改

Safe Push

Pre-push hygiene check for GitHub repositories. Use when the user asks to push code, especially to public repos.

Trigger

When the user says "push", "safe push", "push to GitHub", or runs /safe-push.

Install

The skill loads patterns from ~/.claude/safe-push-blocklist. Copy the bundled template and customize:

cp safe-push-blocklist.template ~/.claude/safe-push-blocklist
$EDITOR ~/.claude/safe-push-blocklist

The template includes commented-out examples for client names, hostnames, IP ranges, tracking IDs, and Slack token shapes. Replace them with values specific to your environment.

If the file is missing, the skill runs with a warning instead of erroring — but personal pattern checks are skipped, so creating it is strongly recommended.

Procedure

1. Classify the repo

# Check if public repo
git remote -v
# Check for .public-repo marker
test -f .public-repo && echo "PUBLIC" || echo "private or unmarked"

If public (or pushing to a public remote): apply ALL checks below.

If private: apply only the PII scan (step 2).

2. PII and secrets scan

Load your personal pattern list from ~/.claude/safe-push-blocklist and scan against it. The same patterns apply to diff content (step 2) AND commit messages (step 3) — both run from the same source of truth.

Default mode — scan the diff against the target branch:

# Load personal patterns (graceful fallback if file missing):
if [ -f ~/.claude/safe-push-blocklist ]; then
  PATTERNS=$(grep -v '^#' ~/.claude/safe-push-blocklist | grep -v '^$' | paste -sd '|' -)
else
  PATTERNS=""
  echo "WARNING: ~/.claude/safe-push-blocklist not found. Personal pattern checks skipped."
fi

git diff origin/main...HEAD
[ -n "$PATTERNS" ] && git diff origin/main...HEAD | grep -nE "$PATTERNS" \
  || echo "NO MATCHES IN DIFF"

Full repo mode (/safe-push --full) — scan ALL tracked files, not just the diff. Use this for baseline audits, first-time pushes of existing repos, or periodic hygiene checks:

git ls-files | xargs grep -n -E "$PATTERNS" \
  --include='*.md' --include='*.py' --include='*.js' --include='*.ts' \
  --include='*.html' --include='*.sh' --include='*.json' \
  --include='*.yml' --include='*.yaml'

Check for these categories (your ~/.claude/safe-push-blocklist covers the regex-able ones):

  • Client names or internal project codenames
  • Personal infrastructure: hostnames, internal directory names, device IDs, hardware models, self-hosted service names
  • Email addresses (personal or client), phone numbers, addresses
  • API keys, tokens, secrets (AWS, GitHub, Slack, Telegram, generic)
  • Private IP addresses, internal hostnames
  • Private key material
  • Slack tokens (xoxb-), Slack channel IDs
  • Tracking IDs: GA4 (G-XXXXXXXXXX), GTM (GTM-XXXXXXX)

Edit ~/.claude/safe-push-blocklist to maintain your personal patterns. Never hardcode real client names or infrastructure identifiers inside this skill file — the blocklist is the source of truth.

If anything is found:

  • List each finding with file, line number, and what was detected
  • Ask the user to fix before proceeding
  • Do NOT push until resolved

3. Commit message audit

Review the FULL commit message — both subject (title) and body (description) — for every commit in the push range. Sensitive patterns can hide in either:

# Print the full message (subject + body) for every commit:
git log origin/main..HEAD --format="===%h %s===%n%b"

# Programmatically scan the full message text against the same
# blocklist used for diff content (graceful fallback if file missing):
if [ -f ~/.claude/safe-push-blocklist ]; then
  PATTERNS=$(grep -v '^#' ~/.claude/safe-push-blocklist | grep -v '^$' | paste -sd '|' -)
  git log origin/main..HEAD --format="%B" | grep -nE "$PATTERNS" \
    || echo "NO MATCHES IN MESSAGES"
else
  echo "WARNING: ~/.claude/safe-push-blocklist not found. Personal pattern checks skipped on commit messages."
fi

The same patterns from ~/.claude/safe-push-blocklist that block diff content (step 2) ALSO block commit messages. Apply the full blocklist to BOTH title and body — not just the diff. For public repos, also flag:

  • Personal info (email, phone, address) — categorical, not always pattern-matched
  • Private repo names you own (e.g., upstream dev mirrors) — soft-warn, ask user before pushing
  • Vague messages ("fix", "update", "wip") — suggest rewrites

If issues found, suggest interactive rebase to clean messages (with user approval).

4. Staggered push (rate limiting)

To avoid triggering GitHub bulk action / automation abuse detection:

  • If pushing a single branch with < 50 commits: push normally
  • If pushing multiple branches or > 50 commits:
  • Push one branch at a time
  • Wait 5 seconds between branch pushes
  • For very large pushes (100+ commits), break into batches of 50 and wait 10 seconds between batches
  • If creating a new repo and pushing initial content with multiple branches:
  • Push main/default branch first
  • Wait 10 seconds
  • Push remaining branches one at a time with 5-second gaps
  • NEVER use git push --all or git push --mirror to a public remote without staggering
# Example staggered multi-branch push
for branch in main develop feature/foo; do
  git push origin "$branch"
  sleep 5
done

5. Final confirmation

Before executing the push, present a summary:

  • Repository: name and public/private status
  • Branch(es) being pushed
  • Number of commits
  • Full commit message preview for every commit in the push range (both title and body) — even on amended commits and commits authored in this session
  • Any warnings from steps 2-4
  • Push strategy (direct or staggered)

Show the full commit messages with:

git log origin/main..HEAD --format="commit %h%n%n%s%n%n%b%n---"

The user must visually confirm each message before push. This catches:

  • Amended commits where the original audit no longer applies
  • Body content that wasn't surfaced in step 3 because of grep gaps
  • Anything authored ad-hoc in this session that didn't go through a content review

Wait for explicit user confirmation before pushing.

6. Push and verify

After pushing:

git push origin <branch>
# Verify
git log origin/<branch> --oneline -5

Report success and the remote URL.

Configuration files

  • ~/.claude/safe-push-blocklist — Your personal pattern blocklist. One regex per line; comments start with #. Loaded on every /safe-push invocation. Edit this file to add or remove patterns; never hardcode patterns in this skill file. See Install above for setup.
  • Repo-local .pii-allowlist — One regex per line, matches are excluded from PII scan (used to allow false positives like example keys in docs).
  • Repo-local .commit-msg-blocklist — Terms that should never appear in public commit messages for this specific repo.

Notes

  • This skill does NOT bypass the global pre-commit hook — they work together
  • For projects with a public/private repo split (dev mirror → public release): always push to the dev repo first, sync via your sync script, then safe-push the public repo
  • When in doubt, treat a repo as public

质量与来源

所属仓库
thatrebeccarae/claude-marketing
仓库星标
163
最近更新
5 个月前
采集时间
今天
commit
a8a63ec1341f
内容指纹
sha256:cbdea2888943fcb
文件路径
skills/safe-push/SKILL.md

同仓库其它 Skill

查看全部 50 个
ab-testing-framework
A/B and multivariate testing methodology. Design experiments, calculate sample sizes, determine statistical significance, avoid common pitfalls, and interpret results. Platform-agnostic framework applicable to landing pages, emails, ads, pricing, and product features. Use when the user asks about A/B testing, split testing, experiment design, statistical significance, or conversion experiments.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端
account-structure-review
Google and Meta paid media account structure evaluation. Audits campaign/ad set architecture against conversion volume minimums, budget thresholds, and targeting overlap. Identifies over-segmentation, under-segmentation, budget fragmentation, and structural anti-patterns blocking algorithmic learning. Provides consolidation roadmaps with migration plans. Use when inheriting accounts, quarterly health checks, or before scaling budgets.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端
aeo-geo-optimizer
Answer Engine Optimization (AEO) and Generative Engine Optimization (GEO) specialist. Optimize content and websites to appear in AI-generated answers from ChatGPT, Perplexity, Claude, Google AI Overviews, and other LLM-powered search experiences. Use when the user asks about AI search optimization, AEO, GEO, AI Overviews, appearing in AI answers, LLM citations, or optimizing for generative search.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端
brand-dna
Extract brand identity from a website URL — voice, colors, typography, imagery, values, and target audience — into a structured brand-profile.json. The profile feeds downstream skills (seo-content-writer, email-composer, frontend-design, pro-deck-builder, cross-platform-audit) for brand-consistent output. Use when the user says brand DNA, brand profile, extract brand, analyze brand, brand voice, brand identity, brand colors, or brand style guide.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端
brand-voice-guidelines
Develop brand voice, tone matrices, messaging frameworks, and brand book documentation. Use when the user asks about brand voice, tone of voice, brand guidelines, messaging framework, or brand consistency.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端
braze
Braze customer engagement platform expertise. Audit campaigns, Canvases, segments, messaging channels, and data architecture. Use when the user asks about Braze, customer engagement, push notifications, in-app messaging, cross-channel orchestration, or lifecycle marketing at scale.
thatrebeccarae/claude-marketing 163 原文
Claude CodeGemini CLIMCP 客户端