[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M70PNT2Z4HMZPRBTAF6073NN":3,"skill-same:01M70PNT2Z4HMZPRBTAF6073NN":103},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":69,"commitSha":70,"skillDirectory":71,"forksCount":72,"repositoryHtmlUrl":73,"repositoryHomepageUrl":74,"ownerHtmlUrl":75,"ownerBlogUrl":76,"ownerDescription":77,"updatedAt":78,"install":79,"resources":92},"01M70PNT2Z4HMZPRBTAF6073NN","exposure-analysis",null,"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.","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\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"analysis","exposure analysis","reconstruction","operator","write","read","credentials","port","collection","Bash","unknown","host","internet","only","local","scope","never","firewall","ports","ufw","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: exposure-analysis\nplatforms: [all]\ndescription: 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.\ntriggers:\n  - \"firewall analysis\"\n  - \"docker published ports\"\n  - \"what is reachable from the internet\"\n  - \"reconstruct host exposure\"\ntools: Read, Bash, Write\nrequires:\n  - operator-named host and authorized local or SSH read-only collection\n  - sanitized timestamped listener, Docker and firewall captures\nensures:\n  - effective exposure report with evidence hashes, limitations and pass\u002Ffail\u002Funknown summary\ninvariants:\n  - never changes host firewall rules, services, containers or credentials\n  - unknown or incomplete evidence never proves a port closed\n---\n\n# Exposure Analysis\n\n## Purpose\n\nRelate listener inventory from `sys-host-audit` \u002F Sys Host Profiler to host\nfirewall and Docker paths. Explain why a port is exposed, rather than trusting\n`ufw status`. Use `container-forensics` for compromise indicators. This skill\nproduces reports and recommendations only, locally or over explicitly authorized\nSSH. Do not install tools, elevate privileges, alter rules or probe unnamed hosts.\n\n## Triggers\n\n- \"firewall analysis\"\n- \"docker published ports\"\n- \"UFW says closed but Docker publishes it\"\n- \"CDN origin exposure\" \u002F \"stale firewall rules\"\n\n## Behavior\n\n1. Confirm host, interface\u002Faddress inventory, capture time in UTC, permitted\n   collection scope and artifact destination (`aiwg artifacts path --json --check-write`).\n   Load `evidence-integrity`, `non-destructive`, `ops-safety` and\n   `ops-information-governance` before collection. Keep this workflow read-only\n   even when a caller asks to fix findings.\n2. Reuse the existing host inventory when available. Within authorized scope,\n   collect bounded metadata using `ss -ltnup`, `ip -j address show`,\n   `iptables-save`, `ip6tables-save`, `ufw status numbered`,\n   `nft -j list ruleset` or `firewall-cmd --list-all-zones` as applicable.\n   Review runtime and persistent firewalld configuration separately. Record\n   permission failures as UNKNOWN; never interpret a failed command as no rules.\n   For SSH use the operator-named host with batch mode and a bounded connect\n   timeout; no fleet expansion or private configuration searches.\n3. Narrow Docker inspection to Name, NetworkMode, PortBindings,\n   NetworkSettings.Ports and Networks. NEVER capture full `docker inspect`,\n   process environments, datastore secrets, private keys or container Env.\n   Route collected bytes through the existing information-governance boundary\n   before terminal, artifact or report emission. Operator-held raw evidence is\n   hashed at acquisition; sanitized derivatives have separate hashes and custody\n   links. The helper only accepts already sanitized snapshots.\n4. Classify every listener by address family, protocol and bind scope:\n   loopback, private, named VPN address, all interfaces, public or unknown.\n   Record owning process\u002FPID from ss and correlate its unit\u002Fcontainer using\n   approved inventory metadata. Missing process\u002Funit ownership stays unknown.\n5. Trace new inbound traffic in actual rule order. Docker rootful bridge traffic\n   normally traverses PREROUTING DNAT → FORWARD → DOCKER-USER → DOCKER.\n   INPUT\u002FUFW denies do not protect this forwarding path. Include earlier raw,\n   mangle and native nft hooks, interface matches, conntrack and default policies.\n   Record each rule's listener\u002Fpublish match; flag missing bind addresses, empty\n   DOCKER-USER guards, unused allows, earlier covering terminal rules, public-IP\n   allow-all and CDN ranges permitting ports beyond the reviewed 80\u002F443 scope.\n   A stale rule is a review candidate: check socket activation, maintenance and\n   standby services before recommending removal.\n6. Review IPv4 and IPv6 independently, including IPv6 Docker publishing,\n   wildcard dual-stack sockets and differing defaults. Different family rules\n   are a review signal, not proof of equivalent reachability. Never infer IPv6\n   closure from an IPv4-only capture.\n7. External verification is optional and requires the operator to name the\n   vantage, source addresses, target and bounded port set. Compare the probe's\n   actual public egress\u002FNAT source to all source allowlists, including CDN\u002FVPN\n   and both address families. If the source matches an allow rule, explicitly\n   warn that a closed result proves nothing about ordinary internet sources.\n   A clean probe is still limited to that vantage\u002Fprotocol\u002Ftime. The helper\n   consumes supplied results; it never launches probes.\n8. Hash-check evidence before analysis and again before report finalization.\n   Include capture times, commands, collection failures, custody links and\n   rule paths. For \"reachable on date X\", use dated config history\u002Fbackups\n   with their own hashes and distinguish reconstructed historical configuration\n   from observed reachability; today's captures cannot establish past exposure.\n\n## Offline helper\n\nRun the bundled helper against an operator-supplied JSON snapshot:\n\n```bash\nnode \"$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002Fscripts\u002Fanalyze.mjs\" --snapshot sanitized-snapshot.json\n```\n\nRequired metadata: `host`, `capturedAt` (ISO UTC). Capture fields are strings:\n`ss`, `docker` (JSON array of narrowed inspect records), `iptables4`,\n`iptables6`, `ufw`. Supply `ingressInterface`, `vpnAddresses`, `cdnRanges`\n(operator-reviewed CIDRs), and `hashes` mapping capture names to acquisition\nSHA-256 values. Omitted hashes are explicitly unverified; a supplied mismatch\nstops analysis. Optional `external` entries contain `source`, `port`, `protocol`,\n`result`, capture time and vantage identity.\n\nThe helper supports ordered iptables\u002Fip6tables filter and DNAT paths with\nsimple source\u002Fdestination, protocol, port, interface and NEW-state selectors.\nUnsupported selectors\u002Fchains, extra hook tables, native nftables\u002Ffirewalld,\nrootless\u002Fuserland proxies and routed\u002Fhost networks require manual analysis;\nhelper verdicts remain UNKNOWN. A host-path verdict never establishes upstream\ninternet routing or cloud controls. Do not represent the helper as a complete\nLinux firewall evaluator. Cloud\u002FKubernetes controls are out of scope; attach\nseparately reviewed adapter findings to the existing network-audit report.\n\n## Examples\n\nInput: `-p 6379:6379`, UFW deny 6379, matching DNAT and forwarding accepts,\nempty DOCKER-USER. Output: **internet-reachable via Docker** on the captured\nhost path; `docker-ufw-bypass`, `missing-bind`, `empty-docker-user` findings.\nA DOCKER-USER DROP before the Docker accept instead reports the captured path\nblocked. An unused 5432 allow is stale; a CDN source allowing all ports is\n`over-broad-cdn`. See sanitized fixtures in `test\u002Ffixtures\u002Fhost-exposure\u002F`.\n\n## Output and recurring checks\n\nUse the existing `network-audit-report` template for the human report, storing\nit under the resolved `.aiwg\u002Fforensics\u002Freports\u002F` and evidence\u002Fcustody under\n`.aiwg\u002Fforensics\u002Fevidence\u002F`. The helper writes JSON only to stdout; caller owns\nsanitization and artifact routing. Include a compact operations-log record:\n`host, capturedAt, status, failed, unknown, report reference`.\nExit codes: 0 PASS, 2 FAIL, 3 UNKNOWN, 1 input\u002Fintegrity error. Alert on any\nnonzero result, not only FAIL. Post-deploy and monthly callers use existing\noperator scheduling; every run needs fresh captures. No timer or service is\ninstalled by this skill.\n\n## References\n\n- ..\u002F..\u002Frules\u002Fevidence-integrity.md\n- ..\u002F..\u002Frules\u002Fnon-destructive.md\n- ..\u002F..\u002F..\u002Fops-complete\u002Frules\u002Fops-safety.md\n- ..\u002Fcontainer-forensics\u002FSKILL.md\n- ..\u002F..\u002F..\u002F..\u002Fextensions\u002Fnet\u002Ftemplates\u002Fnetwork-audit-report.md\n- ..\u002F..\u002F..\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md\n","# Exposure Analysis\n\n## Purpose\n\nRelate listener inventory from `sys-host-audit` \u002F Sys Host Profiler to host\nfirewall and Docker paths. Explain why a port is exposed, rather than trusting\n`ufw status`. Use `container-forensics` for compromise indicators. This skill\nproduces reports and recommendations only, locally or over explicitly authorized\nSSH. Do not install tools, elevate privileges, alter rules or probe unnamed hosts.\n\n## Triggers\n\n- \"firewall analysis\"\n- \"docker published ports\"\n- \"UFW says closed but Docker publishes it\"\n- \"CDN origin exposure\" \u002F \"stale firewall rules\"\n\n## Behavior\n\n1. Confirm host, interface\u002Faddress inventory, capture time in UTC, permitted\n   collection scope and artifact destination (`aiwg artifacts path --json --check-write`).\n   Load `evidence-integrity`, `non-destructive`, `ops-safety` and\n   `ops-information-governance` before collection. Keep this workflow read-only\n   even when a caller asks to fix findings.\n2. Reuse the existing host inventory when available. Within authorized scope,\n   collect bounded metadata using `ss -ltnup`, `ip -j address show`,\n   `iptables-save`, `ip6tables-save`, `ufw status numbered`,\n   `nft -j list ruleset` or `firewall-cmd --list-all-zones` as applicable.\n   Review runtime and persistent firewalld configuration separately. Record\n   permission failures as UNKNOWN; never interpret a failed command as no rules.\n   For SSH use the operator-named host with batch mode and a bounded connect\n   timeout; no fleet expansion or private configuration searches.\n3. Narrow Docker inspection to Name, NetworkMode, PortBindings,\n   NetworkSettings.Ports and Networks. NEVER capture full `docker inspect`,\n   process environments, datastore secrets, private keys or container Env.\n   Route collected bytes through the existing information-governance boundary\n   before terminal, artifact or report emission. Operator-held raw evidence is\n   hashed at acquisition; sanitized derivatives have separate hashes and custody\n   links. The helper only accepts already sanitized snapshots.\n4. Classify every listener by address family, protocol and bind scope:\n   loopback, private, named VPN address, all interfaces, public or unknown.\n   Record owning process\u002FPID from ss and correlate its unit\u002Fcontainer using\n   approved inventory metadata. Missing process\u002Funit ownership stays unknown.\n5. Trace new inbound traffic in actual rule order. Docker rootful bridge traffic\n   normally traverses PREROUTING DNAT → FORWARD → DOCKER-USER → DOCKER.\n   INPUT\u002FUFW denies do not protect this forwarding path. Include earlier raw,\n   mangle and native nft hooks, interface matches, conntrack and default policies.\n   Record each rule's listener\u002Fpublish match; flag missing bind addresses, empty\n   DOCKER-USER guards, unused allows, earlier covering terminal rules, public-IP\n   allow-all and CDN ranges permitting ports beyond the reviewed 80\u002F443 scope.\n   A stale rule is a review candidate: check socket activation, maintenance and\n   standby services before recommending removal.\n6. Review IPv4 and IPv6 independently, including IPv6 Docker publishing,\n   wildcard dual-stack sockets and differing defaults. Different family rules\n   are a review signal, not proof of equivalent reachability. Never infer IPv6\n   closure from an IPv4-only capture.\n7. External verification is optional and requires the operator to name the\n   vantage, source addresses, target and bounded port set. Compare the probe's\n   actual public egress\u002FNAT source to all source allowlists, including CDN\u002FVPN\n   and both address families. If the source matches an allow rule, explicitly\n   warn that a closed result proves nothing about ordinary internet sources.\n   A clean probe is still limited to that vantage\u002Fprotocol\u002Ftime. The helper\n   consumes supplied results; it never launches probes.\n8. Hash-check evidence before analysis and again before report finalization.\n   Include capture times, commands, collection failures, custody links and\n   rule paths. For \"reachable on date X\", use dated config history\u002Fbackups\n   with their own hashes and distinguish reconstructed historical configuration\n   from observed reachability; today's captures cannot establish past exposure.\n\n## Offline helper\n\nRun the bundled helper against an operator-supplied JSON snapshot:\n\n```bash\nnode \"$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002Fscripts\u002Fanalyze.mjs\" --snapshot sanitized-snapshot.json\n```\n\nRequired metadata: `host`, `capturedAt` (ISO UTC). Capture fields are strings:\n`ss`, `docker` (JSON array of narrowed inspect records), `iptables4`,\n`iptables6`, `ufw`. Supply `ingressInterface`, `vpnAddresses`, `cdnRanges`\n(operator-reviewed CIDRs), and `hashes` mapping capture names to acquisition\nSHA-256 values. Omitted hashes are explicitly unverified; a supplied mismatch\nstops analysis. Optional `external` entries contain `source`, `port`, `protocol`,\n`result`, capture time and vantage identity.\n\nThe helper supports ordered iptables\u002Fip6tables filter and DNAT paths with\nsimple source\u002Fdestination, protocol, port, interface and NEW-state selectors.\nUnsupported selectors\u002Fchains, extra hook tables, native nftables\u002Ffirewalld,\nrootless\u002Fuserland proxies and routed\u002Fhost networks require manual analysis;\nhelper verdicts remain UNKNOWN. A host-path verdict never establishes upstream\ninternet routing or cloud controls. Do not represent the helper as a complete\nLinux firewall evaluator. Cloud\u002FKubernetes controls are out of scope; attach\nseparately reviewed adapter findings to the existing network-audit report.\n\n## Examples\n\nInput: `-p 6379:6379`, UFW deny 6379, matching DNAT and forwarding accepts,\nempty DOCKER-USER. Output: **internet-reachable via Docker** on the captured\nhost path; `docker-ufw-bypass`, `missing-bind`, `empty-docker-user` findings.\nA DOCKER-USER DROP before the Docker accept instead reports the captured path\nblocked. An unused 5432 allow is stale; a CDN source allowing all ports is\n`over-broad-cdn`. See sanitized fixtures in `test\u002Ffixtures\u002Fhost-exposure\u002F`.\n\n## Output and recurring checks\n\nUse the existing `network-audit-report` template for the human report, storing\nit under the resolved `.aiwg\u002Fforensics\u002Freports\u002F` and evidence\u002Fcustody under\n`.aiwg\u002Fforensics\u002Fevidence\u002F`. The helper writes JSON only to stdout; caller owns\nsanitization and artifact routing. Include a compact operations-log record:\n`host, capturedAt, status, failed, unknown, report reference`.\nExit codes: 0 PASS, 2 FAIL, 3 UNKNOWN, 1 input\u002Fintegrity error. Alert on any\nnonzero result, not only FAIL. Post-deploy and monthly callers use existing\noperator scheduling; every run needs fresh captures. No timer or service is\ninstalled by this skill.\n\n## References\n\n- ..\u002F..\u002Frules\u002Fevidence-integrity.md\n- ..\u002F..\u002Frules\u002Fnon-destructive.md\n- ..\u002F..\u002F..\u002Fops-complete\u002Frules\u002Fops-safety.md\n- ..\u002Fcontainer-forensics\u002FSKILL.md\n- ..\u002F..\u002F..\u002F..\u002Fextensions\u002Fnet\u002Ftemplates\u002Fnetwork-audit-report.md\n- ..\u002F..\u002F..\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md\n",{"name":5,"tools":52,"ensures":53,"requires":55,"triggers":58,"namespace":63,"platforms":64,"invariants":66,"description":7},"Read, Bash, Write",[54],"effective exposure report with evidence hashes, limitations and pass\u002Ffail\u002Funknown summary",[56,57],"operator-named host and authorized local or SSH read-only collection","sanitized timestamped listener, Docker and firewall captures",[59,60,61,62],"firewall analysis","docker published ports","what is reachable from the internet","reconstruct host exposure","aiwg",[65],"all",[67,68],"never changes host firewall rules, services, containers or credentials","unknown or incomplete evidence never proves a port closed","main","ac56f6a215342ed836e51f1945653968b95edd64","agentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis",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-12 21:57:33",{"source":8,"skillName":5,"commands":80,"prompt":90,"zipAvailable":91},[81,84,87],{"tool":82,"command":83},"npx","npx skills add jmagly\u002Faiwg --skill exposure-analysis",{"tool":85,"command":86},"bunx","bunx skills add jmagly\u002Faiwg --skill exposure-analysis",{"tool":88,"command":89},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill exposure-analysis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",true,[93,99],{"path":94,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":97,"sourceHtmlUrl":98},"scripts\u002Fanalyze.mjs","SCRIPT","脚本",10560,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002Fscripts\u002Fanalyze.mjs",{"path":100,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":101,"sourceHtmlUrl":102},"scripts\u002Ffirewall.mjs",5497,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fforensics\u002Fskills\u002Fexposure-analysis\u002Fscripts\u002Ffirewall.mjs",[104,125,131,138,152,163],{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":47},"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",[110],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[38,112,113,114,115,44,43,116,117,40,118,36,119,34,120,121,122,123,124,32],"hardening","host hardening","secrets","bind","re","retention","access","verification","plan","audit","recommendations","remediation","request",{"skillNo":126,"name":106,"nameZh":6,"description":107,"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":130,"publishedAt":47},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[129],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[38,113,112,121,118,114,32,124,123,122,120,40,36,119,34,117,115,44,43,116],{"skillNo":132,"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":133,"categories":134,"keywords":137,"publishedAt":47},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[135,136],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[27,28,40,46,45,44,43,42,41,39,38,37,36,35,34,33,32,31,30,29],{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":145,"publishedAt":47},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[144],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[146,147,148,149,150,151],"fixture","fixture skill","exercise","true","delivery","rule",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":159,"publishedAt":47},"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",[158],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[41,160,161,146,162],"pi","pi local","duplicate",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":170,"publishedAt":47},"01M6CB48DP2T1Z0PCDV85X1CYR","example","Shared Agent Skills duplicate-precedence fixture.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fproviders\u002Fpi\u002Fproject\u002F.agents\u002Fskills\u002Fexample\u002FSKILL.md",[169],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[165,171,146,162],"shared"]