# State of AI Instruction Quality: Repos Split on Co-Authored-By

> Source: <https://dev.to/reporails/state-of-ai-instruction-quality-repos-split-on-co-authored-by-5bfl>
> Published: 2026-10-20 12:40:48+00:00

The 10,000 most-starred repos split on whether their coding agent should sign its commits.

About 400 tell it to leave its name off. One of the most-starred web frameworks puts it in its `CLAUDE.md`:

Do NOT add "Generated with Claude Code" or co-author footers to commits or PRs

About 330 ask for the opposite: an `Assisted-by:` line or an AI co-author trailer, often inside a commit template the agent is told to follow. And about 30 of the repos that rule out the co-author line ask for `Assisted-by:` in its place.

Mostly the trailer. More than half of the matches in the 465 repos with a rule against it name `Co-Authored-By` itself. In 295 of them the rule mentions commits, and in 112 it mentions pull requests. Two-thirds of the matches sit in main files like `CLAUDE.md` and `AGENTS.md`, which load in every session.

Most of these rules name no agent at all: 283 of the 465 repos write "no co-author trailer" or "no AI attribution" in general. 146 name only Claude. 36 name another agent, most often Codex, then Copilot and Cursor:

No `Co-authored-by: Copilot` or any other co-author line. Ever.

The vendor-neutral file carries Claude-specific rules too. 77 of the 273 matches in `AGENTS.md` name Claude.

A rule about commit trailers matters once the agent makes commits, and the repos that write one run bigger, more built-out setups. Their median repo has 4 instruction files, against 2 across the report. 60% write for more than one agent, against 43%, and 17% ship an agent hook, against 7.6%.

