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.
Files changed (66) hide show
  1. package/dist/migrate.js +81 -43
  2. package/dist/setup.js +20 -1
  3. package/package.json +1 -1
  4. package/stacks/_shared/ads-agents/README.md +452 -0
  5. package/stacks/_shared/ads-agents/RESEARCH-REPORT.md +157 -0
  6. package/stacks/_shared/ads-agents/SKILL.md +210 -0
  7. package/stacks/_shared/ads-agents/SKILLS-UPDATE-REPORT.md +255 -0
  8. package/stacks/_shared/ads-agents/agents/audit-budget.md +116 -0
  9. package/stacks/_shared/ads-agents/agents/audit-compliance.md +131 -0
  10. package/stacks/_shared/ads-agents/agents/audit-creative.md +127 -0
  11. package/stacks/_shared/ads-agents/agents/audit-google.md +113 -0
  12. package/stacks/_shared/ads-agents/agents/audit-meta.md +112 -0
  13. package/stacks/_shared/ads-agents/agents/audit-tracking.md +134 -0
  14. package/stacks/_shared/ads-agents/agents/copy-writer.md +188 -0
  15. package/stacks/_shared/ads-agents/agents/creative-strategist.md +199 -0
  16. package/stacks/_shared/ads-agents/agents/format-adapter.md +175 -0
  17. package/stacks/_shared/ads-agents/agents/visual-designer.md +245 -0
  18. package/stacks/_shared/ads-agents/references/additional-platforms.md +106 -0
  19. package/stacks/_shared/ads-agents/references/benchmarks.md +257 -0
  20. package/stacks/_shared/ads-agents/references/bidding-strategies.md +333 -0
  21. package/stacks/_shared/ads-agents/references/brand-dna-template.md +190 -0
  22. package/stacks/_shared/ads-agents/references/budget-allocation.md +150 -0
  23. package/stacks/_shared/ads-agents/references/compliance.md +280 -0
  24. package/stacks/_shared/ads-agents/references/conversion-tracking.md +246 -0
  25. package/stacks/_shared/ads-agents/references/copy-frameworks.md +187 -0
  26. package/stacks/_shared/ads-agents/references/funnel-content-copy-rules.md +44 -0
  27. package/stacks/_shared/ads-agents/references/gaql-notes.md +49 -0
  28. package/stacks/_shared/ads-agents/references/google-audit.md +217 -0
  29. package/stacks/_shared/ads-agents/references/google-creative-specs.md +119 -0
  30. package/stacks/_shared/ads-agents/references/image-providers.md +133 -0
  31. package/stacks/_shared/ads-agents/references/linkedin-audit.md +141 -0
  32. package/stacks/_shared/ads-agents/references/linkedin-creative-specs.md +129 -0
  33. package/stacks/_shared/ads-agents/references/mcp-integration.md +125 -0
  34. package/stacks/_shared/ads-agents/references/meta-audit.md +141 -0
  35. package/stacks/_shared/ads-agents/references/meta-creative-specs.md +134 -0
  36. package/stacks/_shared/ads-agents/references/microsoft-audit.md +158 -0
  37. package/stacks/_shared/ads-agents/references/microsoft-creative-specs.md +123 -0
  38. package/stacks/_shared/ads-agents/references/platform-specs.md +276 -0
  39. package/stacks/_shared/ads-agents/references/scoring-system.md +169 -0
  40. package/stacks/_shared/ads-agents/references/tiktok-audit.md +165 -0
  41. package/stacks/_shared/ads-agents/references/tiktok-creative-specs.md +139 -0
  42. package/stacks/_shared/ads-agents/references/voice-to-style.md +87 -0
  43. package/stacks/_shared/ads-agents/references/youtube-creative-specs.md +134 -0
  44. package/stacks/_shared/ads-agents/skills/ads-apple/SKILL.md +225 -0
  45. package/stacks/_shared/ads-agents/skills/ads-audit/SKILL.md +108 -0
  46. package/stacks/_shared/ads-agents/skills/ads-budget/SKILL.md +198 -0
  47. package/stacks/_shared/ads-agents/skills/ads-competitor/SKILL.md +198 -0
  48. package/stacks/_shared/ads-agents/skills/ads-create/SKILL.md +198 -0
  49. package/stacks/_shared/ads-agents/skills/ads-creative/SKILL.md +208 -0
  50. package/stacks/_shared/ads-agents/skills/ads-dna/SKILL.md +245 -0
  51. package/stacks/_shared/ads-agents/skills/ads-generate/SKILL.md +173 -0
  52. package/stacks/_shared/ads-agents/skills/ads-google/SKILL.md +192 -0
  53. package/stacks/_shared/ads-agents/skills/ads-landing/SKILL.md +186 -0
  54. package/stacks/_shared/ads-agents/skills/ads-linkedin/SKILL.md +200 -0
  55. package/stacks/_shared/ads-agents/skills/ads-math/SKILL.md +216 -0
  56. package/stacks/_shared/ads-agents/skills/ads-meta/SKILL.md +167 -0
  57. package/stacks/_shared/ads-agents/skills/ads-microsoft/SKILL.md +163 -0
  58. package/stacks/_shared/ads-agents/skills/ads-photoshoot/SKILL.md +220 -0
  59. package/stacks/_shared/ads-agents/skills/ads-plan/SKILL.md +176 -0
  60. package/stacks/_shared/ads-agents/skills/ads-test/SKILL.md +199 -0
  61. package/stacks/_shared/ads-agents/skills/ads-tiktok/SKILL.md +190 -0
  62. package/stacks/_shared/ads-agents/skills/ads-youtube/SKILL.md +199 -0
  63. package/stacks/_shared/hooks/_state.ts +8 -2
  64. package/stacks/_shared/hooks/plan-gate.ts +138 -0
  65. package/stacks/_shared/memories/funnel-content-copy.md +81 -0
  66. 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
