{"id":"8c7e58ba-77a1-4f50-8a3e-0ba2508e3588","shortId":"gpw2tB","kind":"skill","title":"random-contributor","tagline":"Pick a random contributor from a GitHub repository using the GitHub API or repository pages (no auth required for public repos).","description":"# Random Contributor Skill\n\nPurpose\n- Select a uniformly random contributor from a public GitHub repository. Useful for sampling, shoutouts, delegation, or fair assignment among contributors.\n\nWhat it does\n- Uses GitHub REST API (public endpoints) to list contributors for a repo (handles pagination).\n- Falls back to scraping the repository's contributors page if API rate limits or CORS prevent API use.\n- Returns contributor info: login, name (if available), avatar URL, profile URL, contributions count.\n\nWhen to use\n- Pick a random maintainer or contributor for tasks like \"who should review\" or \"who to credit\".\n- Should be used only on public repositories.\n\nPrerequisites\n- `curl` and `jq` for Bash examples, or Node.js 18+ for JS examples.\n- Optional GitHub token (GH_TOKEN) increases rate limits; skill works without it for small repos.\n\nExamples\n--------\n\nBash (uses GitHub API; paginates with per_page=100):\n\n```bash\nREPO_OWNER=besoeasy\nREPO_NAME=open-skills\n\n# Fetch contributor list (public API). Uses optional GH_TOKEN env for higher rate limit.\nAUTH_HEADER=\"\"\nif [ -n \"${GH_TOKEN:-}\" ]; then\n  AUTH_HEADER=\"-H \\\"Authorization: token ${GH_TOKEN}\\\"\"\nfi\n\n# Get contributors (first page); for large repos you'd page. Here we do simple pagination loop.\ncontributors=()\npage=1\nwhile true; do\n  out=$(eval \"curl -fsS ${AUTH_HEADER} \\\"https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/contributors?per_page=100&page=${page}\\\"\")\n  count=$(echo \"$out\" | jq 'length')\n  if [ \"$count\" -eq 0 ]; then break; fi\n  logins=$(echo \"$out\" | jq -r '.[].login')\n  while read -r l; do contributors+=(\"$l\"); done <<< \"$logins\"\n  if [ \"$count\" -lt 100 ]; then break; fi\n  page=$((page+1))\ndone\n\n# Pick random\nidx=$((RANDOM % ${#contributors[@]}))\nselected=${contributors[$idx]}\necho \"$selected\"\n```\n\nNode.js (recommended: uses native fetch and handles pagination):\n\n```javascript\nasync function getRandomContributor(owner, repo, token) {\n  const headers = {};\n  if (token) headers['Authorization'] = `token ${token}`;\n\n  let page = 1;\n  const per = 100;\n  const all = [];\n\n  while (true) {\n    const url = `https://api.github.com/repos/${owner}/${repo}/contributors?per_page=${per}&page=${page}`;\n    const res = await fetch(url, { headers });\n    if (!res.ok) break;\n    const data = await res.json();\n    if (!Array.isArray(data) || data.length === 0) break;\n    all.push(...data);\n    if (data.length < per) break;\n    page++;\n  }\n\n  if (!all.length) return null;\n  const pick = all[Math.floor(Math.random() * all.length)];\n  return {\n    login: pick.login,\n    avatar: pick.avatar_url,\n    profile: pick.html_url,\n    contributions: pick.contributions\n  };\n}\n\n// Usage:\n// getRandomContributor('besoeasy','open-skills', process.env.GH_TOKEN).then(console.log)\n```\n\nAgent prompt\n------------\n\n\"Find a random contributor for {owner}/{repo}. Use the GitHub API; if API rate limits block you, fall back to scraping the contributors page. Return JSON: {login, name?, avatar, profile, contributions}.\"\n\nNotes & Caveats\n- For very large repos (>1000 contributors) consider streaming or reservoir sampling instead of fetching all contributors at once.\n- Respect GitHub API rate limits; provide an option to use GH_TOKEN to increase limits.\n- Public repos only; do not attempt to access private repos without appropriate credentials.\n\nSee also\n- skills/check-crypto-address-balance (example of API usage patterns)","tags":["random","contributor","open","skills","besoeasy","agent-skills","ai-agents","claude-code","clawdbot","clawdbot-skill","llm-tools","mcp-server"],"capabilities":["skill","source-besoeasy","skill-random-contributor","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/random-contributor","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,405 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:04.593Z","embedding":null,"createdAt":"2026-04-18T22:10:52.661Z","updatedAt":"2026-05-02T12:55:04.593Z","lastSeenAt":"2026-05-02T12:55:04.593Z","tsv":"'+1':276 '/contributors':234,328 '/repos/$':229,325 '0':248,351 '1':217,313 '100':160,237,270,316 '1000':430 '18':132 'access':466 'agent':391 'all.length':361,369 'all.push':353 'also':473 'among':47 'api':15,55,76,82,155,174,403,405,446,477 'api.github.com':228,324 'api.github.com/repos/$':227,323 'appropri':470 'array.isarray':348 'assign':46 'async':297 'attempt':464 'auth':20,184,191,225 'author':194,308 'avail':90 'avatar':91,373,421 'await':336,345 'back':67,411 'bash':128,152,161 'besoeasi':164,383 'block':408 'break':250,272,342,352,358 'caveat':425 'consid':432 'console.log':390 'const':303,314,317,321,334,343,364 'contribut':95,379,423 'contributor':3,7,26,33,48,60,73,85,105,171,200,215,263,282,284,396,415,431,441 'cor':80 'count':96,240,246,268 'credenti':471 'credit':115 'curl':124,223 'd':207 'data':344,349,354 'data.length':350,356 'deleg':43 'done':265,277 'echo':241,253,286 'endpoint':57 'env':179 'eq':247 'eval':222 'exampl':129,135,151,475 'fair':45 'fall':66,410 'fetch':170,292,337,439 'fi':198,251,273 'find':393 'first':201 'fss':224 'function':298 'get':199 'getrandomcontributor':299,382 'gh':139,177,188,196,454 'github':10,14,37,53,137,154,402,445 'h':193 'handl':64,294 'header':185,192,226,304,307,339 'higher':181 'idx':280,285 'increas':141,457 'info':86 'instead':437 'javascript':296 'jq':126,243,255 'js':134 'json':418 'l':261,264 'larg':204,428 'length':244 'let':311 'like':108 'limit':78,143,183,407,448,458 'list':59,172 'login':87,252,257,266,371,419 'loop':214 'lt':269 'maintain':103 'math.floor':367 'math.random':368 'n':187 'name':88,166,233,420 'nativ':291 'node.js':131,288 'note':424 'null':363 'open':168,385 'open-skil':167,384 'option':136,176,451 'owner':163,231,300,326,398 'page':18,74,159,202,208,216,236,238,239,274,275,312,330,332,333,359,416 'pagin':65,156,213,295 'pattern':479 'per':158,235,315,329,331,357 'pick':4,100,278,365 'pick.avatar':374 'pick.contributions':380 'pick.html':377 'pick.login':372 'prerequisit':123 'prevent':81 'privat':467 'process.env.gh':387 'profil':93,376,422 'prompt':392 'provid':449 'public':23,36,56,121,173,459 'purpos':28 'r':256,260 'random':2,6,25,32,102,279,281,395 'random-contributor':1 'rate':77,142,182,406,447 'read':259 'recommend':289 'repo':24,63,150,162,165,205,230,232,301,327,399,429,460,468 'repositori':11,17,38,71,122 'requir':21 'res':335 'res.json':346 'res.ok':341 'reservoir':435 'respect':444 'rest':54 'return':84,362,370,417 'review':111 'sampl':41,436 'scrape':69,413 'see':472 'select':29,283,287 'shoutout':42 'simpl':212 'skill':27,144,169,386 'skill-random-contributor' 'skills/check-crypto-address-balance':474 'small':149 'source-besoeasy' 'stream':433 'task':107 'token':138,140,178,189,195,197,302,306,309,310,388,455 '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' 'true':219,320 'uniform':31 'url':92,94,322,338,375,378 'usag':381,478 'use':12,39,52,83,99,118,153,175,290,400,453 'without':146,469 'work':145","prices":[{"id":"b3c1c468-ff77-47ed-946c-b73412a46e65","listingId":"8c7e58ba-77a1-4f50-8a3e-0ba2508e3588","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:52.661Z"}],"sources":[{"listingId":"8c7e58ba-77a1-4f50-8a3e-0ba2508e3588","source":"github","sourceId":"besoeasy/open-skills/random-contributor","sourceUrl":"https://github.com/besoeasy/open-skills/tree/main/skills/random-contributor","isPrimary":false,"firstSeenAt":"2026-04-18T22:10:52.661Z","lastSeenAt":"2026-05-02T12:55:04.593Z"}],"details":{"listingId":"8c7e58ba-77a1-4f50-8a3e-0ba2508e3588","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"besoeasy","slug":"random-contributor","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":"d4d18b47a59aff021438bb346c33854d7c4cc1e6","skill_md_path":"skills/random-contributor/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/besoeasy/open-skills/tree/main/skills/random-contributor"},"layout":"multi","source":"github","category":"open-skills","frontmatter":{"name":"random-contributor","description":"Pick a random contributor from a GitHub repository using the GitHub API or repository pages (no auth required for public repos)."},"skills_sh_url":"https://skills.sh/besoeasy/open-skills/random-contributor"},"updatedAt":"2026-05-02T12:55:04.593Z"}}