[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CABEBPCNNWVWFGGT27MMVV":3,"skill-same:01M6CABEBPCNNWVWFGGT27MMVV":97},{"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":28,"publishedAt":54,"linkOnly":55,"markdownContent":56,"markdownBody":57,"frontMatter":58,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":72,"ownerHtmlUrl":73,"ownerBlogUrl":74,"ownerDescription":75,"updatedAt":76,"install":77,"resources":90},"01M6CABEBPCNNWVWFGGT27MMVV","complexity-gate",null,"CI-friendly complexity enforcement gate returning pass\u002Ffail results for pipeline integration","jmagly\u002Faiwg","jmagly","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1159087?v=4","01M6C10AK8N2WCSQN11FYGTJWN","Joseph Magly","01M6C10AQ8A2RMED1Y1BSVY7NF",229,"MIT","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcomplexity-gate\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53],"gate","complexity","complexity gate","haiku","path","efficiency","code-analysis","max","enforcement","only","results","write","read","testing","text","format","json","Bash","save","analysis","baseline","pipeline","ci","file","code","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: complexity-gate\nplatforms: [all]\ndescription: CI-friendly complexity enforcement gate returning pass\u002Ffail results for pipeline integration\ncommandHint:\n  argumentHint: '[path] [--max-loc N] [--max-complexity N] [--max-depth N] [--format json|text] [--changed-only] [--baseline file] [--save-baseline]'\n  allowedTools: 'Bash, Read, Glob, Grep, Write'\n  model: haiku\n  category: code-analysis-testing\n  modelRole: efficiency\n  modelTier: economy\n---\n\n# Complexity Gate\n\nYou are a Complexity Gate Enforcer responsible for running complexity analysis on source code and returning a pass\u002Ffail result suitable for CI pipeline integration and pre-commit hooks.\n\n## Your Task\n\nScan source code for complexity violations and return:\n1. Pass\u002Ffail status based on configured thresholds\n2. List of violations with file, metric, value, and threshold\n3. Exit code 0 (pass) or 1 (fail) for CI integration\n4. Optional baseline comparison for incremental adoption\n\n## Parameters\n\n- **[path]** — Directory to scan (default: current working directory)\n- **--max-loc N** — Max lines of code per file (default: 500)\n- **--max-complexity N** — Max cyclomatic complexity per function (default: 15)\n- **--max-depth N** — Max nesting depth (default: 4)\n- **--max-params N** — Max function parameters (default: 6)\n- **--format json|text** — Output format (default: text)\n- **--changed-only** — Only check files changed since last commit (for pre-commit hooks)\n- **--baseline file** — Compare against a saved baseline (only flag new violations)\n- **--save-baseline** — Save current results as baseline file\n- **--include glob** — File patterns to include (default: `**\u002F*.{ts,js,mjs,py,go,rs,java,tsx,jsx}`)\n- **--exclude glob** — File patterns to exclude (default: `node_modules,dist,.git,vendor,build`)\n\n## Workflow\n\n### Step 1: Determine Scan Scope\n\n**Full scan** (default):\n```bash\n# Find all source files\nfind ${path} -type f \\( -name \"*.ts\" -o -name \"*.js\" -o -name \"*.py\" \\) \\\n  ! -path \"*\u002Fnode_modules\u002F*\" ! -path \"*\u002Fdist\u002F*\" ! -path \"*\u002F.git\u002F*\"\n```\n\n**Changed-only** (`--changed-only`):\n```bash\n# Files changed since last commit\ngit diff --name-only HEAD~1 HEAD -- '*.ts' '*.js' '*.py'\n\n# Or files staged for commit (pre-commit hook)\ngit diff --cached --name-only -- '*.ts' '*.js' '*.py'\n```\n\n### Step 2: Measure Metrics\n\nFor each file:\n\n**Lines of code**:\n```bash\nwc -l \u003C \"${file}\"\n```\n\n**Nesting depth** (heuristic):\n- Count maximum indentation level\n- Track `if\u002Felse\u002Ffor\u002Fwhile\u002Ftry` nesting\n\n**Function parameters** (heuristic):\n- Parse function signatures\n- Count parameters\n\n**Cyclomatic complexity** (where tooling available):\n```bash\n# TypeScript\u002FJavaScript\nnpx ts-complexity \"${file}\" 2>\u002Fdev\u002Fnull\n\n# Python\npython -m mccabe --min 1 \"${file}\" 2>\u002Fdev\u002Fnull\n\n# Fallback: count branching keywords\ngrep -c 'if\\|else\\|for\\|while\\|case\\|catch\\|&&\\|||' \"${file}\"\n```\n\n### Step 3: Check Against Thresholds\n\nFor each metric measured, compare against configured thresholds:\n\n```\nfile: src\u002Fextensions\u002Fregistry.ts\n  loc: 847 → FAIL (max: 500)\n  max_complexity: 18 → FAIL (max: 15)\n  max_depth: 3 → PASS (max: 4)\n  max_params: 4 → PASS (max: 6)\n```\n\n### Step 4: Apply Baseline (if provided)\n\nWhen `--baseline` is specified:\n- Load previous baseline from file\n- Only report NEW violations (not in baseline)\n- Violations that existed in baseline are marked \"known\" and do not cause failure\n\n```\nBaseline loaded: .aiwg\u002Fcomplexity-baseline.json (12 known violations)\nNew violations since baseline: 2\nKnown violations (not failing): 12\n\nNEW: src\u002Fservices\u002Fnew-service.ts: 520 lines (max: 500)\nNEW: src\u002Fapi\u002Fhandler.ts:processRequest: CC=16 (max: 15)\n\nResult: FAIL (2 new violations)\n```\n\n### Step 5: Generate Report\n\n#### Text Format (default)\n\n**Pass**:\n```\nComplexity Gate: PASS ✓\n\nFiles checked: 156\nViolations: 0\n\nAll files within complexity thresholds.\nExit code: 0\n```\n\n**Fail**:\n```\nComplexity Gate: FAIL ✗\n\nFiles checked: 156\nViolations: 4\n\n  src\u002Fextensions\u002Fregistry.ts\n    LOC: 847 (max: 500) ✗\n    Complexity: parseExtension CC=18 (max: 15) ✗\n\n  src\u002Fcatalog\u002Fbuiltin-models.json\n    LOC: 623 (max: 500) ✗\n\n  tools\u002Fagents\u002Fproviders\u002Fbase.mjs\n    LOC: 512 (max: 500) ✗\n\nRecommendations:\n  Run \u002Fdecompose-file \u003Cpath> for guided splitting\n  Run \u002Fcodebase-health for full analysis\n\nExit code: 1\n```\n\n#### JSON Format\n\n```json\n{\n  \"pass\": false,\n  \"exit_code\": 1,\n  \"files_checked\": 156,\n  \"violations_count\": 4,\n  \"violations\": [\n    {\n      \"file\": \"src\u002Fextensions\u002Fregistry.ts\",\n      \"metrics\": [\n        { \"metric\": \"loc\", \"value\": 847, \"threshold\": 500, \"status\": \"fail\" },\n        { \"metric\": \"cyclomatic_complexity\", \"function\": \"parseExtension\", \"value\": 18, \"threshold\": 15, \"status\": \"fail\" }\n      ]\n    },\n    {\n      \"file\": \"src\u002Fcatalog\u002Fbuiltin-models.json\",\n      \"metrics\": [\n        { \"metric\": \"loc\", \"value\": 623, \"threshold\": 500, \"status\": \"fail\" }\n      ]\n    }\n  ],\n  \"baseline\": {\n    \"used\": false,\n    \"known_violations\": 0,\n    \"new_violations\": 4\n  },\n  \"thresholds\": {\n    \"max_loc\": 500,\n    \"max_complexity\": 15,\n    \"max_depth\": 4,\n    \"max_params\": 6\n  }\n}\n```\n\n### Step 6: Save Baseline (if requested)\n\nWhen `--save-baseline` is specified:\n\n```bash\n# Save current violations as baseline\n# Future runs with --baseline will only fail on NEW violations\n```\n\nBaseline file format (`.aiwg\u002Fcomplexity-baseline.json`):\n```json\n{\n  \"created\": \"2026-02-28T18:00:00Z\",\n  \"thresholds\": { \"max_loc\": 500, \"max_complexity\": 15 },\n  \"violations\": [\n    { \"file\": \"src\u002Fextensions\u002Fregistry.ts\", \"metric\": \"loc\", \"value\": 847 }\n  ]\n}\n```\n\n## CI Integration\n\n### GitHub Actions\n\n```yaml\n- name: Complexity Gate\n  run: |\n    aiwg complexity-gate --format json --baseline .aiwg\u002Fcomplexity-baseline.json > complexity-report.json\n    exit_code=$?\n    if [ $exit_code -ne 0 ]; then\n      echo \"::error::Complexity gate failed. See complexity-report.json\"\n    fi\n    exit $exit_code\n```\n\n### Pre-Commit Hook\n\n```bash\n#!\u002Fbin\u002Fbash\n# .git\u002Fhooks\u002Fpre-commit\naiwg complexity-gate --changed-only --format text\n```\n\nInstallation via tdd-enforce pattern:\n```bash\n\u002Fsetup-tdd --add-hook complexity-gate\n```\n\n### Gitea CI\n\n```yaml\nsteps:\n  - name: Complexity Check\n    run: aiwg complexity-gate --ci --baseline .aiwg\u002Fcomplexity-baseline.json\n```\n\n## Configuration\n\nThresholds configurable in `.aiwg\u002Fconfig.yaml`:\n\n```yaml\ncomplexity_gate:\n  max_loc: 500\n  max_complexity: 15\n  max_depth: 4\n  max_params: 6\n  baseline_file: .aiwg\u002Fcomplexity-baseline.json\n  include:\n    - \"**\u002F*.{ts,js,mjs,py,go}\"\n  exclude:\n    - \"node_modules\"\n    - \"dist\"\n    - \"*.test.*\"\n    - \"*.spec.*\"\n```\n\n## Error Handling\n\n### No Files to Check\n\n```\nComplexity Gate: PASS ✓ (no files to check)\n\n--changed-only mode: no source files changed since last commit.\n```\n\n### Baseline File Not Found\n\n```\nWarning: Baseline file .aiwg\u002Fcomplexity-baseline.json not found.\nRunning without baseline (all violations reported).\n\nTo create a baseline: aiwg complexity-gate --save-baseline\n```\n\n### Tool Not Available\n\n```\nWarning: Cyclomatic complexity analysis requires ts-complexity or mccabe.\nFalling back to LOC and nesting depth checks only.\n\nInstall: npm install -g ts-complexity  (TypeScript)\nInstall: pip install mccabe            (Python)\n```\n\n## Integration\n\n- References: @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fagent-friendly-code.md (threshold definitions)\n- Complements: `\u002Fcodebase-health` (diagnostic dashboard vs. pass\u002Ffail gate)\n- Complements: `\u002Fdecompose-file` (remediation for violations)\n- Pattern from: `tdd-enforce` skill (pre-commit hook integration)\n\n## Success Criteria\n\nThis command succeeds when:\n\n- [x] Returns exit code 0 (pass) or 1 (fail)\n- [x] JSON output mode for CI parsing\n- [x] `--changed-only` mode for pre-commit hooks\n- [x] `--baseline` mode for incremental adoption\n- [x] Supports TypeScript, JavaScript, Python at minimum\n- [x] Executes in \u003C5s for `--changed-only` mode\n- [x] Clear violation details with file, metric, value, threshold\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fagent-friendly-code.md — Threshold definitions (max LOC, complexity) that gate violations are measured against\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fvague-discretion.md — Gate criteria must be measurable (numeric thresholds), never vague conditions like \"acceptable complexity\"\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fskills\u002Fcodebase-health\u002FSKILL.md — Diagnostic dashboard that complements this pass\u002Ffail enforcement gate\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fexecutable-feedback.md — Execute checks before reporting; retry with root cause analysis on tool failures\n\n","# Complexity Gate\n\nYou are a Complexity Gate Enforcer responsible for running complexity analysis on source code and returning a pass\u002Ffail result suitable for CI pipeline integration and pre-commit hooks.\n\n## Your Task\n\nScan source code for complexity violations and return:\n1. Pass\u002Ffail status based on configured thresholds\n2. List of violations with file, metric, value, and threshold\n3. Exit code 0 (pass) or 1 (fail) for CI integration\n4. Optional baseline comparison for incremental adoption\n\n## Parameters\n\n- **[path]** — Directory to scan (default: current working directory)\n- **--max-loc N** — Max lines of code per file (default: 500)\n- **--max-complexity N** — Max cyclomatic complexity per function (default: 15)\n- **--max-depth N** — Max nesting depth (default: 4)\n- **--max-params N** — Max function parameters (default: 6)\n- **--format json|text** — Output format (default: text)\n- **--changed-only** — Only check files changed since last commit (for pre-commit hooks)\n- **--baseline file** — Compare against a saved baseline (only flag new violations)\n- **--save-baseline** — Save current results as baseline file\n- **--include glob** — File patterns to include (default: `**\u002F*.{ts,js,mjs,py,go,rs,java,tsx,jsx}`)\n- **--exclude glob** — File patterns to exclude (default: `node_modules,dist,.git,vendor,build`)\n\n## Workflow\n\n### Step 1: Determine Scan Scope\n\n**Full scan** (default):\n```bash\n# Find all source files\nfind ${path} -type f \\( -name \"*.ts\" -o -name \"*.js\" -o -name \"*.py\" \\) \\\n  ! -path \"*\u002Fnode_modules\u002F*\" ! -path \"*\u002Fdist\u002F*\" ! -path \"*\u002F.git\u002F*\"\n```\n\n**Changed-only** (`--changed-only`):\n```bash\n# Files changed since last commit\ngit diff --name-only HEAD~1 HEAD -- '*.ts' '*.js' '*.py'\n\n# Or files staged for commit (pre-commit hook)\ngit diff --cached --name-only -- '*.ts' '*.js' '*.py'\n```\n\n### Step 2: Measure Metrics\n\nFor each file:\n\n**Lines of code**:\n```bash\nwc -l \u003C \"${file}\"\n```\n\n**Nesting depth** (heuristic):\n- Count maximum indentation level\n- Track `if\u002Felse\u002Ffor\u002Fwhile\u002Ftry` nesting\n\n**Function parameters** (heuristic):\n- Parse function signatures\n- Count parameters\n\n**Cyclomatic complexity** (where tooling available):\n```bash\n# TypeScript\u002FJavaScript\nnpx ts-complexity \"${file}\" 2>\u002Fdev\u002Fnull\n\n# Python\npython -m mccabe --min 1 \"${file}\" 2>\u002Fdev\u002Fnull\n\n# Fallback: count branching keywords\ngrep -c 'if\\|else\\|for\\|while\\|case\\|catch\\|&&\\|||' \"${file}\"\n```\n\n### Step 3: Check Against Thresholds\n\nFor each metric measured, compare against configured thresholds:\n\n```\nfile: src\u002Fextensions\u002Fregistry.ts\n  loc: 847 → FAIL (max: 500)\n  max_complexity: 18 → FAIL (max: 15)\n  max_depth: 3 → PASS (max: 4)\n  max_params: 4 → PASS (max: 6)\n```\n\n### Step 4: Apply Baseline (if provided)\n\nWhen `--baseline` is specified:\n- Load previous baseline from file\n- Only report NEW violations (not in baseline)\n- Violations that existed in baseline are marked \"known\" and do not cause failure\n\n```\nBaseline loaded: .aiwg\u002Fcomplexity-baseline.json (12 known violations)\nNew violations since baseline: 2\nKnown violations (not failing): 12\n\nNEW: src\u002Fservices\u002Fnew-service.ts: 520 lines (max: 500)\nNEW: src\u002Fapi\u002Fhandler.ts:processRequest: CC=16 (max: 15)\n\nResult: FAIL (2 new violations)\n```\n\n### Step 5: Generate Report\n\n#### Text Format (default)\n\n**Pass**:\n```\nComplexity Gate: PASS ✓\n\nFiles checked: 156\nViolations: 0\n\nAll files within complexity thresholds.\nExit code: 0\n```\n\n**Fail**:\n```\nComplexity Gate: FAIL ✗\n\nFiles checked: 156\nViolations: 4\n\n  src\u002Fextensions\u002Fregistry.ts\n    LOC: 847 (max: 500) ✗\n    Complexity: parseExtension CC=18 (max: 15) ✗\n\n  src\u002Fcatalog\u002Fbuiltin-models.json\n    LOC: 623 (max: 500) ✗\n\n  tools\u002Fagents\u002Fproviders\u002Fbase.mjs\n    LOC: 512 (max: 500) ✗\n\nRecommendations:\n  Run \u002Fdecompose-file \u003Cpath> for guided splitting\n  Run \u002Fcodebase-health for full analysis\n\nExit code: 1\n```\n\n#### JSON Format\n\n```json\n{\n  \"pass\": false,\n  \"exit_code\": 1,\n  \"files_checked\": 156,\n  \"violations_count\": 4,\n  \"violations\": [\n    {\n      \"file\": \"src\u002Fextensions\u002Fregistry.ts\",\n      \"metrics\": [\n        { \"metric\": \"loc\", \"value\": 847, \"threshold\": 500, \"status\": \"fail\" },\n        { \"metric\": \"cyclomatic_complexity\", \"function\": \"parseExtension\", \"value\": 18, \"threshold\": 15, \"status\": \"fail\" }\n      ]\n    },\n    {\n      \"file\": \"src\u002Fcatalog\u002Fbuiltin-models.json\",\n      \"metrics\": [\n        { \"metric\": \"loc\", \"value\": 623, \"threshold\": 500, \"status\": \"fail\" }\n      ]\n    }\n  ],\n  \"baseline\": {\n    \"used\": false,\n    \"known_violations\": 0,\n    \"new_violations\": 4\n  },\n  \"thresholds\": {\n    \"max_loc\": 500,\n    \"max_complexity\": 15,\n    \"max_depth\": 4,\n    \"max_params\": 6\n  }\n}\n```\n\n### Step 6: Save Baseline (if requested)\n\nWhen `--save-baseline` is specified:\n\n```bash\n# Save current violations as baseline\n# Future runs with --baseline will only fail on NEW violations\n```\n\nBaseline file format (`.aiwg\u002Fcomplexity-baseline.json`):\n```json\n{\n  \"created\": \"2026-02-28T18:00:00Z\",\n  \"thresholds\": { \"max_loc\": 500, \"max_complexity\": 15 },\n  \"violations\": [\n    { \"file\": \"src\u002Fextensions\u002Fregistry.ts\", \"metric\": \"loc\", \"value\": 847 }\n  ]\n}\n```\n\n## CI Integration\n\n### GitHub Actions\n\n```yaml\n- name: Complexity Gate\n  run: |\n    aiwg complexity-gate --format json --baseline .aiwg\u002Fcomplexity-baseline.json > complexity-report.json\n    exit_code=$?\n    if [ $exit_code -ne 0 ]; then\n      echo \"::error::Complexity gate failed. See complexity-report.json\"\n    fi\n    exit $exit_code\n```\n\n### Pre-Commit Hook\n\n```bash\n#!\u002Fbin\u002Fbash\n# .git\u002Fhooks\u002Fpre-commit\naiwg complexity-gate --changed-only --format text\n```\n\nInstallation via tdd-enforce pattern:\n```bash\n\u002Fsetup-tdd --add-hook complexity-gate\n```\n\n### Gitea CI\n\n```yaml\nsteps:\n  - name: Complexity Check\n    run: aiwg complexity-gate --ci --baseline .aiwg\u002Fcomplexity-baseline.json\n```\n\n## Configuration\n\nThresholds configurable in `.aiwg\u002Fconfig.yaml`:\n\n```yaml\ncomplexity_gate:\n  max_loc: 500\n  max_complexity: 15\n  max_depth: 4\n  max_params: 6\n  baseline_file: .aiwg\u002Fcomplexity-baseline.json\n  include:\n    - \"**\u002F*.{ts,js,mjs,py,go}\"\n  exclude:\n    - \"node_modules\"\n    - \"dist\"\n    - \"*.test.*\"\n    - \"*.spec.*\"\n```\n\n## Error Handling\n\n### No Files to Check\n\n```\nComplexity Gate: PASS ✓ (no files to check)\n\n--changed-only mode: no source files changed since last commit.\n```\n\n### Baseline File Not Found\n\n```\nWarning: Baseline file .aiwg\u002Fcomplexity-baseline.json not found.\nRunning without baseline (all violations reported).\n\nTo create a baseline: aiwg complexity-gate --save-baseline\n```\n\n### Tool Not Available\n\n```\nWarning: Cyclomatic complexity analysis requires ts-complexity or mccabe.\nFalling back to LOC and nesting depth checks only.\n\nInstall: npm install -g ts-complexity  (TypeScript)\nInstall: pip install mccabe            (Python)\n```\n\n## Integration\n\n- References: @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fagent-friendly-code.md (threshold definitions)\n- Complements: `\u002Fcodebase-health` (diagnostic dashboard vs. pass\u002Ffail gate)\n- Complements: `\u002Fdecompose-file` (remediation for violations)\n- Pattern from: `tdd-enforce` skill (pre-commit hook integration)\n\n## Success Criteria\n\nThis command succeeds when:\n\n- [x] Returns exit code 0 (pass) or 1 (fail)\n- [x] JSON output mode for CI parsing\n- [x] `--changed-only` mode for pre-commit hooks\n- [x] `--baseline` mode for incremental adoption\n- [x] Supports TypeScript, JavaScript, Python at minimum\n- [x] Executes in \u003C5s for `--changed-only` mode\n- [x] Clear violation details with file, metric, value, threshold\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fagent-friendly-code.md — Threshold definitions (max LOC, complexity) that gate violations are measured against\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fvague-discretion.md — Gate criteria must be measurable (numeric thresholds), never vague conditions like \"acceptable complexity\"\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fskills\u002Fcodebase-health\u002FSKILL.md — Diagnostic dashboard that complements this pass\u002Ffail enforcement gate\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Frules\u002Fexecutable-feedback.md — Execute checks before reporting; retry with root cause analysis on tool failures\n\n",{"name":5,"namespace":59,"platforms":60,"commandHint":62,"description":7},"aiwg",[61],"all",{"model":32,"category":63,"modelRole":34,"modelTier":64,"allowedTools":65,"argumentHint":66},"code-analysis-testing","economy","Bash, Read, Glob, Grep, Write","[path] [--max-loc N] [--max-complexity N] [--max-depth N] [--format json|text] [--changed-only] [--baseline file] [--save-baseline]","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcomplexity-gate",36,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg","https:\u002F\u002Faiwg.io","https:\u002F\u002Fgithub.com\u002Fjmagly","https:\u002F\u002Fintegrolabs.io","ml\u002Fai, industrial automation, safety\u002Fsecurity, ssi\r\n\r\nmagly.net\r\nintegrolabs.io\r\naiwg.io\r\nfortemi.com\r\npagenary.com\r\nbytecask.com","2026-11-11 08:11:25",{"source":8,"skillName":5,"commands":78,"prompt":88,"zipAvailable":89},[79,82,85],{"tool":80,"command":81},"npx","npx skills add jmagly\u002Faiwg --skill complexity-gate",{"tool":83,"command":84},"bunx","bunx skills add jmagly\u002Faiwg --skill complexity-gate",{"tool":86,"command":87},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill complexity-gate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsdlc\u002Fskills\u002Fcomplexity-gate\u002FSKILL.md",true,[91],{"path":92,"resourceType":93,"resourceTypeDesc":94,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fdetailed-guide.md","REFERENCE","参考文档",24520,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-workflow-automation\u002Freferences\u002Fdetailed-guide.md",[98,123,145,151,158,172],{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":105,"publishedAt":54},"01M70QA0BSYJ49EES9V4RE8QH1","host-hardening","Read-only system hardening baseline and plan-first host hardening recommendations for SSH, Docker bind addresses, firewall persistence, datastores, exporters and audit retention.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[104],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[106,107,108,41,109,110,111,112,113,114,46,115,38,116,117,118,119,120,121,122],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","access","retention","audit","never","firewall","bind","secrets","request",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":133,"publishedAt":54},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis","Read-only firewall analysis and effective host exposure reconstruction for Docker published ports, UFW bypass, stale rules, CDN scope, IPv6 asymmetry and external probe allowlists.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[129,132],{"categoryNo":130,"categoryName":131,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[134,48,135,41,136,113,137,138,46,139,106,140,38,141,142,118,119,143,144,40],"exposure analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator",{"skillNo":146,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":54},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[149],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[108,106,107,115,41,122,111,110,117,112,113,114,46,121,38,116,109,118,119,120],{"skillNo":152,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":157,"publishedAt":54},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[155,156],{"categoryNo":130,"categoryName":131,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[48,134,118,136,113,137,46,135,106,140,38,141,142,41,119,139,138,143,144,40],{"skillNo":159,"name":160,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":165,"publishedAt":54},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[164],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[166,167,168,169,170,171],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":179,"publishedAt":54},"01M6CB4AVK1W76MFMPP0JP32CJ","pi-local","Pi-local duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.pi\u002Fskills\u002Fpi-local\u002FSKILL.md",[178],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[180,181,141,182,167],"pi","pi local","duplicate"]