[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C3D2RARJSGPJQV2VP40RKT":3,"skill-same:01M6C3D2RARJSGPJQV2VP40RKT":68},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6C3D2RARJSGPJQV2VP40RKT","fanout",null,"Dispatch the same query to multiple subagents in parallel across chunks in a manifest and aggregate results with source provenance","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\u002Frlm\u002Fskills\u002Ffanout\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34],"manifest","provenance","parallel","results","subagents","dispatch","query","across","with","source","chunks","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: fanout\nplatforms: [all]\ndescription: Dispatch the same query to multiple subagents in parallel across chunks in a manifest and aggregate results with source provenance\nversion: 1.1.0\n---\n\n# Fanout\n\nDispatch the same query to multiple subagents in parallel, each processing one chunk from a chunk manifest. Aggregates results with source provenance — every answer is tagged with which chunk it came from.\n\n## Triggers\n\nAlternate expressions and non-obvious activations:\n\n- \"search all chunks\" → fanout query across manifest\n- \"run in parallel across the chunks\" → fanout with current manifest\n- \"ask each piece this question\" → fanout with default parallelism\n- \"parallel grep\" → fanout with a pattern as the query\n\n## Trigger Patterns Reference\n\n| Pattern | Example | Action |\n|---------|---------|--------|\n| Fanout search | \"search all chunks for authentication bugs\" | Fanout query across manifest |\n| Explicit chunks dir | \"fanout across .aiwg\u002Frlm-chunks\u002Fauth\u002F\" | `--chunks .aiwg\u002Frlm-chunks\u002Fauth\u002F` |\n| Limit parallelism | \"search chunks, max 2 at a time\" | `--max-parallel 2` |\n| Synthesis request | \"search all chunks and give me one answer\" | `--synthesize` |\n| Model selection | \"use haiku to search the chunks\" | `--model haiku` |\n| Manifest path | \"fanout using manifest.json\" | `--chunks manifest.json` |\n\n## Behavior\n\nWhen triggered:\n\n1. **Parse arguments** — extract query, chunks path (directory or manifest), parallelism limit, model, and synthesis flag.\n\n2. **Load manifest** — read `manifest.json` from the chunks directory, or use the provided manifest path directly. Validate that chunk files exist.\n\n3. **Respect context budget** — if `AIWG_CONTEXT_WINDOW` is set, cap `--max-parallel` at the budget-appropriate limit per the context-budget rule. Default cap is 4 parallel subagents.\n\n4. **Dispatch subagents** — launch up to `--max-parallel` subagents simultaneously. Each subagent:\n   - Receives the query and exactly one chunk's content\n   - Is instructed to answer only from that chunk's content\n   - Returns a structured result: `{ chunk_id, answer, confidence, relevant_lines }`\n\n5. **Wait for all subagents** — collect results as they complete. Track which chunks returned answers vs. \"not found in this chunk\".\n\n6. **Aggregate with provenance** — compile results into a provenance-tagged list. Each entry shows:\n   - The answer or finding\n   - The chunk it came from (`chunk-0003`)\n   - The source lines within that chunk\n   - Confidence level (high \u002F medium \u002F low)\n\n7. **Optionally synthesize** — if `--synthesize` is set, pass all results to a synthesis subagent that merges them into a single coherent answer.\n\n8. **Report result** — print the aggregated findings with provenance, or the synthesized answer.\n\n### Aggregated Result Format\n\n```\nFanout Query: \"Where is the token refresh logic?\"\nChunks searched: 8  |  Matches found: 3  |  Model: haiku\n\nMatches:\n  [chunk-0002] lines 45-67 — HIGH confidence\n    Token refresh is handled in `AuthMiddleware.refreshToken()`.\n    The method checks expiry, calls `\u002Fauth\u002Frefresh`, and updates the\n    session cookie on success.\n\n  [chunk-0005] lines 112-118 — MEDIUM confidence\n    `refreshToken()` is called from the React hook `useSession`\n    when the access token has less than 60 seconds remaining.\n\n  [chunk-0007] lines 203-208 — LOW confidence\n    Environment variable REFRESH_INTERVAL_MS controls refresh\n    frequency. Default: 300000 (5 minutes).\n\nChunks with no match: chunk-0001, chunk-0003, chunk-0004, chunk-0006, chunk-0008\n```\n\n### Synthesized Result Format (--synthesize)\n\n```\nFanout Query: \"Where is the token refresh logic?\"\nSynthesis from 3 matching chunks:\n\nToken refresh is implemented in `AuthMiddleware.refreshToken()` (chunk-0002,\nlines 45-67). The React layer triggers refresh via the `useSession` hook when\nthe access token has less than 60 seconds remaining (chunk-0005, lines 112-118).\nRefresh interval is configurable via REFRESH_INTERVAL_MS (default: 5 minutes,\nchunk-0007, lines 203-208).\n```\n\n## Parameters\n\n- `\u003Cquery>` — Natural language question or task to answer using the chunks (required)\n- `--chunks \u003Cdir|manifest.json>` — Path to chunks directory or manifest file (default: `.aiwg\u002Frlm-chunks\u002F`)\n- `--max-parallel N` — Max simultaneously active subagents (default: `4`, bounded by context budget). Alias `--parallel` is accepted for one release cycle and emits a deprecation warning; remove it after the next stable release.\n- `--model haiku|sonnet|opus` — Model for subagents (default: `haiku` for cost efficiency)\n- `--synthesize` — After collecting results, synthesize into a single answer\n\n## Examples\n\n### Example 1: Basic fanout search\n\n**User**: \"fanout search across the auth chunks: where is token expiry checked?\"\n\n**Action**: Dispatch query to each chunk in `.aiwg\u002Frlm-chunks\u002Fauth\u002F`, 4 parallel subagents using haiku.\n\n**Response**:\n```\nFanout Query: \"where is token expiry checked?\"\nChunks searched: 6  |  Matches found: 2  |  Model: haiku\n\nMatches:\n  [chunk-0002] lines 88-95 — HIGH confidence\n    Token expiry is checked in `validateToken()` by comparing\n    `token.exp` against `Date.now() \u002F 1000`.\n\n  [chunk-0004] lines 31-38 — MEDIUM confidence\n    JWT middleware also checks expiry via the `express-jwt`\n    `credentialsRequired` option, which rejects expired tokens\n    before reaching route handlers.\n\nChunks with no match: chunk-0001, chunk-0003, chunk-0005, chunk-0006\n```\n\n---\n\n### Example 2: Synthesized answer\n\n**User**: \"search all chunks for how errors are logged, and give me one answer\"\n\n**Action**:\n```bash\naiwg fanout \"how are errors logged?\" --chunks .aiwg\u002Frlm-chunks\u002Fapi\u002F --synthesize\n```\n\n**Response**:\n```\nSynthesis from 4 matching chunks:\n\nErrors are logged through three mechanisms: (1) the `logger.error()` wrapper\nin `src\u002Futils\u002Flogger.ts` formats structured JSON logs with request ID and stack\ntrace (chunk-0001, lines 12-28); (2) unhandled exceptions are caught by the\nExpress error handler in `src\u002Fmiddleware\u002Ferror.ts` and forwarded to the logger\n(chunk-0003, lines 55-71); (3) async errors in service classes use the\n`@LogError` decorator (chunk-0006, lines 9-18).\n```\n\n---\n\n### Example 3: Budget-constrained fanout\n\n**User**: \"parallel search the chunks but only 2 at a time — system is under load\"\n\n**Action**:\n```bash\naiwg fanout \"find all database connection setup\" --chunks .aiwg\u002Frlm-chunks\u002Fservices\u002F --max-parallel 2\n```\n\n**Response**: Runs subagents in batches of 2. Reports matches with provenance after all 9 chunks are processed.\n\n---\n\n### Example 4: Expensive query on a large chunk set\n\n**User**: \"fanout across all the migration chunks using sonnet — I need precise SQL analysis\"\n\n**Action**:\n```bash\naiwg fanout \"find any ALTER TABLE statements that drop columns\" \\\n  --chunks .aiwg\u002Frlm-chunks\u002Fmigrations\u002F \\\n  --model sonnet \\\n  --synthesize\n```\n\n**Response**: Dispatches sonnet subagents, synthesizes findings with exact line references.\n\n## Clarification Prompts\n\nIf the user's intent is ambiguous:\n\n- \"Which chunks directory should I search? (found: `.aiwg\u002Frlm-chunks\u002F`)\"\n- \"Should I synthesize the results into one answer, or list all matches with provenance?\"\n- \"How many parallel subagents? Default is 4 (use `--max-parallel N` to override).\"\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fchunk\u002FSKILL.md — Produce the chunk manifest fanout reads\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Frlm-search\u002FSKILL.md — Full pipeline (prep + fanout + synthesize)\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fcontext-budget.md — Parallel budget constraints\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fsubagent-scoping.md — Subagent isolation rules\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fschemas\u002Frlm-chunk-manifest.yaml — Manifest schema\n","# Fanout\n\nDispatch the same query to multiple subagents in parallel, each processing one chunk from a chunk manifest. Aggregates results with source provenance — every answer is tagged with which chunk it came from.\n\n## Triggers\n\nAlternate expressions and non-obvious activations:\n\n- \"search all chunks\" → fanout query across manifest\n- \"run in parallel across the chunks\" → fanout with current manifest\n- \"ask each piece this question\" → fanout with default parallelism\n- \"parallel grep\" → fanout with a pattern as the query\n\n## Trigger Patterns Reference\n\n| Pattern | Example | Action |\n|---------|---------|--------|\n| Fanout search | \"search all chunks for authentication bugs\" | Fanout query across manifest |\n| Explicit chunks dir | \"fanout across .aiwg\u002Frlm-chunks\u002Fauth\u002F\" | `--chunks .aiwg\u002Frlm-chunks\u002Fauth\u002F` |\n| Limit parallelism | \"search chunks, max 2 at a time\" | `--max-parallel 2` |\n| Synthesis request | \"search all chunks and give me one answer\" | `--synthesize` |\n| Model selection | \"use haiku to search the chunks\" | `--model haiku` |\n| Manifest path | \"fanout using manifest.json\" | `--chunks manifest.json` |\n\n## Behavior\n\nWhen triggered:\n\n1. **Parse arguments** — extract query, chunks path (directory or manifest), parallelism limit, model, and synthesis flag.\n\n2. **Load manifest** — read `manifest.json` from the chunks directory, or use the provided manifest path directly. Validate that chunk files exist.\n\n3. **Respect context budget** — if `AIWG_CONTEXT_WINDOW` is set, cap `--max-parallel` at the budget-appropriate limit per the context-budget rule. Default cap is 4 parallel subagents.\n\n4. **Dispatch subagents** — launch up to `--max-parallel` subagents simultaneously. Each subagent:\n   - Receives the query and exactly one chunk's content\n   - Is instructed to answer only from that chunk's content\n   - Returns a structured result: `{ chunk_id, answer, confidence, relevant_lines }`\n\n5. **Wait for all subagents** — collect results as they complete. Track which chunks returned answers vs. \"not found in this chunk\".\n\n6. **Aggregate with provenance** — compile results into a provenance-tagged list. Each entry shows:\n   - The answer or finding\n   - The chunk it came from (`chunk-0003`)\n   - The source lines within that chunk\n   - Confidence level (high \u002F medium \u002F low)\n\n7. **Optionally synthesize** — if `--synthesize` is set, pass all results to a synthesis subagent that merges them into a single coherent answer.\n\n8. **Report result** — print the aggregated findings with provenance, or the synthesized answer.\n\n### Aggregated Result Format\n\n```\nFanout Query: \"Where is the token refresh logic?\"\nChunks searched: 8  |  Matches found: 3  |  Model: haiku\n\nMatches:\n  [chunk-0002] lines 45-67 — HIGH confidence\n    Token refresh is handled in `AuthMiddleware.refreshToken()`.\n    The method checks expiry, calls `\u002Fauth\u002Frefresh`, and updates the\n    session cookie on success.\n\n  [chunk-0005] lines 112-118 — MEDIUM confidence\n    `refreshToken()` is called from the React hook `useSession`\n    when the access token has less than 60 seconds remaining.\n\n  [chunk-0007] lines 203-208 — LOW confidence\n    Environment variable REFRESH_INTERVAL_MS controls refresh\n    frequency. Default: 300000 (5 minutes).\n\nChunks with no match: chunk-0001, chunk-0003, chunk-0004, chunk-0006, chunk-0008\n```\n\n### Synthesized Result Format (--synthesize)\n\n```\nFanout Query: \"Where is the token refresh logic?\"\nSynthesis from 3 matching chunks:\n\nToken refresh is implemented in `AuthMiddleware.refreshToken()` (chunk-0002,\nlines 45-67). The React layer triggers refresh via the `useSession` hook when\nthe access token has less than 60 seconds remaining (chunk-0005, lines 112-118).\nRefresh interval is configurable via REFRESH_INTERVAL_MS (default: 5 minutes,\nchunk-0007, lines 203-208).\n```\n\n## Parameters\n\n- `\u003Cquery>` — Natural language question or task to answer using the chunks (required)\n- `--chunks \u003Cdir|manifest.json>` — Path to chunks directory or manifest file (default: `.aiwg\u002Frlm-chunks\u002F`)\n- `--max-parallel N` — Max simultaneously active subagents (default: `4`, bounded by context budget). Alias `--parallel` is accepted for one release cycle and emits a deprecation warning; remove it after the next stable release.\n- `--model haiku|sonnet|opus` — Model for subagents (default: `haiku` for cost efficiency)\n- `--synthesize` — After collecting results, synthesize into a single answer\n\n## Examples\n\n### Example 1: Basic fanout search\n\n**User**: \"fanout search across the auth chunks: where is token expiry checked?\"\n\n**Action**: Dispatch query to each chunk in `.aiwg\u002Frlm-chunks\u002Fauth\u002F`, 4 parallel subagents using haiku.\n\n**Response**:\n```\nFanout Query: \"where is token expiry checked?\"\nChunks searched: 6  |  Matches found: 2  |  Model: haiku\n\nMatches:\n  [chunk-0002] lines 88-95 — HIGH confidence\n    Token expiry is checked in `validateToken()` by comparing\n    `token.exp` against `Date.now() \u002F 1000`.\n\n  [chunk-0004] lines 31-38 — MEDIUM confidence\n    JWT middleware also checks expiry via the `express-jwt`\n    `credentialsRequired` option, which rejects expired tokens\n    before reaching route handlers.\n\nChunks with no match: chunk-0001, chunk-0003, chunk-0005, chunk-0006\n```\n\n---\n\n### Example 2: Synthesized answer\n\n**User**: \"search all chunks for how errors are logged, and give me one answer\"\n\n**Action**:\n```bash\naiwg fanout \"how are errors logged?\" --chunks .aiwg\u002Frlm-chunks\u002Fapi\u002F --synthesize\n```\n\n**Response**:\n```\nSynthesis from 4 matching chunks:\n\nErrors are logged through three mechanisms: (1) the `logger.error()` wrapper\nin `src\u002Futils\u002Flogger.ts` formats structured JSON logs with request ID and stack\ntrace (chunk-0001, lines 12-28); (2) unhandled exceptions are caught by the\nExpress error handler in `src\u002Fmiddleware\u002Ferror.ts` and forwarded to the logger\n(chunk-0003, lines 55-71); (3) async errors in service classes use the\n`@LogError` decorator (chunk-0006, lines 9-18).\n```\n\n---\n\n### Example 3: Budget-constrained fanout\n\n**User**: \"parallel search the chunks but only 2 at a time — system is under load\"\n\n**Action**:\n```bash\naiwg fanout \"find all database connection setup\" --chunks .aiwg\u002Frlm-chunks\u002Fservices\u002F --max-parallel 2\n```\n\n**Response**: Runs subagents in batches of 2. Reports matches with provenance after all 9 chunks are processed.\n\n---\n\n### Example 4: Expensive query on a large chunk set\n\n**User**: \"fanout across all the migration chunks using sonnet — I need precise SQL analysis\"\n\n**Action**:\n```bash\naiwg fanout \"find any ALTER TABLE statements that drop columns\" \\\n  --chunks .aiwg\u002Frlm-chunks\u002Fmigrations\u002F \\\n  --model sonnet \\\n  --synthesize\n```\n\n**Response**: Dispatches sonnet subagents, synthesizes findings with exact line references.\n\n## Clarification Prompts\n\nIf the user's intent is ambiguous:\n\n- \"Which chunks directory should I search? (found: `.aiwg\u002Frlm-chunks\u002F`)\"\n- \"Should I synthesize the results into one answer, or list all matches with provenance?\"\n- \"How many parallel subagents? Default is 4 (use `--max-parallel N` to override).\"\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fchunk\u002FSKILL.md — Produce the chunk manifest fanout reads\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Frlm-search\u002FSKILL.md — Full pipeline (prep + fanout + synthesize)\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fcontext-budget.md — Parallel budget constraints\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fsubagent-scoping.md — Subagent isolation rules\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002Fschemas\u002Frlm-chunk-manifest.yaml — Manifest schema\n",{"name":5,"version":40,"namespace":41,"platforms":42,"description":7},"1.1.0","aiwg",[43],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Frlm\u002Fskills\u002Ffanout",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":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add jmagly\u002Faiwg --skill fanout",{"tool":60,"command":61},"bunx","bunx skills add jmagly\u002Faiwg --skill fanout",{"tool":63,"command":64},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill fanout","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Frlm\u002Fskills\u002Ffanout\u002FSKILL.md",true,[],[69,97,121,127,134,148],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":76,"publishedAt":35},"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",[75],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":107,"publishedAt":35},"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",[103,106],{"categoryNo":104,"categoryName":105,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[108,109,110,80,111,85,112,113,87,114,77,115,89,116,117,92,93,118,119,120],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":122,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":126,"publishedAt":35},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[125],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[79,77,78,88,80,96,83,82,91,84,85,86,87,95,89,90,81,92,93,94],{"skillNo":128,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":133,"publishedAt":35},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[131,132],{"categoryNo":104,"categoryName":105,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[109,108,92,111,85,112,87,110,77,115,89,116,117,80,93,114,113,118,119,120],{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":141,"publishedAt":35},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[140],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[142,143,144,145,146,147],"fixture skill","fixture","rule","delivery","true","exercise",{"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":155,"publishedAt":35},"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",[154],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[156,157,116,158,143],"pi","pi local","duplicate"]