thumbgate 1.27.20 → 1.28.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.
Files changed (63) hide show
  1. package/.claude-plugin/plugin.json +2 -1
  2. package/.well-known/mcp/server-card.json +1 -1
  3. package/README.md +124 -129
  4. package/adapters/claude/.mcp.json +2 -2
  5. package/adapters/mcp/server-stdio.js +18 -33
  6. package/adapters/opencode/opencode.json +1 -1
  7. package/bin/cli.js +95 -78
  8. package/bin/postinstall.js +1 -1
  9. package/config/entitlement-public-keys.json +6 -0
  10. package/config/gates/default.json +3 -3
  11. package/config/github-about.json +2 -5
  12. package/config/merge-quality-checks.json +3 -0
  13. package/config/post-deploy-marketing-pages.json +1 -1
  14. package/hooks/hooks.json +38 -0
  15. package/package.json +28 -10
  16. package/public/about.html +1 -4
  17. package/public/agent-manager.html +6 -6
  18. package/public/agents-cost-savings.html +3 -3
  19. package/public/ai-malpractice-prevention.html +1 -1
  20. package/public/blog.html +12 -9
  21. package/public/chatgpt-app.html +3 -3
  22. package/public/codex-enterprise.html +3 -3
  23. package/public/codex-plugin.html +5 -5
  24. package/public/compare.html +10 -10
  25. package/public/dashboard.html +1 -1
  26. package/public/diagnostic.html +23 -1
  27. package/public/federal.html +2 -2
  28. package/public/guide.html +14 -14
  29. package/public/index.html +202 -220
  30. package/public/install.html +14 -14
  31. package/public/learn.html +4 -17
  32. package/public/numbers.html +2 -2
  33. package/public/partner-intake.html +198 -0
  34. package/public/pricing.html +61 -31
  35. package/public/pro.html +2 -2
  36. package/scripts/agent-reward-model.js +13 -0
  37. package/scripts/bayes-optimal-gate.js +6 -1
  38. package/scripts/billing.js +815 -137
  39. package/scripts/checkout-attribution-reference.js +85 -0
  40. package/scripts/claude-feedback-sync.js +23 -6
  41. package/scripts/cli-feedback.js +33 -8
  42. package/scripts/commercial-offer.js +3 -3
  43. package/scripts/entitlement.js +250 -0
  44. package/scripts/export-databricks-bundle.js +5 -0
  45. package/scripts/export-dpo-pairs.js +6 -0
  46. package/scripts/export-hf-dataset.js +5 -0
  47. package/scripts/feedback-loop.js +290 -1
  48. package/scripts/feedback-quality.js +25 -26
  49. package/scripts/feedback-sanitizer.js +151 -3
  50. package/scripts/gates-engine.js +134 -43
  51. package/scripts/hosted-config.js +9 -2
  52. package/scripts/imperative-detector.js +85 -0
  53. package/scripts/intervention-policy.js +13 -0
  54. package/scripts/mailer/resend-mailer.js +11 -5
  55. package/scripts/pr-manager.js +9 -22
  56. package/scripts/pro-local-dashboard.js +198 -0
  57. package/scripts/risk-scorer.js +6 -0
  58. package/scripts/secret-scanner.js +363 -68
  59. package/scripts/self-protection.js +21 -36
  60. package/scripts/seo-gsd.js +2 -2
  61. package/scripts/thompson-sampling.js +11 -2
  62. package/src/api/server.js +202 -22
  63. package/public/assets/brand/github-social-preview.png +0 -0
@@ -24,7 +24,7 @@ __GA_BOOTSTRAP__
24
24
  "name": "ThumbGate",
25
25
  "applicationCategory": "DeveloperApplication",
26
26
  "operatingSystem": "macOS, Windows, Linux",
27
- "softwareVersion": "1.27.17",
27
+ "softwareVersion": "1.27.20",
28
28
  "description": "Local-first pre-action gates and feedback capture for AI coding agents.",
29
29
  "url": "__APP_ORIGIN__/install",
30
30
  "downloadUrl": "https://www.npmjs.com/package/thumbgate",
@@ -38,7 +38,7 @@ __GA_BOOTSTRAP__
38
38
  "https://www.npmjs.com/package/thumbgate",
39
39
  "https://open-vsx.org/extension/igorganapolsky/thumbgate",
40
40
  "https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate",
41
- "https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.17"
41
+ "https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20"
42
42
  ]
43
43
  }
44
44
  </script>
@@ -131,7 +131,7 @@ __GA_BOOTSTRAP__
131
131
  </nav>
132
132
  <header>
133
133
  <div class="container">
134
- <span class="eyebrow">Install paths verified for v1.27.17</span>
134
+ <span class="eyebrow">Install paths verified for v1.27.20</span>
135
135
  <h1>Install the agent guardrail before the next repeated mistake costs real money.</h1>
136
136
  <p class="lede">ThumbGate is live on the surfaces developers already use: npm, VS Code Marketplace, Open VSX, GitHub Release assets, and MCP Registry. If the risky workflow is already customer-visible, start with the Workflow Hardening Diagnostic instead of another generic install.</p>
137
137
  <div class="actions">
@@ -139,10 +139,10 @@ __GA_BOOTSTRAP__
139
139
  <a class="btn-secondary" href="/diagnostic?utm_source=install_page&utm_medium=owned_page&utm_campaign=marketplace_distribution">Harden one workflow</a>
140
140
  </div>
141
141
  <div class="proof-strip" aria-label="Verified live distribution surfaces">
142
- <div class="proof"><strong>npm</strong><span>thumbgate@1.27.17</span></div>
142
+ <div class="proof"><strong>npm</strong><span>thumbgate@1.27.20</span></div>
143
143
  <div class="proof"><strong>VS Code</strong><span>Marketplace version live</span></div>
144
144
  <div class="proof"><strong>Open VSX</strong><span>Antigravity-compatible path</span></div>
145
- <div class="proof"><strong>MCP Registry</strong><span>1.27.17 is latest</span></div>
145
+ <div class="proof"><strong>MCP Registry</strong><span>1.27.20 is latest</span></div>
146
146
  <div class="proof"><strong>GitHub Release</strong><span>VSIX, MCPB, Codex zip</span></div>
