{"slug": "your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits", "title": "Your Work, Not Your Agent's Signature: A Local Git Guardrail for AI Credits", "summary": "A developer released ai-credit-scrub v1.1.0, a free, offline-first Go CLI tool that removes explicit AI-agent credit lines from commit messages and pull request bodies before they reach Git history or GitHub. The tool installs local Git hooks to strip known credit signatures from tools like Claude Code, GitHub Copilot, and Cursor, preserving developer control and keeping sensitive content local.", "body_md": "AI coding tools are changing how we write software. They can draft a test,\n\nexplain an unfamiliar codebase, or turn a rough idea into a useful first\n\nimplementation. That part is not the problem.\n\nThe annoying part comes at the end of the workflow: a commit message or pull\n\nrequest body suddenly includes an automatic line such as:\n\n```\nGenerated with Claude Code\n```\n\nor:\n\n```\nCo-authored-by: Claude <noreply@anthropic.com>\n```\n\nSometimes that attribution is intentional. Sometimes it is required by a\n\nteam's policy. But sometimes it is only a default footer that slipped through\n\nbecause the developer was focused on reviewing the code.\n\nOnce it reaches a commit, it is part of Git history. Once a pull request is\n\nopen, it is already on GitHub. A CI check can report the problem, but it cannot\n\nmake that publication boundary local again.\n\nThat is the problem [ai-credit-scrub](https://github.com/paladini/ai-credit-scrub)\n\nsolves. Version 1.1.0 is a small, free, offline-first Go CLI that removes\n\n*explicit* AI-agent credit text before it becomes a commit, reaches a remote,\n\nor is sent to GitHub in a pull request.\n\nThe important word is *explicit*. This is not an AI detector, and it does not\n\ntry to decide who wrote your code. It removes known, complete credit lines. It\n\ndoes not rewrite Git authors or committers, remove human co-authors, upload\n\nsource code, send prompts to a service, or call a model.\n\nThe best place to prevent accidental publication is the machine where the\n\npublication starts.\n\n``` php\nagent or IDE proposes text\n          |\n          +-- commit-msg --> clean before Git creates the commit\n          +-- pre-push   --> stop a credit that escaped the first check\n          +-- pr create  --> clean title and body before calling gh\n```\n\nThat is a very different model from collecting commits in CI and telling\n\nsomeone about them later. Local guardrails preserve the developer's control and\n\nkeep the sensitive content on the developer's machine.\n\nYou can download a binary from the\n\n[GitHub Releases page](https://github.com/paladini/ai-credit-scrub/releases),\n\nor install it with Go:\n\n```\ngo install github.com/paladini/ai-credit-scrub/cmd/ai-credit-scrub@latest\n```\n\nThen, from the Git repository you want to protect, run:\n\n```\nai-credit-scrub install --git\n```\n\nThat one command installs two local hooks:\n\n| Hook | What it does |\n|---|---|\n`commit-msg` |\nRewrites the temporary commit-message file before Git creates the commit object. |\n`pre-push` |\nInspects outgoing commit messages and blocks a matching credit before the remote update is sent. |\n\nThe installer does not discard an existing hook. It preserves it and chains it\n\nbefore ai-credit-scrub runs. Re-run the installer if you move the binary, since\n\nthe generated hooks use its absolute path.\n\nSuppose an AI tool helps you implement a feature. You review the diff, test it,\n\nand create a commit. The tool or your Git client adds this trailer:\n\n```\nAdd account settings page\n\nCo-authored-by: Claude <noreply@anthropic.com>\n```\n\nWith the hook installed, Git passes that temporary message file through\n\nai-credit-scrub before it writes the commit. The commit that exists in history\n\nis simply:\n\n```\nAdd account settings page\n```\n\nThis is deliberately narrow. These ordinary lines remain untouched:\n\n```\nReviewed in Cursor\nCo-authored-by: Ada Lovelace <ada@example.com>\n```\n\nProduct names alone are not matches. The tool looks for complete, known agent\n\ncredit signatures for Codex, Claude Code, Cursor, Windsurf, and GitHub Copilot.\n\nThat conservative approach matters: a hygiene tool should not surprise you by\n\nrewriting ordinary prose or human attribution.\n\nThe hooks are the guardrail, but the CLI is useful on its own as well. Scan a\n\nfile without modifying it:\n\n```\nai-credit-scrub scan CHANGELOG.md\n```\n\nClean a reviewed file in place:\n\n```\nai-credit-scrub clean --in-place CHANGELOG.md\n```\n\nFor scripts and tooling, `scan`\n\nand `check`\n\ncan return JSON too:\n\n```\nai-credit-scrub check --format json pull-request.md\n```\n\n`check`\n\nexits with a failure status when it finds a match, which makes it useful\n\nwhen you want a local command to stop another local workflow.\n\nGit hooks protect commit messages, but a pull request title and body are not\n\nGit objects. They need their own local publication path.\n\nUse the built-in wrapper instead of calling `gh pr create`\n\ndirectly:\n\n```\nai-credit-scrub pr create \\\n  --title \"Document local hooks\" \\\n  --body \"Explain the guardrail.\\n\\nGenerated with Claude Code\"\n```\n\nai-credit-scrub cleans the title and body, then delegates to your existing,\n\nalready-authenticated GitHub CLI. It does not need an account, another token, or\n\na hosted backend.\n\nYou can also use a body file, which is usually nicer for a real PR:\n\n```\nai-credit-scrub pr create \\\n  --title \"Add local publication guardrails\" \\\n  --body-file pull-request.md\n```\n\nGit is the universal enforcement layer because most local tools eventually call\n\nGit. ai-credit-scrub also offers optional adapters for repositories that use\n\nCodex, Claude Code, Cursor, Windsurf, or GitHub Copilot:\n\n```\nai-credit-scrub install --adapter codex\nai-credit-scrub install --adapter claude\nai-credit-scrub install --adapter cursor\n```\n\nAn adapter adds local guidance to use the Git hooks and the PR wrapper. It is\n\nnot magic interception, and it will not overwrite an existing agent\n\nconfiguration file. If your repository already owns that file, merge the\n\nemitted configuration deliberately.\n\nEvery organization has its own vocabulary. You can define literal or regular\n\nexpression rules in `.ai-credit-scrub.yml`\n\n, but custom automatic rewriting\n\nrequires this explicit acknowledgement:\n\n```\nversion: 1\nreviewed: true\nliterals:\n  - \"Generated by Internal Coding Assistant\"\n```\n\nThe `reviewed: true`\n\nrequirement is intentional. First run a scan, inspect what\n\nwould match, and only then allow the rule to alter text. The goal is prevention,\n\nnot an overzealous cleaner that silently changes project history.\n\nLocal software should be honest about its boundaries.\n\n`git push --no-verify`\n\nis an intentional way to bypass client-side hooks.For the last case, use `ai-credit-scrub pr create`\n\n, or put a local sanitized MCP\n\nproxy in front of the only GitHub-writing server available to the agent. The\n\n[integration guide](https://github.com/paladini/ai-credit-scrub/blob/main/docs/integrations.md)\n\nexplains that boundary in more detail.\n\nIt is also worth saying plainly: confirm that removing an AI credit is\n\ncompatible with your organization's policy, contributor agreement, and\n\napplicable law. This tool gives you a local technical control; it does not make\n\nthat policy decision for you.\n\nUsing AI assistance is now a normal part of programming for many people. The\n\nquestion is whether an automatic footer belongs in every artifact you publish.\n\nFor developers who want to make that choice themselves, the guardrail needs to\n\nrun before the artifact leaves their machine.\n\n[ai-credit-scrub](https://github.com/paladini/ai-credit-scrub) v1.1.0 keeps the\n\nimplementation intentionally small: deterministic rules, local Git hooks, a\n\nsafe PR creation path, and clear limits. No surveillance layer. No model call.\n\nNo attempt to rewrite human identity.\n\nInstall it in one repository, try a commit with a known credit line, and inspect\n\nthe result. The useful outcome is simple: your published Git history says what\n\nyou intended it to say.", "url": "https://wpnews.pro/news/your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits", "canonical_source": "https://dev.to/paladini/your-work-not-your-agents-signature-a-local-git-guardrail-for-ai-credits-518f", "published_at": "2026-07-15 18:00:19+00:00", "updated_at": "2026-07-15 18:10:30.992091+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools"], "entities": ["ai-credit-scrub", "GitHub", "Claude Code", "Cursor", "Windsurf", "GitHub Copilot", "Anthropic", "Codex"], "alternates": {"html": "https://wpnews.pro/news/your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits", "markdown": "https://wpnews.pro/news/your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits.md", "text": "https://wpnews.pro/news/your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits.txt", "jsonld": "https://wpnews.pro/news/your-work-not-your-agent-s-signature-a-local-git-guardrail-for-ai-credits.jsonld"}}