[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CY1ECZ1ZEDHD024AB06M1W":3,"skill-same:01M6CY1ECZ1ZEDHD024AB06M1W":118},{"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":18,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6CY1ECZ1ZEDHD024AB06M1W","setup",null,"Scaffold WordPress, Laravel, or Symfony with guarded local containers and route optional delivery to the cd skill.","RebelliousSmile\u002Fmy-claude-marketplace","RebelliousSmile","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F40766799?v=4","01M6CXW595637KNM9Z3TYT9F7R","François-Xavier Guillois","01M6CXW5DBBQTQ9JM1BKH9VQGK",1,"MIT","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26,27,28,29,30,31],"containers","wordpress","scaffold","audit","Bash","php","laravel","backend","files","route","delivery","local","cd","2026-11-10 10:12:30",false,"---\nname: setup\ndescription: >-\n  Scaffold WordPress, Laravel, or Symfony with guarded local containers and route optional delivery to the cd skill.\nauthor: François-Xavier Guillois\nversion: 0.12.0\nvibe_version: \">=1.0.0\"\npermissions:\n  - bash\n  - files\ntags:\n  - backend\n  - php\n  - audit\n---\n\nRead [host portability](..\u002F..\u002Freferences\u002Fhost-portability.md) before resolving plugin files, invoking sibling skills, or persisting project guidance.\n\n# sc-php Setup\n\nScaffold-from-zero counterpart to `sc-php:sniff` (which detects\u002Faudits an already-configured project). Covers exactly the three frameworks `sniff` detects: WordPress, Laravel, Symfony.\n\n## Available actions\n\n| # | Action | Role | Input |\n|---|--------|------|-------|\n| 01 | `detect-framework` | Resolve which framework to scaffold (explicit request, ask if ambiguous), abort if project already configured | project root, user request |\n| 02 | `scaffold-wordpress` | WordPress FSE theme + custom plugin + Docker\u002Fwp-env | resolved framework = wordpress |\n| 03 | `scaffold-laravel` | Laravel via composer create-project + Docker Compose | resolved framework = laravel |\n| 04 | `scaffold-symfony` | Symfony via composer create-project + Docker Compose | resolved framework = symfony |\n| 05 | `wire-deploy` | Compatibility route to `sc-php:cd server`; never a second producer | framework, target(s) info from user |\n| 06 | `verify` | Post-scaffold and native CD facade sanity checks | framework, project root |\n\n## Default flow\n\n`01` → (`02` | `03` | `04` depending on resolved framework) → `06`. `05` is optional, proposed after scaffold but never assumed — only run it if the user wants a deploy target wired now.\n\nTrigger-to-action mapping for `01`:\n- Framework named explicitly (\"scaffold a WordPress\", \"set up Laravel with Docker\") → skip the question, go straight to the matching scaffold action.\n- No framework named, or ambiguous → ask (WordPress \u002F Laravel \u002F Symfony), never guess.\n\n## References\n\n- `references\u002Fpitfalls.md` — Docker Compose project-naming trap (generic, all frameworks), WP-specific CSS cache-busting and wp-cli-via-Docker rules.\n- `references\u002Fcompose-project-name-guard.md` — `start.ps1`\u002F`stop.ps1`\u002F`wp.ps1` template shared by all three scaffolds.\n- `references\u002Fwp-env-json.md`, `references\u002Ftheme-plugin-skeleton.md` — WordPress scaffold content.\n- `references\u002Fdocker-compose-laravel.md`, `references\u002Fdocker-compose-symfony.md` — Docker Compose content for the other two frameworks.\n- `references\u002Fdeploy-pipeline.md` — legacy pipeline recognition and migration rules; new delivery belongs to `sc-php:cd`.\n\n## Transversal rules\n\n- Never scaffold onto an already-configured project — `01` aborts and redirects to `sniff`\u002F`audit` if `composer.json` or a sentinel file already exists.\n- Never invent deploy target credentials (host, user, path) — ask, or leave a commented example.\n- Never auto-run a database import against a remote target — that step stays manual and explicit, always.\n- Never let Docker Compose derive its project name implicitly — every scaffold wires the `COMPOSE_PROJECT_NAME` guard from `compose-project-name-guard.md`.\n- WordPress is the reference-quality flow (real production lineage); Laravel\u002FSymfony are thinner (official installer + standard compose) — say so rather than implying equal depth.\n- Report every file written, per action, same as `sniff`\u002F`overcode:service` do.\n","Read [host portability](..\u002F..\u002Freferences\u002Fhost-portability.md) before resolving plugin files, invoking sibling skills, or persisting project guidance.\n\n# sc-php Setup\n\nScaffold-from-zero counterpart to `sc-php:sniff` (which detects\u002Faudits an already-configured project). Covers exactly the three frameworks `sniff` detects: WordPress, Laravel, Symfony.\n\n## Available actions\n\n| # | Action | Role | Input |\n|---|--------|------|-------|\n| 01 | `detect-framework` | Resolve which framework to scaffold (explicit request, ask if ambiguous), abort if project already configured | project root, user request |\n| 02 | `scaffold-wordpress` | WordPress FSE theme + custom plugin + Docker\u002Fwp-env | resolved framework = wordpress |\n| 03 | `scaffold-laravel` | Laravel via composer create-project + Docker Compose | resolved framework = laravel |\n| 04 | `scaffold-symfony` | Symfony via composer create-project + Docker Compose | resolved framework = symfony |\n| 05 | `wire-deploy` | Compatibility route to `sc-php:cd server`; never a second producer | framework, target(s) info from user |\n| 06 | `verify` | Post-scaffold and native CD facade sanity checks | framework, project root |\n\n## Default flow\n\n`01` → (`02` | `03` | `04` depending on resolved framework) → `06`. `05` is optional, proposed after scaffold but never assumed — only run it if the user wants a deploy target wired now.\n\nTrigger-to-action mapping for `01`:\n- Framework named explicitly (\"scaffold a WordPress\", \"set up Laravel with Docker\") → skip the question, go straight to the matching scaffold action.\n- No framework named, or ambiguous → ask (WordPress \u002F Laravel \u002F Symfony), never guess.\n\n## References\n\n- `references\u002Fpitfalls.md` — Docker Compose project-naming trap (generic, all frameworks), WP-specific CSS cache-busting and wp-cli-via-Docker rules.\n- `references\u002Fcompose-project-name-guard.md` — `start.ps1`\u002F`stop.ps1`\u002F`wp.ps1` template shared by all three scaffolds.\n- `references\u002Fwp-env-json.md`, `references\u002Ftheme-plugin-skeleton.md` — WordPress scaffold content.\n- `references\u002Fdocker-compose-laravel.md`, `references\u002Fdocker-compose-symfony.md` — Docker Compose content for the other two frameworks.\n- `references\u002Fdeploy-pipeline.md` — legacy pipeline recognition and migration rules; new delivery belongs to `sc-php:cd`.\n\n## Transversal rules\n\n- Never scaffold onto an already-configured project — `01` aborts and redirects to `sniff`\u002F`audit` if `composer.json` or a sentinel file already exists.\n- Never invent deploy target credentials (host, user, path) — ask, or leave a commented example.\n- Never auto-run a database import against a remote target — that step stays manual and explicit, always.\n- Never let Docker Compose derive its project name implicitly — every scaffold wires the `COMPOSE_PROJECT_NAME` guard from `compose-project-name-guard.md`.\n- WordPress is the reference-quality flow (real production lineage); Laravel\u002FSymfony are thinner (official installer + standard compose) — say so rather than implying equal depth.\n- Report every file written, per action, same as `sniff`\u002F`overcode:service` do.\n",{"name":5,"tags":37,"author":12,"version":38,"description":7,"permissions":39,"vibe_version":41},[26,24,22],"0.12.0",[40,27],"bash",">=1.0.0","main","a33208351920c3cd0562b6ccf0846a9abe46741c","plugins\u002Fsc-php\u002Fskills\u002Fsetup",0,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace","https:\u002F\u002Fgithub.com\u002FRebelliousSmile","https:\u002F\u002Fwww.scriptami.com\u002F","2026-11-11 04:40:59",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add RebelliousSmile\u002Fmy-claude-marketplace --skill setup",{"tool":56,"command":57},"bunx","bunx skills add RebelliousSmile\u002Fmy-claude-marketplace --skill setup",{"tool":59,"command":60},"pnpm","pnpm dlx skills add RebelliousSmile\u002Fmy-claude-marketplace --skill setup","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002FSKILL.md",true,[64,70,74,78,82,86,90,94,98,102,106,110,114],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"actions\u002F01-detect-framework.md","REFERENCE","参考文档",1464,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F01-detect-framework.md",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"actions\u002F02-scaffold-wordpress.md",4896,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F02-scaffold-wordpress.md",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"actions\u002F03-scaffold-laravel.md",1645,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F03-scaffold-laravel.md",{"path":79,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":80,"sourceHtmlUrl":81},"actions\u002F04-scaffold-symfony.md",1704,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F04-scaffold-symfony.md",{"path":83,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":84,"sourceHtmlUrl":85},"actions\u002F05-wire-deploy.md",920,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F05-wire-deploy.md",{"path":87,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":88,"sourceHtmlUrl":89},"actions\u002F06-verify.md",2117,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Factions\u002F06-verify.md",{"path":91,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fcompose-project-name-guard.md",9335,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fcompose-project-name-guard.md",{"path":95,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fdeploy-pipeline.md",1047,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fdeploy-pipeline.md",{"path":99,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fdocker-compose-laravel.md",2360,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fdocker-compose-laravel.md",{"path":103,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":104,"sourceHtmlUrl":105},"references\u002Fdocker-compose-symfony.md",2289,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fdocker-compose-symfony.md",{"path":107,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":108,"sourceHtmlUrl":109},"references\u002Fpitfalls.md",3049,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fpitfalls.md",{"path":111,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":112,"sourceHtmlUrl":113},"references\u002Ftheme-plugin-skeleton.md",7845,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Ftheme-plugin-skeleton.md",{"path":115,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":116,"sourceHtmlUrl":117},"references\u002Fwp-env-json.md",3246,"https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Fplugins\u002Fsc-php\u002Fskills\u002Fsetup\u002Freferences\u002Fwp-env-json.md",[119,128,141,148,153,159],{"skillNo":120,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":32},"01M6CY3N1KXYQQG47SD4966CMS","web-optimize","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Fvalid\u002Fplugins\u002Fovercode\u002Fskills\u002Fweb-optimize\u002FSKILL.md",[],[125,126,127],"web","optimize","web optimize",{"skillNo":129,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":138,"publishedAt":32},"01M6CY3KR1H8WTNM1GV1SH6DY8","data-optimize","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Fvalid\u002Fplugins\u002Fovercode\u002Fskills\u002Fdata-optimize\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[139,126,140],"data","data optimize",{"skillNo":142,"name":143,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":146,"publishedAt":32},"01M6CY3JJJGXQG2X5X5PVTTB2A","ap-optimize","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Fvalid\u002Fplugins\u002Fovercode\u002Fskills\u002Fap-optimize\u002FSKILL.md",[],[126,147],"ap optimize",{"skillNo":149,"name":121,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":32},"01M6CY3HD94NANM2AE5JA7Z22D","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Forphan\u002Fplugins\u002Fovercode\u002Fskills\u002Fweb-optimize\u002FSKILL.md",[],[125,126,127],{"skillNo":154,"name":130,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":155,"categories":156,"keywords":158,"publishedAt":32},"01M6CY3G6M0NC688HYCFD9TDV1","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Forphan\u002Fplugins\u002Fovercode\u002Fskills\u002Fdata-optimize\u002FSKILL.md",[157],{"categoryNo":134,"categoryName":135,"taxonomyType":136,"taxonomyTypeDesc":137},[139,126,140],{"skillNo":160,"name":143,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":32},"01M6CY3ES1CAT89NKBXPBGEFZ9","https:\u002F\u002Fgithub.com\u002FRebelliousSmile\u002Fmy-claude-marketplace\u002Fblob\u002Fmain\u002Ftools\u002Feval\u002Ffixtures-pivot-map\u002Forphan\u002Fplugins\u002Fovercode\u002Fskills\u002Fap-optimize\u002FSKILL.md",[],[126,147]]