thumbgate 1.23.0 → 1.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +5 -5
- package/.claude-plugin/plugin.json +2 -2
- package/.well-known/llms.txt +26 -11
- package/.well-known/mcp/server-card.json +8 -8
- package/README.md +69 -34
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +57 -16
- package/bin/postinstall.js +11 -22
- package/config/gate-templates.json +72 -0
- package/config/github-about.json +1 -1
- package/config/post-deploy-marketing-pages.json +10 -0
- package/package.json +6 -6
- package/public/agent-manager.html +3 -3
- package/public/agents-cost-savings.html +3 -3
- package/public/ai-malpractice-prevention.html +726 -149
- package/public/blog.html +3 -3
- package/public/codex-enterprise.html +3 -3
- package/public/codex-plugin.html +4 -4
- package/public/compare.html +6 -6
- package/public/dashboard.html +211 -126
- package/public/guide.html +5 -5
- package/public/index.html +187 -47
- package/public/learn.html +24 -10
- package/public/lessons.html +2 -2
- package/public/numbers.html +6 -6
- package/public/pricing.html +6 -5
- package/public/pro.html +23 -0
- package/scripts/billing.js +17 -0
- package/scripts/commercial-offer.js +75 -0
- package/scripts/dashboard.js +53 -1
- package/scripts/gates-engine.js +3 -3
- package/scripts/plausible-server-events.js +2 -1
- package/scripts/rate-limiter.js +16 -12
- package/scripts/seo-gsd.js +167 -1
- package/scripts/telemetry-analytics.js +310 -0
- package/scripts/visitor-journey.js +172 -0
- package/src/api/server.js +65 -29
- package/adapters/chatgpt/openapi.yaml +0 -1705
package/public/index.html
CHANGED
|
@@ -16,15 +16,18 @@ __GOOGLE_SITE_VERIFICATION_META__
|
|
|
16
16
|
<meta property="og:title" content="ThumbGate — Stop paying for the same AI mistake twice">
|
|
17
17
|
<meta property="og:description" content="Frontier LLMs are expensive, opaque, and unreliable in production. ThumbGate gates risky agent actions before they run: workflow shape, inspection evidence, token budget, and repeated-failure memory in one pre-action check.">
|
|
18
18
|
<meta property="og:type" content="website">
|
|
19
|
-
<meta property="og:
|
|
19
|
+
<meta property="og:url" content="__APP_ORIGIN__/">
|
|
20
|
+
<meta property="og:image" content="https://thumbgate.ai/og.png">
|
|
20
21
|
<meta name="twitter:card" content="summary_large_image">
|
|
21
|
-
<meta name="twitter:image" content="https://thumbgate
|
|
22
|
-
<meta name="thumbgate-version" content="1.23.
|
|
23
|
-
<meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
|
|
22
|
+
<meta name="twitter:image" content="https://thumbgate.ai/og.png">
|
|
23
|
+
<meta name="thumbgate-version" content="1.23.2">
|
|
24
|
+
<meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agentic development cycle, AC/DC framework, Guide Generate Verify Solve, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
|
|
25
|
+
<link rel="canonical" href="__APP_ORIGIN__/">
|
|
26
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
24
27
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
25
28
|
|
|
26
29
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
27
|
-
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
30
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.tagged-events.js"></script>
|
|
28
31
|
__GA_BOOTSTRAP__
|
|
29
32
|
|
|
30
33
|
<script>
|
|
@@ -42,8 +45,8 @@ __GA_BOOTSTRAP__
|
|
|
42
45
|
"@type": "Organization",
|
|
43
46
|
"name": "ThumbGate",
|
|
44
47
|
"alternateName": "thumbgate",
|
|
45
|
-
"url": "https://thumbgate
|
|
46
|
-
"logo": "https://thumbgate
|
|
48
|
+
"url": "https://thumbgate.ai",
|
|
49
|
+
"logo": "https://thumbgate.ai/assets/brand/thumbgate-logo-1200x360.png",
|
|
47
50
|
"description": "ThumbGate ships pre-action gates for AI coding agents. Open-source CLI plus PreToolUse hooks that capture feedback, promote it to memory, generate prevention rules, and block repeated mistakes before the next tool call across Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode.",
|
|
48
51
|
"founder": {
|
|
49
52
|
"@type": "Person",
|
|
@@ -86,6 +89,7 @@ __GA_BOOTSTRAP__
|
|
|
86
89
|
"ThumbGate GPT for ChatGPT — preflight risky commands, refunds, deploys, and PR actions, capture typed thumbs-up/down lessons, and route users into local enforcement",
|
|
87
90
|
"Workflow Sentinel — score blast radius before PR, merge, release, and publish actions fire",
|
|
88
91
|
"Workflow architecture checks — distinguish predefined workflows, parallel fan-out, and open-ended agents before execution",
|
|
92
|
+
"Agentic development cycle control — maps Guide, Generate, Verify, and Solve into enforceable pre-action gates before risky tool calls execute",
|
|
89
93
|
"Environment inspection evidence — require read-before-write, screenshots, API response checks, tests, or output validation for open-ended agent loops",
|
|
90
94
|
"Parallel branch budgets — prevent agent desktops and fan-out workflows from silently multiplying token spend",
|
|
91
95
|
"Docker Sandboxes routing — move high-risk local runs into isolated microVM-backed execution",
|
|
@@ -116,7 +120,7 @@ __GA_BOOTSTRAP__
|
|
|
116
120
|
"price": "49",
|
|
117
121
|
"priceCurrency": "USD",
|
|
118
122
|
"description": "Intake-led team rollout with a workflow hardening sprint, shared enforcement memory, org dashboard visibility, approval boundaries, release confidence, Docker Sandboxes guidance for risky local autonomy, and pilot support for teams shipping AI-generated changes",
|
|
119
|
-
"url": "https://thumbgate
|
|
123
|
+
"url": "https://thumbgate.ai/#workflow-sprint-intake"
|
|
120
124
|
},
|
|
121
125
|
{
|
|
122
126
|
"@type": "Offer",
|
|
@@ -124,7 +128,7 @@ __GA_BOOTSTRAP__
|
|
|
124
128
|
"price": "19",
|
|
125
129
|
"priceCurrency": "USD",
|
|
126
130
|
"description": "Self-serve side lane for solo operators who want personal enforcement proof, a local dashboard, DPO export, team lesson export/import, and proof-ready exports",
|
|
127
|
-
"url": "https://thumbgate
|
|
131
|
+
"url": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F"
|
|
128
132
|
},
|
|
129
133
|
{
|
|
130
134
|
"@type": "Offer",
|
|
@@ -132,7 +136,7 @@ __GA_BOOTSTRAP__
|
|
|
132
136
|
"price": "149",
|
|
133
137
|
"priceCurrency": "USD",
|
|
134
138
|
"description": "Annual Pro for individual operators who want personal enforcement proof, the local dashboard, and proof-ready exports",
|
|
135
|
-
"url": "https://thumbgate
|
|
139
|
+
"url": "https://thumbgate.ai/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
|
|
136
140
|
}
|
|
137
141
|
],
|
|
138
142
|
"potentialAction": [
|
|
@@ -141,7 +145,7 @@ __GA_BOOTSTRAP__
|
|
|
141
145
|
"name": "Install ThumbGate Free",
|
|
142
146
|
"target": {
|
|
143
147
|
"@type": "EntryPoint",
|
|
144
|
-
"urlTemplate": "https://thumbgate
|
|
148
|
+
"urlTemplate": "https://thumbgate.ai/guide",
|
|
145
149
|
"actionPlatform": [
|
|
146
150
|
"https://schema.org/DesktopWebPlatform"
|
|
147
151
|
]
|
|
@@ -152,7 +156,7 @@ __GA_BOOTSTRAP__
|
|
|
152
156
|
"name": "Start ThumbGate Pro",
|
|
153
157
|
"target": {
|
|
154
158
|
"@type": "EntryPoint",
|
|
155
|
-
"urlTemplate": "https://thumbgate
|
|
159
|
+
"urlTemplate": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F",
|
|
156
160
|
"actionPlatform": [
|
|
157
161
|
"https://schema.org/DesktopWebPlatform"
|
|
158
162
|
]
|
|
@@ -162,7 +166,7 @@ __GA_BOOTSTRAP__
|
|
|
162
166
|
"name": "Pro Monthly",
|
|
163
167
|
"price": "19",
|
|
164
168
|
"priceCurrency": "USD",
|
|
165
|
-
"url": "https://thumbgate
|
|
169
|
+
"url": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F"
|
|
166
170
|
}
|
|
167
171
|
},
|
|
168
172
|
{
|
|
@@ -170,7 +174,7 @@ __GA_BOOTSTRAP__
|
|
|
170
174
|
"name": "Start Workflow Hardening Sprint intake",
|
|
171
175
|
"target": {
|
|
172
176
|
"@type": "EntryPoint",
|
|
173
|
-
"urlTemplate": "https://thumbgate
|
|
177
|
+
"urlTemplate": "https://thumbgate.ai/#workflow-sprint-intake",
|
|
174
178
|
"actionPlatform": [
|
|
175
179
|
"https://schema.org/DesktopWebPlatform"
|
|
176
180
|
]
|
|
@@ -189,21 +193,21 @@ __GA_BOOTSTRAP__
|
|
|
189
193
|
"provider": {
|
|
190
194
|
"@type": "Organization",
|
|
191
195
|
"name": "ThumbGate",
|
|
192
|
-
"url": "https://thumbgate
|
|
196
|
+
"url": "https://thumbgate.ai"
|
|
193
197
|
},
|
|
194
|
-
"url": "https://thumbgate
|
|
198
|
+
"url": "https://thumbgate.ai/#workflow-sprint-intake",
|
|
195
199
|
"description": "Founder-led workflow hardening for one AI-agent workflow that needs approval boundaries, rollback safety, and rollout proof before wider team rollout.",
|
|
196
200
|
"offers": {
|
|
197
201
|
"@type": "Offer",
|
|
198
202
|
"name": "Workflow Hardening Sprint intake",
|
|
199
|
-
"url": "https://thumbgate
|
|
203
|
+
"url": "https://thumbgate.ai/#workflow-sprint-intake"
|
|
200
204
|
},
|
|
201
205
|
"potentialAction": {
|
|
202
206
|
"@type": "CommunicateAction",
|
|
203
207
|
"name": "Book a workflow hardening intake",
|
|
204
208
|
"target": {
|
|
205
209
|
"@type": "EntryPoint",
|
|
206
|
-
"urlTemplate": "https://thumbgate
|
|
210
|
+
"urlTemplate": "https://thumbgate.ai/#workflow-sprint-intake",
|
|
207
211
|
"actionPlatform": [
|
|
208
212
|
"https://schema.org/DesktopWebPlatform"
|
|
209
213
|
]
|
|
@@ -318,6 +322,14 @@ __GA_BOOTSTRAP__
|
|
|
318
322
|
"text": "Prompt rules are suggestions agents can ignore. Pre-Action Checks are enforcement — they block the action before execution via PreToolUse hooks. Checks are auto-generated from feedback and use Thompson Sampling to adapt."
|
|
319
323
|
}
|
|
320
324
|
},
|
|
325
|
+
{
|
|
326
|
+
"@type": "Question",
|
|
327
|
+
"name": "How does ThumbGate fit the agentic development cycle?",
|
|
328
|
+
"acceptedAnswer": {
|
|
329
|
+
"@type": "Answer",
|
|
330
|
+
"text": "Agentic development is converging around Guide, Generate, Verify, and Solve. ThumbGate adds the execution-control layer between those stages: project guidance and feedback become rules, generated tool calls are checked before execution, verification evidence is required for risky actions, and solved failures become reusable prevention gates."
|
|
331
|
+
}
|
|
332
|
+
},
|
|
321
333
|
{
|
|
322
334
|
"@type": "Question",
|
|
323
335
|
"name": "How does ThumbGate prevent AI slop and protect brand authenticity?",
|
|
@@ -411,6 +423,10 @@ __GA_BOOTSTRAP__
|
|
|
411
423
|
.hero-actions .hero-install { margin-bottom: 0; font-size: 18px; padding: 14px 22px; border: 1px solid rgba(34,211,238,0.55); background: rgba(34,211,238,0.07); box-shadow: none; }
|
|
412
424
|
.hero-actions .btn-install-hero { font-size: 16px; padding: 14px 22px; }
|
|
413
425
|
.hero-actions .hero-diagnostic { font-size: 16px; padding: 14px 22px; background: var(--green); color: #06120a; font-weight: 800; box-shadow: none; }
|
|
426
|
+
.offer-router{max-width:940px;margin:18px auto 22px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;text-align:left}
|
|
427
|
+
.offer-route{border:1px solid rgba(34,211,238,.18);background:rgba(17,17,19,.72);border-radius:8px;padding:14px}
|
|
428
|
+
.offer-route strong{display:block;color:var(--text);font-size:14px;margin-bottom:6px}.offer-route p{margin:0 0 10px;color:var(--text-muted);font-size:13px}
|
|
429
|
+
.offer-route a,.offer-route button{color:var(--cyan);font-weight:800;font-size:13px;text-decoration:none;background:transparent;border:0;padding:0;cursor:pointer}.offer-route.primary{background:rgba(34,211,238,.07)}
|
|
414
430
|
.btn-pro-page { display: inline-flex; align-items: center; justify-content: center; padding: 11px 18px; background: var(--cyan); color: var(--bg); border-radius: 999px; text-decoration: none; font-size: 14px; font-weight: 700; box-shadow: 0 0 0 1px rgba(34,211,238,0.28), 0 12px 32px rgba(34,211,238,0.18); transition: opacity 0.15s, transform 0.15s; }
|
|
415
431
|
.btn-pro-page:hover { opacity: 0.9; transform: translateY(-1px); }
|
|
416
432
|
.btn-gpt-page { display: inline-flex; align-items: center; justify-content: center; padding: 14px 32px; background: var(--green); color: #06120a; border-radius: 8px; text-decoration: none; font-size: 16px; font-weight: 800; box-shadow: 0 0 0 1px rgba(74,222,128,0.32), 0 12px 32px rgba(74,222,128,0.18); transition: opacity 0.15s, transform 0.15s; }
|
|
@@ -654,6 +670,7 @@ __GA_BOOTSTRAP__
|
|
|
654
670
|
.hero { padding: 72px 0 56px; }
|
|
655
671
|
.hero-actions { flex-direction: column; }
|
|
656
672
|
.hero-actions a { width: 100%; }
|
|
673
|
+
.offer-router { grid-template-columns: 1fr; }
|
|
657
674
|
.hero-paid-actions { justify-content: center; }
|
|
658
675
|
.hero-paid-actions a { width: 100%; }
|
|
659
676
|
.nav-links a:not(.nav-cta) { display: none; }
|
|
@@ -695,7 +712,7 @@ __GA_BOOTSTRAP__
|
|
|
695
712
|
<a href="#claude-code-section" class="nav-claude" onclick="posthog.capture('nav_claude_click')" style="display:none;">Claude</a>
|
|
696
713
|
<a href="#workflow-sprint-intake" onclick="posthog.capture('workflow_sprint')" style="display:none;">Start Sprint</a>
|
|
697
714
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" target="_blank" rel="noopener" onclick="posthog.capture('nav_claude_extension_click',{cta:'install_claude_extension'})" class="nav-cta" style="background:#d97706;display:none;">Claude Extension</a>
|
|
698
|
-
<a href="/
|
|
715
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=nav&utm_campaign=pro_upgrade&cta_id=nav_start_pro&cta_placement=nav&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="nav_start_pro" data-cta-placement="nav" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('nav_pro_click',{cta:'nav_start_pro',tier:'pro',price:19})}catch(_){}" class="nav-cta">Start Pro — $19/mo</a>
|
|
699
716
|
</div>
|
|
700
717
|
</div>
|
|
701
718
|
</nav>
|
|
@@ -714,14 +731,27 @@ __GA_BOOTSTRAP__
|
|
|
714
731
|
</div>
|
|
715
732
|
|
|
716
733
|
<div class="hero-actions">
|
|
717
|
-
<
|
|
718
|
-
<span class="prompt">$</span>
|
|
719
|
-
<span class="cmd">npx thumbgate init</span>
|
|
720
|
-
<span class="copy-hint">click to copy</span>
|
|
721
|
-
</div>
|
|
722
|
-
<a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied ✓ — paste in your repo'; setTimeout(()=>{this.textContent='Install Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-gpt-page btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
|
|
734
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=hero_cta&utm_campaign=pro_upgrade&cta_id=hero_start_pro&cta_placement=hero&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="hero_start_pro" data-cta-placement="hero" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('hero_pro_checkout_click',{cta:'hero_start_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro-page hero-pro hero-pro-primary">Start Pro — $19/mo</a>
|
|
723
735
|
<a href="#workflow-sprint-intake" onclick="try{posthog.capture('hero_sprint_click',{cta:'sprint_intake'})}catch(_){};sendFirstPartyTelemetry('hero_sprint_intake_started',{ctaId:'hero_workflow_sprint',ctaPlacement:'hero',offer:'workflow_sprint'});" class="btn-pro-page hero-pro">Talk to me — Workflow Hardening Sprint →</a>
|
|
724
|
-
<a href="
|
|
736
|
+
<a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied ✓ — paste in your repo'; setTimeout(()=>{this.textContent='Install Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-gpt-page btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
|
|
737
|
+
</div>
|
|
738
|
+
|
|
739
|
+
<div class="offer-router" aria-label="Choose the right ThumbGate path">
|
|
740
|
+
<div class="offer-route primary">
|
|
741
|
+
<strong>Solo operator: Start Pro</strong>
|
|
742
|
+
<p>Sync, proof, exports.</p>
|
|
743
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=offer_router&cta_id=router_start_pro&cta_placement=offer_router&plan_id=pro" data-revenue-cta data-cta-id="router_start_pro" data-cta-placement="offer_router" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Pay $19/mo with Stripe →</a>
|
|
744
|
+
</div>
|
|
745
|
+
<div class="offer-route">
|
|
746
|
+
<strong>Team workflow: Start with intake</strong>
|
|
747
|
+
<p>Proof before rollout.</p>
|
|
748
|
+
<a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Send the workflow first →</a>
|
|
749
|
+
</div>
|
|
750
|
+
<div class="offer-route">
|
|
751
|
+
<strong>Still evaluating: Free CLI</strong>
|
|
752
|
+
<p>Local proof first.</p>
|
|
753
|
+
<button data-router-install onclick="copyInstall(this)"><span class="copy-hint">Copy npx thumbgate init</span></button>
|
|
754
|
+
</div>
|
|
725
755
|
</div>
|
|
726
756
|
|
|
727
757
|
<div class="hero-trust-bar">
|
|
@@ -764,7 +794,6 @@ __GA_BOOTSTRAP__
|
|
|
764
794
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/THUMBGATE_BENCH.md" target="_blank" rel="noopener">ThumbGate Bench</a>
|
|
765
795
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/RELEASE_CONFIDENCE.md" target="_blank" rel="noopener">Release confidence</a>
|
|
766
796
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">Proof-backed CI</a>
|
|
767
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">CI and proof lanes</a>
|
|
768
797
|
<a href="#compatibility">Claude Code · Cursor · Codex · Gemini · Amp · Cline · OpenCode</a>
|
|
769
798
|
</nav>
|
|
770
799
|
<div class="marketing-test-copy" hidden>
|
|
@@ -792,6 +821,36 @@ __GA_BOOTSTRAP__
|
|
|
792
821
|
</div>
|
|
793
822
|
</section>
|
|
794
823
|
|
|
824
|
+
<section class="compatibility" id="agentic-development-cycle">
|
|
825
|
+
<div class="container">
|
|
826
|
+
<div class="section-label">Agentic Development Cycle</div>
|
|
827
|
+
<h2 class="section-title">Guide, Generate, Verify, Solve still needs an execution gate.</h2>
|
|
828
|
+
<p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:900px;margin:0 auto 28px;line-height:1.7;">The market is converging on agentic development as a control loop, not a code-generation trick. <a href="https://thenewstack.io/agentic-development-cycle-framework/" target="_blank" rel="noopener" style="color:var(--cyan);text-decoration:underline;">The New Stack's May 2026 AC/DC framing</a> names the core stages: Guide, Generate, Verify, and Solve. ThumbGate gives that loop a hard pre-action boundary so agent work is governed before it touches files, terminals, CI, payments, or production systems.</p>
|
|
829
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;max-width:1080px;margin:0 auto;">
|
|
830
|
+
<div class="compat-card" style="cursor:default;">
|
|
831
|
+
<h3>Guide</h3>
|
|
832
|
+
<p>Rules, standards, past thumbs-downs, workflow boundaries, and approval policies are loaded as concrete operating context instead of vague prompt advice.</p>
|
|
833
|
+
</div>
|
|
834
|
+
<div class="compat-card" style="cursor:default;">
|
|
835
|
+
<h3>Generate</h3>
|
|
836
|
+
<p>Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible agents keep generating plans, edits, and tool calls.</p>
|
|
837
|
+
</div>
|
|
838
|
+
<div class="compat-card" style="cursor:default;">
|
|
839
|
+
<h3>Verify</h3>
|
|
840
|
+
<p>Pre-Action Checks require inspection evidence, tests, CI, screenshots, API responses, or human approval before high-risk actions proceed.</p>
|
|
841
|
+
</div>
|
|
842
|
+
<div class="compat-card" style="cursor:default;">
|
|
843
|
+
<h3>Solve</h3>
|
|
844
|
+
<p>Blocked failures and accepted fixes become lessons, shared rules, DPO exports, and audit events so the same mistake is not paid for again.</p>
|
|
845
|
+
</div>
|
|
846
|
+
</div>
|
|
847
|
+
<div style="max-width:900px;margin:22px auto 0;padding:16px 18px;border:1px solid rgba(74,222,128,0.28);border-radius:8px;background:rgba(74,222,128,0.07);">
|
|
848
|
+
<strong style="display:block;color:var(--green);margin-bottom:6px;">ThumbGate's role: the pre-action gate between generated intent and executed action.</strong>
|
|
849
|
+
<p style="margin:0;color:var(--text-muted);font-size:14px;line-height:1.65;">Verification after a pull request is useful, but it is too late for force-pushes, destructive SQL, unsafe deploys, leaked secrets, and costly external API calls. ThumbGate checks the action before it runs, then feeds the result back into the next Guide and Solve cycle.</p>
|
|
850
|
+
</div>
|
|
851
|
+
</div>
|
|
852
|
+
</section>
|
|
853
|
+
|
|
795
854
|
<!-- CODE EXAMPLE — moved up for conversion: show the product immediately after hero -->
|
|
796
855
|
<section class="code-section">
|
|
797
856
|
<div class="container">
|
|
@@ -817,6 +876,37 @@ __GA_BOOTSTRAP__
|
|
|
817
876
|
</div>
|
|
818
877
|
</section>
|
|
819
878
|
|
|
879
|
+
<section class="compatibility" id="deterministic-prevention">
|
|
880
|
+
<div class="container">
|
|
881
|
+
<div class="section-label">Deterministic Prevention</div>
|
|
882
|
+
<h2 class="section-title">Native thumbs are a black box. ThumbGate is the inspectable control layer.</h2>
|
|
883
|
+
<p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:900px;margin:0 auto 28px;line-height:1.7;">Codex, Claude Code, ChatGPT, and other agent surfaces can collect preference signals, but you usually cannot see exactly what changed, which rule will fire, or why a future tool call is allowed. ThumbGate keeps the prevention layer outside the model: typed feedback becomes a local lesson, repeated mistakes become explicit rules, and every block names the matched rule, source lesson, tool call, and audit event.</p>
|
|
884
|
+
<div class="agent-grid">
|
|
885
|
+
<div class="agent-card">
|
|
886
|
+
<h3>Black-box memory</h3>
|
|
887
|
+
<p>Native thumbs and vendor memories may improve future behavior, but they do not give teams a deterministic allow/block contract at the moment an agent touches files, terminals, APIs, or CI.</p>
|
|
888
|
+
</div>
|
|
889
|
+
<div class="agent-card">
|
|
890
|
+
<h3>Inspectable ThumbGate memory</h3>
|
|
891
|
+
<p>Lessons live in your ThumbGate store, can be searched, exported as JSONL or DPO pairs, and traced back to the exact correction that created the rule.</p>
|
|
892
|
+
</div>
|
|
893
|
+
<div class="agent-card">
|
|
894
|
+
<h3>Rules before execution</h3>
|
|
895
|
+
<p>The final decision is not another model opinion. ThumbGate checks tool name, arguments, working directory, command shape, confidence, and required evidence before the action runs.</p>
|
|
896
|
+
</div>
|
|
897
|
+
</div>
|
|
898
|
+
<div style="margin:26px auto 0;max-width:960px;border:1px solid rgba(34,211,238,0.18);border-radius:8px;background:rgba(34,211,238,0.05);padding:18px 20px;">
|
|
899
|
+
<h3 style="margin:0 0 10px;color:var(--text);font-size:18px;">Why this matters now</h3>
|
|
900
|
+
<ul style="margin:0;padding-left:20px;color:var(--text-muted);line-height:1.7;">
|
|
901
|
+
<li><strong>Agent security is now mainstream risk.</strong> Coding agents run shell commands, write files, query databases, and chain actions with developer permissions, so unattended autonomy needs a local policy boundary.</li>
|
|
902
|
+
<li><strong>MCP adoption is accelerating.</strong> More tools are becoming agent-callable through shared protocols, which means one cross-agent governance layer beats one-off prompt rules per app.</li>
|
|
903
|
+
<li><strong>Repeated failures waste cash and trust.</strong> Every repeat burns tokens, review time, and release confidence. ThumbGate turns the first correction into a reusable prevention check.</li>
|
|
904
|
+
</ul>
|
|
905
|
+
<p style="margin:12px 0 0;font-size:13px;color:var(--text-dim);">Sources to verify the market timing: <a href="https://www.docker.com/blog/ai-coding-agent-horror-stories-security-risks/" target="_blank" rel="noopener" style="color:var(--cyan);">Docker on AI coding agent security risks</a>, <a href="https://www.techradar.com/pro/how-ai-agents-are-wrecking-havoc-in-legacy-security-setups-and-enterprises-are-catching-up" target="_blank" rel="noopener" style="color:var(--cyan);">TechRadar on enterprise agent security pressure</a>, and <a href="https://www.techradar.com/pro/zendesk-becomes-the-latest-to-adopt-mcp-to-futureproof-customers-in-the-ai-first-era" target="_blank" rel="noopener" style="color:var(--cyan);">current MCP adoption coverage</a>.</p>
|
|
906
|
+
</div>
|
|
907
|
+
</div>
|
|
908
|
+
</section>
|
|
909
|
+
|
|
820
910
|
<section class="marketing-deep-dive" style="padding:28px 0 10px;">
|
|
821
911
|
<div class="container" style="max-width:1240px;">
|
|
822
912
|
<div class="section-label">Status bar proof</div>
|
|
@@ -1074,7 +1164,7 @@ __GA_BOOTSTRAP__
|
|
|
1074
1164
|
</div>
|
|
1075
1165
|
<div class="autoresearch-cta">
|
|
1076
1166
|
<a class="primary" href="/guides/autoresearch-agent-safety?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_guide&cta_placement=autoresearch_pack">Read the Autoresearch guide</a>
|
|
1077
|
-
<a class="secondary" href="/checkout/pro?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_pro_checkout&cta_placement=autoresearch_pack&plan_id=pro&landing_path=%2F">Start Pro</a>
|
|
1167
|
+
<a class="secondary" href="/checkout/pro?utm_source=website&utm_medium=autoresearch_pack&utm_campaign=autoresearch_safety&cta_id=autoresearch_pro_checkout&cta_placement=autoresearch_pack&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="autoresearch_pro_checkout" data-cta-placement="autoresearch_pack" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Start Pro</a>
|
|
1078
1168
|
</div>
|
|
1079
1169
|
</div>
|
|
1080
1170
|
</div>
|
|
@@ -1254,10 +1344,10 @@ __GA_BOOTSTRAP__
|
|
|
1254
1344
|
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
1255
1345
|
<div class="price">$0</div>
|
|
1256
1346
|
<div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
|
|
1257
|
-
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">
|
|
1347
|
+
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">5 captures/day, 3 active rules. Enough to see the value — upgrade when you need more.</p>
|
|
1258
1348
|
<ul>
|
|
1259
|
-
<li><strong>
|
|
1260
|
-
<li>Up to
|
|
1349
|
+
<li><strong>5 feedback captures/day</strong> — 25 total on Free, then Pro for unlimited</li>
|
|
1350
|
+
<li>Up to 3 active auto-promoted prevention rules</li>
|
|
1261
1351
|
<li>No recall or lesson search</li>
|
|
1262
1352
|
<li>No exports (DPO, Databricks, HuggingFace)</li>
|
|
1263
1353
|
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, any MCP agent)</li>
|
|
@@ -1276,7 +1366,7 @@ __GA_BOOTSTRAP__
|
|
|
1276
1366
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
1277
1367
|
<div class="price-sub"><strong>The free npm package runs your gates locally and never expires.</strong> Pro is what we operate for you: hosted lesson sync across all your machines, adapter matrix kept current as agent runtimes ship breaking changes, and a dashboard you don't have to babysit.</div>
|
|
1278
1368
|
<ul>
|
|
1279
|
-
<li><strong>Block every repeat mistake</strong> — unlimited feedback captures and prevention rules (Free caps at
|
|
1369
|
+
<li><strong>Block every repeat mistake</strong> — unlimited feedback captures and prevention rules (Free caps at 3 active rules)</li>
|
|
1280
1370
|
<li><strong>Never re-explain a correction</strong> — lesson recall and search across sessions on every agent surface</li>
|
|
1281
1371
|
<li><strong>See exactly which rule fired</strong> — <a href="/dashboard#insights" style="color:var(--cyan);text-decoration:underline;">Visual check debugger</a> for every blocked action and the check that fired</li>
|
|
1282
1372
|
<li><strong>One install, every agent</strong> — Auto-connect so supported agents appear automatically after setup (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode)</li>
|
|
@@ -1291,7 +1381,7 @@ __GA_BOOTSTRAP__
|
|
|
1291
1381
|
<div style="font-family:var(--mono);font-size:12px;color:var(--cyan);line-height:1.6;">checks: 36 active<br>feedback: unlimited<br>exports: DPO + lessons</div>
|
|
1292
1382
|
</div>
|
|
1293
1383
|
<div style="font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:var(--cyan);font-weight:800;margin-bottom:8px;">PAY-NOW PRO</div>
|
|
1294
|
-
<a href="/checkout/pro?utm_source=pricing&utm_medium=cta&utm_campaign=v2_landing&utm_content=pricing_pro&plan_id=pro" id="pro-checkout-link" class="btn-pro" onclick="handleProCheckout();return false;" style="display:block;width:100%;text-align:center;padding:12px;font-size:15px;">Upgrade to Pro — $19/mo</a>
|
|
1384
|
+
<a href="/checkout/pro?utm_source=pricing&utm_medium=cta&utm_campaign=v2_landing&utm_content=pricing_pro&cta_id=pricing_pro_checkout&cta_placement=pricing&plan_id=pro&landing_path=%2F" id="pro-checkout-link" class="btn-pro" data-revenue-cta data-cta-id="pricing_pro_checkout" data-cta-placement="pricing" data-tier="pro" data-plan-id="pro" data-price="19" onclick="handleProCheckout();return false;" style="display:block;width:100%;text-align:center;padding:12px;font-size:15px;">Upgrade to Pro — $19/mo</a>
|
|
1295
1385
|
<p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today · cancel anytime.</p>
|
|
1296
1386
|
<input type="email" id="pro-email" data-buyer-email placeholder="you@company.com" style="margin-top:10px;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg-raised);color:var(--text);font-size:14px;">
|
|
1297
1387
|
</div>
|
|
@@ -1428,7 +1518,7 @@ __GA_BOOTSTRAP__
|
|
|
1428
1518
|
</div>
|
|
1429
1519
|
<div class="faq-item">
|
|
1430
1520
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Do I need a cloud account?</div>
|
|
1431
|
-
<div class="faq-a">No. Free keeps local enforcement on your machine with
|
|
1521
|
+
<div class="faq-a">No. Free keeps local enforcement on your machine with 5 feedback captures/day, up to 3 active auto-promoted prevention rules, built-in safety checks, and hook blocking. Recall, lesson search, unlimited rules, unlimited captures, and exports open up on Pro. No cloud account is required. The business starts when a team wants shared rules, approval boundaries, hosted review views, org dashboard visibility, and proof that survives handoffs. Pro is the optional solo side lane for a personal dashboard, DPO export, and team lesson export/import — share lessons across projects so one team's mistakes become every team's prevention rules.</div>
|
|
1432
1522
|
</div>
|
|
1433
1523
|
<div class="faq-item">
|
|
1434
1524
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What if my thumbs-down is vague?</div>
|
|
@@ -1438,6 +1528,10 @@ __GA_BOOTSTRAP__
|
|
|
1438
1528
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How are pre-action checks different from prompt rules?</div>
|
|
1439
1529
|
<div class="faq-a">Prompt rules are a starting point, not a finish line. Without prompt evaluation you do not know whether they still hold up under real tool use. ThumbGate adds the human-in-the-loop measurement loop and the enforcement layer: proof lanes, ThumbGate Bench, and self-heal checks show whether behavior improved, and Pre-Action Checks block the action before execution when it did not.</div>
|
|
1440
1530
|
</div>
|
|
1531
|
+
<div class="faq-item">
|
|
1532
|
+
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How does ThumbGate fit the agentic development cycle?</div>
|
|
1533
|
+
<div class="faq-a">Agentic development is not just generation. Teams need Guide, Generate, Verify, and Solve working as a repeatable loop. ThumbGate is the pre-action execution gate in that loop: guidance and feedback become rules, generated tool calls are checked before execution, verification evidence is required for risky actions, and solved failures become reusable prevention gates.</div>
|
|
1534
|
+
</div>
|
|
1441
1535
|
<div class="faq-item">
|
|
1442
1536
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
1443
1537
|
<div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills immediately through Stripe. Team is $49/seat/mo with a 3-seat minimum and starts through the workflow intake so scope, shared rules, and rollout proof are explicit before a team rollout.</div>
|
|
@@ -1475,7 +1569,7 @@ __GA_BOOTSTRAP__
|
|
|
1475
1569
|
</div>
|
|
1476
1570
|
<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;align-items:center;margin-top:12px;opacity:0.7;">
|
|
1477
1571
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" class="btn-gpt-page" target="_blank" rel="noopener" onclick="posthog.capture('final_claude_extension_click',{cta:'install_claude_extension'})" style="padding:8px 16px;font-size:12px;background:#d97706;color:#fff;">Install Claude Extension</a>
|
|
1478
|
-
<a href="/
|
|
1572
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=final_cta&utm_campaign=pro_upgrade&cta_id=final_go_pro&cta_placement=final_cta&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="final_go_pro" data-cta-placement="final_cta" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('final_pro_click',{cta:'final_go_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro" style="padding:8px 16px;font-size:12px;opacity:0.85;">Upgrade to Pro — $19/mo</a>
|
|
1479
1573
|
<a href="#workflow-sprint-intake" class="btn-team" style="padding:8px 16px;font-size:12px;">Start Workflow Hardening Sprint</a>
|
|
1480
1574
|
</div>
|
|
1481
1575
|
</div>
|
|
@@ -1492,7 +1586,7 @@ __GA_BOOTSTRAP__
|
|
|
1492
1586
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1493
1587
|
<a href="/blog">Blog</a>
|
|
1494
1588
|
</div>
|
|
1495
|
-
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.23.
|
|
1589
|
+
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.23.2</span>
|
|
1496
1590
|
</div>
|
|
1497
1591
|
</footer>
|
|
1498
1592
|
|
|
@@ -1504,7 +1598,7 @@ __GA_BOOTSTRAP__
|
|
|
1504
1598
|
<span class="cmd">npx thumbgate init</span>
|
|
1505
1599
|
<span class="copy-hint">copy</span>
|
|
1506
1600
|
</div>
|
|
1507
|
-
<a href="/
|
|
1601
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=sticky_cta&utm_campaign=pro_upgrade&cta_id=sticky_go_pro&cta_placement=sticky_cta&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="sticky_go_pro" data-cta-placement="sticky_cta" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('sticky_pro_click',{cta:'sticky_go_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro" style="padding:8px 16px;font-size:12px;border-radius:6px;white-space:nowrap;">Go Pro — $19/mo</a>
|
|
1508
1602
|
</div>
|
|
1509
1603
|
<script>
|
|
1510
1604
|
(function() {
|
|
@@ -1582,6 +1676,53 @@ function sendGa4Event(eventName, params) {
|
|
|
1582
1676
|
globalThis.gtag('event', eventName, params || {});
|
|
1583
1677
|
}
|
|
1584
1678
|
|
|
1679
|
+
function readRevenueCtaMeta(el) {
|
|
1680
|
+
var label = (el && el.textContent ? el.textContent : '').trim().substring(0, 80);
|
|
1681
|
+
var section = el && el.closest ? el.closest('section') : null;
|
|
1682
|
+
var fallbackPlacement = section ? (section.id || String(section.className || '').split(' ')[0] || 'unknown') : 'unknown';
|
|
1683
|
+
return {
|
|
1684
|
+
ctaId: (el && el.dataset && el.dataset.ctaId) || 'pro_checkout',
|
|
1685
|
+
ctaPlacement: (el && el.dataset && el.dataset.ctaPlacement) || fallbackPlacement,
|
|
1686
|
+
tier: (el && el.dataset && el.dataset.tier) || 'pro',
|
|
1687
|
+
planId: (el && el.dataset && el.dataset.planId) || 'pro',
|
|
1688
|
+
price: Number((el && el.dataset && el.dataset.price) || proPriceDollars || 19),
|
|
1689
|
+
billing: (el && el.dataset && el.dataset.billing) || 'monthly',
|
|
1690
|
+
label: label,
|
|
1691
|
+
};
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
function trackRevenueCta(el) {
|
|
1695
|
+
var meta = readRevenueCtaMeta(el);
|
|
1696
|
+
var plausibleProps = {
|
|
1697
|
+
cta: meta.ctaId,
|
|
1698
|
+
cta_id: meta.ctaId,
|
|
1699
|
+
section: meta.ctaPlacement,
|
|
1700
|
+
tier: meta.tier,
|
|
1701
|
+
plan_id: meta.planId,
|
|
1702
|
+
price: meta.price,
|
|
1703
|
+
billing: meta.billing,
|
|
1704
|
+
label: meta.label,
|
|
1705
|
+
};
|
|
1706
|
+
if (typeof plausible === 'function') {
|
|
1707
|
+
plausible('pricing_cta_click', { props: plausibleProps });
|
|
1708
|
+
plausible('checkout_start', { props: plausibleProps });
|
|
1709
|
+
}
|
|
1710
|
+
sendFirstPartyTelemetry('cta_click', {
|
|
1711
|
+
ctaId: meta.ctaId,
|
|
1712
|
+
ctaPlacement: meta.ctaPlacement,
|
|
1713
|
+
planId: meta.planId,
|
|
1714
|
+
tier: meta.tier,
|
|
1715
|
+
price: meta.price,
|
|
1716
|
+
billing: meta.billing,
|
|
1717
|
+
label: meta.label,
|
|
1718
|
+
});
|
|
1719
|
+
sendGa4Event('begin_checkout', {
|
|
1720
|
+
currency: 'USD',
|
|
1721
|
+
value: meta.price,
|
|
1722
|
+
items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
|
|
1723
|
+
});
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1585
1726
|
function initializeTeamIntakeTelemetry() {
|
|
1586
1727
|
document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
|
|
1587
1728
|
var started = false;
|
|
@@ -1680,7 +1821,7 @@ function copyInstall(el) {
|
|
|
1680
1821
|
window.handleFaqKeydown = handleFaqKeydown;
|
|
1681
1822
|
|
|
1682
1823
|
/* CTA clicks */
|
|
1683
|
-
trackClick('.btn-pro', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
|
|
1824
|
+
trackClick('.btn-pro:not([data-revenue-cta])', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
|
|
1684
1825
|
trackClick('.btn-gpt-page:not(.btn-install-hero)', 'chatgpt_gpt_click', { tier: 'free', source: 'homepage_gpt' });
|
|
1685
1826
|
trackClick('.btn-install-hero', 'install_guide_click', { tier: 'free', source: 'hero_install' });
|
|
1686
1827
|
trackClick('.btn-pro-page:not(.btn-install-link)', 'pro_page_click', { tier: 'pro', source: 'hero' });
|
|
@@ -1688,12 +1829,13 @@ function copyInstall(el) {
|
|
|
1688
1829
|
trackClick('.btn-team', 'workflow_sprint_intake_click', { tier: 'team', offer: 'workflow_hardening_sprint' });
|
|
1689
1830
|
trackClick('.btn-free', 'install_click', { tier: 'free' });
|
|
1690
1831
|
trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
|
|
1691
|
-
trackClick('.nav-cta', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
|
|
1832
|
+
trackClick('.nav-cta:not([data-revenue-cta])', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
|
|
1692
1833
|
|
|
1693
1834
|
/* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
|
|
1694
1835
|
with section context so we can distinguish pricing section vs final CTA section clicks */
|
|
1695
1836
|
document.querySelectorAll('.btn-pro, .btn-gpt-page, .btn-pro-page, .btn-install-hero, .btn-install-link, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
|
|
1696
1837
|
el.addEventListener('click', function() {
|
|
1838
|
+
if (el.hasAttribute('data-revenue-cta')) return;
|
|
1697
1839
|
var section = el.closest('section');
|
|
1698
1840
|
var sectionId = section ? (section.id || section.className.split(' ')[0] || 'unknown') : 'unknown';
|
|
1699
1841
|
var tier = resolvePricingClickTier(el);
|
|
@@ -1752,8 +1894,10 @@ function copyInstall(el) {
|
|
|
1752
1894
|
ctaImpressions: [
|
|
1753
1895
|
{ selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1754
1896
|
{ selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1755
|
-
{ selector: '.
|
|
1756
|
-
{ selector: '.hero-actions .hero-pro', ctaId: '
|
|
1897
|
+
{ selector: '.nav-cta[data-revenue-cta]', ctaId: 'nav_start_pro', ctaPlacement: 'nav', planId: 'pro' },
|
|
1898
|
+
{ selector: '.hero-actions .hero-pro-primary', ctaId: 'hero_start_pro', ctaPlacement: 'hero', planId: 'pro' },
|
|
1899
|
+
{ selector: '.hero-actions .btn-pro-page:not(.hero-pro-primary)', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
|
|
1900
|
+
{ selector: '.hero-actions .hero-pro:not(.hero-pro-primary)', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
|
|
1757
1901
|
{ selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
|
|
1758
1902
|
{ selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
|
|
1759
1903
|
{ selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
|
|
@@ -1768,6 +1912,8 @@ initializeTeamIntakeTelemetry();
|
|
|
1768
1912
|
async function handleProCheckout() {
|
|
1769
1913
|
var buyerIntent = globalThis.ThumbGateBuyerIntent;
|
|
1770
1914
|
var email = document.getElementById('pro-email');
|
|
1915
|
+
var checkoutLink = document.getElementById('pro-checkout-link');
|
|
1916
|
+
trackRevenueCta(checkoutLink);
|
|
1771
1917
|
var normalizedEmail = buyerIntent.normalizeBuyerEmail(email && email.value);
|
|
1772
1918
|
if (!email || !buyerIntent.isValidBuyerEmail(normalizedEmail)) {
|
|
1773
1919
|
email.style.border = '2px solid #f87171';
|
|
@@ -1782,16 +1928,10 @@ async function handleProCheckout() {
|
|
|
1782
1928
|
if (globalThis.buyerJourney && typeof globalThis.buyerJourney.markEmailCaptured === 'function') {
|
|
1783
1929
|
globalThis.buyerJourney.markEmailCaptured();
|
|
1784
1930
|
}
|
|
1785
|
-
var checkoutLink = document.getElementById('pro-checkout-link');
|
|
1786
1931
|
var checkoutUrl = checkoutLink ? checkoutLink.href : '/checkout/pro';
|
|
1787
1932
|
if (typeof plausible === 'function') {
|
|
1788
1933
|
plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
|
|
1789
1934
|
}
|
|
1790
|
-
sendGa4Event('begin_checkout', {
|
|
1791
|
-
currency: 'USD',
|
|
1792
|
-
value: proPriceDollars,
|
|
1793
|
-
items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
|
|
1794
|
-
});
|
|
1795
1935
|
try {
|
|
1796
1936
|
await buyerIntent.submitNewsletterSignup(normalizedEmail);
|
|
1797
1937
|
} catch (_err) {
|
package/public/learn.html
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
<meta property="og:title" content="Learn — AI Agent Safety Guides by ThumbGate">
|
|
11
11
|
<meta property="og:description" content="Practical guides for stopping AI coding agent mistakes with pre-action checks and feedback-driven enforcement.">
|
|
12
12
|
<meta property="og:type" content="website">
|
|
13
|
-
<meta property="og:url" content="https://thumbgate
|
|
14
|
-
<link rel="canonical" href="https://thumbgate
|
|
13
|
+
<meta property="og:url" content="https://thumbgate.ai/learn">
|
|
14
|
+
<link rel="canonical" href="https://thumbgate.ai/learn">
|
|
15
15
|
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
16
16
|
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
17
17
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"@type": "CollectionPage",
|
|
22
22
|
"name": "ThumbGate Learning Hub",
|
|
23
23
|
"description": "Practical guides for AI coding agent safety, pre-action checks, and vibe coding guardrails.",
|
|
24
|
-
"url": "https://thumbgate
|
|
24
|
+
"url": "https://thumbgate.ai/learn",
|
|
25
25
|
"dateModified": "2026-04-20",
|
|
26
26
|
"author": {
|
|
27
27
|
"@type": "Person",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"publisher": {
|
|
36
36
|
"@type": "Organization",
|
|
37
37
|
"name": "ThumbGate",
|
|
38
|
-
"url": "https://thumbgate
|
|
38
|
+
"url": "https://thumbgate.ai"
|
|
39
39
|
},
|
|
40
40
|
"mainEntity": {
|
|
41
41
|
"@type": "ItemList",
|
|
@@ -43,36 +43,42 @@
|
|
|
43
43
|
{
|
|
44
44
|
"@type": "ListItem",
|
|
45
45
|
"position": 1,
|
|
46
|
-
"url": "https://thumbgate
|
|
46
|
+
"url": "https://thumbgate.ai/learn/stop-ai-agent-force-push",
|
|
47
47
|
"name": "How to Stop AI Agents From Force-Pushing to Main"
|
|
48
48
|
},
|
|
49
49
|
{
|
|
50
50
|
"@type": "ListItem",
|
|
51
51
|
"position": 2,
|
|
52
|
-
"url": "https://thumbgate
|
|
52
|
+
"url": "https://thumbgate.ai/learn/vibe-coding-safety-net",
|
|
53
53
|
"name": "The Vibe Coding Safety Net You Are Missing"
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
"@type": "ListItem",
|
|
57
57
|
"position": 3,
|
|
58
|
-
"url": "https://thumbgate
|
|
58
|
+
"url": "https://thumbgate.ai/learn/mcp-pre-action-checks-explained",
|
|
59
59
|
"name": "MCP Pre-Action Checks Explained"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"@type": "ListItem",
|
|
63
63
|
"position": 4,
|
|
64
|
-
"url": "https://thumbgate
|
|
64
|
+
"url": "https://thumbgate.ai/learn/agent-harness-pattern",
|
|
65
65
|
"name": "The Agent Harness Pattern: Why Your AI Needs a Seatbelt"
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"@type": "ListItem",
|
|
69
69
|
"position": 5,
|
|
70
|
-
"url": "https://thumbgate
|
|
71
|
-
"name": "
|
|
70
|
+
"url": "https://thumbgate.ai/learn/background-agent-control-layer",
|
|
71
|
+
"name": "Background Agents Need a Control Layer Outside the Model"
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
"@type": "ListItem",
|
|
75
75
|
"position": 6,
|
|
76
|
+
"url": "https://thumbgate.ai/learn/ai-agent-persistent-memory",
|
|
77
|
+
"name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"@type": "ListItem",
|
|
81
|
+
"position": 7,
|
|
76
82
|
"url": "https://thumbgate.ai/learn/from-prototype-to-production",
|
|
77
83
|
"name": "From git init to v1.17.0 in 70 days: an honest ThumbGate build log"
|
|
78
84
|
},
|
|
@@ -297,6 +303,14 @@
|
|
|
297
303
|
<span class="article-tag">Shared Memory</span>
|
|
298
304
|
</a>
|
|
299
305
|
|
|
306
|
+
<a href="/learn/background-agent-control-layer" class="article-card">
|
|
307
|
+
<h3>Background Agents Need a Control Layer Outside the Model</h3>
|
|
308
|
+
<p>Agents can produce work. Production teams still need triggers, isolated runs, context, visibility, and controls. This is where ThumbGate fits in the AI-SDLC stack.</p>
|
|
309
|
+
<span class="article-tag">Background Agents</span>
|
|
310
|
+
<span class="article-tag">AI-SDLC</span>
|
|
311
|
+
<span class="article-tag">Controls</span>
|
|
312
|
+
</a>
|
|
313
|
+
|
|
300
314
|
<a href="/learn/claude-code-goal-with-rubrics" class="article-card">
|
|
301
315
|
<h3>Claude Code /goal vs Todo: The 4-Field Pattern That Actually Holds</h3>
|
|
302
316
|
<p>Treating /goal like a todo wastes the command. The 4-field pattern (clear goal, measurable success, shown proof, hard limits) is the same shape as a ThumbGate rubric. Pair them and the agent cannot fake completion.</p>
|