Commits without AI trailers
Commits should look like yours. agent-skills uses three independent layers, so one failing does not matter.
1. The skills
Section titled “1. The skills”commit and task write messages in the project’s convention, from .tasks/workflow.md or detected from your own recent commits, and never add trailers: no Co-Authored-By, no “Generated with”, no agent links or emoji signatures. They commit only after you say OK, stage only the listed files, and never push, merge, rebase or force unless you ask in that conversation.
2. The Claude Code setting
Section titled “2. The Claude Code setting”agent-skills config attribution off # ~/.claude/settings.jsonagent-skills config attribution off --project . # this project's .claude/settings.jsonagent-skills config attribution statusagent-skills config attribution on # undoIt sets "attribution": { "commit": "", "pr": "" }, which hides the commit trailer and the pull request footer, and the older "includeCoAuthoredBy": false for earlier Claude Code versions. Other keys are kept, a backup is written before the first change, and invalid JSON is never overwritten.
3. The git hook, for any tool
Section titled “3. The git hook, for any tool”cd ~/code/shopagent-skills hooks installagent-skills hooks statusagent-skills hooks uninstallThe commit-msg hook removes:
Co-authored-by:trailers. All of them by default; to keep human co-authors, rungit config agent-skills.keepHumanCoauthors true, and only AI ones are removed.- Footers such as “Generated with Claude Code”, “Generated by GitHub Copilot” or “Made with Cursor”. A “generated, made or created with” line is removed only when it names an AI tool, so “Generated with protoc” stays.
It never touches anything else: the subject, the body, Signed-off-by, comment lines and everything below the scissors line of git commit -v stay byte for byte, line endings included.
- Your existing
commit-msghook is kept and still runs after this one; uninstalling restores it. - In repositories that use husky, lefthook or another
core.hooksPath, the installer does not take over that folder. It prints one line to add to your own hook:node .git/hooks/agent-skills-commit-msg.cjs "$1". - The hook needs
nodeonPATH; without it, the hook skips itself instead of blocking commits. - Hooks are per repository and are not committed. Install it in each clone.
Skribly Agent has the same hook built in: Code & git → Hook without AI trailers.
Checking old commits
Section titled “Checking old commits”git log --format='%h %s%n%b' | grep -inE 'co-authored-by|generated with' | headRewriting published history is a team decision; agent-skills never does it.