Skip to content

Commit 8d78d7d

Browse files
committed
feat: add Easy Email recipes and AI agent skill definitions
Add five Easy Email recipes (express, standard, text_format, types_core, types_default) for HTML email support. Add Claude Code and OpenAI agent skill definitions for acs, analyze, drush-webmaster, dxb, dxt, and rl. Move drupal/core-dev to require and allow symfony/runtime plugin.
1 parent a54970b commit 8d78d7d

55 files changed

Lines changed: 2953 additions & 1 deletion

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/acs/SKILL.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# AI Content Strategy — Drush CLI
2+
3+
Manage AI-powered content strategy recommendations via Drush.
4+
5+
## Commands
6+
7+
### Generation
8+
- `drush acs:generate` — Generate recommendations (`--category` to filter)
9+
- `drush acs:generate:more <section> <uuid>` — Generate more ideas for a card
10+
- `drush acs:generate:add <section>` — Add more cards to a category
11+
- `drush acs:health` — Check AI provider configuration
12+
13+
### Reports
14+
- `drush acs:report` — Full report (`--category`, `--priority`)
15+
- `drush acs:report:card <section> <uuid>` — View single card
16+
- `drush acs:report:status` — Last-run info
17+
- `drush acs:sitemap` — Site structure
18+
19+
### Card & Idea CRUD
20+
- `drush acs:card:edit <section> <uuid> --title="X"` — Edit card
21+
- `drush acs:card:delete <section> <uuid>` — Delete card
22+
- `drush acs:idea:edit <section> <uuid> <idea_uuid> --text="X"` — Edit idea
23+
- `drush acs:idea:implement <section> <uuid> <idea_uuid> --link=URL` — Mark done
24+
- `drush acs:idea:delete <section> <uuid> <idea_uuid>` — Delete idea
25+
26+
### Categories
27+
- `drush acs:category:list` — List all categories
28+
- `drush acs:category:get <id>` — Category detail
29+
- `drush acs:category:create <id> <label>` — Create category
30+
- `drush acs:category:update <id>` — Update category
31+
- `drush acs:category:delete <id>` — Delete category
32+
33+
### Settings & Export
34+
- `drush acs:settings:get` — View settings
35+
- `drush acs:settings:set --system-prompt="..."` — Update prompt
36+
- `drush acs:export --format=yaml|json|csv` — Export recommendations
37+
38+
All state-changing commands support `--dry-run`.
39+
All output is structured YAML with success/message/data envelope.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
name: ai-content-strategy
2+
description: Generate and manage AI content strategy recommendations via Drush CLI
3+
allow_implicit_invocation: true

