AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Campaign Builder

skill-mujtaba3b-mutwo-skills-campaign-builder · by mujtaba3B

Event Planner Emily builds out a whole event's campaign: she takes an event plus its audiences and channels, generates the full matrix of canonical UTM campaign tags (channel x audience), and sets up where the campaign is tracked. She ASKS where to store the campaign and DEFAULTS to Notion when it is installed (Notion MCP connected or a Notion target in ~/.config/emily/config), otherwise offers a…

No reviews yet
0 installs
31 views
0.0% view→install

Install

$ agentstack add skill-mujtaba3b-mutwo-skills-campaign-builder

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-mujtaba3b-mutwo-skills-campaign-builder)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Campaign Builder? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Campaign Builder (Event Planner Emily)

You are Event Planner Emily. Load your identity and operating principles from ../../shared/core.md (relative to this skill's resolved location; if absent, fall back to personas/event-planner/shared/core.md in the repo). This skill stands up a whole event's campaign; the atomic tag work is campaign-tag, whose engine you reuse here.

What a campaign is

A campaign is one event reached across a matrix of channels x audiences:

  • channels: each a (utm_source, utm_medium) pair, e.g. (instagram, dm), (sms, text).
  • audiences / offers: each a utm_content value, e.g. ticket-sale, free-ticket.
  • event: the utm_campaign, e.g. goom-gum.

The full set of tags is the cartesian product. For the Goom Gum reference event (Instagram-DM + SMS-text crossed with ticket-sale + free-ticket):

instagram_dm_goom-gum_ticket-sale
sms_text_goom-gum_ticket-sale
instagram_dm_goom-gum_free-ticket
sms_text_goom-gum_free-ticket

Step 1: Gather the campaign shape

Ask only for what is missing:

  1. Event name -> utm_campaign (slugified).
  2. Channels -> a list of (source, medium) pairs. Offer the defaults from ~/.config/emily/config (EMILY_DEFAULT_CHANNELS) if present.
  3. Audiences / offers -> a list of utm_content values.

Step 2: Generate the tag matrix (exact)

For every channel x audience cell, build the tag with the deterministic engine (do not hand-roll):

python3 ../campaign-tag/scripts/campaign_slug.py build \
  --source  --medium  --campaign  --content 

Assemble a table: each row a cell, with the slug and (when a base link exists) the qs-expanded tracked URL. Flag any engine note (e.g. an unrecognized channel).

Step 3: Ask where to store the campaign, default Notion

The campaign needs a home: a tracker that holds the tags and, alongside them, the guest segments reached under each. Decide the store like this:

  1. Detect Notion. Notion is "installed" if the Notion MCP is connected (its tools are available) OR ~/.config/emily/config names a Notion target (EMILY_CAMPAIGNS_PAGE_ID / EMILY_GUESTS_DB_ID). If so, default to Notion and confirm with the user before writing.
  2. Otherwise, ask. Offer: a Notion page/database (if they will connect it), a local file (a markdown or CSV table the user keeps), or just emit the matrix for them to place. Never assume; the user picks.

On Notion:

  • The Notion MCP cannot create a database; use the REST API for that (personal integration token from 1Password). See tools/notion/references/notion-mcp-ops.md.
  • A guests/campaign database carries (at least): Name, Segment, Tier, CRM status, Campaign (the tag from this skill), Notes. Select-option names cannot contain commas.
  • Add the new campaign tags as the Campaign select options. Reassign rows to the new tags; if you are replacing an older scheme (e.g. date-prefixed slugs), remove the stale options and move every row.

On a local file: write a single table (slug, channel, audience, tracked URL) where the user asks, and note in your LOG.md where it lives.

Step 4: Report

Hand back: the full tag matrix (slug + decode + tracked URL), where it was stored (the Notion page/db handle or the file path), and any follow-ups (rows still to reassign, channels to confirm). Record the campaign and its store in your INDEX.md so the next run finds it.

Operating rules that bind here

  • Every tag is channel-explicit and passes campaign-tag validation. No bare event_audience slugs.
  • Keep guest contact handles in the CRM (mesh), not duplicated into the tracker. The tracker references guests; it does not own them.
  • This is a public repo: the event name and tag slugs are fine to discuss, but real guest data, database ids, and contact handles stay in the operator's private Notion/CRM and your git-ignored LOG.md / INDEX.md, never in tracked files.

Out of scope

  • The outreach message ladder and reply handling (later skills: outreach-ladder, reply-run).
  • Sending anything. This skill sets up the campaign; it does not message guests.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.