Removes the Co-Authored-By commit trailer and the "Generated with Claude Code" PR footer, or replaces them with your own text. Deterministic — no CLAUDE.md…

Removes Claude's Co-Authored-By commit trailer and "Generated with Claude Code" PR footer — or swaps in your own text. Unlike a CLAUDE.md rule, this is deterministic: the text is changed where Claude Code composes it.
/plugin marketplace add claudemodz/mods
/plugin install no-attribution@claudemodz-mods
/config)Hooks attribution.text. Makes no API calls: it cannot read files, run commands or use the network.
hooks/register.ts 11 lines1import type { On, PluginOptions } from 'claude-code'
2
3import { attributionFor } from './attribution.js'
4
5export function register(on: On, options: PluginOptions): void {
6 on('attribution.text', ($, e, next) => {
7 const text = attributionFor(e.kind, options)
8 return text === undefined ? next(e) : { text }
9 })
10}
11hooks/attribution.ts 24 lines1import type { AttributionTextKind } from 'claude-code'
2
3export type AttributionOptions = {
4 readonly commitText?: unknown
5 readonly prText?: unknown
6}
7
8/**
9 * The text to use for one attribution slot, or undefined to leave the
10 * engine's text alone (the exemption and remedy sentences).
11 */
12export function attributionFor(
13 kind: AttributionTextKind,
14 options: AttributionOptions,
15): string | undefined {
16 if (kind === 'commit') return asText(options.commitText)
17 if (kind === 'pr') return asText(options.prText)
18 return undefined
19}
20
21function asText(value: unknown): string {
22 return typeof value === 'string' ? value : ''
23}
24