[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M735BVYCGR5VEC65AFDVSNKW":3,"skill-same:01M735BVYCGR5VEC65AFDVSNKW":51},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":37,"install":38,"resources":50},"01M735BVYCGR5VEC65AFDVSNKW","wrap-up",null,"End-of-session verification and UMS.","Morrison-Lab\u002Fai-config","Morrison-Lab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F104235520?v=4","01M734G0451S2G35MN4HFQK7XP","Morrison Lab","01M734G059BYFDFQA8YTPDGPMH",4,"MIT","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: wrap-up\ndescription: \"End-of-session verification and UMS.\"\nuser-invocable: true\nallowed-tools:\n  - Bash\n  - Read\n  - Edit\n  - Write\n---\n\n# wrap-up — verify state, report, then UMS\n\nClose out a work session cleanly: confirm where everything *actually* landed,\nreport it with clickable links (surfacing anything still open), and capture\nwhat was learned before the context is gone.\n\nSynonyms: `done` — a plain \"are we done?\" entry point that routes here; and\n`merged` — routes here too, and can name the just-merged PR to anchor the\nsummary (e.g. `\u002Fmerged #74`). (Distinct from `post-merge`, which wraps up a\nsingle just-merged PR rather than the whole session.)\n\n## When this fires\n\n- \"wrap up\", \"wrap up the session\", \"finish up\", \"let's close out\", \"done\",\n  \"all done\", \"are we done?\"\n- The end of a multi-PR \u002F multi-issue session.\n\n## Procedure\n\n### 1. Verify state — never assume\n\nDon't report from memory or assume a merge did\u002Fdidn't happen — query each thing\nfresh (this is the **never assume; always verify** rule applied to closing out).\nCommands below are annotated with their abstract operation token — resolve to\nyour model's tool via [`tool-mappings.md`](..\u002F..\u002Ftool-mappings.md) instead of\nthe `gh` command shown if this session doesn't have `gh`:\n\n```bash\ngh pr list --state open --json number,title,headRefName,author,assignees,mergeable,mergeStateStatus,comments \\\n  --jq '.[] | \"#\\(.number) \\(.headRefName) [\\(.author.login); assignees: \\([.assignees[].login] | join(\",\"))] \\(.title) [\\(.mergeable)]\"'   # LIST_PRS\ngh issue list --state open --json number,title --jq '.[] | \"#\\(.number) \\(.title)\"'   # LIST_ISSUES\ngit status --short                         # uncommitted work?\ngit worktree list                          # leftover worktrees (agent isolation \u002F session-lock)?\ngit log --oneline -5 origin\u002Fmain           # what actually landed on main\n```\n\n- For every PR\u002Fissue you touched, confirm its real state with\n  `gh pr view \u003CN> --json state,mergedAt` (or `gh issue view`; abstract tokens:\n  `VIEW_PR` \u002F `VIEW_ISSUE`). A PR you think you left open may have been merged\n  by the user, and vice-versa.\n- If the session touched **other repos** (e.g. an upstream dependency),\n  check those too — `gh pr list --repo \u003Cowner>\u002F\u003Crepo> --state open\n  --json number,title,headRefName,author,assignees,mergeable,mergeStateStatus,comments`\n  (`LIST_PRS`).\n- **Merge conflict sweep.** Before closing out, check every open PR's\n  `mergeable` field.\n  Filter the list by `memories\u002Freviewing-prs.md`'s scope test first, as\n  `ardia` step 1 does; report an out-of-scope conflicting PR to the user and\n  leave it untouched (no comment, no push).\n  For each in-scope PR with `mergeable == \"CONFLICTING\"` **or\n  `\"UNKNOWN\"`** (see `resolve-conflicts`, \"Verify before you act\" —\n  `UNKNOWN` can mean GitHub hasn't finished computing yet), verify with\n  `git merge-tree --write-tree origin\u002Fmain origin\u002F\u003Cbranch>` (git ≥ 2.38) before acting,\n  then check claim status (most recent comment) and fix confirmed conflicts\n  using the cascade procedure in `post-merge` step 1.5 (claim → isolated\n  worktree → merge main → `resolve-conflicts` skill → push → unclaim). Don't\n  leave conflicting PRs behind when wrapping up — they block whoever works\n  the queue next.\n\n### 2. Surface anything still open or dangling\n\nList, don't bury:\n\n- **Open PRs** — every one, linked. Flag any you didn't expect (e.g. a\n  `@claude`-bot-opened PR) instead of silently passing over it.\n- **Open issues**, **uncommitted working-tree changes**, **unmerged local\n  branches**, and any **deferred follow-up issues** filed this session.\n- **Leftover git worktrees** — agent isolation and `session-lock` leave\n  worktrees behind (esp. ones whose PR already merged). Flag them and offer to\n  run `clean-worktrees` (`cw`) to sweep the dead ones.\n- Never report \"all done\" or that the session is done\n  when there are uncommitted, unpushed, or un-PRed changes, or open PRs authored by that session ---\n  name what remains and say whose call\n  it is (e.g. \"PR #25 is the bot's; yours to merge or close\").\n\n### 3. Report a linked final summary\n\n- **Run the `pr-status-all` skill** to produce the report's PR table.\n  This is a standing user mandate (2026-08-25): every session end or clean stopping point gets a whole-queue dashboard, not just a list of the PRs this conversation happened to touch.\n  Respect that skill's own Safety Cap --- a queue over 10 open PRs gets its condensed table, not a skipped one.\n- Every PR\u002FMR\u002Fissue number in the table is a markdown link (repo policy --- never a bare `#N`).\n- A Pacific-time timestamp (`TZ=America\u002FLos_Angeles date \"+%Y-%m-%d %H:%M %Z\"`;\n  the explicit `TZ` enforces PT on a machine set to any other zone) so \"as of\n  when\" is unambiguous when the user re-reads it later.\n\n### 4. Run a UMS review, then close with the right signal\n\nRun the full `ums` procedure (invoke the `ums` skill by name): scan the session\nfor mistakes-corrected, new user preferences, tool quirks, and skill gaps —\nincluding whether `spot-skill-opportunities` flagged a recurring pattern\nduring the session that's still unbuilt; update the relevant memory files and\nskill definitions; commit via a **branch + PR** (not direct to `main`). If\nnothing durable emerged, say so explicitly rather than manufacturing edits.\n\n#### Closing checklist\n\n**Pause point: after the UMS pass above, before the closing signal or any\n`\u002Fclear` flag.**\nDo-Confirm; per\n[`shared\u002Fworkflow\u002Fskill-checklists.md`](..\u002F..\u002Fshared\u002Fworkflow\u002Fskill-checklists.md).\nIt sits here rather than in step 3 because every item confirms work from an\n*earlier* step --- a checklist placed before the step it checks is a forward\nreference, not a confirmation.\n\n- [ ] **Killer item: step 1's state sweep actually ran** --- the open-PR and\n      open-issue queries per repo, `git status`, local branches, worktrees ---\n      and the step 3 report was built from *its output*, not from\n      recollection.\n      Marked because recollection covers only the PRs and branches this\n      conversation created, which is precisely the blind spot: a bot-opened\n      PR, a leftover harness branch, or another session's PR in the same repo\n      never entered the conversation, so nothing about them feels outstanding.\n      The recorded failure is a clean stopping point flagged twice on the\n      strength of \"my three PRs are merged\", with the sweep then finding a\n      stale draft PR and an unused branch.\n- [ ] Everything the sweep surfaced is named in the report, including anything\n      unexpected, with whose call it is.\n- [ ] The UMS pass above ran, or nothing durable emerged and that is stated\n      explicitly --- a `\u002Fclear` flag that has to mention an owed UMS pass is a\n      flag raised too early.\n\n**Then close the reply with an explicit stopping-point statement (the last message you post before stopping should always state whether or not this is a clean stopping point for the session, and explicitly declare whether the session is done or ongoing):**\n\n- **Clean stopping point reached** (nothing open or pending;\n  no uncommitted, unpushed, or un-PRed changes, and no open PRs authored by this session) ---\n  end with an explicit stopping-point statement,\n  e.g. `**Stopping Point**: Clean stopping point reached --- session done; UMS executed; no follow-up items pending`.\n  A silent trailing summary leaves the user unsure whether you're actually done or just paused.\n- **Not a clean stopping point** (something open or in flight) — an ambiguous review item, a deadlock needing a human reviewer, pending CI\u002Freview jobs, unmerged PRs, or a choice only the user can make — state explicitly `**Stopping Point**: Not a clean stopping point \u002F work remains queued: session not done; [reason\u002Fopen items]`, and end the reply **with the open question(s) \u002F pending tasks**, last and clearly visible.\n\n## Proactive hook compliance\n\nActive Stop hooks validate the close-out response (see [`memories\u002Fhooks.md`](..\u002F..\u002Fmemories\u002Fhooks.md)):\n- **`require-stopping-point.py`**: Conclude with an explicit stopping-point statement (`**Stopping Point**: Clean stopping point reached --- session done; UMS executed; no follow-up items pending` or `**Stopping Point**: Not a clean stopping point \u002F work remains queued: session not done; [reason]`).\n- **`no-unmeasured-clock-claim.py`**: Execute `TZ=America\u002FLos_Angeles date \"+%Y-%m-%d %H:%M %Z\"` fresh before including timestamps in recaps.\n- **`no-empty-promise.py`**: Any commitments made in the wrap-up must ship their mechanism in the same turn or arm an explicit timer.\n- **`no-offer-to-file.py` & `no-unfiled-finding.py`**: File deferred issues or update memories directly in the same turn instead of offering to do so.\n- **`flag-cop-out-offer.py`**: Avoid ending the recap on an open offer for already-authorized tasks.\n- **`no-placeholder-reply.py`**: Deliver a complete, substantive closing report.\n\n## Relationship to other skills\n\n- **`record-learnings`** (continuous) and **`ums`** (the learnings checkpoint,\n  which this embeds as step 4) — `wrap-up` is their session-level bookend.\n- **`spot-skill-opportunities`** — step 4's UMS pass checks whether it flagged\n  a recurring pattern during the session that's still unbuilt.\n- **`pr-status-all`** --- step 3's PR table comes from this skill, not from a\n  hand-built list of the session's own PRs.\n  See its Safety Cap for what happens on a large open-PR queue.\n- **`checkpoint`** \u002F **`compress-session`** — narrower-scoped snapshots taken\n  *during* a session (a task-phase snapshot, a pre-compaction distillation);\n  `wrap-up` is the full session-level close-out these feed into, not a\n  replacement for them.\n\n## Notes\n\n- Wrap-up reports PR\u002Fissue state and, where needed, resolves merge conflicts\n  in unclaimed conflicting PRs (step 1). It does **not** merge PRs — merging\n  stays the user's call unless they ask.\n","# wrap-up — verify state, report, then UMS\n\nClose out a work session cleanly: confirm where everything *actually* landed,\nreport it with clickable links (surfacing anything still open), and capture\nwhat was learned before the context is gone.\n\nSynonyms: `done` — a plain \"are we done?\" entry point that routes here; and\n`merged` — routes here too, and can name the just-merged PR to anchor the\nsummary (e.g. `\u002Fmerged #74`). (Distinct from `post-merge`, which wraps up a\nsingle just-merged PR rather than the whole session.)\n\n## When this fires\n\n- \"wrap up\", \"wrap up the session\", \"finish up\", \"let's close out\", \"done\",\n  \"all done\", \"are we done?\"\n- The end of a multi-PR \u002F multi-issue session.\n\n## Procedure\n\n### 1. Verify state — never assume\n\nDon't report from memory or assume a merge did\u002Fdidn't happen — query each thing\nfresh (this is the **never assume; always verify** rule applied to closing out).\nCommands below are annotated with their abstract operation token — resolve to\nyour model's tool via [`tool-mappings.md`](..\u002F..\u002Ftool-mappings.md) instead of\nthe `gh` command shown if this session doesn't have `gh`:\n\n```bash\ngh pr list --state open --json number,title,headRefName,author,assignees,mergeable,mergeStateStatus,comments \\\n  --jq '.[] | \"#\\(.number) \\(.headRefName) [\\(.author.login); assignees: \\([.assignees[].login] | join(\",\"))] \\(.title) [\\(.mergeable)]\"'   # LIST_PRS\ngh issue list --state open --json number,title --jq '.[] | \"#\\(.number) \\(.title)\"'   # LIST_ISSUES\ngit status --short                         # uncommitted work?\ngit worktree list                          # leftover worktrees (agent isolation \u002F session-lock)?\ngit log --oneline -5 origin\u002Fmain           # what actually landed on main\n```\n\n- For every PR\u002Fissue you touched, confirm its real state with\n  `gh pr view \u003CN> --json state,mergedAt` (or `gh issue view`; abstract tokens:\n  `VIEW_PR` \u002F `VIEW_ISSUE`). A PR you think you left open may have been merged\n  by the user, and vice-versa.\n- If the session touched **other repos** (e.g. an upstream dependency),\n  check those too — `gh pr list --repo \u003Cowner>\u002F\u003Crepo> --state open\n  --json number,title,headRefName,author,assignees,mergeable,mergeStateStatus,comments`\n  (`LIST_PRS`).\n- **Merge conflict sweep.** Before closing out, check every open PR's\n  `mergeable` field.\n  Filter the list by `memories\u002Freviewing-prs.md`'s scope test first, as\n  `ardia` step 1 does; report an out-of-scope conflicting PR to the user and\n  leave it untouched (no comment, no push).\n  For each in-scope PR with `mergeable == \"CONFLICTING\"` **or\n  `\"UNKNOWN\"`** (see `resolve-conflicts`, \"Verify before you act\" —\n  `UNKNOWN` can mean GitHub hasn't finished computing yet), verify with\n  `git merge-tree --write-tree origin\u002Fmain origin\u002F\u003Cbranch>` (git ≥ 2.38) before acting,\n  then check claim status (most recent comment) and fix confirmed conflicts\n  using the cascade procedure in `post-merge` step 1.5 (claim → isolated\n  worktree → merge main → `resolve-conflicts` skill → push → unclaim). Don't\n  leave conflicting PRs behind when wrapping up — they block whoever works\n  the queue next.\n\n### 2. Surface anything still open or dangling\n\nList, don't bury:\n\n- **Open PRs** — every one, linked. Flag any you didn't expect (e.g. a\n  `@claude`-bot-opened PR) instead of silently passing over it.\n- **Open issues**, **uncommitted working-tree changes**, **unmerged local\n  branches**, and any **deferred follow-up issues** filed this session.\n- **Leftover git worktrees** — agent isolation and `session-lock` leave\n  worktrees behind (esp. ones whose PR already merged). Flag them and offer to\n  run `clean-worktrees` (`cw`) to sweep the dead ones.\n- Never report \"all done\" or that the session is done\n  when there are uncommitted, unpushed, or un-PRed changes, or open PRs authored by that session ---\n  name what remains and say whose call\n  it is (e.g. \"PR #25 is the bot's; yours to merge or close\").\n\n### 3. Report a linked final summary\n\n- **Run the `pr-status-all` skill** to produce the report's PR table.\n  This is a standing user mandate (2026-08-25): every session end or clean stopping point gets a whole-queue dashboard, not just a list of the PRs this conversation happened to touch.\n  Respect that skill's own Safety Cap --- a queue over 10 open PRs gets its condensed table, not a skipped one.\n- Every PR\u002FMR\u002Fissue number in the table is a markdown link (repo policy --- never a bare `#N`).\n- A Pacific-time timestamp (`TZ=America\u002FLos_Angeles date \"+%Y-%m-%d %H:%M %Z\"`;\n  the explicit `TZ` enforces PT on a machine set to any other zone) so \"as of\n  when\" is unambiguous when the user re-reads it later.\n\n### 4. Run a UMS review, then close with the right signal\n\nRun the full `ums` procedure (invoke the `ums` skill by name): scan the session\nfor mistakes-corrected, new user preferences, tool quirks, and skill gaps —\nincluding whether `spot-skill-opportunities` flagged a recurring pattern\nduring the session that's still unbuilt; update the relevant memory files and\nskill definitions; commit via a **branch + PR** (not direct to `main`). If\nnothing durable emerged, say so explicitly rather than manufacturing edits.\n\n#### Closing checklist\n\n**Pause point: after the UMS pass above, before the closing signal or any\n`\u002Fclear` flag.**\nDo-Confirm; per\n[`shared\u002Fworkflow\u002Fskill-checklists.md`](..\u002F..\u002Fshared\u002Fworkflow\u002Fskill-checklists.md).\nIt sits here rather than in step 3 because every item confirms work from an\n*earlier* step --- a checklist placed before the step it checks is a forward\nreference, not a confirmation.\n\n- [ ] **Killer item: step 1's state sweep actually ran** --- the open-PR and\n      open-issue queries per repo, `git status`, local branches, worktrees ---\n      and the step 3 report was built from *its output*, not from\n      recollection.\n      Marked because recollection covers only the PRs and branches this\n      conversation created, which is precisely the blind spot: a bot-opened\n      PR, a leftover harness branch, or another session's PR in the same repo\n      never entered the conversation, so nothing about them feels outstanding.\n      The recorded failure is a clean stopping point flagged twice on the\n      strength of \"my three PRs are merged\", with the sweep then finding a\n      stale draft PR and an unused branch.\n- [ ] Everything the sweep surfaced is named in the report, including anything\n      unexpected, with whose call it is.\n- [ ] The UMS pass above ran, or nothing durable emerged and that is stated\n      explicitly --- a `\u002Fclear` flag that has to mention an owed UMS pass is a\n      flag raised too early.\n\n**Then close the reply with an explicit stopping-point statement (the last message you post before stopping should always state whether or not this is a clean stopping point for the session, and explicitly declare whether the session is done or ongoing):**\n\n- **Clean stopping point reached** (nothing open or pending;\n  no uncommitted, unpushed, or un-PRed changes, and no open PRs authored by this session) ---\n  end with an explicit stopping-point statement,\n  e.g. `**Stopping Point**: Clean stopping point reached --- session done; UMS executed; no follow-up items pending`.\n  A silent trailing summary leaves the user unsure whether you're actually done or just paused.\n- **Not a clean stopping point** (something open or in flight) — an ambiguous review item, a deadlock needing a human reviewer, pending CI\u002Freview jobs, unmerged PRs, or a choice only the user can make — state explicitly `**Stopping Point**: Not a clean stopping point \u002F work remains queued: session not done; [reason\u002Fopen items]`, and end the reply **with the open question(s) \u002F pending tasks**, last and clearly visible.\n\n## Proactive hook compliance\n\nActive Stop hooks validate the close-out response (see [`memories\u002Fhooks.md`](..\u002F..\u002Fmemories\u002Fhooks.md)):\n- **`require-stopping-point.py`**: Conclude with an explicit stopping-point statement (`**Stopping Point**: Clean stopping point reached --- session done; UMS executed; no follow-up items pending` or `**Stopping Point**: Not a clean stopping point \u002F work remains queued: session not done; [reason]`).\n- **`no-unmeasured-clock-claim.py`**: Execute `TZ=America\u002FLos_Angeles date \"+%Y-%m-%d %H:%M %Z\"` fresh before including timestamps in recaps.\n- **`no-empty-promise.py`**: Any commitments made in the wrap-up must ship their mechanism in the same turn or arm an explicit timer.\n- **`no-offer-to-file.py` & `no-unfiled-finding.py`**: File deferred issues or update memories directly in the same turn instead of offering to do so.\n- **`flag-cop-out-offer.py`**: Avoid ending the recap on an open offer for already-authorized tasks.\n- **`no-placeholder-reply.py`**: Deliver a complete, substantive closing report.\n\n## Relationship to other skills\n\n- **`record-learnings`** (continuous) and **`ums`** (the learnings checkpoint,\n  which this embeds as step 4) — `wrap-up` is their session-level bookend.\n- **`spot-skill-opportunities`** — step 4's UMS pass checks whether it flagged\n  a recurring pattern during the session that's still unbuilt.\n- **`pr-status-all`** --- step 3's PR table comes from this skill, not from a\n  hand-built list of the session's own PRs.\n  See its Safety Cap for what happens on a large open-PR queue.\n- **`checkpoint`** \u002F **`compress-session`** — narrower-scoped snapshots taken\n  *during* a session (a task-phase snapshot, a pre-compaction distillation);\n  `wrap-up` is the full session-level close-out these feed into, not a\n  replacement for them.\n\n## Notes\n\n- Wrap-up reports PR\u002Fissue state and, where needed, resolves merge conflicts\n  in unclaimed conflicting PRs (step 1). It does **not** merge PRs — merging\n  stays the user's call unless they ask.\n",{"name":5,"description":7,"allowed-tools":24,"user-invocable":29},[25,26,27,28],"Bash","Read","Edit","Write",true,"main","0f720481f8ce3b3d9fef485f6e230d8b3035748e","skills\u002Fwrap-up",1,"https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config","https:\u002F\u002Fmorrison-lab.github.io\u002Fai-config\u002F","https:\u002F\u002Fgithub.com\u002FMorrison-Lab","2026-11-15 04:39:15",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":29},[40,43,46],{"tool":41,"command":42},"npx","npx skills add Morrison-Lab\u002Fai-config --skill wrap-up",{"tool":44,"command":45},"bunx","bunx skills add Morrison-Lab\u002Fai-config --skill wrap-up",{"tool":47,"command":48},"pnpm","pnpm dlx skills add Morrison-Lab\u002Fai-config --skill wrap-up","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwrap-up\u002FSKILL.md",[],[52,59,66,73,80,87],{"skillNo":53,"name":54,"nameZh":6,"description":55,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":19},"01M735BTH469T1CQ8G2Q9GENCR","workaround-watcher","Watch upstream issue for fix.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fworkaround-watcher\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M735BRKZWFANSQ0GM380B4TD","wn","→ whats-next.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwn\u002FSKILL.md",[],[],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":19},"01M735BPE9V830B3B6NGXQ56J6","whats-next","Recommend concrete next step or action.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwhats-next\u002FSKILL.md",[],[],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":19},"01M735BMHQ60EAD5B7QAWXC5A0","wait-for-results","Wait for pipeline\u002FCI results.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwait-for-results\u002FSKILL.md",[],[],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":19},"01M735BKGZHPN1PEMJ7YBD5VJ8","wai","→ send-notes.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fwai\u002FSKILL.md",[],[],{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":19},"01M735BJ0ZBADJXQ9YPTYSWJZN","use-preferred-style","Apply preferred writing style.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fuse-preferred-style\u002FSKILL.md",[],[]]