{"id":47976866,"url":"https://github.com/ai-ecoverse/vibe-coded-badge-action","last_synced_at":"2026-04-04T10:57:02.128Z","repository":{"id":301784488,"uuid":"1010302818","full_name":"ai-ecoverse/vibe-coded-badge-action","owner":"ai-ecoverse","description":"GitHub Action that automatically analyzes your repository's git history to determine what percentage of commits were made by AI tools","archived":false,"fork":false,"pushed_at":"2026-03-31T10:40:48.000Z","size":91,"stargazers_count":3,"open_issues_count":2,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-04T10:56:59.143Z","etag":null,"topics":["ai","github","github-actions"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ai-ecoverse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-28T19:29:13.000Z","updated_at":"2026-03-25T18:11:34.000Z","dependencies_parsed_at":"2025-07-24T17:25:04.240Z","dependency_job_id":"3dbbf4ba-3b20-4750-bb3a-553e3539369a","html_url":"https://github.com/ai-ecoverse/vibe-coded-badge-action","commit_stats":null,"previous_names":["trieloff/vibe-coded-badge-action","ai-ecoverse/vibe-coded-badge-action"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ai-ecoverse/vibe-coded-badge-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-ecoverse%2Fvibe-coded-badge-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-ecoverse%2Fvibe-coded-badge-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-ecoverse%2Fvibe-coded-badge-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-ecoverse%2Fvibe-coded-badge-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ai-ecoverse","download_url":"https://codeload.github.com/ai-ecoverse/vibe-coded-badge-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ai-ecoverse%2Fvibe-coded-badge-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397056,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","github","github-actions"],"created_at":"2026-04-04T10:57:01.404Z","updated_at":"2026-04-04T10:57:02.109Z","avatar_url":"https://github.com/ai-ecoverse.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vibe Coded Badge Action\n\n[![95% Vibe_Coded](https://img.shields.io/badge/95%25-Vibe_Coded-ff69b4?style=for-the-badge\u0026logo=claude\u0026logoColor=white)](https://github.com/ai-ecoverse/vibe-coded-badge-action)\n\nA GitHub Action that automatically analyzes your repository's git history to determine what percentage of commits were made by AI tools, and updates a badge in your README accordingly.\n\n![a_futuristic_glow_image](https://github.com/user-attachments/assets/0350cfe6-7631-4613-aa3e-74e2bd53eda4)\n\n## Related Projects\n\nPart of the **[AI Ecoverse](https://github.com/ai-ecoverse/.github)** - a comprehensive ecosystem of tools for AI-assisted development:\n\n- **[yolo](https://github.com/ai-ecoverse/yolo)** - AI CLI launcher with worktree isolation\n- **[ai-aligned-git](https://github.com/ai-ecoverse/ai-aligned-git)** - Git wrapper for safe AI commit practices\n- **[ai-aligned-gh](https://github.com/ai-ecoverse/ai-aligned-gh)** - GitHub CLI wrapper for proper AI attribution\n- **[gh-workflow-peek](https://github.com/ai-ecoverse/gh-workflow-peek)** - Smarter GitHub Actions log filtering\n- **[upskill](https://github.com/ai-ecoverse/gh-upskill)** - Install Claude/Agent skills from other repositories\n- **[as-a-bot](https://github.com/ai-ecoverse/as-a-bot)** - GitHub App token broker for proper AI attribution\n\n## Features\n\n- **Smart AI Detection**: Identifies commits from Claude, Cursor, Zed, Windsurf, OpenAI, Codex, Gemini, Jules, Qwen, Amp, Droid, GitHub Copilot, Aider, Cline, Crush, Kimi, Goose, and various bots\n- **Dynamic Logo Selection**: Automatically chooses the logo based on which AI tool contributed the most\n- **Flexible Configuration**: Customizable badge style, colors, text, and target file\n- **Debug Mode**: Detailed analysis of commit classification\n- **Skip Logic**: Prevents infinite loops with `[skip vibe-badge]` commits\n\n## Usage\n\n### Basic Usage\n\n```yaml\nname: Update Vibe Coded Badge\n\non:\n  push:\n    branches: [ main ]\n\npermissions:\n  contents: write\n\njobs:\n  update-badge:\n    runs-on: ubuntu-latest\n    if: \"!contains(github.event.head_commit.message, '[skip vibe-badge]')\"\n    \n    steps:\n    - uses: actions/checkout@v4\n      with:\n        fetch-depth: 0\n        \n    - uses: ai-ecoverse/vibe-coded-badge-action@main\n```\n\n### Advanced Usage\n\n```yaml\n    - uses: ai-ecoverse/vibe-coded-badge-action@main\n      with:\n        readme-path: 'docs/README.md'\n        badge-style: 'flat-square'\n        badge-color: '00ff00'\n        badge-text: 'AI_Generated'\n        commit-message: 'Bot: Update AI percentage badge'\n        debug: 'false'\n```\n\n## Inputs\n\n| Input | Description | Required | Default |\n|-------|-------------|----------|---------|\n| `readme-path` | Path to the README file to update | No | `README.md` |\n| `badge-style` | Badge style (flat, flat-square, plastic, for-the-badge, social) | No | `for-the-badge` |\n| `badge-color` | Badge color (hex code without #) | No | `ff69b4` |\n| `badge-text` | Text to display after percentage | No | `Vibe_Coded` |\n| `commit-message` | Commit message for badge updates | No | `Update vibe-coded badge` |\n| `debug` | Enable debug mode for detailed analysis | No | `false` |\n| `github-token` | GitHub token for pushing changes | No | `${{ github.token }}` |\n\n## Outputs\n\n| Output | Description |\n|--------|-------------|\n| `percentage` | The calculated percentage of AI-generated lines of code |\n| `changed` | Whether the badge was changed (true/false) |\n| `dominant-ai` | The AI tool with the most lines of code |\n\n## AI Detection Logic\n\nThe action identifies AI-generated code by analyzing git blame data:\n\n1. **Author Attribution**: Uses `git blame` to determine who wrote each line of code\n2. **AI Tool Detection**: Identifies authors with names/emails containing:\n   - Claude, Anthropic\n   - Cursor\n   - Zed\n   - Windsurf\n   - OpenAI\n   - OpenCode\n   - Gemini (Google)\n   - Jules\n   - Qwen (Alibaba)\n   - Amp (Sourcegraph)\n   - Droid (Factory AI)\n   - GitHub Copilot\n   - Aider\n   - Cline\n   - Crush (Charm)\n   - Kimi (Moonshot AI)\n   - Goose (Block)\n   - Terragon\n   - Various bot accounts\n3. **Line Filtering**: Filters out boilerplate lines (comments, empty lines, imports) for accuracy\n4. **File Type Support**: Analyzes source files across multiple programming languages\n5. **Bot Detection**: Identifies automated commits from tools like Renovate, semantic-release\n\n## Logo Selection\n\nThe badge automatically selects the appropriate logo based on which AI tool has the most commits:\n\n- **Claude** → `claude` logo\n- **Terragon** → `claude` logo\n- **Codex** → `openai` logo\n- **Windsurf** → `windsurf` logo\n- **Cursor** → `githubcopilot` logo\n- **Zed** → `zedindustries` logo\n- **Gemini** → `google` logo\n- **Jules** → `google` logo\n- **Qwen** → `alibabacloud` logo\n- **Amp** → `sourcegraph` logo\n- **Droid** → `robot` logo\n- **GitHub Copilot** → `githubcopilot` logo\n- **Aider** → `openai` logo\n- **Cline** → `claude` logo\n- **Crush** → `robot` logo\n- **Kimi** → `openai` logo\n- **Goose** → `block` logo\n- **Renovate** → `renovatebot` logo\n- **Semantic Release** → `semanticrelease` logo\n- **Other Bots** → `githubactions` logo\n\n## Debug Mode\n\nEnable debug mode to see detailed analysis:\n\n```yaml\n    - uses: ai-ecoverse/vibe-coded-badge-action@main\n      with:\n        debug: 'true'\n```\n\nThis outputs:\n- Total lines of code analyzed\n- AI vs human line counts  \n- Breakdown by AI tool type\n- Selected logo information\n- File type analysis\n\n## Example Badge\n\nThe action generates badges like this:\n\n## Git Aliases for AI Coding Tools\n\nTo improve AI detection accuracy, you can set up git aliases that automatically set the author name for different AI coding tools. This ensures commits are properly attributed and detected by the badge action.\n\n### Recommended Aliases\n\nAdd these aliases to your git config to make AI tool detection more reliable:\n\n```bash\n# Claude Code commits\ngit config --global alias.claude-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Claude Code\" -c user.email=\"noreply@anthropic.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Zed AI commits  \ngit config --global alias.zed-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Zed AI\" -c user.email=\"noreply@zed.dev\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Cursor commits\ngit config --global alias.cursor-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Cursor AI\" -c user.email=\"noreply@cursor.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Windsurf commits\ngit config --global alias.windsurf-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Windsurf AI\" -c user.email=\"noreply@codeium.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# OpenAI Codex commits\ngit config --global alias.openai-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"OpenAI Codex\" -c user.email=\"noreply@openai.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Gemini commits\ngit config --global alias.gemini-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Gemini\" -c user.email=\"noreply@google.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Jules commits\ngit config --global alias.jules-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"google-labs-jules[bot]\" -c user.email=\"noreply@google.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Qwen Code commits\ngit config --global alias.qwen-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Qwen Code\" -c user.email=\"noreply@alibaba.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Amp (Sourcegraph) commits\ngit config --global alias.amp-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Amp\" -c user.email=\"noreply@sourcegraph.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Droid (Factory AI) commits\ngit config --global alias.droid-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Droid\" -c user.email=\"droid@factory.ai\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# GitHub Copilot commits\ngit config --global alias.copilot-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"GitHub Copilot\" -c user.email=\"copilot@github.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Aider commits\ngit config --global alias.aider-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"$(git config user.name) (aider)\" -c user.email=\"aider@aider.chat\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Cline commits\ngit config --global alias.cline-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Cline\" -c user.email=\"noreply@cline.bot\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Crush commits\ngit config --global alias.crush-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Crush\" -c user.email=\"crush@charm.land\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Kimi commits\ngit config --global alias.kimi-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Kimi\" -c user.email=\"noreply@moonshot.ai\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n\n# Goose commits\ngit config --global alias.goose-commit '!f() { msg=\"$1\"; shift 1; git -c user.name=\"Goose User\" -c user.email=\"goose@example.com\" -c commit.gpgsign=false commit -m \"$msg\" -m \"Signed-off-by: $(git config user.name) \u003c$(git config user.email)\u003e\" \"$@\"; }; f'\n```\n\n### Usage\n\nInstead of regular `git commit`, use the AI-specific aliases:\n\n```bash\n# Instead of: git commit -m \"Add new feature\"\ngit claude-commit \"Add new feature\"\n\n# Instead of: git commit -m \"Fix bug in parser\"\ngit zed-commit \"Fix bug in parser\"\n\n# Instead of: git commit -m \"Refactor database layer\"\ngit cursor-commit \"Refactor database layer\"\n\n# For other AI tools:\ngit jules-commit \"Add new component\"\ngit qwen-commit \"Optimize algorithm\"\ngit amp-commit \"Add search functionality\"\ngit droid-commit \"Generate unit tests\"\ngit copilot-commit \"Implement feature X\"\ngit aider-commit \"Refactor module structure\"\ngit cline-commit \"Add validation logic\"\ngit crush-commit \"Improve error messages\"\ngit kimi-commit \"Implement new API endpoint\"\ngit goose-commit \"Add new feature\"\n```\n\n### Benefits\n\n- **Accurate Attribution**: Each AI tool gets proper credit in git history\n- **Better Detection**: The badge action can distinguish between different AI tools\n- **Dynamic Logos**: Badge automatically shows the logo of the dominant AI tool\n- **Co-authorship**: Your name appears as co-author while AI gets primary credit\n- **Consistent Format**: Standardized commit attribution across projects\n\n### Alternative: Manual Override\n\nYou can also manually set the author for individual commits:\n\n```bash\ngit -c user.name=\"Claude Code\" -c user.email=\"noreply@anthropic.com\" commit -m \"Your message\"\n```\n\n## Prerequisites\n\n- Repository must have at least one commit\n- Action needs `contents: write` permission to update README\n- Use `fetch-depth: 0` to get full git history\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Contributing\n\nPull requests welcome! Please ensure your commits follow the existing patterns for proper AI detection.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-ecoverse%2Fvibe-coded-badge-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fai-ecoverse%2Fvibe-coded-badge-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fai-ecoverse%2Fvibe-coded-badge-action/lists"}