taketomarket 2.2.0 → 2.3.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.
Files changed (180) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +34 -11
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +305 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +64 -0
  42. package/references/linkedin-post-patterns.md +174 -0
  43. package/references/logo-design-principles.md +55 -0
  44. package/references/meta-gate-evaluation.md +3 -3
  45. package/references/obra-superpowers-conventions.md +170 -0
  46. package/references/playbook-leaders.md +472 -0
  47. package/references/playwright-mcp-setup.md +164 -0
  48. package/references/positioning-check-report.md +2 -2
  49. package/references/pseo-page-anatomy.md +56 -0
  50. package/references/pseo-templates/alternative-anatomy.md +31 -0
  51. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  52. package/references/pseo-templates/blog-anatomy.md +28 -0
  53. package/references/pseo-templates/blog-content-playbook.md +36 -0
  54. package/references/pseo-templates/comparison-anatomy.md +29 -0
  55. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  56. package/references/pseo-templates/use-case-anatomy.md +28 -0
  57. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  58. package/skills/ttm-101/SKILL.md +25 -0
  59. package/skills/ttm-aeo-check/SKILL.md +17 -12
  60. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  61. package/skills/ttm-archive/SKILL.md +5 -0
  62. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  63. package/skills/ttm-brief/SKILL.md +5 -0
  64. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  65. package/skills/ttm-deploy/SKILL.md +22 -0
  66. package/skills/ttm-discover/SKILL.md +17 -0
  67. package/skills/ttm-email-check/SKILL.md +17 -0
  68. package/skills/ttm-email-preflight/SKILL.md +17 -11
  69. package/skills/ttm-fix/SKILL.md +5 -0
  70. package/skills/ttm-health/SKILL.md +6 -1
  71. package/skills/ttm-humanize/SKILL.md +33 -0
  72. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  73. package/skills/ttm-improve-skill/SKILL.md +18 -0
  74. package/skills/ttm-init/SKILL.md +10 -3
  75. package/skills/ttm-keyword-map/SKILL.md +17 -11
  76. package/skills/ttm-landing/SKILL.md +19 -0
  77. package/skills/ttm-learn/SKILL.md +5 -0
  78. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  79. package/skills/ttm-measure/SKILL.md +5 -0
  80. package/skills/ttm-new-campaign/SKILL.md +5 -0
  81. package/skills/ttm-next/SKILL.md +5 -0
  82. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  83. package/skills/ttm-positioning-check/SKILL.md +5 -0
  84. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  85. package/skills/ttm-produce/SKILL.md +5 -0
  86. package/skills/ttm-pseo/SKILL.md +26 -0
  87. package/skills/ttm-repurpose/SKILL.md +5 -0
  88. package/skills/ttm-request-skill/SKILL.md +18 -0
  89. package/skills/ttm-research/SKILL.md +18 -6
  90. package/skills/ttm-resume/SKILL.md +5 -0
  91. package/skills/ttm-review/SKILL.md +5 -0
  92. package/skills/ttm-seo/SKILL.md +64 -0
  93. package/skills/ttm-seo-audit/SKILL.md +17 -12
  94. package/skills/ttm-ship/SKILL.md +5 -0
  95. package/skills/ttm-state/SKILL.md +5 -0
  96. package/skills/ttm-update/SKILL.md +152 -4
  97. package/skills/ttm-verify/SKILL.md +5 -0
  98. package/templates/agents-md.md +14 -4
  99. package/templates/campaign-research.md +6 -6
  100. package/templates/campaign-state.md +1 -1
  101. package/templates/claude-md.md +14 -4
  102. package/templates/linkedin-base-template.md +48 -0
  103. package/templates/next-step-footer.md +13 -0
  104. package/templates/production-manifest.json +4 -4
  105. package/templates/pseo/alternative-cms-schema.json +65 -0
  106. package/templates/pseo/blog-cms-schema.json +55 -0
  107. package/templates/pseo/comparison-cms-schema.json +56 -0
  108. package/templates/pseo/use-case-cms-schema.json +62 -0
  109. package/templates/reference-files/brand.md +51 -0
  110. package/templates/reference-files/product-dna.md +73 -0
  111. package/templates/site-scaffold/app/globals.css +2 -0
  112. package/templates/site-scaffold/app/layout.tsx +17 -0
  113. package/templates/site-scaffold/app/page.tsx +33 -0
  114. package/templates/site-scaffold/app/robots.ts +8 -0
  115. package/templates/site-scaffold/app/sitemap.ts +10 -0
  116. package/templates/site-scaffold/app/tokens.css +21 -0
  117. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  118. package/templates/site-scaffold/components/Faq.tsx +14 -0
  119. package/templates/site-scaffold/components/Features.tsx +14 -0
  120. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  121. package/templates/site-scaffold/components/Footer.tsx +12 -0
  122. package/templates/site-scaffold/components/Hero.tsx +22 -0
  123. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  124. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  125. package/templates/site-scaffold/components/Problem.tsx +14 -0
  126. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  127. package/templates/site-scaffold/components/Solution.tsx +14 -0
  128. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  129. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  130. package/templates/site-scaffold/content/.gitkeep +0 -0
  131. package/templates/site-scaffold/lib/.gitkeep +0 -0
  132. package/templates/site-scaffold/next.config.mjs +10 -0
  133. package/templates/site-scaffold/package.json +25 -0
  134. package/templates/site-scaffold/postcss.config.mjs +3 -0
  135. package/templates/site-scaffold/public/llms.txt +9 -0
  136. package/templates/site-scaffold/tsconfig.json +21 -0
  137. package/templates/verification-report.md +1 -1
  138. package/workflows/channel/linkedin-post.md +178 -0
  139. package/workflows/discipline/affiliate-kit.md +65 -6
  140. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  141. package/workflows/discipline/repurpose.md +82 -31
  142. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  143. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  144. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  145. package/workflows/education/ttm-101.md +114 -0
  146. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  147. package/workflows/lifecycle/brief.md +64 -28
  148. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  149. package/workflows/lifecycle/fix.md +72 -37
  150. package/workflows/lifecycle/humanize.md +280 -0
  151. package/workflows/lifecycle/learn.md +72 -35
  152. package/workflows/lifecycle/measure.md +54 -18
  153. package/workflows/lifecycle/produce.md +88 -37
  154. package/workflows/lifecycle/review.md +71 -25
  155. package/workflows/lifecycle/ship.md +62 -18
  156. package/workflows/lifecycle/verify.md +72 -26
  157. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  158. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  159. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  160. package/workflows/reference-mgmt/positioning-check.md +55 -20
  161. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  162. package/workflows/setup/init-brand-colors.md +75 -0
  163. package/workflows/setup/init-logo.md +113 -0
  164. package/workflows/setup/init-product-dna.md +83 -0
  165. package/workflows/setup/init-questions.md +166 -30
  166. package/workflows/setup/init-validation.md +22 -0
  167. package/workflows/setup/init.md +144 -39
  168. package/workflows/setup/new-campaign.md +48 -12
  169. package/workflows/site/deploy.md +98 -0
  170. package/workflows/site/landing.md +156 -0
  171. package/workflows/site/pseo.md +96 -0
  172. package/workflows/site/quality-gates.md +88 -0
  173. package/workflows/utility/archive.md +45 -9
  174. package/workflows/utility/health.md +77 -3
  175. package/workflows/utility/improve-skill.md +233 -0
  176. package/workflows/utility/next.md +38 -2
  177. package/workflows/utility/playwright-setup.md +128 -0
  178. package/workflows/utility/request-skill.md +218 -0
  179. package/workflows/utility/resume.md +40 -3
  180. package/workflows/utility/state.md +42 -7