They write firmer instructions too: 4.2 [hedged instructions](https://reporails.com/rules/core/modality-weakness) per 100 ("should", "try to") against 5.1, lower at every repo size.

137 repos ask for an `Assisted-by:` trailer, and about 30 of the repos that rule out the co-author line say to use `Assisted-by:` instead. The Rust compiler repo, `rust-lang/rust`, has both in one passage of its `AGENTS.md`:

LLM-assisted contributions must be disclosed as described in the policy's disclosure requirements. Lying about or concealing LLM use is a Code of Conduct violation. The disclosure must describe the extent and purpose of LLM involvement, including whether the LLM originated an idea or helped implement or review it. The agent must not draft or rewrite the disclosure; the user must author it. Do NOT add `Co-Authored-By` trailers to commits.

Its last sentence reads like the framework's rule. The sentences above it give the reason: the project wants a person to write the disclosure.

Claude Code adds it unless told otherwise. Its settings docs: "Commits get a git trailer such as `Co-Authored-By` by default; pull request descriptions get plain text." Cursor's agents add a "Made with Cursor" trailer to commits and pull requests, on by default, with a switch in its settings and one for team admins. Cursor's staff add on its forum that a rule won't remove it, because the trailer "is added by Cursor at the tooling level, not by the model".

Cloud agents reverse the roles. GitHub's docs: Copilot cloud agent's commits "are authored by Copilot, with the developer who assigned the issue or requested the change to the pull request marked as the co-author". Cursor's cloud agents commit as Cursor Agent and add the person who started the session the same way, and per Cursor's staff that can't be turned off yet.

In Claude Code, a setting turns it off. In the project's `.claude/settings.json`:

```
{
  "attribution": {
    "commit": "",
    "pr": "",
    "sessionUrl": false
  }
}
```

That's the form repos use: 49 set `commit` to an empty string and 44 set `pr`. Claude Code v2.1.281 and later also take `"attribution": false`, but earlier versions reject that value and skip the whole settings file that holds it. The strings can also carry your own text, such as an `Assisted-by:` line.

64 repos turn attribution off in a committed setting, and 54 of them write no rule about it at all. Of the 465 with a rule, 10 also use the setting.

The rule works too. The docs say "Claude Code tells Claude that your own instructions about attribution, such as a CLAUDE.md or memory rule, take precedence over these commit and PR lines". The setting changes what Claude Code adds in the first place, so it holds whether or not the agent follows the rule. Settings can also live in each developer's own `~/.claude/settings.json`, which a repo snapshot can't see.

A git `commit-msg` hook runs after the agent, or the tool behind it, has written the message, so it holds for every agent that commits on your machine. Some repos already run one ("the commit-msg hook will reject it", one `CLAUDE.md` warns), and Cursor's staff point to it as the workaround for the trailer its tooling adds. This one deletes AI attribution lines and keeps human co-authors:

``` bash
#!/bin/sh
# .githooks/commit-msg
pattern='^(co-authored-by|made-with):.*(claude|copilot|cursor|codex|gemini|anthropic\.com)|generated with \[?claude code'
{ grep -viE "$pattern" "$1" || true; } > "$1.tmp" && mv "$1.tmp" "$1"
```

Commit it, make it executable, and run `git config core.hooksPath .githooks` once per clone. It covers commits only, so pull request text still needs the settings, and it can't reach cloud agents, which commit on the vendor's machines. In Claude Code, a `PreToolUse` hook can also refuse a commit command that carries the trailer before it runs; [Prompts steer, hooks enforce](https://reporails.com/articles/deterministic-guardrails-prompts-steer-hooks-enforce) covers how.

The setting is Claude Code's. A rule in `AGENTS.md` reaches every agent that loads the file, which is the reason to keep one when the repo serves more than one agent. Where the tool adds the trailer itself, as in Cursor, the rule states the policy and the setting or the hook carries it out. Written with the directives first, then context, and the constraint last, it could read:

```
- Write commit messages in the format described in `CONTRIBUTING.md`.
- Add an `Assisted-by:` trailer only with text the user gives you.
- The project records AI assistance through the person committing the change.
- *Never add your own name to a commit or pull request.*
```

The constraint is in italics and rules out the trailer without naming it. In a `CLAUDE.md` of their own, these lines score 9.4 on `ails check`.

The checker scores an attribution rule like any other instruction. The framework's rule quoted at the top draws a finding for [a constraint written outside italics](https://reporails.com/rules/core/italic-constraints). Each run checks one agent's files; the second command switches to Copilot, and `cursor`, `codex` and `antigravity` (for `GEMINI.md`) work the same way.

```
npx @reporails/cli check
npx @reporails/cli check --agent codex|cursor|claude #whichever you are using
```

To find every attribution line, including rules that ask for a trailer and the `attribution` setting itself:

```
grep -niE "co-?authored|assisted-by|attribution|generated (by|with)" CLAUDE.md AGENTS.md .claude/settings.json 2>/dev/null
```

Read what comes back as one policy: what the agent may sign, where, and whether it lives in a sentence the agent reads or a setting it can't skip.

*From [The State of AI Instruction Quality: Q3 2026](https://reporails.com/articles/state-of-ai-instruction-quality-q3-2026): 10,000 of the most-starred GitHub repos, 15,237 agent setups, September 2026 snapshot. The data behind the series is in the [`2026-Q3` folder of reporails/reports](https://github.com/reporails/reports/tree/main/2026-Q3).*

*A rule against the trailer counts when a line in an instruction file, outside code blocks, has "never", "do not", "don't", "avoid" or "no" followed within 50 characters by "co-authored", "attribution", "mention of Claude/AI/Anthropic" or "generated by/with Claude/AI": 465 of the 9,784 repos with a setup. In a hand-read sample of 40 distinct matching lines, 35 were AI-attribution rules; the rest used "attribution" in another sense, such as data or citations, so "about 400" stands for the 465. An ask counts when an instruction or a commit template in an instruction file asks for an `Assisted-by:` or AI co-author trailer: 327 repos, with 28 of 30 hand-checked asks real, so "about 330". Settings counts read the `.claude/settings.json` and `.claude/settings.local.json` files committed to the repo, 978 files in 959 repos.*

*I work on [Reporails](https://github.com/reporails/cli), deterministic diagnostics and governance for the instruction files, rules, and prompts that steer coding agents. It reads the instruction files your coding agent loads, from `CLAUDE.md` to Copilot and Cursor rules, measures which instructions couple to behavior, and points to the lines worth tightening.*
