[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RA25KTBC82GZEDGFMSJF4B":3,"skill-same:01M6RA25KTBC82GZEDGFMSJF4B":71},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":6,"ownerHtmlUrl":53,"ownerBlogUrl":54,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6RA25KTBC82GZEDGFMSJF4B","pseudo-elements",null,"Audit CSS for pseudo-element best practices and View Transitions API usage. Use when reviewing hover effects, decorative layers, or page transitions. Outputs file:line findings.","Nairon-AI\u002Fagentic-starter-pack","Nairon-AI","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F260662138?v=4","01M6R8PZ1Y8CSQGFN61VACZGTH","Nairon AI","01M6R8PZ6184VR3BA88YZFBC3N",4,"MIT","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Ffrontend\u002Fmotion\u002Fpseudo-elements\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"elements","pseudo elements","line","hover","when","outputs","effects","for","layers","usage","element","best practices","css","transitions","use","view","page","api","audit","file","2026-11-10 10:12:30",false,"---\nname: pseudo-elements\ndescription: Audit CSS for pseudo-element best practices and View Transitions API usage. Use when reviewing hover effects, decorative layers, or page transitions. Outputs file:line findings.\nlicense: MIT\nmetadata:\n  author: raphael-salaja\n  version: \"2.0.0\"\n  source: \u002Fcontent\u002Ftaking-advantage-of-pseudo-elements\u002Findex.mdx\n---\n\n# Pseudo Elements\n\nReview CSS and JavaScript for pseudo-element best practices and View Transitions API usage.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Before\u002FAfter | `pseudo-` |\n| 2 | View Transitions | `transition-` |\n| 3 | Native Styling | `native-` |\n\n## Rules\n\n### Before\u002FAfter Rules\n\n#### `pseudo-content-required`\n::before and ::after require content property to render.\n\n**Fail:**\n```css\n.button::before {\n  position: absolute;\n  background: var(--gray-3);\n}\n```\n\n**Pass:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  background: var(--gray-3);\n}\n```\n\n#### `pseudo-over-dom-node`\nUse pseudo-elements for decorative content instead of extra DOM nodes.\n\n**Fail:**\n```tsx\n\u003Cbutton className={styles.button}>\n  \u003Cspan className={styles.background} \u002F> {\u002F* Unnecessary DOM node *\u002F}\n  Click me\n\u003C\u002Fbutton>\n```\n\n**Pass:**\n```tsx\n\u003Cbutton className={styles.button}>\n  Click me\n\u003C\u002Fbutton>\n```\n```css\n.button::before {\n  content: \"\";\n  \u002F* decorative background *\u002F\n}\n```\n\n#### `pseudo-position-relative-parent`\nParent must have position: relative for absolute pseudo-elements.\n\n**Fail:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n}\n\u002F* .button has no position *\u002F\n```\n\n**Pass:**\n```css\n.button {\n  position: relative;\n}\n\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n}\n```\n\n#### `pseudo-z-index-layering`\nPseudo-elements need z-index to layer correctly with content.\n\n**Fail:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: var(--gray-3);\n}\n\u002F* Covers button text *\u002F\n```\n\n**Pass:**\n```css\n.button {\n  position: relative;\n  z-index: 1;\n}\n\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: var(--gray-3);\n  z-index: -1;\n}\n```\n\n#### `pseudo-hit-target-expansion`\nUse negative inset values to expand hit targets without extra markup.\n\n**Fail:**\n```tsx\n\u003Cdiv className={styles.wrapper}> {\u002F* Extra wrapper for hit target *\u002F}\n  \u003Ca className={styles.link}>Link\u003C\u002Fa>\n\u003C\u002Fdiv>\n```\n\n**Pass:**\n```css\n.link {\n  position: relative;\n}\n\n.link::before {\n  content: \"\";\n  position: absolute;\n  inset: -8px -12px;\n}\n```\n\n### View Transitions Rules\n\n#### `transition-name-required`\nElements participating in view transitions need view-transition-name.\n\n**Fail:**\n```ts\ndocument.startViewTransition(() => {\n  \u002F\u002F No view-transition-name assigned\n  targetImg.src = newSrc;\n});\n```\n\n**Pass:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  sourceImg.style.viewTransitionName = \"\";\n  targetImg.style.viewTransitionName = \"card\";\n});\n```\n\n#### `transition-name-unique`\nEach view-transition-name must be unique on the page during transition.\n\n**Fail:**\n```css\n.card {\n  view-transition-name: card;\n}\n\u002F* Multiple cards with same name *\u002F\n```\n\n**Pass:**\n```ts\n\u002F\u002F Assign unique name only to transitioning element\nelement.style.viewTransitionName = `card-${id}`;\n```\n\n#### `transition-name-cleanup`\nRemove view-transition-name after transition completes.\n\n**Fail:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  targetImg.style.viewTransitionName = \"card\";\n});\n\u002F\u002F sourceImg still has name, causes conflict on next transition\n```\n\n**Pass:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  sourceImg.style.viewTransitionName = \"\";\n  targetImg.style.viewTransitionName = \"card\";\n});\n```\n\n#### `transition-over-js-library`\nPrefer View Transitions API over JavaScript animation libraries for page transitions.\n\n**Fail:**\n```tsx\nimport { motion } from \"motion\u002Freact\";\n\nfunction ImageLightbox() {\n  return (\n    \u003Cmotion.img layoutId=\"hero\" \u002F> \u002F\u002F JS-based shared element transition\n  );\n}\n```\n\n**Pass:**\n```ts\nfunction openLightbox(img: HTMLImageElement) {\n  img.style.viewTransitionName = \"hero\";\n  document.startViewTransition(() => {\n    \u002F\u002F Native browser transition\n  });\n}\n```\n\n#### `transition-style-pseudo-elements`\nStyle view transition pseudo-elements for custom animations.\n\n**Fail:**\n```ts\ndocument.startViewTransition(() => { \u002F* ... *\u002F });\n\u002F\u002F Uses default crossfade\n```\n\n**Pass:**\n```css\n::view-transition-group(card) {\n  animation-duration: 300ms;\n  animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n```\n\n### Native Styling Rules\n\n#### `native-backdrop-styling`\nUse ::backdrop pseudo-element for dialog\u002Fpopover backgrounds.\n\n**Fail:**\n```tsx\n\u003C>\n  \u003Cdiv className={styles.overlay} onClick={close} \u002F>\n  \u003Cdialog className={styles.dialog}>{children}\u003C\u002Fdialog>\n\u003C\u002F>\n```\n\n**Pass:**\n```css\ndialog::backdrop {\n  background: var(--black-a6);\n  backdrop-filter: blur(4px);\n}\n```\n\n#### `native-placeholder-styling`\nUse ::placeholder for input placeholder styling, not wrapper elements.\n\n**Fail:**\n```tsx\n\u003Cdiv className={styles.inputWrapper}>\n  {!value && \u003Cspan className={styles.placeholder}>Enter text...\u003C\u002Fspan>}\n  \u003Cinput value={value} \u002F>\n\u003C\u002Fdiv>\n```\n\n**Pass:**\n```css\ninput::placeholder {\n  color: var(--gray-9);\n  opacity: 1;\n}\n```\n\n#### `native-selection-styling`\nUse ::selection for text selection styling.\n\n**Pass:**\n```css\n::selection {\n  background: var(--blue-a5);\n  color: var(--gray-12);\n}\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\ncomponents\u002Fbutton\u002Fstyles.module.css:12 - [pseudo-content-required] ::before missing content property\ncomponents\u002Flightbox\u002Findex.tsx:45 - [transition-over-js-library] Using motion layoutId instead of View Transitions API\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `pseudo-content-required` | 2 | HIGH |\n| `pseudo-over-dom-node` | 1 | MEDIUM |\n| `transition-name-cleanup` | 1 | MEDIUM |\n\n## References\n\n- [MDN Pseudo-elements Reference](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002FReference\u002FSelectors\u002FPseudo-elements)\n- [View Transitions API](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FView_Transitions_API)\n","# Pseudo Elements\n\nReview CSS and JavaScript for pseudo-element best practices and View Transitions API usage.\n\n## How It Works\n\n1. Read the specified files (or prompt user for files\u002Fpattern)\n2. Check against all rules below\n3. Output findings in `file:line` format\n\n## Rule Categories\n\n| Priority | Category | Prefix |\n|----------|----------|--------|\n| 1 | Before\u002FAfter | `pseudo-` |\n| 2 | View Transitions | `transition-` |\n| 3 | Native Styling | `native-` |\n\n## Rules\n\n### Before\u002FAfter Rules\n\n#### `pseudo-content-required`\n::before and ::after require content property to render.\n\n**Fail:**\n```css\n.button::before {\n  position: absolute;\n  background: var(--gray-3);\n}\n```\n\n**Pass:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  background: var(--gray-3);\n}\n```\n\n#### `pseudo-over-dom-node`\nUse pseudo-elements for decorative content instead of extra DOM nodes.\n\n**Fail:**\n```tsx\n\u003Cbutton className={styles.button}>\n  \u003Cspan className={styles.background} \u002F> {\u002F* Unnecessary DOM node *\u002F}\n  Click me\n\u003C\u002Fbutton>\n```\n\n**Pass:**\n```tsx\n\u003Cbutton className={styles.button}>\n  Click me\n\u003C\u002Fbutton>\n```\n```css\n.button::before {\n  content: \"\";\n  \u002F* decorative background *\u002F\n}\n```\n\n#### `pseudo-position-relative-parent`\nParent must have position: relative for absolute pseudo-elements.\n\n**Fail:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n}\n\u002F* .button has no position *\u002F\n```\n\n**Pass:**\n```css\n.button {\n  position: relative;\n}\n\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n}\n```\n\n#### `pseudo-z-index-layering`\nPseudo-elements need z-index to layer correctly with content.\n\n**Fail:**\n```css\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: var(--gray-3);\n}\n\u002F* Covers button text *\u002F\n```\n\n**Pass:**\n```css\n.button {\n  position: relative;\n  z-index: 1;\n}\n\n.button::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background: var(--gray-3);\n  z-index: -1;\n}\n```\n\n#### `pseudo-hit-target-expansion`\nUse negative inset values to expand hit targets without extra markup.\n\n**Fail:**\n```tsx\n\u003Cdiv className={styles.wrapper}> {\u002F* Extra wrapper for hit target *\u002F}\n  \u003Ca className={styles.link}>Link\u003C\u002Fa>\n\u003C\u002Fdiv>\n```\n\n**Pass:**\n```css\n.link {\n  position: relative;\n}\n\n.link::before {\n  content: \"\";\n  position: absolute;\n  inset: -8px -12px;\n}\n```\n\n### View Transitions Rules\n\n#### `transition-name-required`\nElements participating in view transitions need view-transition-name.\n\n**Fail:**\n```ts\ndocument.startViewTransition(() => {\n  \u002F\u002F No view-transition-name assigned\n  targetImg.src = newSrc;\n});\n```\n\n**Pass:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  sourceImg.style.viewTransitionName = \"\";\n  targetImg.style.viewTransitionName = \"card\";\n});\n```\n\n#### `transition-name-unique`\nEach view-transition-name must be unique on the page during transition.\n\n**Fail:**\n```css\n.card {\n  view-transition-name: card;\n}\n\u002F* Multiple cards with same name *\u002F\n```\n\n**Pass:**\n```ts\n\u002F\u002F Assign unique name only to transitioning element\nelement.style.viewTransitionName = `card-${id}`;\n```\n\n#### `transition-name-cleanup`\nRemove view-transition-name after transition completes.\n\n**Fail:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  targetImg.style.viewTransitionName = \"card\";\n});\n\u002F\u002F sourceImg still has name, causes conflict on next transition\n```\n\n**Pass:**\n```ts\nsourceImg.style.viewTransitionName = \"card\";\ndocument.startViewTransition(() => {\n  sourceImg.style.viewTransitionName = \"\";\n  targetImg.style.viewTransitionName = \"card\";\n});\n```\n\n#### `transition-over-js-library`\nPrefer View Transitions API over JavaScript animation libraries for page transitions.\n\n**Fail:**\n```tsx\nimport { motion } from \"motion\u002Freact\";\n\nfunction ImageLightbox() {\n  return (\n    \u003Cmotion.img layoutId=\"hero\" \u002F> \u002F\u002F JS-based shared element transition\n  );\n}\n```\n\n**Pass:**\n```ts\nfunction openLightbox(img: HTMLImageElement) {\n  img.style.viewTransitionName = \"hero\";\n  document.startViewTransition(() => {\n    \u002F\u002F Native browser transition\n  });\n}\n```\n\n#### `transition-style-pseudo-elements`\nStyle view transition pseudo-elements for custom animations.\n\n**Fail:**\n```ts\ndocument.startViewTransition(() => { \u002F* ... *\u002F });\n\u002F\u002F Uses default crossfade\n```\n\n**Pass:**\n```css\n::view-transition-group(card) {\n  animation-duration: 300ms;\n  animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n```\n\n### Native Styling Rules\n\n#### `native-backdrop-styling`\nUse ::backdrop pseudo-element for dialog\u002Fpopover backgrounds.\n\n**Fail:**\n```tsx\n\u003C>\n  \u003Cdiv className={styles.overlay} onClick={close} \u002F>\n  \u003Cdialog className={styles.dialog}>{children}\u003C\u002Fdialog>\n\u003C\u002F>\n```\n\n**Pass:**\n```css\ndialog::backdrop {\n  background: var(--black-a6);\n  backdrop-filter: blur(4px);\n}\n```\n\n#### `native-placeholder-styling`\nUse ::placeholder for input placeholder styling, not wrapper elements.\n\n**Fail:**\n```tsx\n\u003Cdiv className={styles.inputWrapper}>\n  {!value && \u003Cspan className={styles.placeholder}>Enter text...\u003C\u002Fspan>}\n  \u003Cinput value={value} \u002F>\n\u003C\u002Fdiv>\n```\n\n**Pass:**\n```css\ninput::placeholder {\n  color: var(--gray-9);\n  opacity: 1;\n}\n```\n\n#### `native-selection-styling`\nUse ::selection for text selection styling.\n\n**Pass:**\n```css\n::selection {\n  background: var(--blue-a5);\n  color: var(--gray-12);\n}\n```\n\n## Output Format\n\nWhen reviewing files, output findings as:\n\n```\nfile:line - [rule-id] description of issue\n\nExample:\ncomponents\u002Fbutton\u002Fstyles.module.css:12 - [pseudo-content-required] ::before missing content property\ncomponents\u002Flightbox\u002Findex.tsx:45 - [transition-over-js-library] Using motion layoutId instead of View Transitions API\n```\n\n## Summary Table\n\nAfter findings, output a summary:\n\n| Rule | Count | Severity |\n|------|-------|----------|\n| `pseudo-content-required` | 2 | HIGH |\n| `pseudo-over-dom-node` | 1 | MEDIUM |\n| `transition-name-cleanup` | 1 | MEDIUM |\n\n## References\n\n- [MDN Pseudo-elements Reference](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002FReference\u002FSelectors\u002FPseudo-elements)\n- [View Transitions API](https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FView_Transitions_API)\n",{"name":5,"license":15,"metadata":44,"description":7},{"author":45,"source":46,"version":47},"raphael-salaja","\u002Fcontent\u002Ftaking-advantage-of-pseudo-elements\u002Findex.mdx","2.0.0","main","c9d0c408715983e993b2f9ebffdbfa7f10153bcb","frontend\u002Fmotion\u002Fpseudo-elements",0,"https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack","https:\u002F\u002Fgithub.com\u002FNairon-AI","https:\u002F\u002Fwww.naironai.com\u002F","Building the future of Work","2026-09-20 17:40:05",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add Nairon-AI\u002Fagentic-starter-pack --skill pseudo-elements",{"tool":63,"command":64},"bunx","bunx skills add Nairon-AI\u002Fagentic-starter-pack --skill pseudo-elements",{"tool":66,"command":67},"pnpm","pnpm dlx skills add Nairon-AI\u002Fagentic-starter-pack --skill pseudo-elements","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Ffrontend\u002Fmotion\u002Fpseudo-elements\u002FSKILL.md",true,[],[72,106,127,148,168,190],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":88,"publishedAt":39},"01M6RBCG630Y8X99XWR9Q4GYNY","writing-shape","Take a markdown file of raw material and shape it into an article through a conversational session — drafting candidate openings, growing the piece paragraph by paragraph, arguing about format (lists, tables, callouts, quotes) at each step. Use when the user has a pile of notes, fragments, or a rough draft and wants help turning it into something publishable.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Fwriting-shape\u002FSKILL.md",[78,83],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[89,90,91,92,93,38,94,95,96,33,97,98,99,100,101,102,103,104,105,23],"writing","writing shape","shape","notes","help","markdown","format","session","take","draft","article","material","it","about","quotes","at","candidate",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":114,"publishedAt":39},"01M6RBCCCB1KMF01P5SYGFWBSW","writing-fragments","Grilling session that mines the user for fragments — heterogeneous nuggets of writing (claims, vignettes, sharp sentences, half-thoughts) — and appends them to a single document as raw material for a future article. Use when the user wants to develop ideas before imposing structure, or mentions \"fragments\", \"ideate\", or \"raw material\" for writing.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Fwriting-fragments\u002FSKILL.md",[112,113],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[89,115,116,117,118,119,96,33,120,121,122,99,123,100,124,125,26,126,23],"writing fragments","grilling","ideate","develop","user","document","structure","ideas","as","sharp","claims","single",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":135,"publishedAt":39},"01M6RBC8V7NHHKMTAZB4BPXVYQ","writing-beats","Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Fwriting-beats\u002FSKILL.md",[133,134],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[89,136,137,138,33,139,140,91,141,142,143,99,144,123,145,100,146,147,26,23],"writing beats","choose","write","assemble","only","journey","next","options","end","style","narrative","argument",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":156,"publishedAt":39},"01M6RBC58SG5Y5SC4ZV4ZNEFHC","stop-slop","Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Fstop-slop\u002FSKILL.md",[154,155],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[157,158,159,89,160,161,162,163,164,33,165,166,167,26,23],"stop","stop slop","slop","content","https","text","editing","remove","prose","patterns","drafts",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":176,"publishedAt":39},"01M6RBBJTTCJ7KZCP16G9JDFZH","humanizer","Remove signs of AI-generated writing from text. Use when editing or reviewing\ntext to make it sound more natural and human-written. Based on Wikipedia's\ncomprehensive \"Signs of AI writing\" guide. Detects and fixes patterns including:\ninflated symbolism, promotional language, superficial -ing analyses, vague\nattributions, em dash overuse, rule of three, AI vocabulary words, passive\nvoice, negative parallelisms, and filler phrases.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Fhumanizer\u002FSKILL.md",[174,175],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},[170,89,177,178,162,179,138,180,181,164,182,183,166,184,185,186,187,188,189,23],"code","em dash","read","edit","generated","guide","opencode","three","human","make","wikipedia","vague","dash",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":196,"publishedAt":39},"01M6RBBEQKJ5HRH8AV9J85QB1T","feedback","Prepare, deliver, and debrief timely interpersonal feedback using a question-first coaching flow, observable behavior, owned experience, and concrete impact. Use when drafting feedback, coaching managers, rehearsing a feedback conversation, praising specific behavior, or reviewing whether feedback landed.","https:\u002F\u002Fgithub.com\u002FNairon-AI\u002Fagentic-starter-pack\u002Fblob\u002Fmain\u002Fwriting\u002Ffeedback\u002FSKILL.md",[],[192,197,198,199,200,201,33,202,203,204,205,206,23,207],"prepare","flow","first","question","behavior","conversation","coaching","debrief","impact","managers","deliver"]