[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6N1NR0TP3Q0ECZP2MT96K0T":3,"skill-same:01M6N1NR0TP3Q0ECZP2MT96K0T":55},{"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":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":36,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6N1NR0TP3Q0ECZP2MT96K0T","clean-code",null,"agent-kit-startup\u002Fagent-kit","agent-kit-startup","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F273612197?v=4","01M6N1G5CDEDXFAYC2ZWJFRQ5N","dadado","01M6N1G5H5C367X5124515SA2T",23,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fcore\u002Fclean-code\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,24,25],"code","clean code","clean","2026-11-10 10:12:30",false,"---\nname: clean-code\ndescription: Remove AI code slop (redundant comments, noisy try\u002Fcatch, any casts, deep nesting). Alias: code-deslop. Use after AI sessions or before review.\nversion: 0.1.0\ncategory: quality\n---\n\n# Clean Code (code-deslop)\n\nObvious comments, excessive defense, `any` to silence the type checker, deep nesting - patterns that read like machine code.\n\n## When to use\n\n- After AI session, before commit\n- PR review with generated code\n- Explicit request: deslop \u002F clean AI code\n- Before code review\n\nDiff or specific file: this skill. Large refactoring: `cleancode-refactor` subagent.\n\n## Process\n\n1. `git diff` against base (e.g., `main`)\n2. Scan the areas below\n3. Minimal change; same behavior except for clear bugs\n4. Lint and typecheck\n5. Summary in 1-3 sentences\n\n## Focus Areas (slop patterns)\n\n### 1. Redundant comments\n\nRepeat the obvious instead of explaining the why.\n\n```typescript\n\u002F\u002F BAD - slop\nconst total = items.length; \u002F\u002F Get the total number of items\nreturn total; \u002F\u002F Return the total\n\n\u002F\u002F GOOD - no comment needed, code is self-explanatory\nconst total = items.length;\nreturn total;\n```\n\n### 2. Too much defense\n\nTry\u002Fcatch or null check in internal path where caller already guarantees valid data.\n\n```typescript\n\u002F\u002F BAD - slop (internal helper, caller always passes valid data)\nfunction formatName(user: User): string {\n  try {\n    if (!user) throw new Error('User is required');\n    if (!user.name) throw new Error('Name is required');\n    return user.name.trim();\n  } catch (error) {\n    console.error('Error formatting name:', error);\n    throw error;\n  }\n}\n\n\u002F\u002F GOOD\nfunction formatName(user: User): string {\n  return user.name.trim();\n}\n```\n\n### 3. `any` to escape typing\n\nCast just to silence the checker instead of modeling the correct type.\n\n```typescript\n\u002F\u002F BAD - slop\nconst result = (response as any).data;\n\n\u002F\u002F GOOD - use the actual type\nconst result = (response as ApiResponse).data;\n```\n\n### 4. Deep nesting\n\nStacked if\u002Felse or try\u002Fcatch; prefer early return or guard clauses.\n\n```typescript\n\u002F\u002F BAD - slop\nfunction process(input: string | null) {\n  if (input) {\n    if (input.length > 0) {\n      if (isValid(input)) {\n        return transform(input);\n      }\n    }\n  }\n  return null;\n}\n\n\u002F\u002F GOOD - early returns\nfunction process(input: string | null) {\n  if (!input || input.length === 0 || !isValid(input)) return null;\n  return transform(input);\n}\n```\n\n### 5. Style inconsistent with file\n\nNames, imports, error handling or formatting different from the rest of the file.\n\n### 6. Em dash (\"—\") in text\n\nThe em dash \"—\" is one of the strongest marks of AI-generated text. In comments, commit messages, docs, README, HANDOFF and memory, it's slop: replace with hyphen, colon, comma, parentheses or period.\n\n```text\nBAD  (AI slop, with em dash)\nfeat: new cache — reduces latency and simplifies flow\nthe CLI parses — then validates — then saves\n\nGOOD\nfeat: new cache reduces latency and simplifies flow\nthe CLI parses, validates and saves\nthe CLI parses; then validates; then saves\n```\n\nRule: **completely eliminate** \"—\" from commits, text and docs. Only use when mandatory for a concrete reason (e.g., literally quoting external text, data or an API that already contains the character). In these cases, preserve the original.\n\nNote: this applies to the repository and to chat. It's textual slop, not just code; see rules `agent-output-hygiene`, `docs-professional-standard` and `ux-tone`.\n\n## Conventions\n\n- Same observable behavior, except for clear bug fixes\n- Small edits; align to local style\n- Comment that explains *why*: keep it\n- Run linter\u002Ftypecheck after\n\n## Checklist\n\n- [ ] Obvious comments removed\n- [ ] Unnecessary try\u002Fcatch and checks removed where flow is reliable\n- [ ] `any` replaced with appropriate type or removed\n- [ ] Nesting flattened (early return \u002F guards)\n- [ ] Em dash \"—\" eliminated from comments, commits and touched docs (only keep if mandatory literal quote)\n- [ ] Style aligned to file\n- [ ] No meta-language \u002F gossip \u002F chat reasoning in comments, commits or touched docs (rule `agent-output-hygiene`)\n- [ ] Lint\u002Ftypecheck ok; short summary","# Clean Code (code-deslop)\n\nObvious comments, excessive defense, `any` to silence the type checker, deep nesting - patterns that read like machine code.\n\n## When to use\n\n- After AI session, before commit\n- PR review with generated code\n- Explicit request: deslop \u002F clean AI code\n- Before code review\n\nDiff or specific file: this skill. Large refactoring: `cleancode-refactor` subagent.\n\n## Process\n\n1. `git diff` against base (e.g., `main`)\n2. Scan the areas below\n3. Minimal change; same behavior except for clear bugs\n4. Lint and typecheck\n5. Summary in 1-3 sentences\n\n## Focus Areas (slop patterns)\n\n### 1. Redundant comments\n\nRepeat the obvious instead of explaining the why.\n\n```typescript\n\u002F\u002F BAD - slop\nconst total = items.length; \u002F\u002F Get the total number of items\nreturn total; \u002F\u002F Return the total\n\n\u002F\u002F GOOD - no comment needed, code is self-explanatory\nconst total = items.length;\nreturn total;\n```\n\n### 2. Too much defense\n\nTry\u002Fcatch or null check in internal path where caller already guarantees valid data.\n\n```typescript\n\u002F\u002F BAD - slop (internal helper, caller always passes valid data)\nfunction formatName(user: User): string {\n  try {\n    if (!user) throw new Error('User is required');\n    if (!user.name) throw new Error('Name is required');\n    return user.name.trim();\n  } catch (error) {\n    console.error('Error formatting name:', error);\n    throw error;\n  }\n}\n\n\u002F\u002F GOOD\nfunction formatName(user: User): string {\n  return user.name.trim();\n}\n```\n\n### 3. `any` to escape typing\n\nCast just to silence the checker instead of modeling the correct type.\n\n```typescript\n\u002F\u002F BAD - slop\nconst result = (response as any).data;\n\n\u002F\u002F GOOD - use the actual type\nconst result = (response as ApiResponse).data;\n```\n\n### 4. Deep nesting\n\nStacked if\u002Felse or try\u002Fcatch; prefer early return or guard clauses.\n\n```typescript\n\u002F\u002F BAD - slop\nfunction process(input: string | null) {\n  if (input) {\n    if (input.length > 0) {\n      if (isValid(input)) {\n        return transform(input);\n      }\n    }\n  }\n  return null;\n}\n\n\u002F\u002F GOOD - early returns\nfunction process(input: string | null) {\n  if (!input || input.length === 0 || !isValid(input)) return null;\n  return transform(input);\n}\n```\n\n### 5. Style inconsistent with file\n\nNames, imports, error handling or formatting different from the rest of the file.\n\n### 6. Em dash (\"—\") in text\n\nThe em dash \"—\" is one of the strongest marks of AI-generated text. In comments, commit messages, docs, README, HANDOFF and memory, it's slop: replace with hyphen, colon, comma, parentheses or period.\n\n```text\nBAD  (AI slop, with em dash)\nfeat: new cache — reduces latency and simplifies flow\nthe CLI parses — then validates — then saves\n\nGOOD\nfeat: new cache reduces latency and simplifies flow\nthe CLI parses, validates and saves\nthe CLI parses; then validates; then saves\n```\n\nRule: **completely eliminate** \"—\" from commits, text and docs. Only use when mandatory for a concrete reason (e.g., literally quoting external text, data or an API that already contains the character). In these cases, preserve the original.\n\nNote: this applies to the repository and to chat. It's textual slop, not just code; see rules `agent-output-hygiene`, `docs-professional-standard` and `ux-tone`.\n\n## Conventions\n\n- Same observable behavior, except for clear bug fixes\n- Small edits; align to local style\n- Comment that explains *why*: keep it\n- Run linter\u002Ftypecheck after\n\n## Checklist\n\n- [ ] Obvious comments removed\n- [ ] Unnecessary try\u002Fcatch and checks removed where flow is reliable\n- [ ] `any` replaced with appropriate type or removed\n- [ ] Nesting flattened (early return \u002F guards)\n- [ ] Em dash \"—\" eliminated from comments, commits and touched docs (only keep if mandatory literal quote)\n- [ ] Style aligned to file\n- [ ] No meta-language \u002F gossip \u002F chat reasoning in comments, commits or touched docs (rule `agent-output-hygiene`)\n- [ ] Lint\u002Ftypecheck ok; short summary",{},"main","9f8bc81bbd3e9fb5b9c46dc59ad4a99ac8365fa5","registry\u002Fskills\u002Fcore\u002Fclean-code",2,"https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit","https:\u002F\u002Fmissionkit.io\u002F","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup","dadado.dev","Everyone calls me Dadado.","2026-11-11 11:03:48",{"source":7,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add agent-kit-startup\u002Fagent-kit --skill clean-code",{"tool":47,"command":48},"bunx","bunx skills add agent-kit-startup\u002Fagent-kit --skill clean-code",{"tool":50,"command":51},"pnpm","pnpm dlx skills add agent-kit-startup\u002Fagent-kit --skill clean-code","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fcore\u002Fclean-code\u002FSKILL.md",true,[],[56,81,100,116,146,159],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":26},"01M6N1Q7XF3R5BDAJ2W2VBXBNC","qa","Playbook for \u002Fqa. Verify a release or bug against CHANGELOG claims, install journey, tests, and hygiene. Invoke via \u002Fqa; do not auto-load.","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Fqa\u002FSKILL.md",[],[58,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80],"invoke","bug","hygiene","via","verify","load","tests","true","for","core","do","install","playbook","release","changelog","claims","auto","journey",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":26},"01M6N1Q4F95YR6JXRSHABJR18B","plan-review-triage","Triage plan monitor findings. Select untriaged targets, summarize open residuals, and persist durable triage headings. Invoke via \u002Fplan-review-triage; do not auto-load.","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Fplan-review-triage\u002FSKILL.md",[],[88,89,90,91,92,93,94,68,79,95,70,96,97,72,73,66,63,98,99],"triage","plan","plan review","review","review triage","plan review triage","targets","open","monitor","select","summarize","persist",{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":26},"01M6N1Q0T6HZ1HT425V9AED20T","plan-external-review","Arm external Claude reviewer for plan audits with autonomous background PTY spawn and freshness-gated wait. Invoke via \u002Fplan-external-review; do not auto-load.","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Fplan-external-review\u002FSKILL.md",[],[107,91,89,108,63,70,109,110,111,66,112,113,68,79,114,115,71,72,73],"plan external review","background","wait","spawn","gated","with","reviewer","autonomous","PTY",{"skillNo":117,"name":118,"nameZh":6,"description":119,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":120,"categories":121,"keywords":130,"publishedAt":26},"01M6N1PV5VC6J8EF6VVWP95T2Y","hitl-gates","Agent Kit HITL contract, exact Ask questions labels, and numbered-list fallback as path 1. Use when running \u002Fstart-project, \u002Frun-plan, \u002Frun-plan-all, \u002Fcontinue-plan, \u002Fgit-prod, backlog CRUD, \u002Fhotfix, \u002Fqa, \u002Fplan-review-triage, install, or onboard, or when Ask questions is missing. Factory landing wraps \u002Fkit-staging and \u002Fkit-prod keep their own command-file Asks; they are not consumer default-path inventory. Invoke via the command's own link; do not auto-load.","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Fhitl-gates\u002FSKILL.md",[122,127],{"categoryNo":123,"categoryName":124,"taxonomyType":125,"taxonomyTypeDesc":126},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":128,"categoryName":129,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000037","律师与法务",[131,132,133,134,135,79,58,136,137,138,139,140,141,142,143,63,144,145,89,91],"hitl","gates","hitl gates","hotfix","ask","kit","labels","default","inventory","project","agent kit","crud","when","run","command",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":155,"publishedAt":26},"01M6N1PM87KBJ2CQ74CVZ9X4VB","field-report-resolve","Resolve Field Report attention cards by checking eligibility and dismissing when answered or subject-resolved. Invoke via \u002Ffield-report-resolve; do not auto-load.","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Ffield-report-resolve\u002FSKILL.md",[152],{"categoryNo":153,"categoryName":154,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000034","行政与办公人员",[156,157,143,63,66,68,79,70,72,158,73],"field report resolve","report","attention",{"skillNo":160,"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":161,"categories":162,"keywords":164,"publishedAt":26},"01M6N1PGC3P3388CC5N91XVFXY","https:\u002F\u002Fgithub.com\u002Fagent-kit-startup\u002Fagent-kit\u002Fblob\u002Fmain\u002Fskills\u002Fclean-code\u002FSKILL.md",[163],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[23,25,24]]