[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C2JSW9YGAJ4XWEACATT1HB":3,"skill-same:01M6C2JSW9YGAJ4XWEACATT1HB":69},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":52,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6C2JSW9YGAJ4XWEACATT1HB","setup-validate",null,"Validate a `setup.aiwg.io\u002Fv1` SetupManifest file against the schema and run cons","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\u002Fagentic-installer\u002Fskills\u002Fsetup-validate\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36],"validate","setup","setup validate","run","file","schema","io","v1","2026-11-10 10:12:30",false,"---\nnamespace: aiwg\nname: setup-validate\nplatforms: [all]\ndescription: \"Validate a `setup.aiwg.io\u002Fv1` SetupManifest file against the schema and run cons\"\n---\n\n# setup-validate\n\nValidate a `setup.aiwg.io\u002Fv1` SetupManifest file against the schema and run consistency checks.\n\nFor the public AIWG installer, retain `metadata.execution_mode:\nprovider-orchestrated`. Validate the manifest's interview → review → apply\nsequence; do not convert it to deterministic execution. Guided plan review\n(`aiwg setup --review`) is distinct from SetupManifest schema validation.\n\n## Trigger Phrases\n\n- \"validate setup manifest\"\n- \"check setup.manifest.yaml\"\n- \"aiwg setup-validate [manifest]\"\n- \"lint installer manifest\"\n- \"verify my setup manifest\"\n\n## Parameters\n\n### manifest (positional, optional)\nPath to the `setup.manifest.yaml`. Default: `.\u002Fsetup.manifest.yaml`.\n\n### --schema (optional)\nPath to schema file. Default: auto-located from AIWG installation.\n\n### --strict (optional)\nFail on warnings in addition to errors.\n\n### --fix (optional)\nReserved for future safe autofixes. The current CLI validates and reports only.\n\n## Validation Checks\n\n### Schema Validation\n- `apiVersion` must be `setup.aiwg.io\u002Fv1`\n- `kind` must be `SetupManifest`\n- Required fields present: `metadata.name`, `spec.platforms`, `spec.steps`\n- All step types are one of: `script`, `detect`, `ask`, `verify`, `agentic`, `platform-route`, `chain`, `os-config`\n- Param types are one of: `string`, `path`, `boolean`, `integer`, `choice`\n- `metadata.install_type` must be one of: `user`, `developer`, `ci` (if present)\n- `metadata.execution_mode` must be `deterministic` or `provider-orchestrated` (if present)\n\n### Reference Checks\n- Every `script:` path exists relative to the manifest directory\n- Every `chain:` manifest path exists\n- Every `platform-route` route value resolves to an existing script\n- `depends_on` step IDs all exist in the manifest\n- Recovery `triggers` list references valid step IDs\n- `os-config` steps: `config_id` must reference a valid entry in `spec.os_config`\n\n### Developer Manifest Checks (when `metadata.install_type: developer`)\n\nThese checks apply only to manifests with `install_type: developer`:\n\n#### Errors\n- `os-config` steps must reference a valid `config_id` in the `spec.os_config` block\n- `interactive_required: true` params must not have a `default` value — a default defeats the purpose of requiring interactive input\n- Each platform declared in `spec.platforms` must have at least one platform-specific step or `os_config` entry\n\n#### Warnings (unless `--strict`, then errors)\n- Developer manifest with no `os_config` block: warn unless `metadata.description` explicitly states why no OS configuration is needed\n- `os_config` entries with `requires_relogin: true` but no corresponding `os-config` step — the entry is declared but never applied\n- `os_config` entries with `interactive: true` but no user-facing explanation in `description`\n\n### Consistency Checks (warnings unless --strict)\n- Steps without `id` — suggest auto-generated IDs\n- Sequential steps that logically depend on prior steps but have no `depends_on`\n- Params declared but never referenced in scripts or `when` conditions\n- Prerequisites with no `install_hint` (hard to debug without one)\n- Verify expressions that look like they'd always pass (e.g., `true`)\n- `interactive_required: true` params that also have `required: true` — the `required` flag is redundant when `interactive_required` is set\n\n### Script Safety Checks\n- Scripts that exist: read first 5 lines to confirm they source lib scripts\n- Warn if a script template is used directly without customization (template placeholder text detected)\n\n### Agentic Step Audit\n- Warn on any `type: agentic` step in a deterministic manifest — print a reminder that agentic steps are exception handling only\n- Do not warn merely because a provider-orchestrated manifest uses agentic steps\n- Error if `type: agentic` step has no `instruction` field\n\n## Output Format\n\n```\nValidating: setup.dev.manifest.yaml\n\n  Schema:        ✓ Valid (setup.aiwg.io\u002Fv1 \u002F SetupManifest)\n  Install type:  developer\n  Metadata:      ✓ name=myapp-dev version=1.0.0\n  Platform:      ✓ linux (ubuntu, debian), macos\n  Params:        ✓ 4 params (INSTALL_DIR required, LOCAL_DOMAIN interactive_required, SSH_EMAIL interactive_required, IDE interactive_required)\n  Prerequisites: ✓ 2 checked (git >=2.30, docker)\n  OS Config:     ✓ 3 entries (docker-group [linux, requires_relogin], inotify-watches [linux], xcode-cli-tools [macos, interactive])\n\n  Steps (7):\n    ✓ clone             script      installer\u002Fscripts\u002Fclone.sh [exists]\n    ✓ setup-git-config  script      installer\u002Fscripts\u002Fdev\u002Fsetup-git-config.sh [exists]\n    ✓ setup-ssh-key     script      installer\u002Fscripts\u002Fdev\u002Fsetup-ssh-key.sh [exists]\n    ✓ apply-docker-group  os-config  config_id=docker-group [valid]\n    ✓ apply-inotify     os-config   config_id=inotify-watches [valid]\n    ✓ configure-dev     script      installer\u002Fscripts\u002Fdev\u002Fconfigure-dev.sh [exists]\n    ✓ verify-dev        script      installer\u002Fscripts\u002Fdev\u002Fverify-dev.sh [exists]\n\n  Recovery (1):\n    ✓ full-reset  script [exists]\n\n  Warnings (1):\n    ⚠ xcode-cli-tools os_config entry declared but no os-config step applies it\n\nResult: VALID (1 warning)\n```\n\n### Error Example\n\n```\n  Errors (2):\n    ✗ Step 'apply-docker-group': config_id 'docker-group' not found in os_config block\n    ✗ Param 'LOCAL_DOMAIN': interactive_required=true but has a default value — remove the default\n\nResult: INVALID — fix errors before running\n```\n\n## Auto-fix (--fix)\n\n`--fix` is reserved for future safe autofixes. The current agent-facing CLI\nvalidates and reports only; it does not mutate manifests.\n\n## References\n\n- Schema: `${CLAUDE_PLUGIN_ROOT}\u002Fschemas\u002Fv1\u002Fsetup-manifest.schema.json`\n- Run skill: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fsetup-run\u002FSKILL.md`\n- Generate skill: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fsetup-generate\u002FSKILL.md`\n","# setup-validate\n\nValidate a `setup.aiwg.io\u002Fv1` SetupManifest file against the schema and run consistency checks.\n\nFor the public AIWG installer, retain `metadata.execution_mode:\nprovider-orchestrated`. Validate the manifest's interview → review → apply\nsequence; do not convert it to deterministic execution. Guided plan review\n(`aiwg setup --review`) is distinct from SetupManifest schema validation.\n\n## Trigger Phrases\n\n- \"validate setup manifest\"\n- \"check setup.manifest.yaml\"\n- \"aiwg setup-validate [manifest]\"\n- \"lint installer manifest\"\n- \"verify my setup manifest\"\n\n## Parameters\n\n### manifest (positional, optional)\nPath to the `setup.manifest.yaml`. Default: `.\u002Fsetup.manifest.yaml`.\n\n### --schema (optional)\nPath to schema file. Default: auto-located from AIWG installation.\n\n### --strict (optional)\nFail on warnings in addition to errors.\n\n### --fix (optional)\nReserved for future safe autofixes. The current CLI validates and reports only.\n\n## Validation Checks\n\n### Schema Validation\n- `apiVersion` must be `setup.aiwg.io\u002Fv1`\n- `kind` must be `SetupManifest`\n- Required fields present: `metadata.name`, `spec.platforms`, `spec.steps`\n- All step types are one of: `script`, `detect`, `ask`, `verify`, `agentic`, `platform-route`, `chain`, `os-config`\n- Param types are one of: `string`, `path`, `boolean`, `integer`, `choice`\n- `metadata.install_type` must be one of: `user`, `developer`, `ci` (if present)\n- `metadata.execution_mode` must be `deterministic` or `provider-orchestrated` (if present)\n\n### Reference Checks\n- Every `script:` path exists relative to the manifest directory\n- Every `chain:` manifest path exists\n- Every `platform-route` route value resolves to an existing script\n- `depends_on` step IDs all exist in the manifest\n- Recovery `triggers` list references valid step IDs\n- `os-config` steps: `config_id` must reference a valid entry in `spec.os_config`\n\n### Developer Manifest Checks (when `metadata.install_type: developer`)\n\nThese checks apply only to manifests with `install_type: developer`:\n\n#### Errors\n- `os-config` steps must reference a valid `config_id` in the `spec.os_config` block\n- `interactive_required: true` params must not have a `default` value — a default defeats the purpose of requiring interactive input\n- Each platform declared in `spec.platforms` must have at least one platform-specific step or `os_config` entry\n\n#### Warnings (unless `--strict`, then errors)\n- Developer manifest with no `os_config` block: warn unless `metadata.description` explicitly states why no OS configuration is needed\n- `os_config` entries with `requires_relogin: true` but no corresponding `os-config` step — the entry is declared but never applied\n- `os_config` entries with `interactive: true` but no user-facing explanation in `description`\n\n### Consistency Checks (warnings unless --strict)\n- Steps without `id` — suggest auto-generated IDs\n- Sequential steps that logically depend on prior steps but have no `depends_on`\n- Params declared but never referenced in scripts or `when` conditions\n- Prerequisites with no `install_hint` (hard to debug without one)\n- Verify expressions that look like they'd always pass (e.g., `true`)\n- `interactive_required: true` params that also have `required: true` — the `required` flag is redundant when `interactive_required` is set\n\n### Script Safety Checks\n- Scripts that exist: read first 5 lines to confirm they source lib scripts\n- Warn if a script template is used directly without customization (template placeholder text detected)\n\n### Agentic Step Audit\n- Warn on any `type: agentic` step in a deterministic manifest — print a reminder that agentic steps are exception handling only\n- Do not warn merely because a provider-orchestrated manifest uses agentic steps\n- Error if `type: agentic` step has no `instruction` field\n\n## Output Format\n\n```\nValidating: setup.dev.manifest.yaml\n\n  Schema:        ✓ Valid (setup.aiwg.io\u002Fv1 \u002F SetupManifest)\n  Install type:  developer\n  Metadata:      ✓ name=myapp-dev version=1.0.0\n  Platform:      ✓ linux (ubuntu, debian), macos\n  Params:        ✓ 4 params (INSTALL_DIR required, LOCAL_DOMAIN interactive_required, SSH_EMAIL interactive_required, IDE interactive_required)\n  Prerequisites: ✓ 2 checked (git >=2.30, docker)\n  OS Config:     ✓ 3 entries (docker-group [linux, requires_relogin], inotify-watches [linux], xcode-cli-tools [macos, interactive])\n\n  Steps (7):\n    ✓ clone             script      installer\u002Fscripts\u002Fclone.sh [exists]\n    ✓ setup-git-config  script      installer\u002Fscripts\u002Fdev\u002Fsetup-git-config.sh [exists]\n    ✓ setup-ssh-key     script      installer\u002Fscripts\u002Fdev\u002Fsetup-ssh-key.sh [exists]\n    ✓ apply-docker-group  os-config  config_id=docker-group [valid]\n    ✓ apply-inotify     os-config   config_id=inotify-watches [valid]\n    ✓ configure-dev     script      installer\u002Fscripts\u002Fdev\u002Fconfigure-dev.sh [exists]\n    ✓ verify-dev        script      installer\u002Fscripts\u002Fdev\u002Fverify-dev.sh [exists]\n\n  Recovery (1):\n    ✓ full-reset  script [exists]\n\n  Warnings (1):\n    ⚠ xcode-cli-tools os_config entry declared but no os-config step applies it\n\nResult: VALID (1 warning)\n```\n\n### Error Example\n\n```\n  Errors (2):\n    ✗ Step 'apply-docker-group': config_id 'docker-group' not found in os_config block\n    ✗ Param 'LOCAL_DOMAIN': interactive_required=true but has a default value — remove the default\n\nResult: INVALID — fix errors before running\n```\n\n## Auto-fix (--fix)\n\n`--fix` is reserved for future safe autofixes. The current agent-facing CLI\nvalidates and reports only; it does not mutate manifests.\n\n## References\n\n- Schema: `${CLAUDE_PLUGIN_ROOT}\u002Fschemas\u002Fv1\u002Fsetup-manifest.schema.json`\n- Run skill: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fsetup-run\u002FSKILL.md`\n- Generate skill: `${CLAUDE_PLUGIN_ROOT}\u002Fskills\u002Fsetup-generate\u002FSKILL.md`\n",{"name":5,"namespace":42,"platforms":43,"description":7},"aiwg",[44],"all","main","6754967c344ccb087a8de06972f55a41067b291b","agentic\u002Fcode\u002Fplugins\u002Fagentic-installer\u002Fskills\u002Fsetup-validate",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 00:33:10",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add jmagly\u002Faiwg --skill setup-validate",{"tool":61,"command":62},"bunx","bunx skills add jmagly\u002Faiwg --skill setup-validate",{"tool":64,"command":65},"pnpm","pnpm dlx skills add jmagly\u002Faiwg --skill setup-validate","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fplugins\u002Fagentic-installer\u002Fskills\u002Fsetup-validate\u002FSKILL.md",true,[],[70,98,122,128,135,149],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":77,"publishedAt":37},"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",[76],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],"host","host hardening","hardening","read","re","recommendations","remediation","plan","port","verification","Bash","access","only","retention","audit","never","firewall","bind","secrets","request",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":108,"publishedAt":37},"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",[104,107],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[109,110,111,81,112,86,113,114,88,115,78,116,90,117,118,93,94,119,120,121],"exposure analysis","analysis","unknown","credentials","collection","ufw","ports","internet","local","scope","reconstruction","operator","write",{"skillNo":123,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":127,"publishedAt":37},"01M70P8QATMPKA78E4FT5D2TNA","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fsecurity-engineering\u002Fskills\u002Fhost-hardening\u002FSKILL.md",[126],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[80,78,79,89,81,97,84,83,92,85,86,87,88,96,90,91,82,93,94,95],{"skillNo":129,"name":100,"nameZh":6,"description":101,"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":134,"publishedAt":37},"01M70NMPVJ5H0JH131P60FW4R8","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Fagentic\u002Fcode\u002Fframeworks\u002Fforensics-complete\u002Fskills\u002Fexposure-analysis\u002FSKILL.md",[132,133],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[110,109,93,112,86,113,88,111,78,116,90,117,118,81,94,115,114,119,120,121],{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":142,"publishedAt":37},"01M6CB4DDR0B4NNCFK7ZK7449H","fixture-skill","Exercise rule delivery.","https:\u002F\u002Fgithub.com\u002Fjmagly\u002Faiwg\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Frule-delivery\u002Fskills\u002Ffixture-skill\u002FSKILL.md",[141],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[143,144,145,146,147,148],"fixture skill","fixture","rule","delivery","true","exercise",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":156,"publishedAt":37},"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",[155],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[157,158,117,159,144],"pi","pi local","duplicate"]