start-vibing-stacks 2.28.0 → 2.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/migrate.js +81 -43
- package/dist/setup.js +20 -1
- package/package.json +1 -1
- package/stacks/_shared/ads-agents/README.md +452 -0
- package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
- package/stacks/_shared/ads-agents/SKILL.md +210 -0
- package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
- package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
- package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
- package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
- package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
- package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
- package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
- package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
- package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
- package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
- package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
- package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
- package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
- package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
- package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
- package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
- package/stacks/_shared/ads-agents/references/compliance.md +280 -0
- package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
- package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
- package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
- package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
- package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
- package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
- package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
- package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
- package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
- package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
- package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
- package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
- package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
- package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
- package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
- package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
- package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
- package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
- package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
- package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
- package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
- package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
- package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
- package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
- package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
- package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
- package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
- package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
- package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
- package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
- package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
- package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
- package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
- package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
- package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
- package/stacks/_shared/hooks/_state.ts +8 -2
- package/stacks/_shared/hooks/plan-gate.ts +138 -0
- package/stacks/_shared/memories/funnel-content-copy.md +81 -0
- package/templates/CLAUDE-python.md +6 -0
package/dist/migrate.js
CHANGED
|
@@ -233,40 +233,56 @@ function applyOne(item, opts) {
|
|
|
233
233
|
copyFileSync(item.source, item.target);
|
|
234
234
|
return { applied: true };
|
|
235
235
|
}
|
|
236
|
+
// Keyed by event; each event carries one or more independent blocks. PreToolUse
|
|
237
|
+
// runs two: the multi-instance collision guard AND the plan-gate nudge. Each
|
|
238
|
+
// block is checked/appended individually so backfill is precise per-script.
|
|
236
239
|
const REQUIRED_HOOK_BLOCKS = {
|
|
237
|
-
SessionStart:
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
240
|
+
SessionStart: [
|
|
241
|
+
{
|
|
242
|
+
hooks: [
|
|
243
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/session-start.ts"', timeout: 10 },
|
|
244
|
+
],
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
UserPromptSubmit: [
|
|
248
|
+
{
|
|
249
|
+
matcher: '',
|
|
250
|
+
hooks: [
|
|
251
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/user-prompt-submit.ts"', timeout: 10 },
|
|
252
|
+
],
|
|
253
|
+
},
|
|
254
|
+
],
|
|
255
|
+
PreToolUse: [
|
|
256
|
+
{
|
|
257
|
+
matcher: 'Edit|Write|MultiEdit|NotebookEdit',
|
|
258
|
+
hooks: [
|
|
259
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/pre-tool-use.ts"', timeout: 5 },
|
|
260
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/plan-gate.ts"', timeout: 5 },
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
],
|
|
264
|
+
PostToolUse: [
|
|
265
|
+
{
|
|
266
|
+
matcher: 'Edit|Write|MultiEdit|NotebookEdit',
|
|
267
|
+
hooks: [
|
|
268
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/post-tool-use.ts"', timeout: 5 },
|
|
269
|
+
],
|
|
270
|
+
},
|
|
271
|
+
],
|
|
272
|
+
Stop: [
|
|
273
|
+
{
|
|
274
|
+
hooks: [
|
|
275
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-validator.ts"', timeout: 30 },
|
|
276
|
+
],
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
SessionEnd: [
|
|
280
|
+
{
|
|
281
|
+
hooks: [
|
|
282
|
+
{ type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-validator.ts"', timeout: 10 },
|
|
283
|
+
],
|
|
284
|
+
},
|
|
285
|
+
],
|
|
270
286
|
};
|
|
271
287
|
function commandSubstring(cmd) {
|
|
272
288
|
const m = cmd.match(/\.claude\/hooks\/([A-Za-z0-9._-]+\.(?:ts|sh|js|mjs))/);
|
|
@@ -291,18 +307,40 @@ export function patchSettings(projectDir, dryRun) {
|
|
|
291
307
|
}
|
|
292
308
|
}
|
|
293
309
|
settings.hooks = settings.hooks || {};
|
|
294
|
-
for (const [event,
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
310
|
+
for (const [event, requiredBlocks] of Object.entries(REQUIRED_HOOK_BLOCKS)) {
|
|
311
|
+
let existingBlocks = Array.isArray(settings.hooks[event]) ? settings.hooks[event] : [];
|
|
312
|
+
let mutated = false;
|
|
313
|
+
// Check at the SCRIPT (hook) level, not the block level: an install may
|
|
314
|
+
// already have pre-tool-use.ts but be missing the newer plan-gate.ts in the
|
|
315
|
+
// same PreToolUse matcher — a block-level check would wrongly skip it.
|
|
316
|
+
for (const requiredBlock of requiredBlocks) {
|
|
317
|
+
for (const requiredHook of requiredBlock.hooks) {
|
|
318
|
+
const requiredScript = commandSubstring(requiredHook.command);
|
|
319
|
+
const alreadyHas = existingBlocks.some(b => (b.hooks || []).some(h => commandSubstring(h.command).includes(requiredScript)));
|
|
320
|
+
const label = `${event}:${requiredScript}`;
|
|
321
|
+
if (alreadyHas) {
|
|
322
|
+
report.alreadyPresent.push(label);
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
if (!dryRun) {
|
|
326
|
+
const sameMatcher = existingBlocks.find(b => (b.matcher ?? '') === (requiredBlock.matcher ?? ''));
|
|
327
|
+
if (sameMatcher) {
|
|
328
|
+
sameMatcher.hooks = [...(sameMatcher.hooks || []), requiredHook];
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
existingBlocks = [
|
|
332
|
+
...existingBlocks,
|
|
333
|
+
{ matcher: requiredBlock.matcher, hooks: [requiredHook] },
|
|
334
|
+
];
|
|
335
|
+
}
|
|
336
|
+
mutated = true;
|
|
337
|
+
}
|
|
338
|
+
report.added.push(label);
|
|
339
|
+
}
|
|
301
340
|
}
|
|
302
|
-
if (!dryRun) {
|
|
303
|
-
settings.hooks[event] =
|
|
341
|
+
if (!dryRun && mutated) {
|
|
342
|
+
settings.hooks[event] = existingBlocks;
|
|
304
343
|
}
|
|
305
|
-
report.added.push(event);
|
|
306
344
|
}
|
|
307
345
|
// High-reasoning defaults (v2.28.0). Only set when MISSING so we never clobber
|
|
308
346
|
// a user's explicit choice. `ultracode` is intentionally never written here:
|
package/dist/setup.js
CHANGED
|
@@ -80,6 +80,11 @@ export async function setupProject(projectDir, config, options = {}) {
|
|
|
80
80
|
// 3. Copy shared skills
|
|
81
81
|
const sharedSkillsDir = join(PACKAGE_ROOT, 'stacks', '_shared', 'skills');
|
|
82
82
|
const sharedSkillCount = copyDirRecursive(sharedSkillsDir, join(claudeDir, 'skills'), options.force);
|
|
83
|
+
// 3b. Copy ads-agents (paid advertising intelligence system)
|
|
84
|
+
const adsAgentsDir = join(PACKAGE_ROOT, 'stacks', '_shared', 'ads-agents');
|
|
85
|
+
if (existsSync(adsAgentsDir)) {
|
|
86
|
+
copyDirRecursive(adsAgentsDir, join(claudeDir, 'ads-agents'), options.force);
|
|
87
|
+
}
|
|
83
88
|
// 4. Copy shared hooks
|
|
84
89
|
const sharedHooksDir = join(PACKAGE_ROOT, 'stacks', '_shared', 'hooks');
|
|
85
90
|
const hookCount = copyDirRecursive(sharedHooksDir, join(claudeDir, 'hooks'), options.force);
|
|
@@ -221,6 +226,11 @@ export async function setupProject(projectDir, config, options = {}) {
|
|
|
221
226
|
if (existsSync(sharedCommandsDir)) {
|
|
222
227
|
copyDirRecursive(sharedCommandsDir, join(claudeDir, 'commands'), options.force);
|
|
223
228
|
}
|
|
229
|
+
// 12b. Copy shared memories (funnel-content-copy, etc.)
|
|
230
|
+
const sharedMemoriesDir = join(PACKAGE_ROOT, 'stacks', '_shared', 'memories');
|
|
231
|
+
if (existsSync(sharedMemoriesDir)) {
|
|
232
|
+
copyDirRecursive(sharedMemoriesDir, join(claudeDir, 'memories'), options.force);
|
|
233
|
+
}
|
|
224
234
|
// 13. Write settings.json for Claude Code (complete config)
|
|
225
235
|
const settings = {
|
|
226
236
|
model: 'sonnet',
|
|
@@ -236,7 +246,11 @@ export async function setupProject(projectDir, config, options = {}) {
|
|
|
236
246
|
compaction_threshold: 0.85,
|
|
237
247
|
enable_compaction: true,
|
|
238
248
|
enable_semantic_search: true,
|
|
239
|
-
memory_files: [
|
|
249
|
+
memory_files: [
|
|
250
|
+
'.claude/CLAUDE.md',
|
|
251
|
+
'CLAUDE.md',
|
|
252
|
+
'.claude/memories/funnel-content-copy.md'
|
|
253
|
+
],
|
|
240
254
|
},
|
|
241
255
|
permissions: {
|
|
242
256
|
// Always start sessions in plan mode (read-only): the agent must
|
|
@@ -287,6 +301,11 @@ export async function setupProject(projectDir, config, options = {}) {
|
|
|
287
301
|
command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/pre-tool-use.ts"',
|
|
288
302
|
timeout: 5,
|
|
289
303
|
},
|
|
304
|
+
{
|
|
305
|
+
type: 'command',
|
|
306
|
+
command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/plan-gate.ts"',
|
|
307
|
+
timeout: 5,
|
|
308
|
+
},
|
|
290
309
|
],
|
|
291
310
|
},
|
|
292
311
|
],
|
package/package.json
CHANGED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
# ads-agents — Paid Advertising Intelligence System
|
|
2
|
+
|
|
3
|
+
> Multi-platform ad audit, strategy, and creative generation for 2026.
|
|
4
|
+
> **212 checks · 19 sub-skills · 10 agents · 25 reference files**
|
|
5
|
+
> Verified May 2026 with LLM-as-judge (Opus 4.7) and ≥2 source attribution per claim.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 1) Audit an existing account (parallel, all platforms)
|
|
13
|
+
/ads audit --platforms google,meta,linkedin,tiktok,microsoft
|
|
14
|
+
|
|
15
|
+
# 2) Extract brand DNA from a website (creates brand-profile.json)
|
|
16
|
+
/ads dna https://yourbrand.com
|
|
17
|
+
|
|
18
|
+
# 3) Generate campaign concepts + copy (creates campaign-brief.md)
|
|
19
|
+
/ads create --platforms meta,tiktok,linkedin
|
|
20
|
+
|
|
21
|
+
# 4) Generate ad images via banana MCP (creates ad-assets/ + manifest)
|
|
22
|
+
/ads generate
|
|
23
|
+
|
|
24
|
+
# 5) Validate generated assets against platform specs
|
|
25
|
+
/ads format
|
|
26
|
+
|
|
27
|
+
# 6) Strategic ad plan (e-commerce / B2B / SaaS templates)
|
|
28
|
+
/ads plan
|
|
29
|
+
|
|
30
|
+
# Specialised tools
|
|
31
|
+
/ads competitor # spy on competitors across 6 platforms
|
|
32
|
+
/ads budget # 70/20/10, 3x kill rule, 20% scaling
|
|
33
|
+
/ads math # CPA / ROAS / break-even / MER calculator
|
|
34
|
+
/ads test # A/B hypothesis + sample-size planner
|
|
35
|
+
/ads photoshoot # 5 product photography styles via banana
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Structure
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
ads-agents/
|
|
44
|
+
├── README.md # This file
|
|
45
|
+
├── SKILL.md # Top-level skill manifest
|
|
46
|
+
├── RESEARCH-REPORT.md # 2026 research evidence
|
|
47
|
+
├── SKILLS-UPDATE-REPORT.md # Update changelog
|
|
48
|
+
│
|
|
49
|
+
├── agents/ # 10 specialist subagents
|
|
50
|
+
│ ├── audit-google.md # v1.6 · Google Ads 80 checks
|
|
51
|
+
│ ├── audit-meta.md # v1.6 · Meta 50 checks (Andromeda)
|
|
52
|
+
│ ├── audit-tracking.md # v1.6 · LinkedIn/TikTok/MS tracking
|
|
53
|
+
│ ├── audit-creative.md # v1.6 · LinkedIn/TikTok/MS creative
|
|
54
|
+
│ ├── audit-budget.md # v1.6 · LinkedIn/TikTok/MS budget
|
|
55
|
+
│ ├── audit-compliance.md # v1.6 · GDPR/CCPA/Special Ad Cat
|
|
56
|
+
│ ├── creative-strategist.md # v1.6 · campaign concepts (Opus)
|
|
57
|
+
│ ├── copy-writer.md # v1.6 · platform-compliant copy
|
|
58
|
+
│ ├── visual-designer.md # v1.6 · banana MCP image generation
|
|
59
|
+
│ └── format-adapter.md # v1.6 · spec validator (Haiku)
|
|
60
|
+
│
|
|
61
|
+
├── skills/ # 19 sub-skills (auto-injected)
|
|
62
|
+
│ ├── ads-audit/ # Full multi-platform audit orchestrator
|
|
63
|
+
│ ├── ads-google/ # Google Ads deep analysis
|
|
64
|
+
│ ├── ads-meta/ # Meta Ads deep analysis
|
|
65
|
+
│ ├── ads-linkedin/ # LinkedIn deep analysis
|
|
66
|
+
│ ├── ads-tiktok/ # TikTok deep analysis
|
|
67
|
+
│ ├── ads-microsoft/ # Microsoft/Bing deep analysis
|
|
68
|
+
│ ├── ads-apple/ # Apple Ads (formerly Apple Search Ads)
|
|
69
|
+
│ ├── ads-youtube/ # YouTube + CTV + Demand Gen
|
|
70
|
+
│ ├── ads-creative/ # Cross-platform creative audit
|
|
71
|
+
│ ├── ads-landing/ # Landing page quality (INP/CWV 2026)
|
|
72
|
+
│ ├── ads-budget/ # Budget + bidding strategy
|
|
73
|
+
│ ├── ads-competitor/ # Competitor ad intelligence
|
|
74
|
+
│ ├── ads-dna/ # Brand DNA extractor
|
|
75
|
+
│ ├── ads-create/ # Campaign concept generator
|
|
76
|
+
│ ├── ads-generate/ # AI image generation
|
|
77
|
+
│ ├── ads-photoshoot/ # Product photography styles
|
|
78
|
+
│ ├── ads-plan/ # Strategic media plan
|
|
79
|
+
│ ├── ads-math/ # PPC financial modeling
|
|
80
|
+
│ └── ads-test/ # A/B test design + significance
|
|
81
|
+
│
|
|
82
|
+
└── references/ # 25 evidence-backed reference files
|
|
83
|
+
├── benchmarks.md # CPC/CTR/CVR by industry, all platforms
|
|
84
|
+
├── bidding-strategies.md # Decision trees per platform
|
|
85
|
+
├── scoring-system.md # 0-100 + A-F grading
|
|
86
|
+
├── compliance.md # GDPR/CCPA, Special Ad Categories
|
|
87
|
+
├── conversion-tracking.md # Pixel/CAPI/EMQ/Consent Mode V2
|
|
88
|
+
├── platform-specs.md # All ad dimensions + limits 2026
|
|
89
|
+
├── budget-allocation.md # 70/20/10, scaling rules
|
|
90
|
+
├── copy-frameworks.md # AIDA / PAS / BAB / 4P / FAB / SSS
|
|
91
|
+
├── voice-to-style.md # Brand voice → visual attribute map
|
|
92
|
+
├── brand-dna-template.md # brand-profile.json schema
|
|
93
|
+
├── gaql-notes.md # Google Ads Query Language tips
|
|
94
|
+
├── mcp-integration.md # Google Ads MCP setup
|
|
95
|
+
├── image-providers.md # banana / DALL-E / Imagen providers
|
|
96
|
+
├── additional-platforms.md # Reddit / Pinterest / Snap / X
|
|
97
|
+
├── google-audit.md # 80-check Google playbook
|
|
98
|
+
├── meta-audit.md # 50-check Meta playbook
|
|
99
|
+
├── linkedin-audit.md # 27-check LinkedIn playbook
|
|
100
|
+
├── tiktok-audit.md # 28-check TikTok playbook
|
|
101
|
+
├── microsoft-audit.md # 24-check Microsoft playbook
|
|
102
|
+
├── google-creative-specs.md # PMax / Demand Gen / Shorts
|
|
103
|
+
├── meta-creative-specs.md # Feed 4:5, Reels 9:16 safe zone
|
|
104
|
+
├── tiktok-creative-specs.md # 9:16 safe box X:40-940 Y:150-1470
|
|
105
|
+
├── linkedin-creative-specs.md # 1:1 primary, B2B tone
|
|
106
|
+
├── microsoft-creative-specs.md # Multimedia ads 1200×628
|
|
107
|
+
└── youtube-creative-specs.md # Shorts 1080×1420 safe zone
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## How to use
|
|
113
|
+
|
|
114
|
+
### Auditoria completa (full audit)
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
/ads audit --platforms google,meta,linkedin,tiktok,microsoft,apple
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**O que acontece:**
|
|
121
|
+
|
|
122
|
+
1. `ads-audit` skill orquestra os subagentes em paralelo (1-3 minutos).
|
|
123
|
+
2. Cada agente lê os reference files necessários (`google-audit.md`, `meta-audit.md`, `benchmarks.md`, `scoring-system.md`).
|
|
124
|
+
3. Agentes em paralelo: `audit-google`, `audit-meta`, `audit-tracking`, `audit-creative`, `audit-budget`, `audit-compliance`.
|
|
125
|
+
4. Cada um grava seu `*-audit-results.md` no diretório atual.
|
|
126
|
+
5. Skill agrega tudo num `ADS-AUDIT-REPORT.md` final com score 0-100 + grade A-F por plataforma + aggregate.
|
|
127
|
+
|
|
128
|
+
**Output esperado:**
|
|
129
|
+
```
|
|
130
|
+
google-audit-results.md
|
|
131
|
+
meta-audit-results.md
|
|
132
|
+
tracking-audit-results.md
|
|
133
|
+
creative-audit-results.md
|
|
134
|
+
budget-audit-results.md
|
|
135
|
+
compliance-audit-results.md
|
|
136
|
+
ADS-AUDIT-REPORT.md ← consolidated
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Auditoria por plataforma única
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
/ads google # só Google Ads (80 checks: G01-G61 + G-AI + G-PM + G-DG + G-CT)
|
|
143
|
+
/ads meta # só Meta (50 checks: M01-M40 + M-AN + M-CR + M-AT + M-IA + M-TH)
|
|
144
|
+
/ads linkedin # só LinkedIn (27 checks: L01-L25 + L-TLA)
|
|
145
|
+
/ads tiktok # só TikTok (28 checks: T01-T25)
|
|
146
|
+
/ads microsoft # só Microsoft (24 checks: MS01-MS20)
|
|
147
|
+
/ads apple # só Apple Ads (Custom Product Pages, MMP attribution)
|
|
148
|
+
/ads youtube # só YouTube (Demand Gen, CTV, Shorts)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Pipeline criativo
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Step 1: extract brand identity
|
|
155
|
+
/ads dna https://yourbrand.com
|
|
156
|
+
# → brand-profile.json (colors, voice axes, mood keywords, imagery)
|
|
157
|
+
|
|
158
|
+
# Step 2: generate campaign concepts + copy deck
|
|
159
|
+
/ads create --platforms meta,tiktok,linkedin --objective conversion
|
|
160
|
+
# → campaign-brief.md (3-12 concepts + Copy Deck per platform)
|
|
161
|
+
|
|
162
|
+
# Step 3: generate images via banana MCP
|
|
163
|
+
/ads generate
|
|
164
|
+
# → ad-assets/<platform>/<concept-slug>/<format>-<WxH>-v<N>.png
|
|
165
|
+
# → generation-manifest.json
|
|
166
|
+
# → 3 variants per brief (v1 base, v2 alt angle, v3 lighting variation)
|
|
167
|
+
|
|
168
|
+
# Step 4: validate specs + safe zones
|
|
169
|
+
/ads format
|
|
170
|
+
# → format-report.md (PASS/WARNING/FAIL/MISSING per asset)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Andromeda 2026 awareness:** for Meta-heavy budgets, target 8-12 distinct concepts × 2-3 variations. Similarity Score >60% triggers Meta retrieval suppression; <40% is the target across active assets.
|
|
174
|
+
|
|
175
|
+
### Ferramentas de planejamento
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
/ads plan # full strategic plan (platform mix + phased rollout)
|
|
179
|
+
/ads budget # 70/20/10 rule + 3x kill + 20% scaling check
|
|
180
|
+
/ads competitor # ad library spy across 6 platforms
|
|
181
|
+
/ads math # CPA / ROAS / break-even / impression share opportunity
|
|
182
|
+
/ads test # A/B hypothesis + sample size + duration estimator
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## Agentes disponíveis
|
|
188
|
+
|
|
189
|
+
| Agent | Model | maxTurns | Tools | Responsabilidade | Quando usar |
|
|
190
|
+
|-------|-------|----------|-------|------------------|-------------|
|
|
191
|
+
| `audit-google` | sonnet | 20 | Read, Bash, Write, Glob, Grep | Google Ads 80-check deep audit (tracking, wasted spend, PMax, AI Max, Demand Gen) | `/ads audit`, `/ads google` |
|
|
192
|
+
| `audit-meta` | sonnet | 20 | Read, Bash, Write, Glob, Grep | Meta 50-check audit (Pixel/CAPI, Andromeda creative diversity, Advantage+) | `/ads audit`, `/ads meta` |
|
|
193
|
+
| `audit-tracking` | sonnet | 20 | Read, Bash, Write, Glob, Grep | LinkedIn + TikTok + Microsoft tracking (CAPI, ttclid, UET, Consent Mode V2) | `/ads audit` |
|
|
194
|
+
| `audit-creative` | sonnet | 20 | Read, Bash, Write, Glob, Grep | LinkedIn + TikTok + Microsoft creative (TLA, Spark, Multimedia, safe zones) | `/ads audit` |
|
|
195
|
+
| `audit-budget` | sonnet | 20 | Read, Bash, Write, Glob, Grep | LinkedIn + TikTok + Microsoft budget/bidding (Smart+, TLA allocation) | `/ads audit`, `/ads budget` |
|
|
196
|
+
| `audit-compliance` | sonnet | 20 | Read, Bash, Write, Glob, Grep | GDPR/CCPA + Special Ad Categories + lead gen + deprecated features | `/ads audit` |
|
|
197
|
+
| `creative-strategist` | **opus** | 25 | Read, Write, Glob | Campaign concept generation (3-12 concepts per Andromeda guidance) | `/ads create` |
|
|
198
|
+
| `copy-writer` | sonnet | 20 | Read, Write, Glob | Platform-compliant copy with character validation (AIDA/PAS/BAB/4P/FAB/SSS) | `/ads create` |
|
|
199
|
+
| `visual-designer` | sonnet | 30 | Read, Write, Bash, Glob | banana MCP 5-component prompts, 3 variants/brief, hero anchor | `/ads generate` |
|
|
200
|
+
| `format-adapter` | **haiku** | 15 | Read, Write, Bash, Glob | Dimension + size + safe-zone validation, missing-format detection | `/ads format` |
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Sub-skills disponíveis (19)
|
|
205
|
+
|
|
206
|
+
| Skill | Plataforma | Checks | Output gerado | Trigger |
|
|
207
|
+
|-------|------------|--------|---------------|---------|
|
|
208
|
+
| `ads-audit` | All | 212 (orchestrator) | `ADS-AUDIT-REPORT.md` | audit, full ad check |
|
|
209
|
+
| `ads-google` | Google | 80 | `google-audit-results.md` | Google Ads, PMax |
|
|
210
|
+
| `ads-meta` | Meta | 50 | `meta-audit-results.md` | Meta, FB, IG, Advantage+ |
|
|
211
|
+
| `ads-linkedin` | LinkedIn | 27 | `linkedin-audit-results.md` | LinkedIn, B2B, TLA |
|
|
212
|
+
| `ads-tiktok` | TikTok | 28 | `tiktok-audit-results.md` | TikTok, Smart+, Spark |
|
|
213
|
+
| `ads-microsoft` | Microsoft | 24 | `microsoft-audit-results.md` | Bing, Copilot ads |
|
|
214
|
+
| `ads-apple` | Apple Ads | ~15 | `apple-audit-results.md` | Apple Ads, ASA, App Store |
|
|
215
|
+
| `ads-youtube` | YouTube | ~20 | `youtube-audit-results.md` | YouTube, Demand Gen, CTV |
|
|
216
|
+
| `ads-creative` | All | 21 | `creative-audit-results.md` | creative audit, fatigue |
|
|
217
|
+
| `ads-landing` | Cross | ~15 | `landing-audit-results.md` | landing page, CWV, INP |
|
|
218
|
+
| `ads-budget` | All | 24 | `budget-audit-results.md` | budget allocation, scaling |
|
|
219
|
+
| `ads-competitor` | All | n/a | `competitor-intel.md` | competitor ads, ad spy |
|
|
220
|
+
| `ads-dna` | n/a | n/a | `brand-profile.json` | brand DNA, brand profile |
|
|
221
|
+
| `ads-create` | All | n/a | `campaign-brief.md` | create campaign, ad concepts |
|
|
222
|
+
| `ads-generate` | All | n/a | `ad-assets/`, `generation-manifest.json` | generate ads, create images |
|
|
223
|
+
| `ads-photoshoot` | All | n/a | 5× product photos | product photo, photoshoot |
|
|
224
|
+
| `ads-plan` | All | n/a | `media-plan.md` | ad strategy, media plan |
|
|
225
|
+
| `ads-math` | n/a | n/a | calculated metrics | CPA calculator, break-even |
|
|
226
|
+
| `ads-test` | All | n/a | `test-plan.md` | A/B test, experiment design |
|
|
227
|
+
|
|
228
|
+
Total: 212 audit checks across the deep-platform skills + 21 in `ads-creative` is folded into the platform totals.
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## Arquivos de referência (25)
|
|
233
|
+
|
|
234
|
+
| Arquivo | Conteúdo | Usado por |
|
|
235
|
+
|---------|----------|-----------|
|
|
236
|
+
| `benchmarks.md` | CPC/CTR/CVR por indústria + plataforma 2026 | Todos os audits |
|
|
237
|
+
| `bidding-strategies.md` | Decision tree de estratégia por plataforma | audit-budget, ads-budget |
|
|
238
|
+
| `scoring-system.md` | Fórmula 0-100 + grade A-F + multiplicadores | Todos os audits |
|
|
239
|
+
| `compliance.md` | GDPR/CCPA, Special Ad Categories, three-strike | audit-compliance |
|
|
240
|
+
| `conversion-tracking.md` | Pixel/CAPI/EMQ/Consent Mode V2/ttclid | audit-tracking, audit-google, audit-meta |
|
|
241
|
+
| `platform-specs.md` | Dimensions + char limits master chart | copy-writer, format-adapter |
|
|
242
|
+
| `budget-allocation.md` | 70/20/10, 3x kill, 20% scaling, platform mix | audit-budget, ads-plan |
|
|
243
|
+
| `copy-frameworks.md` | AIDA / PAS / BAB / 4P / FAB / Star-Story-Solution | copy-writer, creative-strategist |
|
|
244
|
+
| `voice-to-style.md` | Brand voice axes → camera/lighting/color attrs | visual-designer |
|
|
245
|
+
| `brand-dna-template.md` | brand-profile.json schema | ads-dna, creative-strategist |
|
|
246
|
+
| `gaql-notes.md` | Google Ads Query Language quick reference | audit-google |
|
|
247
|
+
| `mcp-integration.md` | Google Ads MCP server setup | audit-google (optional) |
|
|
248
|
+
| `image-providers.md` | banana / DALL-E / Imagen comparison | visual-designer |
|
|
249
|
+
| `additional-platforms.md` | Reddit / Pinterest / Snap / X (overflow) | ads-plan |
|
|
250
|
+
| `google-audit.md` | 80-check Google playbook (G01-G61 + extensions) | audit-google |
|
|
251
|
+
| `meta-audit.md` | 50-check Meta playbook (M01-M40 + Andromeda) | audit-meta |
|
|
252
|
+
| `linkedin-audit.md` | 27-check LinkedIn playbook (L01-L25 + TLA) | audit-tracking, audit-creative, audit-budget, audit-compliance |
|
|
253
|
+
| `tiktok-audit.md` | 28-check TikTok playbook (T01-T25) | audit-tracking, audit-creative, audit-budget, audit-compliance |
|
|
254
|
+
| `microsoft-audit.md` | 24-check Microsoft playbook (MS01-MS20) | audit-tracking, audit-creative, audit-budget, audit-compliance |
|
|
255
|
+
| `google-creative-specs.md` | PMax + Demand Gen + Shorts dimensions | visual-designer, format-adapter |
|
|
256
|
+
| `meta-creative-specs.md` | Feed 4:5, Reels 9:16 safe zone, carousel | visual-designer, format-adapter |
|
|
257
|
+
| `tiktok-creative-specs.md` | 9:16 only, safe box X:40-940 Y:150-1470 | visual-designer, format-adapter |
|
|
258
|
+
| `linkedin-creative-specs.md` | 1:1 primary, B2B tone constraints | visual-designer, format-adapter |
|
|
259
|
+
| `microsoft-creative-specs.md` | Multimedia Ads 1200×628, vertical video Apr 2025 | visual-designer, format-adapter |
|
|
260
|
+
| `youtube-creative-specs.md` | Shorts 1080×1420 safe zone, thumbnail rules | visual-designer, format-adapter |
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Fluxo de auditoria completa
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
268
|
+
│ /ads audit --platforms google,meta,linkedin,tiktok,microsoft │
|
|
269
|
+
└────────────────────────────────┬─────────────────────────────────────┘
|
|
270
|
+
│
|
|
271
|
+
▼
|
|
272
|
+
┌─────────────────────────────┐
|
|
273
|
+
│ ads-audit skill │
|
|
274
|
+
│ (orchestrator) │
|
|
275
|
+
└──────────────┬──────────────┘
|
|
276
|
+
│
|
|
277
|
+
┌───────────┬────────────┼────────────┬───────────┬───────────┐
|
|
278
|
+
▼ ▼ ▼ ▼ ▼ ▼
|
|
279
|
+
┌──────────┐┌──────────┐┌──────────────┐┌─────────────┐┌──────────┐┌────────────┐
|
|
280
|
+
│ audit- ││ audit- ││ audit- ││ audit- ││ audit- ││ audit- │
|
|
281
|
+
│ google ││ meta ││ tracking ││ creative ││ budget ││ compliance │
|
|
282
|
+
│ (80) ││ (50) ││ (LI+TT+MS:7) ││ (LI+TT+MS:21)││ (24) ││ (18 + X) │
|
|
283
|
+
└─────┬────┘└─────┬────┘└──────┬───────┘└──────┬──────┘└─────┬────┘└──────┬─────┘
|
|
284
|
+
│ │ │ │ │ │
|
|
285
|
+
▼ ▼ ▼ ▼ ▼ ▼
|
|
286
|
+
google- meta- tracking- creative- budget- compliance-
|
|
287
|
+
audit- audit- audit- audit- audit- audit-
|
|
288
|
+
results.md results.md results.md results.md results.md results.md
|
|
289
|
+
│ │ │ │ │ │
|
|
290
|
+
└───────────┴────────────┴───────┬───────┴─────────────┴────────────┘
|
|
291
|
+
│
|
|
292
|
+
▼
|
|
293
|
+
┌──────────────────────────────┐
|
|
294
|
+
│ Aggregation by ads-audit │
|
|
295
|
+
│ - Per-platform 0-100 score │
|
|
296
|
+
│ - Aggregate score │
|
|
297
|
+
│ - Grade A-F │
|
|
298
|
+
│ - Quick Wins list │
|
|
299
|
+
│ - Critical issues │
|
|
300
|
+
└──────────────┬───────────────┘
|
|
301
|
+
│
|
|
302
|
+
▼
|
|
303
|
+
ADS-AUDIT-REPORT.md
|
|
304
|
+
(final)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
Subagentes rodam em **paralelo** (Read-only acesso aos references + dados do usuário, escrita isolada de output files), reduzindo audit completo para ~2-3 minutos com 5 plataformas.
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Scoring
|
|
312
|
+
|
|
313
|
+
Cada plataforma recebe um score 0-100 calculado por:
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
score = Σ(check_weight × multiplier × result_value) / max_possible × 100
|
|
317
|
+
|
|
318
|
+
result_value: PASS = 1.0 | WARNING = 0.5 | FAIL = 0.0
|
|
319
|
+
multiplier: Critical = 5.0 | High = 3.0 | Medium = 2.0 | Low = 1.0
|
|
320
|
+
category weights: per skill (e.g. Conversion Tracking 25%, Wasted Spend 20%...)
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Grade scale:**
|
|
324
|
+
|
|
325
|
+
| Grade | Score | Interpretação |
|
|
326
|
+
|-------|-------|---------------|
|
|
327
|
+
| A | 90-100 | Health excelente, otimizações marginais |
|
|
328
|
+
| B | 80-89 | Saudável, alguns ajustes específicos |
|
|
329
|
+
| C | 70-79 | Performance OK, opportunities significativas |
|
|
330
|
+
| D | 60-69 | Sérios gaps, refactor recomendado |
|
|
331
|
+
| F | <60 | Quebrado em fundamentals (tracking/budget/structure) |
|
|
332
|
+
|
|
333
|
+
Detalhe em `references/scoring-system.md`.
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Thresholds rápidos (2026)
|
|
338
|
+
|
|
339
|
+
### Conversion tracking (universais)
|
|
340
|
+
|
|
341
|
+
| Métrica | Pass | Warning | Fail |
|
|
342
|
+
|---------|------|---------|------|
|
|
343
|
+
| EMQ Meta (Purchase) | ≥8.0 | 6.0-7.9 | <6.0 |
|
|
344
|
+
| Dedup rate Meta | ≥90% | 70-90% | <70% |
|
|
345
|
+
| Consent Mode V2 (EEA) | Implementado | Basic mode | Não implementado |
|
|
346
|
+
| LinkedIn CAPI | Ativo (GA 2025) | Insight Tag only | Sem tracking |
|
|
347
|
+
| TikTok ttclid passback | Ativo | Parcial | Ausente |
|
|
348
|
+
|
|
349
|
+
### Creative (Andromeda + cross-platform)
|
|
350
|
+
|
|
351
|
+
| Platform | Distinct concepts | Variations | Refresh cadence |
|
|
352
|
+
|----------|-------------------|------------|-----------------|
|
|
353
|
+
| Meta | 8-12 (similarity <40%) | 2-3 por concept | 2-3 semanas |
|
|
354
|
+
| TikTok | 6-10 | 2-3 + Symphony AI | 7-10 dias |
|
|
355
|
+
| LinkedIn | 4-6 | 1-2 | 4-6 semanas (TLA: 8-12 weeks peak) |
|
|
356
|
+
| Google/Microsoft | 3-5 | RSA 8+ headlines | 8-12 semanas |
|
|
357
|
+
| YouTube | 6-10 (Demand Gen: creative drives 70-80%) | thumbnail + hook + middle + payoff | 2-4 semanas |
|
|
358
|
+
|
|
359
|
+
### Performance benchmarks (Pass thresholds)
|
|
360
|
+
|
|
361
|
+
| Plataforma | Good CTR | Good CPC | Notas |
|
|
362
|
+
|------------|----------|----------|-------|
|
|
363
|
+
| Google Search | ≥3.0% | varies | Branded ≥10% |
|
|
364
|
+
| Google PMax | ≥1.0% | varies | Ad Strength Good/Excellent |
|
|
365
|
+
| Meta | ≥1.0% | $0.50-2.00 | EMQ ≥8 obrigatório |
|
|
366
|
+
| LinkedIn (SC) | ≥0.44% | $5-7 | TLA: ≥2.68% mediana |
|
|
367
|
+
| TikTok | ≥1.0% | $0.50-1.00 | 40-60% mais barato que Meta CPM |
|
|
368
|
+
| Microsoft | ≥2.83% | $1.20-1.55 | 20-35% mais barato que Google |
|
|
369
|
+
| YouTube Shorts | varies | varies | View-through rate ≥30% |
|
|
370
|
+
|
|
371
|
+
### Budget thresholds
|
|
372
|
+
|
|
373
|
+
| Regra | Valor |
|
|
374
|
+
|-------|-------|
|
|
375
|
+
| 70/20/10 rule | 70% proven, 20% scaling, 10% testing |
|
|
376
|
+
| 20% Rule | Nunca aumentar budget mais de 20%/vez |
|
|
377
|
+
| 3× Kill Rule | Pausar tudo com CPA >3× target |
|
|
378
|
+
| LinkedIn min budget | $50/dia Sponsored Content |
|
|
379
|
+
| TikTok learning phase | ≥50 conversões/7 dias por ad group |
|
|
380
|
+
| Meta learning phase | <30% ad sets em Learning Limited |
|
|
381
|
+
| Google Demand Gen min | $100/dia Max Conv ou 10× target CPA |
|
|
382
|
+
|
|
383
|
+
### Char limits (2026 verificado)
|
|
384
|
+
|
|
385
|
+
| Plataforma / Formato | Headline | Primary | Description |
|
|
386
|
+
|----------------------|----------|---------|-------------|
|
|
387
|
+
| Google RSA | 30 chars × 3-15 | n/a | 90 chars × 2-4 |
|
|
388
|
+
| Meta Feed | 40 chars | 125 chars | n/a |
|
|
389
|
+
| Meta Video | 27 chars | 125 chars | n/a |
|
|
390
|
+
| Meta Carousel card | 32 chars | 125 chars | 18-20 chars |
|
|
391
|
+
| Meta Reels primary | n/a | 72 chars visible | n/a |
|
|
392
|
+
| LinkedIn SC | 70 chars (200 max) | 150 chars (600 max) | 100 chars (desktop) |
|
|
393
|
+
| TikTok | n/a | 100 chars ad text | 25 chars display name |
|
|
394
|
+
| Microsoft RSA | 30 chars | n/a | 90 chars |
|
|
395
|
+
| YouTube companion | 15 chars | 35 chars × 2 lines | n/a |
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
## Dependências externas
|
|
400
|
+
|
|
401
|
+
### Obrigatórias
|
|
402
|
+
|
|
403
|
+
- **Python 3.12+** com `Pillow>=11.0.0` para validação de dimensões (`format-adapter` agent).
|
|
404
|
+
- **`bash`, `git`, `grep`, `glob`** standard tools (Read/Write via Claude Code).
|
|
405
|
+
|
|
406
|
+
### Opcionais (por funcionalidade)
|
|
407
|
+
|
|
408
|
+
| Feature | Dependência | Tipo | Fallback |
|
|
409
|
+
|---------|-------------|------|----------|
|
|
410
|
+
| Image generation (`/ads generate`, `/ads photoshoot`) | **banana MCP** server | MCP externo | `scripts/generate_image.py` (deprecated, requer `GOOGLE_API_KEY`, 2 variantes em vez de 3, sem reference anchor) |
|
|
411
|
+
| Google Ads automated data pull | **Google Ads MCP** | MCP externo (oficial Google) | Manual export upload pelo usuário |
|
|
412
|
+
| Brand DNA scraping (`/ads dna`) | `mcp__web-scraper__scrape_url` + `mcp__web-scraper__take_screenshot` | MCP | Input manual do usuário |
|
|
413
|
+
| Competitor intel (`/ads competitor`) | `mcp__web-scraper__facebook_adlib_search`, `google_search`, `scrape_url` | MCP | Input manual de URLs de competidores |
|
|
414
|
+
| Apple Ads data | Apple Search Ads API + MMP (Adjust/AppsFlyer/Singular) | API externa | Manual CSV upload |
|
|
415
|
+
|
|
416
|
+
### Variáveis de ambiente
|
|
417
|
+
|
|
418
|
+
```bash
|
|
419
|
+
# banana MCP (custom Gemini wrapper)
|
|
420
|
+
BANANA_MCP_HOST=...
|
|
421
|
+
BANANA_PRESETS_DIR=.banana/presets/
|
|
422
|
+
|
|
423
|
+
# Google Ads (se rodando data pull automatizado)
|
|
424
|
+
GOOGLE_ADS_CLIENT_ID=...
|
|
425
|
+
GOOGLE_ADS_CLIENT_SECRET=...
|
|
426
|
+
GOOGLE_ADS_DEVELOPER_TOKEN=...
|
|
427
|
+
GOOGLE_ADS_CUSTOMER_ID=...
|
|
428
|
+
|
|
429
|
+
# Fallback image generation
|
|
430
|
+
GOOGLE_API_KEY=...
|
|
431
|
+
|
|
432
|
+
# (Opcional) Web scraper MCP key
|
|
433
|
+
BRAVE_API_KEY=...
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## Versionamento
|
|
439
|
+
|
|
440
|
+
- **Agents**: v1.5.0 → v1.6.0 (May 2026 verification pass, LLM-as-judge Opus 4.7 ≥98% confidence + ≥2 sources)
|
|
441
|
+
- **Skills**: v1.5 → v1.6 (Andromeda 2026, AI Max GA, Smart+ Catalog Ads, TLA playbook)
|
|
442
|
+
- **References**: incrementally updated, marked with `<!-- Updated: YYYY-MM-DD | vX.Y -->` headers
|
|
443
|
+
|
|
444
|
+
Ver `SKILLS-UPDATE-REPORT.md` para changelog detalhado.
|
|
445
|
+
|
|
446
|
+
---
|
|
447
|
+
|
|
448
|
+
## Manutenção
|
|
449
|
+
|
|
450
|
+
- Os agentes leem arquivos de `references/` on-demand — **nunca cole o conteúdo de references dentro do agent prompt**. Mantém o context window limpo.
|
|
451
|
+
- Para adicionar uma nova plataforma: criar `references/<platform>-audit.md`, criar `skills/ads-<platform>/SKILL.md`, e adicionar checks ao agente apropriado (`audit-tracking`, `audit-creative`, `audit-budget`, `audit-compliance` para plataformas não-Google/Meta).
|
|
452
|
+
- Para atualizar thresholds: editar **somente** o reference file relevante — agents são thresholds-agnósticos por design.
|