thumbgate 1.27.19 → 1.27.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/dashboard.md +15 -0
- package/.claude/commands/thumbgate-blocked.md +27 -0
- package/.claude/commands/thumbgate-dashboard.md +15 -0
- package/.claude/commands/thumbgate-doctor.md +30 -0
- package/.claude/commands/thumbgate-guard.md +36 -0
- package/.claude/commands/thumbgate-protect.md +30 -0
- package/.claude/commands/thumbgate-rules.md +30 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +0 -3
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/gcp/dfcx-webhook-gate.js +295 -0
- package/adapters/letta/README.md +41 -0
- package/adapters/letta/thumbgate-letta-adapter.js +133 -0
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
- package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
- package/bench/observability-eval-suite.json +26 -0
- package/bin/cli.js +27 -1
- package/bin/dashboard-cli.js +7 -0
- package/bin/postinstall.js +14 -23
- package/commands/dashboard.md +15 -0
- package/commands/thumbgate-dashboard.md +15 -0
- package/package.json +225 -100
- package/public/about.html +162 -0
- package/public/agent-manager.html +179 -0
- package/public/agents-cost-savings.html +153 -0
- package/public/ai-malpractice-prevention.html +818 -0
- package/public/assets/brand/github-social-preview.png +0 -0
- package/public/assets/brand/thumbgate-icon-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
- package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
- package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
- package/public/assets/brand/thumbgate-logo-transparent.svg +28 -0
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +18 -0
- package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
- package/public/assets/brand/thumbgate-mark-team.svg +26 -0
- package/public/assets/brand/thumbgate-mark.svg +21 -0
- package/public/assets/brand/thumbgate-wordmark.svg +20 -0
- package/public/assets/claude-thumbgate-statusbar.svg +8 -0
- package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
- package/public/assets/legal-intake-control-flow.svg +66 -0
- package/public/brand/thumbgate-mark.svg +19 -0
- package/public/brand/thumbgate-og.svg +16 -0
- package/public/chatgpt-app.html +330 -0
- package/public/codex-enterprise.html +123 -0
- package/public/diagnostic.html +345 -0
- package/public/index.html +2 -2
- package/public/install.html +193 -0
- package/public/js/buyer-intent.js +672 -0
- package/public/numbers.html +2 -2
- package/public/pricing.html +399 -0
- package/scripts/action-receipts.js +324 -0
- package/scripts/activation-quickstart.js +187 -0
- package/scripts/agent-operations-planner.js +621 -0
- package/scripts/ai-component-inventory.js +367 -0
- package/scripts/async-eval-observability.js +236 -0
- package/scripts/audit.js +65 -0
- package/scripts/aws-blocks-guardrails.js +272 -0
- package/scripts/classifier-routing.js +130 -0
- package/scripts/dashboard-chat.js +332 -0
- package/scripts/feedback-aggregate.js +281 -0
- package/scripts/feedback-sanitizer.js +105 -0
- package/scripts/hook-stop-anti-claim.js +301 -0
- package/scripts/install-shim.js +87 -0
- package/scripts/mcp-oauth.js +293 -0
- package/scripts/noop-detect.js +285 -0
- package/scripts/parallel-workflow-orchestrator.js +293 -0
- package/scripts/plan-gate.js +243 -0
- package/scripts/plausible-domain-config.js +99 -0
- package/scripts/qa-scenario-planner.js +136 -0
- package/scripts/repeat-metric.js +137 -0
- package/scripts/secret-fixture-tokens.js +61 -0
- package/scripts/secret-redaction.js +166 -0
- package/scripts/self-harness-optimizer.js +141 -0
- package/scripts/self-healing-check.js +193 -0
- package/scripts/self-protection.js +90 -0
- package/scripts/silent-failure-cluster.js +531 -0
- package/scripts/statusline-cache-read.js +57 -0
- package/scripts/sync-telemetry-from-prod.js +374 -0
- package/scripts/tool-contract-validator.js +76 -0
- package/scripts/trajectory-scorer.js +63 -0
- package/scripts/verify-marketing-pages-deployed.js +212 -0
- package/scripts/visitor-journey.js +172 -0
- package/.claude-plugin/marketplace.json +0 -85
- package/adapters/chatgpt/openapi.yaml +0 -1707
|
@@ -0,0 +1,399 @@
|
|
|
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.0">
|
|
6
|
+
__GOOGLE_SITE_VERIFICATION_META__
|
|
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.">
|
|
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.">
|
|
11
|
+
<meta property="og:type" content="website">
|
|
12
|
+
<meta property="og:url" content="__APP_ORIGIN__/pricing">
|
|
13
|
+
<meta property="og:image" content="/og.png">
|
|
14
|
+
<link rel="canonical" href="__APP_ORIGIN__/pricing">
|
|
15
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
16
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
17
|
+
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
18
|
+
|
|
19
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.tagged-events.js"></script>
|
|
20
|
+
__GA_BOOTSTRAP__
|
|
21
|
+
|
|
22
|
+
<script>
|
|
23
|
+
const gaMeasurementId = '__GA_MEASUREMENT_ID__';
|
|
24
|
+
const serverVisitorId = '__SERVER_VISITOR_ID__';
|
|
25
|
+
const serverSessionId = '__SERVER_SESSION_ID__';
|
|
26
|
+
const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
|
|
27
|
+
const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
|
|
28
|
+
const proPriceDollars = Number('__PRO_PRICE_DOLLARS__') || 19;
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
window.thumbgatePricingTelemetry = window.thumbgatePricingTelemetry || {};
|
|
33
|
+
window.trackPricingTelemetry = function(eventType, data) {
|
|
34
|
+
const params = new URLSearchParams(window.location.search);
|
|
35
|
+
const payload = Object.assign({
|
|
36
|
+
eventType,
|
|
37
|
+
clientType: 'web',
|
|
38
|
+
page: '/pricing',
|
|
39
|
+
source: params.get('utm_source') || 'pricing',
|
|
40
|
+
utmSource: params.get('utm_source') || 'pricing',
|
|
41
|
+
utmMedium: params.get('utm_medium') || 'pricing_page',
|
|
42
|
+
utmCampaign: params.get('utm_campaign') || 'pricing_page',
|
|
43
|
+
utmContent: params.get('utm_content') || null,
|
|
44
|
+
utmTerm: params.get('utm_term') || null,
|
|
45
|
+
traceId: params.get('trace_id') || null,
|
|
46
|
+
acquisitionId: params.get('acquisition_id') || serverAcquisitionId || null,
|
|
47
|
+
visitorId: params.get('visitor_id') || serverVisitorId || null,
|
|
48
|
+
sessionId: params.get('visitor_session_id') || params.get('session_id') || serverSessionId || null,
|
|
49
|
+
referrer: document.referrer || null,
|
|
50
|
+
landingPath: '/pricing'
|
|
51
|
+
}, data || {});
|
|
52
|
+
const body = JSON.stringify(payload);
|
|
53
|
+
if (navigator.sendBeacon) {
|
|
54
|
+
navigator.sendBeacon('/v1/telemetry/ping', new Blob([body], { type: 'application/json' }));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
fetch('/v1/telemetry/ping', {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: { 'content-type': 'application/json' },
|
|
60
|
+
body,
|
|
61
|
+
keepalive: true
|
|
62
|
+
}).catch(function(){});
|
|
63
|
+
};
|
|
64
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
65
|
+
trackPricingTelemetry('pricing_page_view', { serverTelemetryCaptured });
|
|
66
|
+
document.querySelectorAll('[data-pricing-cta]').forEach(function(link) {
|
|
67
|
+
link.addEventListener('click', function() {
|
|
68
|
+
trackPricingTelemetry('pricing_cta_click', {
|
|
69
|
+
ctaId: link.getAttribute('data-cta-id') || null,
|
|
70
|
+
ctaPlacement: link.getAttribute('data-cta-placement') || 'pricing',
|
|
71
|
+
tier: link.getAttribute('data-tier') || null,
|
|
72
|
+
planId: link.getAttribute('data-plan-id') || null,
|
|
73
|
+
billingCycle: link.getAttribute('data-billing-cycle') || null,
|
|
74
|
+
price: link.getAttribute('data-price') || null,
|
|
75
|
+
href: link.getAttribute('href') || null
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
</script>
|
|
81
|
+
|
|
82
|
+
<script type="application/ld+json">
|
|
83
|
+
{
|
|
84
|
+
"@context": "https://schema.org",
|
|
85
|
+
"@type": "SoftwareApplication",
|
|
86
|
+
"name": "ThumbGate",
|
|
87
|
+
"applicationCategory": "DeveloperApplication",
|
|
88
|
+
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
89
|
+
"url": "__APP_ORIGIN__/pricing",
|
|
90
|
+
"offers": [
|
|
91
|
+
{ "@type": "Offer", "name": "ThumbGate CLI (Free)", "price": "0", "priceCurrency": "USD" },
|
|
92
|
+
{ "@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
|
+
{ "@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
|
+
{ "@type": "Offer", "name": "ThumbGate Enterprise", "priceCurrency": "USD", "url": "__APP_ORIGIN__/#workflow-sprint-intake" }
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
</script>
|
|
98
|
+
|
|
99
|
+
<script type="application/ld+json">
|
|
100
|
+
{
|
|
101
|
+
"@context": "https://schema.org",
|
|
102
|
+
"@type": "FAQPage",
|
|
103
|
+
"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": "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
|
+
{ "@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
|
+
]
|
|
109
|
+
}
|
|
110
|
+
</script>
|
|
111
|
+
|
|
112
|
+
<style>
|
|
113
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
114
|
+
|
|
115
|
+
:root {
|
|
116
|
+
--bg: #0a0a0b;
|
|
117
|
+
--bg-raised: #111113;
|
|
118
|
+
--bg-card: #161618;
|
|
119
|
+
--border: #232327;
|
|
120
|
+
--text: #ececf1;
|
|
121
|
+
--text-muted: #9a9aa6;
|
|
122
|
+
--text-dim: #6b6b78;
|
|
123
|
+
--cyan: #22d3ee;
|
|
124
|
+
--cyan-dim: rgba(34, 211, 238, 0.12);
|
|
125
|
+
--cyan-glow: rgba(34, 211, 238, 0.22);
|
|
126
|
+
--green: #4ade80;
|
|
127
|
+
--green-dim: rgba(74, 222, 128, 0.12);
|
|
128
|
+
--font: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, sans-serif;
|
|
129
|
+
--mono: 'SF Mono', 'Cascadia Code', 'JetBrains Mono', 'Fira Code', Consolas, monospace;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
html { scroll-behavior: smooth; }
|
|
133
|
+
body {
|
|
134
|
+
margin: 0;
|
|
135
|
+
font-family: var(--font);
|
|
136
|
+
background:
|
|
137
|
+
radial-gradient(circle at top, rgba(34, 211, 238, 0.16) 0%, rgba(34, 211, 238, 0) 28%),
|
|
138
|
+
linear-gradient(180deg, #0a0a0b 0%, #0d1016 48%, #0a0a0b 100%);
|
|
139
|
+
color: var(--text);
|
|
140
|
+
line-height: 1.6;
|
|
141
|
+
-webkit-font-smoothing: antialiased;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
a { color: inherit; }
|
|
145
|
+
.container { max-width: 1080px; margin: 0 auto; padding: 0 24px; }
|
|
146
|
+
|
|
147
|
+
/* NAV */
|
|
148
|
+
nav {
|
|
149
|
+
position: sticky; top: 0; z-index: 50;
|
|
150
|
+
backdrop-filter: blur(12px);
|
|
151
|
+
background: rgba(10, 10, 11, 0.86);
|
|
152
|
+
border-bottom: 1px solid rgba(35, 35, 39, 0.92);
|
|
153
|
+
}
|
|
154
|
+
nav .container { min-height: 68px; display: flex; align-items: center; justify-content: space-between; gap: 20px; }
|
|
155
|
+
.nav-logo { font-size: 15px; font-weight: 700; letter-spacing: -0.02em; text-decoration: none; }
|
|
156
|
+
.nav-links { display: flex; gap: 20px; align-items: center; }
|
|
157
|
+
.nav-links a { font-size: 13px; color: var(--text-muted); text-decoration: none; transition: color 0.15s; }
|
|
158
|
+
.nav-links a:hover { color: var(--text); }
|
|
159
|
+
.nav-cta { background: var(--cyan); color: var(--bg); padding: 7px 16px; border-radius: 6px; font-size: 13px; font-weight: 600; text-decoration: none; transition: opacity 0.15s; }
|
|
160
|
+
.nav-cta:hover { opacity: 0.85; }
|
|
161
|
+
|
|
162
|
+
/* HERO */
|
|
163
|
+
.pricing-hero { padding: 80px 0 24px; text-align: center; }
|
|
164
|
+
.pricing-hero h1 { font-size: clamp(28px, 4vw, 40px); font-weight: 700; letter-spacing: -0.03em; margin: 0 0 12px; }
|
|
165
|
+
.pricing-hero .lede { color: var(--text-muted); font-size: 17px; max-width: 560px; margin: 0 auto; }
|
|
166
|
+
|
|
167
|
+
/* GRID */
|
|
168
|
+
.pricing-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; margin: 40px 0 32px; }
|
|
169
|
+
@media (max-width: 768px) { .pricing-grid { grid-template-columns: 1fr; } }
|
|
170
|
+
|
|
171
|
+
/* CARDS */
|
|
172
|
+
.price-card {
|
|
173
|
+
background: var(--bg-card); border: 1px solid var(--border); border-radius: 12px;
|
|
174
|
+
padding: 32px 28px; display: flex; flex-direction: column;
|
|
175
|
+
}
|
|
176
|
+
.price-card.highlight {
|
|
177
|
+
border-color: var(--cyan);
|
|
178
|
+
box-shadow: 0 0 40px var(--cyan-dim), inset 0 1px 0 rgba(34, 211, 238, 0.15);
|
|
179
|
+
position: relative;
|
|
180
|
+
}
|
|
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
|
+
.tier { font-size: 13px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--text-muted); font-weight: 600; margin-bottom: 8px; }
|
|
190
|
+
.price-card.highlight .tier { color: var(--cyan); }
|
|
191
|
+
|
|
192
|
+
.price { font-size: 40px; font-weight: 700; letter-spacing: -0.03em; margin-bottom: 4px; }
|
|
193
|
+
.price span { font-size: 16px; color: var(--text-dim); }
|
|
194
|
+
.price-sub { font-size: 13px; color: var(--text-muted); margin-bottom: 24px; line-height: 1.55; }
|
|
195
|
+
|
|
196
|
+
.price-card ul { list-style: none; padding: 0; margin: 0 0 28px; }
|
|
197
|
+
.price-card li { font-size: 14px; color: var(--text-muted); padding: 6px 0; display: flex; align-items: flex-start; gap: 8px; }
|
|
198
|
+
.price-card li::before { content: "\2713"; color: var(--cyan); font-weight: 700; flex-shrink: 0; }
|
|
199
|
+
|
|
200
|
+
/* BUTTONS */
|
|
201
|
+
.btn-install {
|
|
202
|
+
display: block; text-align: center; padding: 12px; border: 1px solid var(--border);
|
|
203
|
+
border-radius: 8px; color: var(--text); text-decoration: none; font-size: 14px; font-weight: 500;
|
|
204
|
+
transition: border-color 0.15s; margin-top: auto;
|
|
205
|
+
}
|
|
206
|
+
.btn-install:hover { border-color: var(--text-muted); }
|
|
207
|
+
|
|
208
|
+
.btn-pro {
|
|
209
|
+
display: block; text-align: center; padding: 12px;
|
|
210
|
+
background: var(--cyan); color: var(--bg); border-radius: 8px;
|
|
211
|
+
text-decoration: none; font-size: 14px; font-weight: 600; transition: opacity 0.15s;
|
|
212
|
+
margin-top: auto;
|
|
213
|
+
}
|
|
214
|
+
.btn-pro:hover { opacity: 0.85; }
|
|
215
|
+
|
|
216
|
+
.btn-team {
|
|
217
|
+
display: block; text-align: center; padding: 12px;
|
|
218
|
+
background: rgba(74, 222, 128, 0.14); color: var(--green);
|
|
219
|
+
border: 1px solid rgba(74, 222, 128, 0.4); border-radius: 8px;
|
|
220
|
+
text-decoration: none; font-size: 14px; font-weight: 600;
|
|
221
|
+
transition: border-color 0.15s, transform 0.15s; margin-top: auto;
|
|
222
|
+
}
|
|
223
|
+
.btn-team:hover { border-color: var(--green); transform: translateY(-1px); }
|
|
224
|
+
|
|
225
|
+
.btn-sub { font-size: 11px; color: var(--text-muted); margin-top: 8px; text-align: center; }
|
|
226
|
+
|
|
227
|
+
/* FAQ */
|
|
228
|
+
.faq { padding: 48px 0; }
|
|
229
|
+
.faq h2 { text-align: center; font-size: 24px; margin-bottom: 24px; }
|
|
230
|
+
.faq-list { max-width: 640px; margin: 0 auto; }
|
|
231
|
+
.faq-item { border-bottom: 1px solid var(--border); }
|
|
232
|
+
.faq-q {
|
|
233
|
+
padding: 20px 0; font-size: 15px; font-weight: 600; cursor: pointer;
|
|
234
|
+
display: flex; justify-content: space-between; align-items: center;
|
|
235
|
+
}
|
|
236
|
+
.faq-q::after { content: "+"; font-size: 18px; color: var(--text-muted); transition: transform 0.2s; }
|
|
237
|
+
.faq-item.open .faq-q::after { transform: rotate(45deg); }
|
|
238
|
+
.faq-a { font-size: 14px; color: var(--text-muted); line-height: 1.65; padding-bottom: 20px; display: none; }
|
|
239
|
+
.faq-item.open .faq-a { display: block; }
|
|
240
|
+
|
|
241
|
+
/* FOOTER */
|
|
242
|
+
footer { border-top: 1px solid var(--border); padding: 32px 0; margin-top: 48px; }
|
|
243
|
+
footer .container { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 12px; }
|
|
244
|
+
.footer-links { display: flex; gap: 20px; }
|
|
245
|
+
.footer-links a { color: var(--text-muted); text-decoration: none; font-size: 13px; transition: color 0.15s; }
|
|
246
|
+
.footer-links a:hover { color: var(--text); }
|
|
247
|
+
.footer-copy { font-size: 12px; color: var(--text-muted); }
|
|
248
|
+
</style>
|
|
249
|
+
<script>
|
|
250
|
+
!function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace("/ingest","")+ "/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once unregister opt_out_capturing has_opted_out_capturing opt_in_capturing reset isFeatureEnabled onFeatureFlags getFeatureFlag getFeatureFlagPayload reloadFeatureFlags group identify setPersonProperties setPersonPropertiesForFlags".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
|
|
251
|
+
posthog.init('__POSTHOG_API_KEY__', {
|
|
252
|
+
api_host: '/ingest',
|
|
253
|
+
ui_host: 'https://us.posthog.com',
|
|
254
|
+
person_profiles: 'identified_only',
|
|
255
|
+
});
|
|
256
|
+
posthog.capture('$pageview');
|
|
257
|
+
</script>
|
|
258
|
+
</head>
|
|
259
|
+
<body>
|
|
260
|
+
|
|
261
|
+
<nav>
|
|
262
|
+
<div class="container">
|
|
263
|
+
<a href="/" class="nav-logo">ThumbGate</a>
|
|
264
|
+
<div class="nav-links">
|
|
265
|
+
<a href="/#how-it-works">Features</a>
|
|
266
|
+
<a href="/pricing" style="color:var(--text);">Pricing</a>
|
|
267
|
+
<a href="/guide">Guide</a>
|
|
268
|
+
<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
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
</nav>
|
|
273
|
+
|
|
274
|
+
<section class="pricing-hero">
|
|
275
|
+
<div class="container">
|
|
276
|
+
<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
|
+
</div>
|
|
279
|
+
</section>
|
|
280
|
+
|
|
281
|
+
<section class="container">
|
|
282
|
+
<div class="pricing-grid">
|
|
283
|
+
|
|
284
|
+
<div class="price-card">
|
|
285
|
+
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
286
|
+
<div class="price">$0</div>
|
|
287
|
+
<div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
|
|
288
|
+
<ul>
|
|
289
|
+
<li>2 feedback captures/day (10 total) — enough to see the value</li>
|
|
290
|
+
<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>
|
|
293
|
+
<li>Runs 100% local — no account, no signup, no data leaves your machine</li>
|
|
294
|
+
</ul>
|
|
295
|
+
<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
|
+
</div>
|
|
297
|
+
|
|
298
|
+
<div class="price-card highlight" id="pro">
|
|
299
|
+
<div class="tier">Pro</div>
|
|
300
|
+
<div class="price">$19<span>/mo</span></div>
|
|
301
|
+
<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.
|
|
303
|
+
</div>
|
|
304
|
+
<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>
|
|
308
|
+
<li><strong>Unlimited prevention rules</strong> — free caps at 3 auto-promoted rules</li>
|
|
309
|
+
<li><strong>DPO + HuggingFace export</strong> — training data from your real corrections</li>
|
|
310
|
+
<li><strong>Auto-connect</strong> — new agent surfaces appear automatically after setup</li>
|
|
311
|
+
<li>7-day refund window. Cancel anytime.</li>
|
|
312
|
+
</ul>
|
|
313
|
+
<a class="btn-pro" href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=hero_card&utm_campaign=pricing_page&cta_id=pricing_pro&cta_placement=pricing&plan_id=pro&billing_cycle=monthly&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_pro" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-billing-cycle="monthly" data-price="19" onclick="try{posthog.capture('pricing_cta_click',{cta:'start_pro',tier:'pro',placement:'pricing_page',price:19})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'start_pro',tier:'pro'}})}catch(_){}">Start Pro — $19/mo</a>
|
|
314
|
+
<p class="btn-sub">or <a href="/checkout/pro?confirm=1&utm_source=pricing&utm_medium=hero_card_annual&utm_campaign=pricing_page&cta_id=pricing_pro_annual&cta_placement=pricing&plan_id=pro&billing_cycle=annual&landing_path=%2Fpricing" data-pricing-cta data-cta-id="pricing_pro_annual" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-billing-cycle="annual" data-price="149" onclick="try{posthog.capture('pricing_cta_click',{cta:'start_pro_annual',tier:'pro',placement:'pricing_page',price:149})}catch(_){};try{plausible('pricing_cta_click',{props:{cta:'start_pro_annual',tier:'pro'}})}catch(_){}" style="color:var(--cyan);text-decoration:none;font-weight:600;">$149/year (save 35%) →</a></p>
|
|
315
|
+
</div>
|
|
316
|
+
|
|
317
|
+
<div class="price-card enterprise-card" id="enterprise">
|
|
318
|
+
<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>
|
|
321
|
+
<ul>
|
|
322
|
+
<li>Everything in Pro, for every developer and agent</li>
|
|
323
|
+
<li><strong>Shared lesson database</strong> — one engineer's fix protects every agent on the team</li>
|
|
324
|
+
<li><strong>Org dashboard</strong> — visibility across all agent surfaces and developers</li>
|
|
325
|
+
<li><strong>Dialogflow CX fulfillment guard</strong> — put ThumbGate's pre-action gate in front of your Dialogflow CX webhook fulfillment, in your own GCP tenant, so risky or repeat turns are blocked before they touch a DB, CRM, or billing system (white-glove design-partner pilot)</li>
|
|
326
|
+
<li><strong>Vertex AI / VPC gating</strong> — route agent checks through Gemini in your own Google Cloud project (<code>npx thumbgate setup-vertex</code>)</li>
|
|
327
|
+
<li><strong>Regulatory gate templates</strong> — legal intake, financial compliance, healthcare</li>
|
|
328
|
+
<li>Custom policy layers, compliance audit export, approval boundaries, SSO, and dedicated onboarding with SLA</li>
|
|
329
|
+
<li>Rollout starts only after workflow and proof review are explicit</li>
|
|
330
|
+
</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>
|
|
333
|
+
</div>
|
|
334
|
+
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<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.
|
|
340
|
+
</div>
|
|
341
|
+
</section>
|
|
342
|
+
|
|
343
|
+
<section class="faq">
|
|
344
|
+
<div class="container">
|
|
345
|
+
<h2>Questions</h2>
|
|
346
|
+
<div class="faq-list">
|
|
347
|
+
<div class="faq-item">
|
|
348
|
+
<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>
|
|
350
|
+
</div>
|
|
351
|
+
<div class="faq-item">
|
|
352
|
+
<div class="faq-q">Why not just use an enterprise AI control plane?</div>
|
|
353
|
+
<div class="faq-a">Enterprise control planes govern agents from a server-side gateway, sold to platform teams on a Fortune-500 timeline. ThumbGate runs local-first, in the PreToolUse hook on your machine, and ships enforcement for the coding agents developers actually use today — Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode — with an <code>npm install</code> and minutes to value, not a procurement cycle.</div>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="faq-item">
|
|
356
|
+
<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>
|
|
358
|
+
</div>
|
|
359
|
+
<div class="faq-item">
|
|
360
|
+
<div class="faq-q">When should I pick Enterprise over Pro?</div>
|
|
361
|
+
<div class="faq-a">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.</div>
|
|
362
|
+
</div>
|
|
363
|
+
<div class="faq-item">
|
|
364
|
+
<div class="faq-q">Can I cancel anytime?</div>
|
|
365
|
+
<div class="faq-a">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.</div>
|
|
366
|
+
</div>
|
|
367
|
+
<div class="faq-item">
|
|
368
|
+
<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>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
</section>
|
|
374
|
+
|
|
375
|
+
<footer>
|
|
376
|
+
<div class="container">
|
|
377
|
+
<div class="footer-links">
|
|
378
|
+
<a href="/">Home</a>
|
|
379
|
+
<a href="/guide">Guide</a>
|
|
380
|
+
<a href="/support">Support</a>
|
|
381
|
+
<a href="/privacy">Privacy</a>
|
|
382
|
+
<a href="/terms">Terms</a>
|
|
383
|
+
</div>
|
|
384
|
+
<span class="footer-copy">One source of truth for ThumbGate pricing. Numbers here override anything stale elsewhere.</span>
|
|
385
|
+
</div>
|
|
386
|
+
</footer>
|
|
387
|
+
|
|
388
|
+
<script>
|
|
389
|
+
document.querySelectorAll('.faq-q').forEach(function(q) {
|
|
390
|
+
q.addEventListener('click', function() {
|
|
391
|
+
this.parentElement.classList.toggle('open');
|
|
392
|
+
});
|
|
393
|
+
});
|
|
394
|
+
</script>
|
|
395
|
+
<script>
|
|
396
|
+
window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) };
|
|
397
|
+
</script>
|
|
398
|
+
</body>
|
|
399
|
+
</html>
|