SLOPSHOPPER

No Attribution

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…

new
v0.1.0MITupdated 2026-10-03claudemodz/mods/plugins/no-attribution
A shopper browsing a rack in a slop shop
README

No Attribution

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.

Install

/plugin marketplace add claudemodz/mods
/plugin install no-attribution@claudemodz-mods

Options (/config)

  • Commit trailer — text to use instead of the trailer (default: nothing)
  • Pull request footer — text to use instead of the footer (default: nothing)

What it can do

Hooks attribution.text. Makes no API calls: it cannot read files, run commands or use the network.

Source 2 files
hooks/register.ts 11 lines
1import 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}
11
hooks/attribution.ts 24 lines
1import 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