Skip to content

/safe-write-operations

Reference — rules for safely executing write/destructive operations against ad accounts. Always loaded into the performance-marketer agent.

From plugin
414 skills1 agents7 commands1 MCP
shell
$ npx -y skills add markifact/markifact-mcp --skill safe-write-operations --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/safe-write-operations
How auto-invocation works

Context preview

The summary Claude sees to decide when to auto-load this skill.

Reference — rules for safely executing write/destructive operations against ad accounts. Always loaded into the performance-marketer agent.

SKILL.md

safe-write-operations.SKILL.md
name: safe-write-operations
description: Reference — rules for safely executing write/destructive operations against ad accounts. Always loaded into the performance-marketer agent.
user-invocable: false

Safe write operations

Calls to `run_write_operation` can **spend money, pause campaigns, change budgets, edit live creatives, send emails, or charge customers**. Treat every one as a production change.

When this protocol applies

The trigger is the **`requires_approval: true`** flag on the operation in the `find_operations` response. If `requires_approval: true`, you **must** use `run_write_operation` and **must** follow the four-step protocol below. If `requires_approval: false`, use `run_operation` and skip this protocol — no confirmation needed.

The four-step write protocol

**Always** follow this exact sequence before calling `run_write_operation`:

1. **State the change in plain English.** Include the platform, account, object name/ID, and what will change. Example: > "I'm about to **pause** the Google Ads campaign **'Brand — US Search'** (ID `1234567890`) in account **Acme US (MCC 999-888-7777)**. This will stop spend immediately." 2. **State the blast radius.** What spend, traffic, revenue, or audience is affected? Pull a quick number from `run_operation` if you don't know. 3. **Ask for explicit confirmation.** Wait for a yes. "Looks good", "go ahead", or "do it" all count. Anything ambiguous = ask again. 4. **Execute, then verify.** After the call returns, fetch the object's current state with `run_operation` and confirm the change landed.

Hard rules

  • **Never batch more than 5 write operations without re-confirming.** If a workflow needs 20 pauses, do the first 5, summarise, ask "continue with the next batch?".
  • **Never delete** unless the user said "delete" (not "remove", not "pause"). Prefer pause/disable over delete every time.
  • **Never change budgets by more than 50%** in a single call without an extra confirmation step. Big budget moves are easy to fat-finger.
  • **Never run a write operation immediately after a model-invoked discovery.** The user must have asked for the change in their own words first.
  • **Never assume a connection.** If the user has multiple Google Ads accounts and didn't specify, ask.

Always check before executing

  • **"Will this reset learning?"** On Meta, budget shifts > 20%, audience changes > 10%, placement changes, optimization-event changes, and major creative swaps reset the ad set's learning phase (~7 days of degraded performance). On Google Ads, switching bid strategies resets learning (~1–2 weeks). Warn the user explicitly when a planned change will trigger a reset.
  • **"Does this change require fresh ID lookup?"** Structural changes (creating a new RSA, replacing a Meta creative, creating a new ad set) return new IDs. Don't reuse stale IDs from earlier in the conversation after a structural change — re-fetch.
  • **"Is there a dedicated op for this?"** On Google Ads, `gads_mutate` is the last-resort generic. If a dedicated op exists (e.g. `gads_update_campaign_budget`), use it — clearer intent, better validation, fewer footguns.

When `run_write_operation` errors

  • Auth error → user must reconnect at <https://www.markifact.com/app/connections>. Stop, don't retry.
  • Validation error → re-fetch the operation schema with `get_operation_inputs`, fix the payload, ask the user to confirm the corrected call before retrying.
  • Rate limit / quota → back off, do not retry in a loop.
Read more
Read it on GitHub ↗
Ships withmarkifact

Manage Google Ads, Meta Ads, TikTok Ads, LinkedIn Ads, Microsoft Ads, Reddit Ads, Pinterest Ads, Snapchat Ads, Amazon Ads, DV360, GA4, BigQuery, Google Search Console, Google Business Profile, Google Merchant Center, Facebook, Instagram, LinkedIn, Shopify,

Get the whole plugin, auto-invoked
Stats
41
Stars
0
Views
4
Forks
Maintained
Maintenance
Shell
Language
MIT
License
2mo ago
Last commit
3mo ago
Created

Repo: markifact/markifact-mcp