ima-claude 2.20.0 → 2.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -9
- package/dist/cli.js +2 -1
- package/package.json +1 -1
- package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
- package/plugins/ima-claude/agents/explorer.md +29 -15
- package/plugins/ima-claude/agents/implementer.md +58 -13
- package/plugins/ima-claude/agents/memory.md +19 -19
- package/plugins/ima-claude/agents/reviewer.md +84 -34
- package/plugins/ima-claude/agents/tester.md +59 -16
- package/plugins/ima-claude/agents/wp-developer.md +66 -21
- package/plugins/ima-claude/hooks/bootstrap.sh +42 -44
- package/plugins/ima-claude/hooks/prompt_coach_digest.md +14 -17
- package/plugins/ima-claude/hooks/prompt_coach_system.md +10 -12
- package/plugins/ima-claude/personalities/README.md +17 -6
- package/plugins/ima-claude/personalities/enable-efficient.md +61 -0
- package/plugins/ima-claude/personalities/enable-terse.md +71 -0
- package/plugins/ima-claude/skills/agentic-workflows/SKILL.md +35 -71
- package/plugins/ima-claude/skills/architect/SKILL.md +54 -168
- package/plugins/ima-claude/skills/compound-bridge/SKILL.md +41 -94
- package/plugins/ima-claude/skills/design-to-code/SKILL.md +43 -78
- package/plugins/ima-claude/skills/discourse/SKILL.md +79 -194
- package/plugins/ima-claude/skills/discourse-admin/SKILL.md +41 -103
- package/plugins/ima-claude/skills/docs-organize/SKILL.md +63 -203
- package/plugins/ima-claude/skills/ember-discourse/SKILL.md +90 -200
- package/plugins/ima-claude/skills/espocrm/SKILL.md +14 -23
- package/plugins/ima-claude/skills/espocrm-api/SKILL.md +79 -192
- package/plugins/ima-claude/skills/functional-programmer/SKILL.md +33 -237
- package/plugins/ima-claude/skills/gh-cli/SKILL.md +26 -65
- package/plugins/ima-claude/skills/ima-bootstrap/SKILL.md +71 -104
- package/plugins/ima-claude/skills/ima-bootstrap/references/ima-brand.md +32 -22
- package/plugins/ima-claude/skills/ima-brand/SKILL.md +18 -23
- package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +68 -179
- package/plugins/ima-claude/skills/ima-doc2pdf/SKILL.md +32 -102
- package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +38 -63
- package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +69 -114
- package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +16 -22
- package/plugins/ima-claude/skills/ima-forms-expert/SKILL.md +21 -37
- package/plugins/ima-claude/skills/ima-git/SKILL.md +81 -0
- package/plugins/ima-claude/skills/jira-checkpoint/SKILL.md +39 -120
- package/plugins/ima-claude/skills/jquery/SKILL.md +107 -233
- package/plugins/ima-claude/skills/js-fp/SKILL.md +75 -296
- package/plugins/ima-claude/skills/js-fp-api/SKILL.md +52 -162
- package/plugins/ima-claude/skills/js-fp-react/SKILL.md +47 -270
- package/plugins/ima-claude/skills/js-fp-vue/SKILL.md +55 -209
- package/plugins/ima-claude/skills/js-fp-wordpress/SKILL.md +59 -204
- package/plugins/ima-claude/skills/livecanvas/SKILL.md +19 -32
- package/plugins/ima-claude/skills/mcp-atlassian/SKILL.md +92 -162
- package/plugins/ima-claude/skills/mcp-context7/SKILL.md +32 -64
- package/plugins/ima-claude/skills/mcp-gitea/SKILL.md +98 -188
- package/plugins/ima-claude/skills/mcp-github/SKILL.md +60 -124
- package/plugins/ima-claude/skills/mcp-memory/SKILL.md +1 -177
- package/plugins/ima-claude/skills/mcp-qdrant/SKILL.md +58 -115
- package/plugins/ima-claude/skills/mcp-sequential/SKILL.md +32 -87
- package/plugins/ima-claude/skills/mcp-serena/SKILL.md +54 -80
- package/plugins/ima-claude/skills/mcp-tavily/SKILL.md +40 -63
- package/plugins/ima-claude/skills/mcp-vestige/SKILL.md +75 -116
- package/plugins/ima-claude/skills/php-authnet/SKILL.md +32 -65
- package/plugins/ima-claude/skills/php-fp/SKILL.md +50 -129
- package/plugins/ima-claude/skills/php-fp-wordpress/SKILL.md +25 -73
- package/plugins/ima-claude/skills/phpunit-wp/SKILL.md +103 -463
- package/plugins/ima-claude/skills/playwright/SKILL.md +69 -220
- package/plugins/ima-claude/skills/prompt-starter/SKILL.md +33 -83
- package/plugins/ima-claude/skills/prompt-starter/references/code-review.md +38 -0
- package/plugins/ima-claude/skills/py-fp/SKILL.md +78 -384
- package/plugins/ima-claude/skills/quasar-fp/SKILL.md +54 -255
- package/plugins/ima-claude/skills/quickstart/SKILL.md +7 -11
- package/plugins/ima-claude/skills/rails/SKILL.md +63 -184
- package/plugins/ima-claude/skills/resume-session/SKILL.md +14 -35
- package/plugins/ima-claude/skills/rg/SKILL.md +61 -146
- package/plugins/ima-claude/skills/ruby-fp/SKILL.md +66 -163
- package/plugins/ima-claude/skills/save-session/SKILL.md +10 -39
- package/plugins/ima-claude/skills/scorecard/SKILL.md +42 -40
- package/plugins/ima-claude/skills/skill-analyzer/SKILL.md +42 -71
- package/plugins/ima-claude/skills/skill-creator/SKILL.md +79 -250
- package/plugins/ima-claude/skills/task-master/SKILL.md +11 -31
- package/plugins/ima-claude/skills/task-planner/SKILL.md +44 -153
- package/plugins/ima-claude/skills/task-runner/SKILL.md +61 -143
- package/plugins/ima-claude/skills/unit-testing/SKILL.md +59 -134
- package/plugins/ima-claude/skills/wp-ddev/SKILL.md +38 -120
- package/plugins/ima-claude/skills/wp-local/SKILL.md +26 -108
|
@@ -7,7 +7,7 @@ metadata:
|
|
|
7
7
|
|
|
8
8
|
# IMA Editorial Scorecard
|
|
9
9
|
|
|
10
|
-
Score
|
|
10
|
+
Score IMA content against editorial best practices and brand standards. Honest grades that help writers improve.
|
|
11
11
|
|
|
12
12
|
## Invocation
|
|
13
13
|
|
|
@@ -16,16 +16,12 @@ Score any piece of IMA content against editorial best practices and brand standa
|
|
|
16
16
|
/scorecard [content type: newsletter | webinar | blog | press-release | fundraising | op-ed | social]
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
---
|
|
19
|
+
Auto-detect content type if not specified.
|
|
22
20
|
|
|
23
21
|
## Process
|
|
24
22
|
|
|
25
23
|
### Step 1: Identify Content Type
|
|
26
24
|
|
|
27
|
-
Detect or confirm the format:
|
|
28
|
-
|
|
29
25
|
| Content Type | Key Signals |
|
|
30
26
|
|-------------|-------------|
|
|
31
27
|
| Newsletter | "Dear {Person.firstName}", Quick Links block, multiple sections |
|
|
@@ -38,29 +34,26 @@ Detect or confirm the format:
|
|
|
38
34
|
|
|
39
35
|
### Step 2: Load Scoring References
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
- **[references/
|
|
43
|
-
- **[references/format-expectations.md](references/format-expectations.md)** — Voice check and structural expectations by content type
|
|
37
|
+
- **[references/scoring-rubrics.md](references/scoring-rubrics.md)** — grade criteria for all 5 categories
|
|
38
|
+
- **[references/format-expectations.md](references/format-expectations.md)** — voice and structural expectations by content type
|
|
44
39
|
|
|
45
40
|
### Step 3: Score Across Five Categories
|
|
46
41
|
|
|
47
|
-
Evaluate the content against each category. Be honest — inflated scores help nobody.
|
|
48
|
-
|
|
49
42
|
| Category | What to Evaluate |
|
|
50
43
|
|----------|-----------------|
|
|
51
|
-
| **Brand Voice** |
|
|
52
|
-
| **Evidence Quality** |
|
|
53
|
-
| **Audience Clarity** |
|
|
54
|
-
| **Structural Craft** |
|
|
55
|
-
| **CTA Effectiveness** |
|
|
44
|
+
| **Brand Voice** | Sounds like IMA? Tone match for channel? Terminology compliance? |
|
|
45
|
+
| **Evidence Quality** | Claims supported? Sources cited? Precise language? |
|
|
46
|
+
| **Audience Clarity** | Target reader understands AND respects this? Plain language with precision? |
|
|
47
|
+
| **Structural Craft** | Follows IMA format patterns? Logical flow? Scannable? |
|
|
48
|
+
| **CTA Effectiveness** | Reader knows what to do? CTAs specific and well-placed? |
|
|
56
49
|
|
|
57
50
|
### Step 4: Assign Grades
|
|
58
51
|
|
|
59
|
-
**
|
|
60
|
-
-
|
|
61
|
-
-
|
|
62
|
-
- Format
|
|
63
|
-
- Notes
|
|
52
|
+
**Non-negotiable formatting rules:**
|
|
53
|
+
- Exact emoji: `🟢` `🟡` `🔴` — never text substitutes
|
|
54
|
+
- Whole letter grades only: A, B, C, D, F — no `+` or `-`
|
|
55
|
+
- Format: `🟢 A` (emoji + space + letter)
|
|
56
|
+
- Notes: 5-15 words max
|
|
64
57
|
|
|
65
58
|
| Grade | Indicator | Meaning |
|
|
66
59
|
|-------|-----------|---------|
|
|
@@ -72,8 +65,6 @@ Evaluate the content against each category. Be honest — inflated scores help n
|
|
|
72
65
|
|
|
73
66
|
### Step 5: Compile & Present
|
|
74
67
|
|
|
75
|
-
Present the scorecard in this exact format:
|
|
76
|
-
|
|
77
68
|
```markdown
|
|
78
69
|
## Editorial Scorecard
|
|
79
70
|
|
|
@@ -90,70 +81,54 @@ Present the scorecard in this exact format:
|
|
|
90
81
|
> Reviewed: YYYY-MM-DD · Content Type: [type]
|
|
91
82
|
```
|
|
92
83
|
|
|
93
|
-
Then provide
|
|
94
|
-
|
|
95
|
-
**What's Working** (2-3 bullets)
|
|
96
|
-
- Specific things the content does well
|
|
97
|
-
- Quote or reference the actual text
|
|
84
|
+
Then provide editorial memo:
|
|
98
85
|
|
|
99
|
-
**
|
|
100
|
-
- Most impactful improvements first
|
|
101
|
-
- Be specific: "Change X to Y" not "Improve the tone"
|
|
86
|
+
**What's Working** (2-3 bullets) — specific strengths, quote actual text
|
|
102
87
|
|
|
103
|
-
**
|
|
104
|
-
- Flag specific sentences, phrases, or sections
|
|
105
|
-
- Suggest rewrites for the most critical issues
|
|
106
|
-
- Call out AI tells, terminology violations, or unsupported claims
|
|
88
|
+
**Priority Fixes** (2-3 bullets, ordered by impact) — "Change X to Y" not "Improve the tone"
|
|
107
89
|
|
|
108
|
-
|
|
90
|
+
**Line-Level Notes** (if applicable) — flag specific sentences, suggest rewrites, call out AI tells or unsupported claims
|
|
109
91
|
|
|
110
92
|
## Special Checks
|
|
111
93
|
|
|
112
94
|
### AI Detection Flags
|
|
113
95
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- **AI openers**: "In today's rapidly evolving...", "In the realm of..."
|
|
117
|
-
- **AI transitions**: Repeated "Moreover," "Furthermore," "It's worth noting"
|
|
118
|
-
- **AI hedges**: "That being said," "It is important to note that"
|
|
119
|
-
- **AI closers**: "In conclusion," at paragraph start
|
|
120
|
-
- **Generic filler**: "Navigate the complexities," "At its core," "Delve into"
|
|
121
|
-
- **Unnatural formality**: Passive constructions where active voice is standard for IMA
|
|
96
|
+
Flag these patterns; if 3+ detected, deduct one letter grade from Brand Voice:
|
|
122
97
|
|
|
123
|
-
|
|
98
|
+
- Openers: "In today's rapidly evolving...", "In the realm of..."
|
|
99
|
+
- Transitions: Repeated "Moreover," "Furthermore," "It's worth noting"
|
|
100
|
+
- Hedges: "That being said," "It is important to note that"
|
|
101
|
+
- Closers: "In conclusion," at paragraph start
|
|
102
|
+
- Filler: "Navigate the complexities," "At its core," "Delve into"
|
|
103
|
+
- Unnatural formality: passive constructions where IMA uses active voice
|
|
124
104
|
|
|
125
105
|
### Disclaimer Check
|
|
126
106
|
|
|
127
|
-
For
|
|
128
|
-
- Medical disclaimer present
|
|
107
|
+
For health content, verify:
|
|
108
|
+
- Medical disclaimer present
|
|
129
109
|
- "Not medical advice" language where needed
|
|
130
|
-
- "Consult your physician"
|
|
110
|
+
- "Consult your physician" for patient-facing content
|
|
131
111
|
|
|
132
112
|
### Independence Signal
|
|
133
113
|
|
|
134
|
-
Verify
|
|
114
|
+
Verify at least one marker:
|
|
135
115
|
- "Independent" in organizational description
|
|
136
116
|
- "No pharma funding" or equivalent
|
|
137
117
|
- "501(c)(3) nonprofit" identification
|
|
138
118
|
- "funded by people/donors" language
|
|
139
119
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
---
|
|
120
|
+
Social posts exempt from individual independence check — profile bio carries it.
|
|
143
121
|
|
|
144
122
|
## Guidelines
|
|
145
123
|
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
-
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
- **Non-editorial team members** should be able to read and act on this feedback.
|
|
153
|
-
|
|
154
|
-
---
|
|
124
|
+
- Honest scores only — an all-A scorecard is useless
|
|
125
|
+
- Notes are terse: 5-15 words per note
|
|
126
|
+
- Grade format-aware: newsletter ≠ press release ≠ social post
|
|
127
|
+
- Prioritize fixes by impact — what single change improves this most?
|
|
128
|
+
- Show rewrites, don't just describe them
|
|
129
|
+
- Date stamp every scorecard
|
|
155
130
|
|
|
156
131
|
## Related Skills
|
|
157
132
|
|
|
158
|
-
-
|
|
159
|
-
-
|
|
133
|
+
- `ima-copywriting` — write or rewrite drafts
|
|
134
|
+
- `ima-brand` — source of truth for voice, tone, terminology
|
|
@@ -7,165 +7,120 @@ metadata:
|
|
|
7
7
|
|
|
8
8
|
# IMA Editorial Workflow
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Traffic controller for all editorial requests. Delegates writing to `ima-copywriting`, scoring to `ima-editorial-scorecard`.
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## Commands
|
|
13
13
|
|
|
14
14
|
```
|
|
15
15
|
/write [type] → Plan and draft new content
|
|
16
|
-
/rewrite → Review existing content, then improve
|
|
17
|
-
/social [category] → Plan and draft
|
|
18
|
-
/brainstorm [topic] → Explore ideas
|
|
16
|
+
/rewrite → Review existing content, then improve
|
|
17
|
+
/social [category] → Plan and draft social post
|
|
18
|
+
/brainstorm [topic] → Explore ideas before committing
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Also triggers on
|
|
21
|
+
Also triggers on: "draft a newsletter," "improve this," "write a press release," etc.
|
|
22
22
|
|
|
23
|
-
**Content types
|
|
24
|
-
`newsletter` · `webinar` · `blog` · `press-release` · `fundraising` · `op-ed` · `social`
|
|
23
|
+
**Content types (`/write`):** `newsletter` · `webinar` · `blog` · `press-release` · `fundraising` · `op-ed` · `social`
|
|
25
24
|
|
|
26
|
-
**Categories
|
|
27
|
-
`video` · `statement` · `action` · `media-hit` · `announcement` · `journal` · `webinar-promo`
|
|
25
|
+
**Categories (`/social`):** `video` · `statement` · `action` · `media-hit` · `announcement` · `journal` · `webinar-promo`
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
## The Workflow
|
|
32
|
-
|
|
33
|
-
Every editorial request follows this sequence. No diving straight into a draft. No three rounds of follow-up questions. Gather context once, execute cleanly, review honestly.
|
|
27
|
+
## Workflow Sequence
|
|
34
28
|
|
|
35
29
|
```
|
|
36
|
-
PLAN
|
|
37
|
-
WRITE → Draft using ima-copywriting + format reference + ima-brand
|
|
38
|
-
REVIEW → Score against standards using ima-editorial-scorecard
|
|
39
|
-
APPROVE → Present for human decision with clear next actions
|
|
40
|
-
LEARN → Capture what worked for future drafts
|
|
30
|
+
PLAN → WRITE → REVIEW → APPROVE → LEARN
|
|
41
31
|
```
|
|
42
32
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## PLAN (Always Runs First)
|
|
46
|
-
|
|
47
|
-
Every editorial request starts with planning. Even quick ones. Especially quick ones.
|
|
33
|
+
No diving straight into drafts. Gather context once, execute, review honestly.
|
|
48
34
|
|
|
49
|
-
|
|
35
|
+
## PLAN
|
|
50
36
|
|
|
51
|
-
|
|
52
|
-
|-------------------|--------|---------------|
|
|
53
|
-
| `/write`, "draft," "create," "new" | **Create** new content | Plan → Write → Review → Approve |
|
|
54
|
-
| `/rewrite`, "improve," "fix," "edit," "make better" | **Rewrite** existing content | Plan → Review → Write → Review → Approve |
|
|
55
|
-
| `/social` | **Create** social post | Plan → Write → Review → Approve |
|
|
56
|
-
| `/brainstorm` | **Explore** before committing | Brainstorm → Plan (when ready) |
|
|
57
|
-
| Pastes content, no instructions | **Ambiguous** | Ask: "Score this or rewrite it?" |
|
|
58
|
-
| "Continue," "next version," "apply fixes" | **Iterate** | Skip Plan → Write |
|
|
37
|
+
### Intent Detection
|
|
59
38
|
|
|
60
|
-
|
|
39
|
+
| Signal | Intent | Path |
|
|
40
|
+
|--------|--------|------|
|
|
41
|
+
| `/write`, "draft," "create," "new" | Create | Plan → Write → Review → Approve |
|
|
42
|
+
| `/rewrite`, "improve," "fix," "edit," "make better" | Rewrite | Plan → Review → Write → Review → Approve |
|
|
43
|
+
| `/social` | Create social | Plan → Write → Review → Approve |
|
|
44
|
+
| `/brainstorm` | Explore | Brainstorm → Plan (when ready) |
|
|
45
|
+
| Content pasted, no instructions | Ambiguous | Ask: "Score this or rewrite it?" |
|
|
46
|
+
| "Continue," "next version," "apply fixes" | Iterate | Skip Plan → Write |
|
|
61
47
|
|
|
62
|
-
|
|
48
|
+
`/scorecard` handled directly by `ima-editorial-scorecard`, not this workflow.
|
|
63
49
|
|
|
64
|
-
|
|
50
|
+
### Context Gathering (One Prompt, Not a Chain)
|
|
65
51
|
|
|
66
|
-
|
|
52
|
+
Use `ask_user_input` widget. Collect 2–3 answers in single structured prompt. Skip already-answered questions. Default aggressively — ask only what's genuinely missing. For iteration requests, skip Plan entirely. If user says "just do it," write with available context, note assumptions, flag gaps with `[brackets]`.
|
|
67
53
|
|
|
68
|
-
|
|
54
|
+
**`/write [type]`:**
|
|
55
|
+
- Core message — ONE takeaway
|
|
56
|
+
- Reader action (widget: Read / Watch / Donate / Share / Sign / Attend / Download)
|
|
57
|
+
- Source material (widget multi-select: Study · Webinar · Quote · Press release · External article · None)
|
|
58
|
+
- Subject matter expert (optional)
|
|
59
|
+
- Responding to external events? (optional)
|
|
60
|
+
- Audience segment (widget: General supporters · Healthcare pros · Donors · Media · New subscribers)
|
|
69
61
|
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
- Default aggressively. If someone says `/write fundraising` about the year-end campaign, you already know the audience, tone, and CTA structure. Ask only for what's genuinely missing.
|
|
73
|
-
- For iteration ("apply the fixes," "next version"), skip Plan entirely.
|
|
74
|
-
- If the user says "just do it," respect that. Write with available context, note assumptions, flag gaps with `[brackets]`.
|
|
75
|
-
|
|
76
|
-
### Context Gathering by Command
|
|
77
|
-
|
|
78
|
-
**`/write [type]` — Creating new content:**
|
|
79
|
-
- Core message — what's the ONE takeaway? (open text)
|
|
80
|
-
- Reader action — what should they do? (widget: Read / Watch / Donate / Share / Sign / Attend / Download)
|
|
81
|
-
- Source material available? (widget multi-select: Study · Webinar · Quote from leader · Press release · External article · None yet)
|
|
82
|
-
- Subject matter expert? (open text)
|
|
83
|
-
- Responding to external events? (open text, optional)
|
|
84
|
-
- Audience segment? (widget: General supporters · Healthcare pros · Donors · Media · New subscribers)
|
|
85
|
-
|
|
86
|
-
**`/rewrite` — Improving content:**
|
|
87
|
-
- What's wrong with it? (open text)
|
|
62
|
+
**`/rewrite`:**
|
|
63
|
+
- What's wrong with it?
|
|
88
64
|
- Keep structure or rebuild? (widget: Keep structure · Rebuild)
|
|
89
|
-
- Preserve specific elements? (
|
|
65
|
+
- Preserve specific elements? (optional)
|
|
90
66
|
|
|
91
|
-
**`/social [category]
|
|
92
|
-
- Category
|
|
93
|
-
- What are you promoting/announcing?
|
|
94
|
-
- Link or media to attach?
|
|
95
|
-
- Quote to feature? (
|
|
67
|
+
**`/social [category]`:**
|
|
68
|
+
- Category if not specified
|
|
69
|
+
- What are you promoting/announcing?
|
|
70
|
+
- Link or media to attach?
|
|
71
|
+
- Quote to feature? (optional)
|
|
96
72
|
|
|
97
|
-
**`/brainstorm [topic]
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
---
|
|
73
|
+
**`/brainstorm [topic]`:**
|
|
74
|
+
- Topic or event
|
|
75
|
+
- Format preference (widget: Newsletter · Blog · Social · Op-ed · No preference)
|
|
76
|
+
- Goal (widget: Drive awareness · Drive action · Respond to news · Celebrate win · Educate)
|
|
103
77
|
|
|
104
78
|
## WRITE
|
|
105
79
|
|
|
106
|
-
|
|
80
|
+
1. Load `ima-brand` (always)
|
|
81
|
+
2. Load `ima-copywriting` (format template for content type)
|
|
82
|
+
3. Check project Files for published examples as style benchmarks
|
|
83
|
+
4. Write draft
|
|
84
|
+
5. Self-check against Quality Checklist in `ima-copywriting`
|
|
107
85
|
|
|
108
|
-
|
|
109
|
-
2. Load `ima-copywriting` skill (writing principles + format template for this content type)
|
|
110
|
-
3. Check project Files for published examples of this format as style benchmarks
|
|
111
|
-
4. Write the draft
|
|
112
|
-
5. Self-check against the Quality Checklist in ima-copywriting
|
|
113
|
-
|
|
114
|
-
**Deliver the draft with a brief note** on key editorial choices: why you opened this way, which template you followed, what still needs user input.
|
|
115
|
-
|
|
116
|
-
**Use placeholder brackets** for anything you don't have: `[study name]`, `[specific finding]`, `[dollar amount]`, `[date]`. Never invent evidence.
|
|
117
|
-
|
|
118
|
-
---
|
|
86
|
+
Deliver draft with brief note on key editorial choices. Use `[brackets]` for missing data. Never invent evidence.
|
|
119
87
|
|
|
120
88
|
## REVIEW
|
|
121
89
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
3. Score across five categories: Brand Voice · Evidence Quality · Audience Clarity · Structural Craft · CTA Effectiveness
|
|
127
|
-
4. Present scorecard table first, then What's Working, Priority Fixes, Line-Level Notes
|
|
90
|
+
1. Load `ima-editorial-scorecard`
|
|
91
|
+
2. Auto-detect content type or use specified
|
|
92
|
+
3. Score: Brand Voice · Evidence Quality · Audience Clarity · Structural Craft · CTA Effectiveness
|
|
93
|
+
4. Present: scorecard table → What's Working → Priority Fixes → Line-Level Notes
|
|
128
94
|
|
|
129
|
-
|
|
130
|
-
- Be honest. If the draft you wrote has a weak opening or missing independence signal, say so.
|
|
131
|
-
- Separate what *you* can fix on the next pass from what the *user* needs to provide (missing data, quotes, approvals).
|
|
95
|
+
For self-review: be honest. Separate what you can fix from what the user must provide (missing data, quotes, approvals).
|
|
132
96
|
|
|
133
|
-
|
|
134
|
-
- Score first, then ask if they want a rewrite.
|
|
135
|
-
|
|
136
|
-
---
|
|
97
|
+
For user-submitted content: score first, then ask if they want a rewrite.
|
|
137
98
|
|
|
138
99
|
## APPROVE
|
|
139
100
|
|
|
140
|
-
Present
|
|
141
|
-
|
|
142
|
-
| Option | What Happens Next |
|
|
143
|
-
|--------|-------------------|
|
|
144
|
-
| ✅ Approve | Content is ready. Move to Learn. |
|
|
145
|
-
| 🔄 Revise | Apply specific changes. Return to Write. |
|
|
146
|
-
| 🔁 Rebuild | Different approach. Return to Plan. |
|
|
147
|
-
| 💬 Discuss | Talk through a section before deciding. |
|
|
101
|
+
Present via `ask_user_input` widget:
|
|
148
102
|
|
|
149
|
-
|
|
103
|
+
| Option | Next |
|
|
104
|
+
|--------|------|
|
|
105
|
+
| Approve | Ready. Move to Learn. |
|
|
106
|
+
| Revise | Apply changes. Return to Write. |
|
|
107
|
+
| Rebuild | Different approach. Return to Plan. |
|
|
108
|
+
| Discuss | Talk through section before deciding. |
|
|
150
109
|
|
|
151
110
|
## LEARN
|
|
152
111
|
|
|
153
|
-
After approval,
|
|
112
|
+
After approval, capture what worked:
|
|
154
113
|
|
|
155
|
-
> "Noted for future [content type] drafts:
|
|
156
|
-
> - [Pattern worth reusing or correction to remember]"
|
|
114
|
+
> "Noted for future [content type] drafts: [pattern or correction]"
|
|
157
115
|
|
|
158
116
|
Examples:
|
|
159
|
-
- "Noted: Dr. Varon prefers 'the IMA' in formal quotes
|
|
117
|
+
- "Noted: Dr. Varon prefers 'the IMA' in formal quotes."
|
|
160
118
|
- "Noted: Year-end fundraising leads with match mechanic, not mission statement."
|
|
161
|
-
- "Noted: Thread format (1/4) works well for journal promotions on social."
|
|
162
119
|
|
|
163
|
-
If
|
|
164
|
-
|
|
165
|
-
---
|
|
120
|
+
If learning should persist, ask: "Want me to remember this?" and use memory.
|
|
166
121
|
|
|
167
122
|
## Related Skills
|
|
168
123
|
|
|
169
|
-
- **ima-brand**: Voice, tone, terminology
|
|
170
|
-
- **ima-copywriting**: Format templates, writing principles,
|
|
171
|
-
- **ima-editorial-scorecard**: Scoring rubric
|
|
124
|
+
- **ima-brand**: Voice, tone, terminology (ALWAYS load alongside)
|
|
125
|
+
- **ima-copywriting**: Format templates, writing principles, quality checklist
|
|
126
|
+
- **ima-editorial-scorecard**: Scoring rubric (handles `/scorecard` independently)
|
|
@@ -12,13 +12,9 @@ description: >-
|
|
|
12
12
|
|
|
13
13
|
# IMA Email Creator
|
|
14
14
|
|
|
15
|
-
Renders IMA-branded email HTML from editorial copy. Platform-agnostic
|
|
15
|
+
Renders IMA-branded email HTML from editorial copy. Platform-agnostic.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
**Email HTML is not web HTML.** Tables for layout, inline CSS only, 600px max width, test across clients.
|
|
20
|
-
Gmail strips `<style>` blocks. Outlook uses Word's rendering engine, which breaks CSS floats and flexbox.
|
|
21
|
-
Every layout decision must survive both.
|
|
17
|
+
**Email HTML is not web HTML.** Tables for layout, inline CSS only, 600px max width. Gmail strips `<style>` blocks. Outlook uses Word's rendering engine — breaks CSS floats and flexbox.
|
|
22
18
|
|
|
23
19
|
## Decision Tree
|
|
24
20
|
|
|
@@ -30,7 +26,7 @@ What type of email?
|
|
|
30
26
|
│ → references/drip-sequence.md
|
|
31
27
|
├── WordPress transactional (PHP)
|
|
32
28
|
│ → references/wp-transactional.md
|
|
33
|
-
├──
|
|
29
|
+
├── EspoCRM compatibility info?
|
|
34
30
|
│ → references/espocrm-compat.md
|
|
35
31
|
└── General email CSS questions?
|
|
36
32
|
→ references/email-css-safe.md
|
|
@@ -38,9 +34,9 @@ What type of email?
|
|
|
38
34
|
|
|
39
35
|
## Quick Start
|
|
40
36
|
|
|
41
|
-
1. Get copy from `ima-copywriting` (or user provides
|
|
42
|
-
2. Choose email type
|
|
43
|
-
3. Render HTML using
|
|
37
|
+
1. Get copy from `ima-copywriting` (or user provides)
|
|
38
|
+
2. Choose email type → load appropriate reference
|
|
39
|
+
3. Render HTML using `assets/base-template.html`
|
|
44
40
|
4. Write to `~/.claude/output/{name}.html` for browser preview
|
|
45
41
|
5. Run EspoCRM prep if needed: `python3 scripts/espocrm-prep.py output.html`
|
|
46
42
|
6. User pastes result into EspoCRM source view
|
|
@@ -52,7 +48,7 @@ What type of email?
|
|
|
52
48
|
| `espocrm-prep.py` | Extract body, migrate styles to div wrapper | `python3 scripts/espocrm-prep.py input.html [--out output.html]` |
|
|
53
49
|
| `css-inliner.py` | Inline style blocks into element attributes | `python3 scripts/css-inliner.py input.html [--out output.html]` |
|
|
54
50
|
|
|
55
|
-
Install
|
|
51
|
+
Install once: `pip install -r scripts/requirements.txt`
|
|
56
52
|
|
|
57
53
|
## IMA Brand Colors
|
|
58
54
|
|
|
@@ -71,30 +67,28 @@ Install deps once: `pip install -r scripts/requirements.txt`
|
|
|
71
67
|
|
|
72
68
|
- Tables for ALL layout — Outlook's Word engine breaks floats and flexbox
|
|
73
69
|
- Inline CSS only — Gmail strips `<style>` blocks
|
|
74
|
-
- 600px max width
|
|
75
|
-
- Typography: Lato for headings (
|
|
76
|
-
- 16px minimum body text
|
|
77
|
-
- Images: absolute URLs, explicit `width`/`height`, `display:block`, meaningful `alt`, 5px border-radius, max-width 580px
|
|
70
|
+
- 600px max width
|
|
71
|
+
- Typography: Lato bold 700 for headings (fallback: Arial, Helvetica, sans-serif); Open Sans regular 400 for body (fallback: Helvetica Neue, Helvetica, Arial, sans-serif)
|
|
72
|
+
- 16px minimum body text, 28px main headings, 20px section headings
|
|
73
|
+
- Images: absolute URLs, explicit `width`/`height`, `display:block`, meaningful `alt`, 5px border-radius, max-width 580px
|
|
78
74
|
- `role="presentation"` on all layout tables
|
|
79
|
-
- Medical disclaimer in footer for
|
|
75
|
+
- Medical disclaimer in footer for health content
|
|
80
76
|
- UTM parameters on all links (utm_term, utm_medium, utm_source, utm_content, utm_campaign)
|
|
81
77
|
|
|
82
78
|
## EspoCRM Variables
|
|
83
79
|
|
|
84
|
-
Single-brace syntax (NOT Handlebars
|
|
80
|
+
Single-brace syntax (NOT Handlebars):
|
|
85
81
|
- `{Person.firstName}` — first name (newsletters)
|
|
86
82
|
- `{Person.name}` — full name (campaigns)
|
|
87
83
|
- `{optOutLink}` — unsubscribe link (all emails, in footer)
|
|
88
84
|
|
|
89
85
|
## Builder Context
|
|
90
86
|
|
|
91
|
-
Production emails are built in BeeFree and exported.
|
|
87
|
+
Production emails are built in BeeFree and exported. Match BeeFree output patterns: `nl-container` → `row` → `row-content` stack → `column`. Ensures visual parity on import.
|
|
92
88
|
|
|
93
|
-
>
|
|
94
|
-
> New emails should follow the brand book values above. The structural patterns (BeeFree DOM, VML buttons,
|
|
95
|
-
> CSS resets, EspoCRM variables) remain the same regardless of color/font choices.
|
|
89
|
+
> Brand evolution: emails prior to Brand Book v4.0 used Montserrat/#0296a1/#374751/14px. New emails follow the values above. Structural patterns (BeeFree DOM, VML buttons, CSS resets, EspoCRM variables) remain the same.
|
|
96
90
|
|
|
97
|
-
##
|
|
91
|
+
## Related Skills
|
|
98
92
|
|
|
99
93
|
| Skill | Role |
|
|
100
94
|
|-------|------|
|
|
@@ -13,24 +13,13 @@ description: |
|
|
|
13
13
|
|
|
14
14
|
# IMA Forms Expert
|
|
15
15
|
|
|
16
|
-
WordPress form component library
|
|
17
|
-
|
|
18
|
-
## When to Use This Skill
|
|
19
|
-
|
|
20
|
-
- Building custom forms using IMA Forms component library
|
|
21
|
-
- Implementing template-driven validation (v1.3.0+)
|
|
22
|
-
- Understanding validators-at-registration architecture (v1.4.0+)
|
|
23
|
-
- Adding field types or container components
|
|
24
|
-
- Creating repeater/dynamic field patterns
|
|
25
|
-
- Integrating forms with WordPress (ACF, custom post types, AJAX)
|
|
26
|
-
- Debugging form submission issues
|
|
16
|
+
WordPress form component library — Bootstrap 5 + functional programming patterns.
|
|
27
17
|
|
|
28
18
|
## Core Principles
|
|
29
19
|
|
|
30
|
-
- **Template IS
|
|
20
|
+
- **Template IS definition**: Field rendering auto-registers validation specs + validators
|
|
31
21
|
- **Validators at registration**: Field functions build closures at registration time (v1.4.0)
|
|
32
22
|
- **Security by default**: Nonce verification, sanitization, escaping
|
|
33
|
-
- **Component-based**: Reusable field and container components
|
|
34
23
|
- **Bootstrap 5 native**: Uses Bootstrap utilities and components
|
|
35
24
|
|
|
36
25
|
## Architecture (v1.4.0 - Unified Validator Registry)
|
|
@@ -57,7 +46,7 @@ ima-forms/
|
|
|
57
46
|
|
|
58
47
|
### Validators-at-Registration Pattern (v1.4.0)
|
|
59
48
|
|
|
60
|
-
|
|
49
|
+
Validators built as closures at field registration, not rebuilt by engine via type-switching.
|
|
61
50
|
|
|
62
51
|
```php
|
|
63
52
|
// Inside ima_forms_email_field_register():
|
|
@@ -80,17 +69,12 @@ ima_forms_register_field_spec($name, [
|
|
|
80
69
|
]);
|
|
81
70
|
```
|
|
82
71
|
|
|
83
|
-
|
|
84
|
-
- Single source of truth: field function defines validation once
|
|
85
|
-
- No type switching: validators are closures, just iterate and run
|
|
86
|
-
- Testable: validators are pure functions captured at registration time
|
|
72
|
+
Single source of truth — field function defines validation once, no engine type-switching.
|
|
87
73
|
|
|
88
74
|
## Key Patterns
|
|
89
75
|
|
|
90
76
|
### Template-Driven Validation
|
|
91
77
|
|
|
92
|
-
Field functions auto-register specs + validators. Validate entire form in one call:
|
|
93
|
-
|
|
94
78
|
```php
|
|
95
79
|
$result = ima_forms_validate_form('templates/forms/my-form', $_POST, 'my-form');
|
|
96
80
|
|
|
@@ -101,7 +85,7 @@ if (!$result['valid']) {
|
|
|
101
85
|
$sanitized = $result['sanitized']; // Ready to use
|
|
102
86
|
```
|
|
103
87
|
|
|
104
|
-
→
|
|
88
|
+
→ Details: [references/validation-engine.md](references/validation-engine.md)
|
|
105
89
|
|
|
106
90
|
### Enhanced Email Validation
|
|
107
91
|
|
|
@@ -148,28 +132,28 @@ add_action('wp_ajax_nopriv_contact_submit', 'contact_submit_handler');
|
|
|
148
132
|
|
|
149
133
|
| File | Read When |
|
|
150
134
|
|------|-----------|
|
|
151
|
-
| [validation-engine.md](references/validation-engine.md) | Using `ima_forms_validate_form()`,
|
|
152
|
-
| [field-components.md](references/field-components.md) | Adding
|
|
153
|
-
| [container-components.md](references/container-components.md) |
|
|
154
|
-
| [examples.md](references/examples.md) |
|
|
135
|
+
| [validation-engine.md](references/validation-engine.md) | Using `ima_forms_validate_form()`, validator registry, custom validators |
|
|
136
|
+
| [field-components.md](references/field-components.md) | Adding field types, customizing behavior, repeaters |
|
|
137
|
+
| [container-components.md](references/container-components.md) | Cards, sections, column layouts, fieldsets |
|
|
138
|
+
| [examples.md](references/examples.md) | Complete form implementations, testing patterns, anti-patterns |
|
|
155
139
|
| [quick-reference.md](references/quick-reference.md) | Function signatures, version features, filters |
|
|
156
140
|
|
|
157
141
|
## Common Tasks
|
|
158
142
|
|
|
159
143
|
| Task | Approach |
|
|
160
144
|
|------|----------|
|
|
161
|
-
| Add
|
|
162
|
-
| Add custom validation |
|
|
163
|
-
| Block spam emails |
|
|
164
|
-
| Add repeater rows |
|
|
165
|
-
|
|
|
166
|
-
| Debug validation |
|
|
145
|
+
| Add simple form | `ima_forms_form()` + field components + `ima_forms_validate_form()` |
|
|
146
|
+
| Add custom validation | `add_filter('ima_forms_validate_{form-id}', ...)` |
|
|
147
|
+
| Block spam emails | `enhanced_validation => true` on email fields |
|
|
148
|
+
| Add repeater rows | `ima_forms_repeater()` with row callback |
|
|
149
|
+
| Multi-column layout | `ima_forms_column_layout(['columns' => 3, ...])` |
|
|
150
|
+
| Debug validation | `ima_forms_debug_field_specs()` or `ima_forms_debug_validation_summary($specs)` |
|
|
167
151
|
|
|
168
152
|
## Success Indicators
|
|
169
153
|
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
154
|
+
- Template-driven validation (no manual field maps)
|
|
155
|
+
- Enhanced email validation on user-facing forms
|
|
156
|
+
- Standardized form wrappers (`ima_forms_form()`)
|
|
157
|
+
- Nonce verification in all AJAX handlers
|
|
158
|
+
- Sanitized data used for processing (never raw `$_POST`)
|
|
159
|
+
- Validators built at registration, not in engine
|