[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CZ2BEZB1P4FPDSK0EXQAXT":3,"skill-same:01M6CZ2BEZB1P4FPDSK0EXQAXT":59},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":41,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M6CZ2BEZB1P4FPDSK0EXQAXT","code-reviewer",null,"aeonfun\u002Faeon","aeonfun","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F287715280?v=4","01M6CZ23C6MXGMF4N0V1DZ1247","aeon","01M6CZ23GMZP1BR424J8Y8K3DG",791,"MIT","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fdocs\u002Fexamples\u002Fskill-templates\u002Fcode-reviewer\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[28,29,30],"code","code reviewer","reviewer","2026-11-10 10:12:30",false,"---\nname: [REPLACE: SKILL_NAME]\ndescription: First-touch review of newly opened PRs on [REPLACE: WATCHED_REPO] — verdict + welcoming comment + label\nmetadata:\n  category: dev\n  var: \"\"\n  tags:\n    - dev\n---\n\n> **${var}** — Optional. PR number to review. If empty, scans all newly-opened PRs on `[REPLACE: WATCHED_REPO]`.\n\nToday is ${today}. Review external PRs on **[REPLACE: WATCHED_REPO]** with a focus on **[REPLACE: REVIEW_FOCUS]**.\n\n## Steps\n\n1. **List candidates** — every open PR opened in the last 24h that hasn't been reviewed by this skill yet:\n\n   If `${var}` is set, that PR number is the only candidate. Otherwise get the cutoff with its own call, `date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ`, and write the printed value into the filter literally (the `\u003CSINCE>` below):\n\n   ```bash\n   gh pr list -R [REPLACE: WATCHED_REPO] --state open --json number,author,createdAt,additions,deletions --jq '.[] | select(.createdAt >= \"\u003CSINCE>\") | select(.author.login != \"github-actions[bot]\" and .author.login != \"aeonframework\") | .number'\n   ```\n\n   Track previously-reviewed PRs in `memory\u002Ftopics\u002F[REPLACE: SKILL_NAME]-reviewed.json` (a flat array of PR numbers). Skip anything already in there.\n\n2. **For each PR** — fetch metadata + diff:\n\n   One call per PR, with its number written in literally (the `\u003CPR>` below). Read the output directly; do not save it to a file:\n\n   ```bash\n   gh pr view \u003CPR> -R [REPLACE: WATCHED_REPO] --json title,body,additions,deletions,files,author\n   ```\n\n   ```bash\n   gh pr diff \u003CPR> -R [REPLACE: WATCHED_REPO]\n   ```\n\n   Run the diff call only for a PR under the size limit. Skip if `additions + deletions > [REPLACE: MAX_PR_LINES]`: flag it as `DEFERRED: too large for first-touch review`, leave a note, and move on.\n\n3. **Apply the rubric** — assign one of four verdicts:\n\n   | Verdict | Trigger |\n   |---------|---------|\n   | **ACCEPT** | Touches expected paths, follows repo conventions, focused scope, no obvious bugs in the diff. |\n   | **NEEDS-CHANGES** | Reasonable intent but specific issues: missing tests, broken format, incorrect assumption, naming. |\n   | **DEFER** | Out of scope for this skill — needs a human reviewer (large refactor, architectural change). |\n   | **OUT-OF-SCOPE** | Touches files outside what the repo accepts contributions on (e.g. lock files, generated assets). |\n\n   Focus the rubric on **[REPLACE: REVIEW_FOCUS]** — that's the lens that matters most for this repo.\n\n4. **Post a comment** — use a friendly, specific tone. Acknowledge the contributor, name the verdict, give 1-3 concrete bullets:\n\n   Write the comment to `\u002Ftmp\u002Freview-comment-\u003CPR>.md` with Write:\n\n   ```markdown\n   Thanks for the PR! [verdict text]\n\n   - [bullet 1]\n   - [bullet 2]\n   ```\n\n   Then post it:\n\n   ```bash\n   gh pr comment \u003CPR> -R [REPLACE: WATCHED_REPO] --body-file \u002Ftmp\u002Freview-comment-\u003CPR>.md\n   ```\n\n5. **Label** the PR via `gh pr edit \u003CPR> -R [REPLACE: WATCHED_REPO] --add-label \"\u003Clabel>\"`: use `accepted` \u002F `needs-changes` \u002F `defer` \u002F `out-of-scope` (create the labels in the target repo first if they don't exist).\n\n6. **Notify** via `.\u002Fnotify` only on `ACCEPT` or `OUT-OF-SCOPE` — those are the actionable verdicts for the operator. Silent on `NEEDS-CHANGES` and `DEFER` (the comment on the PR is the signal).\n\n7. **Log** — append to `memory\u002Flogs\u002F${today}.md`:\n   ```\n   ## [REPLACE: SKILL_NAME]\n   - **PRs reviewed**: N (skipped M as previously seen)\n   - **Verdicts**: accept=X, needs-changes=Y, defer=Z, out-of-scope=W\n   - **Status**: REVIEW_OK | REVIEW_QUIET (no new PRs)\n   ```\n\n## Network note\n\n`gh` handles auth via the workflow's `GITHUB_TOKEN`. To comment on or label a PR in **[REPLACE: WATCHED_REPO]**, the token needs `pull-requests: write` and `issues: write` permission on that repo — verify the workflow grants those, or this skill will silently fail to write.\n\n**Shell shape.** Each Bash call is one allowed command (pipes are fine). The run refuses a call that sets a variable (`PRS=$(gh pr list ...)`), uses `if` \u002F `for`, joins commands with `;`, `&&` or `||`, or redirects into a file (`> .pr-meta.json`), and each refusal costs a model turn. So make one `gh` call per PR with the number written in literally, read `gh` output directly, and write the comment body, `reviewed.json` and the log with Write\u002FEdit.\n\n## Constraints\n\n- **Be welcoming**. The PR may be someone's first open-source contribution. Lead with thanks, then specifics.\n- **Never auto-merge**. This skill is first-touch review, not auto-merge. Even an `ACCEPT` verdict still waits for a human merge.\n- **Idempotent**. Re-running the skill must never double-comment. The `reviewed.json` state file is what enforces that.\n","> **${var}** — Optional. PR number to review. If empty, scans all newly-opened PRs on `[REPLACE: WATCHED_REPO]`.\n\nToday is ${today}. Review external PRs on **[REPLACE: WATCHED_REPO]** with a focus on **[REPLACE: REVIEW_FOCUS]**.\n\n## Steps\n\n1. **List candidates** — every open PR opened in the last 24h that hasn't been reviewed by this skill yet:\n\n   If `${var}` is set, that PR number is the only candidate. Otherwise get the cutoff with its own call, `date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ`, and write the printed value into the filter literally (the `\u003CSINCE>` below):\n\n   ```bash\n   gh pr list -R [REPLACE: WATCHED_REPO] --state open --json number,author,createdAt,additions,deletions --jq '.[] | select(.createdAt >= \"\u003CSINCE>\") | select(.author.login != \"github-actions[bot]\" and .author.login != \"aeonframework\") | .number'\n   ```\n\n   Track previously-reviewed PRs in `memory\u002Ftopics\u002F[REPLACE: SKILL_NAME]-reviewed.json` (a flat array of PR numbers). Skip anything already in there.\n\n2. **For each PR** — fetch metadata + diff:\n\n   One call per PR, with its number written in literally (the `\u003CPR>` below). Read the output directly; do not save it to a file:\n\n   ```bash\n   gh pr view \u003CPR> -R [REPLACE: WATCHED_REPO] --json title,body,additions,deletions,files,author\n   ```\n\n   ```bash\n   gh pr diff \u003CPR> -R [REPLACE: WATCHED_REPO]\n   ```\n\n   Run the diff call only for a PR under the size limit. Skip if `additions + deletions > [REPLACE: MAX_PR_LINES]`: flag it as `DEFERRED: too large for first-touch review`, leave a note, and move on.\n\n3. **Apply the rubric** — assign one of four verdicts:\n\n   | Verdict | Trigger |\n   |---------|---------|\n   | **ACCEPT** | Touches expected paths, follows repo conventions, focused scope, no obvious bugs in the diff. |\n   | **NEEDS-CHANGES** | Reasonable intent but specific issues: missing tests, broken format, incorrect assumption, naming. |\n   | **DEFER** | Out of scope for this skill — needs a human reviewer (large refactor, architectural change). |\n   | **OUT-OF-SCOPE** | Touches files outside what the repo accepts contributions on (e.g. lock files, generated assets). |\n\n   Focus the rubric on **[REPLACE: REVIEW_FOCUS]** — that's the lens that matters most for this repo.\n\n4. **Post a comment** — use a friendly, specific tone. Acknowledge the contributor, name the verdict, give 1-3 concrete bullets:\n\n   Write the comment to `\u002Ftmp\u002Freview-comment-\u003CPR>.md` with Write:\n\n   ```markdown\n   Thanks for the PR! [verdict text]\n\n   - [bullet 1]\n   - [bullet 2]\n   ```\n\n   Then post it:\n\n   ```bash\n   gh pr comment \u003CPR> -R [REPLACE: WATCHED_REPO] --body-file \u002Ftmp\u002Freview-comment-\u003CPR>.md\n   ```\n\n5. **Label** the PR via `gh pr edit \u003CPR> -R [REPLACE: WATCHED_REPO] --add-label \"\u003Clabel>\"`: use `accepted` \u002F `needs-changes` \u002F `defer` \u002F `out-of-scope` (create the labels in the target repo first if they don't exist).\n\n6. **Notify** via `.\u002Fnotify` only on `ACCEPT` or `OUT-OF-SCOPE` — those are the actionable verdicts for the operator. Silent on `NEEDS-CHANGES` and `DEFER` (the comment on the PR is the signal).\n\n7. **Log** — append to `memory\u002Flogs\u002F${today}.md`:\n   ```\n   ## [REPLACE: SKILL_NAME]\n   - **PRs reviewed**: N (skipped M as previously seen)\n   - **Verdicts**: accept=X, needs-changes=Y, defer=Z, out-of-scope=W\n   - **Status**: REVIEW_OK | REVIEW_QUIET (no new PRs)\n   ```\n\n## Network note\n\n`gh` handles auth via the workflow's `GITHUB_TOKEN`. To comment on or label a PR in **[REPLACE: WATCHED_REPO]**, the token needs `pull-requests: write` and `issues: write` permission on that repo — verify the workflow grants those, or this skill will silently fail to write.\n\n**Shell shape.** Each Bash call is one allowed command (pipes are fine). The run refuses a call that sets a variable (`PRS=$(gh pr list ...)`), uses `if` \u002F `for`, joins commands with `;`, `&&` or `||`, or redirects into a file (`> .pr-meta.json`), and each refusal costs a model turn. So make one `gh` call per PR with the number written in literally, read `gh` output directly, and write the comment body, `reviewed.json` and the log with Write\u002FEdit.\n\n## Constraints\n\n- **Be welcoming**. The PR may be someone's first open-source contribution. Lead with thanks, then specifics.\n- **Never auto-merge**. This skill is first-touch review, not auto-merge. Even an `ACCEPT` verdict still waits for a human merge.\n- **Idempotent**. Re-running the skill must never double-comment. The `reviewed.json` state file is what enforces that.\n",{},"main","fddec052c66754287c08582d49ae5fe6a3657221","docs\u002Fexamples\u002Fskill-templates\u002Fcode-reviewer",305,"https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon","https:\u002F\u002Fwww.aeon.fun\u002F","https:\u002F\u002Fgithub.com\u002Faeonfun","The most autonomous agent framework.","2026-11-12 00:13:24",{"source":7,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add aeonfun\u002Faeon --skill code-reviewer",{"tool":51,"command":52},"bunx","bunx skills add aeonfun\u002Faeon --skill code-reviewer",{"tool":54,"command":55},"pnpm","pnpm dlx skills add aeonfun\u002Faeon --skill code-reviewer","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fdocs\u002Fexamples\u002Fskill-templates\u002Fcode-reviewer\u002FSKILL.md",true,[],[60,87,114,134,159,181],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":31},"01M70R8RA3SFXK2D1XP7XTJGAQ","sns-digest","Digest Internet Computer governance - new and open NNS proposals and SNS DAO proposals - so the operator sees what is up for a vote without watching the dashboard. Fully public, no secret; fires only when there is something new to report.","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Fsns-digest\u002FSKILL.md",[],[67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],"sns","digest","sns digest","proposals","for","up","open","icp","only","new","internet","when","api","notifications","dao","crypto","dashboard","governance","report","write",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":96,"publishedAt":31},"01M70R5BMYW94KZ3XQM3MSWPC0","icp-deploy-check","Pre-deploy safety checklist for an Internet Computer Rust canister - read a local\u002Fcloned canister repo and verify the deploy-time footguns from the canister-security checklist (controller backup, anonymous-principal rejection, no mainnet fetch_root_key, upgrade safety) before it ships. Static, read-only, no network and no mainnet action.","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Ficp-deploy-check\u002FSKILL.md",[93],{"categoryNo":94,"categoryName":95,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",[74,97,98,99,100,101,102,103,104,105,106,75,77,107,108,109,110,111,112,113],"icp deploy check","deploy check","check","deploy","fetch","anonymous","static","time","rust","local","upgrade","controller","read","Safety","network","action","security",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":124,"publishedAt":31},"01M70R312QZ9T236SZHGX8A8CM","canister-status","Monitor Internet Computer canisters for control-plane changes - a new controller, a module-hash change (upgrade), or a canister going missing from the public index - and alert the moment one happens. Uses only the public IC dashboard API.","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Fcanister-status\u002FSKILL.md",[120,123],{"categoryNo":121,"categoryName":122,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},[125,126,71,127,128,74,129,75,76,77,107,130,131,79,80,108,82,132,83,133],"canister status","status","missing","monitor","module","alert","plane","change","changes",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":142,"publishedAt":31},"01M6FVEXRG77BT4VH94P0S1TDT","you-web-search","Web search using You.com Search API with high-quality, cited results — runs keyless out of the box; YDC_API_KEY unlocks higher limits and real-time web crawling","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Fyou-web-search\u002FSKILL.md",[140,141],{"categoryNo":121,"categoryName":122,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},[143,144,145,146,147,104,75,79,148,109,149,150,151,152,153,154,155,156,157,158],"web search","search","you","you web search","web","web crawling","read-only","real-time","basics","keyless","with","research","results","quality","high","limits",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":31},"01M6FVER8Y2B0H7H26G4GTYK6N","write-tweet","Multi-format tweet studio - standalone drafts (10 across 5 size tiers), a 5-10 tweet thread, or 10 remixes of past tweets, selected via ${var}","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-tweet\u002FSKILL.md",[],[86,166,167,168,79,169,170,151,171,172,173,174,175,176,177,178,179,180],"write tweet","social","studio","across","xai","twitter","multi","via","format","content","standalone","past","drafts","thread","size",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":190,"publishedAt":31},"01M6FVENCJ0HY2TEE6CNZN4F96","weekly-aeoncard","Build a weekly token-consumption recap image from memory\u002Ftoken-usage.csv - this week + all-time totals, top skills, rendered as a shareable SVG card.","https:\u002F\u002Fgithub.com\u002Faeonfun\u002Faeon\u002Fblob\u002Fmain\u002Fskills\u002Fweekly-aeoncard\u002FSKILL.md",[187],{"categoryNo":188,"categoryName":189,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[191,192,193,194,195,196,197,104,198,199,200,201,202,80,203,204,86,205,11,206],"weekly aeoncard","weekly","as","usage","SVG","memory","card","Meta","image","recap","csv","monitoring","productivity","build","token","top"]