All skills
michtio avatar

/craft-project-setup

@64a3c26

Scaffold Claude Code configuration specifically for Craft CMS projects. Generates CLAUDE.md and .claude/rules/ files tailored to the project type (plugin, site, module, hybrid, or monorepo). Only for Craft CMS projects — not for Next.js, Laravel, or other frameworks. Triggers on: 'set up Claude for this Craft project', 'initialize CLAUDE.md', 'scaffold project config', 'configure Claude Code for Craft', 'create CLAUDE.md', 'missing CLAUDE.md', 'does this project have a CLAUDE.md', 'bootstrap Claude config', 'new Craft project setup', 'onboard a developer to this Craft project', 'generate .claude/rules', 'set up coding standards config', 'upgrade Claude config', 'update CLAUDE.md', 'compare my setup', 'is my config up to date', 'audit my Claude setup', 'redo project setup'. Also triggers when starting work in a new Craft CMS project that lacks a CLAUDE.md file, or when the user wants to check or upgrade an existing configuration. Detects project type from composer.json (craft-plugin, craft-module, project), .ddev/config.yaml, templates/, config/project/, and modules/. NOT for installing Craft CMS itself, creating DDEV environments, writing PHP code, building templates, or content modeling. NOT for non-Craft projects — if the project is React, Next.js, Laravel, or any non-Craft framework, this skill does not apply.

Use this Skill: https://skilld.dev/gh/michtio/craftcms-claude-skills/craft-project-setup

This session only. Nothing lands on disk.

templatesplugin.clauderulesarchitecture.md

≈390 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Architecture

  • Business logic in services. Controllers are thin: validate, delegate, respond.
  • Element operations through services, not controllers or helpers.
  • Services live in src/services/ and register via src/services/ServicesTrait.php: static config() returns the components array, typed getX(): X accessors wrap $this->get('x') with assert($component instanceof X) to narrow Yii's ?object return for PHPStan level 8. The trait owns the @property X $name tags on its docblock — never duplicate them on the main plugin class. Adopt the trait once a plugin has 2+ services.
  • Event listeners, URL rules, and plugin lifecycle overrides live in src/base/PluginTrait.php. The main plugin class is a thin shell — use ServicesTrait; use PluginTrait; plus an orchestrating init(). Its class-level docblock describes what the plugin does, not the services it registers (drift-prone — the trait owns that map).
  • Abstract base classes for shared controller structure. Traits for cross-cutting concerns.
  • MemoizableArray for cached service lookups — always reset on data changes.
  • Project config for entities that sync across environments. Runtime data stays in DB only.
  • Events for extensibility: fire before/after events on all significant operations.
  • addSelect() not select() in beforePrepare() — never wipe Craft's base columns.
  • site('*') in queue workers — workers run in primary site context.
  • Scope element queries by owning context (site, section, owner) — never query globally without filters.

Source: SKILL.md on GitHub

1 warning16d3 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill automates Craft CMS project setup by scaffolding configuration and pre-approving developer commands to improve agent efficiency. While functional, the broad permission grants and the audit workflow for external repositories introduce surfaces for unauthorized command execution and indirect prompt injection.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: MEDIUM · 1 issue

Signed by skilld at 64a3c26. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 weeks ago.

Activeupdated 2 weeks ago

README badge

README badge for michtio/craftcms-claude-skills/craft-project-setup