Gabe Meme — oblique memes as engagement metaphors
Usage: /gabe-meme <subject or thread> [count]
Gabe execution contract (E1–E7)
This skill runs under the suite execution contract — E1 EVIDENCE · E2 RUN-BEFORE-✅ · E3 NO SILENT DOWNGRADE · E4 REUSE FIRST · E5 STATE SYNC · E6 MISSING ANCHOR = STOP · E7 REPORT WHERE — floors, not ceilings; a skill's own gate may be stricter, never looser. Full text: ../gabe-docs/references/execution-contract.md (if that file is missing, E6 applies — STOP).
The intention (why this skill exists)
A meme is an oblique derivative of a subject: the facts come from the real thing, but the meme NEVER states them directly. It works by tangent — it says something that sounds almost normal, and the reader connects it to what's actually going on. The punchline isn't in the meme; it's in the reader's head. Ported from the Cifra·Chile meme-hilo pipeline — this is the transferable craft (the oblique method + the template engine), with the Chile-specific editorial/legal apparatus and its React MemePanel/hilos wiring left behind.
Surface-wit mode (absorbed from gabe-quip, 2026-07-30)
When the target is a rendered HTML surface — a command-center page, docsite page, HTML report, or mockup — the deliverable is a TEXT proposal, not a PNG: a witty page/section title, hero hook, or callout/label aside that surfaces the pain point and names the obvious-but-unsaid. Same craft rules as memes: the joke CARRIES the point, never replaces it; punch-up only; dosed (one lever among diagrams · memes · disclosure · labels · colors · styles). PROPOSES, never silently rewrites — present options, the human applies. NOT for markdown consumed by skills/agents (README, SKILL.md, workflow guides, .kdbp, config) — those stay straight and functional. Deep spec preserved at ../_archive/gabe-quip/.
Setup gate (run FIRST, every invocation)
Tone is a per-project choice — dark-oblique satire and dry dev-deadpan want
different words for the same fact — so it is seeded once per project and read
every run after.
- Look for
meme.config.json — check docs/memes/, then public/memes/,
then the repo root. If it exists, read it: tone + tone_note steer every
concept (thread them into the writing prompt, step 2), output_dir is where
PNGs land, real_subjects says whether the Ethics gate engages hard.
- If it does NOT exist, this is first use here — seed it, do not guess. Ask
the human with ONE AskUserQuestion carrying TWO questions: (a) tone — the
menu from
references/meme-craft.md §Setup, each option shown with its concrete
example meme as a preview on one shared subject so they feel the difference
("Other" = describe your own voice); (b) output dir — where PNGs + the
config live (docs/memes/ recommended · public/memes/ · Other). Then WRITE
<output_dir>/meme.config.json (real_subjects defaults true so ethics stays
on unless the project is clearly abstract/dev-only) and proceed to the pipeline.
One-time; later runs read it silently. The schema lives once in
references/meme-craft.md §Setup.
The four rules (the craft in one screen)
- A meme is a riddle, not a summary. It never says literally what happened. The darkness/humor comes from what it does not say. The mental-step test: if the reader gets it without thinking, it's mis-calibrated — the right meme earns a "wait… oh. oh."
- Implicit beats explicit. "Fined US$55M / damage US$1.5B" informs; "pay the fine / with the cartel's own profits / and keep the change / repeat" disturbs. Say the normal-sounding thing; let the reader supply the sinister part.
- Punch-up, never punch-down. Satire targets power (companies, institutions, systems), never the victim. Don't state a crime as fact about a named real person who has no final conviction — satirize the conduct or the entity instead, and anchor the caption to a source. (The full ethical line is in
references/meme-craft.md §Ethics — read it whenever real people or entities are involved.)
- Respect the template's persona. Every template has a voice (who speaks / who acts). Victim templates (
harold, blb) must never carry the perpetrator's words; perpetrator templates (rollsafe, stonks) must never speak for the victim. Wrong persona destroys the joke. (Catalog with per-template persona: references/meme-craft.md §Templates.)
The pipeline (default mode: /gabe-meme <subject> [count])
- Read the subject. Extract the 3–5 key facts, the actors involved (and — when they're real — their standing, so the meme knows what it can assert), and the single most absurd/ironic angle. If the subject is a file/thread, read it in full first (E1).
- Draft oblique concepts. For each meme: pick a template (never repeat one in the same set), write text that goes by the TANGENT of the fact in the project's
tone (from the config), apply the mental-step test, and cap each text field at ~10 words. Use the generation prompt in references/meme-craft.md §Writing (drop the config's tone/tone_note into its tone line).
- Present the concepts to the human as a table (position · template · exact text per field · the oblique connection the reader makes). They approve, edit, reject, or swap templates — authored satire is a human call, never auto-shipped.
- Render + verify. Build the memegen.link URL (mind the URL-encoding table — special chars are literal
%-encodes, NOT the ~d/~p escapes), confirm HTTP 200, download to the target dir, and Read the PNG to confirm it rendered right before integrating (E2 — a field in the wrong panel silently kills the joke). Never mark a meme done unseen.
- Report where (E7): the PNG paths + one line per meme (template + the connection it makes). Integration into a page/component is the caller's job — this skill produces verified images and their captions.
Ethics gate (run before rendering, whenever a real entity is named)
Punch-up · don't defame · verify the implicit facts · caption carries the source. Do not state a crime as fact about a real, un-convicted person; when in doubt, raise the abstraction and satirize the conduct/entity, not the individual. Full tiers and the literal-reading filters are in references/meme-craft.md §Ethics. A meme that fails the gate is rewritten (to a consequence) or re-templated — it does not ship.
Output contract
Per request: N verified meme PNGs (each rendered, Read-confirmed, non-repeating templates, in the project's tone), each with a one-line caption naming its source when a real subject is involved, plus the concept table the human approved. On first use in a project, also a seeded meme.config.json. No unseen renders, no punch-down, no template used against its persona. The setup schema + tone menu, template catalog, URL-encoding gotchas, brevity/legibility rules, and the writing prompt live once in references/meme-craft.md.
1---2name: gabe-meme3description: Oblique memes as visual metaphors — persona-matched template, text that lands by tangent, rendered via memegen.link and verified as PNG. Punch-up only. Also carries the surface-wit mode: sarcastic, insight-carrying titles/hooks/callouts for rendered HTML surfaces — proposes, never rewrites.4---56# Gabe Meme — oblique memes as engagement metaphors78**Usage:** `/gabe-meme <subject or thread> [count]`910## Gabe execution contract (E1–E7)1112This skill runs under the suite execution contract — E1 EVIDENCE · E2 RUN-BEFORE-✅ · E3 NO SILENT DOWNGRADE · E4 REUSE FIRST · E5 STATE SYNC · E6 MISSING ANCHOR = STOP · E7 REPORT WHERE — floors, not ceilings; a skill's own gate may be stricter, never looser. Full text: `../gabe-docs/references/execution-contract.md` (if that file is missing, E6 applies — STOP).1314## The intention (why this skill exists)1516*A meme is an oblique derivative of a subject: the facts come from the real thing, but the meme NEVER states them directly. It works by tangent — it says something that sounds almost normal, and the reader connects it to what's actually going on. The punchline isn't in the meme; it's in the reader's head.* Ported from the Cifra·Chile `meme-hilo` pipeline — this is the transferable craft (the oblique method + the template engine), with the Chile-specific editorial/legal apparatus and its React `MemePanel`/`hilos` wiring left behind.1718## Surface-wit mode (absorbed from gabe-quip, 2026-07-30)1920When the target is a rendered HTML surface — a command-center page, docsite page, HTML report, or mockup — the deliverable is a TEXT proposal, not a PNG: a witty page/section title, hero hook, or callout/label aside that surfaces the pain point and names the obvious-but-unsaid. Same craft rules as memes: the joke CARRIES the point, never replaces it; punch-up only; dosed (one lever among diagrams · memes · disclosure · labels · colors · styles). PROPOSES, never silently rewrites — present options, the human applies. NOT for markdown consumed by skills/agents (README, SKILL.md, workflow guides, .kdbp, config) — those stay straight and functional. Deep spec preserved at `../_archive/gabe-quip/`.2122## Setup gate (run FIRST, every invocation)2324Tone is a per-project choice — dark-oblique satire and dry dev-deadpan want25different words for the same fact — so it is seeded once per project and read26every run after.27281. **Look for `meme.config.json`** — check `docs/memes/`, then `public/memes/`,29 then the repo root. If it exists, read it: `tone` + `tone_note` steer every30 concept (thread them into the writing prompt, step 2), `output_dir` is where31 PNGs land, `real_subjects` says whether the Ethics gate engages hard.322. **If it does NOT exist, this is first use here — seed it, do not guess.** Ask33 the human with ONE AskUserQuestion carrying TWO questions: (a) **tone** — the34 menu from `references/meme-craft.md` §Setup, each option shown with its concrete35 example meme as a preview on one shared subject so they feel the difference36 ("Other" = describe your own voice); (b) **output dir** — where PNGs + the37 config live (`docs/memes/` recommended · `public/memes/` · Other). Then WRITE38 `<output_dir>/meme.config.json` (`real_subjects` defaults true so ethics stays39 on unless the project is clearly abstract/dev-only) and proceed to the pipeline.40 One-time; later runs read it silently. The schema lives once in41 `references/meme-craft.md` §Setup.4243## The four rules (the craft in one screen)44451. **A meme is a riddle, not a summary.** It never says literally what happened. The darkness/humor comes from what it does *not* say. **The mental-step test:** if the reader gets it without thinking, it's mis-calibrated — the right meme earns a "wait… oh. *oh.*"462. **Implicit beats explicit.** "Fined US$55M / damage US$1.5B" *informs*; "pay the fine / with the cartel's own profits / and keep the change / repeat" *disturbs*. Say the normal-sounding thing; let the reader supply the sinister part.473. **Punch-up, never punch-down.** Satire targets power (companies, institutions, systems), never the victim. Don't state a crime as fact about a named real person who has no final conviction — satirize the conduct or the entity instead, and anchor the caption to a source. (The full ethical line is in `references/meme-craft.md` §Ethics — read it whenever real people or entities are involved.)484. **Respect the template's persona.** Every template has a voice (who speaks / who acts). Victim templates (`harold`, `blb`) must never carry the perpetrator's words; perpetrator templates (`rollsafe`, `stonks`) must never speak for the victim. Wrong persona destroys the joke. (Catalog with per-template persona: `references/meme-craft.md` §Templates.)4950## The pipeline (default mode: `/gabe-meme <subject> [count]`)51521. **Read the subject.** Extract the 3–5 key facts, the actors involved (and — when they're real — their standing, so the meme knows what it can assert), and the single most absurd/ironic angle. If the subject is a file/thread, read it in full first (E1).532. **Draft oblique concepts.** For each meme: pick a template (never repeat one in the same set), write text that goes by the TANGENT of the fact **in the project's `tone`** (from the config), apply the mental-step test, and cap each text field at ~10 words. Use the generation prompt in `references/meme-craft.md` §Writing (drop the config's `tone`/`tone_note` into its tone line).543. **Present the concepts to the human** as a table (position · template · exact text per field · the oblique connection the reader makes). They approve, edit, reject, or swap templates — authored satire is a human call, never auto-shipped.554. **Render + verify.** Build the memegen.link URL (mind the URL-encoding table — special chars are literal `%`-encodes, NOT the `~d`/`~p` escapes), confirm HTTP 200, download to the target dir, and **Read the PNG to confirm it rendered right** before integrating (E2 — a field in the wrong panel silently kills the joke). Never mark a meme done unseen.565. **Report where** (E7): the PNG paths + one line per meme (template + the connection it makes). Integration into a page/component is the caller's job — this skill produces verified images and their captions.5758## Ethics gate (run before rendering, whenever a real entity is named)5960Punch-up · don't defame · verify the implicit facts · caption carries the source. Do not state a crime as fact about a real, un-convicted person; when in doubt, raise the abstraction and satirize the conduct/entity, not the individual. Full tiers and the literal-reading filters are in `references/meme-craft.md` §Ethics. A meme that fails the gate is rewritten (to a consequence) or re-templated — it does not ship.6162## Output contract6364Per request: N verified meme PNGs (each rendered, Read-confirmed, non-repeating templates, in the project's tone), each with a one-line caption naming its source when a real subject is involved, plus the concept table the human approved. On first use in a project, also a seeded `meme.config.json`. No unseen renders, no punch-down, no template used against its persona. The setup schema + tone menu, template catalog, URL-encoding gotchas, brevity/legibility rules, and the writing prompt live once in `references/meme-craft.md`.