@@ -0,0 +1,128 @@
1
+ # Playwright Setup Workflow
2
+
3
+ ## Step 0: First-run inline education
4
+
5
+ Read `.taketomarket/CONFIG.md`. Parse `first_run_seen` (object) and `inline_education` (boolean, default true).
6
+
7
+ If `inline_education` is false: skip this step. Else if `first_run_seen.ttm-playwright-setup` is not `true`, print the explainer below verbatim, then mark this skill as seen:
8
+
9
+ ```bash
10
+ node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run mark ttm-playwright-setup
11
+ ```
12
+
13
+ Use this exact check (bash) to decide whether to print: `node "${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs" first-run check ttm-playwright-setup --raw` -- the JSON `seen` field is `true` once the explainer has run before.
14
+
15
+ ### Explainer for `/ttm-playwright-setup`
16
+
17
+ `/ttm-playwright-setup` installs and configures the Playwright MCP
18
+ required for the visual landing-page gate (gate 4) and any future
19
+ browser-based verification. It detects your existing MCP config,
20
+ adds the Playwright entry, and confirms the tool is reachable from
21
+ the runtime.
22
+
23
+ Why it matters: the landing-page gate wall includes a Playwright-driven
24
+ visual check, and without the MCP installed it falls back to a softer
25
+ gate. This skill turns the soft gate into a hard one. Treat it as the
26
+ runtime equivalent of installing a missing test dependency.
27
+
28
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
29
+
30
+ ---
31
+
32
+ **Required reading:** `${CLAUDE_PLUGIN_ROOT}/references/playwright-mcp-setup.md`
33
+
34
+ ## Step 1: Detect current state
35
+
36
+ ```bash
37
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs playwright-check --raw
38
+ ```
39
+
40
+ If `detected = true`: print "Playwright MCP already configured for Claude Code." Then AskUserQuestion (priority: critical):
41
+ - "Run smoke test, install for another runtime (Codex/Cursor), or exit?"
42
+ - options: "Run smoke test" / "Install for another runtime" / "Exit"
43
+
44
+ If "Run smoke test": skip to Step 5. If "Install for another runtime": continue to Step 2 (filter Claude Code out of the candidate list). If "Exit": exit.
45
+
46
+ ## Step 2: Pick target runtime
47
+
48
+ Even if the current session is Claude Code, the user might be installing for Codex or Cursor. Always ask.
49
+
50
+ Suggest candidates by checking which dirs exist:
51
+ - `~/.claude/` → Claude Code
52
+ - `~/.codex/` → Codex
53
+ - `~/.cursor/` → Cursor
54
+
55
+ Then AskUserQuestion (priority: critical):
56
+ - "Which runtime do you want to configure Playwright MCP for?"
57
+ - options: list detected candidates first (marked "(detected)"), then the other runtimes, then "All of them"
58
+ - if user picks "All of them": loop through each in Step 3.
59
+
60
+ ## Step 3: Print install steps for detected runtime
61
+
62
+ Print the relevant sections from `${CLAUDE_PLUGIN_ROOT}/references/playwright-mcp-setup.md`:
63
+
64
+ - Section **"1. Install the MCP server"** — the `npx -y @playwright/mcp@0.0.75 --help` pre-warm command and the `node -v` / `npm view @playwright/mcp version` verification.
65
+ - Section **"2. Install the Chrome extension bridge"** — the Chrome Web Store link for "Playwright Extension" (`mmlmfjhmonkocbjadbfplnigmagldckm`), plus the sideload fallback for corporate machines.
66
+ - Section **"3. Configure runtime MCP settings"** — show only the sub-block matching the detected runtime:
67
+ - **Claude Code:** the `claude mcp add playwright ...` CLI command (preferred) and the equivalent `~/.claude.json` / `~/.claude/settings.json` JSON snippet.
68
+ - **Codex CLI:** the `~/.codex/config.toml` TOML snippet (`[mcp_servers.playwright]`) and the `codex mcp add` CLI equivalent.
69
+ - **Cursor:** the `~/.cursor/mcp.json` (or per-project `.cursor/mcp.json`) JSON snippet.
70
+
71
+ ## Step 4: Pause for user
72
+
73
+ AskUserQuestion (priority: critical):
74
+
75
+ - question: "Have you completed the install steps above?"
76
+ - options:
77
+ - "Yes, ready to test"
78
+ - "I'll do it later"
79
+
80
+ If "I'll do it later": exit with a reminder that `/ttm-playwright-setup` can be re-run anytime to resume.
81
+
82
+ ## Step 5: Smoke test
83
+
84
+ If the user said "Yes, ready to test":
85
+
86
+ - Re-run `node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs playwright-check --raw`.
87
+ - Track retry count across re-checks. Cap at 2 failed re-checks.
88
+ - If still not detected: print "MCP server not detected. Common fixes:" followed by the relevant items from the reference's **Troubleshooting** section (Node version too old, runtime needs a full restart to pick up new MCP entries, absolute path required for `npx` on Cursor macOS). Loop back to Step 4.
89
+ - After the 2nd failed re-check, exit the smoke-test loop with: "Couldn't detect Playwright MCP after 2 attempts. See references/playwright-mcp-setup.md Troubleshooting section, fix the issue, then re-run /ttm-playwright-setup."
90
+ - If detected: try a real Playwright call:
91
+ - Use the MCP `browser_navigate` tool to navigate to `https://example.com` and take a screenshot.
92
+ - On success: print "✓ Playwright MCP working. takeToMarket capabilities now unlocked."
93
+ - On failure: print the error and link to the **Troubleshooting** section of `references/playwright-mcp-setup.md`.
94
+
95
+ ## Step 6: Mark CONFIG.md
96
+
97
+ ```bash
98
+ TS=$(node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs timestamp --raw | tr -d '"')
99
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs config set playwright_mcp_setup_at "$TS"
100
+ ```
101
+
102
+ If the user installed with the Chrome extension bridge (`--extension`), also record that capability so downstream skills can precondition:
103
+
104
+ ```bash
105
+ node ${CLAUDE_PLUGIN_ROOT}/bin/ttm-tools.cjs config set playwright_mcp_extension true
106
+ ```
107
+
108
+ Otherwise set it to `false`.
109
+
110
+ ## Step 7: Print next steps
111
+
112
+ ```
113
+ ✓ Playwright MCP is configured.
114
+
115
+ Capabilities now unlocked:
116
+ - /ttm-competitor-scan can render JS-heavy sites.
117
+ - /ttm-linkedin-post can scrape author profiles (requires a logged-in tab in Chrome).
118
+ - /ttm-landing and /ttm-pseo quality gates can run Lighthouse + visual diff.
119
+
120
+ Run /ttm-next for the recommended next command.
121
+ ```
122
+
123
+ ## What if this doesn't fit?
124
+
125
+ Looks like /ttm-playwright-setup can't do that yet.
126
+
127
+ - Want a new skill? /ttm-request-skill
128
+ - Existing skill needs work? /ttm-improve-skill
@@ -0,0 +1,218 @@
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-request-skill` 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-request-skill
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-request-skill --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-request-skill`
14
+
15
+ `/ttm-request-skill` is the proposal pipeline for new skills. You
16
+ describe a marketing job you keep doing manually, the skill asks
17
+ structured questions (inputs, outputs, gates, frequency), and
18
+ produces either a local SKILL.md draft you can iterate on or a
19
+ formatted feature request against the upstream repo.
20
+
21
+ Why it matters: solopreneurs hit recurring marketing tasks that
22
+ nobody else's playbook covers because nobody else has your product.
23
+ Rather than re-prompting from scratch each time, this skill turns
24
+ your repeated workflow into a versioned, gated skill -- the same
25
+ way you'd extract a utility function after writing the same code
26
+ three times.
27
+
28
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
29
+
30
+ ---
31
+
32
+ <purpose>
33
+ Skill request workflow for /ttm-request-skill. Gathers details about a NEW
34
+ skill the user wants and files a GitHub issue at ranjanrishikesh/taketomarket.
35
+ Prefers the `gh` CLI when installed and authenticated; falls back to opening a
36
+ pre-filled GitHub issue URL in the browser.
37
+ </purpose>
38
+
39
+ <constraints>
40
+ ## Read-Only on the Local Project
41
+
42
+ This workflow does NOT modify any files in the user's project. It only creates
43
+ a remote GitHub issue (via `gh`) or prints a URL for the user to open.
44
+
45
+ ## Repo Identity
46
+
47
+ Always file issues at `ranjanrishikesh/taketomarket` (lowercase). Do not infer
48
+ a different repo from local git remotes — this skill files into the upstream
49
+ takeToMarket project.
50
+
51
+ ## No Secrets in Issue Body
52
+
53
+ Do NOT include API keys, tokens, file paths containing credentials, or any
54
+ content from `.taketomarket/` reference files in the issue body. Only echo the
55
+ user's freeform answers verbatim.
56
+ </constraints>
57
+
58
+ <process>
59
+
60
+ ## Step 1: Gather details
61
+
62
+ ```
63
+ takeToMarket > REQUEST A NEW SKILL
64
+ ```
65
+
66
+ Use `AskUserQuestion` (priority: critical) to collect:
67
+
68
+ 1. **Skill name** — "What's the skill name you want? (e.g., `ttm-twitter-post`)"
69
+ - Freeform single-line answer.
70
+ - If the user omits the `ttm-` prefix, prepend it for them.
71
+ 2. **What it does** — "What does it do?"
72
+ - Freeform, multi-line allowed.
73
+ 3. **Use case** — "What's the use case? When would you run it?"
74
+ - Freeform, multi-line allowed.
75
+ 4. **Similar / extends** — "Any existing skill it's similar to or extends?"
76
+ - Freeform. Optional — accept an empty answer.
77
+
78
+ Store the answers as `SKILL_NAME`, `DESCRIPTION`, `USE_CASE`, `SIMILAR`.
79
+
80
+ ---
81
+
82
+ ## Step 2: Detect gh CLI
83
+
84
+ ```bash
85
+ GH_STATE="no-gh"
86
+ if command -v gh >/dev/null 2>&1; then
87
+ if gh auth status >/dev/null 2>&1; then
88
+ GH_STATE="gh-ready"
89
+ fi
90
+ fi
91
+ echo "$GH_STATE"
92
+ ```
93
+
94
+ If `GH_STATE` is `gh-ready`, proceed to Step 3.
95
+ Otherwise, proceed to Step 4.
96
+
97
+ ---
98
+
99
+ ## Step 3: If gh-ready, file issue via gh CLI
100
+
101
+ Build the issue body from the gathered answers, then run:
102
+
103
+ ```bash
104
+ gh issue create \
105
+ --repo ranjanrishikesh/taketomarket \
106
+ --title "[Skill request] ${SKILL_NAME}" \
107
+ --body "$(cat <<'EOF'
108
+ **Skill name:** ${SKILL_NAME}
109
+ **What it does:** ${DESCRIPTION}
110
+ **Use case:** ${USE_CASE}
111
+ **Similar / extends:** ${SIMILAR}
112
+
113
+ ---
114
+ Filed via /ttm-request-skill
115
+ EOF
116
+ )"
117
+ ```
118
+
119
+ (Substitute the variables before passing to the heredoc — the heredoc above is
120
+ quoted to prevent shell expansion of literal `${...}` placeholders that
121
+ should be filled in by you. Build the body string first and pass the resolved
122
+ text via `--body`.)
123
+
124
+ Capture the resulting issue URL printed by `gh issue create`. Display it to
125
+ the user:
126
+
127
+ ```
128
+ takeToMarket > SKILL REQUEST FILED
129
+
130
+ Issue: <issue-url>
131
+
132
+ Thanks for the request. You can track it at the URL above.
133
+ ```
134
+
135
+ Done — exit successfully.
136
+
137
+ ---
138
+
139
+ ## Step 4: If no-gh, generate pre-filled URL
140
+
141
+ When `gh` is not installed or not authenticated, build a pre-filled GitHub
142
+ issue URL pointing at the `skill-request.yml` template.
143
+
144
+ URL-encode the title and body. The body fields map to template field IDs:
145
+ `skill-name`, `description`, `use-case`, `similar`.
146
+
147
+ Construct (conceptually):
148
+
149
+ ```
150
+ https://github.com/ranjanrishikesh/taketomarket/issues/new
151
+ ?template=skill-request.yml
152
+ &title=<urlencoded "[Skill request] SKILL_NAME">
153
+ &skill-name=<urlencoded SKILL_NAME>
154
+ &description=<urlencoded DESCRIPTION>
155
+ &use-case=<urlencoded USE_CASE>
156
+ &similar=<urlencoded SIMILAR>
157
+ ```
158
+
159
+ You can generate the encoded URL with:
160
+
161
+ ```bash
162
+ python3 - <<'PY'
163
+ import urllib.parse
164
+ import os
165
+ title = f"[Skill request] {os.environ['SKILL_NAME']}"
166
+ params = {
167
+ "template": "skill-request.yml",
168
+ "title": title,
169
+ "skill-name": os.environ["SKILL_NAME"],
170
+ "description": os.environ["DESCRIPTION"],
171
+ "use-case": os.environ["USE_CASE"],
172
+ "similar": os.environ.get("SIMILAR", ""),
173
+ }
174
+ qs = urllib.parse.urlencode(params)
175
+ print(f"https://github.com/ranjanrishikesh/taketomarket/issues/new?{qs}")
176
+ PY
177
+ ```
178
+
179
+ (Export `SKILL_NAME`, `DESCRIPTION`, `USE_CASE`, `SIMILAR` to the environment
180
+ before running the snippet.)
181
+
182
+ Print the URL and instruct the user:
183
+
184
+ ```
185
+ takeToMarket > OPEN IN BROWSER
186
+
187
+ gh CLI not detected (or not authenticated). Open this URL to file the issue:
188
+
189
+ <url>
190
+
191
+ Tip: install `gh` (https://cli.github.com) and run `gh auth login` to file
192
+ issues directly next time.
193
+ ```
194
+
195
+ Done — exit successfully.
196
+
197
+ </process>
198
+
199
+ <success_criteria>
200
+ - [ ] Four questions asked via AskUserQuestion (name, description, use case, similar)
201
+ - [ ] gh CLI detection performed (command + auth status)
202
+ - [ ] If gh ready: issue created at ranjanrishikesh/taketomarket with `[Skill request]` prefix and labels via template not required (gh path bypasses template)
203
+ - [ ] If no gh: pre-filled URL printed with template=skill-request.yml and encoded title/body fields
204
+ - [ ] No local files modified
205
+ </success_criteria>
206
+
207
+ <output>
208
+ No local files modified. Either a GitHub issue is created remotely (gh path)
209
+ or a URL is printed for the user to open (browser path).
210
+ </output>
211
+
212
+ ## What if this doesn't fit?
213
+
214
+ Looks like /ttm-request-skill can't do that yet. Try one of:
215
+
216
+ - Existing skill behaving wrong? /ttm-improve-skill
217
+ - Need an overview of the system first? /ttm-101
218
+ - Otherwise file a free-form issue: https://github.com/ranjanrishikesh/taketomarket/issues/new
@@ -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-resume` 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-resume
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-resume --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-resume`
14
+
15
+ `/ttm-resume` is the session-recovery skill. It loads the active
16
+ campaign's STATE.md, summarizes the last completed phase, lists
17
+ pending work and known blockers, and recommends the exact next
18
+ `/ttm-*` command. It also detects interrupted verify/fix loops so
19
+ you continue from where the loop stopped.
20
+
21
+ Why it matters: marketing campaigns run across many sessions over
22
+ many days, and context loss between sessions is where things get
23
+ silently dropped. Resume is the equivalent of restoring a debugger
24
+ state: you don't have to remember where you were because the state
25
+ files do.
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
  Session recovery workflow for /ttm-resume. Loads campaign state, shows context
