Playbook creative ideas skill

The 3-bullet creative ideas email.

by growthenginenowoslawski·MIT license·★ 736 Stars on the repo·GitHub ↗

Use now

Files of Playbook creative ideas

growthenginenowoslawski/main1 file shown
SKILL.md
Show the full text164 lines

Playbook: 3-Bullet Creative Ideas

Best practice, not law. Override when the campaign calls for it; note the practice once and proceed.

Use when the premise is "I looked at your business and had three ideas."

Not when one personalized sentence tops an otherwise fixed email (playbook-ai-specificity), or the hook is an event.

Output: creative_idea_1 = "a production scheduler that plans injection molding runs against cleanroom capacity"

1. Slot discipline is the whole idea

The operator names what bullets 1, 2 and 3 are about. Those slots stay fixed for every lead, and the model only fills a slot with a detail true of that company. It never picks a subject, never adds a fourth, and never writes an idea the seller cannot deliver.

The measurement that settles this:

Approach Usable
Free-form "have three ideas about this company" 2/5
Slot-defined, operator-named subjects 21/23 (91%)

That is the entire playbook. Everything else is plumbing.

The operator interview, before the prompt exists
  1. What is bullet 1 about? Name the one thing the seller builds, sells or runs that goes in slot 1 — in the seller's own words.
  2. What is bullet 2 about?
  3. What is bullet 3 about?
  4. For each slot, what specific detail about the prospect has to appear?
  5. What must never appear? Competitors, dollar figures, headcounts, named customers, anything the seller does not actually do.
  6. Hand-write the examples. See the gate below.

⚠️ If the operator cannot name three slots, this is the wrong playbook for the campaign. Do not fill the gap yourself. An idea the operator did not ask for is an idea the seller cannot deliver on the call.

⛔ HARD GATE: the operator hand-writes 3 complete bullet sets for 3 real companies before any model call

AI never drafts the exemplars it is graded against.

If the model writes the examples, the examples encode the model's instincts rather than the seller's offer, and every downstream grading round is measuring the model against itself. This is the same contamination failure that forced a verdict to be withdrawn in playbook-pricing-page — a few-shot block that contains the answers is not a prompt, it is an answer key.

2. Output contract

creative_idea_1/2/3 (140 chars each) + evidence_1/2/3 + creative_ideas_block.

Abstain is "". Never a sentinel string, never null.

⚠️ Any empty bullet excludes the row into a separate non-ideas campaign, because a sequencer cannot pin a lead to a specific sequence variant. A 3-bullet email with 2 bullets is not a degraded version of this campaign — it is a different email.

Namespace the custom fields per client (creative_idea_1_<client>). The JSON keys stay unchanged; the suffix is on the pushed field. Near-duplicate custom-field names coexist silently on the same lead record, and that is a very quiet way to send last client's bullets.

3. Source chain

Only the evidence text is sourced. Order: an internal company description, then a free company-enrichment source, then client-owned tables, then a company-search API, then a rendering proxy.

A row still thin after all of that abstains.

⚠️ Gate each rung on the evidence being SHORT (length < 200), not on it being empty. A two-sentence boilerplate description is technically non-empty and produces three generic bullets that read like a mail merge. Emptiness is the wrong test.

4. Verification

VERDICT: PASS 5/6 (83%) on the script path, plus 27/32 (84%) grading real production rows across seven live campaigns.

The second number is the more useful one: it is out-of-sample, at real volume, across different sellers.

⚠️ Script path only. Run the Clay acceptance check in clay-table.md before trusting a Clay build.

Re-test if the usable rate drops under 60% on 20 rows, or evidence coverage drops under 80%.

5. Clay implementation

  • clay-table.md — 14 columns, plus an 8-point acceptance check.
  • clay-workflow.md — the CLI-buildable version.

6. Locked prompt