- hooks: [
239
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/session-start.ts"', timeout: 10 },
240
- ],
241
- },
242
- UserPromptSubmit: {
243
- matcher: '',
244
- hooks: [
245
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/user-prompt-submit.ts"', timeout: 10 },
246
- ],
247
- },
248
- PreToolUse: {
249
- matcher: 'Edit|Write|MultiEdit|NotebookEdit',
250
- hooks: [
251
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/pre-tool-use.ts"', timeout: 5 },
252
- ],
253
- },
254
- PostToolUse: {
255
- matcher: 'Edit|Write|MultiEdit|NotebookEdit',
256
- hooks: [
257
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/post-tool-use.ts"', timeout: 5 },
258
- ],
259
- },
260
- Stop: {
261
- hooks: [
262
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-validator.ts"', timeout: 30 },
263
- ],
264
- },
265
- SessionEnd: {
266
- hooks: [
267
- { type: 'command', command: 'npx tsx "$CLAUDE_PROJECT_DIR/.claude/hooks/stop-validator.ts"', timeout: 10 },
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, requiredBlock] of Object.entries(REQUIRED_HOOK_BLOCKS)) {
295
- const existingBlocks = Array.isArray(settings.hooks[event]) ? settings.hooks[event] : [];
296
- const requiredScript = commandSubstring(requiredBlock.hooks[0].command);
297
- const alreadyHas = existingBlocks.some(b => (b.hooks || []).some(h => commandSubstring(h.command).includes(requiredScript)));
298
- if (alreadyHas) {
299
- report.alreadyPresent.push(event);
300
- continue;
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] = [...existingBlocks, requiredBlock];
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: ['.claude/CLAUDE.md', 'CLAUDE.md'],
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "start-vibing-stacks",
3
- "version": "2.28.0",
3
+ "version": "2.30.0",
4
4
  "description": "AI-powered multi-stack dev workflow for Claude Code. Supports PHP, Node.js, Python and more.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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.