declaude

skill
Guvenlik Denetimi
Basarisiz
Health Uyari
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 9 GitHub stars
Code Basarisiz
  • exec() — Shell command execution in web/src/App.jsx
Permissions Gecti
  • Permissions — No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

Remove Claude/AI attribution from a GitHub repo in one command clean commit history, force-push, and refresh the Contributors graph so @claude disappears.

README.md

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 <[email protected]> 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.

Video

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.

Timing matters too. GitHub serves its old commit index for a little while after
a force-push, and flushing against that stale index just rebuilds the graph from
the old history — putting @claude right back. So declaude waits until
GitHub itself reports the history as clean before flushing, then verifies the
rebuilt graph
and repeats the flush → refresh if @claude survived. That's why
one run is enough; you don't have to run it twice.

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.
  • Tags get force-updated. A tag can point at commits that no branch
    reaches, so cleaning branches alone would leave those commits — and @claude
    with them — live on the remote. declaude therefore force-pushes any tag
    whose commits actually changed, and reports them as affected tags. Tags that
    were already clean keep their existing SHA. If a tag has a GitHub Release
    attached, the release follows the tag name and its uploaded assets are
    preserved, but GitHub regenerates the auto-generated source archives, so their
    checksums change. Collaborators need git fetch --tags --force. A tag
    protection rule or release ruleset will block the push; declaude says so
    instead of failing silently.
  • 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. declaude waits for GitHub to rebuild the graph and retries the
    flush + refresh up to 3 times, but GitHub's cache can still lag. If it ends
    with "the graph is not confirmed clean", the history is already clean —
    recheck in Incognito in a few minutes, or just re-run declaude.
  • 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.

Verifying it worked

declaude checks the server itself, across branches and tags, before it
flushes the cache. To confirm independently:

# every ref on the remote, including tags — should print 0
git clone --mirror https://github.com/OWNER/REPO.git /tmp/check
git -C /tmp/check log --all --format='%s%n%b' | grep -ci 'claude\|anthropic'

Note that GitHub has more than one contributor cache. stats/contributors
(which backs Insights → Contributors) answers HTTP 202 with an empty body
while it recomputes — an empty response means "not ready", not "no
contributors". The list on the repo overview sidebar is a separate cache and can
lag behind it. If the mirror check above prints 0, the history is clean and any
remaining @claude is cache lag; recheck in a private window.

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

Yorumlar (0)

Sonuc bulunamadi