Outside Clay: a nano-class model at minimal reasoning effort. Measured at 1,195 input and 148 output tokens per row: $0.12 per 1,000 rows against $0.27 for a mini-class model — nano wins by 2.2x. Params: max_completion_tokens=1200, no temperature, JSON response format, flex tier for batch.

Inside Clay: gpt-4o-mini. This is the opposite of the outside-Clay choice and it is deliberate.

⚠️ A Clay AI column set to a nano-class model with reasoning unset is the worst of both worlds: it burns thousands of hidden reasoning tokens per row at standard pricing, runs roughly 19x more expensive than mini, and frequently returns blank content because the reasoning eats the token budget. Clay has no flex or batch tier to soften that.

So build on mini, write the model name in the column description, and budget $0.27/1k for the Clay path rather than $0.12. Switch only if you have opened the column and confirmed you can set reasoning to its lowest value — then record the accepted value so the whole team stops paying mini prices.

Prompt shape
  • System block: the seller's offer, the three named slots, the must-never-appear list, and the output contract.
  • Few-shot: the operator's hand-written sets as faux prior turns.
  • Per-row, last: company name, domain, and the evidence text.
  • Output: {creative_idea_1..3, evidence_1..3, confidence}.

Rules that carry the quality: 8 to 22 words per bullet; no em or en dash; no trailing period; no leading capital; each bullet must name a detail from the evidence; an empty bullet is better than a generic one; never a competitor, a dollar figure, a headcount, or a named customer.

The verifier is free, and it is in the same response

evidence_N must appear as a real substring of the input evidence, normalized on both sides.

That is the whole verification. No second model call: the model is asked to quote what it used, and you assert the quote is real. A bullet whose evidence does not appear in the input was invented, and it is blanked.

Truncation guard: finish_reason=length means retry, never abstain.

7. Edge cases and hard rules

Symptom Cause Fix
The bullets are generic and interchangeable Free-form ideation instead of fixed slots 2/5 vs 21/23. Name the slots
The bullets propose something the seller cannot build The model picked the subject Slots are the operator's, always
The exemplars sound like the model, not the seller AI drafted the examples The hard gate. Hand-write 3 sets on 3 real companies first
Every bullet is filled even on thin companies The evidence rung was gated on emptiness Gate on length < 200
Blank rate above 30% Wrong evidence source for this client Change the source, not the prompt
Blank rate under 5% The prompt was loosened; models fill thin rows rather than abstain Read the thinnest 3 rows by hand
A 3-bullet email arrives with 2 bullets An empty bullet was allowed through Any empty bullet excludes the row into the non-ideas campaign
Last client's bullets appear Custom field names collided Namespace per client. Near-duplicates coexist silently
The Clay column costs 19x the estimate A reasoning model with reasoning unset Use mini in Clay, or confirm you can set the level
Bullets contain an em dash or a trailing period Lint not applied to rendered output Lint the rendered block, not the raw fields
a injection molding line Article agreement Include an a [aeiou] check in the lint
Hard rules
  • Bullets are never spun, and the model never picks what a bullet is about.
  • The operator hand-writes the exemplars first.
  • Any empty bullet excludes the row.
  • Namespace the custom fields per client.
  • Assert the evidence substring on every non-empty bullet.
