[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CAQ9XRTF20SE7157CWCY8C":3,"skill-same:01M6CAQ9XRTF20SE7157CWCY8C":73},{"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":23,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":50,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6CAQ9XRTF20SE7157CWCY8C","flaky-fix",null,"Suggest and apply fixes for flaky tests based on detected patterns. Use after flaky-detect identifies unreliable tests that need repair.","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\u002Ftesting-quality\u002Fskills\u002Fflaky-fix\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33],"fix","flaky fix","use","patterns","repair","tests","detect","for","fixes","apply","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: flaky-fix\ndescription: Suggest and apply fixes for flaky tests based on detected patterns. Use after flaky-detect identifies unreliable tests that need repair.\nversion: 1.0.0\nplatforms: [all]\n\n---\n\n# Flaky Fix Skill\n\n## Purpose\n\nAnalyze flaky test patterns and suggest or auto-apply fixes. Based on FlakyFix research showing LLMs can automatically repair flaky tests with targeted prompts.\n\n## Research Foundation\n\n| Finding | Source | Reference |\n|---------|--------|-----------|\n| LLM Auto-repair | FlakyFix (2023) | [arXiv:2307.00012](https:\u002F\u002Farxiv.org\u002Fhtml\u002F2307.00012v4) - 70%+ success rate |\n| Flaky Taxonomy | Google (2016) | [Flaky Tests Study](https:\u002F\u002Ftesting.googleblog.com\u002F2016\u002F05\u002Fflaky-tests-at-google-and-how-we.html) |\n| Pattern-based Fixes | FlaKat (2024) | [arXiv:2403.01003](https:\u002F\u002Farxiv.org\u002Fabs\u002F2403.01003) |\n\n## When This Skill Applies\n\n- After `flaky-detect` identifies flaky tests\n- User asks to \"fix flaky test\" or \"make test reliable\"\n- CI is failing intermittently on specific tests\n- Test marked as flaky needs repair\n\n## Trigger Phrases\n\n| Natural Language | Action |\n|------------------|--------|\n| \"Fix this flaky test\" | Analyze and suggest fix |\n| \"Make this test reliable\" | Apply deterministic patterns |\n| \"Why is this test flaky?\" | Root cause analysis + fix |\n| \"Auto-fix flaky tests\" | Batch fix safe patterns |\n| \"Remove timing dependency\" | Specific timing fix |\n\n## Fix Patterns by Category\n\n### 1. Timing Issues (45% of flaky tests)\n\n#### Problem: Uses Real Time\n```typescript\n\u002F\u002F FLAKY: Time-dependent\nit('should expire after 1 hour', () => {\n  const token = createToken();\n  expect(token.expiresAt).toBeGreaterThan(Date.now());\n});\n```\n\n#### Fix: Mock Time\n```typescript\n\u002F\u002F FIXED: Mocked time\nit('should expire after 1 hour', () => {\n  const fixedTime = new Date('2024-01-01T00:00:00Z');\n  vi.setSystemTime(fixedTime);\n\n  const token = createToken();\n\n  expect(token.expiresAt).toBe(fixedTime.getTime() + 3600000);\n  vi.useRealTimers();\n});\n```\n\n#### Problem: Explicit Sleep\u002FDelay\n```typescript\n\u002F\u002F FLAKY: Arbitrary delay\nit('should complete async operation', async () => {\n  startAsyncOperation();\n  await sleep(100);  \u002F\u002F Race condition!\n  expect(result).toBeDefined();\n});\n```\n\n#### Fix: Proper Async Handling\n```typescript\n\u002F\u002F FIXED: Wait for actual completion\nit('should complete async operation', async () => {\n  const result = await startAsyncOperation();\n  expect(result).toBeDefined();\n});\n\n\u002F\u002F Or use waitFor for DOM\nit('should show loading state', async () => {\n  render(\u003CComponent \u002F>);\n  await waitFor(() => {\n    expect(screen.getByText('Loaded')).toBeInTheDocument();\n  });\n});\n```\n\n### 2. Async Issues (25% of flaky tests)\n\n#### Problem: Missing Await\n```typescript\n\u002F\u002F FLAKY: Promise not awaited\nit('should fetch data', () => {\n  const promise = fetchData();\n  promise.then(data => {\n    expect(data).toBeDefined();  \u002F\u002F May not run before test ends\n  });\n});\n```\n\n#### Fix: Proper Async\u002FAwait\n```typescript\n\u002F\u002F FIXED: Awaited promise\nit('should fetch data', async () => {\n  const data = await fetchData();\n  expect(data).toBeDefined();\n});\n```\n\n#### Problem: Race Condition\n```typescript\n\u002F\u002F FLAKY: Order not guaranteed\nit('should process items', async () => {\n  const results = [];\n  items.forEach(async item => {\n    results.push(await process(item));\n  });\n  expect(results.length).toBe(3);  \u002F\u002F Race!\n});\n```\n\n#### Fix: Sequential or Parallel Await\n```typescript\n\u002F\u002F FIXED: Guaranteed order\nit('should process items', async () => {\n  const results = await Promise.all(\n    items.map(item => process(item))\n  );\n  expect(results.length).toBe(3);\n});\n```\n\n### 3. Test Order Dependencies (20% of flaky tests)\n\n#### Problem: Shared State\n```typescript\n\u002F\u002F FLAKY: Shared state between tests\nlet counter = 0;\n\nit('should increment', () => {\n  counter++;\n  expect(counter).toBe(1);  \u002F\u002F Fails if other test runs first\n});\n```\n\n#### Fix: Test Isolation\n```typescript\n\u002F\u002F FIXED: Isolated state\ndescribe('counter', () => {\n  let counter;\n\n  beforeEach(() => {\n    counter = 0;  \u002F\u002F Fresh state each test\n  });\n\n  it('should increment', () => {\n    counter++;\n    expect(counter).toBe(1);\n  });\n});\n```\n\n### 4. Non-deterministic Values (10% of flaky tests)\n\n#### Problem: Random\u002FUUID Values\n```typescript\n\u002F\u002F FLAKY: Random ID\nit('should create user with ID', () => {\n  const user = createUser();\n  expect(user.id).toBe('expected-id');  \u002F\u002F Random!\n});\n```\n\n#### Fix: Mock Random Generation\n```typescript\n\u002F\u002F FIXED: Deterministic ID\nit('should create user with ID', () => {\n  vi.mock('uuid', () => ({\n    v4: () => 'test-uuid-1234'\n  }));\n\n  const user = createUser();\n  expect(user.id).toBe('test-uuid-1234');\n});\n```\n\n### 5. Environment Dependencies (15% of flaky tests)\n\n#### Problem: Network Calls\n```typescript\n\u002F\u002F FLAKY: Real network\nit('should fetch from API', async () => {\n  const data = await fetch('https:\u002F\u002Fapi.example.com\u002Fdata');\n  expect(data).toBeDefined();  \u002F\u002F Network failures!\n});\n```\n\n#### Fix: Mock Network\n```typescript\n\u002F\u002F FIXED: Mocked network\nit('should fetch from API', async () => {\n  vi.mock('node-fetch', () => ({\n    default: vi.fn().mockResolvedValue({\n      json: () => ({ success: true })\n    })\n  }));\n\n  const data = await fetchFromApi();\n  expect(data.success).toBe(true);\n});\n```\n\n## Auto-Fix Rules\n\n### Safe to Auto-Fix (Apply Automatically)\n\n| Pattern | Detection | Fix |\n|---------|-----------|-----|\n| `Date.now()` in assertion | Regex | Wrap with `vi.setSystemTime()` |\n| Missing `await` on async | AST analysis | Add `await` keyword |\n| `setTimeout` in test | Regex | Replace with `vi.advanceTimersByTime()` |\n| `Math.random()` | Regex | Mock with deterministic value |\n\n### Requires Review (Suggest Only)\n\n| Pattern | Why Review Needed |\n|---------|-------------------|\n| Shared test state | May require architectural changes |\n| Database fixtures | Needs isolation strategy |\n| External service calls | Mock design decision |\n| Complex async flows | Multiple fix approaches |\n\n## Output Format\n\n```markdown\n## Flaky Test Fix Report\n\n### Test: `test\u002Fapi\u002Flogin.test.ts:45`\n\n**Root Cause**: Timing - uses `Date.now()` in assertion\n**Confidence**: HIGH (pattern match)\n**Auto-fixable**: YES\n\n#### Original Code\n```typescript\nit('should create token with expiry', () => {\n  const token = createToken();\n  expect(token.expiresAt).toBeGreaterThan(Date.now());\n});\n```\n\n#### Suggested Fix\n```typescript\nit('should create token with expiry', () => {\n  const now = new Date('2024-01-01T12:00:00Z');\n  vi.setSystemTime(now);\n\n  const token = createToken();\n\n  expect(token.expiresAt).toBe(now.getTime() + TOKEN_LIFETIME);\n  vi.useRealTimers();\n});\n```\n\n#### Changes Summary\n- Added: `vi.setSystemTime()` for deterministic time\n- Added: `vi.useRealTimers()` cleanup\n- Changed: Assertion to exact value match\n\n#### Verification\nRun 10x to confirm fix:\n```bash\nfor i in {1..10}; do npm test -- test\u002Fapi\u002Flogin.test.ts:45; done\n```\n\n### Batch Fix Summary\n\n| Test | Category | Auto-Fixed | Status |\n|------|----------|-----------|--------|\n| login.test.ts:45 | Timing | Yes | ✅ Fixed |\n| user.test.ts:23 | Async | Yes | ✅ Fixed |\n| db.test.ts:67 | State | No | Suggested |\n| api.test.ts:12 | Network | No | Suggested |\n\n**Auto-fixed**: 2 tests\n**Manual review**: 2 tests\n**Estimated stability improvement**: +1.5%\n```\n\n## Integration Points\n\n- Works with `flaky-detect` for test identification\n- Reports to Test Engineer for complex fixes\n- Feeds into CI stability metrics\n- Updates `.aiwg\u002Ftesting\u002Fflaky-fixes.md`\n\n## Script Reference\n\n### flaky_fixer.py\nAnalyze and fix flaky tests:\n```bash\npython scripts\u002Fflaky_fixer.py --test test\u002Fapi\u002Flogin.test.ts --auto-fix\n```\n\n### batch_fix.py\nFix multiple flaky tests:\n```bash\npython scripts\u002Fbatch_fix.py --input flaky-report.json --safe-only\n```\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — Testing quality addon overview\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fhuman-authorization.md — Authorization before auto-applying fixes\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework context\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference\n","# Flaky Fix Skill\n\n## Purpose\n\nAnalyze flaky test patterns and suggest or auto-apply fixes. Based on FlakyFix research showing LLMs can automatically repair flaky tests with targeted prompts.\n\n## Research Foundation\n\n| Finding | Source | Reference |\n|---------|--------|-----------|\n| LLM Auto-repair | FlakyFix (2023) | [arXiv:2307.00012](https:\u002F\u002Farxiv.org\u002Fhtml\u002F2307.00012v4) - 70%+ success rate |\n| Flaky Taxonomy | Google (2016) | [Flaky Tests Study](https:\u002F\u002Ftesting.googleblog.com\u002F2016\u002F05\u002Fflaky-tests-at-google-and-how-we.html) |\n| Pattern-based Fixes | FlaKat (2024) | [arXiv:2403.01003](https:\u002F\u002Farxiv.org\u002Fabs\u002F2403.01003) |\n\n## When This Skill Applies\n\n- After `flaky-detect` identifies flaky tests\n- User asks to \"fix flaky test\" or \"make test reliable\"\n- CI is failing intermittently on specific tests\n- Test marked as flaky needs repair\n\n## Trigger Phrases\n\n| Natural Language | Action |\n|------------------|--------|\n| \"Fix this flaky test\" | Analyze and suggest fix |\n| \"Make this test reliable\" | Apply deterministic patterns |\n| \"Why is this test flaky?\" | Root cause analysis + fix |\n| \"Auto-fix flaky tests\" | Batch fix safe patterns |\n| \"Remove timing dependency\" | Specific timing fix |\n\n## Fix Patterns by Category\n\n### 1. Timing Issues (45% of flaky tests)\n\n#### Problem: Uses Real Time\n```typescript\n\u002F\u002F FLAKY: Time-dependent\nit('should expire after 1 hour', () => {\n  const token = createToken();\n  expect(token.expiresAt).toBeGreaterThan(Date.now());\n});\n```\n\n#### Fix: Mock Time\n```typescript\n\u002F\u002F FIXED: Mocked time\nit('should expire after 1 hour', () => {\n  const fixedTime = new Date('2024-01-01T00:00:00Z');\n  vi.setSystemTime(fixedTime);\n\n  const token = createToken();\n\n  expect(token.expiresAt).toBe(fixedTime.getTime() + 3600000);\n  vi.useRealTimers();\n});\n```\n\n#### Problem: Explicit Sleep\u002FDelay\n```typescript\n\u002F\u002F FLAKY: Arbitrary delay\nit('should complete async operation', async () => {\n  startAsyncOperation();\n  await sleep(100);  \u002F\u002F Race condition!\n  expect(result).toBeDefined();\n});\n```\n\n#### Fix: Proper Async Handling\n```typescript\n\u002F\u002F FIXED: Wait for actual completion\nit('should complete async operation', async () => {\n  const result = await startAsyncOperation();\n  expect(result).toBeDefined();\n});\n\n\u002F\u002F Or use waitFor for DOM\nit('should show loading state', async () => {\n  render(\u003CComponent \u002F>);\n  await waitFor(() => {\n    expect(screen.getByText('Loaded')).toBeInTheDocument();\n  });\n});\n```\n\n### 2. Async Issues (25% of flaky tests)\n\n#### Problem: Missing Await\n```typescript\n\u002F\u002F FLAKY: Promise not awaited\nit('should fetch data', () => {\n  const promise = fetchData();\n  promise.then(data => {\n    expect(data).toBeDefined();  \u002F\u002F May not run before test ends\n  });\n});\n```\n\n#### Fix: Proper Async\u002FAwait\n```typescript\n\u002F\u002F FIXED: Awaited promise\nit('should fetch data', async () => {\n  const data = await fetchData();\n  expect(data).toBeDefined();\n});\n```\n\n#### Problem: Race Condition\n```typescript\n\u002F\u002F FLAKY: Order not guaranteed\nit('should process items', async () => {\n  const results = [];\n  items.forEach(async item => {\n    results.push(await process(item));\n  });\n  expect(results.length).toBe(3);  \u002F\u002F Race!\n});\n```\n\n#### Fix: Sequential or Parallel Await\n```typescript\n\u002F\u002F FIXED: Guaranteed order\nit('should process items', async () => {\n  const results = await Promise.all(\n    items.map(item => process(item))\n  );\n  expect(results.length).toBe(3);\n});\n```\n\n### 3. Test Order Dependencies (20% of flaky tests)\n\n#### Problem: Shared State\n```typescript\n\u002F\u002F FLAKY: Shared state between tests\nlet counter = 0;\n\nit('should increment', () => {\n  counter++;\n  expect(counter).toBe(1);  \u002F\u002F Fails if other test runs first\n});\n```\n\n#### Fix: Test Isolation\n```typescript\n\u002F\u002F FIXED: Isolated state\ndescribe('counter', () => {\n  let counter;\n\n  beforeEach(() => {\n    counter = 0;  \u002F\u002F Fresh state each test\n  });\n\n  it('should increment', () => {\n    counter++;\n    expect(counter).toBe(1);\n  });\n});\n```\n\n### 4. Non-deterministic Values (10% of flaky tests)\n\n#### Problem: Random\u002FUUID Values\n```typescript\n\u002F\u002F FLAKY: Random ID\nit('should create user with ID', () => {\n  const user = createUser();\n  expect(user.id).toBe('expected-id');  \u002F\u002F Random!\n});\n```\n\n#### Fix: Mock Random Generation\n```typescript\n\u002F\u002F FIXED: Deterministic ID\nit('should create user with ID', () => {\n  vi.mock('uuid', () => ({\n    v4: () => 'test-uuid-1234'\n  }));\n\n  const user = createUser();\n  expect(user.id).toBe('test-uuid-1234');\n});\n```\n\n### 5. Environment Dependencies (15% of flaky tests)\n\n#### Problem: Network Calls\n```typescript\n\u002F\u002F FLAKY: Real network\nit('should fetch from API', async () => {\n  const data = await fetch('https:\u002F\u002Fapi.example.com\u002Fdata');\n  expect(data).toBeDefined();  \u002F\u002F Network failures!\n});\n```\n\n#### Fix: Mock Network\n```typescript\n\u002F\u002F FIXED: Mocked network\nit('should fetch from API', async () => {\n  vi.mock('node-fetch', () => ({\n    default: vi.fn().mockResolvedValue({\n      json: () => ({ success: true })\n    })\n  }));\n\n  const data = await fetchFromApi();\n  expect(data.success).toBe(true);\n});\n```\n\n## Auto-Fix Rules\n\n### Safe to Auto-Fix (Apply Automatically)\n\n| Pattern | Detection | Fix |\n|---------|-----------|-----|\n| `Date.now()` in assertion | Regex | Wrap with `vi.setSystemTime()` |\n| Missing `await` on async | AST analysis | Add `await` keyword |\n| `setTimeout` in test | Regex | Replace with `vi.advanceTimersByTime()` |\n| `Math.random()` | Regex | Mock with deterministic value |\n\n### Requires Review (Suggest Only)\n\n| Pattern | Why Review Needed |\n|---------|-------------------|\n| Shared test state | May require architectural changes |\n| Database fixtures | Needs isolation strategy |\n| External service calls | Mock design decision |\n| Complex async flows | Multiple fix approaches |\n\n## Output Format\n\n```markdown\n## Flaky Test Fix Report\n\n### Test: `test\u002Fapi\u002Flogin.test.ts:45`\n\n**Root Cause**: Timing - uses `Date.now()` in assertion\n**Confidence**: HIGH (pattern match)\n**Auto-fixable**: YES\n\n#### Original Code\n```typescript\nit('should create token with expiry', () => {\n  const token = createToken();\n  expect(token.expiresAt).toBeGreaterThan(Date.now());\n});\n```\n\n#### Suggested Fix\n```typescript\nit('should create token with expiry', () => {\n  const now = new Date('2024-01-01T12:00:00Z');\n  vi.setSystemTime(now);\n\n  const token = createToken();\n\n  expect(token.expiresAt).toBe(now.getTime() + TOKEN_LIFETIME);\n  vi.useRealTimers();\n});\n```\n\n#### Changes Summary\n- Added: `vi.setSystemTime()` for deterministic time\n- Added: `vi.useRealTimers()` cleanup\n- Changed: Assertion to exact value match\n\n#### Verification\nRun 10x to confirm fix:\n```bash\nfor i in {1..10}; do npm test -- test\u002Fapi\u002Flogin.test.ts:45; done\n```\n\n### Batch Fix Summary\n\n| Test | Category | Auto-Fixed | Status |\n|------|----------|-----------|--------|\n| login.test.ts:45 | Timing | Yes | ✅ Fixed |\n| user.test.ts:23 | Async | Yes | ✅ Fixed |\n| db.test.ts:67 | State | No | Suggested |\n| api.test.ts:12 | Network | No | Suggested |\n\n**Auto-fixed**: 2 tests\n**Manual review**: 2 tests\n**Estimated stability improvement**: +1.5%\n```\n\n## Integration Points\n\n- Works with `flaky-detect` for test identification\n- Reports to Test Engineer for complex fixes\n- Feeds into CI stability metrics\n- Updates `.aiwg\u002Ftesting\u002Fflaky-fixes.md`\n\n## Script Reference\n\n### flaky_fixer.py\nAnalyze and fix flaky tests:\n```bash\npython scripts\u002Fflaky_fixer.py --test test\u002Fapi\u002Flogin.test.ts --auto-fix\n```\n\n### batch_fix.py\nFix multiple flaky tests:\n```bash\npython scripts\u002Fbatch_fix.py --input flaky-report.json --safe-only\n```\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — Testing quality addon overview\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fhuman-authorization.md — Authorization before auto-applying fixes\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002FREADME.md — SDLC framework context\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference\n",{"name":5,"version":39,"namespace":40,"platforms":41,"description":7},"1.0.0","aiwg",[42],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Ftesting-quality\u002Fskills\u002Fflaky-fix",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":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add jmagly\u002Faiwg --skill flaky-fix",{"tool":59,"command":60},"bunx","bunx skills add jmagly\u002Faiwg --skill flaky-fix",{"tool":62,"command":63},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill flaky-fix","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Ftesting-quality\u002Fskills\u002Fflaky-fix\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"administration.md","REFERENCE","参考文档",8066,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Faws-rds\u002Fadministration.md",[74,102,126,132,139,153],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":81,"publishedAt":34},"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",[80],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":112,"publishedAt":34},"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",[108,111],{"categoryNo":109,"categoryName":110,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[113,114,115,85,116,90,117,118,92,119,82,120,94,121,122,97,98,123,124,125],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":127,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":131,"publishedAt":34},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[130],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[84,82,83,93,85,101,88,87,96,89,90,91,92,100,94,95,86,97,98,99],{"skillNo":133,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":138,"publishedAt":34},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[136,137],{"categoryNo":109,"categoryName":110,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[114,113,97,116,90,117,92,115,82,120,94,121,122,85,98,119,118,123,124,125],{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":146,"publishedAt":34},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[145],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[147,148,149,150,151,152],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":160,"publishedAt":34},"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",[159],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[161,162,121,163,148],"pi","pi local","duplicate"]