.agents/skills/analyze/SKILL.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Analyze — Content Analysis CLI
2+
3+
Centralized content analysis for Drupal entities.
4+
5+
## Core Commands
6+
7+
| Command | Description |
8+
|---------|-------------|
9+
| `drush analyze:batch` | Run all batch-capable analyzers |
10+
| `drush analyze:batch --list` | List available analyzers |
11+
| `drush analyze:batch --analyzers=X,Y` | Run specific analyzers |
12+
| `drush analyze:batch --types=node:article` | Filter by type |
13+
| `drush analyze:batch --limit=100 --force` | Limit and force |
14+
| `drush analyze:setup-ai` | Install AI skill files |
15+
| `drush analyze:setup-ai --check` | Check for updates |
16+
17+
## Module-Specific Commands
18+
19+
| Command | Module |
20+
|---------|--------|
21+
| `drush analyze:broken-links:check <type> <id>` | Broken Links |
22+
| `drush analyze:broken-links:report` | Broken Links |
23+
| `drush analyze:posthog:query <path>` | PostHog |
24+
| `drush analyze:posthog:report` | PostHog |
25+
| `drush analyze:search-console:query <path>` | Search Console |
26+
| `drush analyze:search-console:report` | Search Console |
27+
28+
## Examples
29+
30+
```bash
31+
# Analyze all content
32+
drush analyze:batch
33+
34+
# Run specific analyzers on articles
35+
drush analyze:batch \
36+
--analyzers=analyze_ai_sentiments_analyzer \
37+
--types=node:article
38+
39+
# Check single entity for broken links
40+
drush analyze:broken-links:check node 42
41+
```
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
display_name: "Content Analysis"
2+
description: "Run content analysis across Drupal entities via Drush CLI. Batch processing, broken link checking, sentiment analysis, brand voice auditing, and more."
3+
default_prompt: "List all available batch-capable analyzers and show which content types have them enabled."
4+
allow_implicit_invocation: true
Lines changed: 215 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,215 @@
1+
---
2+
name: drush-webmaster
3+
description: |
4+
Manage Drupal content, entities, views, menus, fields, and site structure
5+
using drush webmaster (wm:*) commands. Use when asked to "list content types",
6+
"find articles by author", "create a new page", "edit node 42", "add a field",
7+
"build a view", "add a menu link", "translate this",
8+
"publish this node", "site schema", "search for content",
9+
"clone this entity", "moderate content", or any Drupal
10+
entity/content management task.
11+
Proactively invoke this skill (do NOT attempt raw SQL, drush eval, or direct
12+
Drupal API calls) when the user wants to query, create, edit, inspect, or
13+
manage Drupal content, entities, views, menus, blocks, vocabularies, media,
14+
translations, or site configuration.
15+
---
16+
17+
# Drush Webmaster Commands
18+
19+
The `wm:*` command suite provides YAML-based Drupal site management.
20+
All output is structured YAML. Run `drush wm:<command> --help` for
21+
full documentation on any command before using it.
22+
23+
## Discovery (Start Here)
24+
25+
### `wm:schema:dump` — Full site schema for AI context
26+
27+
**Run this first** when working with an unfamiliar site or section.
28+
29+
```
30+
drush wm:schema:dump
31+
drush wm:schema:dump --section=content-types
32+
drush wm:schema:dump --section=content-types --section=vocabularies
33+
```
34+
35+
Available sections: `content-types`, `vocabularies`, `views`, `menus`,
36+
`blocks`, `media-types`, `entity-types`, `site`
37+
38+
### `wm:site:info` — Site name, slogan, email, paths
39+
40+
```
41+
drush wm:site:info
42+
```
43+
44+
## Before Modifying (Discover First)
45+
46+
Before running any create, edit, or delete operation, run the
47+
appropriate discovery command. This prevents validation errors.
48+
49+
| Operation | Run first |
50+
|-----------|-----------|
51+
| Create entity | `wm:content-type:get <bundle>` — required fields |
52+
| Edit entity | `wm:entity:get <type> <id>` — current values |
53+
| Delete entity | `wm:entity:get <type> <id>` — confirm correct entity |
54+
| Add field to bundle | `wm:field:list <type> <bundle>` then `wm:field:types` |
55+
| Create/edit view | `wm:view:tables` then `wm:view:available:fields` |
56+
| Translate entity | `wm:translation:languages` — see configured languages |
57+
| Moderate entity | `wm:entity:transitions <type> <id>` — transitions |
58+
| Bulk operations | `wm:content-type:get` or `wm:entity:query` — scope |
59+
60+
Skip discovery when context is already known or the user
61+
asks to proceed directly.
62+
63+
## Querying & Inspecting Entities
64+
65+
### `wm:entity:query` — Find entities by field conditions
66+
67+
```
68+
drush wm:entity:query node article \
69+
--where="status=1" --where="uid=5" \
70+
--sort=created:DESC
71+
drush wm:entity:query node --where="status=0" --count
72+
drush wm:entity:query node article --where="field_image=NULL" --fields=id,title
73+
drush wm:entity:query node blog --limit=50 --offset=50
74+
```
75+
76+
Where operators: `=`, `!=`, `>`, `<`, `>=`, `<=`,
77+
`=NULL`, `!=NULL`, `=a,b,c` (IN list)
78+
79+
### `wm:entity:get` — Get single entity with field values
80+
81+
```
82+
drush wm:entity:get node 1
83+
drush wm:entity:get node 1 --fields=title,body
84+
```
85+
86+
### `wm:entity:field:get` / `wm:entity:field:set` — Get/set single field value
87+
88+
```
89+
drush wm:entity:field:get node 1 title
90+
drush wm:entity:field:set node 1 title "New Title"
91+
drush wm:entity:field:set node 1 body \
92+
'{"value":"<p>HTML</p>","format":"full_html"}'
93+
```
94+
95+
### `wm:search` — Full-text search (requires Search module)
96+
97+
```
98+
drush wm:search "contact form"
99+
```
100+
101+
## Creating & Editing Entities (YAML Workflow)
102+
103+
```
104+
drush wm:entity:edit node 5089 # Export to YAML
105+
drush wm:entity:apply node 5089 --dry-run # Preview changes
106+
drush wm:entity:apply node 5089 # Apply changes
107+
108+
drush wm:entity:new node article # Create template
109+
drush wm:entity:apply node new # Create entity
110+
111+
drush wm:entity:bulk-create # Bulk operations
112+
drush wm:entity:bulk-update
113+
drush wm:entity:bulk-delete
114+
115+
drush wm:entity:clone node 42
116+
drush wm:entity:deep-clone node 42
117+
drush wm:entity:diff node 42 43
118+
drush wm:entity:history node 42
119+
drush wm:entity:revert node 42
120+
```
121+
122+
## Content Types & Fields
123+
124+
```
125+
drush wm:content-type:list
126+
drush wm:content-type:get article
127+
drush wm:content-type:stats
128+
drush wm:content-type:create
129+
drush wm:content-type:update article
130+
drush wm:content-type:delete article
131+
132+
drush wm:field:list node article
133+
drush wm:field:get node article title
134+
drush wm:field:add
135+
drush wm:field:update
136+
drush wm:field:delete
137+
drush wm:field:types
138+
```
139+
140+
## Views
141+
142+
```
143+
drush wm:view:list
144+
drush wm:view:get content
145+
drush wm:view:create
146+
drush wm:view:clone content
147+
drush wm:view:edit blog
148+
drush wm:view:apply blog --dry-run
149+
drush wm:view:apply blog
150+
drush wm:view:preview content
151+
drush wm:view:delete content
152+
153+
drush wm:view:tables
154+
drush wm:view:available:fields node_field_data
155+
drush wm:view:available:filters node_field_data
156+
drush wm:view:available:sorts node_field_data
157+
```
158+
159+
## Menus, Vocabularies, Blocks & Media
160+
161+
```
162+
drush wm:menu:list
163+
drush wm:menu:get main
164+
drush wm:menu:create
165+
drush wm:menu:link:add
166+
drush wm:menu:link:update
167+
168+
drush wm:vocabulary:list
169+
drush wm:vocabulary:get tags
170+
drush wm:vocabulary:create
171+
172+
drush wm:block:list
173+
drush wm:block:place
174+
drush wm:block:types
175+
176+
drush wm:media-type:list
177+
drush wm:media-type:get image
178+
```
179+
180+
## Translation Management
181+
182+
Requires the Language and Content Translation Drupal modules.
183+
184+
```
185+
drush wm:translation:languages
186+
drush wm:entity:translations node 1
187+
drush wm:entity:translation:get node 1 fr
188+
drush wm:entity:translation:set node 1 fr '{"title":"Bonjour"}'
189+
drush wm:entity:translation:delete node 1 fr
190+
```
191+
192+
## Content Moderation
193+
194+
Requires the Content Moderation Drupal module.
195+
196+
```
197+
drush wm:entity:transitions node 1
198+
drush wm:entity:moderate node 1 published
199+
drush wm:entity:moderate node 1 published --dry-run
200+
```
201+
202+
Always run `wm:entity:transitions` first to discover valid state transitions.
203+
204+
## Key Workflow Pattern
205+
206+
Default to Discover, then Inspect, then Modify.
207+
208+
1. **Discover**: `wm:schema:dump`,
209+
`wm:content-type:get`, `wm:entity:query`
210+
2. **Inspect**: `wm:entity:get`, `wm:view:get`,
211+
`wm:field:list`, `wm:entity:transitions`
212+
3. **Edit**: `wm:entity:edit` then modify YAML then
213+
`wm:entity:apply --dry-run` then `wm:entity:apply`
214+
4. **Create**: `wm:entity:new` then fill template
215+
then `wm:entity:apply node new`
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
interface:
2+
display_name: "drush-webmaster"
3+
short_description: "Manage Drupal content, entities, views, menus, and fields via drush wm:* commands with structured YAML output."
4+
default_prompt: "Use drush-webmaster for Drupal site management tasks."
5+
policy:
6+
allow_implicit_invocation: true

