Skip to main content

Remove Claude/AI attribution from a GitHub repo: clean history, force-push, and refresh the Contributors graph.

Project description

declaude

Remove Claude/AI attribution from a GitHub repo in one command.

declaude OWNER/REPO

It clones the repo, strips Claude/AI traces from your entire commit history (e.g. Co-Authored-By: Claude <noreply@anthropic.com> or "Generated with Claude Code"), force-pushes the cleaned branches, and refreshes GitHub's Contributors graph so @claude actually disappears — all without touching your code or your commit authorship.

Why @claude won't go away by itself

AI tools append a Co-Authored-By: Claude … trailer to commits, and GitHub's Insights → Contributors graph counts those co-authors. That graph is a cached, background-computed view — a force-push (or a flush, or a commit) on its own doesn't reliably update it, so @claude lingers even after the history and the REST API are clean.

What actually works is a specific order:

remove Claude → flush (rename the default branch) → push a fresh commit

The flush resets GitHub's cached graph; the following commit triggers a recompute against the now-clean history. declaude does all three for you (the refresh commit is chore: refresh GitHub contributors, reusing your latest commit's author so no new identity appears). It runs even when the history is already clean, which is exactly what a previously-cleaned repo needs.

Install

pip install declaude        # installs the `declaude` command + git-filter-repo

Want the latest unreleased changes? Install straight from GitHub:

pip install git+https://github.com/ediiloupatty/declaude
# or, from a local clone:
pip install .

pip puts a declaude command on your PATH and pulls in git-filter-repo automatically — no manual setup. The one prerequisite pip can't install is the GitHub CLI, used to flush GitHub's Contributors-graph cache:

# Windows (winget):
winget install GitHub.cli

# macOS (Homebrew):
brew install gh

# Linux: https://cli.github.com/manual/installation

Windows note: after winget install GitHub.cli, open a new terminal before running gh — the current session won't see it yet.

Then log in:

gh auth login

declaude checks for gh and a valid login up front and tells you exactly what's missing before it touches anything.

After installing on Windows — how to run it

After pip install declaude, pip may print a warning that the Scripts folder isn't on your PATH. That's normal and harmless — it only means typing declaude directly might say "command not found". Just run it like this and it always works:

python -m declaude OWNER/REPO

That's the whole trick: put python -m in front. For example:

python -m declaude ediiloupatty/my-repo
python -m declaude --help

Prefer the short declaude command? The quickest fix is to let declaude add its own install directory to your PATH:

python -m declaude path

Then open a new terminal and declaude works on its own. (Works on macOS/Linux too, where it appends a PATH line to your shell rc file.)

Or install with pipx, which sets up PATH for you:

python -m pip install --user pipx
python -m pipx ensurepath
pipx install declaude

…or run the included install.ps1 from a clone of this repo (it adds the Scripts folder to your PATH automatically):

powershell -ExecutionPolicy Bypass -File .\install.ps1 -FromPyPI

Then open a new terminal and declaude works on its own.

Usage

Run declaude --help (or python -m declaude --help on Windows) any time to see the full reference:

usage: declaude [-h] [--version] [-y] [--dry-run] [--no-refresh] [--no-backup]
                target

Remove Claude/AI attribution from a GitHub repo (clean history + force-push +
refresh Contributors graph).

positional arguments:
  target        GitHub URL or OWNER/REPO slug

options:
  -h, --help    show this help message and exit
  --version     show program's version number and exit
  -y, --yes     skip confirmation
  --dry-run     show the plan only
  --no-refresh  don't push the empty commit that refreshes the contributors
                graph
  --no-backup   skip the restorable backup bundle before rewriting (not
                recommended)

Other: `declaude prevent` turns off Claude Code attribution going forward.

Examples:

declaude ediiloupatty/my-repo                      # OWNER/REPO slug
declaude https://github.com/ediiloupatty/my-repo   # full GitHub URL

declaude my-repo --dry-run    # show the plan, change nothing
declaude my-repo -y           # skip the confirmation prompt
declaude my-repo --no-refresh # clean + push only, skip the refresh commit
declaude my-repo --no-backup  # skip the restorable backup bundle (not recommended)

declaude prevent              # turn off Claude Code attribution going forward
declaude --version            # print the installed version

The repo is cloned to a temp dir, cleaned, force-pushed, refreshed, then discarded — you never clone by hand. Before any rewrite, a backup bundle is written to ~/.declaude-backups/ and is fully restorable:

git -C <repo> fetch ~/.declaude-backups/<name>.bundle '*:*'

Honest caveats

  • Claude authorship (rare). If a commit's author is Claude (not just a co-author), declaude warns but does not change it — use git filter-repo --mailmap to rewrite authorship.
  • The refresh commit. declaude leaves one chore: refresh GitHub contributors empty commit on the default branch (authored as you). It's harmless; drop it later with git rebase if you like. Skip the whole refresh with --no-refresh.
  • Shared repos. The flush renames the default branch and back. Collaborators with a local clone may see GitHub's "default branch renamed" notice. Use --no-refresh if that's a problem.
  • Graph lag. Even after the flush + refresh push, the Contributors graph can take a few minutes to update. Recheck in Incognito.
  • Closed pull requests. GitHub keeps old commits in refs/pull/N/head, which users can't delete. The Contributors graph is computed from the default branch (clean + refreshed), so @claude should still drop; if it persists, only GitHub Support can purge the PR-ref cache.

Commands

Command Purpose
declaude TARGET [-y] [--dry-run] [--no-refresh] [--no-backup] Clean history + force-push + refresh contributors graph. TARGET = GitHub URL or OWNER/REPO.
declaude path Add declaude's install (Scripts) directory to your PATH so the bare declaude command works.
declaude prevent Set includeCoAuthoredBy:false in ~/.claude/settings.json.
declaude --version Print the installed version.

Requirements

  • Python 3.8+ and pip
  • git
  • gh (GitHub CLI, logged in) — install separately from https://cli.github.com
  • git-filter-repo — installed automatically as a pip dependency

Windows: works in PowerShell and Windows Terminal (ANSI colors are enabled automatically; set NO_COLOR=1 to disable). git, gh, and Python must be on your PATH.

Development

pip install -e ".[dev]"   # editable install with test deps
python -m pytest          # run the scrubber tests
python -m declaude --help # run without installing the console script

License

MIT © ediiloupatty

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

declaude-0.1.2.tar.gz (478.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

declaude-0.1.2-py3-none-any.whl (15.0 kB view details)

Uploaded Python 3

File details

Details for the file declaude-0.1.2.tar.gz.

File metadata

  • Download URL: declaude-0.1.2.tar.gz
  • Upload date:
  • Size: 478.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for declaude-0.1.2.tar.gz
Algorithm Hash digest
SHA256 3826bc0c8761d25c57298532f9f6bf9d971db08b6e3dfc282c4281befa492cc6
MD5 6a2ed659b0f80e5befb1a04350e7790a
BLAKE2b-256 8c47760ccf9163438d3d94b416e2ba86d8991f21a1c3eaccdcdedabc1de606c6

See more details on using hashes here.

File details

Details for the file declaude-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: declaude-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 15.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for declaude-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 17a28cb4e14310ba098df12946974118755dcb4acd8d0f7a3c18021cdeb13903
MD5 ff4277b1f5d5868264dcacc15ac48078
BLAKE2b-256 5e5feb032ba744817a5641be47428fe1f540fb3ab3607940d6565110d93c7779

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page