agentleFS
gomarble-aigomarble-ai/marketing-agent/skills/meta-agent-operations/SKILL.md

meta-agent-operations

Skill15 starsChanged 36 days agoMITView on GitHub

Use when proposing or executing Meta Ads changes: propose/execute workflow, campaign/adset/ad update rules, currency in cents.

The file

We split this skill into the rules it gives an agent

11 rules. About 0 are common, 5 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

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

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

    Call the appropriate propose tool with mode: "dryrun".

    line 14
  2. Very specific:

    Call the same propose tool with mode: "live" and only the approved operation_ids — there is NO separate execute tool …

    line 16
  3. Distinctive:

    ALL Meta propose tools — the create launch AND every update tool — take budgets/bids in account currency, human-readable (50 means $50, 300 …

    line 20
  4. Distinctive:

    Always retrieve ad account details to confirm currency before proposing budget changes

    line 22
  5. Very specific:

    CRITICAL — Targeting is full-replacement: When changing targeting, new_state must contain the COMPLETE targeting object (geo_locations, …

    line 36
  6. Distinctive:

    CBO budget gating: If the parent campaign uses Campaign Budget Optimization (CBO), ad set-level budget changes are controlled by the …

    line 38
  7. Very specific:

    CRITICAL — Creative requires complete object: When updating creative fields (CTA, destination URL), provide the COMPLETE object_story_spec …

    line 47
  8. Distinctive:

    Update product set for catalog ads (not supported at ad level)

    line 52
  9. Very specific:

    Self-discovery: Before proposing any ad/creative update, use facebook_get_ad_creative_details to fetch IDs and current state.

    line 67
  10. Very specific:

    Only name and status (ACTIVE, IN_PROCESS, WITH_ISSUES, DELETED) are updatable on existing creatives.

    line 70
  11. Distinctive:

    Always distinguish daily vs lifetime budget

    line 75

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

Meta Ads - Agent Operations

Rules for proposing and executing changes on Meta Ads via propose tools: dry run first, then apply with mode: "live" after the user approves.

General Workflow

  1. Describe the intended change in plain language to the user
  2. Call the appropriate propose tool with mode: "dryrun". It validates the change and returns operation_ids; nothing changes yet.
  3. Show the user every proposed change (entity, current value, new value) and wait for an explicit yes.
  4. Call the same propose tool with mode: "live" and only the approved operation_ids — there is NO separate execute tool (facebook_execute_approved_operation no longer exists; never call it). That response includes the execution result and any new/updated IDs.
  5. Confirm outcome to the user

Currency Rules

  • ALL Meta propose tools — the create launch AND every update tool — take budgets/bids in account currency, human-readable (50 means $50, 300 means ₹300). The SERVER converts to cents. Never pass cents (5000 for $50 would set a 100× budget).
  • Values returned by facebook_get_campaign_details / adset details are already in account currency; only Meta's raw insights/account_structure budget fields are in cents (divide by 100 for display).
  • Always retrieve ad account details to confirm currency before proposing budget changes
  • Display amounts with correct currency symbol — never assume USD
  • Show before/after: "Current: $100.00/day → Proposed: $120.00/day (+20%)"

Campaign Updates (facebook_propose_update_campaigns)

Supported fields: name, status (ACTIVE/PAUSED), objective, daily_budget, lifetime_budget, bid_strategy, spend_cap, pacing_type — all money fields in ACCOUNT CURRENCY (server converts to cents)

  • buying_type is read-only after creation — will fail if changed
  • daily_budget and lifetime_budget cannot coexist
  • Pass spend_cap: 0 (or null) to REMOVE the cap — the server substitutes Meta's max-int sentinel itself. Never pass the sentinel directly (it would be currency-converted and overflow)
  • One array entry per field change for independent user approval

Ad Set Updates (facebook_propose_update_adsets)

Supported fields: name, status, daily_budget, lifetime_budget, targeting, bid_strategy, bid_amount, optimization_goal, billing_event, destination_type, start_time, end_time, frequency_control_specs, attribution_spec — money fields in ACCOUNT CURRENCY (server converts)

CRITICAL — Targeting is full-replacement: When changing targeting, new_state must contain the COMPLETE targeting object (geo_locations, age_min, age_max, genders, flexible_spec, custom_audiences, etc.) — not just changed parts. Omitted fields get removed.

CBO budget gating: If the parent campaign uses Campaign Budget Optimization (CBO), ad set-level budget changes are controlled by the campaign. NEVER propose ad set budgets on a CBO campaign.

Do NOT include publisher_platforms in targeting — switching between manual and Advantage+ placements is not supported via this tool.

Product set: promoted_object (including product_set_id) is immutable on ad sets, and NO update tool can change a catalog ad's product set (the ad-level update schema has no product_set_id either). Direct the user to Ads Manager, or propose a fresh ad with the new product set.

Ad Updates (facebook_propose_update_ads)

Supported fields: name, status, creative (URL + CTA only), url_tags (UTM parameters), tracking_specs

CRITICAL — Creative requires complete object: When updating creative fields (CTA, destination URL), provide the COMPLETE object_story_spec including page_id and ALL link_data fields. Omitted fields get cleared.

NOT supported (do not propose):

  • Swap image/video (requires binary upload)
  • Change primary text, headline, or description (creates new ad instead — suggest this to user)
  • Update product set for catalog ads (not supported at ad level)

Creative structure for URL/CTA changes:

{
  "object_story_spec": {
    "page_id": "<PAGE_ID>",
    "link_data": {
      "link": "https://destination-url.com",
      "call_to_action": { "type": "SHOP_NOW", "value": { "link": "https://..." } }
    }
  }
}

Self-discovery: Before proposing any ad/creative update, use facebook_get_ad_creative_details to fetch IDs and current state. Never ask the user for creative IDs.

Ad Creative Updates (facebook_propose_update_ad_creatives)

Only name and status (ACTIVE, IN_PROCESS, WITH_ISSUES, DELETED) are updatable on existing creatives. No other fields can be updated — Meta API creates a new creative instead. If user requests text/image/video changes, explain this limitation and suggest creating a new creative.

Budget Change Guardrails

  • Budget increase > 100%: warn user this is a major increase, confirm intent
  • Budget decrease > 50%: warn user this significantly reduces reach and performance
  • Always distinguish daily vs lifetime budget
  • Max recommended scaling: 20% at once (from guardrails)

Status Change Warnings

  • Pausing: Traffic and spending stop immediately
  • DELETED: Permanent, cannot be undone — require explicit confirmation
  • ARCHIVED: Reversible — can be unarchived (set back to PAUSED)

Bidding Changes

  • Changing bid strategy resets the learning phase — always warn user
  • Display bids in human-readable format: "Cost Cap: $15.00" not "bid_amount: 1500"
  • Target CPA / Target ROAS require sufficient conversion history

Common CTA Types

SHOP_NOW, LEARN_MORE, SIGN_UP, BOOK_NOW, CONTACT_US, DOWNLOAD, GET_OFFER, BUY_NOW, SUBSCRIBE, ORDER_NOW, APPLY_NOW, GET_QUOTE, WHATSAPP_MESSAGE, CALL_NOW, NO_BUTTON

Dynamic URL Macros

{{campaign.id}}, {{campaign.name}}, {{adset.id}}, {{adset.name}}, {{ad.id}}, {{ad.name}}, {{placement}}, {{site_source_name}}

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.