A GitHub Action that reviews your pull request and gives it a brutally honest Gen Z vibe check, powered by Claude.
No cap.
Your CI pipeline runs tests. It checks types. It lints your code.
But does it tell you that your 47-file refactor is giving main character energy for absolutely no reason?
Does it let you know your variable naming ate and left no crumbs?
Does it clock that your commit message says fix stuff and you should be caught in 4K for that?
Now it does. PR Vibe Check posts one self-updating comment on every PR β the technical read is real (Claude actually reads your diff), the Gen Z wrapper just makes it hit different.
β¨ THE VIBE This PR understood the assignment β clean auth refactor with solid test coverage, genuinely no cap.
π₯ SLAY MOMENTS
- Extracted the token logic into its own util β fr fr that's how you do it bestie, separation of concerns ate
- Test coverage on the edge cases?? You didn't have to go that hard but you did. Respect.
- Commit history is actually readable. Unheard of in this economy.
π L MOMENTS
- That TODO comment from 2019 is living rent free in this codebase and it needs to be evicted immediately
handleDatais not a function name, that's a cry for help. Be more specific bestie π- 312 lines changed for a "small fix"?? The audacity of the PR description is sending me
π― VERDICT W β but the TODO comment situation has you on thin ice fr
π VIBE RATING: 7/10 β¨
no cap powered by pr-vibe-check Γ Claude Β· severity:
normal
See more in docs/example-comment.md.
1. Add your Anthropic API key to repo secrets
Settings β Secrets and variables β Actions β new secret:
ANTHROPIC_API_KEY = sk-ant-...
Grab a key at console.anthropic.com.
2. Add the workflow β .github/workflows/vibe-check.yml:
name: PR Vibe Check
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
pull-requests: write # needed to post the comment
jobs:
vibe-check:
runs-on: ubuntu-latest
steps:
- uses: 3243dwon/pr-vibe-check@v1
with:
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
severity: normal # soft | normal | brutalOpen a PR and let it rip. π₯
| Level | Vibe |
|---|---|
soft |
Encouraging, hype energy. Good for sensitive codebases or first-time contributors. |
normal |
Honest and funny. Roasts when needed, hypes when deserved. The default. |
brutal |
Zero filter. Absolutely ruthless. You asked for this. |
| Input | Required | Default | Description |
|---|---|---|---|
anthropic-api-key |
β | β | Your Anthropic API key (store in secrets). |
github-token |
β | ${{ github.token }} |
Token for reading the PR and posting the comment. |
severity |
β | normal |
soft / normal / brutal. |
model |
β | claude-sonnet-4-6 |
Claude model id. Swap to a Haiku for cheaper runs. |
comment |
β | true |
Set false to run without posting a comment. |
| Output | Example | Description |
|---|---|---|
rating |
7 |
Numeric vibe rating (0β10) parsed from the check. |
severity |
normal |
The severity level used. |
- Triggered when a PR is opened or updated.
- Fetches the diff + PR metadata via the GitHub API.
- Sends it to Claude with a carefully crafted Gen Z system prompt + your
severity. - Upserts a single comment on the PR β it updates its own comment on each push instead of spamming new ones.
The technical analysis is real; the slang is the wrapper, the substance is the gift.
Each vibe check is one Claude call β roughly $0.002β0.02 depending on PR size and model. Less than a cent on Haiku. Cheaper than your linter's ego.
The action is dependency-injected, so you can run the whole thing locally with a mocked @actions/core / @actions/github and a canned Claude response β no token, no key, no network:
npm install
npm test # unit tests (node --test)
npm run test:local # run the action with mocked toolkit; prints the comment it would post
npm run build # bundle src/ -> dist/index.js with @vercel/nccAlways
npm run buildand commitdist/before tagging β GitHub runs the action from the committed bundle. CI enforces this.
Powered by release-please + a job that moves the floating v1 / v1.x tags β see .github/workflows/release.yml. Commit with Conventional Commits, merge the release PR it opens, and v1 updates itself. Details in CONTRIBUTING.md.
PRs welcome. They will, of course, be vibe checked. See CONTRIBUTING.md.
MIT β do whatever bestie, just don't be mid about it. Β© 2026 3243dwon