thumbgate 1.23.1 → 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 +39 -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 +6 -1
- package/package.json +5 -5
- package/public/agent-manager.html +3 -3
- package/public/agents-cost-savings.html +3 -3
- package/public/ai-malpractice-prevention.html +278 -7
- 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 +156 -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 +1 -0
- package/scripts/billing.js +17 -0
- package/scripts/commercial-offer.js +4 -1
- 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">
|
|
@@ -1105,7 +1164,7 @@ __GA_BOOTSTRAP__
|
|
|
1105
1164
|
</div>
|
|
1106
1165
|
<div class="autoresearch-cta">
|
|
1107
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>
|
|
1108
|
-
<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>
|
|
1109
1168
|
</div>
|
|
1110
1169
|
</div>
|
|
1111
1170
|
</div>
|
|
@@ -1285,10 +1344,10 @@ __GA_BOOTSTRAP__
|
|
|
1285
1344
|
<div class="tier" style="color:var(--cyan);">Free</div>
|
|
1286
1345
|
<div class="price">$0</div>
|
|
1287
1346
|
<div class="price-sub">Block repeated mistakes daily. Forever free for solo devs.</div>
|
|
1288
|
-
<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>
|
|
1289
1348
|
<ul>
|
|
1290
|
-
<li><strong>
|
|
1291
|
-
<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>
|
|
1292
1351
|
<li>No recall or lesson search</li>
|
|
1293
1352
|
<li>No exports (DPO, Databricks, HuggingFace)</li>
|
|
1294
1353
|
<li>All MCP integrations (Claude Code, Cursor, Codex, Gemini, Amp, any MCP agent)</li>
|
|
@@ -1307,7 +1366,7 @@ __GA_BOOTSTRAP__
|
|
|
1307
1366
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
1308
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>
|
|
1309
1368
|
<ul>
|
|
1310
|
-
<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>
|
|
1311
1370
|
<li><strong>Never re-explain a correction</strong> — lesson recall and search across sessions on every agent surface</li>
|
|
1312
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>
|
|
1313
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>
|
|
@@ -1322,7 +1381,7 @@ __GA_BOOTSTRAP__
|
|
|
1322
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>
|
|
1323
1382
|
</div>
|
|
1324
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>
|
|
1325
|
-
<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>
|
|
1326
1385
|
<p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today · cancel anytime.</p>
|
|
1327
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;">
|
|
1328
1387
|
</div>
|
|
@@ -1459,7 +1518,7 @@ __GA_BOOTSTRAP__
|
|
|
1459
1518
|
</div>
|
|
1460
1519
|
<div class="faq-item">
|
|
1461
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>
|
|
1462
|
-
<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>
|
|
1463
1522
|
</div>
|
|
1464
1523
|
<div class="faq-item">
|
|
1465
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>
|
|
@@ -1469,6 +1528,10 @@ __GA_BOOTSTRAP__
|
|
|
1469
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>
|
|
1470
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>
|
|
1471
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>
|
|
1472
1535
|
<div class="faq-item">
|
|
1473
1536
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
1474
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>
|
|
@@ -1506,7 +1569,7 @@ __GA_BOOTSTRAP__
|
|
|
1506
1569
|
</div>
|
|
1507
1570
|
<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;align-items:center;margin-top:12px;opacity:0.7;">
|
|
1508
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>
|
|
1509
|
-
<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>
|
|
1510
1573
|
<a href="#workflow-sprint-intake" class="btn-team" style="padding:8px 16px;font-size:12px;">Start Workflow Hardening Sprint</a>
|
|
1511
1574
|
</div>
|
|
1512
1575
|
</div>
|
|
@@ -1523,7 +1586,7 @@ __GA_BOOTSTRAP__
|
|
|
1523
1586
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1524
1587
|
<a href="/blog">Blog</a>
|
|
1525
1588
|
</div>
|
|
1526
|
-
<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>
|
|
1527
1590
|
</div>
|
|
1528
1591
|
</footer>
|
|
1529
1592
|
|
|
@@ -1535,7 +1598,7 @@ __GA_BOOTSTRAP__
|
|
|
1535
1598
|
<span class="cmd">npx thumbgate init</span>
|
|
1536
1599
|
<span class="copy-hint">copy</span>
|
|
1537
1600
|
</div>
|
|
1538
|
-
<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>
|
|
1539
1602
|
</div>
|
|
1540
1603
|
<script>
|
|
1541
1604
|
(function() {
|
|
@@ -1613,6 +1676,53 @@ function sendGa4Event(eventName, params) {
|
|
|
1613
1676
|
globalThis.gtag('event', eventName, params || {});
|
|
1614
1677
|
}
|
|
1615
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
|
+
|
|
1616
1726
|
function initializeTeamIntakeTelemetry() {
|
|
1617
1727
|
document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
|
|
1618
1728
|
var started = false;
|
|
@@ -1711,7 +1821,7 @@ function copyInstall(el) {
|
|
|
1711
1821
|
window.handleFaqKeydown = handleFaqKeydown;
|
|
1712
1822
|
|
|
1713
1823
|
/* CTA clicks */
|
|
1714
|
-
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' });
|
|
1715
1825
|
trackClick('.btn-gpt-page:not(.btn-install-hero)', 'chatgpt_gpt_click', { tier: 'free', source: 'homepage_gpt' });
|
|
1716
1826
|
trackClick('.btn-install-hero', 'install_guide_click', { tier: 'free', source: 'hero_install' });
|
|
1717
1827
|
trackClick('.btn-pro-page:not(.btn-install-link)', 'pro_page_click', { tier: 'pro', source: 'hero' });
|
|
@@ -1719,12 +1829,13 @@ function copyInstall(el) {
|
|
|
1719
1829
|
trackClick('.btn-team', 'workflow_sprint_intake_click', { tier: 'team', offer: 'workflow_hardening_sprint' });
|
|
1720
1830
|
trackClick('.btn-free', 'install_click', { tier: 'free' });
|
|
1721
1831
|
trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
|
|
1722
|
-
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' });
|
|
1723
1833
|
|
|
1724
1834
|
/* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
|
|
1725
1835
|
with section context so we can distinguish pricing section vs final CTA section clicks */
|
|
1726
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) {
|
|
1727
1837
|
el.addEventListener('click', function() {
|
|
1838
|
+
if (el.hasAttribute('data-revenue-cta')) return;
|
|
1728
1839
|
var section = el.closest('section');
|
|
1729
1840
|
var sectionId = section ? (section.id || section.className.split(' ')[0] || 'unknown') : 'unknown';
|
|
1730
1841
|
var tier = resolvePricingClickTier(el);
|
|
@@ -1783,8 +1894,10 @@ function copyInstall(el) {
|
|
|
1783
1894
|
ctaImpressions: [
|
|
1784
1895
|
{ selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1785
1896
|
{ selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1786
|
-
{ selector: '.
|
|
1787
|
-
{ 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' },
|
|
1788
1901
|
{ selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
|
|
1789
1902
|
{ selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
|
|
1790
1903
|
{ selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
|
|
@@ -1799,6 +1912,8 @@ initializeTeamIntakeTelemetry();
|
|
|
1799
1912
|
async function handleProCheckout() {
|
|
1800
1913
|
var buyerIntent = globalThis.ThumbGateBuyerIntent;
|
|
1801
1914
|
var email = document.getElementById('pro-email');
|
|
1915
|
+
var checkoutLink = document.getElementById('pro-checkout-link');
|
|
1916
|
+
trackRevenueCta(checkoutLink);
|
|
1802
1917
|
var normalizedEmail = buyerIntent.normalizeBuyerEmail(email && email.value);
|
|
1803
1918
|
if (!email || !buyerIntent.isValidBuyerEmail(normalizedEmail)) {
|
|
1804
1919
|
email.style.border = '2px solid #f87171';
|
|
@@ -1813,16 +1928,10 @@ async function handleProCheckout() {
|
|
|
1813
1928
|
if (globalThis.buyerJourney && typeof globalThis.buyerJourney.markEmailCaptured === 'function') {
|
|
1814
1929
|
globalThis.buyerJourney.markEmailCaptured();
|
|
1815
1930
|
}
|
|
1816
|
-
var checkoutLink = document.getElementById('pro-checkout-link');
|
|
1817
1931
|
var checkoutUrl = checkoutLink ? checkoutLink.href : '/checkout/pro';
|
|
1818
1932
|
if (typeof plausible === 'function') {
|
|
1819
1933
|
plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
|
|
1820
1934
|
}
|
|
1821
|
-
sendGa4Event('begin_checkout', {
|
|
1822
|
-
currency: 'USD',
|
|
1823
|
-
value: proPriceDollars,
|
|
1824
|
-
items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
|
|
1825
|
-
});
|
|
1826
1935
|
try {
|
|
1827
1936
|
await buyerIntent.submitNewsletterSignup(normalizedEmail);
|
|
1828
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>
|
package/public/lessons.html
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"@context": "https://schema.org",
|
|
13
13
|
"@type": "WebPage",
|
|
14
14
|
"name": "ThumbGate Lessons Learned",
|
|
15
|
-
"url": "https://thumbgate
|
|
15
|
+
"url": "https://thumbgate.ai/lessons",
|
|
16
16
|
"dateModified": "2026-04-20",
|
|
17
17
|
"author": {
|
|
18
18
|
"@type": "Person",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"publisher": {
|
|
27
27
|
"@type": "Organization",
|
|
28
28
|
"name": "ThumbGate",
|
|
29
|
-
"url": "https://thumbgate
|
|
29
|
+
"url": "https://thumbgate.ai"
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
</script>
|