Why and how I use Assisted-by with Claude Code and not Co-authored-by
· 3 min readI found the following blog post on Hacker News, and it caught my eye because I, too, don’t allow Claude Code to add itself as a co-author on my commits. I have always found it distasteful that Claude Code automatically does this and that its logo appears on my commits in GitHub. I blocked this behavior in my global CLAUDE.md on practically Day 1 - and I was an early adopter in March 2025!
“Why I am no longer letting Claude Code add itself as Co-author in my commits”
In my opinion, adding Claude as a “co-author” and its logo on commits is just a marketing gimmick that over-anthropomorphizes the agent. It also sends a strong unintended “slop signal” to outsiders when they look at my own code, or my agency’s, and see Claude logos everywhere.
Today, you can turn it off in ~/.claude/settings.json. I recommend that everyone do this:
{
"attribution": {
"commit": "",
"pr": ""
}
}
It’s not that I’m trying to cover up my use of AI. Disclosure and attribution is the professional thing to do. I just think “co-author” is not the right attribution for LLMs. Back in the days of StackOverflow, I would include links attributing my sources whenever I copy-pasted a substantial amount of code, but I never would have called StackOverflow a “co-author.”1
Just as then, the code is my responsibility, and I am in the “driver’s seat” of the AI. I wouldn’t call a tractor or a vehicle the “co-driver,” even in cruise control (or these days, self-driving mode). Yes, it’s doing a ton of work for me, but it is still just a tool.
But that has meant that my commits have had no clear AI attribution, which doesn’t feel right either. Today I’m updating my system prompt again to use the Linux kernel’s standard of attributing the AI model and any other specialized tools Assisted-by: AGENT_NAME:MODEL_VERSION [TOOL1] [TOOL2].
For example when I’m using Claude Code:
Assisted-by: claude-code:claude-opus-5 spekk
And when I’m using opencode:
Assisted-by: opencode:claude-opus-5 spekk
This is the most reasonable standard that properly reflects the role of LLM assistants as a tool, and also gives us traceability on what models and harnesses were used to produce the code.2
Set up a Git hook for reliable “Assisted-by” trailers
I added instructions to my system prompt that inform agents about the “Assisted-by” trailer, but I still ask agents to NEVER add AI attribution to any of their commits or other messages. I wanted to make sure the trailer was always consistent.
For this, Claude helped me cook up a prepare-commit-msg hook that reads the harness and the model out of the agent’s own session record and writes the trailer consistently and deterministically. I use both Claude Code and opencode, and they store their sessions differently. Any commits I write by hand don’t have the trailer unless I add it.
I put the hook in a gist if you want it: Assisted-by git hook
HOOKS="$(git config --global core.hooksPath || echo ~/.git-hooks)"
if [ -e "$HOOKS/prepare-commit-msg" ]; then
echo "You already have a prepare-commit-msg in $HOOKS. Merge the two by hand."
else
mkdir -p "$HOOKS"
curl -fsSL https://gist.githubusercontent.com/whusterj/01be8cde934ed45ea5264c30163d9cf5/raw/prepare-commit-msg -o "$HOOKS/prepare-commit-msg"
chmod +x "$HOOKS/prepare-commit-msg"
git config --global core.hooksPath "$HOOKS"
echo "Installed to $HOOKS"
fi
Note this installs the Git hook globally. It should install safely alongside any hooks you may already have.
-
One exception where I think the AI can be the “author” is purely async sessions. For example, I created the avatar nimble-claude on GitHub for sandboxed agents that operate autonomously. In those cases, it’s helpful to have an AI account as the “author” to signal that a human may not have reviewed the work. Then when I take over the PR, I am co-author on the PR and the commits I contribute (AI assisted or not) are clearly separated. ↩
-
Basically, I stand by the AI Attribution policy I wrote about a year ago for the ThinkNimble Research site. There are really only three buckets that matter here: (1) 100% human, (2) 100% AI, (3) everything in between. #1 and #2 are easy to attribute. #3 is increasingly the norm, and I think the default assumption should be that the human is making responsible use of the tool. ↩