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

Campaign Tag

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

Event Planner Emily builds and validates a canonical campaign tag (slug) in UTM-parameter format. The slug is <utm_source>_<utm_medium>_<utm_campaign>_<utm_content>: lowercase, underscores between the four UTM params, hyphens within a multi-word token (e.g. instagram_dm_goom-gum_ticket-sale, sms_text_goom-gum_free-ticket). The channel is always explicit. Trigger when the user says \"/campaign-tag…

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

Install

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

✓ 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-tag)

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 Tag? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Campaign Tag (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 owns building and validating one campaign tag; campaign-builder is the skill that generates a whole event's matrix of tags.

The convention (canonical)

___
  • lowercase throughout.
  • _ separates the four UTM params; - joins words within a single param. A param may never contain _.
  • utm_source = the channel / platform. Vocab: instagram, sms, email, whatsapp, facebook, tiktok, twitter, linkedin, telegram. Unknown values are allowed but flagged.
  • utm_medium = the delivery method. Vocab: dm, text, email, story, post, reply, call, paid. Unknown values are allowed but flagged.
  • utm_campaign = the event. Free text, slugified (e.g. goom-gum).
  • utm_content = the audience / offer. Free text, slugified (e.g. ticket-sale, free-ticket).

Worked examples:

| Channel | Audience | Slug | |---|---|---| | Instagram DM | ticket-sale | instagram_dm_goom-gum_ticket-sale | | SMS text | ticket-sale | sms_text_goom-gum_ticket-sale | | Instagram DM | free-ticket | instagram_dm_goom-gum_free-ticket |

The common bug this skill exists to prevent: a slug that omits the channel (e.g. 2026-06-25_goom-gum_ticket-sale). The channel is always explicit, and the date does not belong in the slug (put it inside utm_campaign only if you genuinely run the same event name twice, e.g. goom-gum-2026-06).

Use the deterministic engine

Do not eyeball slugs. Call the engine at scripts/campaign_slug.py (it normalizes messy input and enforces the rules):

# build from the four params (handles "Goom Gum" -> goom-gum, etc.)
python3 scripts/campaign_slug.py build --source instagram --medium dm --campaign "Goom Gum" --content ticket-sale
# -> instagram_dm_goom-gum_ticket-sale

# validate an existing slug (exit 0 = valid, 1 = invalid; prints reasons)
python3 scripts/campaign_slug.py validate 2026-06-25_goom-gum_ticket-sale
# -> INVALID  (expected 4 params, found 3)

# expand a valid slug into the utm_* query string for a link
python3 scripts/campaign_slug.py qs instagram_dm_goom-gum_ticket-sale
# -> utm_source=instagram&utm_medium=dm&utm_campaign=goom-gum&utm_content=ticket-sale

If a system without Python needs it, apply the rules by hand, but the engine is the source of truth and the way to stay exact.

What you do

  1. Build a tag. Gather the four parts (ask only for what is missing): channel, delivery method, event, audience/offer. Run build. Report the slug, the utm_* breakdown, and any note the engine raised (e.g. an unrecognized channel worth double-checking).
  2. Validate / repair a tag. Run validate. If invalid, say exactly why (wrong param count, an illegal token, a missing channel) and produce the corrected slug via build.
  3. Make a link. When the user wants the tracked URL, run qs and append it to their base link: ?.

Always show the slug AND its four-part decode so the user can sanity-check the mapping. Keep the channel explicit, every time.

Out of scope

  • Generating a whole event's set of slugs across channels and audiences. That is campaign-builder.
  • Storing the campaign anywhere (Notion, a sheet). That is campaign-builder.
  • The literal outreach copy. That lives on the operator's private campaigns page; the outreach skills (later) carry the framework.

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.