Install
$ agentstack add skill-mujtaba3b-mutwo-skills-campaign-tag ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
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 →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
- Build a tag. Gather the four parts (ask only for what is missing): channel, delivery method, event, audience/offer. Run
build. Report the slug, theutm_*breakdown, and any note the engine raised (e.g. an unrecognized channel worth double-checking). - 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 viabuild. - Make a link. When the user wants the tracked URL, run
qsand 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.
- Author: mujtaba3B
- Source: mujtaba3B/mutwo-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.