send-campaign
Skill3 starsChanged 7 months agoMITView on GitHub
End-to-end campaign workflow: create, design, target audience, preview, test, approve, and send or schedule an email or SMS campaign. Use when: "send campaign", "email blast", "newsletter", "send to my list", "broadcast email", or "schedule campaign".
In this repository6 other files it gives its agents.
- build-flowSkill
- compose-emailSkill
- import-contactsSkill
- nitrosend-analyticsSkill
- nitrosend-setupSkill
- send-transactionalSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
15 rules. About 0 are common, 4 are distinctive, and 11 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
11
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 23
Clone template: Use template_id from an existing template
- Very specific: line 26
Use nitro_compose_campaign with the chosen approach.
- Very specific: line 37
Follow next_call.image_choice for image-led routes.
- Distinctive: line 53
Ask who should receive this:
- Very specific: line 54
Contact lists: Use audience: { audience_type: "lists", contact_list_ids: [LIST_ID] } — query lists with nitro_query entity "lists"
- Very specific: line 55
Segment: Use audience: { audience_type: "segment", segment_id: SEGMENT_ID } — query segments with nitro_query entity "segments"
- Very specific: line 56
All subscribers: Use audience: { audience_type: "all_contacts" } only when the user explicitly wants an all-subscribed-contacts send
- Very specific: line 60
If they need a new segment, use nitro_define_segment to create one with filters.
- Very specific: line 65
Test send: nitro_send_test_message with target_type: "campaign", target_id, and an idempotency_key (reuse the same key on retry to avoid …
- Very specific: line 70
Run nitro_control_delivery with target_type: "campaign", target_id, operation: "approve", and expected_brand_sid — copy …
- Distinctive: line 79
Treat the returned review/admission findings as authoritative.
- Distinctive: line 86
Ask: send now or schedule for later?
- Very specific: line 91
Every nitro_control_delivery call requires the expected_brand_sid assertion (meta.current_brand.sid from the reviewed result).
- Distinctive: line 96
Do not claim a universal optimal send time.
- Very specific: line 103
Use nitro_get_insights with scope: "campaign" and the campaign ID
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Send Campaign
Guide the user through the full campaign lifecycle.
Step 1: Create the Campaign
Ask:
- Campaign name
- Channel: email (default) or SMS
- Subject line (email only)
For email, choose design approach:
- Inline sections: Build design from scratch (use compose-email patterns)
- Clone template: Use
template_idfrom an existing template - Plain text: Just
body+subject
Use nitro_compose_campaign with the chosen approach.
Composition contract: newly authored email copy or design always enters the
contract before persistence. Call nitro_compose_campaign with
composition_mode: "intent"; next_call.input is the server-selected complete
baseline and composition_contract.creative_routes is the compact route menu.
Preserve and fill the baseline by default. To choose another ready route, start
a fresh intent with its creative_route_id. A route that lacks frozen evidence
returns the exact missing facts; obtain those facts rather than substituting a
layout or inventing evidence.
Follow next_call.image_choice for image-led routes. Reissue intent with an
exact, verified image_url and an accurate description of what the image shows.
Then fill the returned next_call, preserving its contract, bindings, explicit
user constraints, and idempotency fields. Optionally validate before persisting
with composition_mode: "draft". Full section authoring is an intentional
escape hatch. The returned metered optional_server_authoring_call
(composition_mode: "generate") may instead compose, validate, and persist one
draft.
Supplying creative fields without a contract returns the intent contract instead
of creating the campaign. Cloning a template without creative overrides, plain
operational edits, and dry_run previews skip recomposition. Preserve explicit
user constraints verbatim: exact copy, URLs, offers, sender fields, audience,
schedule, and legal text.
Step 2: Target Audience
Ask who should receive this:
- Contact lists: Use
audience: { audience_type: "lists", contact_list_ids: [LIST_ID] }— query lists withnitro_queryentity "lists" - Segment: Use
audience: { audience_type: "segment", segment_id: SEGMENT_ID }— query segments withnitro_queryentity "segments" - All subscribers: Use
audience: { audience_type: "all_contacts" }only when the user explicitly wants an all-subscribed-contacts send
To suppress recipients (warmup or exclusions), add exclude_contact_list_ids and/or exclude_segment_ids inside audience — pass [] to clear; omitting them in patch mode preserves existing exclusions.
If they need a new segment, use nitro_define_segment to create one with filters.
Step 3: Preview and Test
- Review:
nitro_review_deliverywithtarget_type: "campaign"andtarget_idfor validation, readiness, and delivery context - Test send:
nitro_send_test_messagewithtarget_type: "campaign",target_id, and anidempotency_key(reuse the same key on retry to avoid duplicates) - Share preview results and ask for approval
Step 4: Approve
Run nitro_control_delivery with target_type: "campaign", target_id, operation: "approve", and expected_brand_sid — copy meta.current_brand.sid from the review result you just showed the user. This required brand assertion guarantees the approval lands on the brand that was reviewed; it never switches brands.
This runs preflight checks:
- Can send (within limits)
- Subscription active
- One ready, explicitly selected sender identity
- Physical address set
- Sender configured
Treat the returned review/admission findings as authoritative. Do not recreate capacity, sender, content, or billing gates from plan names or local rules.
Report any failed checks and help fix them.
Step 5: Send or Schedule
Ask: send now or schedule for later?
- Send now:
nitro_control_deliverywithtarget_type: "campaign",target_id,operation: "live", andexpected_brand_sid - Schedule:
nitro_control_deliverywithtarget_type: "campaign",target_id,operation: "schedule",scheduled_at(ISO 8601), andexpected_brand_sid
Every nitro_control_delivery call requires the expected_brand_sid assertion (meta.current_brand.sid from the reviewed result).
For an all_contacts audience, both live and schedule require
confirm_send_to_all: true — an explicit all-subscribed-contacts confirmation.
Do not claim a universal optimal send time. Use the recipient context and the account's own results; if there is insufficient evidence, label the timing as a test rather than a fact.
After Sending
Suggest checking results:
- Use
nitro_get_insightswithscope: "campaign"and the campaign ID - Key metrics: open rate, click rate, unsubscribe rate
- Compare against the live insights response and the account's own baseline
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

