[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F6W7D3TACFDFH0RRFKQ3JK":3,"skill-same:01M6F6W7D3TACFDFH0RRFKQ3JK":102},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":57,"linkOnly":58,"markdownContent":59,"markdownBody":60,"frontMatter":61,"refName":41,"commitSha":82,"skillDirectory":83,"forksCount":84,"repositoryHtmlUrl":85,"repositoryHomepageUrl":6,"ownerHtmlUrl":86,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":87,"install":88,"resources":101},"01M6F6W7D3TACFDFH0RRFKQ3JK","gh-image",null,"Upload local images to GitHub and get canonical user-attachments embed URLs; use when asked to attach a screenshot to a PR, issue, or comment, or to embed before\u002Fafter images in a README.","boisenoise\u002Fskills-collections","boisenoise","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F193180?v=4","01M6CDBDQK6BDN55ZMA6B6PKBM","01M6CDBDVSJ3JPTBYN26FZ7TZK",13,"MIT","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-gh-image\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],"gh image","gh","image","issue","2026","when","canonical","embed","critical","token","get","local","upload","main","attach","community","developer-tools","images","use","session","README","Tools","gh extension","license","screenshot","code","pr","gemini","cli","2026-11-10 10:12:30",false,"---\nname: gh-image\ndescription: \"Upload local images to GitHub and get canonical user-attachments embed URLs; use when asked to attach a screenshot to a PR, issue, or comment, or to embed before\u002Fafter images in a README.\"\ncategory: developer-tools\nrisk: critical\nsource: community\nsource_type: community\nsource_repo: drogers0\u002Fgh-image\ndate_added: \"2026-06-25\"\nauthor: drogers0\nlicense: MIT\nlicense_source: \"https:\u002F\u002Fgithub.com\u002Fdrogers0\u002Fgh-image\u002Fblob\u002Fmain\u002FLICENSE\"\ntags:\n  - github\n  - images\n  - screenshots\n  - gh-extension\n  - cli\ntools:\n  - claude-code\n  - codex-cli\n  - cursor\n  - gemini-cli\nplugin:\n  targets:\n    codex: blocked\n    claude: blocked\n  setup:\n    type: manual\n    summary: \"Installs and runs a third-party gh extension that needs a GitHub user_session cookie or GH_SESSION_TOKEN.\"\n    docs: SKILL.md\n---\n\n# Upload images to GitHub (gh-image)\n\nGitHub has **no public API** for image uploads — the web UI uses an internal\nendpoint that mints `user-attachments` URLs scoped to the repo's visibility.\n[`gh-image`](https:\u002F\u002Fgithub.com\u002Fdrogers0\u002Fgh-image) (MIT, © drogers0) replicates\nthat flow as a `gh` CLI extension, so an agent can upload a local image from the\nterminal and get a ready-to-embed Markdown image line back.\n\n## Overview\n\nThis skill drives `gh-image` to turn a local image file into a hosted GitHub\n`user-attachments` URL, then embeds that URL into a pull request, issue, or\ncomment. It is the missing \"attach a screenshot\" capability for terminal agents.\n\n## When to Use This Skill\n\nUse this skill when asked to:\n\n- \"Attach a screenshot to the PR\" or \"add an image to the PR description\"\n- \"Put this image in the issue\" \u002F \"comment with these screenshots\"\n- \"Show the test results \u002F before-and-after in the PR\"\n- Embed any local image into GitHub Markdown without leaving the terminal\n\n## How It Works\n\n### Step 1: Verify prerequisites\n\n```bash\ngh auth status                                   # gh installed & authenticated\ngh extension list | grep -q 'drogers0\u002Fgh-image' \\\n  || gh extension install drogers0\u002Fgh-image      # review\u002Fpin the extension source first\n```\n\n`gh-image` does **not** use the `gh` token for the upload (that endpoint rejects\ntokens). It needs a GitHub `user_session` cookie, resolved in this order:\n`--token \u003Cvalue>` flag → `GH_SESSION_TOKEN` env var (use in CI\u002Fheadless) → a\nlogged-in browser's cookie store (default for local use).\n\nBefore upload, verify the intended repository, image privacy and explicit transfer scope. Browser cookie access requires the user’s authorization for that credential source; do not scrape unrelated browser profiles or pass a session value via `--token`. Internal attachment endpoints and visibility behavior can change: do not treat an unguessable URL or a private repository alone as proof of attachment confidentiality. Verify access with the intended audience and use a different approved sharing method when confidentiality cannot be established.\n\n### Step 2: Upload\n\n```bash\n# Use an absolute path; --repo is optional inside a repo working dir.\ngh image \"\u002Fabs\u002Fpath\u002Fscreenshot.png\" --repo \u003Cowner>\u002F\u003Crepo>\n```\n\n`gh image` prints Markdown to **stdout**, one line per image:\n\n```\n![screenshot.png](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F\u003Cuuid>)\n```\n\nCapture that output — it is the embeddable reference.\n\n### Step 3: Embed into the PR \u002F issue \u002F comment\n\n```bash\nMD=\"$(gh image \"\u002Fabs\u002Fpath\u002Fshot.png\" --repo owner\u002Frepo)\"\nBODY=\"$(gh pr view \u003Cpr> --repo owner\u002Frepo --json body -q .body)\"\nprintf '%s\\n\\n## Screenshots\\n\\n%s\\n' \"$BODY\" \"$MD\" \\\n  | gh pr edit \u003Cpr> --repo owner\u002Frepo --body-file -\n```\n\nUse `gh pr comment`, `gh issue edit`, or `gh issue comment` with `--body-file -`\nfor other targets. Always pass `--body-file -` (not inline `--body`) so multi-line\nbodies and special characters can't break shell quoting.\n\n### Step 4: Verify\n\n```bash\ngh pr view \u003Cpr> --repo owner\u002Frepo --json body -q .body   # confirm URL present\n```\n\n## Examples\n\n- **Attach a CleanShot screenshot to PR #42:** upload the file, append it under a\n  `## Screenshots` heading in the PR body.\n- **Embed before\u002Fafter images in a README:** upload both, paste the two Markdown\n  lines into the README at the relevant section.\n\n## Best Practices\n\n- Resolve globs to absolute paths first; quote paths with spaces\u002FUnicode.\n- For display sizing, embed an HTML tag instead of bare Markdown:\n  `\u003Cimg width=\"800\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F\u003Cuuid>\" \u002F>`.\n- In CI, set `GH_SESSION_TOKEN` from a dedicated bot account.\n\n## Limitations\n\n- **Session cookie required.** A `user_session` cookie grants full account access\n  (not scoped like a PAT) — treat it like a password; use a bot account in CI.\n- **Write access to the target repo is required**; orgs that enforce SAML SSO need\n  the session authorized at `https:\u002F\u002Fgithub.com\u002Forgs\u002F\u003Corg>\u002Fsso` first.\n- **Attachment access must be verified:** do not promise private-repository attachment confidentiality from URL shape alone; check the current GitHub behavior and actual audience before uploading sensitive content.\n- **Windows + Chrome 127+** cannot read cookies (library limitation) — use another\n  browser or `GH_SESSION_TOKEN`.\n- The skill embeds the Markdown itself; `gh-image` only prints the URL.\n","# Upload images to GitHub (gh-image)\n\nGitHub has **no public API** for image uploads — the web UI uses an internal\nendpoint that mints `user-attachments` URLs scoped to the repo's visibility.\n[`gh-image`](https:\u002F\u002Fgithub.com\u002Fdrogers0\u002Fgh-image) (MIT, © drogers0) replicates\nthat flow as a `gh` CLI extension, so an agent can upload a local image from the\nterminal and get a ready-to-embed Markdown image line back.\n\n## Overview\n\nThis skill drives `gh-image` to turn a local image file into a hosted GitHub\n`user-attachments` URL, then embeds that URL into a pull request, issue, or\ncomment. It is the missing \"attach a screenshot\" capability for terminal agents.\n\n## When to Use This Skill\n\nUse this skill when asked to:\n\n- \"Attach a screenshot to the PR\" or \"add an image to the PR description\"\n- \"Put this image in the issue\" \u002F \"comment with these screenshots\"\n- \"Show the test results \u002F before-and-after in the PR\"\n- Embed any local image into GitHub Markdown without leaving the terminal\n\n## How It Works\n\n### Step 1: Verify prerequisites\n\n```bash\ngh auth status                                   # gh installed & authenticated\ngh extension list | grep -q 'drogers0\u002Fgh-image' \\\n  || gh extension install drogers0\u002Fgh-image      # review\u002Fpin the extension source first\n```\n\n`gh-image` does **not** use the `gh` token for the upload (that endpoint rejects\ntokens). It needs a GitHub `user_session` cookie, resolved in this order:\n`--token \u003Cvalue>` flag → `GH_SESSION_TOKEN` env var (use in CI\u002Fheadless) → a\nlogged-in browser's cookie store (default for local use).\n\nBefore upload, verify the intended repository, image privacy and explicit transfer scope. Browser cookie access requires the user’s authorization for that credential source; do not scrape unrelated browser profiles or pass a session value via `--token`. Internal attachment endpoints and visibility behavior can change: do not treat an unguessable URL or a private repository alone as proof of attachment confidentiality. Verify access with the intended audience and use a different approved sharing method when confidentiality cannot be established.\n\n### Step 2: Upload\n\n```bash\n# Use an absolute path; --repo is optional inside a repo working dir.\ngh image \"\u002Fabs\u002Fpath\u002Fscreenshot.png\" --repo \u003Cowner>\u002F\u003Crepo>\n```\n\n`gh image` prints Markdown to **stdout**, one line per image:\n\n```\n![screenshot.png](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F\u003Cuuid>)\n```\n\nCapture that output — it is the embeddable reference.\n\n### Step 3: Embed into the PR \u002F issue \u002F comment\n\n```bash\nMD=\"$(gh image \"\u002Fabs\u002Fpath\u002Fshot.png\" --repo owner\u002Frepo)\"\nBODY=\"$(gh pr view \u003Cpr> --repo owner\u002Frepo --json body -q .body)\"\nprintf '%s\\n\\n## Screenshots\\n\\n%s\\n' \"$BODY\" \"$MD\" \\\n  | gh pr edit \u003Cpr> --repo owner\u002Frepo --body-file -\n```\n\nUse `gh pr comment`, `gh issue edit`, or `gh issue comment` with `--body-file -`\nfor other targets. Always pass `--body-file -` (not inline `--body`) so multi-line\nbodies and special characters can't break shell quoting.\n\n### Step 4: Verify\n\n```bash\ngh pr view \u003Cpr> --repo owner\u002Frepo --json body -q .body   # confirm URL present\n```\n\n## Examples\n\n- **Attach a CleanShot screenshot to PR #42:** upload the file, append it under a\n  `## Screenshots` heading in the PR body.\n- **Embed before\u002Fafter images in a README:** upload both, paste the two Markdown\n  lines into the README at the relevant section.\n\n## Best Practices\n\n- Resolve globs to absolute paths first; quote paths with spaces\u002FUnicode.\n- For display sizing, embed an HTML tag instead of bare Markdown:\n  `\u003Cimg width=\"800\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F\u003Cuuid>\" \u002F>`.\n- In CI, set `GH_SESSION_TOKEN` from a dedicated bot account.\n\n## Limitations\n\n- **Session cookie required.** A `user_session` cookie grants full account access\n  (not scoped like a PAT) — treat it like a password; use a bot account in CI.\n- **Write access to the target repo is required**; orgs that enforce SAML SSO need\n  the session authorized at `https:\u002F\u002Fgithub.com\u002Forgs\u002F\u003Corg>\u002Fsso` first.\n- **Attachment access must be verified:** do not promise private-repository attachment confidentiality from URL shape alone; check the current GitHub behavior and actual audience before uploading sensitive content.\n- **Windows + Chrome 127+** cannot read cookies (library limitation) — use another\n  browser or `GH_SESSION_TOKEN`.\n- The skill embeds the Markdown itself; `gh-image` only prints the URL.\n",{"name":5,"risk":36,"tags":62,"tools":66,"author":71,"plugin":72,"source":43,"license":14,"category":44,"date_added":79,"description":7,"source_repo":80,"source_type":43,"license_source":81},[63,45,64,65,56],"github","screenshots","gh-extension",[67,68,69,70],"claude-code","codex-cli","cursor","gemini-cli","drogers0",{"setup":73,"targets":77},{"docs":74,"type":75,"summary":76},"SKILL.md","manual","Installs and runs a third-party gh extension that needs a GitHub user_session cookie or GH_SESSION_TOKEN.",{"codex":78,"claude":78},"blocked","2026-06-25","drogers0\u002Fgh-image","https:\u002F\u002Fgithub.com\u002Fdrogers0\u002Fgh-image\u002Fblob\u002Fmain\u002FLICENSE","7bf2279c8a65758319526a721d5c4b75683aec9c","skills\u002Fantigravity-gh-image",3,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections","https:\u002F\u002Fgithub.com\u002Fboisenoise","2026-11-14 14:18:11",{"source":8,"skillName":5,"commands":89,"prompt":99,"zipAvailable":100},[90,93,96],{"tool":91,"command":92},"npx","npx skills add boisenoise\u002Fskills-collections --skill gh-image",{"tool":94,"command":95},"bunx","bunx skills add boisenoise\u002Fskills-collections --skill gh-image",{"tool":97,"command":98},"pnpm","pnpm dlx skills add boisenoise\u002Fskills-collections --skill gh-image","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-gh-image\u002FSKILL.md",true,[],[103,129,151,175,194,217],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":108,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":57},"01M6WNH92BHVFXHGPDZCPJ0AG0","web-access","Use Treg for public web or platform data only when existing search, browser and connected tools cannot cover the task, with explicit cost and data boundaries.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-web-access\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-web-access\u002FSKILL.md",[],[112,113,114,115,116,117,118,119,49,120,121,122,123,124,125,36,126,127,128,33,32],"web","access","web access","official","development","browser","search","data","read","fetch","only","youtube","free tools","platform","free","cover","normal",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":133,"sourceHtmlUrl":134,"categories":135,"keywords":139,"publishedAt":57},"01M6WNF9XAYAB2CZDDJBAKNM93","treg","Use the Treg CLI or MCP catalog to discover, price and call authorized external tools with team-scoped credentials and a user-approved budget.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-treg\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-treg\u002FSKILL.md",[136],{"categoryNo":137,"categoryName":138,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[131,140,56,63,115,116,51,49,141,142,143,144,46,145,146,36,147,148,149,150,32],"MCP","Budget","credentials","team","catalog","call","discover","external tools","with","scoped","blob",{"skillNo":152,"name":153,"nameZh":6,"description":154,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":155,"sourceHtmlUrl":156,"categories":157,"keywords":161,"publishedAt":57},"01M6WN93MEAZ4E41DYAHJRPHQT","recruit","Turn a job description into an evidence-linked candidate shortlist through Treg, with job-related ranking and optional authorized business contact enrichment.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-recruit\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-recruit\u002FSKILL.md",[158],{"categoryNo":159,"categoryName":160,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000038","人力资源",[153,63,115,51,162,163,164,165,166,167,36,168,169,170,148,171,172,173,174,150,131,32],"https","email","enrichment","business","evidence","phone","ranking","post","job description","for","person","candidate","reason",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":179,"sourceHtmlUrl":180,"categories":181,"keywords":182,"publishedAt":57},"01M6WN8R5RXSMHM9B4D9FAFX42","rea-growth","Analyze a company’s public growth and content through Treg, distinguish observations from hypotheses, and produce an evidence-linked playbook within an approved budget.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-rea-growth\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-rea-growth\u002FSKILL.md",[],[183,184,185,63,115,51,186,187,162,188,141,189,190,191,166,36,192,193,150,131,32],"growth","rea","rea growth","produce","content","playbook","marketing","analyze","public","observations","company",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":198,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":57},"01M6WN2EVE3RQRGWAKBT4S7YT2","make-ugc","Create original AI UGC-style product videos through Treg: research hooks, approve a licensed presenter and voice, generate clips, add captions and report costs.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-make-ugc\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-make-ugc\u002FSKILL.md",[],[202,203,63,204,115,205,51,206,207,208,209,210,36,211,212,213,214,215,216,150],"make","make ugc","research","create","Video","Captions","ads","short","hooks","head","style","niche","trending","talking-head","approve",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":107,"licenseFileUrl":221,"sourceHtmlUrl":222,"categories":223,"keywords":224,"publishedAt":57},"01M6WN10ARAA63Y8K1YNGXJ2RM","lead-signals","Find and qualify public buying signals through Treg, rank fitting business accounts and optionally enrich authorized business contact information.","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-lead-signals\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-lead-signals\u002FSKILL.md",[],[225,226,227,63,115,51,228,229,165,230,231,36,232,233,234,235,236,237,238,150],"signals","lead","lead signals","how","find","ready","as","how to","qualify","people","information","enrich","changes","funding"]