Skip to content
Back to skills

Dev Environment Bootstrapping

ASecurity

Use this skill when the user asks to bootstrap, set up, create, or initialize a Shopware development environment from scratch — phrases like "set up a Shopware dev environment", "clone and install Shopware", "initialize a Shopware plugin project", "bootstrap Shopware and a new plugin called X", "get a fresh Shopware instance running". Orchestrates the full first-run flow — detects the current state of a Shopware checkout, proposes a numbered action plan, confirms with the user, then executes ...

  • 43 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added May 26, 2026
developmentjavascriptjavaphpbashnodedockergitdatabasefrontend

Works with

  • mcp

Security analysis

A100/100

Scanned September 21, 2026

npx -y skills add shopwareLabs/ai-coding-tools --skill dev-environment-bootstrapping --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dev Environment Bootstrapping?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dev Environment Bootstrapping
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shopwarelabs-dev-environment-bootstrapping/badge)](https://www.skillsdirectory.com/skills/shopwarelabs-dev-environment-bootstrapping)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dev-environment-bootstrapping
version: 1.4.0
model: sonnet
description: Use this skill when the user asks to bootstrap, set up, create, or initialize a Shopware development environment from scratch — phrases like "set up a Shopware dev environment", "clone and install Shopware", "initialize a Shopware plugin project", "bootstrap Shopware and a new plugin called X", "get a fresh Shopware instance running". Orchestrates the full first-run flow — detects the current state of a Shopware checkout, proposes a numbered action plan, confirms with the user, then executes dependency installation, database setup, plugin activation, and frontend builds via the lifecycle-tooling MCP server. Hands off to dev-tooling setup when the environment is running.
allowed-tools: AskUserQuestion, Bash, Read, Glob, Write, mcp__plugin_shopware-env_lifecycle-tooling__install_dependencies, mcp__plugin_shopware-env_lifecycle-tooling__database_install, mcp__plugin_shopware-env_lifecycle-tooling__database_reset, mcp__plugin_shopware-env_lifecycle-tooling__testdb_prepare, mcp__plugin_shopware-env_lifecycle-tooling__frontend_build_admin, mcp__plugin_shopware-env_lifecycle-tooling__frontend_build_storefront, mcp__plugin_shopware-env_lifecycle-tooling__plugin_create, mcp__plugin_shopware-env_lifecycle-tooling__plugin_setup
---

# Shopware Dev Environment Bootstrapping

Orchestrate the full first-run Shopware development environment setup. Detects current state, presents a numbered plan, confirms with the user, executes the plan via lifecycle MCP tools, then stops with a handoff message.

**Output scope:** Executes MCP lifecycle tools and Bash clone commands. Writes no config files. Invokes no dev-tooling skills. Stops after printing the handoff message.

## Phase 1 — Detection (no user interaction)

Silently probe the working directory to determine what already exists and what is missing. Do not prompt the user during this phase.

### Shopware Checkout State

1. Check `composer.json` exists and contains `shopware/core` as a dependency — determines whether this is a Shopware project root.
2. Check `src/Core/` directory exists — confirms a full Shopware source checkout vs. a vendor install.
3. Check `.env` file exists and contains `DATABASE_URL` — determines if the environment has been configured.
4. Check `var/cache/` directory exists — rough indicator that `bin/console cache:clear` has run at least once.

### Environment Clues

Check for these files/directories to infer the intended execution environment:

- `docker-compose.yml` or `docker-compose.yaml` — Docker Compose environment
- `.ddev/config.yaml` — DDEV environment
- `Vagrantfile` — Vagrant environment
- None of the above — native environment assumed

### Plugin State

- Check `custom/plugins/` directory exists and list any subdirectories — these are already-present plugins.
- Determine whether the user's stated intent (from their message) involves a specific plugin name.

### Database State

- `.env` with `DATABASE_URL` present → database may be configured
- `var/cache/` present → system:install has likely run before

### Dev Tooling Config

- Check for `.mcp-php-tooling.json` in the project root — if present, environment args are already locked in and will be used by the lifecycle tools automatically.
- Check for `.mcp-php-tooling.json` in `.claude/` — same.

### JavaScript Dependencies

- Check `src/Administration/Resources/app/administration/node_modules/` exists — Admin JS deps installed.
- Check `src/Storefront/Resources/app/storefront/node_modules/` exists — Storefront JS deps installed.

## Phase 2 — Present Findings

Output a structured text summary to the user before asking anything. Format it as plain text sections, not a bulleted list of checkmarks:

```
## Environment Assessment

**Shopware checkout:** [full checkout detected at <cwd> / no shopware/core found]
**Runtime environment:** [docker-compose (docker-compose.yml detected) / ddev (.ddev/ detected) / native]
**Database:** [configured (.env with DATABASE_URL present) / not configured]
**Plugins present:** [none / SwagCommercial, MyPlugin, ...]
**Admin JS deps:** [installed / missing (no node_modules)]
**Storefront JS deps:** [installed / missing (no node_modules)]
**Dev tooling config:** [.mcp-php-tooling.json found — environment settings locked / not found — will use detected environment]

## Proposed Plan

1. [Clone shopware/shopware into <cwd> — if no checkout detected]
2. [Clone <plugin-repo> into custom/plugins/<Name>/ — if user specified a plugin repo]
3. Install dependencies (composer install + npm for admin + npm for storefront)
4. Install database (system:install --drop-database --basic-setup)
5. [Create plugin skeleton — plugin_create(<Name>, <Namespace>) — if user asked for a new plugin]
6. [Activate and install plugin — plugin_setup(<Name>) — if existing plugin present]
7. Build administration frontend
8. Build storefront frontend
```

Omit any step that is already satisfied by the detection results. If everything is already set up, say so explicitly and propose no-op plan (nothing to do).

## Phase 3 — Confirm via AskUserQuestion

Ask a single confirmation question. Use a multiSelect question with an Other text field:

```
question: "Does this look correct? Select any steps to skip, or use the text field to correct my assessment (e.g. wrong environment, different plugin repo, plugin namespace)."
options:
  - label: "Skip frontend builds"
    description: "Admin and storefront JS will not be built (faster setup, build later when needed)"
  - label: "Skip database setup"
    description: "Database will not be installed (use if you have an existing database to preserve)"
  - label: "Skip plugin activation"
    description: "Plugin will be discovered but not activated or installed"
```

Parse the response:

- Selected skip options → remove corresponding steps from the plan.
- Other text field content → re-read the correction and adjust tool arguments (e.g. different environment, container service name, plugin name, plugin namespace).

## Phase 4 — Execute Confirmed Plan

Execute the plan steps sequentially. Do not parallelize — each step may depend on the previous one completing successfully.

### Determining Environment Args

If `.mcp-php-tooling.json` was found during detection, omit `environment`, `docker_service`, and `compose_file` from all MCP tool calls — the config file takes precedence and the tools will read it directly.

If no config file was found, pass the detected environment as args:
- `environment`: `native` | `docker-compose` | `ddev` | `vagrant`
- `docker_service`: the service name (from `docker-compose.yml` inspection or user correction)
- `compose_file`: path to compose file if non-default

### Step Execution

**Git clone (Bash only — not in MCP scope)**

If no Shopware checkout was detected and a clone is needed:

```bash
git clone https://github.com/shopware/shopware.git <target-dir>
```

If the user specified a plugin repository to clone, clone it into `custom/plugins/<Name>/` after the Shopware clone:

```bash
git clone <plugin-repo-url> custom/plugins/<PluginName>/
```

If a git clone fails, report the error clearly, suggest the user clone manually, and continue with the remaining plan steps. Do not abort the entire plan on a clone failure.

**install_dependencies**

Call for first-run setup with all three flags true, unless the user's Other text field correction indicated otherwise:

```
mcp__plugin_shopware-env_lifecycle-tooling__install_dependencies(
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>,
  composer: true,
  administration: true,
  storefront: true
)
```

If the user only corrected the environment type (not the install scope), keep all three flags true.

**database_install**

Call unless "Skip database setup" was selected:

```
mcp__plugin_shopware-env_lifecycle-tooling__database_install(
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>
)
```

**plugin_create** (new plugin user story only)

Call AFTER `database_install` — plugin_create requires a working database. Never reorder.

```
mcp__plugin_shopware-env_lifecycle-tooling__plugin_create(
  plugin_name: <Name>,
  plugin_namespace: <Namespace>,
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>
)
```

If `plugin_name` or `plugin_namespace` were not determined during detection (e.g. the user mentioned creating a plugin but didn't specify them), ask via AskUserQuestion before calling this tool.

**plugin_setup** (existing plugin user story only)

Call unless "Skip plugin activation" was selected. For each plugin in `custom/plugins/`:

```
mcp__plugin_shopware-env_lifecycle-tooling__plugin_setup(
  plugin_name: <Name>,
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>
)
```

**frontend_build_admin**

Call unless "Skip frontend builds" was selected:

```
mcp__plugin_shopware-env_lifecycle-tooling__frontend_build_admin(
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>
)
```

**frontend_build_storefront**

Call unless "Skip frontend builds" was selected:

```
mcp__plugin_shopware-env_lifecycle-tooling__frontend_build_storefront(
  environment: <detected-or-user-corrected>,
  docker_service: <if applicable>,
  compose_file: <if applicable>
)
```

### Mid-Execution Failure Handling

If any MCP tool call fails:

1. Report which step failed and what error was returned.
2. List which preceding steps succeeded.
3. Suggest a manual recovery command if one is obvious (e.g. "run `bin/console system:install --drop-database --basic-setup` manually").
4. Continue executing any remaining steps that do not depend on the failed step.

Do not abort the entire plan on a single tool failure unless the failure blocks all remaining steps (e.g. `install_dependencies` fails — `database_install` would then also fail).

### User Story Routing

Three user stories drive which steps are included:

**Core contributor (no plugin work):**
Clone shopware/shopware (if needed) → install_dependencies → database_install → frontend builds

**Existing plugin development:**
Clone shopware/shopware (if needed) → clone plugin repo into `custom/plugins/<Name>/` → install_dependencies → database_install → plugin_setup(plugin_name) → frontend builds

**New plugin creation:**
Clone shopware/shopware (if needed) → install_dependencies → database_install → plugin_create(name, namespace) → frontend builds

Note: plugin_setup is called for existing plugins only. plugin_create is called for new plugins only. Never call both for the same plugin.

### Already-Set-Up Detection

If Phase 1 detection found all of the following:
- Full Shopware checkout present
- Database configured (.env with DATABASE_URL)
- JS deps installed for both admin and storefront
- No plugins missing setup

Then present a minimal plan in Phase 2 ("Everything appears to be set up. Nothing to do.") and after user confirmation in Phase 3, skip Phase 4 entirely. Print the Phase 5 handoff message immediately.

## Phase 5 — Hard Stop + Handoff

After the last execution step completes (or immediately after Phase 3 if nothing needed to be done), print exactly this message and STOP:

```
Development environment is ready. To get the full dev tooling experience, install dev-tooling:

/plugin install dev-tooling@shopware-ai-coding-tools

For GitHub tooling (PRs, issues, CI), add the companion marketplace and install github-mcp:

/plugin marketplace add shopwareLabs/github-agent-tools
/plugin install github-mcp@github-agent-tools

After installing, run /reload-plugins and ask me to continue —
I'll walk you through configuring the dev tools for this environment.
```

Do NOT invoke any follow-up tools after this message. Do NOT call dev-tooling's `setting-up` skill or any other skill. Do NOT run any additional Bash commands. The handoff message is the final output of this skill.

## Rules

- Ask one question at a time via AskUserQuestion. Phase 3 is the single confirmation point — do not ask additional questions except when `plugin_name` or `plugin_namespace` are genuinely unknown.
- Never call `plugin_create` before `database_install`. The database must exist first.
- Git clone operations are Bash-only. Never attempt to clone via MCP tools.
- If `.mcp-php-tooling.json` is present, omit environment args from all MCP tool calls. The config file wins.
- Never call both `plugin_create` and `plugin_setup` for the same plugin in the same run.
- Skip frontend builds only when the user explicitly selected that skip option.
- Report failures with context (what succeeded, what failed, manual recovery hint) but continue remaining independent steps.
- Stop after the handoff message. No exceptions.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.