From justai
Drive a campaign from idea to a ready-to-ship brief in one guided flow. Build a marketer-readable document step by step (hypothesis, audience, metrics, KPIs, messaging, sequence, per-touchpoint content) and hand it off for launch. Use this as the default entry point for any new or underspecified campaign.
How this skill is triggered — by the user, by Claude, or both
Slash command
/justai:campaign-briefThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
One skill. One flow. Idea → brief → ready for launch.
One skill. One flow. Idea → brief → ready for launch.
The brief is the work product. Start a real markdown document in the first step and keep adding to it. At the end the marketer signs off on the brief and the campaign is handed to launch.
AskUserQuestion tool for interview-style questions: every fork, every cohort/threshold/KPI/cadence choice, every sign-off. The tool renders a native radio-button picker with an automatic "Other" freeform slot, which is the required UX for this skill. Do NOT inline A/B/C/D options as markdown text in the chat; that is a fallback only when AskUserQuestion is genuinely unavailable. Prefer 2 to 4 options per question; batch up to 4 related questions into a single call when they're logically grouped (e.g., all of step 2's audience-definition questions).last_lesson_title for B1", "fall back when preferred_language is missing") is what makes a brief personalization-ready. Keep field-level detail; strip implementation-level detail.When the JustAI Platform MCP is connected, use get_platform_context first so
the brief reflects the current authoring namespaces and runtime limits. For
audience exploration, use iterable_user_get on representative user IDs to
pull real profile attributes and events. Keep platform details out of the
marketer-facing brief except for profile field names that directly support
personalization.
Reference the exact attribute field names returned by iterable_user_get
(under attributes) when filling §2's "Personalization fields" column and
§7 prompt instructions — those field names travel with the brief into rendering.
If the platform is not connected or user data is unavailable, say so and fall back to structured segmentation with sizes flagged as TBD. Do not invent numbers.
Start a new marketer-readable markdown brief in the conversation, or update the document the user has provided. Collect:
Then ask the fork question:
"What would you like me to firm up first, audience, content, or goal?"
Record the entry point. The other two get filled in later.
iterable_user_get on a handful of representative user IDs to pull
real profile attributes and recent events. Returns { attributes, events }.iterable_user_get on a sample
of known IDs across segments. There is no bulk list tool at this time; if
Iterable is not configured, structure the segmentation with the marketer
and flag sizes as TBD.Show the audience as a table:
| Segment | Size (est.) | Personalization fields | Risks |
/api/segments count endpoint; report the sample size and flag it as an estimate.iterable_user_get under attributes. Do not reference fields not present in actual user records.email values for email campaigns, sparse event history limiting personalization.If platform data is unavailable, structure the segmentation with the marketer and flag sizes as TBD. Do not invent numbers.
Ask:
"Want me to pull current metrics to size this opportunity?"
If yes, query available analytics for the named segment and produce a sizing table directly comparable to the hypothesis:
| Current | Baseline conversion | Hypothesized lift | Projected impact |
Keep claims honest. If the data is thin, say so. If only directional evidence exists, frame it that way. If no data source is connected, offer directional-only sizing and move on. Do not stall the flow.
Propose defaults based on the campaign shape:
Ask:
"These the right KPIs, or swap / add anything?"
Always keep one primary and at least one secondary KPI. For high-frequency cadences (daily, multi-daily), also list opt-out / unsubscribe rate as a monitored risk even if the marketer doesn't pick it as a KPI. It's the primary failure mode of aggressive cadences.
Ask:
"What kind of message? Onboarding, win-back, activation, announcement, cross-sell, or something else?"
Offer the common options as multi-choice. Then capture:
Ask three questions. Multi-choice plus freeform each.
Produce the cadence table:
| Step | Channel | Timing | Angle | Purpose |
Also surface:
If a marketer's requested shape conflicts with what the underlying system can honor (e.g., fine-grained local send times, mid-sequence branches based on opens/clicks, cross-user coordination), say so plainly and propose the closest shape that can ship now. Then let the marketer decide: simplify, split into multiple campaigns, or flag as a future enhancement.
Go row by row through the cadence table. Do not batch.
Author content as prompt + sample outputs, not hand-written copy with merge tags.
When content is AI-rendered at send time, the brief should capture (a) the exact prompt that will drive the AI and (b) representative sample outputs the marketer can calibrate against. Do NOT hand-author final subject/preheader/body with {{merge_tags}}. That text never actually ships; the AI re-renders every field per user.
For each touchpoint, produce:
Angle & Intent: one line each. Matches the day-angle from §3 and adds the touchpoint-specific framing.
Generate prompt: the full instruction set the AI will use to write this message. Explicit cohort rules (which profile fields to lean on per persona), tonal guardrails, length, and any structural requirements (subject limit, preheader limit, body word count). Write it as the marketer-approved source of truth.
Sample outputs: one representative render per cohort in a matrix:
| Cohort | Subject | Preheader | Body |
|---|---|---|---|
| A (e.g. new-never-started) | |||
| B (e.g. existing-streak-breaker) |
Samples are the marketer's calibration target: if a sample reads wrong, edit the prompt, not the sample. Samples illustrate; prompts ship.
Asset notes: for image or brand assets, use the content tools (list_content, get_content_item) to check what's stored. If a matching asset exists, reference it in the brief. If not, flag the gap.
CTA: short action-first copy, shared across the cohort matrix unless explicitly varied. Note how the click target resolves per user (e.g., deep-link to resume last lesson, or fall back to onboarding start if the user has no history).
Confirm each touchpoint with the marketer before moving to the next. The confirmation question should target the prompt (source of truth), not the samples (illustrations). If the marketer asks to batch the remaining touchpoints, honor the request. The one-at-a-time rule is a default, not a mandate.
Render the full brief as one markdown document: hypothesis, audience, KPIs, messaging, sequence, per-touchpoint content. Ask:
"Ready to hand this off for launch, or edit anything first?"
Do not proceed without explicit sign-off.
Once the marketer signs off, the brief is complete. The campaign enters the launch pipeline as a draft; the marketer will confirm final activation separately. Propose a follow-up pass with the testing skill to add pre-launch regression coverage before activation.
# Campaign: <name>
## 1. Overview
### 1.1 Summary
<what, why, entry point>
### 1.2 Hypothesis
Audience who receive <Y> will:
1. <outcome 1>
2. <outcome 2>
3. <outcome 3>
### 1.3 Objective
<primary business outcome>
### 1.4 Success Indicators
- Primary KPI: <metric>
- Secondary KPI(s): <metric(s)>
- Monitored risks: <e.g., unsubscribe rate for daily cadence>
## 2. Audience
### 2.1 Segmentation
| Segment | Size | Reachability | Personalization fields | Risks |
### 2.2 Opportunity sizing
| Current rate | Baseline | Hypothesized lift | Projected impact |
## 3. Messaging Strategy
- Core message / hook: <and how it rotates across the sequence, if applicable>
- Tone: <voice>
- Per-cohort flavor: <how tone flexes per persona>
- Offer / CTA: <cta>
- Constraints: <brand / legal / compliance>
## 4. Sequence
| Step | Channel | Timing | Angle | Purpose |
- Exit conditions: <success, opt-out, hard cap>
- Send-time anchor: <fixed / local / relative>
## 5. Content
### Touchpoint 1: <channel>, <timing>
**Angle:** <from §3>
**Intent:** <what this touchpoint does>
**Length:** <short / medium / long>
#### Generate prompt
<the instruction set the AI will use to write this message>
#### Sample outputs
| Cohort | Subject | Preheader | Body |
| --- | --- | --- | --- |
| ... | ... | ... | ... |
#### CTA
- Button copy: <text>
- Click target: <how it resolves per user>
#### Asset notes
<images, hero, footer, or gap flag>
### Touchpoint 2: <channel>, <timing>
...
Two worked example briefs live under examples/. Load the matching one while authoring step 7 (content) to anchor format and tone.
examples/simple-win-back/: minimal case. One email, one persona, one send. Use as the reference when the marketer asks for a single-touch campaign.examples/trial-welcome-series/: multi-touch case. 4 emails over 6 days, 3 personas handled via per-render prompt variation. Use as the reference when the marketer wants persona fan-out or a fixed nurture sequence. Note: this older example still uses the hand-written-copy-with-merge-tags format for §5; new briefs should use the prompt + samples format from step 7.Do not copy the examples verbatim. Mirror the structure; rewrite the content for the marketer's actual campaign.
competitive-brief first, resume at step 5.audience-analysis as a side quest, come back with a chosen segment.content-review.campaign-testing.campaign-report.npx claudepluginhub justwordsai/justai --plugin justaiProvides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.