{"id":"2953b141-0d1f-4567-87d0-e2556ba6c83c","shortId":"LRgYk2","kind":"skill","title":"bulk-github-star","tagline":"Star all repositories from a GitHub user automatically. Use when: (1) Supporting open source creators, (2) Bulk discovery of useful projects, or (3) Automating GitHub engagement.","description":"# Bulk GitHub Repository Starring\n\nAutomate starring all public repositories from any GitHub user with a single command.\n\n## When to use\n\n- User asks to star all repos from a specific GitHub user\n- Bulk appreciation for open source contributors\n- Discovering and saving all projects from a creator\n- Automation workflows for GitHub engagement\n\n## Required tools / APIs\n\n- GitHub CLI (`gh`) with authentication\n- No external API keys required (uses GitHub CLI token)\n\nInstall GitHub CLI:\n\n```bash\n# Ubuntu/Debian\nsudo apt-get install -y gh\n\n# macOS\nbrew install gh\n\n# Alpine (Docker)\napk add github-cli\n\n# Login required\ngh auth login\n```\n\n## Skills\n\n### star_all_user_repos\n\nStar all public repositories from a GitHub user.\n\n```bash\n# Star all repos from a user\nUSER=\"besoeasy\"\nrepos=$(gh repo list $USER --limit 100 | grep \"^$USER/\" | cut -f1)\n\nfor repo in $repos; do\n  echo \"Starring: $repo\"\n  gh api -X PUT /user/starred/$repo\ndone\n\necho \"Starred $(echo \"$repos\" | wc -l) repositories\"\n```\n\n**Node.js:**\n\n```javascript\nasync function starAllUserRepos(username) {\n  const { execSync } = require('child_process');\n  \n  // Get all repos for user\n  const output = execSync(`gh repo list ${username} --limit 100 --json nameWithOwner`, { encoding: 'utf8' });\n  const repos = JSON.parse(output);\n  \n  let starred = 0;\n  for (const repo of repos) {\n    const [owner, name] = repo.nameWithOwner.split('/');\n    try {\n      execSync(`gh api -X PUT /user/starred/${owner}/${name}`, { stdio: 'inherit' });\n      console.log(`✓ Starred: ${repo.nameWithOwner}`);\n      starred++;\n    } catch (err) {\n      console.error(`✗ Failed to star ${repo.nameWithOwner}:`, err.message);\n    }\n  }\n  \n  console.log(`\\nCompleted: ${starred}/${repos.length} repositories starred`);\n  return starred;\n}\n\n// Usage\n// starAllUserRepos('besoeasy');\n```\n\n### star_with_filter\n\nStar repos matching specific criteria (e.g., stars threshold, topic).\n\n```bash\n# Star only repos with >100 stars\nUSER=\"besoeasy\"\nMIN_STARS=100\n\ngh repo list $USER --limit 100 --json nameWithOwner,stargazerCount | \\\njq -r \".[] | select(.stargazerCount >= $MIN_STARS) | .nameWithOwner\" | \\\nwhile read repo; do\n  echo \"Starring: $repo ($(gh api /repos/$repo | jq -r '.stargazers_count') stars)\"\n  gh api -X PUT /user/starred/$repo\ndone\n```\n\n## Rate limits / Best practices\n\n- GitHub API: 5000 requests/hour for authenticated users\n- Add delays between requests: `sleep 0.5` to avoid rate limits\n- Respect GitHub ToS - don't use for spam or manipulation\n- Consider starring selectively rather than bulk for better curation\n\n## Agent prompt\n\n```text\nYou can bulk star GitHub repositories. When a user asks to star all repos from a GitHub user:\n\n1. Verify GitHub CLI is authenticated: gh auth status\n2. Get the list: gh repo list <username> --limit 100\n3. Star each using: gh api -X PUT /user/starred/<owner>/<repo>\n4. Report count of starred repositories\n\nAlways confirm the exact username before executing.\nNever star private repos (not accessible via public API anyway).\n```\n\n## Troubleshooting\n\n**Error: \"gh: command not found\"**\n- Install GitHub CLI first using package manager\n\n**Error: \"not logged in\"**\n- Run `gh auth login` and follow browser authentication\n\n**Error: \"API rate limit exceeded\"**\n- Wait 1 hour for rate limit reset\n- Use `sleep 1` between requests to slow down\n\n**Error: \"Not Found\"**\n- Verify the username is correct\n- Check if user exists: `gh user view <username>`\n\n## See also\n\n- [random-contributor](../random-contributor/SKILL.md) — find contributors to appreciate\n- [file-tracker](../file-tracker/SKILL.md) — track file changes in starred repos","tags":["bulk","github","star","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools"],"capabilities":["skill","source-besoeasy","skill-bulk-github-star","topic-agent-skills","topic-ai-agents","topic-claude-code","topic-clawdbot","topic-clawdbot-skill","topic-llm-tools","topic-mcp-server","topic-openai","topic-openclaw","topic-vibe-coding","topic-vibecoding"],"categories":["open-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/besoeasy/open-skills/bulk-github-star","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add besoeasy/open-skills","source_repo":"https://github.com/besoeasy/open-skills","install_from":"skills.sh"}},"qualityScore":"0.505","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 111 github stars · SKILL.md body (3,618 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T12:55:02.649Z","embedding":null,"createdAt":"2026-04-18T22:10:33.491Z","updatedAt":"2026-05-02T12:55:02.649Z","lastSeenAt":"2026-05-02T12:55:02.649Z","tsv":"'/file-tracker/skill.md':507 '/random-contributor/skill.md':499 '/repos':309 '/user/starred':171,232,320,410 '0':216 '0.5':339 '1':15,384,465,473 '100':154,205,277,283,289,401 '2':20,393 '3':27,402 '4':411 '5000':329 'access':429 'add':117,334 'agent':363 'alpin':114 'also':495 'alway':417 'anyway':433 'api':83,91,168,229,308,317,328,407,432,460 'apk':116 'appreci':63,503 'apt':105 'apt-get':104 'ask':52,375 'async':183 'auth':124,391,453 'authent':88,332,389,458 'autom':28,35,76 'automat':12 'avoid':341 'bash':101,139,272 'besoeasi':147,259,280 'best':325 'better':361 'brew':111 'browser':457 'bulk':2,21,31,62,359,368 'bulk-github-star':1 'catch':241 'chang':510 'check':487 'child':190 'cli':85,96,100,120,387,442 'command':47,437 'confirm':418 'consid':354 'console.error':243 'console.log':237,249 'const':187,197,210,218,222 'contributor':67,498,501 'correct':486 'count':314,413 'creator':19,75 'criteria':267 'curat':362 'cut':157 'delay':335 'discov':68 'discoveri':22 'docker':115 'done':173,322 'e.g':268 'echo':164,174,176,304 'encod':208 'engag':30,80 'err':242 'err.message':248 'error':435,447,459,479 'exact':420 'exceed':463 'execsync':188,199,227 'execut':423 'exist':490 'extern':90 'f1':158 'fail':244 'file':505,509 'file-track':504 'filter':262 'find':500 'first':443 'follow':456 'found':439,481 'function':184 'get':106,192,394 'gh':86,109,113,123,149,167,200,228,284,307,316,390,397,406,436,452,491 'github':3,10,29,32,42,60,79,84,95,99,119,137,327,345,370,382,386,441 'github-c':118 'grep':155 'hour':466 'inherit':236 'instal':98,107,112,440 'javascript':182 'jq':293,311 'json':206,290 'json.parse':212 'key':92 'l':179 'let':214 'limit':153,204,288,324,343,400,462,469 'list':151,202,286,396,399 'log':449 'login':121,125,454 'maco':110 'manag':446 'manipul':353 'match':265 'min':281,297 'name':224,234 'namewithown':207,291,299 'ncomplet':250 'never':424 'node.js':181 'open':17,65 'output':198,213 'owner':223,233 'packag':445 'practic':326 'privat':426 'process':191 'project':25,72 'prompt':364 'public':38,133,431 'put':170,231,319,409 'r':294,312 'random':497 'random-contributor':496 'rate':323,342,461,468 'rather':357 'read':301 'repo':56,130,142,148,150,160,162,166,172,177,194,201,211,219,221,264,275,285,302,306,310,321,379,398,427,513 'repo.namewithowner':239,247 'repo.namewithowner.split':225 'report':412 'repos.length':252 'repositori':7,33,39,134,180,253,371,416 'request':337,475 'requests/hour':330 'requir':81,93,122,189 'reset':470 'respect':344 'return':255 'run':451 'save':70 'see':494 'select':295,356 'singl':46 'skill':126 'skill-bulk-github-star' 'sleep':338,472 'slow':477 'sourc':18,66 'source-besoeasy' 'spam':351 'specif':59,266 'star':4,5,34,36,54,127,131,140,165,175,215,238,240,246,251,254,256,260,263,269,273,278,282,298,305,315,355,369,377,403,415,425,512 'staralluserrepo':185,258 'stargaz':313 'stargazercount':292,296 'status':392 'stdio':235 'sudo':103 'support':16 'text':365 'threshold':270 'token':97 'tool':82 'topic':271 'topic-agent-skills' 'topic-ai-agents' 'topic-claude-code' 'topic-clawdbot' 'topic-clawdbot-skill' 'topic-llm-tools' 'topic-mcp-server' 'topic-openai' 'topic-openclaw' 'topic-vibe-coding' 'topic-vibecoding' 'tos':346 'track':508 'tracker':506 'tri':226 'troubleshoot':434 'ubuntu/debian':102 'usag':257 'use':13,24,50,94,349,405,444,471 'user':11,43,51,61,129,138,145,146,152,156,196,279,287,333,374,383,489,492 'usernam':186,203,421,484 'utf8':209 'verifi':385,482 'via':430 'view':493 'wait':464 'wc':178 'workflow':77 'x':169,230,318,408 'y':108","prices":[{"id":"a9eb9cbc-3e18-48a1-b774-e3e66e2b0d53","listingId":"2953b141-0d1f-4567-87d0-e2556ba6c83c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"besoeasy","category":"open-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:10:33.491Z"}],"sources":[{"listingId":"2953b141-0d1f-4567-87d0-e2556ba6c83c","source":"github","sourceId":"besoeasy/open-skills/bulk-github-star","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/bulk-github-star","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:33.491Z","lastSeenAt":"2026-05-02T12:55:02.649Z"}],"details":{"listingId":"2953b141-0d1f-4567-87d0-e2556ba6c83c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"bulk-github-star","github":{"repo":"besoeasy/open-skills","stars":111,"topics":["agent-skills","ai","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server","openai","openclaw","vibe-coding","vibecoding"],"license":null,"html_url":"https://github.com/besoeasy/open-skills","pushed_at":"2026-03-31T13:05:30Z","description":"Battle-tested skill library for AI agents. Save 98% of API costs with ready-to-use code for crypto, PDFs, search, web scraping & more. No trial-and-error, no expensive APIs.","skill_md_sha":"5c0afc899e032f0c1c4e9a456506635e242779c1","skill_md_path":"skills/bulk-github-star/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/bulk-github-star"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"bulk-github-star","description":"Star all repositories from a GitHub user automatically. Use when: (1) Supporting open source creators, (2) Bulk discovery of useful projects, or (3) Automating GitHub engagement."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/bulk-github-star"},"updatedAt":"2026-05-02T12:55:02.649Z"}}