Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Add a self-hosted "Stargazers over time" chart to any GitHub repo's README. GitHub now restricts the stargazers endpoint to a repo's own admins/collaborators, so third-party live services (star-history free tier, starchart.cc) return "Requires authentication" for everyone. This generates a static, theme-aware SVG in-repo and auto-refreshes it weekly with a GitHub Action using the repo's own GITHUB_TOKEN. Use when the star chart in a README is broken, shows "Requires authentication", or you want
.claude/skills/davila7-star-history-chart/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-01 | ✗→✓ | ▲ Improved | -52% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 82% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -50% | 0% |
Add a "Stargazers over time" chart that renders from a static SVG committed to the repo and refreshes itself weekly — no external chart service, no broken images.
GitHub now restricts the /stargazers endpoint to a repository's own admins and collaborators. Unauthenticated requests return {"message":"Requires authentication"}, which breaks every third-party live-chart service (star-history.com free tier, starchart.cc, etc.) for all repos. The only reliable fix is to generate the chart yourself with an authenticated token and commit a static image. Inside GitHub Actions, the repo's own GITHUB_TOKEN can read its own stargazers, so the whole thing runs with zero secrets to configure.
scripts/generate_star_history.py — fetches stargazers (authenticated),renders a clean, light/dark-adaptive SVG.
.github/workflows/star-history.yml — weekly cron + manual trigger thatregenerates and commits docs/star-history.svg.
bashmkdir -p scripts .github/workflows docs cp skills/git/star-history-chart/scripts/generate_star_history.py scripts/generate_star_history.py cp skills/git/star-history-chart/assets/star-history.yml .github/workflows/star-history.yml
> The script needs the requests package: pip install requests. > It resolves the repo from STAR_HISTORY_REPO, then GITHUB_REPOSITORY > (set automatically in Actions), then the origin git remote — so no edits > are required for it to work in a different repo.
Use a token that can read the repo's stargazers (as owner/collaborator). The GitHub CLI provides one:
bashGITHUB_TOKEN=$(gh auth token) python scripts/generate_star_history.py
This writes docs/star-history.svg. For a repo with many thousands of stars the first run paginates the whole stargazer list and can take a couple of minutes.
Verify it rendered (optional, macOS): qlmanage -t -s 800 -o . docs/star-history.svg
Add or replace the star chart section. Point the image at the local SVG. Set the link target to wherever you want clicks to go (the repo, a docs page, or your own site):
markdown## Stargazers over time [](https://github.com/OWNER/REPO/stargazers)
If replacing a broken star-history.com / starchart.cc embed, swap only the image URL to docs/star-history.svg and keep or update the link target.
bashgit add scripts/generate_star_history.py .github/workflows/star-history.yml docs/star-history.svg README.md git commit -m "feat(readme): self-hosted stargazers chart with weekly auto-refresh" git push
The workflow runs every Monday at 04:00 UTC. To refresh immediately without waiting: GitHub → Actions → "Update Star History" → Run workflow.
STAR_HISTORY_OUTPUT (default docs/star-history.svg).STAR_HISTORY_REPO=owner/name..line, .area, .dot CSS and WIDTH/HEIGHTconstants near the top of generate_star_history.py. The chart is theme-aware via a prefers-color-scheme: dark block, so it looks right in both GitHub light and dark modes.
cron expression in the workflow.GITHUB_TOKEN.requests plus the Python standard library.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | fail→pass | 8,974 | 1,722 | -81% | 1 | 1 | 0% | 1,413 | 1,194 | -15% | 0 | 0 | — |
case-21 | pass→pass | 9,292 | 9,150 | -2% | 1 | 1 | 0% | 1,833 | 2,920 | +59% | 0 | 0 | — |
case-22 | pass→pass | 8,432 | 5,344 | -37% | 1 | 1 | 0% | 1,451 | 1,919 | +32% | 0 | 0 | — |
case-01 | fail→pass | 21,183 | 6,845 | -68% | 1 | 1 | 0% | 4,906 | 2,368 | -52% | 0 | 0 | — |
case-02 | fail→fail | 6,357 | 3,614 | -43% | 1 | 1 | 0% | 213 | 1,443 | +577% | 0 | 0 | — |
case-03 | fail→fail | 18,015 | 5,228 | -71% | 1 | 1 | 0% | 3,839 | 1,273 | -67% | 0 | 0 | — |
case-04 | fail→pass | 9,225 | 1,901 | -79% | 1 | 1 | 0% | 1,434 | 1,318 | -8% | 0 | 0 | — |
case-05 | fail→pass | 3,854 | 1,475 | -62% | 1 | 1 | 0% | 665 | 1,209 | +82% | 0 | 0 | — |
case-06 | pass→pass | 8,640 | 1,462 | -83% | 1 | 1 | 0% | 1,417 | 1,241 | -12% | 0 | 0 | — |
case-08 | fail→pass | 15,445 | 2,721 | -82% | 1 | 1 | 0% | 2,767 | 1,385 | -50% | 0 | 0 | — |
case-09 | fail→pass | 5,120 | 2,225 | -57% | 1 | 1 | 0% | 698 | 1,356 | +94% | 0 | 0 | — |
case-10 | fail→pass | 7,787 | 1,648 | -79% | 1 | 1 | 0% | 1,263 | 1,247 | -1% | 0 | 0 | — |
case-11 | fail→pass | 8,840 | 1,618 | -82% | 1 | 1 | 0% | 1,556 | 1,194 | -23% | 0 | 0 | — |
case-12 | fail→pass | 12,166 | 1,921 | -84% | 1 | 1 | 0% | 2,005 | 1,285 | -36% | 0 | 0 | — |
case-13 | fail→pass | 10,632 | 1,533 | -86% | 1 | 1 | 0% | 1,743 | 1,191 | -32% | 0 | 0 | — |
case-14 | fail→pass | 9,130 | 3,713 | -59% | 1 | 1 | 0% | 1,557 | 1,518 | -3% | 0 | 0 | — |
case-15 | pass→pass | 13,122 | 4,625 | -65% | 1 | 1 | 0% | 2,380 | 1,859 | -22% | 0 | 0 | — |
case-16 | fail→pass | 9,914 | 4,026 | -59% | 1 | 1 | 0% | 1,593 | 1,676 | +5% | 0 | 0 | — |
case-17 | pass→pass | 11,749 | 6,228 | -47% | 1 | 1 | 0% | 1,970 | 2,128 | +8% | 0 | 0 | — |
case-18 | pass→pass | 11,682 | 3,056 | -74% | 1 | 1 | 0% | 1,880 | 1,533 | -18% | 0 | 0 | — |
case-19 | fail→pass | 9,245 | 1,846 | -80% | 1 | 1 | 0% | 1,369 | 1,256 | -8% | 0 | 0 | — |
case-20 | pass→pass | 7,531 | 7,308 | -3% | 1 | 1 | 0% | 1,461 | 2,392 | +64% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.