Meta Ads — Printing Press CLI Prerequisites: Install the CLI This skill drives the binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first: 1. Install via the Printing Press installer: 2. Verify: 3. Ensure (or ) is on . If the install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer): If reports "command not found" after install, the install step did not put the binary on . Do not proceed with skill commands until verification succeeds. Read-only insights CLI for Meta Marketing AP…

\n CampaignId:\n name: campaignId\n in: path\n required: true\n description: Campaign ID (numeric string)\n schema:\n type: string\n AdSetId:\n name: adSetId\n in: path\n required: true\n description: Ad set ID (numeric string)\n schema:\n type: string\n AdId:\n name: adId\n in: path\n required: true\n description: Ad ID (numeric string)\n schema:\n type: string\n CreativeId:\n name: creativeId\n in: path\n required: true\n description: Creative ID (numeric string)\n schema:\n type: string\n AudienceId:\n name: audienceId\n in: path\n required: true\n description: Custom audience ID (numeric string)\n schema:\n type: string\n Fields:\n name: fields\n in: query\n description: Comma-separated list of fields to return\n schema:\n type: string\n Limit:\n name: limit\n in: query\n description: Maximum results per page (default 25, max 500)\n schema:\n type: integer\n minimum: 1\n maximum: 500\n DatePreset:\n name: date_preset\n in: query\n description: |\n Preset time window. Common values: today, yesterday, this_week_mon_today,\n last_7d, last_14d, last_28d, last_30d, last_90d, this_month, last_month.\n schema:\n type: string\n TimeRange:\n name: time_range\n in: query\n description: |\n JSON-encoded time range, e.g., {\"since\":\"2026-01-01\",\"until\":\"2026-01-31\"}.\n Mutually exclusive with date_preset.\n schema:\n type: string\n TimeIncrement:\n name: time_increment\n in: query\n description: |\n Group results into N-day buckets. Use \"1\" for daily series (required\n for fatigue detection). Use \"monthly\" for monthly summary.\n schema:\n type: string\n Breakdowns:\n name: breakdowns\n in: query\n description: |\n Comma-separated breakdowns. Compatible groups: age, gender, country,\n region, placement, publisher_platform, platform_position, device_platform.\n Some combinations are not allowed by Meta (e.g., age+placement).\n schema:\n type: string\n Level:\n name: level\n in: query\n description: Aggregation level (account, campaign, adset, ad)\n schema:\n type: string\n enum: [account, campaign, adset, ad]\n\n schemas:\n AdAccountList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/AdAccount'\n paging:\n $ref: '#/components/schemas/Paging'\n\n AdAccount:\n type: object\n properties:\n id:\n type: string\n description: Prefixed form, e.g., act_1234567890\n account_id:\n type: string\n description: Bare numeric form, e.g., 1234567890\n name:\n type: string\n account_status:\n type: integer\n description: 1=ACTIVE, 2=DISABLED, 3=UNSETTLED, 7=PENDING_RISK_REVIEW, 9=IN_GRACE_PERIOD, 100=PENDING_CLOSURE, 101=CLOSED, 201=ANY_ACTIVE, 202=ANY_CLOSED\n currency:\n type: string\n timezone_name:\n type: string\n amount_spent:\n type: string\n balance:\n type: string\n spend_cap:\n type: string\n business:\n type: object\n created_time:\n type: string\n format: date-time\n\n CampaignList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/Campaign'\n paging:\n $ref: '#/components/schemas/Paging'\n\n Campaign:\n type: object\n properties:\n id:\n type: string\n name:\n type: string\n status:\n type: string\n description: ACTIVE | PAUSED | DELETED | ARCHIVED\n effective_status:\n type: string\n description: |\n Live delivery state - what Meta is ACTUALLY doing. Differs from\n status when there are issues. Values include ACTIVE, PAUSED,\n DELETED, PENDING_REVIEW, DISAPPROVED, PREAPPROVED, PENDING_BILLING_INFO,\n CAMPAIGN_PAUSED, ARCHIVED, ADSET_PAUSED, IN_PROCESS, WITH_ISSUES.\n objective:\n type: string\n description: OUTCOME_AWARENESS | OUTCOME_TRAFFIC | OUTCOME_ENGAGEMENT | OUTCOME_LEADS | OUTCOME_APP_PROMOTION | OUTCOME_SALES\n daily_budget:\n type: string\n lifetime_budget:\n type: string\n start_time:\n type: string\n format: date-time\n stop_time:\n type: string\n format: date-time\n created_time:\n type: string\n format: date-time\n updated_time:\n type: string\n format: date-time\n special_ad_categories:\n type: array\n items:\n type: string\n\n AdSetList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/AdSet'\n paging:\n $ref: '#/components/schemas/Paging'\n\n AdSet:\n type: object\n properties:\n id:\n type: string\n name:\n type: string\n campaign_id:\n type: string\n status:\n type: string\n effective_status:\n type: string\n daily_budget:\n type: string\n lifetime_budget:\n type: string\n bid_strategy:\n type: string\n optimization_goal:\n type: string\n billing_event:\n type: string\n targeting:\n type: object\n description: Full targeting spec (geo, demographics, interests, behaviors)\n start_time:\n type: string\n format: date-time\n end_time:\n type: string\n format: date-time\n configured_status:\n type: string\n learning_stage_info:\n type: object\n description: Indicates whether the adset is in the algorithmic learning phase\n properties:\n status:\n type: string\n description: LEARNING | SUCCESS | FAIL\n attribution_windows:\n type: array\n items:\n type: string\n\n AdList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/Ad'\n paging:\n $ref: '#/components/schemas/Paging'\n\n Ad:\n type: object\n properties:\n id:\n type: string\n name:\n type: string\n adset_id:\n type: string\n campaign_id:\n type: string\n creative:\n $ref: '#/components/schemas/CreativeRef'\n status:\n type: string\n effective_status:\n type: string\n created_time:\n type: string\n format: date-time\n updated_time:\n type: string\n format: date-time\n\n CreativeRef:\n type: object\n properties:\n id:\n type: string\n creative_id:\n type: string\n\n CreativeList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/Creative'\n paging:\n $ref: '#/components/schemas/Paging'\n\n Creative:\n type: object\n properties:\n id:\n type: string\n name:\n type: string\n title:\n type: string\n body:\n type: string\n image_url:\n type: string\n thumbnail_url:\n type: string\n object_type:\n type: string\n call_to_action_type:\n type: string\n effective_object_story_id:\n type: string\n\n InsightsList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/InsightsRow'\n paging:\n $ref: '#/components/schemas/Paging'\n\n InsightsRow:\n type: object\n description: |\n One row of insights metrics. Field set varies by level and breakdowns.\n Currency normalization is per-ad-account (not per-ad) - read the\n ad account's currency field for proper aggregation.\n properties:\n account_id:\n type: string\n description: Bare numeric ID\n account_name:\n type: string\n campaign_id:\n type: string\n campaign_name:\n type: string\n adset_id:\n type: string\n adset_name:\n type: string\n ad_id:\n type: string\n ad_name:\n type: string\n date_start:\n type: string\n date_stop:\n type: string\n impressions:\n type: string\n reach:\n type: string\n frequency:\n type: string\n spend:\n type: string\n cpm:\n type: string\n cpp:\n type: string\n ctr:\n type: string\n cpc:\n type: string\n clicks:\n type: string\n unique_clicks:\n type: string\n actions:\n type: array\n items:\n type: object\n properties:\n action_type:\n type: string\n value:\n type: string\n action_values:\n type: array\n items:\n type: object\n cost_per_action_type:\n type: array\n items:\n type: object\n purchase_roas:\n type: array\n items:\n type: object\n\n CustomAudienceList:\n type: object\n properties:\n data:\n type: array\n items:\n $ref: '#/components/schemas/CustomAudience'\n paging:\n $ref: '#/components/schemas/Paging'\n\n CustomAudience:\n type: object\n properties:\n id:\n type: string\n name:\n type: string\n description:\n type: string\n subtype:\n type: string\n description: CUSTOM | LOOKALIKE | WEBSITE | etc.\n approximate_count_lower_bound:\n type: integer\n approximate_count_upper_bound:\n type: integer\n time_created:\n type: string\n time_updated:\n type: string\n operation_status:\n type: object\n lookalike_spec:\n type: object\n\n DeliveryEstimate:\n type: object\n properties:\n data:\n type: array\n items:\n type: object\n properties:\n daily_outcomes_curve:\n type: array\n items:\n type: object\n estimate_ready:\n type: boolean\n estimate_dau:\n type: integer\n estimate_mau_lower_bound:\n type: integer\n estimate_mau_upper_bound:\n type: integer\n\n Paging:\n type: object\n properties:\n cursors:\n type: object\n properties:\n before:\n type: string\n after:\n type: string\n next:\n type: string\n previous:\n type: string\n","content_type":"application/yaml; charset=utf-8","language":"yaml","size":23645,"content_sha256":"09f776114bf87e002e083cba58d9823d9e21159953b92903024b60e96e5ddbc3"},{"filename":"tools-manifest.json","content":"{\n \"api_name\": \"meta-ads\",\n \"base_url\": \"https://graph.facebook.com/v19.0\",\n \"description\": \"The first agent-native Meta Ads CLI with local SQLite history and compound queries the live API cannot answer.\",\n \"mcp_ready\": \"full\",\n \"http_transport\": \"standard\",\n \"auth\": {\n \"type\": \"bearer_token\",\n \"header\": \"Authorization\",\n \"env_vars\": [\n \"META_ACCESS_TOKEN\"\n ],\n \"env_var_specs\": [\n {\n \"name\": \"META_ACCESS_TOKEN\",\n \"kind\": \"per_call\",\n \"required\": true,\n \"sensitive\": true,\n \"inferred\": true\n }\n ],\n \"key_url\": \"https://developers.facebook.com/docs/marketing-api/access\"\n },\n \"required_headers\": [],\n \"tools\": [\n {\n \"name\": \"adcreatives_list-ad-creatives\",\n \"description\": \"Get creatives attached to an ad. Required: adId. Returns array of Creative.\",\n \"method\": \"GET\",\n \"path\": \"/{adId}/adcreatives\",\n \"params\": [\n {\n \"name\": \"adId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad ID (numeric string)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"ads_list\",\n \"description\": \"List ads in an ad account. Required: adAccountId. Returns array of Ad.\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/ads\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"adsets_list-ad-sets\",\n \"description\": \"Returns ad sets with targeting summary, budget, optimization goal, and bid strategy. Includes learning_phase metadata when adsets are still exiting the algorithm's learning window. Required: adAccountId.\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/adsets\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"campaigns_list\",\n \"description\": \"Returns campaigns with status, objective, and budget metadata. Use effective_status (not status) for the live delivery state - status is what you set; effective_status is what Meta is actually doing. Required: adAccountId. Optional: effective_status.\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/campaigns\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n },\n {\n \"name\": \"effective_status\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Filter by effective status array, e.g. ['ACTIVE','PAUSED']\"\n }\n ]\n },\n {\n \"name\": \"customaudiences_list-custom-audiences\",\n \"description\": \"List custom audiences in an ad account. Required: adAccountId. Returns array of CustomAudience.\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/customaudiences\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n }\n ]\n },\n {\n \"name\": \"delivery-estimate_get\",\n \"description\": \"Get reach/impressions delivery estimate. Required: adAccountId. Optional: targeting_spec, optimization_goal. Returns array of DeliveryEstimateGetItem.\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/delivery_estimate\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n },\n {\n \"name\": \"targeting_spec\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"JSON-encoded targeting specification\"\n },\n {\n \"name\": \"optimization_goal\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Optimization goal\"\n }\n ]\n },\n {\n \"name\": \"insights_get-account\",\n \"description\": \"Returns aggregated insights across the entire ad account. Requires either time_range or date_preset - there is no default time window. Breakdowns are mutually exclusive in groups (age+gender works, age+placement does not). Required: adAccountId. Optional: date_preset, time_range, time_increment (plus 2 more).\",\n \"method\": \"GET\",\n \"path\": \"/{adAccountId}/insights\",\n \"params\": [\n {\n \"name\": \"adAccountId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad account ID with 'act_' prefix (e.g., act_1234567890)\",\n \"required\": true\n },\n {\n \"name\": \"date_preset\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Preset time window. Common values: today, yesterday, this_week_mon_today, last_7d, last_14d,...\"\n },\n {\n \"name\": \"time_range\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"JSON-encoded time range, e.\"\n },\n {\n \"name\": \"time_increment\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Group results into N-day buckets.\"\n },\n {\n \"name\": \"breakdowns\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Comma-separated breakdowns.\"\n },\n {\n \"name\": \"level\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Aggregation level (account, campaign, adset, ad)\"\n }\n ]\n },\n {\n \"name\": \"insights_get-ad\",\n \"description\": \"Ad-level insights with frequency, CPM, CTR over time. With time_increment=1 and a date_preset like last_30d, this returns the daily series that powers creative-fatigue detection. Required: adId. Optional: date_preset, time_range, time_increment (plus 1 more).\",\n \"method\": \"GET\",\n \"path\": \"/{adId}/insights\",\n \"params\": [\n {\n \"name\": \"adId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad ID (numeric string)\",\n \"required\": true\n },\n {\n \"name\": \"date_preset\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Preset time window. Common values: today, yesterday, this_week_mon_today, last_7d, last_14d,...\"\n },\n {\n \"name\": \"time_range\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"JSON-encoded time range, e.\"\n },\n {\n \"name\": \"time_increment\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Group results into N-day buckets.\"\n },\n {\n \"name\": \"breakdowns\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Comma-separated breakdowns.\"\n }\n ]\n },\n {\n \"name\": \"insights_get-ad-set\",\n \"description\": \"Get ad set-level insights. Required: adSetId. Optional: date_preset, time_range, time_increment (plus 1 more). Returns array of InsightsRow.\",\n \"method\": \"GET\",\n \"path\": \"/{adSetId}/insights\",\n \"params\": [\n {\n \"name\": \"adSetId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Ad set ID (numeric string)\",\n \"required\": true\n },\n {\n \"name\": \"date_preset\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Preset time window. Common values: today, yesterday, this_week_mon_today, last_7d, last_14d,...\"\n },\n {\n \"name\": \"time_range\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"JSON-encoded time range, e.\"\n },\n {\n \"name\": \"time_increment\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Group results into N-day buckets.\"\n },\n {\n \"name\": \"breakdowns\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Comma-separated breakdowns.\"\n }\n ]\n },\n {\n \"name\": \"insights_get-campaign\",\n \"description\": \"Get campaign-level insights. Required: campaignId. Optional: date_preset, time_range, time_increment (plus 1 more). Returns array of InsightsRow.\",\n \"method\": \"GET\",\n \"path\": \"/{campaignId}/insights\",\n \"params\": [\n {\n \"name\": \"campaignId\",\n \"type\": \"string\",\n \"location\": \"path\",\n \"description\": \"Campaign ID (numeric string)\",\n \"required\": true\n },\n {\n \"name\": \"date_preset\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Preset time window. Common values: today, yesterday, this_week_mon_today, last_7d, last_14d,...\"\n },\n {\n \"name\": \"time_range\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"JSON-encoded time range, e.\"\n },\n {\n \"name\": \"time_increment\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Group results into N-day buckets.\"\n },\n {\n \"name\": \"breakdowns\",\n \"type\": \"string\",\n \"location\": \"query\",\n \"description\": \"Comma-separated breakdowns.\"\n }\n ]\n },\n {\n \"name\": \"me_list-ad-accounts\",\n \"description\": \"Returns every ad account the access token has been granted access to. Use this on first run to discover which accounts you can query.\",\n \"method\": \"GET\",\n \"path\": \"/me/adaccounts\",\n \"params\": []\n }\n ]\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":10133,"content_sha256":"c4b82914139d4f1923f33e7ff96604db543da0f3e9ddafbf00becf85cb1f548b"},{"filename":"workflow-verify-report.json","content":"{\n \"dir\": \"\\u003ccli-dir\\u003e/meta-ads-pp-cli\",\n \"workflows\": null,\n \"verdict\": \"workflow-pass\",\n \"issues\": [\n \"no workflow manifest found, skipping\"\n ]\n}","content_type":"application/json; charset=utf-8","language":"json","size":163,"content_sha256":"9b5ff06290f86e13e7b11d4b4a97d0cb1ab81c64fcd92c740d12400622de3b2d"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Meta Ads — Printing Press CLI","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Prerequisites: Install the CLI","type":"text"}]},{"type":"paragraph","content":[{"text":"This skill drives the ","type":"text"},{"text":"meta-ads-pp-cli","type":"text","marks":[{"type":"code_inline"}]},{"text":" binary. ","type":"text"},{"text":"You must verify the CLI is installed before invoking any command from this skill.","type":"text","marks":[{"type":"strong"}]},{"text":" If it is missing, install it first:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Install via the Printing Press installer:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"npx -y @mvanhorn/printing-press-library install meta-ads --cli-only","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verify: ","type":"text"},{"text":"meta-ads-pp-cli --version","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Ensure ","type":"text"},{"text":"$GOPATH/bin","type":"text","marks":[{"type":"code_inline"}]},{"text":" (or ","type":"text"},{"text":"$HOME/go/bin","type":"text","marks":[{"type":"code_inline"}]},{"text":") is on ","type":"text"},{"text":"$PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"If the ","type":"text"},{"text":"npx","type":"text","marks":[{"type":"code_inline"}]},{"text":" install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer):","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"go install github.com/mvanhorn/printing-press-library/library/marketing/meta-ads/cmd/meta-ads-pp-cli@latest","type":"text"}]},{"type":"paragraph","content":[{"text":"If ","type":"text"},{"text":"--version","type":"text","marks":[{"type":"code_inline"}]},{"text":" reports \"command not found\" after install, the install step did not put the binary on ","type":"text"},{"text":"$PATH","type":"text","marks":[{"type":"code_inline"}]},{"text":". Do not proceed with skill commands until verification succeeds.","type":"text"}]},{"type":"paragraph","content":[{"text":"Read-only insights CLI for Meta Marketing API focused on creative-fatigue detection, audience overlap analysis, and attribution forensics. Daily insights land in a local SQLite store so commands like ","type":"text"},{"text":"fatigue","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"decay","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"learning","type":"text","marks":[{"type":"code_inline"}]},{"text":", and ","type":"text"},{"text":"reconcile","type":"text","marks":[{"type":"code_inline"}]},{"text":" can join across history. Single META_ACCESS_TOKEN env var with ","type":"text"},{"text":"ads_read","type":"text","marks":[{"type":"code_inline"}]},{"text":" scope.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"When to Use This CLI","type":"text"}]},{"type":"paragraph","content":[{"text":"Use this CLI when you need creative-fatigue diagnostics, audience overlap cartography, learning-phase forensics, or attribution drift detection across Meta ad accounts. Best when paired with a daily sync into the local store so trend queries are instant. Read-only by design — never used to modify campaigns, budgets, or audiences.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Anti-triggers","type":"text"}]},{"type":"paragraph","content":[{"text":"Do not use this CLI for:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do not use this CLI to create, pause, modify, or delete campaigns, adsets, ads, audiences, or creatives — it is read-only.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do not use this CLI for budget management or bid-strategy changes — that is what Meta Ads Manager or facebook-business-sdk are for.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Do not use this CLI for write-side audience uploads — custom audience creation from customer files is out of scope.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Unique Capabilities","type":"text"}]},{"type":"paragraph","content":[{"text":"These capabilities aren't available in any other tool for this API.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Local state that compounds","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"fatigue","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Detect ads whose CPM is drifting up, frequency is climbing, and CTR is falling across a configurable window.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use this to decide which ads to retire. Spending on a fatigued creative is the highest-leverage waste in any account.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli fatigue --campaign 23847265 --window 14d --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"decay","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Compare a creative's first-impression CTR against its current CTR, with projected dead-date.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use for retire/refresh decisions on a single creative. The slope and projected dead-date are the deciding factor.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli decay --creative-id 120208734567 --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"overlap","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Pairwise overlap percentages across custom audiences, with cannibalization recommendations.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use when ad strategy is mature and ROAS feels diluted across similar audiences. Surfaces consolidate-or-exclude decisions.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli overlap --audience 23847001 --audience 23847002 --audience 23847003 --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"learning","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Surface adsets stuck in algorithmic learning >N days with root-cause hint (budget too low, audience too narrow, events too sparse).","type":"text"}]},{"type":"paragraph","content":[{"text":"Use when ROAS collapses across multiple adsets simultaneously. Stuck-in-learning adsets eat budget without optimizing.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli learning --account act_4327210487520472 --min-days 7 --agent","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Forensic queries","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"reconcile","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Per-day diff between Meta-reported account spend and sum-of-insights spend; flags days where attribution drift exceeds threshold.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use monthly for attribution audits. Surfaces specific days where Meta and insights disagree, usually delayed conversion attribution.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli reconcile --account act_4327210487520472 --since 30d --threshold 5 --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"bottleneck","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Highest-spend adsets with worst ROAS, ranked with 'why' column joining learning state and effective status.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use weekly to decide what to pause. Highest-leverage targets surface first.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli bottleneck --account act_4327210487520472 --limit 10 --agent","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Account hygiene","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"stale","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Active ads with zero impressions in N days.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use quarterly for account hygiene. Active ads with zero impressions are usually misconfigured or post-deletion zombies.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli stale --days 90 --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"inventory","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" — Group every ad in an account by effective_status, surface ads where configured status='ACTIVE' but effective_status='WITH_ISSUES' or 'DISAPPROVED'.","type":"text"}]},{"type":"paragraph","content":[{"text":"Use first thing every morning. DISAPPROVED-but-still-ACTIVE ads cost real spend without delivering.","type":"text","marks":[{"type":"em"}]}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli inventory --account act_4327210487520472 --by effective_status --agent","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Command Reference","type":"text"}]},{"type":"paragraph","content":[{"text":"adcreatives","type":"text","marks":[{"type":"strong"}]},{"text":" — Manage adcreatives","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli adcreatives \u003cadId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Get creatives attached to an ad","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"ads","type":"text","marks":[{"type":"strong"}]},{"text":" — Ad-level read operations","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli ads \u003cadAccountId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — List ads in an ad account","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"adsets","type":"text","marks":[{"type":"strong"}]},{"text":" — Ad set-level read operations","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli adsets \u003cadAccountId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Returns ad sets with targeting summary, budget, optimization goal, and bid strategy.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"campaigns","type":"text","marks":[{"type":"strong"}]},{"text":" — Campaign-level read operations","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli campaigns \u003cadAccountId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Returns campaigns with status, objective, and budget metadata.","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"customaudiences","type":"text","marks":[{"type":"strong"}]},{"text":" — Manage customaudiences","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli customaudiences \u003cadAccountId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — List custom audiences in an ad account","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"delivery-estimate","type":"text","marks":[{"type":"strong"}]},{"text":" — Manage delivery estimate","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli delivery-estimate \u003cadAccountId>","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Get reach/impressions delivery estimate","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"insights","type":"text","marks":[{"type":"strong"}]},{"text":" — Performance and delivery insights (the creative-fatigue observatory)","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli insights get-account","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Returns aggregated insights across the entire ad account.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli insights get-ad","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Ad-level insights with frequency, CPM, CTR over time.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli insights get-ad-set","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Get ad set-level insights","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli insights get-campaign","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Get campaign-level insights","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"me","type":"text","marks":[{"type":"strong"}]},{"text":" — Manage me","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"meta-ads-pp-cli me","type":"text","marks":[{"type":"code_inline"}]},{"text":" — Returns every ad account the access token has been granted access to.","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Finding the right command","type":"text"}]},{"type":"paragraph","content":[{"text":"When you know what you want to do but not which command does it, ask the CLI directly:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli which \"\u003ccapability in your own words>\"","type":"text"}]},{"type":"paragraph","content":[{"text":"which","type":"text","marks":[{"type":"code_inline"}]},{"text":" resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code ","type":"text"},{"text":"0","type":"text","marks":[{"type":"code_inline"}]},{"text":" means at least one match; exit code ","type":"text"},{"text":"2","type":"text","marks":[{"type":"code_inline"}]},{"text":" means no confident match — fall back to ","type":"text"},{"text":"--help","type":"text","marks":[{"type":"code_inline"}]},{"text":" or use a narrower query.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Recipes","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Triage creative fatigue across a campaign","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli fatigue --campaign 23847265 --window 14d --agent --select ad_id,ad_name,cpm_slope,frequency_now,ctr_slope,verdict","type":"text"}]},{"type":"paragraph","content":[{"text":"Returns one row per ad with CPM slope, current frequency, CTR slope, and a retire/keep verdict. Narrow output by selecting only the fatigue-relevant fields to keep agent context bounded.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Find audience cannibalization risk","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli overlap --audience 23847001 --audience 23847002 --audience 23847003 --agent","type":"text"}]},{"type":"paragraph","content":[{"text":"Returns pairwise overlap percentages and a recommendation per pair. Anything above 30% is a candidate for consolidation or exclusion.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Spot stuck-in-learning adsets","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli learning --account act_4327210487520472 --min-days 7 --agent","type":"text"}]},{"type":"paragraph","content":[{"text":"Surfaces adsets where learning_stage_info has been LEARNING for >7 days. The 'why' column hints at budget/audience/event sparsity.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Daily inventory roll-up first thing","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli inventory --account act_4327210487520472 --by effective_status --agent","type":"text"}]},{"type":"paragraph","content":[{"text":"Groups every ad by effective_status. The DISAPPROVED-but-configured-ACTIVE class is the highest-leverage daily finding.","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Monthly spend reconciliation","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli reconcile --account act_4327210487520472 --since 30d --threshold 5 --agent","type":"text"}]},{"type":"paragraph","content":[{"text":"Per-day diff between Meta-reported account spend and sum-of-insights spend over the last 30 days. Flags days where drift exceeds 5%.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Auth Setup","type":"text"}]},{"type":"paragraph","content":[{"text":"Authenticate with a Meta access token in the META_ACCESS_TOKEN env var. Generate from Graph API Explorer (User Access Token, 1-2h lifespan) for ad-hoc use, or Business Manager System Users (no expiry) for repeat use. Grant ads_read scope only — never ads_management or any write permission. Token discovery via /me/adaccounts lists every account accessible to the token; no account ID configuration required.","type":"text"}]},{"type":"paragraph","content":[{"text":"Run ","type":"text"},{"text":"meta-ads-pp-cli doctor","type":"text","marks":[{"type":"code_inline"}]},{"text":" to verify setup.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Agent Mode","type":"text"}]},{"type":"paragraph","content":[{"text":"Add ","type":"text"},{"text":"--agent","type":"text","marks":[{"type":"code_inline"}]},{"text":" to any command. Expands to: ","type":"text"},{"text":"--json --compact --no-input --no-color --yes","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Pipeable","type":"text","marks":[{"type":"strong"}]},{"text":" — JSON on stdout, errors on stderr","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Filterable","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"--select","type":"text","marks":[{"type":"code_inline"}]},{"text":" keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli ads mock-value --agent --select id,name,status","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Previewable","type":"text","marks":[{"type":"strong"}]},{"text":" — ","type":"text"},{"text":"--dry-run","type":"text","marks":[{"type":"code_inline"}]},{"text":" shows the request without sending","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Offline-friendly","type":"text","marks":[{"type":"strong"}]},{"text":" — sync/search commands can use the local SQLite store when available","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Non-interactive","type":"text","marks":[{"type":"strong"}]},{"text":" — never prompts, every input is a flag","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read-only","type":"text","marks":[{"type":"strong"}]},{"text":" — do not use this CLI for create, update, delete, publish, comment, upvote, invite, order, send, or other mutating requests","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Response envelope","type":"text"}]},{"type":"paragraph","content":[{"text":"Commands that read from the local store or the API wrap output in a provenance envelope:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"meta\": {\"source\": \"live\" | \"local\", \"synced_at\": \"...\", \"reason\": \"...\"},\n \"results\": \u003cdata>\n}","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse ","type":"text"},{"text":".results","type":"text","marks":[{"type":"code_inline"}]},{"text":" for data and ","type":"text"},{"text":".meta.source","type":"text","marks":[{"type":"code_inline"}]},{"text":" to know whether it's live or local. A human-readable ","type":"text"},{"text":"N results (live)","type":"text","marks":[{"type":"code_inline"}]},{"text":" summary is printed to stderr only when stdout is a terminal AND no machine-format flag (","type":"text"},{"text":"--json","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--csv","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--compact","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--quiet","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--plain","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"--select","type":"text","marks":[{"type":"code_inline"}]},{"text":") is set — piped/agent consumers and explicit-format runs get pure JSON on stdout.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Agent Feedback","type":"text"}]},{"type":"paragraph","content":[{"text":"When you (or the agent) notice something off about this CLI, record it:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"meta-ads-pp-cli feedback \"the --since flag is inclusive but docs say exclusive\"\nmeta-ads-pp-cli feedback --stdin \u003c notes.txt\nmeta-ads-pp-cli feedback list --json --limit 10","type":"text"}]},{"type":"paragraph","content":[{"text":"Entries are stored locally at ","type":"text"},{"text":"~/.local/share/meta-ads-pp-cli/feedback.jsonl","type":"text","marks":[{"type":"code_inline"}]},{"text":". They are never POSTed unless ","type":"text"},{"text":"META_ADS_FEEDBACK_ENDPOINT","type":"text","marks":[{"type":"code_inline"}]},{"text":" is set AND either ","type":"text"},{"text":"--send","type":"text","marks":[{"type":"code_inline"}]},{"text":" is passed or ","type":"text"},{"text":"META_ADS_FEEDBACK_AUTO_SEND=true","type":"text","marks":[{"type":"code_inline"}]},{"text":". Default behavior is local-only.","type":"text"}]},{"type":"paragraph","content":[{"text":"Write what ","type":"text"},{"text":"surprised","type":"text","marks":[{"type":"em"}]},{"text":" you, not a bug report. Short, specific, one line: that is the part that compounds.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Output Delivery","type":"text"}]},{"type":"paragraph","content":[{"text":"Every command accepts ","type":"text"},{"text":"--deliver \u003csink>","type":"text","marks":[{"type":"code_inline"}]},{"text":". The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Sink","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Effect","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"stdout","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Default; write to stdout only","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"file:\u003cpath>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Atomically write output to ","type":"text"},{"text":"\u003cpath>","type":"text","marks":[{"type":"code_inline"}]},{"text":" (tmp + rename)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"webhook:\u003curl>","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"POST the output body to the URL (","type":"text"},{"text":"application/json","type":"text","marks":[{"type":"code_inline"}]},{"text":" or ","type":"text"},{"text":"application/x-ndjson","type":"text","marks":[{"type":"code_inline"}]},{"text":" when ","type":"text"},{"text":"--compact","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Named Profiles","type":"text"}]},{"type":"paragraph","content":[{"text":"A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's \"Beacon\" pattern.","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":""},"content":[{"text":"meta-ads-pp-cli profile save briefing --json\nmeta-ads-pp-cli --profile briefing ads mock-value\nmeta-ads-pp-cli profile list --json\nmeta-ads-pp-cli profile show briefing\nmeta-ads-pp-cli profile delete briefing --yes","type":"text"}]},{"type":"paragraph","content":[{"text":"Explicit flags always win over profile values; profile values win over defaults. ","type":"text"},{"text":"agent-context","type":"text","marks":[{"type":"code_inline"}]},{"text":" lists all available profiles under ","type":"text"},{"text":"available_profiles","type":"text","marks":[{"type":"code_inline"}]},{"text":" so introspecting agents discover them at runtime.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Exit Codes","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Code","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Meaning","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"0","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Success","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"2","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Usage error (wrong arguments)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Resource not found","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"4","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Authentication required","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"5","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"API error (upstream issue)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"7","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rate limited (wait and retry)","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"10","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Config error","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Argument Parsing","type":"text"}]},{"type":"paragraph","content":[{"text":"Parse ","type":"text"},{"text":"$ARGUMENTS","type":"text","marks":[{"type":"code_inline"}]},{"text":":","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Empty, ","type":"text","marks":[{"type":"strong"}]},{"text":"help","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":", or ","type":"text","marks":[{"type":"strong"}]},{"text":"--help","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" → show ","type":"text"},{"text":"meta-ads-pp-cli --help","type":"text","marks":[{"type":"code_inline"}]},{"text":" output","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Starts with ","type":"text","marks":[{"type":"strong"}]},{"text":"install","type":"text","marks":[{"type":"code_inline"},{"type":"strong"}]},{"text":" → ends with ","type":"text"},{"text":"mcp","type":"text","marks":[{"type":"code_inline"}]},{"text":" → MCP installation; otherwise → see Prerequisites above","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Anything else","type":"text","marks":[{"type":"strong"}]},{"text":" → Direct Use (execute as CLI command with ","type":"text"},{"text":"--agent","type":"text","marks":[{"type":"code_inline"}]},{"text":")","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"MCP Server Installation","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Install the MCP server:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"go install github.com/mvanhorn/printing-press-library/library/marketing/meta-ads/cmd/meta-ads-pp-mcp@latest","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Register with Claude Code:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"claude mcp add meta-ads-pp-mcp -- meta-ads-pp-mcp","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Verify: ","type":"text"},{"text":"claude mcp list","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Direct Use","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Check if installed: ","type":"text"},{"text":"which meta-ads-pp-cli","type":"text","marks":[{"type":"code_inline"}]},{"text":" If not found, offer to install (see Prerequisites at the top of this skill).","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Match the user query to the best command from the Unique Capabilities and Command Reference above.","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Execute with the ","type":"text"},{"text":"--agent","type":"text","marks":[{"type":"code_inline"}]},{"text":" flag:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"meta-ads-pp-cli \u003ccommand> [subcommand] [args] --agent","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"If ambiguous, drill into subcommand help: ","type":"text"},{"text":"meta-ads-pp-cli \u003ccommand> --help","type":"text","marks":[{"type":"code_inline"}]},{"text":".","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"pp-meta-ads","author":"@skillopedia","source":{"stars":1369,"repo_name":"printing-press-library","origin_url":"https://github.com/mvanhorn/printing-press-library/blob/HEAD/library/marketing/meta-ads/SKILL.md","repo_owner":"mvanhorn","body_sha256":"c0aae75c6ce3b20e04541d42085064751929f28ca64de9511dfb4c3060f4134e","cluster_key":"939aa26377f34811d1081c7746bf4b98d47e734dae47306e60cc010f4c3e0a81","clean_bundle":{"format":"clean-skill-bundle-v1","source":"mvanhorn/printing-press-library/library/marketing/meta-ads/SKILL.md","attachments":[{"id":"d1835a7d-879f-5f8b-84e2-18cfaded40ad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d1835a7d-879f-5f8b-84e2-18cfaded40ad/attachment.yml","path":".golangci.yml","size":147,"sha256":"41e91d2f2ed2b361555240c1ce682a57a3f3a650d7349ec5f8d10ac43c936b31","contentType":"application/yaml; charset=utf-8"},{"id":"74ea5db7-3575-50f5-9946-72735511dcbd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/74ea5db7-3575-50f5-9946-72735511dcbd/attachment.yaml","path":".goreleaser.yaml","size":1354,"sha256":"bafd309fed8d4571a1edf48049e2439dbefc06581231bce1dfb02d9e8b884e94","contentType":"application/yaml; charset=utf-8"},{"id":"1cba3d58-4130-5398-803c-2a2f3ca2f396","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1cba3d58-4130-5398-803c-2a2f3ca2f396/attachment.json","path":".manuscripts/20260528-183943/proofs/phase5-acceptance.json","size":270,"sha256":"d19c6253422221f0338fbc12a9d58fbf43d3352733542f4f58ae16c0fd459736","contentType":"application/json; charset=utf-8"},{"id":"9e7ad180-27f4-5eff-927a-37e340f3c962","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9e7ad180-27f4-5eff-927a-37e340f3c962/attachment.json","path":".manuscripts/20260528-183943/proofs/publish-live-gate.json","size":125127,"sha256":"4399edbd70aba1a3699d6314be329aff55e87845ba6052eb4fb7422b1880899e","contentType":"application/json; charset=utf-8"},{"id":"cead94f8-4ff4-5fb9-9008-e2aa2c83290e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cead94f8-4ff4-5fb9-9008-e2aa2c83290e/attachment.json","path":".manuscripts/20260528-183943/research.json","size":17243,"sha256":"d4f83b5069cbebce02bce04358a8caa3bb172e6074b9233c6f668027e0f27996","contentType":"application/json; charset=utf-8"},{"id":"f3871c51-cdac-572f-8b98-634d2b4e2dcb","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f3871c51-cdac-572f-8b98-634d2b4e2dcb/attachment.md","path":".manuscripts/20260528-183943/research/2026-05-28-183956-feat-meta-ads-pp-cli-absorb-manifest.md","size":7885,"sha256":"2a7c951ea2e07be90a1e1f88d5685130f8537e9b42b37fa057cf6a5e246602a5","contentType":"text/markdown; charset=utf-8"},{"id":"f312b894-61f4-55ce-a68d-235485170d6b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f312b894-61f4-55ce-a68d-235485170d6b/attachment.md","path":".manuscripts/20260528-183943/research/2026-05-28-183956-feat-meta-ads-pp-cli-brief.md","size":6073,"sha256":"2f3998891a64c13a29c8ced3348ac2476d422e85622598ae089bdf7d67ea992d","contentType":"text/markdown; charset=utf-8"},{"id":"748233c7-ad48-50f0-a880-a0fe77564f5e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/748233c7-ad48-50f0-a880-a0fe77564f5e/attachment.json","path":".printing-press-patches.json","size":151,"sha256":"c39dce6d0dba188238314e21276b69f4f5cd650eca65deb87007f782630fe04f","contentType":"application/json; charset=utf-8"},{"id":"c5199651-73ef-546c-9da1-a8e88d7c2c78","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c5199651-73ef-546c-9da1-a8e88d7c2c78/attachment.json","path":".printing-press-pii-polish.json","size":144,"sha256":"399110a4855036c50a19103f4c0058af8de3763b35a6b7792a7070c9aaf6702a","contentType":"application/json; charset=utf-8"},{"id":"77f32ab6-ce42-59da-a786-1e627ee31706","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/77f32ab6-ce42-59da-a786-1e627ee31706/attachment.json","path":".printing-press-tools-polish.json","size":494,"sha256":"60f0698b87a750475e1b6f33ee2c6e1ab264b4977cd21b334203433e61426760","contentType":"application/json; charset=utf-8"},{"id":"7f5e8e34-3134-5eac-b712-a74cf93addc3","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7f5e8e34-3134-5eac-b712-a74cf93addc3/attachment.json","path":".printing-press.json","size":2646,"sha256":"6249d6733db0600b7de62039fa779bdd1b24ec8709c9ef1378d67069628e7a56","contentType":"application/json; charset=utf-8"},{"id":"1cb02831-b715-563a-a381-00a5929df2ae","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1cb02831-b715-563a-a381-00a5929df2ae/attachment.md","path":"AGENTS.md","size":3718,"sha256":"4074c9dc16a1b78d833359aebfb0ca393230c9cb284f565605995227218a568a","contentType":"text/markdown; charset=utf-8"},{"id":"1200c7dd-442e-5e94-8d34-bde1be567a63","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1200c7dd-442e-5e94-8d34-bde1be567a63/attachment","path":"Makefile","size":357,"sha256":"ff2d656d139f07afd991e54df91f1c3b2db7908e6426ba4e0ef394ca590a6d81","contentType":"text/plain; charset=utf-8"},{"id":"1cbee66a-f6ad-5c22-a18b-f01a6cd2006f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1cbee66a-f6ad-5c22-a18b-f01a6cd2006f/attachment","path":"NOTICE","size":395,"sha256":"43975ced6ef429ad25e36c6e916b439b98a6623812de9338b95d8efab0f550a5","contentType":"text/plain; charset=utf-8"},{"id":"39698dd4-d26b-5d69-8102-140fe36486a6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/39698dd4-d26b-5d69-8102-140fe36486a6/attachment.md","path":"README.md","size":15565,"sha256":"803e366ede759f6c1bcae9b3a56c16124157baba387bdb80335bf6ea73cdb312","contentType":"text/markdown; charset=utf-8"},{"id":"00ae3bf3-fd4e-5126-a8ad-774eccb8bd52","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/00ae3bf3-fd4e-5126-a8ad-774eccb8bd52/attachment.toml","path":"agentcookie.toml","size":451,"sha256":"d84f9fee17ed73c2eec32f330b13f268f491080f570f6be10cfcab12947115d9","contentType":"text/plain; charset=utf-8"},{"id":"297fff00-d568-52ba-a912-5c9cd45d4389","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/297fff00-d568-52ba-a912-5c9cd45d4389/attachment.go","path":"cmd/meta-ads-pp-cli/main.go","size":383,"sha256":"0f5be8bcc59be9191e2fafcbdd776cfb680b15f0f6677918f5db674d715f21f6","contentType":"text/plain; charset=utf-8"},{"id":"e86c637d-8ef4-506e-a658-3f759c3d5c8d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e86c637d-8ef4-506e-a658-3f759c3d5c8d/attachment.go","path":"cmd/meta-ads-pp-mcp/main.go","size":2105,"sha256":"8c247c47ba131f2608638aaa1b55283b0777b426d9172ec3660875c29a62ce2e","contentType":"text/plain; charset=utf-8"},{"id":"920ff9aa-6735-5519-9d28-adc95911972f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/920ff9aa-6735-5519-9d28-adc95911972f/attachment.json","path":"dogfood-results.json","size":3516,"sha256":"5420b74b057ce84f35affa5d85df2b58e92f21046d87b9be344f40c7df37e1d5","contentType":"application/json; charset=utf-8"},{"id":"f36d9e52-28c8-59ed-8e1e-b31d41519d23","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f36d9e52-28c8-59ed-8e1e-b31d41519d23/attachment.mod","path":"go.mod","size":1002,"sha256":"847c2c4c82841f0ba2adbe0806f8a0f6481e1eb4bcd2b9ece5b181e8deff73af","contentType":"application/xml-dtd"},{"id":"bea06955-97ea-5d0f-af6a-2371d6a5b9ca","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bea06955-97ea-5d0f-af6a-2371d6a5b9ca/attachment.sum","path":"go.sum","size":7139,"sha256":"0852efc65f9a89bb477ae578df41a69fe630feab2567291d2d765ea10e913375","contentType":"text/plain; charset=utf-8"},{"id":"536ce836-73d1-5a51-bff0-a399ae718394","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/536ce836-73d1-5a51-bff0-a399ae718394/attachment.go","path":"internal/cache/cache.go","size":1718,"sha256":"4dfae6c65cb6d9bddefc97bbd3afdbd741f13a29ca6babe3bda16e288dbfa7ed","contentType":"text/plain; charset=utf-8"},{"id":"f229da38-63d8-52d9-b257-f95d5dfcc920","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f229da38-63d8-52d9-b257-f95d5dfcc920/attachment.go","path":"internal/cli/agent_context.go","size":6932,"sha256":"a8e3657a779e6f74c30db45ab53fb93d3e1060b16a4baf5e1bc07b75d45d477c","contentType":"text/plain; charset=utf-8"},{"id":"c267169a-79f9-5bc2-872a-3ab70d5585cf","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c267169a-79f9-5bc2-872a-3ab70d5585cf/attachment.go","path":"internal/cli/analytics.go","size":3761,"sha256":"66cf9b6f141935e5d64ddef5eb92c4f1ccad87756c5c4fd171bf934baca31fd5","contentType":"text/plain; charset=utf-8"},{"id":"7c6e762a-1e08-53d2-a78c-12c1594eef73","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7c6e762a-1e08-53d2-a78c-12c1594eef73/attachment.go","path":"internal/cli/api_discovery.go","size":3678,"sha256":"d427c8afee46cd56f1e8a59c59e335a3ca8d7b6842e1980290de381b4d2770f4","contentType":"text/plain; charset=utf-8"},{"id":"dccc59ae-8ffd-5afb-a108-cec908471838","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dccc59ae-8ffd-5afb-a108-cec908471838/attachment.go","path":"internal/cli/auth.go","size":6720,"sha256":"471f583c9804007666ce89eb621a8f9804bb8f781655bbecbdac88fd6b8b8d06","contentType":"text/plain; charset=utf-8"},{"id":"ffd5f165-1e87-5ec3-8529-d872c83d633d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ffd5f165-1e87-5ec3-8529-d872c83d633d/attachment.go","path":"internal/cli/bottleneck.go","size":6688,"sha256":"ecef7c48bf59bbaa95a8d10f7aaf7aa4768f6cecd3876ef1ec5921bd9aebfd3b","contentType":"text/plain; charset=utf-8"},{"id":"159be564-f12b-551c-8300-9898ad07f093","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/159be564-f12b-551c-8300-9898ad07f093/attachment.go","path":"internal/cli/bottleneck_test.go","size":323,"sha256":"c4c64e8dc37bdcfb5ea4478d7a17982dc54d38934c81c31581a48eb8a45cf4c8","contentType":"text/plain; charset=utf-8"},{"id":"34f39003-f5d7-5ead-8d49-d4a9d81e49ad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/34f39003-f5d7-5ead-8d49-d4a9d81e49ad/attachment.go","path":"internal/cli/channel_workflow.go","size":4867,"sha256":"d0397db97e058a729f69a82c61e1dba22c71878835308e5871d724f5fc1a26cf","contentType":"text/plain; charset=utf-8"},{"id":"10ae9773-7a64-5153-b568-02ed5c417b12","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/10ae9773-7a64-5153-b568-02ed5c417b12/attachment.go","path":"internal/cli/data_source.go","size":22256,"sha256":"e379601a4689e009317464d9d77c13f64b2180e3218013f2784302da415de758","contentType":"text/plain; charset=utf-8"},{"id":"5a16025f-2379-5240-a526-c0a27a47f07d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5a16025f-2379-5240-a526-c0a27a47f07d/attachment.go","path":"internal/cli/decay.go","size":6960,"sha256":"60e738377ccc5e85b0e489149096b0997c9670b471cc4dd3671fd767259a3d0a","contentType":"text/plain; charset=utf-8"},{"id":"7f13d61a-93e6-5a63-8b50-3ea61c69e41e","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/7f13d61a-93e6-5a63-8b50-3ea61c69e41e/attachment.go","path":"internal/cli/decay_test.go","size":313,"sha256":"ef61e8821af487501a579eacee0a957330000be48e5fdd6134e5f0d58f74557d","contentType":"text/plain; charset=utf-8"},{"id":"6bc35786-4fce-5d50-ab8e-fda967b4a89d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6bc35786-4fce-5d50-ab8e-fda967b4a89d/attachment.go","path":"internal/cli/deliver.go","size":3551,"sha256":"c5c7a69527a3e998d5f5f8f00309ffd2e1559fedc936f03fcf6fd396d7b317db","contentType":"text/plain; charset=utf-8"},{"id":"96d0f479-d47e-51c5-97a0-32a033395b60","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/96d0f479-d47e-51c5-97a0-32a033395b60/attachment.go","path":"internal/cli/doctor.go","size":20884,"sha256":"55af472eda605b6438c9374faa125e531a286d7dd7206504c515ba520e9b1d77","contentType":"text/plain; charset=utf-8"},{"id":"d5c0972b-85c9-5223-ab8e-522d5c025d53","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d5c0972b-85c9-5223-ab8e-522d5c025d53/attachment.go","path":"internal/cli/fatigue.go","size":8546,"sha256":"fade722ed55244cd29e4fc5b30dea31c5a5fa6efe02f1c9b82a6c3ff0735dd8d","contentType":"text/plain; charset=utf-8"},{"id":"14f878f3-551e-5572-9327-b9341806c169","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/14f878f3-551e-5572-9327-b9341806c169/attachment.go","path":"internal/cli/fatigue_test.go","size":317,"sha256":"e81537f60f0e6695ad864bc92412371b77b51bbd4cd1d7890619f1d62bbb1b72","contentType":"text/plain; charset=utf-8"},{"id":"60952664-755e-5458-82b3-410cfc638cad","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/60952664-755e-5458-82b3-410cfc638cad/attachment.go","path":"internal/cli/feedback.go","size":6642,"sha256":"fb81b20dd48354cc4da14c76b43b6a88c0dfc7f0ea9eb6b37ce0a82b1ad51d5b","contentType":"text/plain; charset=utf-8"},{"id":"71fd8899-ad89-5157-bd05-88c1ff8eb8d1","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/71fd8899-ad89-5157-bd05-88c1ff8eb8d1/attachment.go","path":"internal/cli/helpers.go","size":54017,"sha256":"84f73c426dc1d98651f93ae36755631e4797d09f0a9caec6ac77d50b299ae8f0","contentType":"text/plain; charset=utf-8"},{"id":"b109001e-84ad-53d5-926b-ac7fce1e8bd4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b109001e-84ad-53d5-926b-ac7fce1e8bd4/attachment.go","path":"internal/cli/import.go","size":2973,"sha256":"20968cacffc88c1b02fbd31421bc1699432b134bc1ef93965c23fbed7cea53ef","contentType":"text/plain; charset=utf-8"},{"id":"0eecf71f-e5e8-5fe0-95f4-f8d5fc60f135","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/0eecf71f-e5e8-5fe0-95f4-f8d5fc60f135/attachment.go","path":"internal/cli/insights.go","size":755,"sha256":"e6c153092158b143d76bef965b585b68970846e4e478b5ea4d8bcc26c4738f3a","contentType":"text/plain; charset=utf-8"},{"id":"699131f6-0114-57af-a8de-907884bd7c09","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/699131f6-0114-57af-a8de-907884bd7c09/attachment.go","path":"internal/cli/insights_get-account.go","size":4980,"sha256":"78a8163c71ebc13ebf4b8edb67edf7601bcab6c82d2b8f8f29ccc78e6597b02e","contentType":"text/plain; charset=utf-8"},{"id":"e885e110-6ee1-5124-bc7e-a7e4c8db3779","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/e885e110-6ee1-5124-bc7e-a7e4c8db3779/attachment.go","path":"internal/cli/insights_get-ad-set.go","size":4306,"sha256":"e133ff2669a0355b5d8c9bb30a211d95fa19684f573e2542cf6d4799580236d3","contentType":"text/plain; charset=utf-8"},{"id":"39c7b796-aa8b-5094-be20-975a633e1a27","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/39c7b796-aa8b-5094-be20-975a633e1a27/attachment.go","path":"internal/cli/insights_get-ad.go","size":4307,"sha256":"200422a6dac966a3a8dfe0fce7369f893f8d63b55abee2bbf735054aa484e191","contentType":"text/plain; charset=utf-8"},{"id":"3ba1dbaa-66d6-5032-86d5-34b158b0a146","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3ba1dbaa-66d6-5032-86d5-34b158b0a146/attachment.go","path":"internal/cli/insights_get-campaign.go","size":4329,"sha256":"8d1a0210cc8986ec8bc6d7f26fc3957dbab200883ad237a191d2f1a44ef3b034","contentType":"text/plain; charset=utf-8"},{"id":"44596a5e-7f4c-55c5-8687-3a576574a04b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/44596a5e-7f4c-55c5-8687-3a576574a04b/attachment.go","path":"internal/cli/inventory.go","size":5175,"sha256":"b559db6c29abea14d22fe17ed5a3e69e764b35430dd19f5f1f70f2f271af9839","contentType":"text/plain; charset=utf-8"},{"id":"ddca4fcc-5b58-5578-94d9-fa7f56969f07","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ddca4fcc-5b58-5578-94d9-fa7f56969f07/attachment.go","path":"internal/cli/inventory_test.go","size":321,"sha256":"9387cc05562c6345ff72dae5ed6a36c081eeda3884b381a4b8de035ad4d1f5f8","contentType":"text/plain; charset=utf-8"},{"id":"cedcd07e-55b5-5bc9-afbf-f67126f04a88","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/cedcd07e-55b5-5bc9-afbf-f67126f04a88/attachment.go","path":"internal/cli/learning.go","size":6125,"sha256":"56348d8dc6aa8bc59cc9d9d57153407bd13951f97a9f30e22f730eeb9187230d","contentType":"text/plain; charset=utf-8"},{"id":"5ebb311f-2e4a-5618-8113-45114b6770b8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5ebb311f-2e4a-5618-8113-45114b6770b8/attachment.go","path":"internal/cli/learning_test.go","size":319,"sha256":"40f7bdd4b5a2fcd9744c755cc7c9e1031453898ce639a24368124992870d354c","contentType":"text/plain; charset=utf-8"},{"id":"f1e16707-f913-529c-82df-4cbcc2303c20","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f1e16707-f913-529c-82df-4cbcc2303c20/attachment.go","path":"internal/cli/overlap.go","size":4253,"sha256":"7e7129530a1fbbd71d157a4d9644707dc5adf916f7a84ae9209b33c3b746d354","contentType":"text/plain; charset=utf-8"},{"id":"9a2f42c3-c0a8-5c03-a49d-2be432aca96d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9a2f42c3-c0a8-5c03-a49d-2be432aca96d/attachment.go","path":"internal/cli/overlap_test.go","size":317,"sha256":"95d41f5644061bcd1e7363e3521db9c6966bc0da4a3d48c22ef602a81b63394e","contentType":"text/plain; charset=utf-8"},{"id":"fe893174-7415-55bd-a7fe-5eddf5abffe6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fe893174-7415-55bd-a7fe-5eddf5abffe6/attachment.go","path":"internal/cli/profile.go","size":10345,"sha256":"8c11c161b733856009a6848524971b8e03d83b2fe39f1fe040ed942831273701","contentType":"text/plain; charset=utf-8"},{"id":"6c9bbd82-185a-5fb4-bfee-37b42a6c5a31","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6c9bbd82-185a-5fb4-bfee-37b42a6c5a31/attachment.go","path":"internal/cli/promoted_adcreatives.go","size":3774,"sha256":"85b5da0d3b0b108b547a2f4dd6420f00c50d1dba2b9e625f352d92e0bcbcf61d","contentType":"text/plain; charset=utf-8"},{"id":"a19be7d5-d298-5809-9b72-c15e4c20c4d4","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a19be7d5-d298-5809-9b72-c15e4c20c4d4/attachment.go","path":"internal/cli/promoted_ads.go","size":3749,"sha256":"f08797b8864c5276917b554c43284565b91065cbc51c53ec601c20277688ee81","contentType":"text/plain; charset=utf-8"},{"id":"2913721c-9160-5b61-bb4a-bfd305a7379a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2913721c-9160-5b61-bb4a-bfd305a7379a/attachment.go","path":"internal/cli/promoted_adsets.go","size":3896,"sha256":"07eddd4026ef27579888eb1f392530ff3322813f178130e8ffe585a974a04a8c","contentType":"text/plain; charset=utf-8"},{"id":"84245f75-2b56-5ccc-98cc-ccc22ea145b0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/84245f75-2b56-5ccc-98cc-ccc22ea145b0/attachment.go","path":"internal/cli/promoted_campaigns.go","size":4096,"sha256":"889facb9ef2413531fc9ec7c3c9ba4a6528e56b2a1ef9d3e8cdee96a023ca21c","contentType":"text/plain; charset=utf-8"},{"id":"638ebe38-4a68-54f4-a971-faed5a545775","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/638ebe38-4a68-54f4-a971-faed5a545775/attachment.go","path":"internal/cli/promoted_customaudiences.go","size":3876,"sha256":"082db555204298b7ee8b4332c49c9343be8134ff2dfedc90079b818edf178a2e","contentType":"text/plain; charset=utf-8"},{"id":"d3e79c48-3732-5f84-b92a-79e124e07865","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d3e79c48-3732-5f84-b92a-79e124e07865/attachment.go","path":"internal/cli/promoted_delivery-estimate.go","size":4500,"sha256":"0de140476f63fa1d672414d705cb505b652342e0b154e2e4bacb27408fb582a4","contentType":"text/plain; charset=utf-8"},{"id":"da01265a-acc6-5eb7-8520-ecaffe273a2f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/da01265a-acc6-5eb7-8520-ecaffe273a2f/attachment.go","path":"internal/cli/promoted_me.go","size":3197,"sha256":"3131c14341bc7f1174f294586e2d7a976c8b05a868e4cdcd365acb852e3cc11d","contentType":"text/plain; charset=utf-8"},{"id":"d3246128-b8ed-5f91-adc2-8675af96d6d6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d3246128-b8ed-5f91-adc2-8675af96d6d6/attachment.go","path":"internal/cli/reconcile.go","size":7549,"sha256":"a3224dd4726a0efe2dc96567375f725a6a875bf2022b7de1efe88bce462009eb","contentType":"text/plain; charset=utf-8"},{"id":"ff29929a-25ec-5bae-98a1-5aec73f495ff","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ff29929a-25ec-5bae-98a1-5aec73f495ff/attachment.go","path":"internal/cli/reconcile_test.go","size":321,"sha256":"dc7ca2fb67163bb31e24b212b955d91e9fab2cdbe259fa3e0528c7293fdc4d82","contentType":"text/plain; charset=utf-8"},{"id":"1f09c028-d405-51d8-ad8e-2b2b788874f6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1f09c028-d405-51d8-ad8e-2b2b788874f6/attachment.go","path":"internal/cli/root.go","size":13597,"sha256":"4331d23866cc6e15fc6e38faf877be14e65dc49711fe5ed80b80555f490d9c81","contentType":"text/plain; charset=utf-8"},{"id":"5e7fcda8-3550-5a8c-b5b6-7da02f883843","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5e7fcda8-3550-5a8c-b5b6-7da02f883843/attachment.go","path":"internal/cli/root_test.go","size":8492,"sha256":"d6cfa62eb6ac7b4d8c1cf9d8fc4d091ec95c8fbc47bdf9848effca330c3290dd","contentType":"text/plain; charset=utf-8"},{"id":"25a04e0c-ffef-5b3a-a0f5-8b27546afad9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/25a04e0c-ffef-5b3a-a0f5-8b27546afad9/attachment.go","path":"internal/cli/search.go","size":8093,"sha256":"76c941a988fa8dc83fc8708376450f65e9fd238f57064580b110d04b21b72e7a","contentType":"text/plain; charset=utf-8"},{"id":"6fc32ff4-e1b4-5ea3-ae18-ddf47977015d","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6fc32ff4-e1b4-5ea3-ae18-ddf47977015d/attachment.go","path":"internal/cli/stale.go","size":5530,"sha256":"4e59780df45f8272012c97505b73d089f843a3e0003878230c2a51f6f92842e3","contentType":"text/plain; charset=utf-8"},{"id":"a07261b0-58d6-5a2f-ba35-55426cf30503","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a07261b0-58d6-5a2f-ba35-55426cf30503/attachment.go","path":"internal/cli/stale_test.go","size":313,"sha256":"132b0e7cbdaaffa7d30067eaa7f12684ebad2dc83f396e5a5addf2f415c71695","contentType":"text/plain; charset=utf-8"},{"id":"78d26e1b-f381-5161-b382-cd3ef9f3d48a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/78d26e1b-f381-5161-b382-cd3ef9f3d48a/attachment.go","path":"internal/cli/sync.go","size":48903,"sha256":"45184d64376fc8748a1ed898de7e986d3b6a8d8d890796e05961f5abbfd2ca6e","contentType":"text/plain; charset=utf-8"},{"id":"35c76bc3-01ad-5806-916b-0585ab70837c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/35c76bc3-01ad-5806-916b-0585ab70837c/attachment.go","path":"internal/cli/sync_hint.go","size":3303,"sha256":"a54367f95c4ad1146da9f4bf3007af07529ad22c8808b763df84845b2ab7f18a","contentType":"text/plain; charset=utf-8"},{"id":"2272c8a8-aba5-5534-b6ff-af3518ee3e33","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2272c8a8-aba5-5534-b6ff-af3518ee3e33/attachment.go","path":"internal/cli/sync_hint_test.go","size":5387,"sha256":"3b3c403961bd3ce4c2f6b46f25c4dfcd2817afef5497a691695de2e5def9026e","contentType":"text/plain; charset=utf-8"},{"id":"c6a6a274-0279-5fa8-84e3-c51d5fb00cdd","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/c6a6a274-0279-5fa8-84e3-c51d5fb00cdd/attachment.go","path":"internal/cli/sync_numeric_id_test.go","size":1327,"sha256":"f771b5f4c76dba3f4366b32b473be1c5e5443c33ad41c95e67e76c5ccb32cd8b","contentType":"text/plain; charset=utf-8"},{"id":"1674a6bc-f38f-587f-a854-002362d9aaf6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1674a6bc-f38f-587f-a854-002362d9aaf6/attachment.go","path":"internal/cli/which.go","size":9543,"sha256":"511fc1e52adde085398f958aae178fbfa10a224f8c4de783453ed5c14512dda3","contentType":"text/plain; charset=utf-8"},{"id":"05a2e698-54b7-578e-93e1-5bad117d5a5a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/05a2e698-54b7-578e-93e1-5bad117d5a5a/attachment.go","path":"internal/cli/which_test.go","size":3892,"sha256":"f2b196bb8705461637812696a953694629ee3a7eb36b2a4a16d066bf234f5a04","contentType":"text/plain; charset=utf-8"},{"id":"dfa8ca64-8158-5093-b065-8f3fde5c74ca","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/dfa8ca64-8158-5093-b065-8f3fde5c74ca/attachment.go","path":"internal/client/client.go","size":31847,"sha256":"d3dfcc1805b20c196cc2b8d768ff6e0a9013e28b83ad53dc895cc2ebcf91b3a0","contentType":"text/plain; charset=utf-8"},{"id":"5d70cf48-b569-5606-b58a-df0761a08ce8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5d70cf48-b569-5606-b58a-df0761a08ce8/attachment.go","path":"internal/client/client_test.go","size":2044,"sha256":"5aa56259ef3f349708d17f073b4861916ee5eb8e179e2d372f2f9e7d6fd9643a","contentType":"text/plain; charset=utf-8"},{"id":"ad287a47-816d-5da3-b557-e82790c7105f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ad287a47-816d-5da3-b557-e82790c7105f/attachment.go","path":"internal/client/client_verify_short_circuit_test.go","size":6422,"sha256":"935b8ad5ff1f28297b280476b3287cc77ac166b0a9e0ead252a751bb122a8141","contentType":"text/plain; charset=utf-8"},{"id":"57cf47cf-5660-5171-b079-381e510168a9","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/57cf47cf-5660-5171-b079-381e510168a9/attachment.go","path":"internal/cliutil/cliutil_test.go","size":25562,"sha256":"bdc0d092cb3245efd96d3ceb47c3412d9f8dc4608c7b51d2c933459f44fc7b29","contentType":"text/plain; charset=utf-8"},{"id":"8c1db700-f264-519f-8185-edd98848da3b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/8c1db700-f264-519f-8185-edd98848da3b/attachment.go","path":"internal/cliutil/duration.go","size":1542,"sha256":"40d6f5f240142cea1dfbaad89f2edde342dd395081e8199089c758d6083f6d6e","contentType":"text/plain; charset=utf-8"},{"id":"29888aa5-a6b3-5ea8-b9f3-2da3346517ce","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/29888aa5-a6b3-5ea8-b9f3-2da3346517ce/attachment.go","path":"internal/cliutil/duration_test.go","size":1645,"sha256":"e5c2deefa4e51a279a71e89e13405d86eb6d6005a9a4940403bd8a9435cd625d","contentType":"text/plain; charset=utf-8"},{"id":"ee12f0e9-0448-5461-9921-92f183ddb8fe","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ee12f0e9-0448-5461-9921-92f183ddb8fe/attachment.go","path":"internal/cliutil/extractnumber.go","size":2460,"sha256":"2e8e1402256bc7e587b90c3111c92a7efe0d9fcda467c34434dc03a5bce806ea","contentType":"text/plain; charset=utf-8"},{"id":"a6b8f74f-0ea5-5261-a4d8-28723670531a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a6b8f74f-0ea5-5261-a4d8-28723670531a/attachment.go","path":"internal/cliutil/extractnumber_test.go","size":3431,"sha256":"9cf2bcabc85c56fc3156706bb0033b7e8328245dc6e5756f208918d77d41addc","contentType":"text/plain; charset=utf-8"},{"id":"4ac33d79-6710-58db-b836-601b0aebfc93","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4ac33d79-6710-58db-b836-601b0aebfc93/attachment.go","path":"internal/cliutil/fanout.go","size":6376,"sha256":"7d3d2dbff9463da7284d6555e56de5781661624f5ff5b785475613d81abf996d","contentType":"text/plain; charset=utf-8"},{"id":"a7be9aec-cff5-5553-827e-b80c7d79f223","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a7be9aec-cff5-5553-827e-b80c7d79f223/attachment.go","path":"internal/cliutil/jwtshape.go","size":3590,"sha256":"6696b1d0d5f391f807c99d3bc77f04209502827f615765df45c41a474cc4e7d3","contentType":"text/plain; charset=utf-8"},{"id":"9464894c-5577-5969-851d-b1858ad9f3db","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9464894c-5577-5969-851d-b1858ad9f3db/attachment.go","path":"internal/cliutil/jwtshape_test.go","size":4432,"sha256":"31553283bfae9e3b812ae7f117e0ee46b7485dc44516290ae77b5b7030f54de1","contentType":"text/plain; charset=utf-8"},{"id":"4a8e8998-14fd-5cca-9334-307293f98df6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4a8e8998-14fd-5cca-9334-307293f98df6/attachment.go","path":"internal/cliutil/odata_date.go","size":1538,"sha256":"cd981633cf9a4d8c744ac7fbc267abe97442bf6afae347065f2754f9f27f2ed1","contentType":"text/plain; charset=utf-8"},{"id":"ffa20e5e-0400-512c-aec1-f9dbdf643e75","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/ffa20e5e-0400-512c-aec1-f9dbdf643e75/attachment.go","path":"internal/cliutil/odata_date_test.go","size":1704,"sha256":"ca9bfa148f47bc05838f15c46227dd717910f19f0eb6b49c551d25495124de0e","contentType":"text/plain; charset=utf-8"},{"id":"21a685f9-9ad0-577f-8558-06a18fb779f0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/21a685f9-9ad0-577f-8558-06a18fb779f0/attachment.go","path":"internal/cliutil/probe.go","size":4765,"sha256":"6faed175fe6769f60d5b70d4d46b343268690b0bc65b11ac76da4797518f761a","contentType":"text/plain; charset=utf-8"},{"id":"9b8ae4d1-f10d-595d-8174-db92aa441710","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9b8ae4d1-f10d-595d-8174-db92aa441710/attachment.go","path":"internal/cliutil/ratelimit.go","size":4847,"sha256":"9be834f07f41bfdb42e9b31672283c6215bc1600aeb9729dae532507ba2d5275","contentType":"text/plain; charset=utf-8"},{"id":"d390c24a-8b21-5f08-844a-827f6d1291ba","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/d390c24a-8b21-5f08-844a-827f6d1291ba/attachment.go","path":"internal/cliutil/text.go","size":2605,"sha256":"8f39a8875683208e1bd5cad46e0d31e588d346fc1c3798e557e7fbdcb24e8172","contentType":"text/plain; charset=utf-8"},{"id":"5ef6a1e7-1859-54e9-989d-877d075ec9d8","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5ef6a1e7-1859-54e9-989d-877d075ec9d8/attachment.go","path":"internal/cliutil/verifyenv.go","size":4384,"sha256":"a6b6ab096b938a994c6b538ed1f33045a0eaab259095cf470ab51074c76bf356","contentType":"text/plain; charset=utf-8"},{"id":"5156fae7-4631-5318-a0dc-c85560a3ccbc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/5156fae7-4631-5318-a0dc-c85560a3ccbc/attachment.go","path":"internal/config/config.go","size":5125,"sha256":"33f48a6b830dfbcd35ec2a9af750152083431df6f6af237ff7fb3a52f148f2ad","contentType":"text/plain; charset=utf-8"},{"id":"b7b42c86-058d-59d0-9f88-b6ebdcab920c","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/b7b42c86-058d-59d0-9f88-b6ebdcab920c/attachment.go","path":"internal/mcp/cobratree/classify.go","size":3752,"sha256":"b1a9a2fefe702a5f7e08a9e322691a37f4a8ca023c9855e0c4fbdbdb88362cb9","contentType":"text/plain; charset=utf-8"},{"id":"db552d41-7358-5dd5-b506-77eaf6c5ba22","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/db552d41-7358-5dd5-b506-77eaf6c5ba22/attachment.go","path":"internal/mcp/cobratree/cli_path.go","size":874,"sha256":"d85e68dfcec413734390cb63e8fd54ffecf68bf550fd8e6622461a51a9f60737","contentType":"text/plain; charset=utf-8"},{"id":"2bb26b94-3e12-5191-88f4-121f5054c852","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/2bb26b94-3e12-5191-88f4-121f5054c852/attachment.go","path":"internal/mcp/cobratree/names.go","size":649,"sha256":"ba3ab734bcdede065d31927f0f146fe170e1f8042382126a32e6653eae04aaff","contentType":"text/plain; charset=utf-8"},{"id":"61033ae6-05ed-584d-b707-e7ca3191764b","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/61033ae6-05ed-584d-b707-e7ca3191764b/attachment.go","path":"internal/mcp/cobratree/shellout.go","size":4308,"sha256":"d2beb9a78358cb549f006a0f121af6ee07977560cd3958f55e5a230aca8b3b84","contentType":"text/plain; charset=utf-8"},{"id":"1ec085cb-8795-5e7f-a4bd-49083249be34","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/1ec085cb-8795-5e7f-a4bd-49083249be34/attachment.go","path":"internal/mcp/cobratree/shellout_test.go","size":7865,"sha256":"70ced1fa316c40e2892e1cad4d1e6c1b629144401cd3842de5db21de712d6493","contentType":"text/plain; charset=utf-8"},{"id":"fa07ec12-3b73-5a05-a888-7aa9ab571600","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/fa07ec12-3b73-5a05-a888-7aa9ab571600/attachment.go","path":"internal/mcp/cobratree/typemap.go","size":2185,"sha256":"a9a9aefedd8cbd0527e49d75fec6ce9f65cadbb258cbed11143fc48c4858ee82","contentType":"text/plain; charset=utf-8"},{"id":"3d3133d6-aede-559d-b874-d93c98ef4e79","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/3d3133d6-aede-559d-b874-d93c98ef4e79/attachment.go","path":"internal/mcp/cobratree/walker.go","size":2044,"sha256":"b8fc5b685f58a58587c5fc550fbf9b9011664cfb70d517bfe56d97dcd992d05b","contentType":"text/plain; charset=utf-8"},{"id":"a693e4c8-46fb-51bc-833f-96a05b62a017","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a693e4c8-46fb-51bc-833f-96a05b62a017/attachment.go","path":"internal/mcp/tools.go","size":32810,"sha256":"592ee307c56d4ceae6069359eb0b6af69ee331ec7cd7b6b85cbd4341a85cc459","contentType":"text/plain; charset=utf-8"},{"id":"9f48c3ac-7e67-54d7-a1db-4862d422f9a0","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9f48c3ac-7e67-54d7-a1db-4862d422f9a0/attachment.go","path":"internal/mcp/tools_test.go","size":3901,"sha256":"58a6d1118a33d9b7f3eb49ed9f58a7a92afd315248575702b5a4a816fa6a1654","contentType":"text/plain; charset=utf-8"},{"id":"af74dcc8-b2ad-5639-9a1c-964c436c64f5","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/af74dcc8-b2ad-5639-9a1c-964c436c64f5/attachment.go","path":"internal/store/extras.go","size":858,"sha256":"e6b1e053970f8ac5fea9996df3142d8e98f569b4af826a0e09c91a5e6c646679","contentType":"text/plain; charset=utf-8"},{"id":"bf243261-d48b-52b5-891f-d620a08e818a","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/bf243261-d48b-52b5-891f-d620a08e818a/attachment.go","path":"internal/store/schema_version_test.go","size":34459,"sha256":"1a8158e6e37812bc1958cf13c88204008383f2334f743d2512d347a0273b5e41","contentType":"text/plain; charset=utf-8"},{"id":"6a9ccf06-5bf7-5d51-a4eb-8e9a1f98a8dc","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/6a9ccf06-5bf7-5d51-a4eb-8e9a1f98a8dc/attachment.go","path":"internal/store/store.go","size":77323,"sha256":"a7c7add9e5a96d328ff38895ee186c2eada7b2f2e9c365363430e348a01960dc","contentType":"text/plain; charset=utf-8"},{"id":"94113832-68de-5a73-a988-94a2e6d2e430","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/94113832-68de-5a73-a988-94a2e6d2e430/attachment.go","path":"internal/store/upsert_batch_test.go","size":21843,"sha256":"fd9c71b4db81b55910e0eac78d8b1f29abb14cb1c46d89a1e419af85a9635aa8","contentType":"text/plain; charset=utf-8"},{"id":"49e7b8c4-e31f-5d8b-aacb-249716b0c0ed","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/49e7b8c4-e31f-5d8b-aacb-249716b0c0ed/attachment.go","path":"internal/types/types.go","size":6833,"sha256":"b3a5491d10df47792e407d99b28d7c3415e94b8cc6bc16de21c6ddacfb6c1420","contentType":"text/plain; charset=utf-8"},{"id":"9a5cdde8-b126-53d4-b0c2-8debb8d0ef60","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/9a5cdde8-b126-53d4-b0c2-8debb8d0ef60/attachment.json","path":"manifest.json","size":1042,"sha256":"b7da3cb0e2d776c1430875340a704c7cff30429c24c94e54095055aef0f6560c","contentType":"application/json; charset=utf-8"},{"id":"28d2ab20-8953-536d-9b22-7e3293b93f55","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/28d2ab20-8953-536d-9b22-7e3293b93f55/attachment.yaml","path":"spec.yaml","size":23645,"sha256":"09f776114bf87e002e083cba58d9823d9e21159953b92903024b60e96e5ddbc3","contentType":"application/yaml; charset=utf-8"},{"id":"4f303c93-21db-5c10-a7db-608576377838","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/4f303c93-21db-5c10-a7db-608576377838/attachment.json","path":"tools-manifest.json","size":10133,"sha256":"c4b82914139d4f1923f33e7ff96604db543da0f3e9ddafbf00becf85cb1f548b","contentType":"application/json; charset=utf-8"},{"id":"38f2e566-9202-5d6b-8fb2-a41529ceb7b6","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/38f2e566-9202-5d6b-8fb2-a41529ceb7b6/attachment.json","path":"workflow-verify-report.json","size":163,"sha256":"9b5ff06290f86e13e7b11d4b4a97d0cb1ab81c64fcd92c740d12400622de3b2d","contentType":"application/json; charset=utf-8"}],"bundle_sha256":"d6a61b02fb326fecae3dbe3244855697d0e330a996128186ad0d76af3277327e","attachment_count":107,"text_attachments":107,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"library/marketing/meta-ads/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"data-analytics","category_label":"Data"},"exact_dupes_collapsed_into_this":0},"license":"Apache-2.0","version":"v1","category":"data-analytics","metadata":{"openclaw":{"install":[{"bins":["meta-ads-pp-cli"],"kind":"go","module":"github.com/mvanhorn/printing-press-library/library/marketing/meta-ads/cmd/meta-ads-pp-cli"}],"requires":{"bins":["meta-ads-pp-cli"]}}},"import_tag":"clean-skills-v1","description":"The first agent-native Meta Ads CLI with local SQLite history and compound queries the live API cannot answer. Trigger phrases: `find creative fatigue on Meta`, `check Facebook ad performance`, `which Meta ads should I retire`, `Meta audience overlap`, `stuck in learning`, `use meta-ads`, `run meta-ads`.","allowed-tools":"Read Bash","argument-hint":"\u003ccommand> [args] | install cli|mcp"}},"renderedAt":1782987828581}

Meta Ads — Printing Press CLI Prerequisites: Install the CLI This skill drives the binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first: 1. Install via the Printing Press installer: 2. Verify: 3. Ensure (or ) is on . If the install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer): If reports "command not found" after install, the install step did not put the binary on . Do not proceed with skill commands until verification succeeds. Read-only insights CLI for Meta Marketing AP…