@aicopycoders/exodus 2026.6.2900 → 2026.6.2902
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/assets/docs/CLAUDE.md +1 -2
- package/assets/skills/exodus/SKILL.md +3 -5
- package/assets/skills/exodus-genesis/SKILL.md +4 -15
- package/assets/skills/exodus-strategist/SKILL.md +3 -4
- package/assets/skills/exodus-write/SKILL.md +1 -1
- package/dist/bin/exodus.js +2 -3
- package/dist/commands/genesis.js +6 -38
- package/package.json +1 -1
- package/assets/skills/exodus-idea/SKILL.md +0 -78
- package/assets/skills/exodus-swipe/SKILL.md +0 -85
package/assets/docs/CLAUDE.md
CHANGED
|
@@ -53,8 +53,7 @@ These are the **Exodus** pipelines — the automatic system that drives the Gene
|
|
|
53
53
|
| Pipeline | Skill | When to Use |
|
|
54
54
|
|----------|-----------|-------------|
|
|
55
55
|
| **Write** | `exodus-write` | **Start here for copywriting.** Say what you want ("exodus, write me some ads"); it routes new-brand → foundation → brief → genesis → Doc and sequences the whole flow. |
|
|
56
|
-
| **Genesis** | `exodus-genesis` | Brief → ad copy in two voices (Mario + Infeed). Default 1 pass = 2 variants; scale with `--passes` (pass 2 adds the Top-Ads-biased primer).
|
|
57
|
-
| **Idea** | `exodus-idea` | The Idea Bank — capture reels/brain-dumps/swipes into formed ideas, curate them, then write the keepers through Genesis. Use when collecting and curating ideas rather than writing one ad on the spot. |
|
|
56
|
+
| **Genesis** | `exodus-genesis` | Brief → ad copy in two voices (Mario + Infeed). Default 1 pass = 2 variants; scale with `--passes` (pass 2 adds the Top-Ads-biased primer). |
|
|
58
57
|
| **Image** | `exodus-image` | **Start here for static images.** Say what you want; it reads the request and routes to the right engine — `exodus-creative` (renders from copy) or `exodus-template` (50 ad-type formats). |
|
|
59
58
|
| **Creative** | `exodus-creative` | A specific creative-suite engine (native / copy-derived renders from copy, or ref-match to a reference image) when you've already picked one. Otherwise start at **Image**. |
|
|
60
59
|
| **Template** | `exodus-template` | Finished ad copy → many static ads across 50 structured formats (testimonial, hero, UGC…). Otherwise start at **Image**. |
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: exodus
|
|
3
|
-
description: The front door for ALL Exodus requests — the done-for-you ad system (copy pipelines, image engines,
|
|
3
|
+
description: The front door for ALL Exodus requests — the done-for-you ad system (copy pipelines, image engines, brand onboarding) driven by the `npx @aicopycoders/exodus` CLI. Invoke whenever the user says "exodus" and hasn't already named a specific exodus-* skill — "exodus, write me some ads", "use exodus to make images", "set up my brand in exodus", "what can exodus do", "show me my exodus runs". This skill reads the request and routes it to the right exodus-* skill; it never does the pipeline work itself. Only invoke when the user explicitly says "exodus" (or is clearly continuing an Exodus conversation) — never claim generic copywriting/image/idea requests; in shared folders those may belong to the user's other tools. The bare word "Genesis" without "exodus" refers to the member's own Genesis API key and personal bot recipes, NOT to Exodus — if the user asks for "genesis" alone, they mean their own direct Genesis workflow, so do not route them here.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Exodus — the front door
|
|
7
7
|
|
|
8
|
-
Exodus is the done-for-you ad system: pre-built pipelines that run Luke's full creative process (writing, images,
|
|
8
|
+
Exodus is the done-for-you ad system: pre-built pipelines that run Luke's full creative process (writing, images, onboarding) through the `npx @aicopycoders/exodus` CLI against the member's brand workspace. The member's only setup is the `EXODUS_API_KEY` already in this folder's `.env` — Exodus handles its own Genesis access internally; the user never configures a Genesis key for Exodus.
|
|
9
9
|
|
|
10
10
|
This skill ROUTES. Read what the user wants, name the destination skill, and hand off to it. Don't run pipelines from here.
|
|
11
11
|
|
|
@@ -14,12 +14,10 @@ This skill ROUTES. Read what the user wants, name the destination skill, and han
|
|
|
14
14
|
| The user wants… | Route to |
|
|
15
15
|
|---|---|
|
|
16
16
|
| Write ad copy, has a brief, "where do I start" | `exodus-write` (the copy front door — it sequences onboarding → writing) |
|
|
17
|
-
| Run the full writing pipeline on a brief
|
|
17
|
+
| Run the full writing pipeline on a brief | `exodus-genesis` |
|
|
18
18
|
| Static image ads ("make images", "statics", "render this ad") | `exodus-image` (the image front door — it menus engines and confirms before firing) |
|
|
19
19
|
| A specific image engine they already chose | `exodus-creative` (native / copy-derived / ref-match) or `exodus-template` (33 ad-type formats) |
|
|
20
20
|
| Meme ads ("exodus, meme this offer", "make me meme ads") | `exodus-meme` |
|
|
21
|
-
| Capture/curate/write from the Idea Bank | `exodus-idea` |
|
|
22
|
-
| Swipe a Facebook Ad Library ad | `exodus-swipe` |
|
|
23
21
|
| Onboard a new brand / build the primer | `exodus-primer` (with winning ads) or `exodus-foundation` (no ads yet) |
|
|
24
22
|
| List/switch/troubleshoot brands | `exodus-brand` |
|
|
25
23
|
| See past runs / find an output | `exodus-browse` |
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: exodus-genesis
|
|
3
|
-
description: Run the standalone Exodus Genesis pipeline — Luke's full writing process. Hooks come from the dedicated new-hook-bot (a single ~10-hook pool); the human hook gate then lets the user review and pick those hooks RIGHT IN CLAUDE CODE (the primary venue; dashboard is ad-hoc) — each pick becomes one ad — or auto-pick and write straight through. Body copy is written across two voices (MarioBot + Infeed VSL) on the brand primer; in auto mode the default is one pass per bot = 2 variants and more passes widen coverage / bring in the Top-Ads-Biased primer (passes don't apply in manual mode). Includes the per-variant editing menu (Natural Language / Shorten / Cut / Simplify / Make Better).
|
|
3
|
+
description: Run the standalone Exodus Genesis pipeline — Luke's full writing process. Hooks come from the dedicated new-hook-bot (a single ~10-hook pool); the human hook gate then lets the user review and pick those hooks RIGHT IN CLAUDE CODE (the primary venue; dashboard is ad-hoc) — each pick becomes one ad — or auto-pick and write straight through. Body copy is written across two voices (MarioBot + Infeed VSL) on the brand primer; in auto mode the default is one pass per bot = 2 variants and more passes widen coverage / bring in the Top-Ads-Biased primer (passes don't apply in manual mode). Includes the per-variant editing menu (Natural Language / Shorten / Cut / Simplify / Make Better). Only invoke when the user has explicitly invoked Exodus: they said "exodus" in the request ("run the exodus genesis pipeline", "exodus, run another pass"), named this skill or /exodus-genesis, ran an `npx exodus` command, or the `exodus` hub skill routed here. Never claim generic requests ("run the Genesis pipeline") — in shared folders those may belong to the user's other tools; if the user did not say exodus, this skill is not for them. The bare word "Genesis" without "exodus" refers to the member's own Genesis API key and personal bot recipes, NOT to Exodus — never hijack their direct Genesis workflows into this pipeline.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
```operator-guide
|
|
7
|
-
|
|
7
|
+
Input:
|
|
8
8
|
brief — concept, derived hook, or paste of the source ad (genesis run --brief)
|
|
9
|
-
reel — an Instagram/TikTok reel URL to write ads from (genesis --reel "<url>")
|
|
10
9
|
Optional:
|
|
11
10
|
seeds — per-run creative angles extracted from the source ad
|
|
12
11
|
(file path with one seed per line, OR an inline string)
|
|
@@ -64,23 +63,13 @@ A brief covers: what the ad is about · what happens in it · the emotional core
|
|
|
64
63
|
|
|
65
64
|
```
|
|
66
65
|
BRIEF: "[short evocative title]"
|
|
67
|
-
Hook: "[verbatim hook if
|
|
66
|
+
Hook: "[verbatim hook if the user gave one, else a hook DIRECTION or leave open]"
|
|
68
67
|
Source: [where the idea came from]
|
|
69
68
|
[1–2 paragraphs: scenario, emotional core, mechanism bridge, tone, why it works]
|
|
70
69
|
```
|
|
71
70
|
|
|
72
71
|
Worked brief examples and the awareness→primer mapping are in `references/awareness-framework.md`. Hook direction and the vicious standard are in `references/hook-quality-checklist.md`.
|
|
73
72
|
|
|
74
|
-
### 1b. Writing from a reel (`--reel`)
|
|
75
|
-
|
|
76
|
-
When the user pastes an Instagram/TikTok reel and wants ads from it, you don't shape a brief by hand — the reel *is* the source. Fire it in the background:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npx @aicopycoders/exodus genesis --reel "<url>" --awareness <level> [--passes n]
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
This transcribes the reel into an Idea Bank "organic" idea, then writes that idea through this same Genesis writer (Mario + Infeed) — a reel is just another input to the standard writer. It banks the idea (so there's a reusable record) AND writes in one shot, returning a Genesis run. Capture is async, so it takes a beat longer than a typed brief before writing starts. If the reel is private/region-locked/has no transcript, capture yields nothing — surface that and ask for an alternate. When the user wants to collect several reels to curate *before* writing, route to the `exodus-idea` skill instead.
|
|
83
|
-
|
|
84
73
|
### 2. Extract seeds (when there's a source ad)
|
|
85
74
|
|
|
86
75
|
When the user pastes a winning ad, extract seeds yourself. A seed is a creative angle, mechanism, or pattern surfaced from the source — examples:
|
|
@@ -98,7 +87,7 @@ Save to `/tmp/genesis-seeds.txt` (one per line, `#` comments allowed), or pass `
|
|
|
98
87
|
|
|
99
88
|
**Awareness is your call** (Principle 2) — state your read, don't make the user pick: "this reads problem-aware because X — sound right?" The primer is awareness-keyed: `--awareness` picks which of the brand's two foundation primers (`primerUnawareProblemAware` cold / `primerSolutionProductAware` warm) the bots receive. Default `problem-aware` when unsure. Pick ONE level; never mix buckets in a run.
|
|
100
89
|
|
|
101
|
-
**Pass count is the user's knob** — if they didn't specify, surface a quick menu (1 pass / 2 variants recommended · 2 passes / 4 variants · more) rather than assuming. Always `run_in_background: true` — these runs
|
|
90
|
+
**Pass count is the user's knob** — if they didn't specify, surface a quick menu (1 pass / 2 variants recommended · 2 passes / 4 variants · more) rather than assuming. Always `run_in_background: true` — these runs exceed Claude Code's foreground limit. Never quote the user a finish time; just say it's running and you'll surface the Doc when it lands.
|
|
102
91
|
|
|
103
92
|
```bash
|
|
104
93
|
# Resolve hook mode FIRST (see "Hook selection mode" below) — these commands
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: exodus-strategist
|
|
3
|
-
description: The Exodus creative-strategist persona — operating rules, creative principles, the Red Flags self-check, the active-brand resolution protocol, and a framework index that routes to the depth in `references/`. Only activate when the CURRENT request is Exodus work — the user said "exodus", invoked an exodus-* skill or `/exodus-<name>`, ran an `npx exodus` command, or the turn continues an Exodus pipeline conversation — AND the directory is an Exodus workspace (contains `.exodus/state.json` or `.claude/skills/exodus-genesis/`). Required before any Exodus creative recommendation, hook critique, awareness call, segment/strategy decision, copy-block score, iteration choice, or exodus-* pipeline invocation (exodus-genesis, exodus-
|
|
3
|
+
description: The Exodus creative-strategist persona — operating rules, creative principles, the Red Flags self-check, the active-brand resolution protocol, and a framework index that routes to the depth in `references/`. Only activate when the CURRENT request is Exodus work — the user said "exodus", invoked an exodus-* skill or `/exodus-<name>`, ran an `npx exodus` command, or the turn continues an Exodus pipeline conversation — AND the directory is an Exodus workspace (contains `.exodus/state.json` or `.claude/skills/exodus-genesis/`). Required before any Exodus creative recommendation, hook critique, awareness call, segment/strategy decision, copy-block score, iteration choice, or exodus-* pipeline invocation (exodus-genesis, exodus-creative, exodus-template, exodus-meme, exodus-image, exodus-browse, exodus-drive, exodus-brand, exodus-primer, exodus-foundation). Brand-agnostic: reads the active brand at runtime and adapts. Do NOT activate for requests that don't involve Exodus — this folder may also hold the user's other toolkits (their own Genesis API recipes, other skill packs), and those sessions are not yours to steer. The bare word "Genesis" without "exodus" refers to the member's own Genesis API key and recipes, not to Exodus.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Strategist Mode — the creative strategist
|
|
@@ -66,6 +66,7 @@ Luke's hard rules for running the system. Break them and the whole thing feels w
|
|
|
66
66
|
6. **Feedback bakes back.** When the user corrects a draft — a voice note, a dos/don'ts, "stop doing X" — fold it into the brand's **primer** (its steering), so the next `genesis` run inherits it. A correction made once shouldn't have to be made the same way twice. (Depth: `references/editing-rules.md`.)
|
|
67
67
|
7. **Make outputs easy.** Simple, copy-paste-ready, listed **all at once** — not drip-fed, not a "sample," not buried under narration.
|
|
68
68
|
8. **Set boundaries while handing over control.** State how it's done ("this is how we do awareness"), then offer to change it. Guide the taxonomy; don't let the user freelance it, and don't railroad them either.
|
|
69
|
+
9. **Never estimate timing.** Don't tell the user how long a run, write, or render will take — no minute counts, no "takes about X," no "this'll be quick." Runs go to the background; just say it's running and you'll surface the Doc/output when it lands. Time guesses are never accurate and erode trust.
|
|
69
70
|
|
|
70
71
|
---
|
|
71
72
|
|
|
@@ -206,11 +207,9 @@ How: at the end of a session where you hit gaps, surface a short bulleted list t
|
|
|
206
207
|
This skill is the persona and the map. The other skills are the work.
|
|
207
208
|
|
|
208
209
|
- **exodus-write** — the front door for copy. When the user wants Exodus to write and hasn't named a pipeline ("exodus, write me ads", "I have a brief for exodus"), start here: it routes new-brand→onboarding / brief→exodus-genesis / rerun→exodus-browse and sequences the arc.
|
|
209
|
-
- **exodus-genesis** — the copy pipeline (Mario + Infeed; default 1 pass = 2 variants, scale with `--passes
|
|
210
|
-
- **exodus-idea** — the Idea Bank: capture reels/brain-dumps/swipes into formed ideas, curate, then write the keepers through the pipeline.
|
|
210
|
+
- **exodus-genesis** — the copy pipeline (Mario + Infeed; default 1 pass = 2 variants, scale with `--passes`), once routing is decided.
|
|
211
211
|
- **exodus-image** — the front door for statics; routes to `exodus-creative` (renders from copy) or `exodus-template` (33 ad-type formats).
|
|
212
212
|
- **exodus-creative / exodus-template** — the specific static engines, once you've picked one.
|
|
213
|
-
- **exodus-swipe** — paste a Facebook Ad Library link → write fresh ads modeled on it (ask what about the ad to model first).
|
|
214
213
|
- **exodus-primer / exodus-foundation / exodus-brand** — onboarding and workspace maintenance (the primer is where feedback bakes back).
|
|
215
214
|
- **exodus-drive / exodus-browse** — operational lookups and run history; to pull the latest CLI and skills, run `npx @aicopycoders/exodus@latest init`.
|
|
216
215
|
|
|
@@ -124,7 +124,7 @@ Awareness picks the primer; never mix buckets in one run. Detail in `references/
|
|
|
124
124
|
|
|
125
125
|
Skip the passes menu if the user already said how many, or whenever the mode is manual. Awareness you do *not* menu — that's your strategist call from Stage B; state it and move.
|
|
126
126
|
|
|
127
|
-
Hand off to the `exodus-genesis` skill — it owns the run (the built-in 15-point QA, the in-Claude-Code hook review, the editing menu). Always background it
|
|
127
|
+
Hand off to the `exodus-genesis` skill — it owns the run (the built-in 15-point QA, the in-Claude-Code hook review, the editing menu). Always background it — these runs run past Claude Code's foreground limit. Don't tell the user how long it'll take; say it's running and you'll surface the Doc when it lands.
|
|
128
128
|
|
|
129
129
|
```bash
|
|
130
130
|
# Manual — review & pick hooks in Claude Code (one ad per pick; no passes):
|
package/dist/bin/exodus.js
CHANGED
|
@@ -17,17 +17,16 @@ const OTHER_COMMANDS = new Set([
|
|
|
17
17
|
"doctor",
|
|
18
18
|
"init",
|
|
19
19
|
"migrate",
|
|
20
|
-
"idea",
|
|
21
20
|
]);
|
|
22
21
|
const HIDDEN_COMMANDS = new Set([
|
|
23
22
|
"creative",
|
|
24
23
|
"template",
|
|
24
|
+
"idea",
|
|
25
|
+
"swipe",
|
|
25
26
|
]);
|
|
26
27
|
const EXAMPLES = [
|
|
27
28
|
'exodus genesis run --brief "joint pain relief in 30 days" --variants 6',
|
|
28
29
|
'exodus genesis run --brief brief.txt --seeds seeds.txt',
|
|
29
|
-
'exodus genesis --list-swipes',
|
|
30
|
-
'exodus genesis --swipe <id>',
|
|
31
30
|
'exodus image --ad "grounding sheets reduce inflammation"',
|
|
32
31
|
'exodus image --type template --input "1. first ad ... 2. second ad ..."',
|
|
33
32
|
'exodus image --type ref-match --refs k57abc123,k57def456 --subject "morning routine"',
|
package/dist/commands/genesis.js
CHANGED
|
@@ -12,58 +12,26 @@ export const helpText = `
|
|
|
12
12
|
exodus genesis — write ads with the Genesis writer (Mario + Infeed, 1 pass each by default)
|
|
13
13
|
|
|
14
14
|
Genesis is the one writing pipeline (Mario + Infeed voices → body copy → QA →
|
|
15
|
-
Google Doc).
|
|
16
|
-
the inspiration comes from.
|
|
15
|
+
Google Doc). Write from a typed brief.
|
|
17
16
|
|
|
18
17
|
Usage:
|
|
19
18
|
exodus genesis run --brief <file|"text"> Write from a typed brief
|
|
20
|
-
exodus genesis --reel "<url>" Mode 1: transcribe a reel → idea bank → write ads
|
|
21
|
-
exodus genesis --swipe-url "<url>" Swipe: scrape a Facebook Ad Library link → idea bank → write ads
|
|
22
|
-
exodus genesis --from-bank Mode 2: list banked reels to write from
|
|
23
|
-
exodus genesis --from-bank --idea <id> Mode 2: write from a specific banked reel
|
|
24
|
-
exodus genesis --list-swipes Swipe: list saved competitor ads to write from
|
|
25
|
-
exodus genesis --swipe <id> Swipe: write from a saved competitor ad (model after it)
|
|
26
|
-
exodus genesis scrape [--organic] Mode 3: fill the idea bank for the active brand
|
|
27
|
-
exodus genesis connect-instagram Mode 3: connect this brand's Instagram account
|
|
28
|
-
|
|
29
|
-
Source (choose one):
|
|
30
|
-
--brief <file|"text"> Typed brief (file path or inline string)
|
|
31
|
-
--reel "<url>" Instagram or TikTok reel URL to model
|
|
32
|
-
--swipe-url "<url>" Facebook Ad Library link to swipe (scrape → hook → write)
|
|
33
|
-
--from-bank [--idea <id>] Idea bank: list with no id, or write from <id>
|
|
34
|
-
--swipe <id> Saved swipe (competitor ad): write modeled after <id>
|
|
35
|
-
--list-swipes List saved swipes for your tracked competitors
|
|
36
19
|
|
|
37
20
|
Options:
|
|
38
|
-
--
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
--
|
|
42
|
-
line OR a JSON array. Inline: a single seed.
|
|
21
|
+
--brief <file|"text"> Typed brief (file path or inline string)
|
|
22
|
+
--seeds <file|"text"> Per-run creative seeds. File: one per line OR a
|
|
23
|
+
JSON array. Inline: a single seed.
|
|
24
|
+
--steering "<text>" With regenerate: re-roll guidance for the hook pool.
|
|
43
25
|
--awareness <level> unaware | problem-aware (default) | solution-aware | product-aware
|
|
44
26
|
--passes <n> Writing passes per bot — Mario + Infeed (1-5, default 1 = 2 variants)
|
|
45
27
|
--variants <n> Advanced: raw total variant count (1-10); overrides --passes
|
|
46
28
|
--ad-account <id> Meta ad account ID for the top-ads-biased track
|
|
47
|
-
--limit <n> Rows when listing the bank (default 20)
|
|
48
29
|
--no-wait Return immediately with the run ID
|
|
49
30
|
--wait Poll until the run completes (default)
|
|
50
31
|
|
|
51
|
-
Scrape (Mode 3) options:
|
|
52
|
-
--organic Authenticated FYP walk via the connected IG account
|
|
53
|
-
--term "<search>" Fresh ScrapeCreators discovery scoped to a term (no IG login needed)
|
|
54
|
-
--smoke With --organic: shorter verification walk
|
|
55
|
-
--username <handle> With connect-instagram: the IG handle being connected
|
|
56
|
-
|
|
57
32
|
Examples:
|
|
33
|
+
exodus genesis run --brief "joint pain relief in 30 days" --variants 6
|
|
58
34
|
exodus genesis run --brief brief.txt --seeds seeds.txt
|
|
59
|
-
exodus genesis --reel "https://www.instagram.com/reel/Cabc123/"
|
|
60
|
-
exodus genesis --swipe-url "https://www.facebook.com/ads/library/?id=2119680725509450"
|
|
61
|
-
exodus genesis --from-bank
|
|
62
|
-
exodus genesis --from-bank --idea kn7abc... --awareness solution-aware
|
|
63
|
-
exodus genesis --list-swipes
|
|
64
|
-
exodus genesis --swipe kn7abc... --awareness solution-aware
|
|
65
|
-
exodus genesis connect-instagram --username mybrandhandle
|
|
66
|
-
exodus genesis scrape --organic
|
|
67
35
|
`.trim();
|
|
68
36
|
function resolveTextFlag(raw) {
|
|
69
37
|
if (typeof raw !== "string" || raw.trim() === "")
|
package/package.json
CHANGED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: exodus-idea
|
|
3
|
-
description: Capture, curate, and write from the Exodus Idea Bank — the brand's home for formed ideas (a hook + a short concept) you collect now and write later, living in the Exodus dashboard. The Organic capture path transcribes a pasted Instagram/TikTok reel into a reusable idea; `idea write` (or `organic --write`) escalates a banked idea to the Genesis writer. If the user instead wants ads written from a reel RIGHT NOW in one shot — "exodus, make me ads from this reel" — that's the `exodus-genesis` skill (`--reel`); use this skill when the bank itself is the point (collect, curate, then write). Only invoke when the user has explicitly invoked Exodus — they said "exodus" in the request ("exodus, add this to my idea bank", "save these reels to the exodus idea bank", "exodus, write idea O3"), named this skill or /exodus-idea, ran an `npx @aicopycoders/exodus idea` command, referenced Exodus idea-bank keys from a prior run (O3, G1, S4), or the exodus hub skill routed here — gate "idea bank" mentions to Exodus context. Never claim generic idea or note-taking requests ("save this idea for later", "show me my ideas") — in shared folders those may belong to the user's other tools. The bare word "Genesis" without "exodus" refers to the member's own Genesis API key and personal bot recipes, NOT to Exodus.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
```operator-guide
|
|
7
|
-
Idea Bank = formed ideas (hook + 1-2 line concept), brand-agnostic, written later.
|
|
8
|
-
Capture (three sources):
|
|
9
|
-
gambit "<brain-dump>" split a freeform dump into discrete ideas
|
|
10
|
-
organic "<url> ..." [--write] pull ONE idea from each IG/TikTok reel (transcribe → extract)
|
|
11
|
-
swipe [--limit n] extract concepts from the saved swipe library
|
|
12
|
-
Curate:
|
|
13
|
-
list [--source ..] [--status raw|writing|written|archived] [--limit n]
|
|
14
|
-
note <KEY> "<steering>" · edit <KEY> "<new concept>" · add "<hook>" [--desc ..] · rm <KEY> [--hard]
|
|
15
|
-
Write:
|
|
16
|
-
write <KEYS> [--awareness <level>] [--passes n] one Genesis run per key (brief-mode)
|
|
17
|
-
Keys look like G1 (gambit) · O2 (organic) · S4 (swipe). Capture is fire-and-forget on Trigger.
|
|
18
|
-
Returns: banked ideas appear in `idea list`; writes return a Genesis run + Google Doc per key.
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
# Idea Bank — Collect Now, Write Later
|
|
22
|
-
|
|
23
|
-
The Idea Bank is where formed ideas live between "I saw something worth using" and "write it." An idea is a **hook + a short concept** — not the finished ad. Capture cheaply, curate the keepers, then escalate the ones you like to the Genesis writer. The analysis happens at capture; writing is a plain brief-mode Genesis run, so the brand's voice/steering is applied by the writers (Mario + Infeed), not baked into the idea — banked ideas stay reusable across runs.
|
|
24
|
-
|
|
25
|
-
> **Reel → ads, one shot vs. bank-first.** Both this skill and `exodus-genesis` can write from a pasted reel. Use **the `exodus-genesis` skill (`--reel`)** when the user wants ads *now* from one reel and doesn't care about the bank. Use **`exodus-idea`** when the bank is the point — they're collecting several reels/angles, want to review before writing, or are working through a list. `idea organic --write` is the middle path: capture to the bank AND write in one shot.
|
|
26
|
-
|
|
27
|
-
## Workflow
|
|
28
|
-
|
|
29
|
-
### 1. Capture — get ideas into the bank
|
|
30
|
-
|
|
31
|
-
Pick the source from what the user handed you:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
# Reels — transcribe each IG/TikTok link into one reusable idea:
|
|
35
|
-
npx @aicopycoders/exodus idea organic "https://www.instagram.com/reel/abc https://www.tiktok.com/@x/video/123"
|
|
36
|
-
|
|
37
|
-
# Brain-dump — split a freeform stream into discrete ideas:
|
|
38
|
-
npx @aicopycoders/exodus idea gambit "joint pain at 40, sleep angle, grounding vs pills"
|
|
39
|
-
|
|
40
|
-
# Swipes — mine concepts from the saved competitor-ad library:
|
|
41
|
-
npx @aicopycoders/exodus idea swipe --limit 10
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Capture is **fire-and-forget** (it scrapes/transcribes/extracts on the queue). Don't poll — tell the user the ideas will land in the bank, and that `idea list` shows them as they arrive. A reel that's private, region-locked, or has no transcript just won't produce an idea; surface that if the user expected one.
|
|
45
|
-
|
|
46
|
-
### 2. Curate — make the keepers writable
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
npx @aicopycoders/exodus idea list --source organic --status raw # review what landed
|
|
50
|
-
npx @aicopycoders/exodus idea note O2 "lean harder on the cortisol angle, never mention sleep meds"
|
|
51
|
-
npx @aicopycoders/exodus idea edit O2 "A 40-something realizes their 'bad sleep' is actually high cortisol…"
|
|
52
|
-
npx @aicopycoders/exodus idea add "It's not low T — it's too high cortisol" --desc "reframe hook" --source gambit
|
|
53
|
-
npx @aicopycoders/exodus idea rm O5 # archive a dud (--hard to delete)
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
`note` attaches persistent steering that rides along into the Genesis run as a Direction block. `edit` rewrites the concept itself. Keys are stable (`O2`, `G1`, `S4`).
|
|
57
|
-
|
|
58
|
-
### 3. Write — escalate to Genesis
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
# Write the ones the user picked — one Genesis run per key:
|
|
62
|
-
npx @aicopycoders/exodus idea write O2,G1 --awareness solution-aware
|
|
63
|
-
|
|
64
|
-
# Or capture a reel AND write it immediately (bank-and-write in one shot):
|
|
65
|
-
npx @aicopycoders/exodus idea organic "https://www.instagram.com/reel/abc" --write --awareness problem-aware
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
`write` is fire-and-forget — it dispatches a brief-mode Genesis run per key (Mario + Infeed, default 1 pass = 2 variants; `--passes`/`--variants` scale it) and links each idea to its run. **Awareness is your call** (state your read; default `problem-aware`). The idea flips to `writing`, then `written` with a Doc link once the run lands.
|
|
69
|
-
|
|
70
|
-
### 4. Report
|
|
71
|
-
|
|
72
|
-
Per the **Default Post-Run Reporting** rule in `exodus-strategist`: for a capture, confirm what's being pulled and where it'll show up (`idea list`). For a write, surface the dispatched run(s) and that status flips to `written` with a Doc link — then propose a next move (curate the rest, write a second batch, or pair a strong result with the `exodus-image` skill).
|
|
73
|
-
|
|
74
|
-
## Notes
|
|
75
|
-
|
|
76
|
-
- **Banked ideas are brand-agnostic and reusable** — the same idea can be written for different awareness levels or re-run later. Don't re-capture a reel you've already banked; `idea list --source organic` first.
|
|
77
|
-
- **Reel capture reuses the same transcription as the `exodus-genesis` skill's `--reel` path** — both go reel → transcribe → organic idea → Genesis writer (the standard writer, nothing custom).
|
|
78
|
-
- A reel write models the reel's *angle*; the Genesis writers apply the brand's primer, hook bank, and steering, so the output is on-brand without the idea itself being brand-specific.
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: exodus-swipe
|
|
3
|
-
description: Swipe a single ad the user pastes as a Facebook Ad Library link and write fresh ads modeled after it, through Exodus. The scrape reliably captures the ad's primary text and headline; on-screen text and video transcripts are best-effort and often absent — if the user wants a video's script modeled and the transcript didn't come through, ask them to paste the script or describe the beat, and pass it as steering. Pulls the working hook and writes it through the Genesis writer for the ACTIVE Exodus brand. The one rule: before running, ASK the user what about the ad they want to model (the angle, the structure, the emotional beat, the format) and pass that along as steering — a swipe without a point of view just copies. Only invoke when the user has explicitly invoked Exodus — they said "exodus" in the request ("exodus swipe this ad", "exodus, model this competitor ad", "exodus, do our version of this"), named this skill or /exodus-swipe, ran an `npx exodus` command, or the exodus hub skill routed here. Never claim a generic "swipe this ad" / "rip this ad" or a bare pasted facebook.com/ads/library link on its own — in shared folders those may belong to the user's other tools. If the user instead wants to write from an Instagram/TikTok reel, that's the `exodus-genesis` skill (`--reel`); to collect ideas to curate before writing, that's the `exodus-idea` skill. The bare word "Genesis" without "exodus" refers to the member's own Genesis API key and personal bot recipes, NOT to Exodus.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
```operator-guide
|
|
7
|
-
Swipe one pasted Facebook Ad Library link → write ads for the active brand:
|
|
8
|
-
npx @aicopycoders/exodus genesis --swipe-url "<fb-ad-library-url>" --steering "<what to model>" --awareness <level>
|
|
9
|
-
|
|
10
|
-
--swipe-url a https://www.facebook.com/ads/library/?id=<number> link
|
|
11
|
-
--steering REQUIRED in practice: what the user wants to model from the ad
|
|
12
|
-
(angle / structure / hook style / emotional beat / format)
|
|
13
|
-
--awareness unaware | problem-aware (default) | solution-aware | product-aware
|
|
14
|
-
--passes N writing passes per bot (1-5, default 1 = 2 variants)
|
|
15
|
-
|
|
16
|
-
Scoped to the active brand — confirm with `npx @aicopycoders/exodus brand current`. The output
|
|
17
|
-
always pitches the ACTIVE brand, never the brand in the swiped ad.
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
# Swipe — paste an ad, write your own
|
|
21
|
-
|
|
22
|
-
A swipe is the fastest way to turn a great ad someone else is running into ads for *your* brand. The user finds an ad in Facebook's Ad Library, pastes the link, and this skill scrapes it, extracts the working hook, and runs it through the Genesis writer (Mario + Infeed) for the active brand — banking a reusable idea along the way. It's the same capture → Idea Bank → Genesis path a pasted reel uses; a swiped ad is just another input to the standard writer.
|
|
23
|
-
|
|
24
|
-
This is the **basic, primary swipe**: one pasted link, written now. (Automated competitor sweeps will grow into this same skill later — for now it's one link at a time.)
|
|
25
|
-
|
|
26
|
-
## The one thing you must do first: ask what to model
|
|
27
|
-
|
|
28
|
-
**Do not fire the command the instant you see a link.** A swipe with no point of view just rewrites the ad — that's not the job. The value is in *what the user wants to borrow* from it.
|
|
29
|
-
|
|
30
|
-
So before running, ask one focused question, e.g.:
|
|
31
|
-
|
|
32
|
-
> "Got it — what is it about this ad you want to model? The angle? The hook style? The story structure? The format? Give me the gist and I'll steer the write toward it."
|
|
33
|
-
|
|
34
|
-
Take their answer and pass it verbatim-ish through `--steering`. That steering is folded into the brief as explicit direction, so the writer leans into the thing the user actually liked instead of guessing. If the user already told you what they want to model in the same breath ("swipe this — I love how it opens with the failure story"), you don't need to ask again; lift that into `--steering` and go.
|
|
35
|
-
|
|
36
|
-
Examples of good steering:
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
"the way it opens on the embarrassing moment before naming the product"
|
|
40
|
-
"the side-by-side before/after structure, keep that bones"
|
|
41
|
-
"the skeptical-friend angle — someone who didn't believe it at first"
|
|
42
|
-
"the punchy one-line hook style, not the long VSL build"
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## Resolve awareness, then run in the background
|
|
46
|
-
|
|
47
|
-
**Awareness is your call** — state your read rather than making the user pick: "this reads problem-aware because X — sound right?" Default `problem-aware` when unsure. The primer is awareness-keyed, so pick one level.
|
|
48
|
-
|
|
49
|
-
Then fire it in the background (capture + a Genesis run is well past the 10-min foreground window):
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
npx @aicopycoders/exodus genesis --swipe-url "<url>" --steering "<what to model>" --awareness <level> [--passes n]
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
If the user didn't say how many variants, surface the quick passes menu (1 pass / 2 variants recommended) like a normal Genesis run rather than assuming a big one.
|
|
56
|
-
|
|
57
|
-
## What happens under the hood
|
|
58
|
-
|
|
59
|
-
1. The ad is scraped from the Ad Library. The primary text (body copy) and headline come through reliably; CTA and link description usually do. On-screen image text and spoken video transcripts are **best-effort and often absent** — don't promise them. If the user specifically wants the video's script modeled and the transcript didn't come through, ask them to paste the script or describe the beat, and pass it along in `--steering`.
|
|
60
|
-
2. The strongest hook + a one-line concept are extracted and **banked as a reusable idea** for the active brand (so there's a record you can rewrite later).
|
|
61
|
-
3. Your `--steering` is attached to that idea as direction.
|
|
62
|
-
4. The idea is written through the Genesis writer — same Mario + Infeed voices, same Google Doc output as any Genesis run.
|
|
63
|
-
|
|
64
|
-
It banks AND writes in one shot, returning a Genesis run id. Because capture is async, it takes a beat longer than a typed brief before writing starts.
|
|
65
|
-
|
|
66
|
-
## When a swipe yields nothing
|
|
67
|
-
|
|
68
|
-
Some ads can't be swiped:
|
|
69
|
-
|
|
70
|
-
- **Image-only with no readable text** — nothing to extract a hook from. Ask the user to paste the ad's text, or pick a different ad.
|
|
71
|
-
- **Video ad whose script didn't come through** — transcripts are best-effort, not guaranteed. If the user wanted the video's script or beats modeled, ask them to paste the script (or describe the beat) and pass it as `--steering` so the writer still gets the thing they liked.
|
|
72
|
-
- **Inactive / removed / not yet in the index** — the Ad Library link 404s on the scraper. Confirm the ad is still live on the page, then try again or pick another.
|
|
73
|
-
- **Wrong link** — the URL must carry the `?id=<number>` query param. If the user pasted a search or page URL, ask for the single-ad link (the ad's "⋯ → Copy link").
|
|
74
|
-
|
|
75
|
-
Surface the reason plainly and offer the alternate (paste the text, or another ad) rather than failing silently.
|
|
76
|
-
|
|
77
|
-
## How this relates to the other skills
|
|
78
|
-
|
|
79
|
-
- **Pasted Instagram/TikTok reel** (not a Facebook ad) → that's the `exodus-genesis` skill (`--reel`), the reel path.
|
|
80
|
-
- **Collecting several ads/ideas to curate before writing** → that's the `exodus-idea` skill; come back here when the user wants one written now.
|
|
81
|
-
- **A typed brief or an idea in their head** → that's a normal `exodus-genesis` run.
|
|
82
|
-
|
|
83
|
-
## Workspace scoping
|
|
84
|
-
|
|
85
|
-
Everything is scoped to the **active brand** — the swiped ad seeds copy *for your brand*, and the output pitches your brand, never the one in the ad. If results look off, first check `npx @aicopycoders/exodus brand current`.
|