taketomarket 2.1.0 → 2.2.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.
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "taketomarket",
3
+ "displayName": "takeToMarket",
4
+ "description": "Marketing OS for Claude Code and Codex. Spec-driven campaigns with positioning invariants and quality gates.",
5
+ "version": "2.2.0",
6
+ "author": {
7
+ "name": "Rishikesh Ranjan",
8
+ "url": "https://github.com/ranjanrishikesh"
9
+ },
10
+ "homepage": "https://www.npmjs.com/package/taketomarket",
11
+ "repository": "https://github.com/ranjanrishikesh/takeToMarket",
12
+ "license": "MIT",
13
+ "keywords": ["marketing", "campaigns", "positioning", "quality-gates", "agent-skills"],
14
+ "category": "productivity",
15
+ "source": "git",
16
+ "sourceUrl": "https://github.com/ranjanrishikesh/takeToMarket.git",
17
+ "skills": [
18
+ "ttm-init", "ttm-new-campaign", "ttm-brief", "ttm-research",
19
+ "ttm-produce", "ttm-review", "ttm-fix", "ttm-verify", "ttm-ship",
20
+ "ttm-measure", "ttm-learn", "ttm-health", "ttm-state", "ttm-next",
21
+ "ttm-resume", "ttm-archive", "ttm-positioning-check",
22
+ "ttm-positioning-shift", "ttm-brand-refresh", "ttm-icp-refresh",
23
+ "ttm-competitor-scan", "ttm-aeo-check", "ttm-seo-audit",
24
+ "ttm-email-preflight", "ttm-keyword-map", "ttm-affiliate-kit",
25
+ "ttm-repurpose", "ttm-update"
26
+ ]
27
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taketomarket",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Marketing operating system for Claude Code. Spec-driven campaigns with positioning-as-invariant enforcement, quality gate walls, and compound learnings.",
5
5
  "author": {
6
6
  "name": "takeToMarket"
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # takeToMarket
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/taketomarket)](https://www.npmjs.com/package/taketomarket)
4
+
3
5
  A marketing operating system for Claude Code and Codex. Spec-driven campaigns with positioning-as-invariant enforcement, quality gate walls, and compound learnings.
4
6
 
5
7
  **Core invariant:** Every marketing asset ships with a verifiable outcome metric and passes through a positioning-invariant quality gate wall — no asset ships without both, ever.
@@ -39,9 +41,14 @@ Flags:
39
41
 
40
42
  > Status: pending marketplace approval. Check https://github.com/ranjanrishikesh/takeToMarket for current status.
41
43
 
42
- ### Option 3 — Direct from GitHub
44
+ ### Option 3 — Direct from GitHub (Claude Code)
45
+
46
+ ```
47
+ /plugin marketplace add ranjanrishikesh/takeToMarket
48
+ /plugin install taketomarket
49
+ ```
43
50
 
44
- > Status: pending verification. Use Option 1 or Option 4 in the meantime.
51
+ This uses the Claude Code plugin system to install directly from the GitHub repo. Run both commands in Claude Code's chat.
45
52
 
46
53
  ### Option 4 — Manual (advanced)
47
54
 
@@ -54,11 +61,25 @@ node install.js
54
61
  ## Quick Start
55
62
 
56
63
  ```
57
- /taketomarket:ttm-init # set up workspace (one time)
58
- /taketomarket:ttm-new-campaign # create first campaign
59
- /taketomarket:ttm-produce # run production wave
64
+ /ttm-init # set up workspace (one time)
65
+ /ttm-new-campaign # create first campaign
66
+ /ttm-produce # run production wave
60
67
  ```
61
68
 
69
+ ## Runtime Notes
70
+
71
+ Commands vary by tool:
72
+
73
+ | Runtime | Install path | Invocation |
74
+ |---------|-------------|------------|
75
+ | Claude Code | `~/.claude/skills/` | `/ttm-init` |
76
+ | Codex | `~/.codex/skills/` or `~/.agents/skills/` | `$ttm-init` or mention by name |
77
+ | Cursor | `~/.cursor/skills/` | `/ttm-init` |
78
+ | Windsurf | `~/.codeium/windsurf/skills/` | `@ttm-init` |
79
+ | Gemini CLI | `~/.gemini/skills/` | automatic or `/skills enable` |
80
+
81
+ All non-Claude runtimes also support `~/.agents/skills/` as a universal path. Select **option 6** during install to use it.
82
+
62
83
  ## Campaign Lifecycle
63
84
 
64
85
  1. **Init** — set up workspace and reference files
@@ -77,39 +98,39 @@ node install.js
77
98
 
78
99
  | Command | Description |
79
100
  |---------|-------------|
80
- | `/taketomarket:ttm-aeo-check` | Check citation status across AI engines for a query |
81
- | `/taketomarket:ttm-affiliate-kit` | Generate creative kit for affiliate partners |
82
- | `/taketomarket:ttm-archive` | Archive a completed campaign, finalize state, and update LEARNINGS.md |
83
- | `/taketomarket:ttm-brand-refresh` | Update BRAND.md with new proof points and deprecate expired ones |
84
- | `/taketomarket:ttm-brief` | Generate a campaign brief with mandatory outcome metrics, positioning anchor, and channel mix |
85
- | `/taketomarket:ttm-competitor-scan` | On-demand competitor analysis that updates COMPETITORS.md |
86
- | `/taketomarket:ttm-email-preflight` | Deliverability, dark-mode, and spam-trigger scan for email assets |
87
- | `/taketomarket:ttm-fix` | Fix phase: root cause analysis, fix brief, re-produce, re-verify (capped 3×) |
88
- | `/taketomarket:ttm-health` | Validate .marketing/ directory integrity, reference file completeness, and state consistency |
89
- | `/taketomarket:ttm-icp-refresh` | Update ICP.md from new customer data including calls, reviews, and feedback |
90
- | `/taketomarket:ttm-init` | Interview-driven onboarding that generates all .marketing/ reference files |
91
- | `/taketomarket:ttm-keyword-map` | Generate keyword cluster map with intent tags |
92
- | `/taketomarket:ttm-learn` | Extract lessons from campaign data, propose reference file edits, log to LEARNINGS.md |
93
- | `/taketomarket:ttm-measure` | Analyze campaign analytics against outcome metrics using attribution models |
94
- | `/taketomarket:ttm-new-campaign` | Create a new campaign directory with initialized state and reference file links |
95
- | `/taketomarket:ttm-next` | Guide user to the right next command based on current campaign state |
96
- | `/taketomarket:ttm-positioning-check` | Sample recent assets and report positioning drift percentage and analysis |
97
- | `/taketomarket:ttm-positioning-shift` | Controlled positioning change with reasoning, migration plan, and approval gate |
98
- | `/taketomarket:ttm-produce` | Generate content assets in fresh contexts loaded with brief, positioning, brand, ICP, and playbook |
99
- | `/taketomarket:ttm-repurpose` | Fan out a long-form asset into derivatives across channels with full brief-produce-verify per derivative |
100
- | `/taketomarket:ttm-research` | Market and audience research including SERP, competitor content, and narrative mapping |
101
- | `/taketomarket:ttm-resume` | Resume a paused campaign at its last completed phase |
102
- | `/taketomarket:ttm-review` | Present assets with structured review checklist for human evaluation |
103
- | `/taketomarket:ttm-seo-audit` | Technical and content SEO audit of a URL or sitemap |
104
- | `/taketomarket:ttm-ship` | Generate launch checklist confirming tracking, UTMs, funnel testing, and asset finalization |
105
- | `/taketomarket:ttm-state` | Display current campaign states, decisions in flight, blockers, and experiments |
106
- | `/taketomarket:ttm-verify` | Run all applicable quality gates on every asset with pass/fail report and line-level feedback |
101
+ | `/ttm-aeo-check` | Check citation status across AI engines for a query |
102
+ | `/ttm-affiliate-kit` | Generate creative kit for affiliate partners |
103
+ | `/ttm-archive` | Archive a completed campaign, finalize state, and update LEARNINGS.md |
104
+ | `/ttm-brand-refresh` | Update BRAND.md with new proof points and deprecate expired ones |
105
+ | `/ttm-brief` | Generate a campaign brief with mandatory outcome metrics, positioning anchor, and channel mix |
106
+ | `/ttm-competitor-scan` | On-demand competitor analysis that updates COMPETITORS.md |
107
+ | `/ttm-email-preflight` | Deliverability, dark-mode, and spam-trigger scan for email assets |
108
+ | `/ttm-fix` | Fix phase: root cause analysis, fix brief, re-produce, re-verify (capped 3×) |
109
+ | `/ttm-health` | Validate .marketing/ directory integrity, reference file completeness, and state consistency |
110
+ | `/ttm-icp-refresh` | Update ICP.md from new customer data including calls, reviews, and feedback |
111
+ | `/ttm-init` | Interview-driven onboarding that generates all .marketing/ reference files |
112
+ | `/ttm-keyword-map` | Generate keyword cluster map with intent tags |
113
+ | `/ttm-learn` | Extract lessons from campaign data, propose reference file edits, log to LEARNINGS.md |
114
+ | `/ttm-measure` | Analyze campaign analytics against outcome metrics using attribution models |
115
+ | `/ttm-new-campaign` | Create a new campaign directory with initialized state and reference file links |
116
+ | `/ttm-next` | Guide user to the right next command based on current campaign state |
117
+ | `/ttm-positioning-check` | Sample recent assets and report positioning drift percentage and analysis |
118
+ | `/ttm-positioning-shift` | Controlled positioning change with reasoning, migration plan, and approval gate |
119
+ | `/ttm-produce` | Generate content assets in fresh contexts loaded with brief, positioning, brand, ICP, and playbook |
120
+ | `/ttm-repurpose` | Fan out a long-form asset into derivatives across channels with full brief-produce-verify per derivative |
121
+ | `/ttm-research` | Market and audience research including SERP, competitor content, and narrative mapping |
122
+ | `/ttm-resume` | Resume a paused campaign at its last completed phase |
123
+ | `/ttm-review` | Present assets with structured review checklist for human evaluation |
124
+ | `/ttm-seo-audit` | Technical and content SEO audit of a URL or sitemap |
125
+ | `/ttm-ship` | Generate launch checklist confirming tracking, UTMs, funnel testing, and asset finalization |
126
+ | `/ttm-state` | Display current campaign states, decisions in flight, blockers, and experiments |
127
+ | `/ttm-verify` | Run all applicable quality gates on every asset with pass/fail report and line-level feedback |
107
128
 
108
129
  ## Verify Installation
109
130
 
110
131
  Inside Claude Code, run:
111
132
  ```
112
- /taketomarket:ttm-health
133
+ /ttm-health
113
134
  ```
114
135
 
115
136
  This validates directory integrity, reference file presence, and state consistency.
@@ -117,3 +138,11 @@ This validates directory integrity, reference file presence, and state consisten
117
138
  ## License
118
139
 
119
140
  MIT — see [LICENSE](LICENSE).
141
+
142
+ ## Privacy & Security
143
+
144
+ takeToMarket runs entirely on your local filesystem. No data collection, no telemetry, no servers. See [SECURITY.md](SECURITY.md) for the combined privacy and security policy.
145
+
146
+ ## Contributing
147
+
148
+ See [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
package/install.js CHANGED
@@ -29,7 +29,7 @@ const FILES_TO_COPY = [
29
29
 
30
30
  // ── Runtime Selection ─────────────────────────────────────────────────────────
31
31
 
32
- const RUNTIME_MENU = ['claude', 'codex', 'cursor', 'windsurf', 'gemini'];
32
+ const RUNTIME_MENU = ['claude', 'codex', 'cursor', 'windsurf', 'gemini', 'agents'];
33
33
 
34
34
  /**
35
35
  * Parse user input from the runtime selection prompt.
@@ -39,15 +39,16 @@ const RUNTIME_MENU = ['claude', 'codex', 'cursor', 'windsurf', 'gemini'];
39
39
  function parseRuntimeChoices(input) {
40
40
  const trimmed = input.trim();
41
41
  if (!trimmed) return null;
42
- if (trimmed === '6') return [...RUNTIME_MENU];
43
- if (trimmed === '7') return ['custom'];
42
+ if (trimmed === '7') return [...RUNTIME_MENU];
43
+ if (trimmed === '8') return ['custom'];
44
44
 
45
45
  const parts = trimmed.split(',').map(s => s.trim());
46
46
  const names = new Set();
47
47
  for (const part of parts) {
48
48
  const n = parseInt(part, 10);
49
- if (isNaN(n) || n < 1 || n > 7) return null;
50
- if (n === 7) return ['custom'];
49
+ if (isNaN(n) || n < 1 || n > 8) return null;
50
+ if (n === 7) return [...RUNTIME_MENU];
51
+ if (n === 8) return ['custom'];
51
52
  names.add(RUNTIME_MENU[n - 1]);
52
53
  }
53
54
  return [...names];
@@ -85,6 +86,11 @@ function buildRuntimeTargets(homeDir = os.homedir()) {
85
86
  skillsDir: path.join(homeDir, '.gemini', 'skills'),
86
87
  parentDir: path.join(homeDir, '.gemini'),
87
88
  },
89
+ agents: {
90
+ label: 'All runtimes (~/.agents/skills/ — universal)',
91
+ skillsDir: path.join(homeDir, '.agents', 'skills'),
92
+ parentDir: path.join(homeDir, '.agents'),
93
+ },
88
94
  };
89
95
  }
90
96
 
@@ -134,8 +140,9 @@ async function promptRuntimeSelection(args, homeDir = os.homedir()) {
134
140
  console.log(' 3. Cursor');
135
141
  console.log(' 4. Windsurf');
136
142
  console.log(' 5. Gemini CLI');
137
- console.log(' 6. All of the above');
138
- console.log(' 7. Let me type a custom path');
143
+ console.log(' 6. All runtimes via ~/.agents/skills/ (universal — works for Codex, Cursor, Windsurf, Gemini)');
144
+ console.log(' 7. All of the above');
145
+ console.log(' 8. Let me type a custom path');
139
146
  console.log('');
140
147
 
141
148
  let choices = null;
@@ -144,7 +151,7 @@ async function promptRuntimeSelection(args, homeDir = os.homedir()) {
144
151
  const input = await ask('Your choice (comma-separated, e.g. 1,3): ');
145
152
  choices = parseRuntimeChoices(input);
146
153
  if (choices === null) {
147
- console.log('Invalid input. Please enter numbers 1-7 separated by commas.');
154
+ console.log('Invalid input. Please enter numbers 1-8 separated by commas.');
148
155
  attempts++;
149
156
  }
150
157
  }
@@ -429,11 +436,11 @@ function printInstallSummary(packageRoot = PACKAGE_ROOT) {
429
436
  console.log('');
430
437
  console.log('Available commands:');
431
438
  for (const { name, description } of skills) {
432
- const cmd = `/taketomarket:${name}`.padEnd(42);
439
+ const cmd = `/${name}`.padEnd(30);
433
440
  console.log(` ${cmd} ${description}`);
434
441
  }
435
442
  console.log('');
436
- console.log('Quick start: open any project in Claude Code and run /taketomarket:ttm-init');
443
+ console.log('Quick start: open any project in Claude Code and run /ttm-init');
437
444
  }
438
445
 
439
446
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taketomarket",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "Marketing operating system for Claude Code. Spec-driven campaigns with positioning-as-invariant enforcement, quality gate walls, and compound learnings.",
5
5
  "license": "MIT",
6
6
  "repository": {