Help us improve
Share bugs, ideas, or general feedback.
From settings-presets
This skill should be used when the user asks to "change the commit attribution", "remove the co-authored by", "stop adding the co-authored by", "change Claude's name", "configure the PR attribution", "update attribution settings", "show that Claude is helping write commits", or "reset co-authored by settings". Manages git commit and pull request attribution in Claude Code settings.
npx claudepluginhub aaronbassett/agent-foundry --plugin settings-presetsHow this skill is triggered — by the user, by Claude, or both
Slash command
/settings-presets:configure-attributionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manage Claude Code's attribution settings for git commits and pull requests. Configure the `Co-Authored-By` git trailer and PR description attribution in `.claude/settings.local.json`. Handle customization of Claude's name, model information, and complete removal of attribution while preserving other settings.
Enforces git commit authorship policy: sole user attribution, no co-author trailers, bot footers, or tool links. Prevents contributor graph pollution in GitHub repos.
Git commit message conventions: structure, formatting, scoping, body content, breaking changes, trailers. Invoke whenever task involves any interaction with commit messages — writing, reviewing, validating, or understanding message format.
Analyzes uncommitted changes, groups by cohesion, and generates commit messages matching project style. Outputs git commands or executes with --execute.
Share bugs, ideas, or general feedback.
Manage Claude Code's attribution settings for git commits and pull requests. Configure the Co-Authored-By git trailer and PR description attribution in .claude/settings.local.json. Handle customization of Claude's name, model information, and complete removal of attribution while preserving other settings.
Activate when users want to:
Follow this safe, confirmable workflow for all attribution changes:
Parse the user's request to determine:
Always check current settings before making changes:
# Check if .claude directory exists
if [ ! -d ".claude" ]; then
mkdir -p .claude
fi
# Read existing settings if present
if [ -f ".claude/settings.local.json" ]; then
cat .claude/settings.local.json
fi
Extract current attribution values if they exist:
# Get current commit attribution
CURRENT_COMMIT=$(jq -r '.attribution.commit // empty' .claude/settings.local.json 2>/dev/null)
# Get current PR attribution
CURRENT_PR=$(jq -r '.attribution.pr // empty' .claude/settings.local.json 2>/dev/null)
Before any modifications, create backup with .backup extension:
if [ -f ".claude/settings.local.json" ]; then
cp .claude/settings.local.json .claude/settings.local.json.backup
fi
If settings file exists, verify it contains valid JSON:
if [ -f ".claude/settings.local.json" ]; then
if ! jq empty .claude/settings.local.json 2>/dev/null; then
echo "ERROR: .claude/settings.local.json contains invalid JSON"
exit 1
fi
fi
On validation failure: Abort and ask user to fix the malformed JSON before proceeding.
When user requests name changes, determine model handling:
User says: "Change Claude's name to Big Dawg"
Ask user:
I'll update Claude's name to "Big Dawg" in the commit attribution.
Do you want to:
1. Keep the model name (e.g., "Big Dawg Sonnet 4.5")
2. Remove the model name (e.g., "Big Dawg")
What would you prefer?
Parse existing format to understand current structure:
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
[NAME] [MODEL] [EMAIL]
Preserve email address unless user explicitly requests changing it.
When user requests removing attribution, confirm scope:
User says: "Remove the co-authored by"
If user specified only commit attribution:
I'll remove the commit attribution. Do you also want me to remove the PR attribution?
Current PR attribution: "🤖 Generated with [Claude Code](https://claude.com/claude-code)"
Wait for user response before proceeding.
If user says remove both or confirms:
commit to ""pr to ""If user says keep PR attribution:
commit to ""pr valueCreate the new attribution configuration based on user request:
Preserve other settings: Only modify the attribution object, preserve everything else.
Example merge logic:
# Read existing settings or create empty object
EXISTING=$(cat .claude/settings.local.json 2>/dev/null || echo '{}')
# Merge with new attribution (example: change name)
echo "$EXISTING" | jq '. + {
"attribution": {
"commit": "Co-Authored-By: Big Dawg Sonnet 4.5 <noreply@anthropic.com>",
"pr": (.attribution.pr // "🤖 Generated with [Claude Code](https://claude.com/claude-code)")
}
}' > .claude/settings.local.json
Critical: When updating one field (commit or pr), explicitly preserve the other using (.attribution.commit // "default") or (.attribution.pr // "default").
Write the updated .claude/settings.local.json:
# If settings doesn't exist, create it
if [ ! -f ".claude/settings.local.json" ]; then
echo '{}' > .claude/settings.local.json
fi
# Use jq to merge attribution settings
jq '. + {
"attribution": {
"commit": "...",
"pr": "..."
}
}' .claude/settings.local.json > .claude/settings.local.json.tmp
mv .claude/settings.local.json.tmp .claude/settings.local.json
After writing new configuration, show what changed:
I've updated your attribution settings:
Commit attribution:
OLD: Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
NEW: Co-Authored-By: Big Dawg <noreply@anthropic.com>
PR attribution: (unchanged)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Do the changes work as expected?
If user confirms changes work:
rm -f .claude/settings.local.json.backup
If user says changes don't work or wants to revert:
if [ -f ".claude/settings.local.json.backup" ]; then
mv .claude/settings.local.json.backup .claude/settings.local.json
fi
rm -f .claude/settings.local.json.backup
Always ensure backup file is removed regardless of outcome.
Git commit attribution uses git trailers format:
Standard format:
Co-Authored-By: Name <email@example.com>
With model:
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Custom name:
Co-Authored-By: Big Dawg <noreply@anthropic.com>
With custom message:
Generated with AI
Co-Authored-By: AI Assistant <ai@example.com>
Empty (no attribution):
""
Notes:
Pull request attribution is plain text in PR descriptions:
Standard format:
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Custom message:
🤖 Generated with ✨ Style ✨ and [Big Dawg](https://claude.com/claude-code)
Simple text:
Created with Claude Code
Empty (no attribution):
""
Notes:
Name changes:
Attribution removal:
Customization:
Partial updates:
Before writing configuration, validate:
On validation failure: Inform user of issue and suggest corrections.
Critical principle: Only modify attribution object, preserve everything else.
When updating .claude/settings.local.json:
attribution objectstatusLine, model, hooks, etc.)commit, preserve existing prpr, preserve existing commitExample merging logic (update commit only):
jq --arg newCommit "Co-Authored-By: Big Dawg <noreply@anthropic.com>" \
'. + {
"attribution": {
"commit": $newCommit,
"pr": (.attribution.pr // "🤖 Generated with [Claude Code](https://claude.com/claude-code)")
}
}' .claude/settings.local.json
When user updates one field:
Default values if field doesn't exist:
"Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>""🤖 Generated with [Claude Code](https://claude.com/claude-code)"See examples/ directory for complete working examples:
examples/name-change.json - Changing Claude's nameexamples/remove-model.json - Removing model from attributionexamples/custom-pr.json - Custom PR attributionexamples/remove-all.json - Removing all attributionexamples/partial-update.json - Updating only one fieldFor detailed information:
references/attribution-formats.md - Complete attribution format guideIf .claude/ doesn't exist, create it automatically:
mkdir -p .claude
If settings file doesn't exist, create with empty object:
echo '{}' > .claude/settings.local.json
If existing file contains invalid JSON:
jq emptyIf user wants to revert:
When removing attribution:
"") completely hide attribution