[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2G71574Y61S1BDR4MA5XB":3,"skill-same:01M6C2G71574Y61S1BDR4MA5XB":152},{"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":31,"publishedAt":64,"linkOnly":65,"markdownContent":66,"markdownBody":67,"frontMatter":68,"refName":106,"commitSha":107,"skillDirectory":108,"forksCount":109,"repositoryHtmlUrl":110,"repositoryHomepageUrl":111,"ownerHtmlUrl":112,"ownerBlogUrl":113,"ownerDescription":114,"updatedAt":115,"install":116,"resources":129},"01M6C2G71574Y61S1BDR4MA5XB","security-report",null,"Guide a reporter through filing a private vulnerability report and route it to the project's configured private channel — never to a public issue tracker","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\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fsecurity-report\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63],"security","report","security report","artifact","never","only","poc","issue","fallback","tracker","write","active","project","records","form","reviews","for","guide","read","node","haiku","decision","template","Bash","secrets","vulnerability","endpoint","email","collect","create","config","memory","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: security-report\nplatforms: [all]\ndescription: Guide a reporter through filing a private vulnerability report and route it to the project's configured private channel — never to a public issue tracker\nrequires:\n  - security-config: project SECURITY.md OR .aiwg\u002Fsecurity\u002Fdisclosure-config.yaml declaring the active private channel\n  - report-content: vulnerability details from the reporter (interactive prompts)\nensures:\n  - private-routing: report is delivered to the configured private channel (private advisory, encrypted email, encrypted form)\n  - acknowledgment: reporter receives a receipt with case ID and ack-window commitment\n  - chain-of-custody: routing decision and timestamps recorded to .aiwg\u002Fsecurity-engineering\u002Freviews\u002Fdisclosures\u002F{case-id}.md\n  - never-public: the skill refuses to create a public issue under any circumstance\nerrors:\n  - no-security-policy: project has no SECURITY.md or disclosure-config.yaml — instruct user to bootstrap from template\n  - channel-unreachable: configured channel is unreachable (PGP key 404, email bounces, advisory endpoint down) — fall back to the secondary channel and warn\n  - public-channel-detected: user attempted to route to a public issue tracker — hard refuse\ninvariants:\n  - no PoC, secrets, or vulnerability details appear in any public artifact created by this skill\n  - all interactive prompts collect vulnerability details in-memory only; custody records are redacted and contain contact hashes rather than plaintext contact details\n  - the routing decision is logged with sufficient detail for an auditor to verify the report reached the configured destination\nscript:\n  entrypoint: scripts\u002Freport.mjs\n  runtime: node\n  cwd: project-root\n  argsHint: \"[--config \u003Cpath>] [--channel primary|fallback] [--interactive] [--json]\"\ncommandHint:\n  argumentHint: \"[--config \u003Cpath>] [--channel primary|fallback] [--interactive]\"\n  allowedTools: Read, Write, Bash, WebFetch\n  model: haiku\n  category: security\n  orchestration: false\n  modelRole: efficiency\n  modelTier: economy\n---\n\n# Security Report (Private Disclosure Intake)\n\n**You are the Private Disclosure Coordinator** — guide a vulnerability reporter through structured intake, route the report to the project's configured private channel, and preserve chain of custody.\n\n## Core Philosophy\n\n\"A public issue is a tipoff to attackers.\" Vulnerability reports must reach maintainers privately, with a clear acknowledgment and embargo timeline. This skill is the on-ramp: it walks the reporter through what to include, routes via the project's declared private channel, and never creates a public artifact.\n\n## Natural Language Triggers\n\n- \"report a security vulnerability\"\n- \"private security disclosure\"\n- \"I found a security issue\"\n- \"vulnerability report\"\n- \"responsible disclosure\"\n- \"file a security advisory\"\n\n## When NOT to Use This Skill\n\n- For public bug reports (use `aiwg-issue` or the project's normal issue intake)\n- For declaring an incident already in progress (use `forensics-complete` skills)\n- For requesting a CVE for an already-disclosed vuln (use the project's CNA process directly)\n\n## Execution Flow\n\n### Phase 1: Resolve disclosure policy\n\nLook for the project's declared private-disclosure policy in this order:\n\n1. `.aiwg\u002Fsecurity\u002Fdisclosure-config.yaml` (structured form)\n2. Root `SECURITY.md` (parse contact and channel information)\n3. `docs\u002FSECURITY.md` (some projects place it there)\n\nIf none exists, emit a guided message:\n\n```\nThis project does not declare a private-disclosure policy.\n\nTo bootstrap one, run:\n  cp \u003CAIWG_ROOT>\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Ftemplates\u002FSECURITY.md .\n  $EDITOR SECURITY.md  # fill in the {{placeholders}}\n\nThen re-run this skill. Do NOT proceed with a public report.\n```\n\nExit non-zero. Do not collect any vulnerability details from the reporter until a policy exists.\n\n### Phase 2: Confirm reporter intent\n\nPrint the project's disclosure summary (parsed from SECURITY.md):\n\n```\nReporting a vulnerability to {{project_name}}\n\nPrimary channel: {{primary_channel}}\nFallback:        {{fallback_channel}}\nAck window:      {{ack_window}}\nEmbargo default: {{embargo_days}} days\n\nConfirm you intend to file a PRIVATE vulnerability report (not a public issue)?\n```\n\nWait for explicit confirmation. If the user wants a public bug report, redirect to `aiwg-issue`.\n\n### Phase 3: Collect report content\n\nInteractive prompts (each is required unless marked optional):\n\n1. **Affected version(s)** — exact version string or commit SHA\n2. **Vulnerability class** — RCE, SQLi, XSS, info disclosure, DoS, supply-chain, crypto, auth bypass, other\n3. **Severity (reporter's assessment)** — critical \u002F high \u002F medium \u002F low (the maintainers will reassess)\n4. **Impact** — what an attacker can achieve\n5. **Reproduction steps** — minimal sequence to trigger\n6. **Proof of concept** (optional) — code\u002Fdata demonstrating the issue\n7. **Discovery context** — how it was found (manual review, fuzzer, audit tool, dependency analysis)\n8. **Reporter contact** — email + optional GPG key fingerprint for encrypted reply\n9. **Preferred timeline** (optional) — accepts default embargo unless specified\n10. **Credit preference** — credit by name \u002F by handle \u002F anonymous\n\nHold all content in memory. Do not write to disk in plaintext.\n\n### Phase 4: Route to private channel\n\nBased on the primary channel declared in SECURITY.md:\n\n#### Channel A: Private repository security advisory\n\n```bash\n# For Gitea (when API supports private advisories) OR GitHub Security Advisories:\n# The skill drafts the advisory in markdown and opens the project's advisory creation URL\n# with a pre-filled body. The reporter (or maintainer) completes submission in browser.\nxdg-open \"{{repo_url}}\u002Fsecurity\u002Fadvisories\u002Fnew\"\n```\n\nPrint the formatted advisory body to stdout so the reporter can paste it into the form. Never call the public-issues API.\n\n#### Channel B: Encrypted email\n\nFetch the configured PGP key, validate the fingerprint matches the declared value in SECURITY.md, encrypt the report with `gpg --encrypt --armor --recipient \u003Cfingerprint>`, and emit the armored ciphertext to stdout for the reporter to send.\n\n```bash\n# Pseudo-flow:\ngpg --recv-keys {{pgp_fingerprint}}\ngpg --fingerprint {{pgp_fingerprint}}  # verify matches declared value\necho \"${REPORT_BODY}\" | gpg --encrypt --armor --recipient {{pgp_fingerprint}}\n```\n\nIf the fingerprint does NOT match, abort and warn — possible MITM or stale key.\n\n#### Channel C: Encrypted web form\n\nPrint the form URL and a checklist of what to paste. Do NOT submit via HTTP from the skill (the form requires reporter agency).\n\n### Phase 5: Chain-of-custody record\n\nWrite a chain-of-custody record to `.aiwg\u002Fsecurity-engineering\u002Freviews\u002Fdisclosures\u002F{case-id}.md`:\n\n```markdown\n# Disclosure Case: {{case-id}}\n\n- **Received**: {{iso-timestamp}}\n- **Channel**: primary | fallback (and which one)\n- **Reporter**: {{name-or-handle}} (or \"anonymous\")\n- **Contact**: {{contact-hash}} (one-way hash of email for matching, not the plaintext)\n- **Vulnerability class**: {{class}}\n- **Reporter severity assessment**: {{severity}}\n- **Routing destination**: {{channel-target}}\n- **Acknowledgment commitment**: by {{ack-deadline}}\n- **Embargo default**: {{embargo-end-date}}\n\n## Routing evidence\n\n{{routing-log}}\n\n## Reporter notification\n\nSent: {{notification-timestamp}}\nMethod: {{notification-channel}}\n\n## Next steps\n\n- [ ] Maintainer acknowledges by {{ack-deadline}}\n- [ ] Triage assigns severity and assignee within 7 days\n- [ ] Fix targeted by {{fix-target-date}}\n- [ ] Disclosure scheduled for {{disclosure-date}}\n```\n\nThis file is git-ignored by default (it's added to `.gitignore` when the security-engineering framework is first deployed).\n\n### Phase 6: Acknowledge the reporter\n\nDisplay a final receipt:\n\n```\nReport received and routed to private channel.\n\nCase ID:           {{case-id}}\nRouted via:        {{primary_channel}}\nAcknowledgment:    expected by {{ack-deadline}}\nDefault embargo:   {{embargo-end-date}}\n\nNext: maintainers will acknowledge receipt and begin triage. You will hear back at\nthe contact you provided. Do NOT discuss this issue publicly until the embargo\nexpires or the maintainers indicate disclosure has occurred.\n\nThank you for the responsible disclosure.\n```\n\n## Composition with Closure-Loop\n\nThis skill handles intake only. The companion `security-disclosure-track` skill manages the full advisory lifecycle: triage → fix → CVE assignment → publication. Use the case ID emitted by this skill as the handoff key.\n\n## Composition with `aiwg doctor`\n\nWhen the security-engineering framework is installed, `aiwg doctor` checks for SECURITY.md presence. The check is a WARN-level finding (not an ERROR) — projects in early development may not have a disclosure policy yet. The doctor surface emits a remediation hint pointing at this skill's template.\n\n## Hard Refusals\n\nThe skill will hard-refuse in three cases:\n\n1. **Public channel target** — any attempt to route to `mcp__gitea__issue_write`, `gh issue create`, or any public-issue tool is rejected.\n2. **PGP fingerprint mismatch** — the declared SECURITY.md fingerprint doesn't match the resolved keyring entry. Possible MITM or stale key; manual verification required.\n3. **No private channel configured** — the project has not declared a private channel. The skill refuses to collect vulnerability content until a policy exists.\n\n## Implementation Notes\n\n- `aiwg run skill security-report -- --interactive` collects the intake fields, validates the private channel, writes a redacted custody record, and prints the private-routing instructions.\n- `aiwg doctor` emits a WARN-level finding when `security-engineering` is installed and no root or docs `SECURITY.md` exists.\n- `aiwg new` emits the security-engineering `SECURITY.md` template into new projects and adds the disclosure custody directory to `.gitignore`.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Ftemplates\u002FSECURITY.md — Template\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Fskills\u002Faiwg-issue\u002FSKILL.md — General issue intake (distinct purpose)\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fskills\u002Fflow-security-review-cycle\u002FSKILL.md — Review orchestration (post-disclosure)\n- `.aiwg\u002Fsecurity\u002Fcurl-checklist-gap-analysis.md` row 27 — Audit context\n- curl disclosure policy: https:\u002F\u002Fcurl.se\u002Fdocs\u002Fvuln-disclosure.html\n- GitHub Security Advisories: https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fsecurity-advisories\n- CVE Numbering Authorities: https:\u002F\u002Fwww.cve.org\u002FPartnerInformation\u002FListofPartners\n","# Security Report (Private Disclosure Intake)\n\n**You are the Private Disclosure Coordinator** — guide a vulnerability reporter through structured intake, route the report to the project's configured private channel, and preserve chain of custody.\n\n## Core Philosophy\n\n\"A public issue is a tipoff to attackers.\" Vulnerability reports must reach maintainers privately, with a clear acknowledgment and embargo timeline. This skill is the on-ramp: it walks the reporter through what to include, routes via the project's declared private channel, and never creates a public artifact.\n\n## Natural Language Triggers\n\n- \"report a security vulnerability\"\n- \"private security disclosure\"\n- \"I found a security issue\"\n- \"vulnerability report\"\n- \"responsible disclosure\"\n- \"file a security advisory\"\n\n## When NOT to Use This Skill\n\n- For public bug reports (use `aiwg-issue` or the project's normal issue intake)\n- For declaring an incident already in progress (use `forensics-complete` skills)\n- For requesting a CVE for an already-disclosed vuln (use the project's CNA process directly)\n\n## Execution Flow\n\n### Phase 1: Resolve disclosure policy\n\nLook for the project's declared private-disclosure policy in this order:\n\n1. `.aiwg\u002Fsecurity\u002Fdisclosure-config.yaml` (structured form)\n2. Root `SECURITY.md` (parse contact and channel information)\n3. `docs\u002FSECURITY.md` (some projects place it there)\n\nIf none exists, emit a guided message:\n\n```\nThis project does not declare a private-disclosure policy.\n\nTo bootstrap one, run:\n  cp \u003CAIWG_ROOT>\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Ftemplates\u002FSECURITY.md .\n  $EDITOR SECURITY.md  # fill in the {{placeholders}}\n\nThen re-run this skill. Do NOT proceed with a public report.\n```\n\nExit non-zero. Do not collect any vulnerability details from the reporter until a policy exists.\n\n### Phase 2: Confirm reporter intent\n\nPrint the project's disclosure summary (parsed from SECURITY.md):\n\n```\nReporting a vulnerability to {{project_name}}\n\nPrimary channel: {{primary_channel}}\nFallback:        {{fallback_channel}}\nAck window:      {{ack_window}}\nEmbargo default: {{embargo_days}} days\n\nConfirm you intend to file a PRIVATE vulnerability report (not a public issue)?\n```\n\nWait for explicit confirmation. If the user wants a public bug report, redirect to `aiwg-issue`.\n\n### Phase 3: Collect report content\n\nInteractive prompts (each is required unless marked optional):\n\n1. **Affected version(s)** — exact version string or commit SHA\n2. **Vulnerability class** — RCE, SQLi, XSS, info disclosure, DoS, supply-chain, crypto, auth bypass, other\n3. **Severity (reporter's assessment)** — critical \u002F high \u002F medium \u002F low (the maintainers will reassess)\n4. **Impact** — what an attacker can achieve\n5. **Reproduction steps** — minimal sequence to trigger\n6. **Proof of concept** (optional) — code\u002Fdata demonstrating the issue\n7. **Discovery context** — how it was found (manual review, fuzzer, audit tool, dependency analysis)\n8. **Reporter contact** — email + optional GPG key fingerprint for encrypted reply\n9. **Preferred timeline** (optional) — accepts default embargo unless specified\n10. **Credit preference** — credit by name \u002F by handle \u002F anonymous\n\nHold all content in memory. Do not write to disk in plaintext.\n\n### Phase 4: Route to private channel\n\nBased on the primary channel declared in SECURITY.md:\n\n#### Channel A: Private repository security advisory\n\n```bash\n# For Gitea (when API supports private advisories) OR GitHub Security Advisories:\n# The skill drafts the advisory in markdown and opens the project's advisory creation URL\n# with a pre-filled body. The reporter (or maintainer) completes submission in browser.\nxdg-open \"{{repo_url}}\u002Fsecurity\u002Fadvisories\u002Fnew\"\n```\n\nPrint the formatted advisory body to stdout so the reporter can paste it into the form. Never call the public-issues API.\n\n#### Channel B: Encrypted email\n\nFetch the configured PGP key, validate the fingerprint matches the declared value in SECURITY.md, encrypt the report with `gpg --encrypt --armor --recipient \u003Cfingerprint>`, and emit the armored ciphertext to stdout for the reporter to send.\n\n```bash\n# Pseudo-flow:\ngpg --recv-keys {{pgp_fingerprint}}\ngpg --fingerprint {{pgp_fingerprint}}  # verify matches declared value\necho \"${REPORT_BODY}\" | gpg --encrypt --armor --recipient {{pgp_fingerprint}}\n```\n\nIf the fingerprint does NOT match, abort and warn — possible MITM or stale key.\n\n#### Channel C: Encrypted web form\n\nPrint the form URL and a checklist of what to paste. Do NOT submit via HTTP from the skill (the form requires reporter agency).\n\n### Phase 5: Chain-of-custody record\n\nWrite a chain-of-custody record to `.aiwg\u002Fsecurity-engineering\u002Freviews\u002Fdisclosures\u002F{case-id}.md`:\n\n```markdown\n# Disclosure Case: {{case-id}}\n\n- **Received**: {{iso-timestamp}}\n- **Channel**: primary | fallback (and which one)\n- **Reporter**: {{name-or-handle}} (or \"anonymous\")\n- **Contact**: {{contact-hash}} (one-way hash of email for matching, not the plaintext)\n- **Vulnerability class**: {{class}}\n- **Reporter severity assessment**: {{severity}}\n- **Routing destination**: {{channel-target}}\n- **Acknowledgment commitment**: by {{ack-deadline}}\n- **Embargo default**: {{embargo-end-date}}\n\n## Routing evidence\n\n{{routing-log}}\n\n## Reporter notification\n\nSent: {{notification-timestamp}}\nMethod: {{notification-channel}}\n\n## Next steps\n\n- [ ] Maintainer acknowledges by {{ack-deadline}}\n- [ ] Triage assigns severity and assignee within 7 days\n- [ ] Fix targeted by {{fix-target-date}}\n- [ ] Disclosure scheduled for {{disclosure-date}}\n```\n\nThis file is git-ignored by default (it's added to `.gitignore` when the security-engineering framework is first deployed).\n\n### Phase 6: Acknowledge the reporter\n\nDisplay a final receipt:\n\n```\nReport received and routed to private channel.\n\nCase ID:           {{case-id}}\nRouted via:        {{primary_channel}}\nAcknowledgment:    expected by {{ack-deadline}}\nDefault embargo:   {{embargo-end-date}}\n\nNext: maintainers will acknowledge receipt and begin triage. You will hear back at\nthe contact you provided. Do NOT discuss this issue publicly until the embargo\nexpires or the maintainers indicate disclosure has occurred.\n\nThank you for the responsible disclosure.\n```\n\n## Composition with Closure-Loop\n\nThis skill handles intake only. The companion `security-disclosure-track` skill manages the full advisory lifecycle: triage → fix → CVE assignment → publication. Use the case ID emitted by this skill as the handoff key.\n\n## Composition with `aiwg doctor`\n\nWhen the security-engineering framework is installed, `aiwg doctor` checks for SECURITY.md presence. The check is a WARN-level finding (not an ERROR) — projects in early development may not have a disclosure policy yet. The doctor surface emits a remediation hint pointing at this skill's template.\n\n## Hard Refusals\n\nThe skill will hard-refuse in three cases:\n\n1. **Public channel target** — any attempt to route to `mcp__gitea__issue_write`, `gh issue create`, or any public-issue tool is rejected.\n2. **PGP fingerprint mismatch** — the declared SECURITY.md fingerprint doesn't match the resolved keyring entry. Possible MITM or stale key; manual verification required.\n3. **No private channel configured** — the project has not declared a private channel. The skill refuses to collect vulnerability content until a policy exists.\n\n## Implementation Notes\n\n- `aiwg run skill security-report -- --interactive` collects the intake fields, validates the private channel, writes a redacted custody record, and prints the private-routing instructions.\n- `aiwg doctor` emits a WARN-level finding when `security-engineering` is installed and no root or docs `SECURITY.md` exists.\n- `aiwg new` emits the security-engineering `SECURITY.md` template into new projects and adds the disclosure custody directory to `.gitignore`.\n\n## References\n\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Ftemplates\u002FSECURITY.md — Template\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Fskills\u002Faiwg-issue\u002FSKILL.md — General issue intake (distinct purpose)\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsdlc-complete\u002Fskills\u002Fflow-security-review-cycle\u002FSKILL.md — Review orchestration (post-disclosure)\n- `.aiwg\u002Fsecurity\u002Fcurl-checklist-gap-analysis.md` row 27 — Audit context\n- curl disclosure policy: https:\u002F\u002Fcurl.se\u002Fdocs\u002Fvuln-disclosure.html\n- GitHub Security Advisories: https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcode-security\u002Fsecurity-advisories\n- CVE Numbering Authorities: https:\u002F\u002Fwww.cve.org\u002FPartnerInformation\u002FListofPartners\n",{"name":5,"errors":69,"script":76,"ensures":80,"requires":89,"namespace":94,"platforms":95,"invariants":97,"commandHint":101,"description":7},[70,72,74],{"no-security-policy":71},"project has no SECURITY.md or disclosure-config.yaml — instruct user to bootstrap from template",{"channel-unreachable":73},"configured channel is unreachable (PGP key 404, email bounces, advisory endpoint down) — fall back to the secondary channel and warn",{"public-channel-detected":75},"user attempted to route to a public issue tracker — hard refuse",{"cwd":77,"runtime":51,"argsHint":78,"entrypoint":79},"project-root","[--config \u003Cpath>] [--channel primary|fallback] [--interactive] [--json]","scripts\u002Freport.mjs",[81,83,85,87],{"private-routing":82},"report is delivered to the configured private channel (private advisory, encrypted email, encrypted form)",{"acknowledgment":84},"reporter receives a receipt with case ID and ack-window commitment",{"chain-of-custody":86},"routing decision and timestamps recorded to .aiwg\u002Fsecurity-engineering\u002Freviews\u002Fdisclosures\u002F{case-id}.md",{"never-public":88},"the skill refuses to create a public issue under any circumstance",[90,92],{"security-config":91},"project SECURITY.md OR .aiwg\u002Fsecurity\u002Fdisclosure-config.yaml declaring the active private channel",{"report-content":93},"vulnerability details from the reporter (interactive prompts)","aiwg",[96],"all",[98,99,100],"no PoC, secrets, or vulnerability details appear in any public artifact created by this skill","all interactive prompts collect vulnerability details in-memory only; custody records are redacted and contain contact hashes rather than plaintext contact details","the routing decision is logged with sufficient detail for an auditor to verify the report reached the configured destination",{"model":52,"category":32,"modelRole":102,"modelTier":103,"allowedTools":104,"argumentHint":105,"orchestration":65},"efficiency","economy","Read, Write, Bash, WebFetch","[--config \u003Cpath>] [--channel primary|fallback] [--interactive]","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fsecurity-report",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-14 10:46:34",{"source":8,"skillName":5,"commands":117,"prompt":127,"zipAvailable":128},[118,121,124],{"tool":119,"command":120},"npx","npx skills add jmagly\u002Faiwg --skill security-report",{"tool":122,"command":123},"bunx","bunx skills add jmagly\u002Faiwg --skill security-report",{"tool":125,"command":126},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill security-report","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fsecurity-report\u002FSKILL.md",true,[130,136,141,146],{"path":131,"resourceType":132,"resourceTypeDesc":133,"sizeBytes":134,"sourceHtmlUrl":135},"assets\u002Fresearch-note.md","ASSET","资产文件",433,"https:\u002F\u002Fgithub.com\u002FOyadotAI\u002Foya-browser\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresearch\u002Fassets\u002Fresearch-note.md",{"path":137,"resourceType":137,"resourceTypeDesc":138,"sizeBytes":139,"sourceHtmlUrl":140},"LICENSE","许可证",1068,"https:\u002F\u002Fgithub.com\u002FOyadotAI\u002Foya-browser\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresearch\u002FLICENSE",{"path":79,"resourceType":142,"resourceTypeDesc":143,"sizeBytes":144,"sourceHtmlUrl":145},"SCRIPT","脚本",6968,"https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fsecurity-report\u002Fscripts\u002Freport.mjs",{"path":147,"resourceType":148,"resourceTypeDesc":149,"sizeBytes":150,"sourceHtmlUrl":151},"SOURCE.md","REFERENCE","参考文档",823,"https:\u002F\u002Fgithub.com\u002FOyadotAI\u002Foya-browser\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fresearch\u002FSOURCE.md",[153,176,199,205,212,226],{"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":64},"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",[159],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[161,162,163,50,164,165,166,167,168,169,55,170,37,171,172,36,173,174,56,175],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","access","retention","audit","firewall","bind","request",{"skillNo":177,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":180,"categories":181,"keywords":186,"publishedAt":64},"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",[182,185],{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[187,188,189,50,190,168,191,192,55,193,161,194,37,195,196,36,173,197,198,42],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator",{"skillNo":200,"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":201,"categories":202,"keywords":204,"publishedAt":64},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[203],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[163,161,162,170,50,175,166,165,172,167,168,169,55,56,37,171,164,36,173,174],{"skillNo":206,"name":178,"nameZh":6,"description":179,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":211,"publishedAt":64},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[209,210],{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[188,187,36,190,168,191,55,189,161,194,37,195,196,50,173,193,192,197,198,42],{"skillNo":213,"name":214,"nameZh":6,"description":215,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":216,"categories":217,"keywords":219,"publishedAt":64},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[218],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[220,221,222,223,224,225],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":227,"name":228,"nameZh":6,"description":229,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":230,"categories":231,"keywords":233,"publishedAt":64},"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",[232],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[234,235,195,236,221],"pi","pi local","duplicate"]