147
147
  </div>
148
148
  </div>
@@ -152,11 +152,11 @@ __GA_BOOTSTRAP__
152
152
  <h2>Choose the install path that matches your agent.</h2>
153
153
  <p class="section-lede">Use the local CLI path for immediate enforcement. Use marketplace installs where your editor supports them. Use the diagnostic path when you need a human-reviewed gate map for one risky workflow.</p>
154
154
  <div class="grid">
155
- <article class="card"><h3>CLI and MCP-compatible agents</h3><p>Fastest path for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and local MCP-compatible agents.</p><pre><code>npx -y thumbgate@1.27.17 doctor
156
- npx -y thumbgate@1.27.17 doctor --fix</code></pre></article>
155
+ <article class="card"><h3>CLI and MCP-compatible agents</h3><p>Fastest path for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and local MCP-compatible agents.</p><pre><code>npx -y thumbgate@1.27.20 doctor
156
+ npx -y thumbgate@1.27.20 doctor --fix</code></pre></article>
157
157
  <article class="card"><h3>Claude Desktop</h3><p>Use the npm-backed MCP server today. The Claude Desktop `.mcpb` directory submission packet is prepared separately.</p><pre><code>claude mcp add thumbgate -- npx --yes --package thumbgate thumbgate serve</code></pre></article>
158
- <article class="card"><h3>Cursor</h3><p>The public Cursor Marketplace listing is not live yet. Use the CLI wiring while the dashboard submission is resolved.</p><pre><code>npx -y thumbgate@1.27.17 init --agent cursor</code></pre></article>
159
- <article class="card"><h3>Codex</h3><p>Use the local adapter now. Public Codex self-serve plugin publishing is not open yet, so the GitHub Release asset is the distribution proof.</p><pre><code>npx -y thumbgate@1.27.17 init --agent codex</code></pre></article>
158
+ <article class="card"><h3>Cursor</h3><p>The public Cursor Marketplace listing is not live yet. Use the CLI wiring while the dashboard submission is resolved.</p><pre><code>npx -y thumbgate@1.27.20 init --agent cursor</code></pre></article>
159
+ <article class="card"><h3>Codex</h3><p>Use the local adapter now. Public Codex self-serve plugin publishing is not open yet, so the GitHub Release asset is the distribution proof.</p><pre><code>npx -y thumbgate@1.27.20 init --agent codex</code></pre></article>
160
160
  </div>
161
161
  </div>
162
162
  </section>
@@ -165,11 +165,11 @@ npx -y thumbgate@1.27.17 doctor --fix</code></pre></article>
165
165
  <h2>Verified public surfaces.</h2>
166
166
  <p class="section-lede">These are the surfaces safe to claim in public copy right now. Pending surfaces are listed so buyers do not get sent to dead marketplace pages.</p>
167
167
  <div class="status-list">
168
- <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://www.npmjs.com/package/thumbgate">npm package</a></strong><span>`thumbgate@1.27.17` is the canonical runtime install.</span></div></div>
169
- <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate">VS Code Marketplace</a></strong><span>Marketplace version-list API includes `1.27.17`.</span></div></div>
170
- <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://open-vsx.org/extension/igorganapolsky/thumbgate">Open VSX</a></strong><span>Public registry latest version is `1.27.17`; use this path for VS Code-compatible IDEs that consume Open VSX.</span></div></div>
171
- <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://registry.modelcontextprotocol.io/v0/servers?search=thumbgate">MCP Registry</a></strong><span>Public search returns `io.github.IgorGanapolsky/thumbgate` version `1.27.17` as latest.</span></div></div>
172
- <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.17">GitHub Release</a></strong><span>Includes VSIX, Claude Desktop `.mcpb`, Claude review zip, and Codex plugin zip assets.</span></div></div>
168
+ <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://www.npmjs.com/package/thumbgate">npm package</a></strong><span>`thumbgate@1.27.20` is the canonical runtime install.</span></div></div>
169
+ <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://marketplace.visualstudio.com/items?itemName=igorganapolsky.thumbgate">VS Code Marketplace</a></strong><span>Marketplace version-list API includes `1.27.20`.</span></div></div>
170
+ <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://open-vsx.org/extension/igorganapolsky/thumbgate">Open VSX</a></strong><span>Public registry latest version is `1.27.20`; use this path for VS Code-compatible IDEs that consume Open VSX.</span></div></div>
171
+ <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://registry.modelcontextprotocol.io/v0/servers?search=thumbgate">MCP Registry</a></strong><span>Public search returns `io.github.IgorGanapolsky/thumbgate` version `1.27.20` as latest.</span></div></div>
172
+ <div class="status"><span class="badge live">LIVE</span><div><strong><a href="https://github.com/IgorGanapolsky/ThumbGate/releases/tag/v1.27.20">GitHub Release</a></strong><span>Includes VSIX, Claude Desktop `.mcpb`, Claude review zip, and Codex plugin zip assets.</span></div></div>
173
173
  <div class="status"><span class="badge pending">PENDING</span><div><strong>Claude Desktop directory</strong><span>Official MCPB form is reachable; submission needs account/email/file-upload approval.</span></div></div>
174
174
  <div class="status"><span class="badge blocked">BLOCKED</span><div><strong>Cursor public Marketplace</strong><span>Public listing returns "Marketplace Plugin Not Found"; dashboard requires sign-in to inspect or resubmit.</span></div></div>
175
175
  <div class="status"><span class="badge pending">PENDING</span><div><strong>Codex public directory</strong><span>OpenAI docs say public plugin publishing and self-serve management are coming soon.</span></div></div>
package/public/learn.html CHANGED
@@ -112,12 +112,6 @@
112
112
  "url": "https://thumbgate.ai/learn/from-prototype-to-production",
113
113
  "name": "From git init to v1.17.0 in 70 days: an honest ThumbGate build log"
114
114
  },
