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.
Files changed (40) hide show
  1. package/.claude-plugin/marketplace.json +5 -5
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/.well-known/llms.txt +26 -11
  4. package/.well-known/mcp/server-card.json +8 -8
  5. package/README.md +69 -34
  6. package/adapters/claude/.mcp.json +2 -2
  7. package/adapters/mcp/server-stdio.js +1 -1
  8. package/adapters/opencode/opencode.json +1 -1
  9. package/bin/cli.js +39 -16
  10. package/bin/postinstall.js +11 -22
  11. package/config/gate-templates.json +72 -0
  12. package/config/github-about.json +1 -1
  13. package/config/post-deploy-marketing-pages.json +6 -1
  14. package/package.json +5 -5
  15. package/public/agent-manager.html +3 -3
  16. package/public/agents-cost-savings.html +3 -3
  17. package/public/ai-malpractice-prevention.html +278 -7
  18. package/public/blog.html +3 -3
  19. package/public/codex-enterprise.html +3 -3
  20. package/public/codex-plugin.html +4 -4
  21. package/public/compare.html +6 -6
  22. package/public/dashboard.html +211 -126
  23. package/public/guide.html +5 -5
  24. package/public/index.html +156 -47
  25. package/public/learn.html +24 -10
  26. package/public/lessons.html +2 -2
  27. package/public/numbers.html +6 -6
  28. package/public/pricing.html +6 -5
  29. package/public/pro.html +1 -0
  30. package/scripts/billing.js +17 -0
  31. package/scripts/commercial-offer.js +4 -1
  32. package/scripts/dashboard.js +53 -1
  33. package/scripts/gates-engine.js +3 -3
  34. package/scripts/plausible-server-events.js +2 -1
  35. package/scripts/rate-limiter.js +16 -12
  36. package/scripts/seo-gsd.js +167 -1
  37. package/scripts/telemetry-analytics.js +310 -0
  38. package/scripts/visitor-journey.js +172 -0
  39. package/src/api/server.js +65 -29
  40. 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:image" content="https://thumbgate-production.up.railway.app/og.png">
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-production.up.railway.app/og.png">
22
- <meta name="thumbgate-version" content="1.23.1">
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-production.up.railway.app",
46
- "logo": "https://thumbgate-production.up.railway.app/assets/brand/thumbgate-logo-1200x360.png",
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-production.up.railway.app/#workflow-sprint-intake"
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-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
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-production.up.railway.app/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
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-production.up.railway.app/guide",
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-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F",
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-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
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-production.up.railway.app/#workflow-sprint-intake",
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-production.up.railway.app"
196
+ "url": "https://thumbgate.ai"
193
197
  },
194
- "url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake",
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-production.up.railway.app/#workflow-sprint-intake"
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-production.up.railway.app/#workflow-sprint-intake",
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="/go/install?utm_source=website&utm_medium=nav&utm_campaign=install_free&cta_id=nav_install_free&cta_placement=nav" onclick="posthog.capture('nav_cta_click',{cta:'install_free'})" class="nav-cta">Install Free</a>
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
- <div class="hero-install hero-install-primary" onclick="copyInstall(this)" title="Click to copy">
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="#demo" onclick="try{posthog.capture('hero_demo_click',{cta:'see_enforcement'})}catch(_){};sendFirstPartyTelemetry('hero_demo_clicked',{ctaId:'hero_see_enforcement',ctaPlacement:'hero'});" class="btn-free" style="font-size:15px;padding:14px 22px;">See the enforcement in action</a>
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;">Unlimited captures, 5 active rules. Enough to make ThumbGate part of your daily flow. Upgrade when you want the dashboard, exports, or unlimited rules.</p>
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>Unlimited feedback captures</strong> — every thumbs-down, every session</li>
1291
- <li>Up to 5 active auto-promoted prevention rules</li>
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 5 active rules)</li>
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 unlimited feedback captures, up to 5 active auto-promoted prevention rules, built-in safety checks, and hook blocking. Recall, lesson search, unlimited rules, 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>
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="/go/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" onclick="posthog.capture('final_pro_click',{cta:'go_pro'})" class="btn-pro" style="padding:8px 16px;font-size:12px;opacity:0.85;">Upgrade to Pro — $19/mo</a>
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.1</span>
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="/go/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" onclick="posthog.capture('sticky_pro_click',{cta:'go_pro'})" class="btn-pro" style="padding:8px 16px;font-size:12px;border-radius:6px;white-space:nowrap;">Go Pro — $19/mo</a>
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: '.hero-actions .btn-pro-page', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
1787
- { selector: '.hero-actions .hero-pro', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
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-production.up.railway.app/learn">
14
- <link rel="canonical" href="https://thumbgate-production.up.railway.app/learn">
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-production.up.railway.app/learn",
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-production.up.railway.app"
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-production.up.railway.app/learn/stop-ai-agent-force-push",
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-production.up.railway.app/learn/vibe-coding-safety-net",
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-production.up.railway.app/learn/mcp-pre-action-checks-explained",
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-production.up.railway.app/learn/agent-harness-pattern",
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-production.up.railway.app/learn/ai-agent-persistent-memory",
71
- "name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
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>
@@ -12,7 +12,7 @@
12
12
  "@context": "https://schema.org",
13
13
  "@type": "WebPage",
14
14
  "name": "ThumbGate Lessons Learned",
15
- "url": "https://thumbgate-production.up.railway.app/lessons",
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-production.up.railway.app"
29
+ "url": "https://thumbgate.ai"
30
30
  }
31
31
  }
32
32
  </script>