← JuicyLucy AdsCONTENT HISTORY

Update to JuicyLucy Ads

Snapshot Sep 30, 2026 · 23:16 UTC · version 0.22.1

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Produce static image ad creative for paid social (Meta / Instagram / TikTok feed, Stories, Reels placements) as dated, localized campaign batches — either by iterating the account's own winning statics or by reinterpreting competitor statics found in a public ad library. Use for 'make static ads', 'new statics batch', 'iterate our winning statics', 'competitor-inspired statics', or any request whose deliverable is a set of static image ads organized into language/ad-set folders for upload. Sources a reference, writes compliant copy, generates differentiated masters, localizes into every approved language, and QAs the batch against the workspace conventions. For a video ad or video batch use /video-ad-production instead.",
  "included_files": [
    {
      "relative_path": "references/source-adapters.md",
      "size_in_bytes": 3795
    },
    {
      "relative_path": "references/workflow.md",
      "size_in_bytes": 11638
    }
  ],
  "name": "static-ad-production",
  "skill_md_contents": "---\nname: static-ad-production\ndescription: \"Produce static image ad creative for paid social (Meta / Instagram / TikTok feed, Stories, Reels placements) as dated, localized campaign batches — either by iterating the account's own winning statics or by reinterpreting competitor statics found in a public ad library. Use for 'make static ads', 'new statics batch', 'iterate our winning statics', 'competitor-inspired statics', or any request whose deliverable is a set of static image ads organized into language/ad-set folders for upload. Sources a reference, writes compliant copy, generates differentiated masters, localizes into every approved language, and QAs the batch against the workspace conventions. For a video ad or video batch use /video-ad-production instead.\"\n---\n\n# Static Ad Production\n\n> **This runs in Codex on a Mac.** If there is no local shell here — the request came from\n> ChatGPT on the web or on a phone — say that ad production renders on the user's own Mac\n> inside Codex, point them there, and stop. Do not plan, write copy, or generate anything\n> from a surface that cannot render the result.\n\n**This skill produces static images.** A video batch — even one sharing the\nsame publish date and the same `#0000` number line — is a separate run through\n`/video-ad-production`: a video ad is iterated from a video ad, never from a static\nimage.\n\nTurn a performance signal — a winning static of your own, or a competitor's\nstatic that is clearly working — into a dated batch of differentiated,\nlocalized static ads, filed and named so the ads manager report can be traced\nback to the exact concept and batch that produced each creative.\n\n## Before Step 0 — is this machine set up?\n\nThe naming tool, the QA scripts and `juicy` all come from what the\n`juicylucy-setup` skill installs, and a machine that has never run setup has\nnone of them. So **the first command of every run**, before the publish day is\nasked about or a folder is inspected, is the setup skill's doctor in preflight\nmode:\n\n```bash\nsh <SKILL_DIR>/../juicylucy-setup/scripts/doctor.sh --preflight\n```\n\n`<SKILL_DIR>` is this skill's own directory; the setup skill sits beside it in\nthe plugin's `skills/` folder. (A local copy of this skill under\n`~/.agents/skills` has no such sibling; run the shipped doctor from the plugin\ncache, `~/.codex/plugins/cache/juicylucy/juicylucy-ads/*/skills/juicylucy-setup`.)\nIt is read-only, takes a few seconds, reaches no network, and prints one line\nper requirement, ending in a `preflight` line that is the verdict:\n\n- **`preflight ok`** (exit 0) — the toolchain is installed and reachable. Go\n  on to Step 0. If another line reads `missing` — `juicy-login`, a `config` or\n  `network` line, a newer `juicy` — say so in one sentence so the user can have\n  it fixed before generation needs it, and continue; none of it blocks the\n  batch from being planned.\n- **`preflight missing`** (a non-zero exit) — setup has not been run on this\n  machine, or was not run to the end. **Do not start the batch.** Load the\n  `juicylucy-setup` skill and run it from its Step 1 through to its restart:\n  it diagnoses, explains what is missing in plain words, asks before\n  installing, and ends on one quit-and-reopen of Codex. Tell the user the batch\n  starts when they ask for it again after that restart — nothing has been\n  written yet, so nothing needs carrying over.\n\nRunning the doctor is not a question and not a stop (§ Where to stop). Do not\nsubstitute a check of your own — `which juicy`, whether `~/.juicylucy` exists\n— for it: the doctor knows where setup puts things.\n\n## Step 0 — resolve the three inputs everything depends on\n\n1. **The brand.** This skill knows no brands: no product facts, no palette, no\n   claims, no competitor list. Each brand ships as its own skill, named\n   `brand-<slug>`. Exactly one installed → that is the brand; name it in your\n   reply. Several → ask which. None → say so plainly and create one first:\n   the `juicylucy-setup` skill's `extending.md` § Creating the first brand\n   (ask for the product facts, write a `brand-<slug>` skill from the template\n   into the user's own skill folder, read it for this run). **Never adopt the\n   branding visible in a reference ad** — that identity belongs to whoever\n   made it, usually a competitor.\n2. **The workspace conventions.** Filenames, folder grammar, the global\n   sequence, language codes, allocation policy, and the evidence layout live\n   in the `juicylucy` skill (`naming.json`, `foldering.json`,\n   `allocation.json`, `languages.json`, `evidence.json`). Read them before\n   creating anything; if you cannot reach them, **stop and ask** rather than\n   working from memory. The `ad-naming` skill's tool (`naming.mjs`) is what\n   turns those conventions into filenames, folder names and sequence numbers —\n   nobody types one by hand.\n3. **The source adapter.** Two ways into the pipeline, chosen by where the\n   signal comes from — see [references/source-adapters.md](references/source-adapters.md):\n   - **winners** — the account's own recent performance, retrieved read-only\n     through the `static-winner-analysis` skill.\n   - **competitors** — public ad-library research over the brand's competitor\n     set (from the brand's `competitor-set.md`).\n\n## Run the workflow\n\nRead [references/workflow.md](references/workflow.md) for the long form of\nevery phase before the first run.\n\n1. Take the publish day from the request; ask only when nothing in the\n   request or the campaign root implies it. Normalize it per the workspace\n   `foldering.json` and inspect the output root. A new batch gets a fresh\n   verified dated folder **before** source research, created without asking;\n   the one question here is a batch for that day already existing — then\n   confirm continuation, because a same-date continuation reuses the existing\n   folder and mapping,\n   treats every existing file as immutable, and reserves collision-free names\n   before generating. Never silently reuse or overwrite a batch.\n2. Infer the remaining variable inputs, asking only for what cannot be\n   inferred: source adapter, lookback\n   window or research scope, output root, ad sets per language, ads per ad\n   set, aspect ratio (default per `naming.json`), positioning emphasis, and\n   reference assets. Treat every demonstrated value as an input, not a\n   default.\n3. Build the iteration history **before** selecting a source: inspect prior\n   dated batches, their manifests, project-state files, references, and\n   previews; group by underlying creative concept with last-iteration date,\n   days since, markets, and mutation mode. Prefer manifest and visual evidence\n   over filenames; label uncertain matches.\n4. Run the selected source adapter to produce a ranked, concept-deduplicated\n   candidate list with a verified visual reference per concept\n   ([references/source-adapters.md](references/source-adapters.md)).\n5. Reconcile candidates with the iteration history and present **two viable\n   paths with evidence** — repeat the strongest current concept (naming when\n   it was last iterated and how many days ago) or explore a credible\n   different concept with a clear learning hypothesis. Take the path the user chose;\n   when they did not choose, take the stronger one, say which and why, and\n   carry on — the master review is where it gets overturned. Never silently\n   repeat the top-ranked concept merely because it is still ranked first.\n6. For new markets or language iterations, allocate languages per the\n   workspace `allocation.json`: live sources only, every active campaign\n   covered, ranked by volume and efficiency together, exclusions applied, and\n   the preflight table shown in the reply before any subfolder exists —\n   shown, not waited on.\n7. Extract the transferable elements from the selected reference — hook,\n   promise, proof pattern, copy structure, layout, hierarchy, palette,\n   audience intent. Preserve the strategy, not the design. Mark anything\n   location- or culture-specific as a transferable role with a\n   non-transferable asset.\n8. Draft several compliant English copy directions. Read the\n   `static-copywriting` skill before drafting; product claims come from the\n   brand's `product-truth.md` and prohibitions from its\n   `compliance-overlay.md`.\n9. Generate several materially different master concepts — with Codex's own\n   image tool, `juicy` with `--no-preset` only when it is unavailable\n   (§ Tool policy) —\n   without pausing between them, each with one explicit mutation mode — **copy-led**,\n   **visual-led**, or **full remix** — using all three across the set when\n   volume allows. Every generation brief states the reference, mode, exact\n   copy, dimensions, exact brand treatment, elements preserved, and elements\n   changed. Default to a minimal, scan-first composition.\n10. Inspect every master visually at full size — iteration-mode compliance,\n    exact brand naming, legibility, hierarchy, differentiation, and the\n    three-second clarity check ([references/workflow.md](references/workflow.md)\n    § Master QA) — then show the set together and take the direction before\n    localization. **That review is the one stop in this workflow**;\n    localization is the batch that costs time.\n11. Create or reuse the language/ad-set folders per the workspace\n    `foldering.json` — the global sequence reserved with the `ad-naming` tool\n    (`naming.mjs reserve`, run immediately before creation, never earlier in\n    the session) and every folder name composed by `naming.mjs folder`; one\n    language per folder.\n12. Choose the localization mode per master — text-only or creative\n    adaptation — and localize per the `static-localization` and\n    `static-image-craft` skills: meaning over words, scripts reflowed,\n    landmarks substituted for the target market, a stress-testing sample\n    inspected before scaling.\n13. Save every creative into its mapped folder under a filename produced by\n    the `ad-naming` tool (`naming.mjs name`, or `naming.mjs inherit` for a\n    localized copy) — never typed by hand; verify dimensions, language,\n    branding, uniqueness, and readability. Never overwrite; collisions\n    increment the version.\n14. Run the batch QA checklist and deliver the manifest\n    ([references/workflow.md](references/workflow.md) § QA and § Delivery\n    manifest).\n\n## Where to stop\n\nA stop is required only when the next step spends significant money (paid\ngeneration: motion, or a provider image batch), significant time (a batch of\nmany generations or localizations), or writes outside the workspace\nirreversibly. Everything else: decide, do, report what you did.\n\nHere that means one review — the master set, shown together before\nlocalization. The setup doctor before Step 0 is a read-only probe whose\nverdict decides only whether the setup skill runs first; it asks nothing. The\npublish day, the inputs, the dated folder, the repeat-or-explore path and the\nlanguage allocation are inferred and stated, asked only when they cannot be\ninferred or when a batch for the same day already exists.\n A question that decides nothing the user can judge yet is\nnoise, and noise is what makes the one real review get approved unread.\n\n## Tool policy\n\n- Performance retrieval is read-only, through `static-winner-analysis` and its\n  standing-authorization contract. No ad-platform write of any kind belongs to\n  this workflow.\n- Use Codex's own image tool for every raster creative — masters and\n  localizations — before any other generator; `juicy image generate` only\n  when the image tool is unavailable, and then always with `--no-preset`.\n  juicy's default preset is written for video first frames: it bans the\n  on-image text, logo and interface a finished static must carry, so the\n  prompt itself states the exact copy and brand treatment. The image tool's\n  outputs land under `$CODEX_HOME/generated_images/`: copy each into the\n  folder it belongs to, and never reference that directory. On repeated\n  failure within one request, preserve the reference and the complete\n  specification and retry once in a fresh task — never with a context-free\n  \"again\". When neither the image tool nor a provider is available, say so\n  and stop — never compose a stand-in image with a script or a drawing\n  library.\n- Use a signed-in browser or computer use only for ad-library research,\n  uploads/downloads, and visual checks that cannot be done from files.\n- Use filesystem tools for folder creation, collision checks, and output\n  verification. Before writing outside the active workspace, request approval.\n- Never store credentials, cookies, or tokens in skills, manifests, logs,\n  filenames, or summaries.\n\n## Guardrails\n\n- Do not mix mediums in one shortlist, one reference set, or one QA pass.\n- Do not hardcode a demonstrated date, path, page, language set, count,\n  campaign number, or filesystem root — all inputs.\n- Do not start production until: the brand is resolved, the workspace\n  conventions are readable, prior batches were checked for concept reuse, and\n  the repeat-versus-explore choice was made or supplied.\n- Do not fill multiple source slots with executions of one underlying concept;\n  deduplicate first and keep one strongest reference per concept.\n- Do not copy any source pixel-for-pixel — retain the winning hypothesis while\n  changing composition and execution; a color swap is not a new concept.\n- Do not blur the mutation mode: copy-led preserves recognizable visual\n  continuity, visual-led preserves the approved text exactly, full remix\n  changes both materially.\n- Do not transplant a location-specific landmark or cultural symbol unchanged\n  across markets; substitute a verified target-appropriate equivalent that\n  preserves its compositional role.\n- Do not confuse richness with density: one visual hero, one unmistakable copy\n  hierarchy, one primary CTA.\n- Do not translate text without reflowing type for the actual script and\n  length.\n- Do not overwrite existing creatives, renumber existing folders, or rerun\n  allocation in a same-date continuation.\n- Pause before publishing, launching, or changing live campaigns unless the\n  user explicitly requests that separate action.\n"
}

SHA-256 of public snapshot: 03cd160b371f596ea91a579c043474b6014e73a8176e133cabafe94b0232c4c7