agentleFS
gomarble-aigomarble-ai/marketing-agent/skills/manage-campaigns/SKILL.md

manage-campaigns

Skill15 starsChanged 38 days agoMITView on GitHub

Use when the user asks to change something in a live Meta or Google Ads account: pause or enable, rename, change a bid or bid strategy, edit targeting or schedule, update ad copy, URLs or tracking, add sitelinks or other assets, adjust device, location or ad-schedule modifiers, edit PMax asset groups, or run, end or apply an experiment. Picks the right GoMarble propose tool, shows the exact change, and applies it only after the user approves.

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 0 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈0

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Check the rules: Read meta-guardrails or google-ads-guardrails.

    line 13
  2. Very specific:

    Dry run: Call the propose tool with one item per field change, so each can be approved on its own.

    line 14
  3. Very specific:

    Apply only on an explicit yes: Call the same tool with mode: "live", the account_id and only the approved operation_ids.

    line 16
  4. Very specific:

    Before pausing, scaling or changing the optimization event on a sales campaign that optimizes for COMPLETE_REGISTRATION, read …

    line 30

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Manage campaigns

Make any account change safely: the right tool, the exact edit, the user's yes, then the change. For budget moves use shift-budget, for exclusions and negatives clean-wasted-spend, and for new campaigns launch-campaigns. For TikTok changes see tiktok-ads.

The flow for every change

  1. Read current state first. Campaigns change often, so never propose from stale data.
  2. Check the rules. Read meta-guardrails or google-ads-guardrails. For Google mutations, google-ads-create-master-skill is the master reference. For Meta changes, meta-agent-operations.
  3. Dry run. Call the propose tool with one item per field change, so each can be approved on its own. Pass money in account currency with currency_code.
  4. Show the change. For each item: the entity, current value, new value, and why. Warn when it matters: a bid strategy change resets learning; budget increases over 100% or cuts over 50%; daily vs lifetime budget; pausing stops delivery immediately.
  5. Apply only on an explicit yes. Call the same tool with mode: "live", the account_id and only the approved operation_ids. Don't resend the fields. GoMarble doesn't double-check that the user agreed, so that yes must come from the user in this conversation.
  6. Confirm what changed. For Google, the live call runs Google's validation first; if it rejects, explain the error rather than retrying blindly.

Meta Ads

ChangeRead firstPropose with
Campaign status, name, bid strategy, spend cap, budget, per-ad-set bid amountsfacebook_get_campaign_detailsfacebook_propose_update_campaigns
Ad set status, targeting, schedule, optimization goal, bid, frequency cap, attributionfacebook_get_adset_detailsfacebook_propose_update_adsets. Targeting is a full replacement: send the whole targeting spec. You can't switch between manual and Advantage+ placements.
Ad status, name, URL tags, tracking, destination or CTAfacebook_list_adsfacebook_propose_update_ads. Turning a paused ad on needs its thumbnail_url. Images and videos can't be swapped on an existing ad.
Creative name or statusfacebook_get_ad_creative_detailsfacebook_propose_update_ad_creatives (name and status only)
Creative textfacebook_get_ad_creative_detailsfacebook_propose_clone_ad_creative with the new text. Meta doesn't allow editing text in place.
Duplicate a campaign, ad set or adfacebook_propose_clone_campaign, facebook_propose_clone_adset, facebook_propose_clone_ad (clones start paused)

Before pausing, scaling or changing the optimization event on a sales campaign that optimizes for COMPLETE_REGISTRATION, read meta-custom-event-interpretation. Never pause the top-converting ad in an ad set.

Google Ads

ChangePropose with
Campaign status, name, dates, bid strategy and targets, networks, frequency caps, locations, languages, campaign negatives, content exclusions, conversion goalsgoogle_ads_propose_update_campaigns (call google_ads_get_currency first)
Ad group status, name, CPC bids, keywords (add, pause, enable, change match type), audiences, topics, placements, Shopping listing groupsgoogle_ads_propose_update_adgroups. Get criterion IDs with google_ads_run_gaql first.
Ad status, final URLs, tracking template, RSA headlines and descriptionsgoogle_ads_propose_update_ads. RSA text replaces the whole list, so send every headline or description, not just the changed one.
New sitelinks, structured snippets, image assetsgoogle_ads_propose_create_asset
Edit an asset or pause its linkgoogle_ads_propose_update_asset (pausing is the soft delete)
Device, location or ad-schedule modifiersgoogle_ads_propose_update_bid_modifiers (0.1–10; 0 excludes a device; ad groups support device only)
PMax asset groups: status, URLs, audience signals, add or remove headlines, images, videosgoogle_ads_propose_update_pmax_asset_group (one item per asset group)
Start an experiment on a Search campaigngoogle_ads_propose_create_experiment (read google-ads-create-master-skill → references/experiment.md)
End, graduate or promote an experimentgoogle_ads_propose_update_experiment

Keyword and bid work on Search follows google-ads-search-execution: never raise bids with Q4/Q5 search terms present, and never raise bids and budget together.

Microsoft Ads and LinkedIn

The connector reads these platforms but can't change them. Give the user the exact change to make in their ads manager.

When a change is refused

  • Needs a permission: the tool returns a re-authorization link. Share it, and offer the recommendation in the meantime.
  • Plan limit reached: explain which limit was hit and that the workspace owner manages the plan in GoMarble (plan details: gomarble.ai/pricing). Don't share upgrade or checkout links; offer the recommendation so the user can apply it in the ad platform.
  • Read-only connection or team permission: say who can grant write access (the workspace owner, or Settings → Integrations in GoMarble).
  • Governance policy block: say which limit applied. Don't try to work around it.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.