3
33
  summary (last completed phase, what was done, pending work, blockers), and suggests
@@ -14,7 +44,7 @@ State is loaded directly from CAMPAIGNS/<slug>/STATE.md (no separate handoff fil
14
44
  <constraints>
15
45
  ## POSITIONING.md is READ-ONLY
16
46
 
17
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
47
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
18
48
 
19
49
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
20
50
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -76,7 +106,7 @@ Parse the full JSON output. Extract:
76
106
 
77
107
  Also read the FULL STATE.md file (not just CLI output) to get body content:
78
108
  ```bash
79
- Read .marketing/CAMPAIGNS/${SLUG}/STATE.md
109
+ Read .taketomarket/CAMPAIGNS/${SLUG}/STATE.md
80
110
  ```
81
111
 
82
112
  The body contains "Phase:" and "Next step:" lines plus any additional notes,
@@ -142,7 +172,7 @@ Use the phase-to-command mapping to suggest the exact next command:
142
172
 
143
173
  | Current Phase | Next Command | Notes |
144
174
  |---------------|-------------|-------|
145
- | `created` | `/ttm-research ${SLUG}` | Campaign exists but no research done |
175
+ | `created` | `/ttm-discover ${SLUG}` | Campaign exists but no research done |
146
176
  | `researched` | `/ttm-brief ${SLUG}` | Research complete, needs brief |
147
177
  | `briefed` | `/ttm-produce ${SLUG}` | Brief ready, needs production |
148
178
  | `produced` | `/ttm-verify ${SLUG}` | Assets produced, needs verification |
@@ -247,3 +277,10 @@ It has been ${days} days since last activity. Consider:
247
277
  No files modified. This is a read-only command that displays recovery context
248
278
  and suggests the next command for the user to run.
249
279
  </output>
280
+
281
+ ## What if this doesn't fit?
282
+
283
+ Looks like /ttm-resume can't do that yet.
284
+
285
+ - Want a new skill? /ttm-request-skill
286
+ - Existing skill needs work? /ttm-improve-skill
@@ -1,3 +1,31 @@
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-state` 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-state
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-state --raw` -- the JSON `seen` field is `true` once the explainer has run before.
12
+
13
+ ### Explainer for `/ttm-state`
14
+
15
+ `/ttm-state` is the read-only dashboard. With no argument it prints
16
+ every campaign (active and archived) with its current phase, blockers,
17
+ shipped-asset count, and last activity timestamp. With a slug, it
18
+ prints the per-campaign detail view from that campaign's STATE.md.
19
+
20
+ Why it matters: state is the truth file in takeToMarket -- not your
21
+ memory, not the conversation history. This skill is how you check
22
+ that truth without mutating it. Use it before running any campaign
23
+ action when you're not sure where you left off.
24
+
25
+ (Canonical source: `references/inline-education-blurbs.md`. Embedded verbatim because workflows do not @-resolve files at runtime.)
26
+
27
+ ---
28
+
1
29
  <purpose>
2
30
  State dashboard workflow for /ttm-state. Displays all campaigns (active and
3
31
  archived) in a summary table. No-argument mode shows the full campaign dashboard;
@@ -12,7 +40,7 @@ and enriches with per-campaign STATE.md data.
12
40
  <constraints>
13
41
  ## POSITIONING.md is READ-ONLY
14
42
 
15
- **Do NOT modify `.marketing/POSITIONING.md` during this workflow.**
43
+ **Do NOT modify `.taketomarket/POSITIONING.md` during this workflow.**
16
44
 
17
45
  POSITIONING.md is an architectural invariant. If you detect positioning drift:
18
46
  - In verify: use the Escalate option to launch /ttm-positioning-shift
@@ -68,14 +96,14 @@ Exit.
68
96
 
69
97
  **Check for archived campaigns:**
70
98
  ```bash
71
- ls .marketing/CAMPAIGNS/ARCHIVE/ 2>/dev/null
99
+ ls .taketomarket/CAMPAIGNS/ARCHIVE/ 2>/dev/null
72
100
  ```
73
101
 
74
102
  For each archived directory found, read its STATE.md frontmatter to get archive date
75
103
  and outcome information.
76
104
 
77
105
  **Read global state for portfolio context:**
78
- Read `.marketing/STATE.md` body content (below frontmatter) for portfolio-level
106
+ Read `.taketomarket/STATE.md` body content (below frontmatter) for portfolio-level
79
107
  decisions, blockers, and experiments.
80
108
 
81
109
  ---
@@ -109,9 +137,9 @@ For each active campaign, also display a detail section:
109
137
  **Created:** <date> | **Last Updated:** <date>
110
138
  **Gate Results:** <summary of pass/fail counts from review.overall_result>
111
139
  **Fix Attempts:** <fix.run_count or 0>
112
- **Decisions in flight:** <from global .marketing/STATE.md body if any>
113
- **Blockers:** <from global .marketing/STATE.md body if any>
114
- **Experiments:** <from global .marketing/STATE.md body if any>
140
+ **Decisions in flight:** <from global .taketomarket/STATE.md body if any>
141
+ **Blockers:** <from global .taketomarket/STATE.md body if any>
142
+ **Experiments:** <from global .taketomarket/STATE.md body if any>
115
143
  ```
116
144
 
117
145
  If no active campaigns exist, display:
@@ -198,10 +226,17 @@ If the campaign has no body content in STATE.md, display:
198
226
  - [ ] Dashboard displays active campaigns with detail sections
199
227
  - [ ] Archived campaigns shown as collapsed rows
200
228
  - [ ] Single campaign mode shows full detail when slug provided
201
- - [ ] Global .marketing/STATE.md body read for portfolio-level context
229
+ - [ ] Global .taketomarket/STATE.md body read for portfolio-level context
202
230
  - [ ] No files modified (read-only command)
203
231
  </success_criteria>
204
232
 
205
233
  <output>
206
234
  No files modified (read-only command).
207
235
  </output>
236
+
237
+ ## What if this doesn't fit?
238
+
239
+ Looks like /ttm-state can't do that yet.
240
+
241
+ - Want a new skill? /ttm-request-skill
242
+ - Existing skill needs work? /ttm-improve-skill