robertbotto.com / Built myself / everycommit
everycommit
My GitHub profile says 4,099. I shipped more.
One honest contribution graph across all your GitHub accounts. Every branch, deduplicated by SHA, faked commits filtered out.
Free and open source. MIT. Zero dependencies. Node 22+.

- 1 What GitHub shows
- 2 Every account
- 3 Every verified commit
Step 1: What GitHub shows. 4,099. One account. Default branch only.


- Main profile
- 4,099
- All four accounts
- 6,059
- everycommit
- 6,555
- GitHub does not show
- +2,456 (+60%)
No hype. Just the facts.
- MIT licensed
- Zero dependencies
- Node 22+
- Read-only tokens
- Per-day counts only
- No repo names in output
One account is not your year.
GitHub shows one account. It counts only commits that land on the default branch. A squash-merged pull request collapses into a single commit. If your week is split across a work account and a personal one, a big chunk of it is invisible.
Four accounts, one graph. No per-account numbers here, because the point is the sum, not the split.
Here is the whole gap.
| Step | Contributions | Added |
|---|---|---|
| Main profile, what GitHub shows | 4,099 | |
| All four accounts, calendars added up | 6,059 | +1,960 (derived) |
| everycommit, every verified commit | 6,555 | +496 (derived) |
| GitHub does not show | +2,456 (+60%) |
4,268 verified commits from 26 repos. 182 active days. Busiest day: 737.
A bigger number means nothing if it can be faked.
everycommit counts verified commits only, and every rule that keeps the number honest is built in. A typo in the policy is an error, not a silent loosening.
| Way to fake it | What stops it |
|---|---|
| Edit activity.json by hand | The file is signed by the official publish workflow. everycommit verify checks the signature and recomputes every total from the daily series. |
| Run a modified copy of the tool | The official workflow runs its own code at its own commit, taken from the job's OIDC claims, never code from your repository. A modified fork signs as a different workflow and fails verification. |
| Claim someone else's commits | A commit counts only when GitHub linked it to an account you proved with that account's own token, and its email is verified on that account (or is the account's own noreply address). |
| Add a stranger's account | Each account's token must belong to that account. A login without a token is only ever self-reported. |
| Graph-painting scripts and backdated commits | Excluded and counted: empty commits, commits made before their repo existed, bursts of more than 20 commits in a minute in one repo, future-dated commits. Merge commits are excluded because they repeat work already counted. |
| Use everycommit to generate commits | It never writes to any repository. It needs read-only tokens only. |
Verified, not faked. Never productivity. It proves the squares are real. It says nothing about whether the work was good.
Signing above describes the publish workflow. The first production signed run is still in progress; see the note under Publish a signed graph.
GitHub will credit you with commits you did not write.
GitHub links a commit to any account that has added the email on it. Adding an email needs no mailbox proof. So a naive tool can be gamed by claiming a stranger's email and pulling in their commits. everycommit only counts a commit as verified if GitHub links it to one of your accounts and the email is verified on that account, or is that account's own noreply address. Everything else is self-reported, on its own line, never added to the verified total.
- Add any email, no proof needed.GitHub links commits with that email to the account.
- Claim a stranger's history.A naive tool counts those commits as yours.
- The fix: prove the account, verify the email.Each account is proven by its own token, and the token's owner has to match the login.
Two commands. Your real graph.
$ npx everycommit init
$ npx everycommit collect --use-gh-cli --svg activity.svgRequires Node 22+ and the GitHub CLI logged in to each account (gh auth login), with the user:email scope so everycommit can see which emails each account has verified (gh auth refresh -s user:email).
Put it on your profile.
Drop the static SVG in your README, or embed the web component with the same 3-step reveal from the video.
<script type="module" src="https://<you>.github.io/activity/every-commit.js"></script>
<every-commit src="https://<you>.github.io/activity/activity.json" attestation-repo="<you>/activity"></every-commit>
Publish it so anyone can check it.
First production signed run in progress. Until it passes end to end, treat signing as the publish workflow, not a verified result.
The publish workflow signs activity.json and the SVG with GitHub artifact attestations, so anyone can check a published graph instead of taking a screenshot on trust. It is the workflow, described here; the first live run has not been verified yet.
- 1. Create a public repo.For example
<you>/activity. It only ever holds per-day counts. - 2. Add the config and the workflow.Add
everycommit.config.jsonand copyexamples/caller.ymlto.github/workflows/everycommit.yml. - 3. Add one read-only token per account, enable Pages, run it.Save them as repo secrets
EVERYCOMMIT_TOKEN_1,EVERYCOMMIT_TOKEN_2, and so on.
$ npx everycommit verify activity.json --repo <you>/activityGive this to your agent.
Most people will not run the commands themselves. They will paste a prompt into their AI coding agent and let it do the setup. Copy this one, replace <you> with your GitHub username, and paste it in.
Set up everycommit for me. everycommit is an open-source CLI (MIT, zero dependencies, Node 22+) that builds one honest contribution graph across all my GitHub accounts: every branch, deduplicated by SHA, with faked commits filtered out.
Do this:
1. Install and run it locally first. Run `npx everycommit init`, then `npx everycommit collect --use-gh-cli --svg activity.svg`. It reads my existing gh logins on this machine. It needs read-only tokens only and never writes to any repository.
2. Include every GitHub account I own. A commit counts as verified only when GitHub links it to an account I proved with that account's own token, and its email is verified on that account (or is that account's own noreply address). Everything else is self-reported and must stay on its own line, never added to the verified total.
3. If one of my accounts is a work account whose employer restricts third-party tools, use `scanRepos: false` for that account. That proves I own the account and counts its GitHub calendar without listing or reading its repositories.
4. Publish a signed graph so anyone can check it. Create a public repo `<you>/activity`, add `everycommit.config.json`, copy `examples/caller.yml` from the everycommit repo to `.github/workflows/everycommit.yml`, save one read-only token per account as repo secrets `EVERYCOMMIT_TOKEN_1`, `EVERYCOMMIT_TOKEN_2`, and so on, enable GitHub Pages, and run the workflow.
5. Verify it before you claim it works. Run `npx everycommit verify activity.json --repo <you>/activity` and show me the result. Do not tell me the graph is signed or verified until that command passes. If it fails, show me the exact error and stop.
6. Put it on my profile. Add the static SVG to my profile README with ``, or embed the web component with the same 3-step reveal:
`<script type="module" src="https://<you>.github.io/activity/every-commit.js"></script>` and `<every-commit src="https://<you>.github.io/activity/activity.json" attestation-repo="<you>/activity"></every-commit>`
Rules for the whole job:
- The output is per-day counts only. It must never contain repo names, logins, emails, commit messages, or file contents. Private repo names never leak.
- Do not invent numbers. Use only the totals the tool itself outputs. Never claim a star count, download count, or trending rank.
- The claim is narrow: verified, not faked. Never describe it as a productivity metric. It proves the squares are real. It says nothing about whether the work was good.
- Report back with the verified total, how many accounts were included, and the `verify` result. If anything is unverified, say so plainly instead of filling the gap.What the other options do.
| GitHub's graph | Graph mergers | Commit importers | everycommit | |
|---|---|---|---|---|
| Several accounts | No | Yes | Yes | Yes |
| Commits on every branch | No | No | No | Yes |
| Deduplicated by SHA | n/a | No | No | Yes |
| Private repositories | Own profile only | Usually not | Yes | Yes, read-only |
| Filters faked commits | No | No | They are the fake commits | Yes |
| Signed, verifiable output | n/a | No | No | Yes, via the publish workflow - see caveat above. |
Will this leak my work repos?
No. The output is per-day counts. Private repo names never appear in the output.
What the output contains
- Per-day counts only
- One total per day, plus the policy that produced it
- Totals across the accounts you proved
What it never contains
- No repo names
- No logins
- No emails
- No commit messages or file contents
For a work account whose employer restricts third-party tools, scanRepos: false proves you own the account and counts its GitHub calendar, without listing or reading its repositories.
Try to fake it.
Green squares do not prove you are good at your job.
Agreed. everycommit's claim is narrow on purpose: verified, not faked. Not productive. The squares should at least be real.
Could I just write a thousand meaningless commits?
Yes. Filters catch fakes, not low-value work. A determined person can still write real but meaningless commits. That is why the claim stays narrow.
Why not just turn on private contributions?
That still shows one account, and only the default branch. Work in branches, and work on other accounts, stays invisible.
Do my tokens ever leave my machine?
In local mode, no. It reads your existing gh logins on your machine. The code is open source: read it on GitHub.
Can the number ever come out below GitHub?
No. Per day it takes the larger of GitHub's own calendars and your verified commits. It only ever adds what GitHub missed.
Found a way to fake a graph that gets past these checks? Report it privately. See SECURITY.md in the repo. That is the feedback I want most.
Your graph deserves to be true.
Free, open source, fast. Two commands and you see the year you actually shipped.
everycommit is MIT licensed. Built by Robert Botto.