.agents/skills/dxb/SKILL.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
name: dxb
3+
description: |
4+
Build and manage DXPR Builder pages via drush dxb:* commands.
5+
Write Bootstrap 5 HTML — the builder parses it into drag-and-drop
6+
editable elements. Use when asked to "create a page", "build a
7+
landing page", "edit page markup", "list templates", "update page
8+
layout", "create a reusable section", "scaffold content from a
9+
template", or any DXPR Builder content/layout task.
10+
---
11+
12+
# DXPR Builder Drush Commands
13+
14+
<!-- PROMPT_RULES_START (auto-generated from prompt.js — do not edit manually) -->
15+
## HTML Content Rules
16+
17+
DXPR Builder parses standard Bootstrap 5 HTML into drag-and-drop
18+
editable elements. Follow these rules when generating markup:
19+
20+
### Layout
21+
22+
- Use Bootstrap grid system and responsive design patterns
23+
- Row columns must total exactly 12 (e.g. col-6 + col-6, col-4 + col-4 + col-4). Do NOT use col-auto or col without a size — each column must have an explicit number (col-1 through col-12)
24+
- Avoid nested containers
25+
- Sections contain content directly - no empty wrapper divs:
26+
- But only use a container-fluid when appropriate for the type of content
27+
- CRITICAL: NEVER use Bootstrap flexbox utility classes (d-flex, d-inline-flex, gap-*, flex-row, flex-column, flex-wrap, justify-content-*, align-items-*) for layouts. These classes are FORBIDDEN.
28+
- For ANY horizontal arrangement of elements (buttons, links, cards, icons, etc.), you MUST use the Bootstrap grid: wrap elements in div.row containing div.col-N children that total 12
29+
30+
### Styling
31+
32+
- The content will be part of a custom themed Bootstrap 5 page
33+
- Use Bootstrap classes for their intended purpose, e.g. do not use .warning or .success just for styling
34+
- DO NOT use CSS background colors or gradients unless the user explicitly requests them
35+
- DO NOT include style tags
36+
37+
### Images
38+
39+
- Every IMG tag needs src and alt attributes
40+
- Place images between content blocks, not inline with text
41+
- Format src as: https://promptahuman.com/600x400@2x?bg_color=[HEX]&text_color=[HEX+333333]&title=[file_name.png]&prompt=[Creative Brief in plain text, emoji allowed.]
42+
<!-- PROMPT_RULES_END -->
43+
44+
## Commands
45+
46+
| Command | Alias | Description |
47+
|---------|-------|-------------|
48+
| `dxb:element:list` | `dxpr-el` | List available elements (blocks, views) |
49+
| `dxb:template:list` | `dxpr-tl` | List page templates |
50+
| `dxb:page:create` | `dxpr-pc` | Create entity from template (`type` and `template_id` are arguments) |
51+
| `dxb:page:get` | `dxpr-pg` | Read builder markup |
52+
| `dxb:page:update` | `dxpr-pu` | Update builder markup with BS5 HTML |
53+
| `dxb:user-template:list` | `dxpr-utl` | List reusable user templates |
54+
| `dxb:user-template:create` | `dxpr-utc` | Save reusable template |
55+
| `dxb:setup-ai` | `dxpr-sa` | Install AI skill files to project root |
56+
57+
Run `drush <command> --help` for full options.
58+
59+
## Workflow
60+
61+
1. **Discover**`template:list`, `element:list`
62+
2. **Create**`page:create` from template or create entity then `page:update`
63+
3. **Edit**`page:get` to read, modify, `page:update` to save
64+
4. **Reuse**`user-template:create` to save sections
65+
66+
Write Bootstrap 5 HTML following the rules above.
67+
The builder parses it into drag-and-drop components automatically.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
interface:
2+
display_name: "dxb"
3+
short_description: "Build and manage DXPR Builder pages via drush dxb:* commands. Write Bootstrap 5 HTML — the builder parses it into drag-and-drop editable elements."
4+
default_prompt: "Use dxb for page building, template management, and content layout tasks."
5+
policy:
6+
allow_implicit_invocation: true

0 commit comments

Comments
 (0)