taketomarket 2.2.0 → 2.3.1
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/.claude-plugin/marketplace.json +13 -17
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +35 -12
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +309 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +65 -0
- package/references/landing-page-headline-examples.md +190 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- package/workflows/utility/state.md +42 -7
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
## Step 0: First-run inline education
|
|
2
|
+
|
|
3
|
+
Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
|
|
4
|
+
|
|
5
|
+
If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-humanize` is not `true`, print the explainer below verbatim, then mark this skill as seen:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-humanize
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-humanize --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-humanize`
|
|
14
|
+
|
|
15
|
+
`/ttm-humanize` rewrites AI-flavored prose into something that sounds like a
|
|
16
|
+
person wrote it: varied sentence rhythm, fewer hedges, specific verbs, no
|
|
17
|
+
"furthermore" or "in today's fast-paced." It runs after verify, before review,
|
|
18
|
+
and only on assets flagged for tone tuning.
|
|
19
|
+
|
|
20
|
+
Why it matters: detection models and human readers both pattern-match on the
|
|
21
|
+
same tells, and AI-fingerprinted copy converts worse and damages trust. Think
|
|
22
|
+
of humanize as a code formatter that targets the LLM-prose anti-patterns the
|
|
23
|
+
way Prettier targets whitespace.
|
|
24
|
+
|
|
25
|
+
(Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
<purpose>
|
|
30
|
+
Humanization workflow for /ttm-humanize. Detects and rewrites the AI-writing patterns
|
|
31
|
+
cataloged in references/humanizer-patterns.md against an audience-facing asset, calibrated
|
|
32
|
+
to the brand voice declared in .taketomarket/BRAND.md and constrained by the positioning
|
|
33
|
+
invariant in .taketomarket/POSITIONING.md. Every audience-facing asset in takeToMarket
|
|
34
|
+
passes through this workflow before write -- no asset ships with the AI fingerprint intact.
|
|
35
|
+
</purpose>
|
|
36
|
+
|
|
37
|
+
<required_reading>
|
|
38
|
+
@${CLAUDE_PLUGIN_ROOT}/references/humanizer-patterns.md
|
|
39
|
+
@${CLAUDE_PLUGIN_ROOT}/references/context-loading.md
|
|
40
|
+
</required_reading>
|
|
41
|
+
|
|
42
|
+
<constraints>
|
|
43
|
+
## POSITIONING.md is READ-ONLY
|
|
44
|
+
|
|
45
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
46
|
+
|
|
47
|
+
Humanization rewrites style and rhythm. It must not change positioning anchors, proof
|
|
48
|
+
points, ICP framing, or any must-not-say term enforcement. If a humanization rewrite would
|
|
49
|
+
contradict POSITIONING.md, abort the rewrite for that span and flag it instead.
|
|
50
|
+
|
|
51
|
+
## BRAND.md voice is authoritative
|
|
52
|
+
|
|
53
|
+
The asset's voice MUST match `.taketomarket/BRAND.md`. If the source asset already deviates
|
|
54
|
+
from BRAND.md, humanization is not the place to fix it -- flag the deviation and recommend
|
|
55
|
+
`/ttm-positioning-check` or a manual brand review.
|
|
56
|
+
|
|
57
|
+
## Meaning is preserved
|
|
58
|
+
|
|
59
|
+
Humanization rewrites the surface. Claims, numbers, proper nouns, citations, and CTAs are
|
|
60
|
+
preserved verbatim unless they are themselves AI-pattern instances (vague attribution,
|
|
61
|
+
knowledge-cutoff disclaimer, sycophantic opener).
|
|
62
|
+
</constraints>
|
|
63
|
+
|
|
64
|
+
<process>
|
|
65
|
+
|
|
66
|
+
## Text-Mode Detection
|
|
67
|
+
|
|
68
|
+
**Text mode (`--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS`
|
|
69
|
+
or if the runtime is not Claude Code. When TEXT_MODE is active, replace every
|
|
70
|
+
`AskUserQuestion` call with a plain-text numbered list.
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
if echo "$ARGUMENTS" | grep -q -- '--text'; then TEXT_MODE=true; fi
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
If `AskUserQuestion` tool is not available in the current runtime, set `TEXT_MODE=true`.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Step 1: Resolve Target Asset
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
takeToMarket > LOADING ASSET
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Parse `$ARGUMENTS`. Strip the `--text` flag if present. The remaining token is the target:
|
|
87
|
+
|
|
88
|
+
- A file path (absolute or repo-relative ending in `.md`): treat as `TARGET_PATH`. Read it.
|
|
89
|
+
- A campaign slug followed by an asset id (e.g., `pricing-q2 02`): resolve to
|
|
90
|
+
`.taketomarket/CAMPAIGNS/${SLUG}/ASSETS/${NN}-*.md`.
|
|
91
|
+
- A bare campaign slug: read `.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` and humanize
|
|
92
|
+
every asset listed. Process the hero first, then derivatives.
|
|
93
|
+
- No argument and stdin/clipboard text present: treat as inline mode -- humanize the pasted
|
|
94
|
+
text and print the result; do not write to disk.
|
|
95
|
+
|
|
96
|
+
Store the source text as `DRAFT`. Store the resolution mode as `MODE` (`file` | `campaign` |
|
|
97
|
+
`inline`).
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Step 2: Load Voice Context
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
takeToMarket > CALIBRATING VOICE
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Read full content (Tier 2 per context-loading.md):
|
|
108
|
+
|
|
109
|
+
- `.taketomarket/BRAND.md` -- voice, tone, vocabulary, must-not-say terms
|
|
110
|
+
- `.taketomarket/POSITIONING.md` -- anchors, proof points, must-not-say terms (positioning)
|
|
111
|
+
|
|
112
|
+
If the asset belongs to a campaign (MODE is `file` under `CAMPAIGNS/${SLUG}/ASSETS/` or
|
|
113
|
+
MODE is `campaign`), also read:
|
|
114
|
+
|
|
115
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` -- campaign-specific hook, proof points,
|
|
116
|
+
channel constraints
|
|
117
|
+
|
|
118
|
+
From BRAND.md, extract a **voice profile**:
|
|
119
|
+
|
|
120
|
+
- Sentence length pattern (short/punchy, long/flowing, mixed)
|
|
121
|
+
- Word-choice register (casual, technical, formal, mixed)
|
|
122
|
+
- Paragraph openers (jump straight in vs. set context first)
|
|
123
|
+
- Punctuation habits (dashes, parentheticals, semicolons, fragments)
|
|
124
|
+
- Recurring phrases or verbal tics declared in BRAND.md
|
|
125
|
+
- Transition style (explicit connectors vs. abrupt cuts)
|
|
126
|
+
- First-person stance (uses "I"/"we" vs. third-person only)
|
|
127
|
+
|
|
128
|
+
If BRAND.md does not declare these explicitly, infer them from any sample passages it
|
|
129
|
+
contains. If no samples exist, set `VOICE_PROFILE=default` (varied rhythm, opinionated,
|
|
130
|
+
first-person allowed, no AI tells -- see "Signs of soulless writing" in
|
|
131
|
+
`references/humanizer-patterns.md`).
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Step 3: Scan for AI Patterns
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
takeToMarket > SCANNING FOR AI PATTERNS
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Walk `DRAFT` against every section in `${CLAUDE_PLUGIN_ROOT}/references/humanizer-patterns.md`:
|
|
142
|
+
|
|
143
|
+
1. CONTENT PATTERNS (sections 1-6) -- significance inflation, notability puffery,
|
|
144
|
+
superficial -ing analyses, promotional language, vague attributions, formulaic
|
|
145
|
+
challenges sections.
|
|
146
|
+
2. LANGUAGE AND GRAMMAR PATTERNS (sections 7-13) -- AI vocabulary, copula avoidance,
|
|
147
|
+
negative parallelism, rule of three, elegant variation, false ranges, passive voice.
|
|
148
|
+
3. STYLE PATTERNS (sections 14-19) -- em-dash overuse, boldface overuse, inline-header
|
|
149
|
+
lists, title-case headings, emojis, curly quotes.
|
|
150
|
+
4. COMMUNICATION PATTERNS (sections 20-22) -- chatbot artifacts, knowledge-cutoff
|
|
151
|
+
disclaimers, sycophantic tone.
|
|
152
|
+
5. FILLER AND HEDGING (sections 23-29) -- filler phrases, excessive hedging, generic
|
|
153
|
+
positive conclusions, hyphenated word-pair overuse, persuasive authority tropes,
|
|
154
|
+
signposting, fragmented headers.
|
|
155
|
+
|
|
156
|
+
For each hit, record:
|
|
157
|
+
|
|
158
|
+
- Section number from the reference (e.g., `7`, `14`)
|
|
159
|
+
- The offending span (a short quote)
|
|
160
|
+
- The rewrite shape suggested by the section's Before/After pair
|
|
161
|
+
|
|
162
|
+
Store the list as `HITS`. If `HITS` is empty AND the draft does not fail the "soulless
|
|
163
|
+
writing" check from the reference, skip to Step 6 -- the asset is already clean.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Step 4: Rewrite
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
takeToMarket > REWRITING (${N} pattern hits)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
For each hit in `HITS`, rewrite the offending span using:
|
|
174
|
+
|
|
175
|
+
- The Before/After template from the matching section of `humanizer-patterns.md`
|
|
176
|
+
- The voice profile from Step 2 -- match the asset's brand cadence, not a generic
|
|
177
|
+
"natural" tone
|
|
178
|
+
|
|
179
|
+
Rules:
|
|
180
|
+
|
|
181
|
+
- Preserve claims, numbers, proper nouns, citations, and CTAs verbatim.
|
|
182
|
+
- Do NOT introduce new claims or facts. If a vague attribution cannot be replaced with
|
|
183
|
+
a real source from POSITIONING.md proof points or the campaign brief, delete the
|
|
184
|
+
attribution rather than inventing one.
|
|
185
|
+
- Do NOT remove a span that is load-bearing for positioning (anchor phrase, proof point,
|
|
186
|
+
differentiator) even if it pattern-matches. Flag it and leave it.
|
|
187
|
+
- If the brand voice is itself terse and bullet-heavy, don't rewrite inline-header lists
|
|
188
|
+
into prose paragraphs -- match the brand.
|
|
189
|
+
- Soulless output is a failure mode. After mechanical fixes, do one personality pass
|
|
190
|
+
using the "How to add voice" guidance in the reference: vary rhythm, allow opinion,
|
|
191
|
+
let some mess in, be specific.
|
|
192
|
+
|
|
193
|
+
Store the rewritten text as `DRAFT_V2`.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## Step 5: Final Anti-AI Audit
|
|
198
|
+
|
|
199
|
+
```
|
|
200
|
+
takeToMarket > FINAL AUDIT
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Run one more pass against `DRAFT_V2`:
|
|
204
|
+
|
|
205
|
+
1. Re-scan against `humanizer-patterns.md`. Record any remaining tells as a short bulleted
|
|
206
|
+
list `REMAINING_TELLS` (cap at 5 items -- the goal is signal, not exhaustiveness).
|
|
207
|
+
2. Apply one more revision targeting `REMAINING_TELLS` specifically. Most often this means
|
|
208
|
+
tightening rhythm, breaking up tidy parallel structure, or replacing a remaining
|
|
209
|
+
abstract noun with a concrete one.
|
|
210
|
+
|
|
211
|
+
Store the result as `DRAFT_FINAL`.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Step 6: Output
|
|
216
|
+
|
|
217
|
+
Behavior depends on `MODE`:
|
|
218
|
+
|
|
219
|
+
### MODE = `file` or `campaign` (write back)
|
|
220
|
+
|
|
221
|
+
Write `DRAFT_FINAL` to the original asset path. Overwrite without prompting -- the previous
|
|
222
|
+
draft is recoverable via git.
|
|
223
|
+
|
|
224
|
+
For campaign mode, after writing the asset, append a line to
|
|
225
|
+
`.taketomarket/CAMPAIGNS/${SLUG}/MANIFEST.json` under the asset's entry:
|
|
226
|
+
`"humanized_at": "${ISO_TIMESTAMP}"` (use `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs"
|
|
227
|
+
timestamp --raw`).
|
|
228
|
+
|
|
229
|
+
### MODE = `inline` (print only)
|
|
230
|
+
|
|
231
|
+
Print `DRAFT_FINAL` to the conversation. Do not write to disk.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Step 7: Display Summary
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
takeToMarket > HUMANIZATION COMPLETE
|
|
239
|
+
|
|
240
|
+
Asset: ${TARGET_PATH or "inline"}
|
|
241
|
+
Pattern hits found: ${HITS.length}
|
|
242
|
+
Top patterns rewritten: ${top 3 section numbers from HITS}
|
|
243
|
+
Remaining tells after audit: ${REMAINING_TELLS.length}
|
|
244
|
+
|
|
245
|
+
[If MODE = file or campaign:]
|
|
246
|
+
Asset rewritten in place. Diff is visible via `git diff`.
|
|
247
|
+
|
|
248
|
+
[If MODE = campaign:]
|
|
249
|
+
Manifest annotated with humanized_at timestamp.
|
|
250
|
+
|
|
251
|
+
[If any positioning-load-bearing spans were flagged-but-not-rewritten:]
|
|
252
|
+
WARNING: ${N} span(s) pattern-matched but were preserved because they carry positioning
|
|
253
|
+
or proof-point load. Review manually if voice still feels off.
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
</process>
|
|
257
|
+
|
|
258
|
+
<success_criteria>
|
|
259
|
+
- [ ] Source asset resolved (file, campaign asset, or inline text)
|
|
260
|
+
- [ ] BRAND.md voice profile loaded and applied to rewrites
|
|
261
|
+
- [ ] POSITIONING.md anchors and proof points preserved verbatim
|
|
262
|
+
- [ ] Every hit from the pattern scan addressed -- rewritten or flagged with reason
|
|
263
|
+
- [ ] Final anti-AI audit completed with remaining tells listed (or empty)
|
|
264
|
+
- [ ] Soulless-writing check passed (rhythm varied, voice present, not just clean)
|
|
265
|
+
- [ ] Output written to disk (file/campaign mode) or printed (inline mode)
|
|
266
|
+
- [ ] Manifest updated with humanized_at when in campaign mode
|
|
267
|
+
</success_criteria>
|
|
268
|
+
|
|
269
|
+
<output>
|
|
270
|
+
- File/campaign mode: rewritten asset at the original path
|
|
271
|
+
- Campaign mode: `humanized_at` timestamp added to MANIFEST.json asset entry
|
|
272
|
+
- Inline mode: rewritten text printed to the conversation
|
|
273
|
+
</output>
|
|
274
|
+
|
|
275
|
+
## What if this doesn't fit?
|
|
276
|
+
|
|
277
|
+
Looks like /ttm-humanize can't do that yet.
|
|
278
|
+
|
|
279
|
+
- Want a new skill? /ttm-request-skill
|
|
280
|
+
- Existing skill needs work? /ttm-improve-skill
|
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## Step 0: First-run inline education
|
|
2
|
+
|
|
3
|
+
Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
|
|
4
|
+
|
|
5
|
+
If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-learn` is not `true`, print the explainer below verbatim, then mark this skill as seen:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-learn
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-learn --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-learn`
|
|
14
|
+
|
|
15
|
+
`/ttm-learn` reads finished campaigns -- briefs, gate results, ship records,
|
|
16
|
+
measurement output -- and extracts compound learnings into
|
|
17
|
+
`.taketomarket/LEARNINGS.md`: what positioning angles converted, which
|
|
18
|
+
channels under- or over-delivered, which playbook variants worked. Future
|
|
19
|
+
briefs auto-load this file.
|
|
20
|
+
|
|
21
|
+
Why it matters: marketing learnings without a structured store dissolve into
|
|
22
|
+
folklore inside three months. Learn turns each campaign's data into a
|
|
23
|
+
versioned doc that biases the next brief toward what actually worked --
|
|
24
|
+
the marketing equivalent of a postmortem doc plus a regression suite of
|
|
25
|
+
tactics.
|
|
26
|
+
|
|
27
|
+
(Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
1
31
|
<purpose>
|
|
2
32
|
Learn workflow for /ttm-learn. Extracts lessons from campaign measurement data
|
|
3
33
|
and campaign history. Proposes reference file edits as narratives with per-edit
|
|
@@ -19,7 +49,7 @@ better. LEARNINGS.md is already loaded as Tier 1 context in the brief workflow
|
|
|
19
49
|
<constraints>
|
|
20
50
|
## POSITIONING.md is READ-ONLY
|
|
21
51
|
|
|
22
|
-
**Do NOT modify `.
|
|
52
|
+
**Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
|
|
23
53
|
|
|
24
54
|
POSITIONING.md is an architectural invariant. If you identify a lesson that implies
|
|
25
55
|
a POSITIONING.md edit:
|
|
@@ -34,12 +64,12 @@ POSITIONING.md edits directly even if the user approves. Instead, display:
|
|
|
34
64
|
## Reference File Edit Targets
|
|
35
65
|
|
|
36
66
|
Only the following files may be edited via this workflow (per D-09):
|
|
37
|
-
- `.
|
|
38
|
-
- `.
|
|
39
|
-
- `.
|
|
40
|
-
- `.
|
|
41
|
-
- `.
|
|
42
|
-
- `.
|
|
67
|
+
- `.taketomarket/BRAND.md`
|
|
68
|
+
- `.taketomarket/ICP.md`
|
|
69
|
+
- `.taketomarket/CHANNELS.md`
|
|
70
|
+
- `.taketomarket/POSITIONING.md` (via /ttm-positioning-shift only -- never directly)
|
|
71
|
+
- `.taketomarket/METRICS.md`
|
|
72
|
+
- `.taketomarket/COMPETITORS.md`
|
|
43
73
|
|
|
44
74
|
## Append-Only LEARNINGS.md
|
|
45
75
|
|
|
@@ -89,36 +119,36 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
|
|
|
89
119
|
If SLUG is empty, error: "Usage: /ttm-learn [campaign-slug]. Provide a campaign slug." Exit.
|
|
90
120
|
|
|
91
121
|
**Load Tier 1 summaries** from all 9 reference files (lines 1 to `<!-- END_SUMMARY -->`):
|
|
92
|
-
- `.
|
|
93
|
-
- `.
|
|
94
|
-
- `.
|
|
95
|
-
- `.
|
|
96
|
-
- `.
|
|
97
|
-
- `.
|
|
98
|
-
- `.
|
|
99
|
-
- `.
|
|
100
|
-
- `.
|
|
122
|
+
- `.taketomarket/POSITIONING.md`
|
|
123
|
+
- `.taketomarket/BRAND.md`
|
|
124
|
+
- `.taketomarket/ICP.md`
|
|
125
|
+
- `.taketomarket/CHANNELS.md`
|
|
126
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
127
|
+
- `.taketomarket/CALENDAR.md`
|
|
128
|
+
- `.taketomarket/COMPETITORS.md`
|
|
129
|
+
- `.taketomarket/METRICS.md`
|
|
130
|
+
- `.taketomarket/LEARNINGS.md`
|
|
101
131
|
|
|
102
132
|
**Load Tier 2 (full content)** for learning analysis:
|
|
103
|
-
- `.
|
|
104
|
-
- `.
|
|
105
|
-
- `.
|
|
106
|
-
- `.
|
|
107
|
-
- `.
|
|
108
|
-
- `.
|
|
109
|
-
- `.
|
|
133
|
+
- `.taketomarket/LEARNINGS.md` (existing lessons and patterns)
|
|
134
|
+
- `.taketomarket/METRICS.md` (metric definitions for delta interpretation)
|
|
135
|
+
- `.taketomarket/BRAND.md` (brand guidelines for edit proposals)
|
|
136
|
+
- `.taketomarket/ICP.md` (ICP data for edit proposals)
|
|
137
|
+
- `.taketomarket/CHANNELS.md` (channel data for edit proposals)
|
|
138
|
+
- `.taketomarket/COMPETITORS.md` (competitor data for edit proposals)
|
|
139
|
+
- `.taketomarket/POSITIONING.md` (read-only -- for positioning drift detection)
|
|
110
140
|
|
|
111
141
|
**Load campaign artifacts** per the scan order from learnings-extraction.md:
|
|
112
|
-
- `.
|
|
113
|
-
- `.
|
|
114
|
-
- `.
|
|
115
|
-
- `.
|
|
116
|
-
- `.
|
|
117
|
-
- `.
|
|
142
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md` (frontmatter for gate results, run counts)
|
|
143
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md` (measurement report with outcome data)
|
|
144
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md` (original strategy and targets)
|
|
145
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/VERIFICATION.md` (gate details if it exists)
|
|
146
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/FIX-BRIEF-*.md` (fix details if they exist)
|
|
147
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/REVIEW-FEEDBACK-*.md` (reviewer comments if they exist)
|
|
118
148
|
|
|
119
|
-
If `.
|
|
149
|
+
If `.taketomarket/CAMPAIGNS/${SLUG}/` does not exist, error: "Campaign '${SLUG}' not found. Check the slug and try again." Exit.
|
|
120
150
|
|
|
121
|
-
If `.
|
|
151
|
+
If `.taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md` does not exist, error: "No measurement data found for '${SLUG}'. Run /ttm-measure first." Exit.
|
|
122
152
|
|
|
123
153
|
---
|
|
124
154
|
|
|
@@ -226,7 +256,7 @@ Based on campaign "${SLUG}" results, [specific observation from measurement data
|
|
|
226
256
|
[Reasoning derived from the data and campaign artifacts].
|
|
227
257
|
Therefore, [specific edit proposal describing the change].
|
|
228
258
|
|
|
229
|
-
File: .
|
|
259
|
+
File: .taketomarket/${TARGET_FILE}.md
|
|
230
260
|
Section: [section name where the edit applies]
|
|
231
261
|
Change: [specific addition, modification, or removal]
|
|
232
262
|
```
|
|
@@ -243,7 +273,7 @@ Use AskUserQuestion with options:
|
|
|
243
273
|
|
|
244
274
|
**If TEXT_MODE=true:**
|
|
245
275
|
```
|
|
246
|
-
Apply this edit to .
|
|
276
|
+
Apply this edit to .taketomarket/${TARGET_FILE}.md?
|
|
247
277
|
1. Apply -- Update ${TARGET_FILE}.md with this change
|
|
248
278
|
2. Skip -- Keep ${TARGET_FILE}.md unchanged, log lesson only
|
|
249
279
|
3. Modify -- Edit the proposed change before applying
|
|
@@ -284,7 +314,7 @@ Track counts: `edits_proposed` (total proposed), `edits_applied` (Apply + Modify
|
|
|
284
314
|
|
|
285
315
|
## Step 6: Append Lessons to LEARNINGS.md (per LRNG-01, LIFE-17)
|
|
286
316
|
|
|
287
|
-
1. Read `.
|
|
317
|
+
1. Read `.taketomarket/LEARNINGS.md`
|
|
288
318
|
2. Find the marker line: `<!-- LESSONS BELOW THIS LINE -->`
|
|
289
319
|
3. Insert new lesson rows immediately after the marker, one row per lesson from Step 4:
|
|
290
320
|
```
|
|
@@ -379,7 +409,7 @@ Reference edits proposed: ${PROPOSED_COUNT}
|
|
|
379
409
|
Reference edits applied: ${APPLIED_COUNT}
|
|
380
410
|
Pattern extraction: ${PATTERN_STATUS}
|
|
381
411
|
|
|
382
|
-
Lessons appended to: .
|
|
412
|
+
Lessons appended to: .taketomarket/LEARNINGS.md
|
|
383
413
|
|
|
384
414
|
Next: Run /ttm-archive ${SLUG} to finalize the campaign, or start a new campaign.
|
|
385
415
|
Future campaigns will load these lessons via /ttm-brief to prevent repeating mistakes.
|
|
@@ -403,3 +433,10 @@ Where `${PATTERN_STATUS}` is one of:
|
|
|
403
433
|
- [ ] Pattern extraction runs only if 3+ campaign slugs in lessons log
|
|
404
434
|
- [ ] Campaign state updated with learn.* fields
|
|
405
435
|
</checklist>
|
|
436
|
+
|
|
437
|
+
## What if this doesn't fit?
|
|
438
|
+
|
|
439
|
+
Looks like /ttm-learn can't do that yet.
|
|
440
|
+
|
|
441
|
+
- Want a new skill? /ttm-request-skill
|
|
442
|
+
- Existing skill needs work? /ttm-improve-skill
|
|
@@ -1,3 +1,32 @@
|
|
|
1
|
+
## Step 0: First-run inline education
|
|
2
|
+
|
|
3
|
+
Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
|
|
4
|
+
|
|
5
|
+
If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-measure` is not `true`, print the explainer below verbatim, then mark this skill as seen:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-measure
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-measure --raw` -- the JSON `seen` field is `true` once the explainer has run before.
|
|
12
|
+
|
|
13
|
+
### Explainer for `/ttm-measure`
|
|
14
|
+
|
|
15
|
+
`/ttm-measure` ingests analytics data (pasted in manually for the MVP) and
|
|
16
|
+
matches it against the outcome metric declared in the brief. Output is a
|
|
17
|
+
pass/fail per campaign plus a per-asset performance summary written to
|
|
18
|
+
MEASURE.md.
|
|
19
|
+
|
|
20
|
+
Why it matters: every brief committed to an outcome metric, and measure is
|
|
21
|
+
where that commitment gets checked. Skipping measure means you never learn
|
|
22
|
+
which positioning angles, channels, or hooks actually moved the number --
|
|
23
|
+
the production loop becomes vibes-driven. This is the closing parenthesis on
|
|
24
|
+
the spec-driven cycle.
|
|
25
|
+
|
|
26
|
+
(Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
1
30
|
<purpose>
|
|
2
31
|
Measurement workflow for /ttm-measure. Accepts analytics data via 3 pathways
|
|
3
32
|
(MCP tools, CSV/Markdown paste, structured batch questions). Applies 3 attribution
|
|
@@ -16,7 +45,7 @@ data is available for the measurement window.
|
|
|
16
45
|
|
|
17
46
|
## Positioning Constraint (Read-Only)
|
|
18
47
|
|
|
19
|
-
`.
|
|
48
|
+
`.taketomarket/POSITIONING.md` is loaded for context only. This workflow MUST NOT modify
|
|
20
49
|
POSITIONING.md. Positioning changes require `/ttm-positioning` -- never alter positioning
|
|
21
50
|
as a side effect of measurement.
|
|
22
51
|
|
|
@@ -61,25 +90,25 @@ SLUG=$(echo "$ARGUMENTS" | sed 's/--text//g' | xargs)
|
|
|
61
90
|
If SLUG is empty, error: "Usage: /ttm-measure [campaign-slug]. Provide a campaign slug." Exit.
|
|
62
91
|
|
|
63
92
|
Read Tier 1 summary blocks (content between `<!-- _SUMMARY -->` and `<!-- END_SUMMARY -->`)
|
|
64
|
-
from all 9 `.
|
|
65
|
-
|
|
66
|
-
- `.
|
|
67
|
-
- `.
|
|
68
|
-
- `.
|
|
69
|
-
- `.
|
|
70
|
-
- `.
|
|
71
|
-
- `.
|
|
72
|
-
- `.
|
|
73
|
-
- `.
|
|
74
|
-
- `.
|
|
93
|
+
from all 9 `.taketomarket/` reference files:
|
|
94
|
+
|
|
95
|
+
- `.taketomarket/POSITIONING.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
96
|
+
- `.taketomarket/BRAND.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
97
|
+
- `.taketomarket/ICP.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
98
|
+
- `.taketomarket/CHANNELS.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
99
|
+
- `.taketomarket/STATE.md` (frontmatter only)
|
|
100
|
+
- `.taketomarket/CALENDAR.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
101
|
+
- `.taketomarket/COMPETITORS.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
102
|
+
- `.taketomarket/METRICS.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
103
|
+
- `.taketomarket/LEARNINGS.md` (lines 1 to `<!-- END_SUMMARY -->`)
|
|
75
104
|
|
|
76
105
|
Read Tier 2 (full content) for:
|
|
77
|
-
- `.
|
|
78
|
-
- `.
|
|
106
|
+
- `.taketomarket/METRICS.md` (needed for metric definitions and outcome/output classification)
|
|
107
|
+
- `.taketomarket/CHANNELS.md` (needed for channel attribution mapping)
|
|
79
108
|
|
|
80
109
|
Read campaign-specific files (always full-load per context-loading.md rule 4):
|
|
81
|
-
- `.
|
|
82
|
-
- `.
|
|
110
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/STATE.md`
|
|
111
|
+
- `.taketomarket/CAMPAIGNS/${SLUG}/BRIEF.md`
|
|
83
112
|
|
|
84
113
|
Extract from brief:
|
|
85
114
|
- **Outcome metric:** name, target value, measurement window, data source
|
|
@@ -322,7 +351,7 @@ Preserve the original pasted/collected data for audit trail.
|
|
|
322
351
|
|
|
323
352
|
Write completed report to:
|
|
324
353
|
```
|
|
325
|
-
.
|
|
354
|
+
.taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md
|
|
326
355
|
```
|
|
327
356
|
|
|
328
357
|
---
|
|
@@ -359,7 +388,7 @@ Display the Outcome Assessment section inline (the metrics table from Step 6).
|
|
|
359
388
|
```
|
|
360
389
|
takeToMarket > MEASUREMENT COMPLETE
|
|
361
390
|
|
|
362
|
-
Report written to: .
|
|
391
|
+
Report written to: .taketomarket/CAMPAIGNS/${SLUG}/MEASUREMENT.md
|
|
363
392
|
Analytics source: ${ANALYTICS_MODE}
|
|
364
393
|
Outcome metric: ${OUTCOME_METRIC_NAME}
|
|
365
394
|
Result: ${OUTCOME_MET} (${OUTCOME_DELTA} from target)
|
|
@@ -377,3 +406,10 @@ Next: Run /ttm-learn ${SLUG} to extract lessons and improve future campaigns.
|
|
|
377
406
|
- [ ] MEASUREMENT.md written with outcome-first ordering
|
|
378
407
|
- [ ] Campaign state updated with measure.* fields
|
|
379
408
|
</checklist>
|
|
409
|
+
|
|
410
|
+
## What if this doesn't fit?
|
|
411
|
+
|
|
412
|
+
Looks like /ttm-measure can't do that yet.
|
|
413
|
+
|
|
414
|
+
- Want a new skill? /ttm-request-skill
|
|
415
|
+
- Existing skill needs work? /ttm-improve-skill
|