@aicopycoders/exodus 2026.9.1100-beta.2 → 2026.9.1400-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/docs/CLAUDE.md +22 -1
- package/assets/docs/PIPELINES.md +20 -0
- package/assets/skills/anatomy-of-ads/SKILL.md +138 -0
- package/assets/skills/anatomy-of-ads/references/beat-map.md +69 -0
- package/assets/skills/anatomy-of-ads/references/concept-angle.md +50 -0
- package/assets/skills/anatomy-of-ads/references/hook-and-structure.md +69 -0
- package/assets/skills/bot-builder/SKILL.md +147 -0
- package/assets/skills/bot-builder/references/exodus-prompt-node.md +113 -0
- package/assets/skills/bot-builder/references/prompt-blocks.md +169 -0
- package/assets/skills/copy-instincts/SKILL.md +154 -0
- package/assets/skills/copy-instincts/references/instincts-catalog.md +131 -0
- package/assets/skills/copy-instincts/references/locked-examples.md +104 -0
- package/assets/skills/copy-instincts/references/worked-runs.md +148 -0
- package/assets/skills/exodus/SKILL.md +10 -1
- package/assets/skills/exodus-video/SKILL.md +12 -4
- package/assets/skills/exodus-video/scripts/first-cut.mjs +129 -32
- package/assets/skills/find-competitors/SKILL.md +148 -0
- package/assets/skills/find-competitors/references/query-grid.md +78 -0
- package/assets/skills/find-competitors/scripts/__pycache__/adlib_sweep.cpython-314.pyc +0 -0
- package/assets/skills/find-competitors/scripts/__pycache__/competitor_signals.cpython-314.pyc +0 -0
- package/assets/skills/find-competitors/scripts/adlib_sweep.py +100 -0
- package/assets/skills/find-competitors/scripts/competitor_signals.py +168 -0
- package/assets/skills/handoff/SKILL.md +81 -0
- package/assets/skills/mechanism/SKILL.md +130 -0
- package/assets/skills/mechanism/references/bot-prompts.md +94 -0
- package/assets/skills/mechanism/references/competitor-mechanisms.md +39 -0
- package/assets/skills/odf/SKILL.md +167 -0
- package/assets/skills/patterns-and-gaps/SKILL.md +120 -0
- package/assets/skills/positioning-spiral/SKILL.md +166 -0
- package/assets/skills/remember-that/SKILL.md +56 -0
- package/assets/skills/segment-grid/README.md +45 -0
- package/assets/skills/segment-grid/SKILL.md +84 -0
- package/assets/skills/thinking-vs-build/SKILL.md +120 -0
- package/assets/templates/STANDARDS.md +49 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +10 -5
- package/dist/commands/update.js +1 -1
- package/dist/commands/video.d.ts +6 -0
- package/dist/commands/video.js +30 -1
- package/dist/lib/assets.d.ts +1 -0
- package/dist/lib/assets.js +3 -0
- package/dist/lib/scaffold.d.ts +3 -0
- package/dist/lib/scaffold.js +18 -1
- package/package.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: positioning-spiral
|
|
3
|
+
description: The parent thinking loop for positioning a product before any ads get written. Use it whenever someone is onboarding a new brand or client, starting a new SKU, asking "who do we sell this to and what's the story", "what's the mechanism", "does this hang together", "are we positioned right", or wants segments, personas, and mechanisms figured out together. It cycles through five stations (features, targets, research, catalog, thinking) until segments, mechanisms, and story are coherent, calling the station skills (odf, mechanism, find-competitors, patterns-and-gaps) as needed. Trigger it even when the user only names one piece ("let's look at the ingredients", "find me competitors for this") if no coherent positioning exists yet, because that piece will change the others. Do not use it for writing ad copy or images; it stops when the story is coherent.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Positioning Spiral
|
|
7
|
+
|
|
8
|
+
Positioning is not a line. It is a spiral. The mechanism you pick depends on the segment, the segment depends on what is provable, what is provable depends on what competitors have already paid to learn, and all of it has to fit inside a catalog that already exists. So you do not do these once each. You loop through them, and each pass changes the question at the next station, until the whole thing holds together and nothing contradicts it.
|
|
9
|
+
|
|
10
|
+
This skill is the parent (the positioning spiral). It decides which station to visit next, keeps the loop in think mode, and runs the exit test. The station skills do the depth. If a station skill is not installed, run that station as a conversation using the notes below.
|
|
11
|
+
|
|
12
|
+
## The two modes
|
|
13
|
+
|
|
14
|
+
Read the `thinking-vs-build` skill if installed. The short version:
|
|
15
|
+
|
|
16
|
+
- **Think mode** is the default for this whole loop. One station per exchange. Short lists. One or two words per item. Propose, let the user cut, move on. No documents.
|
|
17
|
+
- **Build bursts** happen inside a station when data needs gathering: rip these ads, scrape these reviews, pull these competitor pages. Run them comprehensively without check-ins, write files early, report spend, then come back to think mode and say what the new data changed.
|
|
18
|
+
- **The exit test passing is the build cue.** Only then write the story page, the grid, and the mechanism map.
|
|
19
|
+
|
|
20
|
+
The most common failure is building a document at a station that only needed a list. If the user has not said "build", "make", "write the doc", or "put that in", stay in think mode.
|
|
21
|
+
|
|
22
|
+
## The five stations
|
|
23
|
+
|
|
24
|
+
Each station answers one question. Each has inputs to ask for, a station skill for depth, and a note on what it tends to change elsewhere.
|
|
25
|
+
|
|
26
|
+
### 1. Features: what is possible to say
|
|
27
|
+
|
|
28
|
+
Ingredients first. Then everything else the brand can honestly claim: the form factor (dropper, gummy, powder), the founders and creators and their story, the brand's origin, manufacturing or sourcing facts, anything a competitor could not copy tomorrow.
|
|
29
|
+
|
|
30
|
+
Ask for: the formula with doses, the product bible or spec, founder background, what the brand already says about itself.
|
|
31
|
+
|
|
32
|
+
Output in think mode: a list of candidate mechanisms and story elements, one or two words each, with the ingredient or feature that backs each one. The star ingredient goes in every mechanism. Supporting ingredients never lead.
|
|
33
|
+
|
|
34
|
+
Depth: `mechanism` skill (competitor mechanism file, the Genesis mechanism bots, the simplicity gates, the lock).
|
|
35
|
+
|
|
36
|
+
Changes elsewhere: a mechanism the market already believes (cortisol, gut, hormones) pulls targets toward the people who use that word. A founder story pulls toward the identity axis.
|
|
37
|
+
|
|
38
|
+
### 2. Targets: who is plausible
|
|
39
|
+
|
|
40
|
+
Segments and personas. Outcomes the buyer wants fixed, the demographics you can tick from across the room, the identity they claim, the facets that explain why they are here now.
|
|
41
|
+
|
|
42
|
+
Ask for: current buyers, the ads with the best hold, comments under running ads.
|
|
43
|
+
|
|
44
|
+
Output in think mode: outcomes as one or two words with sub-outcomes beneath, then demographics, identity, facets, one axis per exchange.
|
|
45
|
+
|
|
46
|
+
Depth: `odf` skill, MAP entry point. The stress-test rules there apply: different human not synonym, nothing in two rows, states and occasions are facets, copy lines are not segments.
|
|
47
|
+
|
|
48
|
+
Changes elsewhere: every new segment needs a mechanism it believes and a competitor or review that proves someone like them buys. A segment with neither goes on hold.
|
|
49
|
+
|
|
50
|
+
### 3. Research: what is proven, and what people already say
|
|
51
|
+
|
|
52
|
+
Two halves, kept separate because they prove different things.
|
|
53
|
+
|
|
54
|
+
**Competitor products.** Who is scaling, on which mechanism (their UMP, the mechanism they sell as positioning), with what offer, for how long. Group competitors by mechanism, not by category. A long-running ad is evidence the angle converts. Rip transcript, headline, body, rank, on-screen text, and keep the user's per-brand notes verbatim next to the evidence.
|
|
55
|
+
|
|
56
|
+
**Voice of customer.** Reviews, comments, Reddit, in exact words. Rank sources by volume because volume is language richness. Count mentions. Keep quote banks by theme with reference numbers. Negatives are data.
|
|
57
|
+
|
|
58
|
+
Ask for: the brands the user already watches and their read on each, Atria or Ad Library access, Amazon categories to shortlist.
|
|
59
|
+
|
|
60
|
+
Output in think mode: the two or three angles competitors have proven, the two or three themes reviews say loudest, and one line on where they disagree with the current targets.
|
|
61
|
+
|
|
62
|
+
Depth: `find-competitors` (who is strong, proven with numbers, grouped by UMP) and `patterns-and-gaps` (what repeats, what lands, what is missing).
|
|
63
|
+
|
|
64
|
+
Changes elsewhere: this is where "stress" dies and "3AM waking" is born. If no competitor and no review backs a target, mark it hypothesis and move it down the focus order.
|
|
65
|
+
|
|
66
|
+
### 4. Catalog: what does not collide
|
|
67
|
+
|
|
68
|
+
Every proposal against the brand's other SKUs and the brand's own live ads. A sister product already claiming the mechanism is a collision. A sister product's ads targeting the same segment is a collision. The product bible saying one ingredient while the ad says another is a flag.
|
|
69
|
+
|
|
70
|
+
Ask for: the full catalog with formulas, the brand's own ad account pulled by SKU.
|
|
71
|
+
|
|
72
|
+
Output in think mode: one line per collision and the copy rule that resolves it ("cortisol belly belongs to the collagen; we take night cortisol").
|
|
73
|
+
|
|
74
|
+
Depth: none needed; this is a scan. Run it after any new mechanism or target proposal, before the user asks. They will ask anyway.
|
|
75
|
+
|
|
76
|
+
Changes elsewhere: a collision sends you back to features or targets for a lane the catalog leaves open.
|
|
77
|
+
|
|
78
|
+
### 5. Thinking: the coherent story
|
|
79
|
+
|
|
80
|
+
The station where the user and the skill sit with the other four and ask whether it holds. No new data. Say the story in three sentences: who, what they feel, what the product does about it and why it works. Then check it against the exit test.
|
|
81
|
+
|
|
82
|
+
Output in think mode: the story in three sentences, the focus order with a simple argument from ads, competitors, reviews, and logic, and the list of what is still hypothesis.
|
|
83
|
+
|
|
84
|
+
## How to run the loop
|
|
85
|
+
|
|
86
|
+
1. **Load what exists and say it back in one paragraph.** Product, formula, what it sells today, who buys now, what is winning and fatiguing, the sister SKUs. If the user has tested ads, read them raw before anything else; own winning ads outrank everything.
|
|
87
|
+
2. **Enter at the richest station.** Usually features if the brand is new, targets if there are tested ads, research if the user arrives with a competitor list and a hypothesis. Do not force a fixed order.
|
|
88
|
+
3. **One station per exchange.** Put a short list down. Let the user cut. Name what the answer changes at other stations in one line.
|
|
89
|
+
4. **Run build bursts only for data.** When a station needs a rip or a scrape, say the plan back in two lines, get the go, then run it comprehensively and report spend. Write files early so a cut connection loses nothing.
|
|
90
|
+
5. **Spiral.** After each station, ask which station the new answer weakens. Go there. Typical paths: features → targets → research → targets again → catalog → features again → thinking.
|
|
91
|
+
6. **Run the standing checks every pass** (below).
|
|
92
|
+
7. **When the exit test passes, say so and stop.** Offer the build: story page, segment grid, mechanism map. Wait for the build cue.
|
|
93
|
+
8. **When the user says "note your place"**: what is done, what is missing, what is next. Then wait.
|
|
94
|
+
|
|
95
|
+
## Exit test
|
|
96
|
+
|
|
97
|
+
The story is coherent when every focus segment has all five, and nothing in one row contradicts another:
|
|
98
|
+
|
|
99
|
+
| Segment | Mechanism | Proof | Quote bank | Collision |
|
|
100
|
+
|---|---|---|---|---|
|
|
101
|
+
| one outcome × one demographic × one or two facets | star ingredient plus at most one partner plus the form factor | a scaling competitor on this angle or an own winning ad | reviews or comments in their words, with counts | none, or a copy rule that resolves it |
|
|
102
|
+
|
|
103
|
+
Anything backed by logic alone is marked HYPOTHESIS and sits below the proven segments in the focus order. The story in three sentences reads the same from every row.
|
|
104
|
+
|
|
105
|
+
Evidence ladder when arguing a cell: own winning ad > long-running competitor ad > comment under a running ad > review or Reddit quote > logic.
|
|
106
|
+
|
|
107
|
+
## Standing checks
|
|
108
|
+
|
|
109
|
+
- **Collision** after any positioning or mechanism proposal, before being asked.
|
|
110
|
+
- **"Is this backed by the reviews?"** Answer with counts or say thin.
|
|
111
|
+
- **"Are we missing anything?"** Check the data for the biggest themes not on the list. Name at most three.
|
|
112
|
+
- **Segments seen.** Any segment spotted in a competitor ad or the brand's own ads goes on a running list, even if it is not a focus.
|
|
113
|
+
- **Compliance deferred.** World of possibilities first; flag hot words, do not censor them.
|
|
114
|
+
- **Use the user's taxonomy.** Outcome, sub-outcome, demographic, identity, facet. Mechanism = ingredient story. UMP = the mechanism a competitor sells.
|
|
115
|
+
|
|
116
|
+
## Output when the exit test passes
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
# <Brand> — <Product> — Positioning Story (v1, <date>)
|
|
120
|
+
|
|
121
|
+
## The story (three sentences)
|
|
122
|
+
Who. What they feel. What the product does and why it works.
|
|
123
|
+
|
|
124
|
+
## Focus segments
|
|
125
|
+
| # | Segment | Mechanism | Proof | Quote bank | Collision rule |
|
|
126
|
+
|
|
127
|
+
## Hold (hypothesis)
|
|
128
|
+
| Segment | Why it is on hold | What would prove it |
|
|
129
|
+
|
|
130
|
+
## Collisions and copy rules
|
|
131
|
+
- <sister SKU> owns <angle>; we take <angle>.
|
|
132
|
+
|
|
133
|
+
## Segments seen (not focus yet)
|
|
134
|
+
<a> · <b> · <c>
|
|
135
|
+
|
|
136
|
+
## Where the evidence lives
|
|
137
|
+
| Source | Path or link |
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Then hand off: `odf` writes the grid and the personas, `mechanism` writes the mechanism map, and the production plan follows.
|
|
141
|
+
|
|
142
|
+
## Worked example: Evenkeel Reset Gummies
|
|
143
|
+
|
|
144
|
+
Fictional brand, fictional competitors, fictional numbers. The shape is what matters.
|
|
145
|
+
|
|
146
|
+
**Setup.** Evenkeel sells Reset Gummies: saffron extract, magnesium glycinate, rhodiola, in an evening gummy. The founder is a former ER nurse. Sister SKUs: Night Tea (sleep) and Glow Collagen, whose ads already say "lowers cortisol". Current ads say "stress relief" and are fatiguing.
|
|
147
|
+
|
|
148
|
+
**Pass 1, targets.** Tested ads read raw. The best hold is on an ad about waking at 3AM, not on any stress ad. Proposed outcomes: Sleep, Mood, Stress, Cortisol, Energy. User cuts Stress to a sub-outcome: "nobody buys for stress." What this changes: features needs a mechanism for night waking.
|
|
149
|
+
|
|
150
|
+
**Pass 2, features.** Saffron has mood and sleep evidence; magnesium glycinate has night waking; rhodiola is a daytime adaptogen. Candidate mechanisms: "night cortisol" (saffron + magnesium), "mood" (saffron alone), "energy" (rhodiola). Star ingredient set to saffron; it goes in every one. What this changes: research needs to prove someone buys "night cortisol".
|
|
151
|
+
|
|
152
|
+
**Pass 3, research.** Competitors grouped by UMP. Dawnfield ($2M a month) runs cortisol with symptom stacks in the hook: belly, puffy face, hips, wired at night. Nuvella runs cortisol plus gut. Root & Rise runs perimenopause. Reviews: "wake at 3AM" is the top sleep phrase by count; "puffy face" appears in cortisol product reviews, not sleep ones. What this changes: cortisol is proven as a word, but the visible symptoms are body and face, which Evenkeel cannot honestly claim to fix.
|
|
153
|
+
|
|
154
|
+
**Pass 4, catalog.** Glow Collagen already says "lowers cortisol" and shows belly and face. Collision. Copy rule: Collagen owns cortisol belly and face; Reset owns night cortisol and the 3AM wake. Night Tea owns "fall asleep"; Reset owns "stay asleep". What this changes: targets tighten to staying asleep, peri mood, and evening rage.
|
|
155
|
+
|
|
156
|
+
**Pass 5, thinking.** Story: women 40 to 55 who fall asleep fine and wake at 3AM with a racing mind; their evening cortisol never drops; saffron and magnesium bring it down so they sleep through. Proof: Dawnfield's night ads and the 3AM count in reviews. Quote bank: sleep reviews, 3AM theme. Collision: resolved by the copy rule. Hypothesis on hold: men 35 plus who wake at 4AM, no competitor proof yet.
|
|
157
|
+
|
|
158
|
+
Exit test passes on three segments. The build cue comes from the user. ODF writes the grid.
|
|
159
|
+
|
|
160
|
+
## What this skill is not
|
|
161
|
+
|
|
162
|
+
It does not write ads, hooks, or images. It does not choose formats or conceits. It does not replace the station skills; it sequences them. When the story is coherent, it stops.
|
|
163
|
+
|
|
164
|
+
## Standards
|
|
165
|
+
|
|
166
|
+
Before producing anything, read `STANDARDS.md` at the workspace root (and the section for this output type). Grade the draft against it before showing it; rewrite failures first. When the user reacts with a judgment, a banking phrase, or the same note twice, hand the reaction to `remember-that`. At the end of the session, `handoff` scrapes the chat and proposes entries.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: remember-that
|
|
3
|
+
description: Bank a reaction so it never has to be given again. Fires the moment the user says "remember that", "lock that in", "bank that", "add that to my rules", "always do X", "never do Y", "from now on", "make sure this never happens again", or gives the same note a second time. Also fires when they react to a draft with a clear judgment ("perfect, keep that", "that joke was too much", "not like that, like this"). It quotes the reaction verbatim, decides the rung (note, rule, tool, skill), writes it to STANDARDS.md in the right section, pushes winning lines to the matching Exodus bank, offers rather than pushes anything that would change a workflow or primer, and says in one line where it went. This is the Standards Ladder's "correct once, remember forever" move, packaged.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Remember that
|
|
7
|
+
|
|
8
|
+
A reaction that is not banked evaporates by the next session. This skill makes the bank happen in ten seconds, without the user opening a file.
|
|
9
|
+
|
|
10
|
+
Read `STANDARDS.md` first, especially "How I give feedback". It governs this skill.
|
|
11
|
+
|
|
12
|
+
## When it fires
|
|
13
|
+
|
|
14
|
+
- A banking phrase: remember that, lock that in, bank that, add to my rules, always, never, from now on.
|
|
15
|
+
- A tool phrase: make sure this never happens again, this can never slip through, set up a check.
|
|
16
|
+
- A repeat: the same note given twice in this or a previous session (the Log section shows previous ones).
|
|
17
|
+
- A judgment on a draft, when "How I give feedback" allows proposals: perfect keep that, too much, not like that.
|
|
18
|
+
|
|
19
|
+
If it is a judgment rather than a phrase, propose the entry and wait for a yes. Never write a rule the user has not approved.
|
|
20
|
+
|
|
21
|
+
## What it does, in order
|
|
22
|
+
|
|
23
|
+
1. **Quote it exactly.** The raw words, typos included. The quote is the evidence; the rule is the interpretation.
|
|
24
|
+
2. **Name the rung.**
|
|
25
|
+
- Note: said once, unclear if it generalises. Log it, do not write a rule yet. Say "logged; say it again and it becomes a rule."
|
|
26
|
+
- Rule: said with "always / never / from now on", or said twice. Write the one-line rule.
|
|
27
|
+
- Tool: "make sure this never happens again", or a rule that has been broken twice since it was banked. Say it should be a tool, describe the check in one line, build it under `standards/tools/` if the user says go (a script, a lint, a checklist the skill must run). Log it under Tools.
|
|
28
|
+
- Skill: a whole job that keeps repeating. Hand to `bot-builder`.
|
|
29
|
+
3. **Pick the section.** Hooks, Copy, Statics, Workflows, Skills, Gnomes, Tools. A phrase the bots over-use goes to Gnomes. A change to how a skill behaves goes to Skills. Never edit the skill file itself: `exodus update` rewrites every skill folder, so the edit would be lost. The skills read their Skills rules from `STANDARDS.md`.
|
|
30
|
+
4. **Write the entry.** One line, dated, then the quote underneath:
|
|
31
|
+
```
|
|
32
|
+
- 2026-09-14 · Open on a declarative line, never a question.
|
|
33
|
+
> "Stop opening my emails with a question. It reads soft."
|
|
34
|
+
```
|
|
35
|
+
Add the same line to Log with the rung and the destination.
|
|
36
|
+
5. **Push what belongs on the server.**
|
|
37
|
+
- A winning line the user approved (a hook, a headline, a body) → `npx @aicopycoders/exodus bank promote <key> "<text>"` with `--awareness <pair>` for body banks. Automatic when "How I give feedback" says so. Keys: `hooks`, `headlines`, `body:unawareProblemAware`, `body:solutionProductAware`, `body:mostAware`, `modules`.
|
|
38
|
+
- A style rule that should change how a pipeline writes → offer, do not push: "This would go into the brand voice (`exodus foundation set brandVoice`) or the Guidelines note on the bot nodes in your workflow (`customInstructions`; a Prompt node has no such note, its text is `promptText`). Want it there?" Only on a yes: export, edit, validate, import.
|
|
39
|
+
6. **Say where it went, in one line.** "Banked as a rule under Copy, and promoted to the hooks bank." Then continue the work; do not stop the session.
|
|
40
|
+
|
|
41
|
+
## Rules for the skill itself
|
|
42
|
+
|
|
43
|
+
- The user is the only source of rules. Proposals wait. Nothing the AI wrote goes in as if the user said it.
|
|
44
|
+
- One entry per reaction. Do not merge, generalise, or rewrite old entries. If a new one contradicts an old one, add the new one and mark the old one superseded with the date.
|
|
45
|
+
- Hand-edited files are read-only. If the reaction is about a file the user touched, write the rule, do not edit the file.
|
|
46
|
+
- When a section passes a page, move it to `standards/<section>.md`, leave a one-line pointer in STANDARDS.md, and say so.
|
|
47
|
+
- When a rule has been broken twice since it was banked, say so and offer the tool rung. A recurring failure is not a reason to nag harder.
|
|
48
|
+
- Reading rules back: "show me my rules for hooks" prints that section verbatim.
|
|
49
|
+
|
|
50
|
+
## What this skill is not
|
|
51
|
+
|
|
52
|
+
It does not review a whole session for things worth banking; that is `handoff`. It does not build bots; that is `bot-builder`. It catches one reaction and puts it where the system will always see it.
|
|
53
|
+
|
|
54
|
+
## Changelog
|
|
55
|
+
|
|
56
|
+
- 2026-09-14 · v1.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Segment Grid Kit
|
|
2
|
+
|
|
3
|
+
Build a segment map (outcomes × demographics × facets) with Claude Code, then push it into Exodus. Serene Herbs (a fictional brand) and its Nervous Balance Drops are the worked example.
|
|
4
|
+
|
|
5
|
+
## What's in this folder
|
|
6
|
+
|
|
7
|
+
- `SKILL.md` — the method. Tell Claude Code "build the segment grid" and it walks you through it one axis at a time. The `odf` skill is the newer, fuller version of the same method; this one stays for the hand-off doc.
|
|
8
|
+
|
|
9
|
+
## How to run it
|
|
10
|
+
|
|
11
|
+
1. The skill is installed with Exodus. Start Claude Code in your workspace folder.
|
|
12
|
+
2. Give Claude what you have: product facts and formula, current ads and results, competitor ads, reviews, comments. More human language = better facets.
|
|
13
|
+
3. Say "build the segment grid". Answer in short lists. One or two words per item. Let it stress-test.
|
|
14
|
+
4. When the grid is agreed, Claude writes `segment-grid.md`.
|
|
15
|
+
|
|
16
|
+
## Push it into Exodus
|
|
17
|
+
|
|
18
|
+
Exodus keeps the map under Plan → Map. The CLI is the edit surface:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
npx @aicopycoders/exodus segment export --out segments.json # pull the current map (empty is fine)
|
|
22
|
+
# edit segments.json
|
|
23
|
+
npx @aicopycoders/exodus segment import segments.json # dry-runs first, then applies
|
|
24
|
+
npx @aicopycoders/exodus segment show # verify
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
The JSON shape:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"brand": "Your Brand",
|
|
32
|
+
"product": "Your Product",
|
|
33
|
+
"outcomes": [ { "name": "Sleep", "subs": [ { "name": "3AM" }, { "name": "Racing mind" } ] } ],
|
|
34
|
+
"demos": [ { "name": "Age", "values": [ { "name": "45–60" } ] } ],
|
|
35
|
+
"facets": [ { "name": "State", "values": [ { "name": "On HRT and still" } ] } ],
|
|
36
|
+
"personas": []
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Things to know:
|
|
41
|
+
|
|
42
|
+
- Import is a full replace, matched by name. Names missing from the file get deleted; personas they orphan get archived. If anything would be deleted the CLI refuses without `--yes`.
|
|
43
|
+
- The dashboard keeps exactly five demographic rows: Buyer, Gender, Age, Race / Ethnicity, Identity. Extra demo groups are dropped silently. Put life stage under Age, occupation under Identity, medical conditions under the State facet.
|
|
44
|
+
- Facet families are Belief, Identity, State, Value, Occasion.
|
|
45
|
+
- Make sure the right brand is active first: `npx @aicopycoders/exodus brand current`.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: segment-grid
|
|
3
|
+
description: Build a segment grid for a product before writing personas or ads. Outcomes (1–2 words, with sub-outcomes) × Demographics × Identity × Facets (belief, state, value, occasion), stress-tested against ads, competitors, reviews, comments and logic. Use when someone says "map the segments", "who are we selling to", "build the grid", or before any persona or creative-strategy work. Works with no tools: a conversation, whatever data they have, this file.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Segment Grid
|
|
7
|
+
|
|
8
|
+
Think first, build second. This runs as a short back-and-forth: propose a list, get it argued down, move to the next axis. Every list item is one or two words. No documents until the grid is agreed.
|
|
9
|
+
|
|
10
|
+
## The four axes
|
|
11
|
+
|
|
12
|
+
1. **Outcomes** — what the buyer wants fixed. The spine. Each outcome has sub-outcomes (the different humans inside it).
|
|
13
|
+
2. **Demographics** — what you could tick from across the room: gender, age band, race, buying for whom, occupation, life stage, medical identity.
|
|
14
|
+
3. **Identity** — who they *say* they are ("the one who holds everyone together", "not a pill person", "the researcher").
|
|
15
|
+
4. **Facets** — why they're here, invisible from across the room, in four families: **Belief** (what they think causes it), **State** (what they're on or have tried), **Value** (what they prefer), **Occasion** (something that happened; it has a date).
|
|
16
|
+
|
|
17
|
+
A segment = one outcome × one demographic × one or two facets. A persona is a segment named as a human. This skill stops at the grid.
|
|
18
|
+
|
|
19
|
+
## Steps
|
|
20
|
+
|
|
21
|
+
1. **Load what they have.** Product and its fixed formula or spec, what it sells today, who buys now, what's winning and fatiguing, the other SKUs it must not collide with. Say it back in one paragraph.
|
|
22
|
+
2. **Outcomes first.** Ask for their starting list. Sort each item into what it actually is: an outcome, a mechanism (cortisol), a demographic (menopause), or a copy line (brain fog). Propose additions from the data. Get to 6–10 outcomes, one or two words each.
|
|
23
|
+
3. **Sub-outcomes.** Under each outcome, 3–5 sub-outcomes, one or two words each. Use the five lenses to find them: type (which kind), location (where it shows), function (what stops working), moment (when it hits), severity (how bad). Then stress-test (rules below).
|
|
24
|
+
4. **Demographics.** Gender, age bands, race, buying-for, occupation, life stage, medical. Include the groups the product isn't for yet; mark exclusions.
|
|
25
|
+
5. **Identity.** Pull from comments, reviews, the brand's own cast, and the ads that got the best hold. Include the other gender's versions.
|
|
26
|
+
6. **Facets by family.** Belief, State, Value, Occasion. Check both genders. Sources: reviews ("what I tried", "what I replaced"), Reddit, comments, competitor ads (what they name and disqualify), logic (the conditions the category obviously has: shift worker, on a GLP-1, on an SSRI, postpartum).
|
|
27
|
+
7. **Write the grid.** One markdown file: the four axes, the agreed focus order, and an empty coverage grid (outcomes × primary demographic columns) to fill with persona names later.
|
|
28
|
+
|
|
29
|
+
## Stress-test rules
|
|
30
|
+
|
|
31
|
+
- **One word or two per item.** If it needs a sentence it isn't an item yet.
|
|
32
|
+
- **Different human, not a synonym.** Two sub-outcomes that describe the same person get merged.
|
|
33
|
+
- **Nothing in two rows.** A symptom lives in one outcome (3AM lives in Sleep, not in Menopause or Cortisol).
|
|
34
|
+
- **States are facets, not outcomes.** "On HRT", "off an SSRI", "tried everything" go under State.
|
|
35
|
+
- **Occasions are facets, not outcomes.** "Doctor shrugged" goes under Occasion.
|
|
36
|
+
- **Mechanisms are not outcomes** unless the market has adopted the word as the problem (cortisol qualifies; its row holds the visible symptoms).
|
|
37
|
+
- **Life stages can be outcomes** when buyers name the stage as the problem ("my peri symptoms"). Keep it also as a layer over the other rows.
|
|
38
|
+
- **The AI-artifact test.** A phrase that appears in many ads and few human mouths ("2PM crash", "wired but tired", "brain fog") is a copy line, not a segment. Count it in reviews and comments, not in ads.
|
|
39
|
+
- **Formula fit.** Drop outcomes the product can't honestly touch (for a calming formula: hot flashes, libido, weight loss as the outcome).
|
|
40
|
+
- **Compliance-hot words** (anxiety, panic, disease names) can be sub-outcomes but not headline outcomes; mark them.
|
|
41
|
+
- **Exclusions are not segments.** A contraindication (SSRI + a serotonergic herb) goes in the medical list marked as an exclusion.
|
|
42
|
+
|
|
43
|
+
## Evidence strength (when arguing an item)
|
|
44
|
+
|
|
45
|
+
Own winning ad > long-running competitor ad > comment under a running ad > review or Reddit quote > logic. Mark pure logic as HYPOTHESIS.
|
|
46
|
+
|
|
47
|
+
## Output template
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
# <Brand> — <Product> — Segment Grid (v1, <date>)
|
|
51
|
+
|
|
52
|
+
## OUTCOMES
|
|
53
|
+
| # | Outcome | Sub-outcomes |
|
|
54
|
+
| 1 | <word> | <a> · <b> · <c> |
|
|
55
|
+
|
|
56
|
+
## DEMOGRAPHICS
|
|
57
|
+
| Gender | ... | Age | ... | Race | ... | Buying for | ... | Occupation | ... | Life stage | ... | Medical | ... (exclusions marked) |
|
|
58
|
+
|
|
59
|
+
## IDENTITY
|
|
60
|
+
<a> · <b> · <c> ...
|
|
61
|
+
|
|
62
|
+
## FACETS
|
|
63
|
+
| Belief | ... |
|
|
64
|
+
| State | ... |
|
|
65
|
+
| Value | ... |
|
|
66
|
+
| Occasion | ... |
|
|
67
|
+
|
|
68
|
+
## FOCUS ORDER
|
|
69
|
+
1. <outcome → sub-outcome · demographic · facet> — one-line argument
|
|
70
|
+
2. ...
|
|
71
|
+
Hold: ...
|
|
72
|
+
|
|
73
|
+
## COVERAGE GRID
|
|
74
|
+
| Outcome | <demo col 1> | <demo col 2> | ... |
|
|
75
|
+
(blank cells = gaps; fill with persona names later)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## How to run it in conversation
|
|
79
|
+
|
|
80
|
+
- Propose, don't ask. Put a list down, let them cut it.
|
|
81
|
+
- One axis per message. Outcomes → sub-outcomes → demographics → identity → facets → focus.
|
|
82
|
+
- When they say "stress test", apply the rules above and show only what moved and why.
|
|
83
|
+
- When they ask "are we missing anything", check the data for the biggest themes not on the list (fatigue and energy is the usual one) and name at most three.
|
|
84
|
+
- Only write the file when the grid is agreed.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: thinking-vs-build
|
|
3
|
+
description: The two working modes the user runs in and how to tell which one a message is in. The goal of both is a tight feedback loop with the expert: make it as easy as possible for them to apply light steering and thinking, so the work compounds toward something great instead of drifting. Think mode (the default) is short lists, one axis per message, one or two words per item, propose then they cut, no files. Build mode (only on a build cue) is the full thing, run comprehensively without check-ins, written to three homes. Load this at the start of every working session and whenever a request could be read either way: "let's look at", "dial in", "basic list", "what do you think" versus "build", "make", "write the doc", "put that in", "rip", "scrape", "let it rip", "go for it". Also governs the checkpoint moves: saying the plan back before spending, reporting spend, "note your place", and switching back to think mode when a build burst ends. The method skills (positioning-spiral, odf, mechanism, find-competitors, patterns-and-gaps, anatomy-of-ads, copy-instincts, bot-builder, handoff) assume this one is loaded; the exodus-* pipeline skills keep the exodus-strategist posture.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Thinking vs Build
|
|
7
|
+
|
|
8
|
+
## The goal
|
|
9
|
+
|
|
10
|
+
The point of both modes is a tight feedback loop with the expert, the user. They have the instincts; the job is to put them to work with the least friction possible. Sometimes that means ripping through a build on their say-so. Far more often it means making it super simple for them to apply light steering and thinking: a short list they can cut in ten seconds, one decision at a time, the raw material within reach so they can read it themselves, and a checkpoint whenever the wheel should go back to them. Every rule below exists to serve that loop. If a move makes their next steer harder (a document where a list would do, a menu where a recommendation would do, a run that spends before they have said go), it is the wrong move even if the output is good.
|
|
11
|
+
|
|
12
|
+
The loop looks like this: propose → they cut or redirect in a line → apply → propose the next axis. Each turn should cost them a few seconds of judgment, not minutes of reading. The compounding comes from how many of those turns happen, not from how big each one is.
|
|
13
|
+
|
|
14
|
+
Two modes serve that loop. Getting the mode wrong is the most common failure in this folder, in both directions. The correction that created this skill, verbatim, from Luke's own sessions:
|
|
15
|
+
|
|
16
|
+
> "Okay lets stay really small just give me basic stuff again you have a tendency to just build a bunch of shit when i dont need that... sometimes I want to THINK with you first and quickly to plan things... and then we'll build the full thing"
|
|
17
|
+
|
|
18
|
+
And the confirmation, once it was fixed:
|
|
19
|
+
|
|
20
|
+
> "okay this is great... i love this new you... with basic lists and answers and simple talking before building lets keep that and make sure we continue to do all that please"
|
|
21
|
+
|
|
22
|
+
The opposite failure is real too. Once the user has said go, process talk is friction:
|
|
23
|
+
|
|
24
|
+
> "btw you can also just find another way to scrape idc about process i just want the full transcript / video transcript / headline / body text"
|
|
25
|
+
|
|
26
|
+
## The rule underneath both modes
|
|
27
|
+
|
|
28
|
+
Ask what kind of work the message is about.
|
|
29
|
+
|
|
30
|
+
- **Deciding** what we are going to do (segments, outcomes, mechanisms, focus order, which skill to build, what a doc should contain, whether an idea holds): **think mode.** Go narrow, check in every axis.
|
|
31
|
+
- **Gathering** what is out there (rip these ads, scrape these reviews, pull competitor pages, transcribe, count mentions, analyse a corpus): **build mode.** Go wide, do not check in until done or until a checkpoint they asked for.
|
|
32
|
+
|
|
33
|
+
Research inside a decision is a build burst. Decisions inside a build are still decisions: stop and ask the two or three that change the work, then continue.
|
|
34
|
+
|
|
35
|
+
## Reading the cue
|
|
36
|
+
|
|
37
|
+
**Think cues.** "Let's think", "dial in", "basic list", "simple", "just give me", "what do you think", "options", "should we", "does it make sense to", "stress test this", "are we missing anything", any question, any message that names one axis ("just the core outcomes"), "first confirm you understand".
|
|
38
|
+
|
|
39
|
+
**Build cues.** "Build", "make", "write", "the doc", "the report", "put that in", "throw those in", "full thing", "rip", "scrape", "pull", "go", "let it rip", "let's go for it", "do whatever you need to do", "don't stop", "be comprehensive", "in batches so I can start working".
|
|
40
|
+
|
|
41
|
+
**Ambiguous.** Default to think mode. Put the shortest useful answer down and end with the decision that would unlock the build. Ask only when the two readings lead to materially different work, and then ask one question, not a menu.
|
|
42
|
+
|
|
43
|
+
**Mode carries forward** until a cue changes it. "Okay this is good" after a think message is not a build cue. "Yes" after a plan-back is.
|
|
44
|
+
|
|
45
|
+
## Think mode
|
|
46
|
+
|
|
47
|
+
This is where most of the loop lives. Optimise every message for how fast the user can steer it.
|
|
48
|
+
|
|
49
|
+
- Short prose or a short list. No headers under about 500 words. No document, no artifact, no file.
|
|
50
|
+
- One axis per message. Outcomes, then sub-outcomes, then demographics. Never the whole grid at once.
|
|
51
|
+
- One or two words per item. If it needs a sentence it is not an item yet.
|
|
52
|
+
- Propose, do not ask. Put a list down and let the user cut it. They decide every item, by name or by number, fast.
|
|
53
|
+
- Give a recommendation, not a survey. If there are three options, say which and why in one line.
|
|
54
|
+
- Be honest about thin evidence. "Backed by reviews" gets a count. Logic alone gets marked HYPOTHESIS. The user accepts "thin" when told plainly.
|
|
55
|
+
- End with the one thing needed from the user, or with nothing. Never a closing offer to build something they did not ask for.
|
|
56
|
+
- When the user says "stress test", show only what moved and why.
|
|
57
|
+
- When the user says "are we missing anything", check the data for the biggest themes not on the list and name at most three.
|
|
58
|
+
- When the user says "confirm you understand", say the plan back in a few lines and stop.
|
|
59
|
+
|
|
60
|
+
## Build mode
|
|
61
|
+
|
|
62
|
+
The loop does not stop in build mode; it gets longer. The user steers at the plan-back, at each batch, and at the end. Design the build so those three steers are easy.
|
|
63
|
+
|
|
64
|
+
- **Say the plan back first**, in two or three lines, when the build spends money, touches a paid tool, or runs long. Wait for the go. After the go, outcome over method: do not narrate, do not ask again.
|
|
65
|
+
- **Comprehensive.** "Best first, but get everything." Order by value, still finish.
|
|
66
|
+
- **Batches.** Hand over the first usable slice fast and keep going. The user starts working on batch one while batch two runs.
|
|
67
|
+
- **Write files early.** A fan-out writes each result to disk as it lands. A spend-limit cut or a dropped connection loses only what is in flight.
|
|
68
|
+
- **Report spend** per batch so the user can stop it. They do not set budgets up front; they expect to be told.
|
|
69
|
+
- **Log tool gaps as they are hit**, in one place, per the Tool Feedback Protocol.
|
|
70
|
+
- **Three homes for anything agreed.** The folder (the archive), the system (Exodus, or the live bank or board), and a shareable place (a Drive subfolder or a published page). Plus a reusable skill when the method should travel.
|
|
71
|
+
- **Shareable by default.** After publishing a page, say it is private until shared and where the Share menu is. Every bank or board will be handed to someone else.
|
|
72
|
+
- **Plain language** for anything a collaborator will read. No jargon that needs explaining. Do not call anyone a junior.
|
|
73
|
+
- **Keep the where-it-lives index** current from the first output, so the session scrape at the end is mechanical.
|
|
74
|
+
- **No NDA leakage** in anything reusable: skills and examples use fictional brands.
|
|
75
|
+
- When another session or person has edited a file in the folder, say so and re-read before building on it.
|
|
76
|
+
|
|
77
|
+
## Switching
|
|
78
|
+
|
|
79
|
+
- **Build burst ends → think mode.** Come back with what the new data changed, in a few lines, not the data itself. Then the next axis.
|
|
80
|
+
- **Exit test passes → build cue is the user's**, not yours. Say it is coherent, offer the build in one line, wait.
|
|
81
|
+
- **"Note your place"** (or "pause", or after a usage limit): what is done, what is missing, what is next, in that order, then stop. No automatic resume. Once the base is built the user takes the wheel.
|
|
82
|
+
- **Interrupted mid-build**: report what landed on disk and what was lost in flight.
|
|
83
|
+
|
|
84
|
+
## Reply shapes
|
|
85
|
+
|
|
86
|
+
Think reply:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
<one or two lines of read-back, if the ask was new>
|
|
90
|
+
<the list, one axis, 1–2 words per item, with the one-line argument where the user asked for one>
|
|
91
|
+
<the single decision needed, or nothing>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Plan-back before a build:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Plan: <what, from where, with which tool, in what batches>. Cost: <estimate or "none">. Outputs land in <path>. Go?
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Note your place:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
Done: <a> · <b>
|
|
104
|
+
Missing: <c>
|
|
105
|
+
Next: <d>, then <e>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Two examples from the sessions
|
|
109
|
+
|
|
110
|
+
**Wrong mode.** The user asked to "start to break down these different segments/mechanisms" and shared an ODF skill. The response was a full ODF map with quote banks, tagged ads, and a numbered review. That was a decision ask handled as a build. The fix was the correction above, and every axis afterwards went one message at a time.
|
|
111
|
+
|
|
112
|
+
**Right mode.** "Okay lets go and scrape a bunch of those comments now prioritize the best ones in batches but let's be comprehensive." Plan said back (which actor, cost per review, three batches by value), go received, three batches run, spend reported after each, files written as each batch landed, plain-text dump offered so the user could read raw. No check-ins in between.
|
|
113
|
+
|
|
114
|
+
## What this skill is not
|
|
115
|
+
|
|
116
|
+
It does not decide what to build or how to think about a product; the other skills do that. It governs the method skills only: when an `exodus-*` pipeline runs, `exodus-strategist` leads (state the strategy call, menu only the run's knobs). It decides how much to put on the page, and when, so that the user's steering stays light and the loop stays tight.
|
|
117
|
+
|
|
118
|
+
## Standards
|
|
119
|
+
|
|
120
|
+
Before producing anything, read `STANDARDS.md` at the workspace root (and the section for this output type). Grade the draft against it before showing it; rewrite failures first. When the user reacts with a judgment, a banking phrase, or the same note twice, hand the reaction to `remember-that`. At the end of the session, `handoff` scrapes the chat and proposes entries.
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Standards
|
|
2
|
+
|
|
3
|
+
Your taste, written where the system always reads it. Every skill in this folder reads this file before it produces anything and grades its draft against it before you see it. `exodus update` never touches this file.
|
|
4
|
+
|
|
5
|
+
One entry per line. Dated. The raw thing you said or did sits under it in a quote, so the rule can be traced back to the moment. Entries are added by the `remember-that` skill (mid-session) and proposed by the `handoff` skill (end of session). Nothing is added without your yes.
|
|
6
|
+
|
|
7
|
+
Rungs, from the Standards Ladder: **taste** (in your head) → **note** (said once) → **rule** (written here) → **tool** (enforced in code) → **skill** (runs itself). Saying "remember that" climbs a rung. Saying the same note twice climbs it for you. Saying "make sure this never happens again" asks for a tool.
|
|
8
|
+
|
|
9
|
+
## How I give feedback
|
|
10
|
+
|
|
11
|
+
The skills read this first and behave accordingly. Change it and they change.
|
|
12
|
+
|
|
13
|
+
- Capture: inline when I say "remember that"; a proposal sweep at the end of every session; a review read every 10 sessions or when I ask.
|
|
14
|
+
- The AI may propose entries from my edits and my picks. It never writes one without a yes.
|
|
15
|
+
- Winning lines (a hook, a headline, a body I approved) push to the matching Exodus bank automatically. Style rules that would change a workflow or a primer are offered, not pushed.
|
|
16
|
+
- Files I have hand-edited are read-only to the system.
|
|
17
|
+
- Sections in this file split into their own files under `standards/` when they pass a page. The skill does it and tells me where things moved.
|
|
18
|
+
|
|
19
|
+
## Hooks
|
|
20
|
+
|
|
21
|
+
(Rules for how hooks are written and judged. Empty until you react to one.)
|
|
22
|
+
|
|
23
|
+
## Copy
|
|
24
|
+
|
|
25
|
+
(Voice, structure, what to cut, what to keep. Empty until you react to one.)
|
|
26
|
+
|
|
27
|
+
## Statics
|
|
28
|
+
|
|
29
|
+
(Image and template rules.)
|
|
30
|
+
|
|
31
|
+
## Workflows
|
|
32
|
+
|
|
33
|
+
(How runs should behave: checkpoints, batch sizes, what to ask before spending.)
|
|
34
|
+
|
|
35
|
+
## Skills
|
|
36
|
+
|
|
37
|
+
(Changes you have asked for in how the skills themselves work.)
|
|
38
|
+
|
|
39
|
+
## Gnomes
|
|
40
|
+
|
|
41
|
+
(AI tells for this market. Phrases the bots over-use that a real person here would never say. Appended as found.)
|
|
42
|
+
|
|
43
|
+
## Tools
|
|
44
|
+
|
|
45
|
+
(Standards enforced in code. One line each: what it guarantees, the script that does it.)
|
|
46
|
+
|
|
47
|
+
## Log
|
|
48
|
+
|
|
49
|
+
(Every banked reaction: date · the raw quote · the rung · where it landed. Newest first.)
|
package/dist/commands/init.d.ts
CHANGED
package/dist/commands/init.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { writeEnvScaffold, ensureGitignore, writeSkills, writeReferences, writeDocs, ensureBaseDirs, } from "../lib/scaffold.js";
|
|
3
|
+
import { writeEnvScaffold, ensureGitignore, writeSkills, writeReferences, writeDocs, writeStandards, ensureBaseDirs, } from "../lib/scaffold.js";
|
|
4
4
|
import { loadWorkspaceEnv } from "../lib/load-env.js";
|
|
5
5
|
import { ensureBrandDir } from "../lib/layout.js";
|
|
6
6
|
import { pkgRef } from "../lib/channel.js";
|
|
@@ -14,9 +14,10 @@ Usage:
|
|
|
14
14
|
npx ${pkgRef()} init --root <dir> Target a specific folder
|
|
15
15
|
|
|
16
16
|
Run this in a fresh, empty folder. It creates the workspace layout, writes the
|
|
17
|
-
Exodus + Genesis skills into .claude/skills/, scaffolds a comment-only .env,
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
Exodus + Genesis skills into .claude/skills/, scaffolds a comment-only .env,
|
|
18
|
+
creates STANDARDS.md (your taste file) the first time, and prints the dashboard
|
|
19
|
+
paste step. Safe to re-run: it never overwrites your .env, your STANDARDS.md or
|
|
20
|
+
your brand folders — re-running refreshes the skills and catches up new brands.
|
|
20
21
|
`.trim();
|
|
21
22
|
export function scaffoldInit(root) {
|
|
22
23
|
const existing = fs.existsSync(path.join(root, ".env"));
|
|
@@ -26,8 +27,9 @@ export function scaffoldInit(root) {
|
|
|
26
27
|
const skills = writeSkills(root);
|
|
27
28
|
writeReferences(root);
|
|
28
29
|
const docs = writeDocs(root);
|
|
30
|
+
const { created: standardsCreated } = writeStandards(root);
|
|
29
31
|
setScaffoldVersion(getVersion(), root);
|
|
30
|
-
return { existing, envCreated, skills, docs };
|
|
32
|
+
return { existing, envCreated, skills, docs, standardsCreated };
|
|
31
33
|
}
|
|
32
34
|
export async function syncBrands(root) {
|
|
33
35
|
loadWorkspaceEnv(root);
|
|
@@ -56,6 +58,9 @@ export async function run(flags) {
|
|
|
56
58
|
if (r.docs.length) {
|
|
57
59
|
console.log(` Installed workspace docs: ${r.docs.join(", ")}`);
|
|
58
60
|
}
|
|
61
|
+
if (r.standardsCreated) {
|
|
62
|
+
console.log(" Created STANDARDS.md — your taste, read by every skill before it produces");
|
|
63
|
+
}
|
|
59
64
|
const brands = await syncBrands(root);
|
|
60
65
|
if ("synced" in brands && brands.synced.length) {
|
|
61
66
|
console.log(` Synced ${brands.synced.length} brand folder(s): ${brands.synced.join(", ")}`);
|
package/dist/commands/update.js
CHANGED
|
@@ -8,7 +8,7 @@ exodus update — refresh this workspace from the installed CLI (alias of init)
|
|
|
8
8
|
|
|
9
9
|
Re-runs the init refresh: rewrites .claude/skills/, the workspace docs
|
|
10
10
|
(CLAUDE.md, PIPELINES.md), and syncs brand folders from the package you
|
|
11
|
-
invoked. Your .env, state/, and outputs are left untouched.
|
|
11
|
+
invoked. Your .env, your STANDARDS.md, state/, and outputs are left untouched.
|
|
12
12
|
|
|
13
13
|
Usage:
|
|
14
14
|
exodus update
|
package/dist/commands/video.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export interface ClipWord {
|
|
|
8
8
|
export interface ClipQc {
|
|
9
9
|
verdict: "pass" | "fail";
|
|
10
10
|
attempts: number;
|
|
11
|
+
neighbours?: number[];
|
|
11
12
|
}
|
|
12
13
|
export interface ClipFinding {
|
|
13
14
|
check: string;
|
|
@@ -36,6 +37,8 @@ export type ArtifactSubset = {
|
|
|
36
37
|
words?: ClipWord[];
|
|
37
38
|
qc?: ClipQc;
|
|
38
39
|
final?: boolean;
|
|
40
|
+
revoiced?: boolean;
|
|
41
|
+
speechTrimmed?: boolean;
|
|
39
42
|
} | {
|
|
40
43
|
type: "audio";
|
|
41
44
|
sceneIndex?: number;
|
|
@@ -158,10 +161,13 @@ export interface ManifestScene {
|
|
|
158
161
|
voice: string | null;
|
|
159
162
|
keyframe: string | null;
|
|
160
163
|
qc: ClipQc | null;
|
|
164
|
+
revoiced: boolean | null;
|
|
165
|
+
speechTrimmed: boolean | null;
|
|
161
166
|
clipStatus: string;
|
|
162
167
|
error: string | null;
|
|
163
168
|
flagged: boolean;
|
|
164
169
|
findings: ClipFinding[];
|
|
170
|
+
keyframeFindings: ClipFinding[];
|
|
165
171
|
}
|
|
166
172
|
export interface PullFailure {
|
|
167
173
|
file: string;
|