1---
2name: playbook-creative-ideas
3description: The 3-bullet creative ideas email. Produces three per-company bullets that each sit in a slot the operator defined up front, so the model fills in the company detail and never invents a new idea. Triggers on "creative ideas campaign", "three ideas email", "I had a few ideas for you", "3 bullets", "use cases for their business", "what could they build with us". Outputs creative_idea_1, creative_idea_2, creative_idea_3 plus a rendered bullet block.
4---
5 
6# Playbook: 3-Bullet Creative Ideas
7 
8> Best practice, not law. Override when the campaign calls for it; note the practice once and proceed.
9 
10**Use when** the premise is "I looked at your business and had three ideas."
11 
12**Not when** one personalized sentence tops an otherwise fixed email (`playbook-ai-specificity`), or
13the hook is an event.
14 
15**Output:** `creative_idea_1 = "a production scheduler that plans injection molding runs against cleanroom capacity"`
16 
17## 1. Slot discipline is the whole idea
18 
19**The operator names what bullets 1, 2 and 3 are about. Those slots stay fixed for every lead, and
20the model only fills a slot with a detail true of that company.** It never picks a subject, never
21adds a fourth, and never writes an idea the seller cannot deliver.
22 
23The measurement that settles this:
24 
25| Approach | Usable |
26|---|---|
27| Free-form "have three ideas about this company" | **2/5** |
28| Slot-defined, operator-named subjects | **21/23 (91%)** |
29 
30That is the entire playbook. Everything else is plumbing.
31 
32### The operator interview, before the prompt exists
33 
341. **What is bullet 1 about?** Name the one thing the seller builds, sells or runs that goes in slot
35 1 — **in the seller's own words.**
362. What is bullet 2 about?
373. What is bullet 3 about?
384. **For each slot, what specific detail about the prospect has to appear?**
395. **What must never appear?** Competitors, dollar figures, headcounts, named customers, anything the
40 seller does not actually do.
416. **Hand-write the examples.** See the gate below.
42 
43⚠️ **If the operator cannot name three slots, this is the wrong playbook for the campaign.** Do not
44fill the gap yourself. **An idea the operator did not ask for is an idea the seller cannot deliver on
45the call.**
46 
47### ⛔ HARD GATE: the operator hand-writes 3 complete bullet sets for 3 real companies before any model call
48 
49**AI never drafts the exemplars it is graded against.**
50 
51If the model writes the examples, the examples encode the model's instincts rather than the seller's
52offer, and every downstream grading round is measuring the model against itself. This is the same
53contamination failure that forced a verdict to be withdrawn in `playbook-pricing-page` — a few-shot
54block that contains the answers is not a prompt, it is an answer key.
55 
56## 2. Output contract
57 
58`creative_idea_1/2/3` (140 chars each) + `evidence_1/2/3` + `creative_ideas_block`.
59 
60**Abstain is `""`.** Never a sentinel string, never `null`.
61 
62⚠️ **Any empty bullet excludes the row** into a separate non-ideas campaign, because a sequencer
63cannot pin a lead to a specific sequence variant. A 3-bullet email with 2 bullets is not a degraded
64version of this campaign — it is a different email.
65 
66**Namespace the custom fields per client** (`creative_idea_1_<client>`). The JSON keys stay unchanged;
67the suffix is on the pushed field. Near-duplicate custom-field names coexist silently on the same
68lead record, and that is a very quiet way to send last client's bullets.
69 
70## 3. Source chain
71 
72**Only the evidence text is sourced.** Order: an internal company description, then a **free**
73company-enrichment source, then client-owned tables, then a company-search API, then a rendering
74proxy.
75 
76**A row still thin after all of that abstains.**
77 
78⚠️ **Gate each rung on the evidence being SHORT (`length < 200`), not on it being empty.** A
79two-sentence boilerplate description is technically non-empty and produces three generic bullets that
80read like a mail merge. Emptiness is the wrong test.
81 
82## 4. Verification
83 
84**VERDICT: PASS 5/6 (83%)** on the script path, **plus 27/32 (84%) grading real production rows
85across seven live campaigns.**
86 
87The second number is the more useful one: it is out-of-sample, at real volume, across different
88sellers.
89 
90⚠️ **Script path only.** Run the Clay acceptance check in `clay-table.md` before trusting a Clay
91build.
92 
93Re-test if the usable rate drops under 60% on 20 rows, or evidence coverage drops under 80%.
94 
95## 5. Clay implementation
96 
97- **`clay-table.md`** — 14 columns, plus an 8-point acceptance check.
98- **`clay-workflow.md`** — the CLI-buildable version.
99 
100## 6. Locked prompt
101 
102**Outside Clay: a nano-class model at minimal reasoning effort.** Measured at 1,195 input and 148
103output tokens per row: **$0.12 per 1,000 rows against $0.27 for a mini-class model — nano wins by
1042.2x.** Params: `max_completion_tokens=1200`, no `temperature`, JSON response format, flex tier for
105batch.
106 
107**Inside Clay: `gpt-4o-mini`.** This is the opposite of the outside-Clay choice and it is deliberate.
108 
109⚠️ **A Clay AI column set to a nano-class model with reasoning unset is the worst of both worlds:** it
110burns thousands of hidden reasoning tokens per row at standard pricing, runs roughly **19x more
111expensive than mini**, and **frequently returns blank content** because the reasoning eats the token
112budget. Clay has no flex or batch tier to soften that.
113 
114So build on mini, **write the model name in the column description**, and budget **$0.27/1k** for the
115Clay path rather than $0.12. Switch only if you have opened the column and **confirmed** you can set
116reasoning to its lowest value — then record the accepted value so the whole team stops paying mini
117prices.
118 
119### Prompt shape
120 
121- **System block:** the seller's offer, the three named slots, the must-never-appear list, and the
122 output contract.
123- **Few-shot:** the operator's hand-written sets as faux prior turns.
124- **Per-row, last:** company name, domain, and the evidence text.
125- **Output:** `{creative_idea_1..3, evidence_1..3, confidence}`.
126 
127Rules that carry the quality: 8 to 22 words per bullet; no em or en dash; no trailing period; no
128leading capital; **each bullet must name a detail from the evidence**; **an empty bullet is better
129than a generic one**; never a competitor, a dollar figure, a headcount, or a named customer.
130 
131### The verifier is free, and it is in the same response
132 
133**`evidence_N` must appear as a real substring of the input evidence, normalized on both sides.**
134 
135That is the whole verification. No second model call: the model is asked to quote what it used, and
136you assert the quote is real. A bullet whose evidence does not appear in the input was invented, and
137it is blanked.
138 
139**Truncation guard:** `finish_reason=length` means retry, never abstain.
140 
141## 7. Edge cases and hard rules
142 
143| Symptom | Cause | Fix |
144|---|---|---|
145| The bullets are generic and interchangeable | Free-form ideation instead of fixed slots | **2/5 vs 21/23.** Name the slots |
146| The bullets propose something the seller cannot build | The model picked the subject | Slots are the operator's, always |
147| The exemplars sound like the model, not the seller | AI drafted the examples | **The hard gate.** Hand-write 3 sets on 3 real companies first |
148| Every bullet is filled even on thin companies | The evidence rung was gated on emptiness | Gate on `length < 200` |
149| Blank rate above 30% | Wrong evidence source for this client | Change the source, not the prompt |
150| Blank rate under 5% | The prompt was loosened; models fill thin rows rather than abstain | **Read the thinnest 3 rows by hand** |
151| A 3-bullet email arrives with 2 bullets | An empty bullet was allowed through | **Any empty bullet excludes the row** into the non-ideas campaign |
152| Last client's bullets appear | Custom field names collided | **Namespace per client.** Near-duplicates coexist silently |
153| The Clay column costs 19x the estimate | A reasoning model with reasoning unset | Use mini in Clay, or confirm you can set the level |
154| Bullets contain an em dash or a trailing period | Lint not applied to rendered output | Lint the rendered block, not the raw fields |
155| `a injection molding line` | Article agreement | Include an `a [aeiou]` check in the lint |
156 
157### Hard rules
158 
159- **Bullets are never spun, and the model never picks what a bullet is about.**
160- **The operator hand-writes the exemplars first.**
161- **Any empty bullet excludes the row.**
162- **Namespace the custom fields per client.**
163- **Assert the evidence substring on every non-empty bullet.**
164 

Discussion