[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7351KXGW9QTKQHH1HJFS4YF":3,"skill-same:01M7351KXGW9QTKQHH1HJFS4YF":48},{"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":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":32,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":34,"install":35,"resources":47},"01M7351KXGW9QTKQHH1HJFS4YF","defer-issue",null,"File issue for deferred work.","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\u002Fdefer-issue\u002FSKILL.md",[],[],"2026-11-11 15:11:14",false,"---\nname: defer-issue\ndescription: \"File issue for deferred work.\"\nuser-invocable: true\nallowed-tools:\n  - Bash\n---\n\n# defer-issue\n\nWhen the user decides to push something out of the current scope, file a\nnew issue in the appropriate forge that captures the deferred work cleanly\nenough for them (or a future Claude) to pick it up cold.\n\n## Files the issue and stops\n\n`\u002Fdefer-issue` (alias `\u002Fdi`) means **file the issue and stop**.\nDo not branch, edit, or start the work after filing, even when the work looks small.\nIts counterpart is [`st`](..\u002Fst\u002FSKILL.md): `\u002Fst` files the issue (or finds the existing one) and **starts the work**.\nWhen the user names neither shorthand, the default is to start the work, per [`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md#defer-issue-files-and-stops-st-files-and-starts).\n\n## When this fires\n\nUser says something like:\n\n- \"let's defer this\"\n- \"defer this for later\"\n- \"create a followup issue for X\"\n- \"we'll handle that in a separate PR\"\n- \"make this its own issue\"\n\nDon't fire just because something looks unfinished. The user must\nexplicitly defer.\n\n**One standing exception, which is a grant rather than a loophole.**\n[`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md)'s deferral section\nlicenses deferring a request the user made but that is out of scope for the\nchange in flight, on your own judgment, so long as the deferred item is filed\nin the same reply.\nRun this skill's procedure for that case too, since the filing mechanics are\nidentical and only the trigger differs.\nRead that section's boundary first: a defect inside your own diff is never\ndeferrable, however cleanly the issue is written.\n\n**Pre-existing guideline violations.**\nWhen you notice pre-existing violations of our guidelines during work in a repository ---\nsuch as post-hoc DRW violations where new external tools replicate or exceed internal tools,\nper [`file-pre-existing-violations`](..\u002F..\u002Fshared\u002Fworkflow\u002Ffile-pre-existing-violations.md) ---\nfile them as issues rather than letting them pass unrecorded\nor expanding your active task's scope.\n\n## Procedure\n\n### 1. Identify the forge\n\n```sh\ngit remote get-url origin\n```\n\n| Host                     | CLI                     |\n|--------------------------|-------------------------|\n| `github.com`             | `gh issue create`       |\n| `gitlab.com` \u002F self-hosted GitLab | `glab issue create` |\n| Bitbucket \u002F Gitea \u002F other | ask the user how to file |\n\nIf the matching CLI isn't installed, surface that and stop — don't try to\nfile via the raw HTTP API without confirming.\n\n### 2. Gather context\n\nFrom the current conversation, identify:\n\n- **What is being deferred** (one sentence — becomes the title)\n- **Concrete work needed** (what change, which files, what \"done\" looks like)\n- **Why deferring** (out of scope, needs design discussion, blocked on X)\n- **Where the deferral was raised** (PR number, commit SHA, file:line, review thread)\n\nIf any of these are unclear from context, ask the user briefly before\nfiling. A vague follow-up issue is worse than no issue.\n\n### 2b. Search for an existing issue first — including CLOSED ones\n\nBefore filing, check the tracker so you don't create a duplicate. Search\n**both open and closed** issues by keyword — deferred review findings are\noften pre-filed by an earlier session or the review bot and may already be\n**closed** (e.g. as a duplicate, or decided), which an open-only search\nmisses:\n\n```sh\ngh issue list --state all --search \"\u003Ckeywords>\" --json number,title,state   # SEARCH_ISSUES\n# GitLab: glab issue list --all --search \"\u003Ckeywords>\"   # --all (-A) = open + closed\n```\n\n- If an **open** issue already covers it, link that one instead of filing —\n  report its URL and stop.\n- If a **closed** issue covers it, surface it to the user (it may have been\n  closed as a duplicate pointing elsewhere, or closed as decided) and confirm\n  whether to reopen it, file fresh, or treat the matter as settled — don't\n  blindly file a second one.\n\nThis is the **never assume; always verify** rule applied to issue filing: a\nquick search beats leaving two issues tracking the same work.\n\n### 3. Compose the issue\n\n**Title:** short, imperative, specific. Good: `Refactor session_env merge\nlogic to handle nested overrides`. Bad: `Followup`, `TODO from PR #42`.\n\n**Body template:**\n\n```markdown\n## Context\n\nDeferred from \u003Csource: e.g., PR #42, commit abc1234, review on path\u002Fto\u002Ffile.R:120>.\n\n\u003C1–2 sentences on why this work is being split off from the current change>\n\n## What to do\n\n\u003Cconcrete description: what change, which files, what success looks like>\n\n## Why not now\n\n\u003Creason for deferring — out of scope, needs design, blocked, etc.>\n```\n\n### 4. Create the issue\n\n**GitHub:**\n\n```sh\ngh issue create \\\n  --title \"...\" \\\n  --label ai-authored --label \"model:\u003Cmodel-id>\" --label P2 \\\n  --body \"$(cat \u003C\u003C'EOF'\n...\nEOF\n)\"   # CREATE_ISSUE\n```\n\n- Defaults to the current repo (whatever `gh` resolves from remotes \u002F\n  `gh repo set-default`).\n- If filing into a different repo than the current one, pass\n  `--repo \u003Cowner>\u002F\u003Crepo>` and confirm with the user first.\n- `ai-authored`, `model:\u003Cmodel-id>` and one of `P1`, `P2` or `P3` (`P2` is\n  the default) are mandatory on every issue an agent\n  files into a repo we administrate, per\n  [`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md);\n  [`label-agent-filed-issues`](..\u002F..\u002Fshared\u002Fworkflow\u002Flabel-agent-filed-issues.md)\n  covers normalizing the model id and creating the labels where they are missing.\n- Then check `gh label list` for an existing `followup`, `deferred`, or\n  `tech-debt` label and add it with `--label` too.\n  **Don't fabricate labels\n  that don't exist** — `gh` will fail and you'll have to retry.\n- Don't add `🤖 Generated with Claude Code` attribution to the issue **body** unless the user asks.\n  Issue attribution isn't covered by the global `attribution` setting.\n  This is not an exemption from the agent-disclosure rule, which governs **comments** rather than issue bodies and uses a different, deliberately emoji-free marker --- see [`disclose-agent-authorship`](..\u002F..\u002Fshared\u002Fworkflow\u002Fdisclose-agent-authorship.md).\n  So a comment this skill posts on the deferring PR carries the marker, while the filed issue's own body stays unattributed.\n\n**GitLab:**\n\n```sh\nglab issue create --title \"...\" --label \"ai-authored,model:\u003Cmodel-id>,P2\" \\\n  --description \"$(cat \u003C\u003C'EOF'\n...\nEOF\n)\"\n```\n\n### 5. Report back and offer the cross-link\n\nPrint the new issue's number and URL as a **bare URL** (so it's clickable\nin the user's terminal — markdown links render as label-only and lose the\nURL). Example:\n\n```\nFiled followup: https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fissues\u002F123\n```\n\nIf the deferral originated in an open PR or issue, **offer** to add a\n`Followup: #\u003Cnew-issue>` reference to that source thread — don't do it\nunprompted. The user may want different wording or may not want a\ncross-reference at all.\n\nAfter reporting, end the turn on that issue.\nResume the deferred work only when the user later asks for it.\n\n## Edge cases\n\n- **Not in a git repo \u002F no remote:** stop and tell the user. Don't try to\n  invent a target repo.\n- **Forked PR (head repo != base repo):** file the issue in the **base**\n  repo by default — that's where the work will actually land — and\n  confirm if it's ambiguous.\n- **Different tracker entirely** (Linear, Jira, repo-specific issue\n  tracker): ask the user where to file. Don't assume GitHub\u002FGitLab just\n  because the source is hosted there.\n","# defer-issue\n\nWhen the user decides to push something out of the current scope, file a\nnew issue in the appropriate forge that captures the deferred work cleanly\nenough for them (or a future Claude) to pick it up cold.\n\n## Files the issue and stops\n\n`\u002Fdefer-issue` (alias `\u002Fdi`) means **file the issue and stop**.\nDo not branch, edit, or start the work after filing, even when the work looks small.\nIts counterpart is [`st`](..\u002Fst\u002FSKILL.md): `\u002Fst` files the issue (or finds the existing one) and **starts the work**.\nWhen the user names neither shorthand, the default is to start the work, per [`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md#defer-issue-files-and-stops-st-files-and-starts).\n\n## When this fires\n\nUser says something like:\n\n- \"let's defer this\"\n- \"defer this for later\"\n- \"create a followup issue for X\"\n- \"we'll handle that in a separate PR\"\n- \"make this its own issue\"\n\nDon't fire just because something looks unfinished. The user must\nexplicitly defer.\n\n**One standing exception, which is a grant rather than a loophole.**\n[`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md)'s deferral section\nlicenses deferring a request the user made but that is out of scope for the\nchange in flight, on your own judgment, so long as the deferred item is filed\nin the same reply.\nRun this skill's procedure for that case too, since the filing mechanics are\nidentical and only the trigger differs.\nRead that section's boundary first: a defect inside your own diff is never\ndeferrable, however cleanly the issue is written.\n\n**Pre-existing guideline violations.**\nWhen you notice pre-existing violations of our guidelines during work in a repository ---\nsuch as post-hoc DRW violations where new external tools replicate or exceed internal tools,\nper [`file-pre-existing-violations`](..\u002F..\u002Fshared\u002Fworkflow\u002Ffile-pre-existing-violations.md) ---\nfile them as issues rather than letting them pass unrecorded\nor expanding your active task's scope.\n\n## Procedure\n\n### 1. Identify the forge\n\n```sh\ngit remote get-url origin\n```\n\n| Host                     | CLI                     |\n|--------------------------|-------------------------|\n| `github.com`             | `gh issue create`       |\n| `gitlab.com` \u002F self-hosted GitLab | `glab issue create` |\n| Bitbucket \u002F Gitea \u002F other | ask the user how to file |\n\nIf the matching CLI isn't installed, surface that and stop — don't try to\nfile via the raw HTTP API without confirming.\n\n### 2. Gather context\n\nFrom the current conversation, identify:\n\n- **What is being deferred** (one sentence — becomes the title)\n- **Concrete work needed** (what change, which files, what \"done\" looks like)\n- **Why deferring** (out of scope, needs design discussion, blocked on X)\n- **Where the deferral was raised** (PR number, commit SHA, file:line, review thread)\n\nIf any of these are unclear from context, ask the user briefly before\nfiling. A vague follow-up issue is worse than no issue.\n\n### 2b. Search for an existing issue first — including CLOSED ones\n\nBefore filing, check the tracker so you don't create a duplicate. Search\n**both open and closed** issues by keyword — deferred review findings are\noften pre-filed by an earlier session or the review bot and may already be\n**closed** (e.g. as a duplicate, or decided), which an open-only search\nmisses:\n\n```sh\ngh issue list --state all --search \"\u003Ckeywords>\" --json number,title,state   # SEARCH_ISSUES\n# GitLab: glab issue list --all --search \"\u003Ckeywords>\"   # --all (-A) = open + closed\n```\n\n- If an **open** issue already covers it, link that one instead of filing —\n  report its URL and stop.\n- If a **closed** issue covers it, surface it to the user (it may have been\n  closed as a duplicate pointing elsewhere, or closed as decided) and confirm\n  whether to reopen it, file fresh, or treat the matter as settled — don't\n  blindly file a second one.\n\nThis is the **never assume; always verify** rule applied to issue filing: a\nquick search beats leaving two issues tracking the same work.\n\n### 3. Compose the issue\n\n**Title:** short, imperative, specific. Good: `Refactor session_env merge\nlogic to handle nested overrides`. Bad: `Followup`, `TODO from PR #42`.\n\n**Body template:**\n\n```markdown\n## Context\n\nDeferred from \u003Csource: e.g., PR #42, commit abc1234, review on path\u002Fto\u002Ffile.R:120>.\n\n\u003C1–2 sentences on why this work is being split off from the current change>\n\n## What to do\n\n\u003Cconcrete description: what change, which files, what success looks like>\n\n## Why not now\n\n\u003Creason for deferring — out of scope, needs design, blocked, etc.>\n```\n\n### 4. Create the issue\n\n**GitHub:**\n\n```sh\ngh issue create \\\n  --title \"...\" \\\n  --label ai-authored --label \"model:\u003Cmodel-id>\" --label P2 \\\n  --body \"$(cat \u003C\u003C'EOF'\n...\nEOF\n)\"   # CREATE_ISSUE\n```\n\n- Defaults to the current repo (whatever `gh` resolves from remotes \u002F\n  `gh repo set-default`).\n- If filing into a different repo than the current one, pass\n  `--repo \u003Cowner>\u002F\u003Crepo>` and confirm with the user first.\n- `ai-authored`, `model:\u003Cmodel-id>` and one of `P1`, `P2` or `P3` (`P2` is\n  the default) are mandatory on every issue an agent\n  files into a repo we administrate, per\n  [`issue-first`](..\u002F..\u002Fshared\u002Fworkflow\u002Fissue-first.md);\n  [`label-agent-filed-issues`](..\u002F..\u002Fshared\u002Fworkflow\u002Flabel-agent-filed-issues.md)\n  covers normalizing the model id and creating the labels where they are missing.\n- Then check `gh label list` for an existing `followup`, `deferred`, or\n  `tech-debt` label and add it with `--label` too.\n  **Don't fabricate labels\n  that don't exist** — `gh` will fail and you'll have to retry.\n- Don't add `🤖 Generated with Claude Code` attribution to the issue **body** unless the user asks.\n  Issue attribution isn't covered by the global `attribution` setting.\n  This is not an exemption from the agent-disclosure rule, which governs **comments** rather than issue bodies and uses a different, deliberately emoji-free marker --- see [`disclose-agent-authorship`](..\u002F..\u002Fshared\u002Fworkflow\u002Fdisclose-agent-authorship.md).\n  So a comment this skill posts on the deferring PR carries the marker, while the filed issue's own body stays unattributed.\n\n**GitLab:**\n\n```sh\nglab issue create --title \"...\" --label \"ai-authored,model:\u003Cmodel-id>,P2\" \\\n  --description \"$(cat \u003C\u003C'EOF'\n...\nEOF\n)\"\n```\n\n### 5. Report back and offer the cross-link\n\nPrint the new issue's number and URL as a **bare URL** (so it's clickable\nin the user's terminal — markdown links render as label-only and lose the\nURL). Example:\n\n```\nFiled followup: https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fissues\u002F123\n```\n\nIf the deferral originated in an open PR or issue, **offer** to add a\n`Followup: #\u003Cnew-issue>` reference to that source thread — don't do it\nunprompted. The user may want different wording or may not want a\ncross-reference at all.\n\nAfter reporting, end the turn on that issue.\nResume the deferred work only when the user later asks for it.\n\n## Edge cases\n\n- **Not in a git repo \u002F no remote:** stop and tell the user. Don't try to\n  invent a target repo.\n- **Forked PR (head repo != base repo):** file the issue in the **base**\n  repo by default — that's where the work will actually land — and\n  confirm if it's ambiguous.\n- **Different tracker entirely** (Linear, Jira, repo-specific issue\n  tracker): ask the user where to file. Don't assume GitHub\u002FGitLab just\n  because the source is hosted there.\n",{"name":5,"description":7,"allowed-tools":24,"user-invocable":26},[25],"Bash",true,"main","f8f5ea79cc52e903c30773b5e264e384e715c4c7","skills\u002Fdefer-issue",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-13 04:48:19",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":26},[37,40,43],{"tool":38,"command":39},"npx","npx skills add Morrison-Lab\u002Fai-config --skill defer-issue",{"tool":41,"command":42},"bunx","bunx skills add Morrison-Lab\u002Fai-config --skill defer-issue",{"tool":44,"command":45},"pnpm","pnpm dlx skills add Morrison-Lab\u002Fai-config --skill defer-issue","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fdefer-issue\u002FSKILL.md",[],[49,56,63,70,77,84],{"skillNo":50,"name":51,"nameZh":6,"description":52,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":53,"categories":54,"keywords":55,"publishedAt":19},"01M73593BZ33TKTNBDX8JNKYN8","resolve-conflicts","Resolve merge conflicts.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fresolve-conflicts\u002FSKILL.md",[],[],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":19},"01M73584TVDWNA1HMAQ8XXGSZV","rec","Provide recommendations for choices.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Frec\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M7357KC2MZNHTDDSY4DT9CGJ","push","Pre-push check for active sessions.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fpush\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7354D93G0P37BRHR2T3HD82","handoff","Snapshot state to forge\u002Fmemory.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fhandoff\u002FSKILL.md",[],[],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":19},"01M7352Y31YM4STJ5MDR48ZQBW","empty-promise","Investigate and correct empty promises.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fempty-promise\u002FSKILL.md",[],[],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":19},"01M7352P8K341JQ8M8X264CMRV","draft-in-ezras-voice","Draft communications for Ezra in his own voice: announcements, emails, and comments sent under his name.","https:\u002F\u002Fgithub.com\u002FMorrison-Lab\u002Fai-config\u002Fblob\u002Fmain\u002Fskills\u002Fdraft-in-ezras-voice\u002FSKILL.md",[],[]]