[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C38SF0XQWKYQF02TZ3DFKB":3,"skill-same:01M6C38SF0XQWKYQF02TZ3DFKB":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":57,"ownerHtmlUrl":58,"ownerBlogUrl":59,"ownerDescription":60,"updatedAt":61,"install":62,"resources":75},"01M6C38SF0XQWKYQF02TZ3DFKB","prose-reader",null,"Read and parse an OpenProse program file, extracting its contract (requires, ensures, strategies, errors, invariants) and services into a structured representation","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\u002Fprose-integration\u002Fskills\u002Fprose-reader\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42],"reader","prose reader","prose","file","services","read","strategies","structured","contract","extracting","errors","invariants","parse","program","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: prose-reader\ndescription: Read and parse an OpenProse program file, extracting its contract (requires, ensures, strategies, errors, invariants) and services into a structured representation\nversion: 0.1.0\nplatforms: [all]\n\n---\n\n# Prose Reader Skill\n\nYou read and parse OpenProse program files (`.md` with contract semantics), extracting the full contract specification into a structured, human-readable summary.\n\n## Triggers\n\n- \"read prose program\" \u002F \"parse prose file\"\n- \"what does [file] require and ensure\"\n- \"show me the contract for [file]\"\n- \"extract prose contract from [path]\"\n- \"what are the inputs and outputs of [program]\"\n\n## Input\n\nA path to a `.md` file that is an OpenProse program (has `requires:` and\u002For `ensures:` sections).\n\n## Behavior\n\nGiven a path to an OpenProse program file:\n\n### Step 0: Detect OpenProse Installation\n\nBefore any operation, run `\u002Fprose-detect` to locate the OpenProse installation and resolve `PROSE_ROOT`. `\u002Fprose-detect` handles the full detection chain (env var, AIWG config, AIWG-local install, project plugin manifest, user home, global CLI).\n\nIf `\u002Fprose-detect` reports no installation found, do NOT auto-clone. Inform the user:\n\n```\nOpenProse not found. Run \u002Fprose-setup to install it, or set PROSE_ROOT to an existing installation.\n```\n\n### Step 1: Read the File\n\nRead the target file using the Read tool.\n\n### Step 2: Parse Frontmatter\n\nExtract YAML frontmatter fields:\n- `name` — program name\n- `kind` — `program`, `service`, `library`, or `test`\n- `services` — list of service component names (multi-service programs only)\n- `model` — preferred model if specified\n- Any other frontmatter fields\n\n### Step 3: Extract Contract Elements\n\nParse the markdown body for contract sections. Each section uses a specific keyword followed by a colon and a list:\n\n| Section | Keyword | Format | Meaning |\n|---------|---------|--------|---------|\n| Inputs | `requires:` | `- name: description` | What the program needs to run |\n| Outputs | `ensures:` | `- name: description` | What the program commits to produce (obligation) |\n| Conditional behavior | `strategies:` | `- when condition: action` | How to handle specific situations |\n| Failure channels | `errors:` | `- condition description` | When the program cannot proceed |\n| Invariants | `invariants:` | `- property description` | Properties that always hold |\n\n### Step 4: Identify Services\n\nIf `kind: program` and `services:` is present in frontmatter:\n- List each service name\n- Check if corresponding `.md` file exists in the same directory\n- Note any missing service files\n\n### Step 5: Output Structured Summary\n\nFormat the extracted information as:\n\n```markdown\n## Program: {name}\n\n**Kind**: {kind}\n**Services**: {services list or \"single-component\"}\n**Model**: {model or \"not specified\"}\n\n### Requires (Inputs)\n| Name | Description |\n|------|-------------|\n| {name} | {description} |\n\n### Ensures (Outputs — Obligations)\n| Name | Description |\n|------|-------------|\n| {name} | {description} |\n\n### Strategies\n- when {condition}: {action}\n\n### Errors\n- {error condition}\n\n### Invariants\n- {invariant property}\n\n### Services\n| Service | File | Exists |\n|---------|------|--------|\n| {name} | {name}.md | {yes\u002Fno} |\n```\n\n## Edge Cases\n\n- **No `requires:`**: Report as \"No declared inputs (implicit)\"\n- **No `ensures:`**: Flag as warning — all valid programs should have ensures\n- **Conditional ensures**: `ensures:` entries with `when` clauses — parse and display the condition\n- **Nested services**: If a service itself has `services:`, note the nesting\n- **Legacy `.prose` files**: Treat identically to `.md` files\n\n## Model\n\nThis skill runs on **Sonnet** — parsing and extraction don't require complex reasoning.\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — prose-integration addon overview\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Run prose-detect before reading any program file\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Finstruction-comprehension.md — Extract all contract fields; do not skip optional sections\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference for AIWG addon integration commands\n","# Prose Reader Skill\n\nYou read and parse OpenProse program files (`.md` with contract semantics), extracting the full contract specification into a structured, human-readable summary.\n\n## Triggers\n\n- \"read prose program\" \u002F \"parse prose file\"\n- \"what does [file] require and ensure\"\n- \"show me the contract for [file]\"\n- \"extract prose contract from [path]\"\n- \"what are the inputs and outputs of [program]\"\n\n## Input\n\nA path to a `.md` file that is an OpenProse program (has `requires:` and\u002For `ensures:` sections).\n\n## Behavior\n\nGiven a path to an OpenProse program file:\n\n### Step 0: Detect OpenProse Installation\n\nBefore any operation, run `\u002Fprose-detect` to locate the OpenProse installation and resolve `PROSE_ROOT`. `\u002Fprose-detect` handles the full detection chain (env var, AIWG config, AIWG-local install, project plugin manifest, user home, global CLI).\n\nIf `\u002Fprose-detect` reports no installation found, do NOT auto-clone. Inform the user:\n\n```\nOpenProse not found. Run \u002Fprose-setup to install it, or set PROSE_ROOT to an existing installation.\n```\n\n### Step 1: Read the File\n\nRead the target file using the Read tool.\n\n### Step 2: Parse Frontmatter\n\nExtract YAML frontmatter fields:\n- `name` — program name\n- `kind` — `program`, `service`, `library`, or `test`\n- `services` — list of service component names (multi-service programs only)\n- `model` — preferred model if specified\n- Any other frontmatter fields\n\n### Step 3: Extract Contract Elements\n\nParse the markdown body for contract sections. Each section uses a specific keyword followed by a colon and a list:\n\n| Section | Keyword | Format | Meaning |\n|---------|---------|--------|---------|\n| Inputs | `requires:` | `- name: description` | What the program needs to run |\n| Outputs | `ensures:` | `- name: description` | What the program commits to produce (obligation) |\n| Conditional behavior | `strategies:` | `- when condition: action` | How to handle specific situations |\n| Failure channels | `errors:` | `- condition description` | When the program cannot proceed |\n| Invariants | `invariants:` | `- property description` | Properties that always hold |\n\n### Step 4: Identify Services\n\nIf `kind: program` and `services:` is present in frontmatter:\n- List each service name\n- Check if corresponding `.md` file exists in the same directory\n- Note any missing service files\n\n### Step 5: Output Structured Summary\n\nFormat the extracted information as:\n\n```markdown\n## Program: {name}\n\n**Kind**: {kind}\n**Services**: {services list or \"single-component\"}\n**Model**: {model or \"not specified\"}\n\n### Requires (Inputs)\n| Name | Description |\n|------|-------------|\n| {name} | {description} |\n\n### Ensures (Outputs — Obligations)\n| Name | Description |\n|------|-------------|\n| {name} | {description} |\n\n### Strategies\n- when {condition}: {action}\n\n### Errors\n- {error condition}\n\n### Invariants\n- {invariant property}\n\n### Services\n| Service | File | Exists |\n|---------|------|--------|\n| {name} | {name}.md | {yes\u002Fno} |\n```\n\n## Edge Cases\n\n- **No `requires:`**: Report as \"No declared inputs (implicit)\"\n- **No `ensures:`**: Flag as warning — all valid programs should have ensures\n- **Conditional ensures**: `ensures:` entries with `when` clauses — parse and display the condition\n- **Nested services**: If a service itself has `services:`, note the nesting\n- **Legacy `.prose` files**: Treat identically to `.md` files\n\n## Model\n\nThis skill runs on **Sonnet** — parsing and extraction don't require complex reasoning.\n\n## References\n\n- @$AIWG_ROOT\u002F${CLAUDE_PLUGIN_ROOT}\u002FREADME.md — prose-integration addon overview\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Fresearch-before-decision.md — Run prose-detect before reading any program file\n- @$AIWG_ROOT\u002Fagentic\u002Fcode\u002Faddons\u002Faiwg-utils\u002Frules\u002Finstruction-comprehension.md — Extract all contract fields; do not skip optional sections\n- @$AIWG_ROOT\u002Fdocs\u002Fcli-reference.md — CLI reference for AIWG addon integration commands\n",{"name":5,"version":48,"namespace":49,"platforms":50,"description":7},"0.1.0","aiwg",[51],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fprose-integration\u002Fskills\u002Fprose-reader",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 02:10:01",{"source":8,"skillName":5,"commands":63,"prompt":73,"zipAvailable":74},[64,67,70],{"tool":65,"command":66},"npx","npx skills add jmagly\u002Faiwg --skill prose-reader",{"tool":68,"command":69},"bunx","bunx skills add jmagly\u002Faiwg --skill prose-reader",{"tool":71,"command":72},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill prose-reader","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fprose-integration\u002Fskills\u002Fprose-reader\u002FSKILL.md",true,[],[77,104,128,134,141,155],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":84,"publishedAt":43},"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",[83],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[85,86,87,34,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],"host","host hardening","hardening","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"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":114,"publishedAt":43},"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",[110,113],{"categoryNo":111,"categoryName":112,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[115,116,117,34,118,92,119,120,94,121,85,122,96,123,124,99,100,125,126,127],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":129,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":133,"publishedAt":43},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[132],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[87,85,86,95,34,103,90,89,98,91,92,93,94,102,96,97,88,99,100,101],{"skillNo":135,"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":136,"categories":137,"keywords":140,"publishedAt":43},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[138,139],{"categoryNo":111,"categoryName":112,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[116,115,99,118,92,119,94,117,85,122,96,123,124,34,100,121,120,125,126,127],{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":43},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[147],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[149,150,151,152,153,154],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":156,"name":157,"nameZh":6,"description":158,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":159,"categories":160,"keywords":162,"publishedAt":43},"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",[161],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[163,164,123,165,150],"pi","pi local","duplicate"]