115
- {
116
- "@type": "ListItem",
117
- "position": 13,
118
- "url": "https://thumbgate.ai/learn/pretix-stripe-connect-marketplaces",
119
- "name": "Building a Pretix + Stripe Connect Plugin for Live-Music Venues"
120
- },
121
115
  {
122
116
  "@type": "ListItem",
123
117
  "position": 7,
@@ -128,7 +122,7 @@
128
122
  "@type": "ListItem",
129
123
  "position": 7,
130
124
  "url": "https://thumbgate.ai/guides/cursor-agent-guardrails",
131
- "name": "Cursor Guardrails That Block Repeated Mistakes"
125
+ "name": "Cursor Guardrails That Catch Repeated Mistakes"
132
126
  },
133
127
  {
134
128
  "@type": "ListItem",
@@ -299,7 +293,7 @@
299
293
 
300
294
  <div class="container">
301
295
  <h1>Learn: AI Agent Safety</h1>
302
- <p class="hero-sub">Practical guides for developers who use AI coding agents and want them to stop repeating the same mistakes. Every article ends with something you can ship today.</p>
296
+ <p class="hero-sub">Practical guides for developers who use AI coding agents and want them to catch repeating the same mistakes. Every article ends with something you can ship today.</p>
303
297
  <p class="hero-sub" style="font-size:0.85rem;margin-top:-1rem;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
304
298
 
305
299
  <div class="article-grid">
@@ -313,7 +307,7 @@
313
307
 
314
308
  <a href="/learn/stop-ai-agent-force-push" class="article-card">
315
309
  <h3>How to Stop AI Agents From Force-Pushing to Main</h3>
316
- <p>Your agent just ran git push --force on main. Again. Here is how to make that physically impossible with a pre-action check that takes two minutes to set up.</p>
310
+ <p>Your agent just ran git push --force on main. Again. Here is how to flag and log it by default — and hard-block it under strict enforcement mode — with a pre-action check that takes two minutes to set up.</p>
317
311
  <span class="article-tag">Claude Code</span>
318
312
  <span class="article-tag">Git Safety</span>
319
313
  <span class="article-tag">Pre-Action Checks</span>
@@ -429,13 +423,6 @@
429
423
  <span class="article-tag">Shipping in Public</span>
430
424
  </a>
431
425
 
432
- <a href="/learn/pretix-stripe-connect-marketplaces" class="article-card">
433
- <h3>Building a Pretix + Stripe Connect Plugin for Live-Music Venues</h3>
434
- <p>How to design a multi-venue Stripe Connect ticketing plugin on Pretix, keeping venues as Merchant of Record without messy platform-fee tax reporting.</p>
435
- <span class="article-tag">Stripe Connect</span>
436
- <span class="article-tag">Pretix</span>
437
- <span class="article-tag">Case Study</span>
438
- </a>
439
426
  </div>
440
427
 
441
428
  <h2>Popular buyer questions</h2>
@@ -498,7 +485,7 @@
498
485
  </a>
499
486
 
500
487
  <a href="/guides/cursor-agent-guardrails" class="article-card">
501
- <h3>Cursor Guardrails That Block Repeated Mistakes</h3>
488
+ <h3>Cursor Guardrails That Catch Repeated Mistakes</h3>
502
489
  <p>For Cursor users who need to keep speed while adding a runtime enforcement layer that does more than prompt politely.</p>
503
490
  <span class="article-tag">Cursor</span>
504
491
  <span class="article-tag">Guardrails</span>
@@ -25,7 +25,7 @@
25
25
  "alternateName": "thumbgate",
26
26
  "applicationCategory": "DeveloperApplication",
27
27
  "operatingSystem": "Cross-platform, Node.js >=18.18.0",
28
- "softwareVersion": "1.27.20",
28
+ "softwareVersion": "1.28.1",
29
29
  "url": "https://thumbgate.ai/numbers",
30
30
  "dateModified": "2026-05-07",
31
31
  "creator": {
@@ -202,7 +202,7 @@
202
202
  <main class="container">
203
203
  <h1>The Numbers</h1>
204
204
  <p class="subtitle">Generated first-party operational snapshot from the ThumbGate runtime. This is not customer traction, install volume, revenue, or proof that a configured gate has fired.</p>
205
- <div class="freshness">Updated: 2026-05-07 · Version 1.27.20</div>
205
+ <div class="freshness">Updated: 2026-05-07 · Version 1.28.1</div>
206
206
  <div class="truth-note"><strong>Read this first:</strong> configured checks are inventory. Recorded blocks and warnings are usage evidence. This snapshot currently reports 0 recorded hard-block event(s) and 0 recorded warning event(s).</div>
207
207
 
208
208
  <h2>Gate enforcement</h2>
@@ -0,0 +1,198 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>ThumbGate Partner Workflow Intake</title>
7
+ <meta name="description" content="Submit one failing AI-agent workflow for fit review before implementation.">
8
+ <meta name="robots" content="noindex,nofollow">
9
+ <link rel="canonical" href="__APP_ORIGIN__/partner-intake">
10
+ <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
11
+ <meta property="og:title" content="ThumbGate Partner Workflow Intake">
12
+ <meta property="og:description" content="Describe one repeated AI-agent workflow failure and the proof gap around it.">
13
+ <meta property="og:url" content="__APP_ORIGIN__/partner-intake">
14
+ <meta property="og:type" content="website">
15
+ __GOOGLE_SITE_VERIFICATION_META__
16
+ __GA_BOOTSTRAP__
17
+ <style>
18
+ :root {
19
+ color-scheme: dark;
20
+ --bg: #070a0c;
21
+ --panel: #10161a;
22
+ --line: #2a3941;
23
+ --text: #edf7f8;
24
+ --muted: #a7b5ba;
25
+ --cyan: #2fd2e6;
26
+ }
27
+ * { box-sizing: border-box; }
28
+ body {
29
+ margin: 0;
30
+ min-height: 100vh;
31
+ background: var(--bg);
32
+ color: var(--text);
33
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
34
+ line-height: 1.5;
35
+ }
36
+ header, main, footer { width: min(1040px, calc(100% - 32px)); margin: 0 auto; }
37
+ header {
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: space-between;
41
+ gap: 20px;
42
+ padding: 24px 0;
43
+ }
44
+ .brand {
45
+ display: flex;
46
+ align-items: center;
47
+ gap: 10px;
48
+ color: var(--text);
49
+ font-weight: 800;
50
+ text-decoration: none;
51
+ }
52
+ .brand img { display: block; width: 28px; height: 28px; }
53
+ .partner-label { color: var(--muted); font-size: 14px; }
54
+ .layout {
55
+ display: grid;
56
+ grid-template-columns: minmax(0, 0.9fr) minmax(360px, 1.1fr);
57
+ gap: 48px;
58
+ align-items: start;
59
+ padding: 56px 0 64px;
60
+ }
61
+ .eyebrow {
62
+ color: var(--cyan);
63
+ font-size: 13px;
64
+ font-weight: 800;
65
+ text-transform: uppercase;
66
+ letter-spacing: .08em;
67
+ }
68
+ h1 {
69
+ margin: 14px 0 18px;
70
+ max-width: 620px;
71
+ font-size: 52px;
72
+ line-height: 1;
73
+ letter-spacing: 0;
74
+ }
75
+ .lede { max-width: 600px; color: var(--muted); font-size: 19px; }
76
+ .signals {
77
+ display: grid;
78
+ gap: 12px;
79
+ margin-top: 30px;
80
+ padding: 0;
81
+ list-style: none;
82
+ }
83
+ .signals li { padding-left: 18px; border-left: 3px solid var(--cyan); color: var(--muted); }
84
+ .signals strong { color: var(--text); }
85
+ .intake-card {
86
+ border: 1px solid var(--line);
87
+ border-radius: 8px;
88
+ background: var(--panel);
89
+ padding: 24px;
90
+ }
91
+ .intake-card h2 { margin: 0 0 8px; font-size: 24px; }
92
+ .intake-card > p { margin: 0 0 18px; color: var(--muted); }
93
+ label { display: block; margin: 14px 0 7px; font-size: 14px; font-weight: 750; }
94
+ input, textarea, select {
95
+ width: 100%;
96
+ border: 1px solid #35464e;
97
+ border-radius: 7px;
98
+ background: #080c0f;
99
+ color: var(--text);
100
+ padding: 12px;
101
+ font: inherit;
102
+ }
103
+ textarea { min-height: 124px; resize: vertical; }
104
+ button {
105
+ width: 100%;
106
+ min-height: 50px;
107
+ margin-top: 18px;
108
+ border: 0;
109
+ border-radius: 7px;
110
+ background: var(--cyan);
111
+ color: #041014;
112
+ font: inherit;
113
+ font-weight: 900;
114
+ cursor: pointer;
115
+ }
116
+ .hint { margin: 12px 0 0; color: var(--muted); font-size: 13px; }
117
+ footer { padding: 28px 0 40px; border-top: 1px solid var(--line); color: var(--muted); }
118
+ @media (max-width: 800px) {
119
+ header { align-items: flex-start; flex-direction: column; }
120
+ .layout { grid-template-columns: 1fr; padding-top: 36px; }
121
+ h1 { font-size: 40px; }
122
+ }
123
+ </style>
124
+ </head>
125
+ <body>
126
+ <header>
127
+ <a class="brand" href="/">
128
+ <img src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="ThumbGate" width="28" height="28">
129
+ <span>ThumbGate</span>
130
+ </a>
131
+ <span class="partner-label">Partner workflow intake</span>
132
+ </header>
133
+ <main>
134
+ <div class="layout">
135
+ <section aria-labelledby="partner-intake-title">
136
+ <div class="eyebrow">Workflow fit review</div>
137
+ <h1 id="partner-intake-title">Send one failing AI-agent workflow.</h1>
138
+ <p class="lede">Describe the repeated action, the agent involved, and the proof gap. We will review whether the workflow is a fit and return the next concrete step through the referring partner.</p>
139
+ <ul class="signals">
140
+ <li><strong>One workflow:</strong> keep the review narrow enough to verify.</li>
141
+ <li><strong>One owner:</strong> identify who can approve the resulting boundary.</li>
142
+ <li><strong>One proof target:</strong> state what must be true before the action runs again.</li>
143
+ </ul>
144
+ </section>
145
+ <form class="intake-card" action="/v1/intake/workflow-sprint" method="POST" data-partner-intake-form>
146
+ <h2>Submit workflow</h2>
147
+ <p>Use a work email so we can return the fit review to the right owner.</p>
148
+ <input type="hidden" name="ctaId" value="partner_intake_submit">
149
+ <input type="hidden" name="ctaPlacement" value="partner_intake">
150
+ <input type="hidden" name="planId" value="diagnostic">
151
+ <input type="hidden" name="page" value="/partner-intake">
152
+ <input type="hidden" name="source" value="__SERVER_ATTRIBUTION_SOURCE__">
153
+ <input type="hidden" name="utmSource" value="__SERVER_UTM_SOURCE__">
154
+ <input type="hidden" name="utmMedium" value="__SERVER_UTM_MEDIUM__">
155
+ <input type="hidden" name="utmCampaign" value="__SERVER_UTM_CAMPAIGN__">
156
+ <input type="hidden" name="utmContent" value="__SERVER_UTM_CONTENT__">
157
+ <label for="partner-name">Name</label>
158
+ <input id="partner-name" name="name" autocomplete="name" required>
159
+ <label for="partner-email">Work email</label>
160
+ <input id="partner-email" name="email" type="email" autocomplete="email" required>
161
+ <label for="partner-company">Company or project</label>
162
+ <input id="partner-company" name="company" autocomplete="organization">
163
+ <label for="partner-workflow">What workflow keeps failing?</label>
164
+ <textarea id="partner-workflow" name="workflow" required placeholder="Example: the agent sends a customer update before the evidence and approver are confirmed."></textarea>
165
+ <label for="partner-urgency">Urgency</label>
166
+ <select id="partner-urgency" name="urgency">
167
+ <option>Repeated failure already cost us time</option>
168
+ <option>We are about to roll this workflow out</option>
169
+ <option>We need an independent proof checklist first</option>
170
+ </select>
171
+ <button type="submit">Send workflow for review</button>
172
+ <p class="hint">The next page confirms receipt and provides the review references.</p>
173
+ </form>
174
+ </div>
175
+ </main>
176
+ <footer>ThumbGate reviews one concrete agent workflow at a time so the resulting boundary can be tested.</footer>
177
+ <script>
178
+ (function () {
179
+ const form = document.querySelector('[data-partner-intake-form]');
180
+ if (!form) return;
181
+
182
+ const search = new URLSearchParams(window.location.search);
183
+ const fields = {
184
+ source: search.get('utm_source') || search.get('source') || 'partner',
185
+ utmSource: search.get('utm_source') || search.get('source') || 'partner',
186
+ utmMedium: search.get('utm_medium') || 'partner',
187
+ utmCampaign: search.get('utm_campaign') || 'hosted_listing',
188
+ utmContent: search.get('utm_content') || 'partner_intake'
189
+ };
190
+
191
+ for (const [name, value] of Object.entries(fields)) {
192
+ const input = form.querySelector(`input[name="${name}"]`);
193
+ if (input && value.trim()) input.value = value.trim();
194
+ }
195
+ }());
196
+ </script>
197
+ </body>
198
+ </html>
@@ -5,9 +5,9 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  __GOOGLE_SITE_VERIFICATION_META__
7
7
  <title>Pricing — ThumbGate</title>
8
- <meta name="description" content="ThumbGate pricing: free CLI forever, $19/mo Pro dashboard, and custom Enterprise enforcement scoped after intake. One clear subscription path.">
8
+ <meta name="description" content="ThumbGate pricing: free CLI, $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic, $__WORKFLOW_SPRINT_PRICE_DOLLARS__ workflow sprint, $19/mo Pro, and Enterprise after scope. Paid services first.">
9
9
  <meta property="og:title" content="Pricing — ThumbGate">
10
- <meta property="og:description" content="Free CLI, Pro self-serve, and Enterprise after workflow scope. No mixed consulting checkout maze.">
10
+ <meta property="og:description" content="Buy a $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic or $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint today. Free CLI forever. Pro $19/mo for solo operators.">
11
11
  <meta property="og:type" content="website">
12
12
  <meta property="og:url" content="__APP_ORIGIN__/pricing">
13
13
  <meta property="og:image" content="/og.png">
@@ -89,6 +89,8 @@ __GA_BOOTSTRAP__
89
89
  "url": "__APP_ORIGIN__/pricing",
90
90
  "offers": [
91
91
  { "@type": "Offer", "name": "ThumbGate CLI (Free)", "price": "0", "priceCurrency": "USD" },
92
+ { "@type": "Offer", "name": "Workflow Hardening Diagnostic", "price": "__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__", "priceCurrency": "USD", "url": "__APP_ORIGIN__/go/diagnostic" },
93
+ { "@type": "Offer", "name": "Workflow Hardening Sprint", "price": "__WORKFLOW_SPRINT_PRICE_DOLLARS__", "priceCurrency": "USD", "url": "__APP_ORIGIN__/go/sprint" },
92
94
  { "@type": "Offer", "name": "ThumbGate Pro Monthly", "price": "__PRO_PRICE_DOLLARS__", "priceCurrency": "USD", "url": "__APP_ORIGIN__/checkout/pro?confirm=1&plan_id=pro&billing_cycle=monthly&landing_path=%2Fpricing" },
93
95
  { "@type": "Offer", "name": "ThumbGate Pro Annual", "price": "149", "priceCurrency": "USD", "url": "__APP_ORIGIN__/checkout/pro?confirm=1&plan_id=pro&billing_cycle=annual&landing_path=%2Fpricing" },
94
96
  { "@type": "Offer", "name": "ThumbGate Enterprise", "priceCurrency": "USD", "url": "__APP_ORIGIN__/#workflow-sprint-intake" }
@@ -101,8 +103,8 @@ __GA_BOOTSTRAP__
101
103
  "@context": "https://schema.org",
102
104
  "@type": "FAQPage",
103
105
  "mainEntity": [
104
- { "@type": "Question", "name": "What does Pro add over the free CLI?", "acceptedAnswer": { "@type": "Answer", "text": "Free gives you 2 captures/day and 3 active rules, running entirely on your machine. Pro is the hosted layer: unlimited captures, unlimited rules, lesson sync across machines, a dashboard without self-hosting, managed adapter updates, and DPO export. You're paying for infrastructure we run, not features we hide." } },
105
- { "@type": "Question", "name": "Does ThumbGate send my code to the cloud?", "acceptedAnswer": { "@type": "Answer", "text": "No. The CLI is local-first — no data leaves your machine. Pro and Enterprise add hosted sync for dashboards and shared lessons, but your source code stays local." } },
106
+ { "@type": "Question", "name": "What does Pro add over the free CLI?", "acceptedAnswer": { "@type": "Answer", "text": "Free gives you 2 captures/day and 3 active rules, running on your machine. Pro removes solo caps and adds personal recall, dashboard proof, managed adapters, and DPO export. Enterprise adds shared hosted lessons and org visibility." } },
107
+ { "@type": "Question", "name": "Does ThumbGate send my code to the cloud?", "acceptedAnswer": { "@type": "Answer", "text": "No. The CLI is local-first — no source code leaves your machine. Pro adds personal proof and exports; Enterprise adds shared hosted lessons and org dashboards." } },
106
108
  { "@type": "Question", "name": "When should I pick Enterprise over Pro?", "acceptedAnswer": { "@type": "Answer", "text": "When one engineer's correction should protect the whole team. Enterprise shares the lesson database across the org so a fix in one repo prevents the same mistake in every repo." } },
107
109
  { "@type": "Question", "name": "Can I cancel anytime?", "acceptedAnswer": { "@type": "Answer", "text": "Yes. Pro and Enterprise are month-to-month with a 7-day refund window on the first charge. Cancel from the billing portal and your subscription ends at the period close." } }
108
110
  ]
@@ -165,8 +167,14 @@ __GA_BOOTSTRAP__
165
167
  .pricing-hero .lede { color: var(--text-muted); font-size: 17px; max-width: 560px; margin: 0 auto; }
166
168
 
167
169
  /* GRID */
168
- .pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 40px 0 32px; }
170
+ .pricing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; margin: 40px 0 32px; }
169
171
  @media (max-width: 768px) { .pricing-grid { grid-template-columns: 1fr; } }
172
+ .price-card.money { border-color: rgba(74,222,128,0.45); box-shadow: 0 0 0 1px rgba(74,222,128,0.15); }
173
+ .price-card.money .tier { color: var(--green, #4ade80); }
174
+ .btn-money {
175
+ display: block; width: 100%; text-align: center; padding: 12px 16px; border-radius: 8px;
176
+ background: var(--green, #4ade80); color: #06120a; font-weight: 800; text-decoration: none;
177
+ }
170
178
 
171
179
  /* CARDS */
172
180
  .price-card {
@@ -178,13 +186,6 @@ __GA_BOOTSTRAP__
178
186
  box-shadow: 0 0 40px var(--cyan-dim), inset 0 1px 0 rgba(34, 211, 238, 0.15);
179
187
  position: relative;
180
188
  }
181
- .price-card.highlight::before {
182
- content: "Most popular";
183
- position: absolute; top: -10px; left: 50%; transform: translateX(-50%);
184
- background: var(--cyan); color: var(--bg);
185
- padding: 3px 12px; border-radius: 6px;
186
- font-size: 11px; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase;
187
- }
188
189
 
189
190
  .tier { font-size: 13px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); font-weight: 600; margin-bottom: 8px; }
190
191
  .price-card.highlight .tier { color: var(--cyan); }
@@ -266,7 +267,7 @@ __GA_BOOTSTRAP__
266
267
  <a href="/pricing" style="color:var(--text);">Pricing</a>
267
268
  <a href="/guide">Guide</a>
268
269
  <a href="/dashboard">Dashboard</a>
269
- <a class="nav-cta" href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=nav&utm_campaign=pricing_page&cta_id=pricing_nav_start_pro&cta_placement=nav&plan_id=pro&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_nav_start_pro" data-cta-placement="nav" data-tier="pro" data-plan-id="pro" data-billing-cycle="monthly" data-price="19">Start Pro</a>
270
+ <a class="nav-cta" href="/go/diagnostic?utm_source=pricing&utm_medium=nav&utm_campaign=money_today&cta_id=pricing_nav_diagnostic&cta_placement=nav&plan_id=sprint_diagnostic" data-pricing-cta data-cta-id="pricing_nav_diagnostic" data-cta-placement="nav" data-tier="service" data-plan-id="sprint_diagnostic" data-price="__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</a>
270
271
  </div>
271
272
  </div>
272
273
  </nav>
@@ -274,37 +275,65 @@ __GA_BOOTSTRAP__
274
275
  <section class="pricing-hero">
275
276
  <div class="container">
276
277
  <h1>Stop paying for the same AI mistake twice.</h1>
277
- <p class="lede">One self-serve paid path for solo operators. Teams start with workflow scope so shared enforcement is mapped before checkout.</p>
278
+ <p class="lede">Paid services first: harden one AI-agent workflow with a <strong>$__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</strong> or <strong>$__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint</strong>. Free CLI forever. Pro is the solo self-serve lane. Enterprise is intake after proof.</p>
278
279
  </div>
279
280
  </section>
280
281
 
281
282
  <section class="container">
282
283
  <div class="pricing-grid">
283
284
 
285
+ <div class="price-card money highlight" id="diagnostic">
286
+ <div class="tier">Diagnostic</div>
287
+ <div class="price">$__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__</div>
288
+ <div class="price-sub"><strong>Fastest path to cash + proof.</strong> Map one repeated agent failure: block / warn / human-review split and a shippable proof checklist. Credited toward the sprint when you continue.</div>
289
+ <ul>
290
+ <li>One workflow, one owner, one failure pattern</li>
291
+ <li>Gate split + proof checklist deliverable</li>
292
+ <li>Stripe checkout — pay today</li>
293
+ <li>Credit toward $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint when implementation follows</li>
294
+ </ul>
295
+ <a class="btn-money" href="/go/diagnostic?utm_source=pricing&utm_medium=hero_card&utm_campaign=money_today&cta_id=pricing_diagnostic&cta_placement=pricing&plan_id=sprint_diagnostic" data-pricing-cta data-cta-id="pricing_diagnostic" data-cta-placement="pricing" data-tier="service" data-plan-id="sprint_diagnostic" data-price="__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__" onclick="try{posthog.capture('pricing_cta_click',{cta:'pay_diagnostic',tier:'service',placement:'pricing_page',price:__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'pay_diagnostic',tier:'service'}})}catch(_){}">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</a>
296
+ <p class="btn-sub"><a href="/diagnostic" style="color:var(--cyan);text-decoration:none;font-weight:600;">Or open the diagnostic page →</a></p>
297
+ </div>
298
+
299
+ <div class="price-card money" id="sprint">
300
+ <div class="tier">Workflow Hardening Sprint</div>
301
+ <div class="price">$__WORKFLOW_SPRINT_PRICE_DOLLARS__</div>
302
+ <div class="price-sub"><strong>Primary commercial motion.</strong> Wire gates for one workflow, promote prevention rules, deliver verification evidence and a rollout checklist.</div>
303
+ <ul>
304
+ <li>Workflow map + approval boundaries</li>
305
+ <li>Memory / gate wiring plan</li>
306
+ <li>Proof pack for the next production-facing iteration</li>
307
+ <li>Expands into Enterprise when shared lessons matter</li>
308
+ </ul>
309
+ <a class="btn-money" href="/go/sprint?utm_source=pricing&utm_medium=hero_card&utm_campaign=money_today&cta_id=pricing_sprint&cta_placement=pricing&plan_id=workflow_sprint" data-pricing-cta data-cta-id="pricing_sprint" data-cta-placement="pricing" data-tier="service" data-plan-id="workflow_sprint" data-price="__WORKFLOW_SPRINT_PRICE_DOLLARS__" onclick="try{posthog.capture('pricing_cta_click',{cta:'pay_sprint',tier:'service',placement:'pricing_page',price:__WORKFLOW_SPRINT_PRICE_DOLLARS__})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'pay_sprint',tier:'service'}})}catch(_){}">Pay $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint</a>
310
+ <p class="btn-sub"><a href="/?utm_source=pricing&utm_medium=sprint_intake#workflow-sprint-intake" style="color:var(--cyan);text-decoration:none;font-weight:600;">Need fit review first? Send the workflow →</a></p>
311
+ </div>
312
+
284
313
  <div class="price-card">
285
314
  <div class="tier" style="color:var(--cyan);">Free</div>
286
315
  <div class="price">$0</div>
287
- <div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
316
+ <div class="price-sub">Catch repeated mistakes daily. Forever free for solo devs.</div>
288
317
  <ul>
289
318
  <li>2 feedback captures/day (10 total) — enough to see the value</li>
290
319
  <li>Up to 3 active prevention rules</li>
291
- <li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp)</li>
292
- <li>PreToolUse hook blocking with built-in safety checks</li>
320
+ <li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode)</li>
321
+ <li>PreToolUse hook flags and logs risky calls — hard-blocks secret exfiltration and guardrail-tampering by default; rm -rf, force-push, and supply-chain warn by default and hard-block in strict mode</li>
293
322
  <li>Runs 100% local — no account, no signup, no data leaves your machine</li>
294
323
  </ul>
295
324
  <a class="btn-install" href="/go/install?utm_source=pricing&utm_medium=free_card&cta_id=pricing_install_free&cta_placement=free_card" data-pricing-cta data-cta-id="pricing_install_free" data-cta-placement="free_card" data-tier="free" data-plan-id="free" data-price="0" onclick="try{posthog.capture('pricing_cta_click',{cta:'install_free',tier:'free',placement:'pricing_page'})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'install_free',tier:'free'}})}catch(_){}">Install free</a>
296
325
  </div>
297
326
 
298
- <div class="price-card highlight" id="pro">
327
+ <div class="price-card" id="pro">
299
328
  <div class="tier">Pro</div>
300
329
  <div class="price">$19<span>/mo</span></div>
301
330
  <div class="price-sub">
302
- <strong>Don't buy a tool — buy hosted sync + compatibility insurance.</strong> The free CLI runs your gates locally, but Pro is what we operate for you: secure SQLite sync across all your machines (saving you from managing database migrations manually across developer boxes) and active adapter maintenance to stay compatible with weekly breaking updates in Claude Code, Cursor, and Cline.
331
+ <strong>Solo self-serve side lane.</strong> After one real caught repeat: personal dashboard, recall, exports, managed adapters. Shared hosted lessons are Enterprise.
303
332
  </div>
304
333
  <ul>
305
- <li><strong>Hosted lesson sync</strong> — corrections follow you across machines, no manual export</li>
306
- <li><strong>Managed adapter matrix</strong> — we track runtime changes in Claude Code, Cursor, Codex, Gemini, Amp so you don't</li>
307
- <li><strong>Hosted dashboard</strong> — see every blocked action, every rule that fired, without running your own server</li>
334
+ <li><strong>Personal lesson recall</strong> — search and reuse your own corrections across sessions</li>
335
+ <li><strong>Managed adapter matrix</strong> — we track runtime changes in Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode so you don't</li>
336
+ <li><strong>Personal dashboard</strong> — see every flagged and blocked action and every rule that fired</li>
308
337
  <li><strong>Unlimited prevention rules</strong> — free caps at 3 auto-promoted rules</li>
309
338
  <li><strong>DPO + HuggingFace export</strong> — training data from your real corrections</li>
310
339
  <li><strong>Auto-connect</strong> — new agent surfaces appear automatically after setup</li>
@@ -316,8 +345,8 @@ __GA_BOOTSTRAP__
316
345
 
317
346
  <div class="price-card enterprise-card" id="enterprise">
318
347
  <div class="tier">Enterprise</div>
319
- <div class="price">Custom<span> / scoped after intake</span></div>
320
- <div class="price-sub">Shared enforcement for the whole team and regulated workflows. One engineer's save protects every agent.</div>
348
+ <div class="price">Custom<span> / after sprint proof</span></div>
349
+ <div class="price-sub">Shared enforcement for the whole team and regulated workflows. Start with a paid diagnostic or sprint — then expand.</div>
321
350
  <ul>
322
351
  <li>Everything in Pro, for every developer and agent</li>
323
352
  <li><strong>Shared lesson database</strong> — one engineer's fix protects every agent on the team</li>
@@ -328,15 +357,16 @@ __GA_BOOTSTRAP__
328
357
  <li>Custom policy layers, compliance audit export, approval boundaries, SSO, and dedicated onboarding with SLA</li>
329
358
  <li>Rollout starts only after workflow and proof review are explicit</li>
330
359
  </ul>
331
- <a class="btn-team" href="/?utm_source=pricing&utm_medium=enterprise_card&utm_campaign=enterprise_intake&cta_id=pricing_enterprise_intake&cta_placement=pricing&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_enterprise_intake" data-cta-placement="pricing" data-tier="enterprise" data-plan-id="enterprise" data-price="0" onclick="try{posthog.capture('pricing_cta_click',{cta:'enterprise_intake',tier:'enterprise',placement:'pricing_page',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'enterprise_intake',tier:'enterprise'}})}catch(_){}">Talk to us</a>
332
- <p class="btn-sub">Custom pricing, scoped through intake so the workflow is explicit before checkout.</p>
360
+ <a class="btn-team" href="/go/sprint?utm_source=pricing&utm_medium=enterprise_card&utm_campaign=money_today&cta_id=pricing_enterprise_sprint&cta_placement=pricing&plan_id=workflow_sprint" data-pricing-cta data-cta-id="pricing_enterprise_sprint" data-cta-placement="pricing" data-tier="service" data-plan-id="workflow_sprint" data-price="__WORKFLOW_SPRINT_PRICE_DOLLARS__" onclick="try{posthog.capture('pricing_cta_click',{cta:'enterprise_sprint',tier:'service',placement:'pricing_page',price:__WORKFLOW_SPRINT_PRICE_DOLLARS__})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'enterprise_sprint',tier:'service'}})}catch(_){}">Start with $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint</a>
361
+ <p class="btn-sub"><a href="/?utm_source=pricing&utm_medium=enterprise_intake&utm_campaign=enterprise_intake&cta_id=pricing_enterprise_intake&cta_placement=pricing&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_enterprise_intake" data-cta-placement="pricing" data-tier="enterprise" data-plan-id="enterprise" data-price="0" style="color:var(--cyan);text-decoration:none;font-weight:600;">Or send workflow intake →</a></p>
333
362
  </div>
334
363
 
335
364
  </div>
336
365
 
337
366
  <div style="text-align:center;margin:32px 0;color:var(--text-muted);font-size:14px;">
338
- Need founder help? Do not buy a blind diagnostic from a pricing table.
339
- <a href="/?utm_source=pricing&utm_medium=scope_first&utm_campaign=enterprise_intake&cta_id=pricing_scope_first&cta_placement=pricing_note&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_scope_first" data-cta-placement="pricing_note" data-tier="enterprise" data-plan-id="enterprise" data-price="0" style="color:var(--cyan);text-decoration:none;font-weight:600;" onclick="try{posthog.capture('pricing_cta_click',{cta:'scope_first',tier:'enterprise',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'scope_first',tier:'enterprise'}})}catch(_){}">Send the workflow first</a> — then we scope the smallest paid rollout that can prove one repeated failure is blocked.
367
+ Prefer a scoped conversation before Stripe?
368
+ <a href="/?utm_source=pricing&utm_medium=scope_first&utm_campaign=enterprise_intake&cta_id=pricing_scope_first&cta_placement=pricing_note&plan_id=enterprise#workflow-sprint-intake" data-pricing-cta data-cta-id="pricing_scope_first" data-cta-placement="pricing_note" data-tier="enterprise" data-plan-id="enterprise" data-price="0" style="color:var(--cyan);text-decoration:none;font-weight:600;" onclick="try{posthog.capture('pricing_cta_click',{cta:'scope_first',tier:'enterprise',price:0})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'scope_first',tier:'enterprise'}})}catch(_){}">Send the workflow first</a>
369
+ — or pay the diagnostic today if you already know the failure.
340
370
  </div>
341
371
  </section>
342
372
 
@@ -346,7 +376,7 @@ __GA_BOOTSTRAP__
346
376
  <div class="faq-list">
347
377
  <div class="faq-item">
348
378
  <div class="faq-q">What does Pro add over the free CLI?</div>
349
- <div class="faq-a">Free gives you 2 captures/day and 3 active rules, running entirely on your machine. Pro is the hosted layer: unlimited captures, unlimited rules, lesson sync across machines, a dashboard without self-hosting, managed adapter updates, and DPO export. You're paying for infrastructure we run, not features we hide.</div>
379
+ <div class="faq-a">Free gives you 2 captures/day and 3 active rules, running on your machine. Pro removes solo caps and adds personal recall, dashboard proof, managed adapters, and DPO export. Enterprise adds shared hosted lessons and org visibility.</div>
350
380
  </div>
351
381
  <div class="faq-item">
352
382
  <div class="faq-q">Why not just use an enterprise AI control plane?</div>
@@ -354,7 +384,7 @@ __GA_BOOTSTRAP__
354
384
  </div>
355
385
  <div class="faq-item">
356
386
  <div class="faq-q">Does ThumbGate send my code to the cloud?</div>
357
- <div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro and Enterprise add hosted sync for dashboards and shared lessons, but your code stays local.</div>
387
+ <div class="faq-a">No. The CLI is local-first and no source code leaves your machine. Pro adds personal proof and exports; Enterprise adds shared hosted lessons and org dashboards.</div>
358
388
  </div>
359
389
  <div class="faq-item">
360
390
  <div class="faq-q">When should I pick Enterprise over Pro?</div>
@@ -366,7 +396,7 @@ __GA_BOOTSTRAP__
366
396
  </div>
367
397
  <div class="faq-item">
368
398
  <div class="faq-q">What happens if I stop paying?</div>
369
- <div class="faq-a">You keep the free CLI with 5-rule cap. Your existing rules and captures stay on your machine. You lose dashboard access, lesson search, exports, and auto-connect.</div>
399
+ <div class="faq-a">You keep the free CLI, capped at 3 active rules and 2 captures/day. Existing rules and captures stay on your machine. You lose the personal dashboard, managed adapters, exports, and higher limits. Shared hosted lessons and org dashboards are Enterprise.</div>
370
400
  </div>
371
401
  </div>
372
402
  </div>
package/public/pro.html CHANGED
@@ -842,7 +842,7 @@ __GA_BOOTSTRAP__
842
842
  <div class="container">
843
843
  <div class="section-label">Why operators pay</div>
844
844
  <h2 class="section-title">Pro is not "more memory." It is a tighter operating loop around one operator's real failures.</h2>
845
- <p class="section-intro">The paid story is simple: free helps you install and block repeated mistakes locally. Pro helps you debug those blocks faster, export the learning, and show proof when a workflow owner asks what changed.</p>
845
+ <p class="section-intro">The paid story is simple: free helps you install and catch repeated mistakes locally. Pro helps you debug those blocks faster, export the learning, and show proof when a workflow owner asks what changed.</p>
846
846
  <div class="grid-3">
847
847
  <div class="feature-card">
848
848
  <h3>Debug the exact block in minutes</h3>
@@ -880,7 +880,7 @@ __GA_BOOTSTRAP__
880
880
  <div class="split-card free">
881
881
  <div class="split-kicker">Stay on Free</div>
882
882
  <h3>The local install is still the right first step</h3>
883
- <p>If you only need local recall, Pre-Action Checks, MCP setup, and a way to stop repeated mistakes on one machine, keep the free install and move fast.</p>
883
+ <p>If you only need local recall, Pre-Action Checks, MCP setup, and a way to catch repeated mistakes on one machine, keep the free install and move fast.</p>
884
884
  <ul>
885
885
  <li>Local-first recall, lessons, and enforcement.</li>
886
886
  <li>No cloud account required.</li>