thumbgate 1.19.0 → 1.21.0

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/public/index.html CHANGED
@@ -19,7 +19,7 @@ __GOOGLE_SITE_VERIFICATION_META__
19
19
  <meta property="og:image" content="https://thumbgate-production.up.railway.app/og.png">
20
20
  <meta name="twitter:card" content="summary_large_image">
21
21
  <meta name="twitter:image" content="https://thumbgate-production.up.railway.app/og.png">
22
- <meta name="thumbgate-version" content="1.19.0">
22
+ <meta name="thumbgate-version" content="1.21.0">
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">
24
24
  <link rel="apple-touch-icon" href="/apple-touch-icon.png">
25
25
 
@@ -33,11 +33,7 @@ __GA_BOOTSTRAP__
33
33
  const serverSessionId = '__SERVER_SESSION_ID__';
34
34
  const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
35
35
  const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
36
- const sprintDiagnosticCheckoutUrl = '__SPRINT_DIAGNOSTIC_CHECKOUT_URL__';
37
- const workflowSprintCheckoutUrl = '__WORKFLOW_SPRINT_CHECKOUT_URL__';
38
36
  const proPriceDollars = Number('__PRO_PRICE_DOLLARS__') || 19;
39
- const sprintDiagnosticPriceDollars = Number('__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__') || 499;
40
- const workflowSprintPriceDollars = Number('__WORKFLOW_SPRINT_PRICE_DOLLARS__') || 1500;
41
37
  </script>
42
38
 
43
39
  <script type="application/ld+json">
@@ -95,7 +91,7 @@ __GA_BOOTSTRAP__
95
91
  "Docker Sandboxes routing — move high-risk local runs into isolated microVM-backed execution",
96
92
  "Hosted sandbox dispatch — signed isolated lane for team automations",
97
93
  "Domain Skill Packs — Stripe, Railway, database migration best practices",
98
- "Progressive Disclosure — 82% token savings with 3-tier L1/L2/L3 loading",
94
+ "Progressive Disclosure — 3-tier L1/L2/L3 loading cuts skill-pack token cost per the disclosureSavings metric in scripts/skill-packs.js",
99
95
  "Hallucination Detection — decomposes claims into verifiable sub-claims",
100
96
  "PII Scanner — blocks emails, credit cards, SSNs in feedback and exports",
101
97
  "Background Agent Governance — per-agent pass rates, CI auto-feedback",
@@ -575,14 +571,6 @@ __GA_BOOTSTRAP__
575
571
  .team-intake-panel h3 { margin: 0 0 6px; font-size: 18px; color: var(--text); }
576
572
  .team-intake-panel p { margin: 0; color: var(--text-dim); font-size: 13px; line-height: 1.55; }
577
573
  .team-intake-badge { flex-shrink: 0; padding: 6px 10px; border: 1px solid rgba(74,222,128,0.35); border-radius: 999px; color: var(--green); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; }
578
- .team-paid-path { display: none; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0 0 16px; }
579
- .team-paid-path.visible { display: grid; }
580
- .team-paid-card { display: flex; flex-direction: column; justify-content: space-between; gap: 12px; min-height: 150px; padding: 16px; border: 1px solid rgba(74,222,128,0.22); border-radius: 10px; background: rgba(0,0,0,0.24); }
581
- .team-paid-card h4 { margin: 0 0 6px; color: var(--text); font-size: 15px; }
582
- .team-paid-card p { margin: 0; color: var(--text-dim); font-size: 12px; line-height: 1.5; }
583
- .team-paid-price { color: var(--green); font-weight: 800; font-size: 18px; }
584
- .team-paid-link { display: block; text-align: center; padding: 10px 12px; background: rgba(74,222,128,0.16); color: var(--green); border: 1px solid rgba(74,222,128,0.45); border-radius: 8px; text-decoration: none; font-size: 13px; font-weight: 700; }
585
- .team-paid-link:hover { border-color: var(--green); transform: translateY(-1px); }
586
574
  .team-intake-recovery { margin: 0 0 16px; padding: 13px 14px; border: 1px solid rgba(34,211,238,0.28); border-radius: 12px; background: rgba(34,211,238,0.08); display: flex; align-items: center; justify-content: space-between; gap: 14px; text-align: left; }
587
575
  .team-intake-recovery strong { display: block; color: var(--text); font-size: 13px; margin-bottom: 2px; }
588
576
  .team-intake-recovery span { display: block; color: var(--text-dim); font-size: 12px; line-height: 1.45; }
@@ -660,7 +648,6 @@ __GA_BOOTSTRAP__
660
648
  .pricing-grid { grid-template-columns: 1fr; }
661
649
  .team-intake-panel-head { display: block; }
662
650
  .team-intake-badge { display: inline-block; margin-bottom: 10px; }
663
- .team-paid-path { grid-template-columns: 1fr; }
664
651
  .team-intake-recovery { align-items: stretch; flex-direction: column; text-align: center; }
665
652
  .team-intake-recovery a { width: 100%; }
666
653
  .team-form { grid-template-columns: 1fr; }
@@ -716,9 +703,9 @@ __GA_BOOTSTRAP__
716
703
  <!-- HERO -->
717
704
  <section class="hero">
718
705
  <div class="container">
719
- <div class="hero-badge">👍 👎 Pre-action gates for AI coding agents</div>
720
- <h1>Stop paying for the same AI mistake twice.</h1>
721
- <p class="hero-lede">ThumbGate turns a single thumbs-down into a rule that blocks the next repeat before Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, or OpenCode runs the tool call.</p>
706
+ <div class="hero-badge">👍 👎 The Firewall for AI Agents</div>
707
+ <h1>The Infrastructure Firewall for AI Coding Agents.</h1>
708
+ <p class="hero-lede">AI will always hallucinate and break things. We don't try to make AI smarter; we make its mistakes harmless. ThumbGate keeps the Senior Architect in control by blocking dangerous tool calls before they hit the disk.</p>
722
709
 
723
710
  <div class="hero-proof-card" aria-label="ThumbGate blocking example">
724
711
  <div class="terminal-row muted">$ agent attempts risky action</div>
@@ -734,6 +721,7 @@ __GA_BOOTSTRAP__
734
721
  </div>
735
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>
736
723
  <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:'watch_demo'})}catch(_){};sendFirstPartyTelemetry('hero_demo_clicked',{ctaId:'hero_watch_demo',ctaPlacement:'hero'});" class="btn-free" style="font-size:15px;padding:14px 22px;">▶ Watch the 90-second demo</a>
737
725
  </div>
738
726
 
739
727
  <div class="hero-trust-bar">
@@ -784,7 +772,7 @@ __GA_BOOTSTRAP__
784
772
  <a class="signal-pill signal-up">Thumbs-down once, blocked forever</a>
785
773
  <a class="signal-pill signal-down">Block repeat hallucinations before the model sees them</a>
786
774
  <p class="hero-persona">For consultancies, platform teams, and AI product teams that want workflow governance, CLI-first rollout, and a reliable operator.</p>
787
- <p>Have one AI-agent failure that keeps repeating? Start with one real workflow, one repeated failure pattern, enforceable pre-action gates, and a short audit note your team can keep.</p>
775
+ <p>Have one AI-agent failure that keeps repeating? Start with one real workflow, one repeated failure pattern, enforceable pre-action gates, and a short audit trail your team can keep.</p>
788
776
  <p>Prove one blocked repeat before asking anyone to buy. Give <code>thumbs up</code> when the agent follows your standards, <code>thumbs down</code> when it misses. Upgrade after one real blocked repeat.</p>
789
777
  <p>Workflow governance for isolated execution: ThumbGate pairs policy checks with Docker Sandboxes, signed hosted sandbox dispatch, Changeset evidence, and exact main-branch merge commit verification before release claims ship.</p>
790
778
  <!--
@@ -795,9 +783,9 @@ __GA_BOOTSTRAP__
795
783
  update the test assertions in the same PR.
796
784
  -->
797
785
  <div hidden aria-hidden="true" data-thumbgate-test-anchors style="display:none">
798
- <span data-cta="hero_workflow_sprint_diagnostic_checkout">ctaId: 'hero_workflow_sprint_diagnostic_checkout' ctaId: 'hero_workflow_sprint_recovery_intake' workflow_sprint_checkout_started workflow_sprint_recovery_intake_clicked hero_workflow_sprint_recovery_intake</span>
786
+ <span data-cta="hero_workflow_sprint_intake">ctaId: 'hero_workflow_sprint' ctaId: 'hero_workflow_sprint_recovery_intake' workflow_sprint_intake_started workflow_sprint_recovery_intake_clicked hero_workflow_sprint_recovery_intake</span>
799
787
  <span data-anchor="dashboard-preview">dashboard-preview What your Pro dashboard looks like check:no-force-push</span>
800
- <span data-anchor="team-intake-form">Start Team Pilot Intake id="team-pilot-intake-form" data-team-intake-form name="ctaPlacement" value="team_visible_intake" name="utmMedium" value="visible_team_intake" name="planId" value="team" name="ctaId" value="workflow_sprint_intake" Not ready to pay from a checkout page? team_workflow_sprint_recovery_intake checkout_abandon workflow_sprint_intake_started workflow_sprint_intake_submit_attempted</span>
788
+ <span data-anchor="team-intake-form">Start Team Pilot Intake id="team-pilot-intake-form" data-team-intake-form name="ctaPlacement" value="team_visible_intake" name="utmMedium" value="visible_team_intake" name="planId" value="team" name="ctaId" value="workflow_sprint_intake" Team checkout happens after scope. team_workflow_sprint_recovery_intake scope_first workflow_sprint_intake_started workflow_sprint_intake_submit_attempted pricing_team_intake team_intake_started</span>
801
789
  <span data-anchor="chatgpt-context">No, you do not have to chat inside the GPT forever. ChatGPT is the discovery and memory surface. Do not rely on ChatGPT's native rating buttons for ThumbGate memory. Explore GPTs choose the GPT by Igor Ganapolsky Programming Do I have to chat inside the ThumbGate GPT for enforcement? capture thumbs-up/down lessons Real blocking for coding agents still runs locally adapters/chatgpt/INSTALL.md Native ChatGPT rating buttons are not the ThumbGate capture path. thumbs up: this review named exact files, commands, and tests. thumbs down: the answer ignored my request.</span>
802
790
  </div>
803
791
  </div>
@@ -963,7 +951,8 @@ __GA_BOOTSTRAP__
963
951
  </div>
964
952
  </section>
965
953
 
966
- <section class="compatibility" id="social-proof">
954
+ <section class="compatibility" id="demo">
955
+ <a id="social-proof" aria-hidden="true"></a>
967
956
  <div class="container">
968
957
  <div class="section-label">See It In Action</div>
969
958
  <h2 class="section-title">See the enforcement before you buy anything</h2>
@@ -1025,6 +1014,7 @@ __GA_BOOTSTRAP__
1025
1014
  <a class="btn-free" href="/guides/ai-deployment-readiness" style="display:inline-flex;align-items:center;">AI deployment readiness →</a>
1026
1015
  <a class="btn-free" href="/use-cases/platform-teams" style="display:inline-flex;align-items:center;">Platform team rollout →</a>
1027
1016
  <a class="btn-free" href="/use-cases/regulated-workflows" style="display:inline-flex;align-items:center;">Regulated workflow pattern →</a>
1017
+ <a class="btn-free" href="/agent-manager" style="display:inline-flex;align-items:center;">Built for the Agent Manager →</a>
1028
1018
  </div>
1029
1019
  </div>
1030
1020
  </section>
@@ -1090,6 +1080,28 @@ __GA_BOOTSTRAP__
1090
1080
  </div>
1091
1081
  </section>
1092
1082
 
1083
+ <section class="compatibility" id="persistent-skills">
1084
+ <div class="container">
1085
+ <div class="section-label">Persistent Agent Skills</div>
1086
+ <h2 class="section-title">Reusable instructions are the new baseline. Enforcement is the moat.</h2>
1087
+ <p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:880px;margin:0 auto 28px;line-height:1.7;">Grok-style skills are training users to expect persistent expertise across every surface. ThumbGate turns that expectation into a governed reliability layer: capture the correction once, export it as a portable skill or lesson bundle, then prove the next risky tool call was blocked before it ran.</p>
1088
+ <div class="agent-grid">
1089
+ <div class="agent-card">
1090
+ <h3>Portable skill memory</h3>
1091
+ <p>Thumbs-up/down lessons become reusable rules and skill-pack context that can move across Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible agents.</p>
1092
+ </div>
1093
+ <div class="agent-card">
1094
+ <h3>Instructions plus teeth</h3>
1095
+ <p>Persistent skills tell an agent what you prefer. ThumbGate checks whether the next action follows those preferences and blocks high-risk repeats before execution.</p>
1096
+ </div>
1097
+ <div class="agent-card">
1098
+ <h3>Proof for teams</h3>
1099
+ <p>Every fired rule carries the source lesson, decision trace, and audit evidence, so teams can review which skill worked instead of trusting a hidden chatbot memory.</p>
1100
+ </div>
1101
+ </div>
1102
+ </div>
1103
+ </section>
1104
+
1093
1105
  <!-- HOW IT WORKS -->
1094
1106
  <section class="how-it-works" id="how-it-works">
1095
1107
  <div class="container">
@@ -1262,7 +1274,7 @@ __GA_BOOTSTRAP__
1262
1274
  <div class="price-card pro" data-price-dollars="19">
1263
1275
  <div class="tier">Pro</div>
1264
1276
  <div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
1265
- <div class="price-sub">Stop paying tokens to re-correct the same agent mistake across sessions.</div>
1277
+ <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>
1266
1278
  <ul>
1267
1279
  <li><strong>Block every repeat mistake</strong> — unlimited feedback captures and prevention rules (Free caps at 5 active rules)</li>
1268
1280
  <li><strong>Never re-explain a correction</strong> — lesson recall and search across sessions on every agent surface</li>
@@ -1296,12 +1308,36 @@ __GA_BOOTSTRAP__
1296
1308
  <li>Workflow hardening sprint intake for approval boundaries and rollback safety</li>
1297
1309
  <li>Email support during pilot rollout</li>
1298
1310
  </ul>
1299
- <a href="/checkout/pro?plan_id=team&amp;seat_count=3&amp;confirm=1&amp;utm_source=website&amp;utm_medium=pricing&amp;utm_campaign=team_self_serve&amp;cta_id=pricing_team_self_serve&amp;cta_placement=pricing&amp;landing_path=%2F" onclick="try{posthog.capture('team_self_serve_click',{cta:'team_self_serve',seats:3,price:147})}catch(_){};sendFirstPartyTelemetry('team_self_serve_checkout_started',{ctaId:'pricing_team_self_serve',ctaPlacement:'pricing',planId:'team',seatCount:3,price:147});sendGa4Event('begin_checkout',{currency:'USD',value:147,items:[{item_id:'team_monthly',item_name:'ThumbGate Team (3 seats)',quantity:3}]});" class="btn-team" style="display:block;text-align:center;">Start 3-seat Team $147/mo</a>
1300
- <a href="#workflow-sprint-intake" style="display:block;text-align:center;margin-top:8px;font-size:13px;color:var(--text-dim);text-decoration:none;">Or qualify first via Workflow Hardening Sprint intake →</a>
1301
- <p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Team is $49/seat/mo with a 3-seat minimum. Self-serve checkout starts you at $147/mo for 3 seats; add more seats from the dashboard. Prefer to qualify the workflow before paying? Start with the intake.</p>
1311
+ <a href="#workflow-sprint-intake" onclick="try{posthog.capture('team_intake_click',{cta:'team_intake',seats:3,price:0})}catch(_){};sendFirstPartyTelemetry('team_intake_started',{ctaId:'pricing_team_intake',ctaPlacement:'pricing',planId:'team',seatCount:3,price:0});sendGa4Event('generate_lead',{currency:'USD',value:0,method:'team_workflow_intake'});" class="btn-team" style="display:block;text-align:center;">Send team workflow first →</a>
1312
+ <p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Team is $49/seat/mo with a 3-seat minimum, but team rollouts start through intake so the workflow, shared rules, and rollout proof are explicit before checkout.</p>
1313
+ </div>
1314
+ </div>
1315
+ <div style="max-width:1080px;margin:24px auto 0;">
1316
+ <div class="price-card regulated" style="border:1px solid var(--cyan);background:linear-gradient(180deg, rgba(34,211,238,0.04), transparent);padding:24px 28px;">
1317
+ <div style="display:flex;flex-wrap:wrap;align-items:flex-start;gap:24px;justify-content:space-between;">
1318
+ <div style="flex:1 1 420px;min-width:280px;">
1319
+ <div class="tier" style="color:var(--cyan);">Regulated</div>
1320
+ <div style="font-size:14px;color:var(--text-muted);margin:4px 0 12px;letter-spacing:0.04em;text-transform:uppercase;">Banking · Insurance · Healthcare · Public sector</div>
1321
+ <div style="font-size:18px;color:var(--text);margin-bottom:6px;font-weight:700;">Regulated workflow review</div>
1322
+ <div class="price-sub" style="margin-bottom:14px;">For teams operating AI coding agents under DORA, the EU AI Act, HIPAA, or comparable audit pressure. Pricing is scoped after intake because the buyer needs evidence, deployment boundaries, and approval ownership before checkout.</div>
1323
+ <ul style="margin-bottom:0;">
1324
+ <li><strong>Audit-grade decision trail</strong> — every PreToolUse evaluation logged with the rule that fired, ready for SIEM export</li>
1325
+ <li><strong>Immutable rule provenance</strong> — each prevention rule traceable to the feedback event that generated it</li>
1326
+ <li><strong>Self-managed deployment</strong> — air-gapped or VPC-hosted; no agent state leaves your boundary</li>
1327
+ <li><strong>DORA / EU AI Act evidence packaging</strong> — machine-readable reports aligned to Article 6, 28, and high-risk provider monitoring obligations</li>
1328
+ <li><strong>SSO + role separation</strong> — operator, reviewer, and auditor roles enforced at the gate layer</li>
1329
+ <li><strong>Workflow proof plan included</strong> — a scoped review that proves the boundary against one of your real repeated-failure cases before broader rollout</li>
1330
+ <li><strong>Quarterly red-team review</strong> — prompt-injection and policy-bypass exercises with written findings</li>
1331
+ </ul>
1332
+ </div>
1333
+ <div style="flex:0 0 260px;min-width:240px;display:flex;flex-direction:column;gap:10px;">
1334
+ <a href="/?tier=regulated#workflow-sprint-intake" onclick="try{posthog.capture('regulated_intake_click',{cta:'regulated_contact_sales',placement:'pricing'})}catch(_){};sendFirstPartyTelemetry('regulated_intake_started',{ctaId:'pricing_regulated_intake',ctaPlacement:'pricing',planId:'regulated'});" class="btn-team" style="display:block;text-align:center;background:var(--cyan);color:#06121a;font-weight:800;">Start regulated intake →</a>
1335
+ <a href="/learn/regulated-agent-execution-boundary" style="display:block;text-align:center;padding:10px 14px;font-size:13px;color:var(--cyan);border:1px solid var(--cyan);border-radius:8px;text-decoration:none;">Read the build-vs-buy thesis first</a>
1336
+ <p style="font-size:11px;color:var(--text-muted);margin:0;text-align:center;line-height:1.5;">Pricing is workflow-scoped and shared after the intake call. Annual pre-pay available.</p>
1337
+ </div>
1338
+ </div>
1302
1339
  </div>
1303
1340
  </div>
1304
- <p style="text-align:center;color:var(--text-muted);font-size:13px;margin:40px 0;">Need a custom diagnostic, sprint, or setup? <a href="#workflow-sprint-intake" style="color:var(--cyan);text-decoration:none;">Send workflow first →</a></p>
1305
1341
  </div>
1306
1342
  </section>
1307
1343
 
@@ -1314,58 +1350,16 @@ __GA_BOOTSTRAP__
1314
1350
  <div class="team-intake-panel-head">
1315
1351
  <div>
1316
1352
  <h3>Tell us the workflow. Get a proof plan.</h3>
1317
- <p>The highest-fit Team buyer is already feeling one repeated failure. Start with a paid diagnostic when budget is ready, or use intake when you need qualification first.</p>
1353
+ <p>The highest-fit Team buyer is already feeling one repeated failure. Send the workflow first so the next step is scoped around the real blocker instead of a blind checkout.</p>
1318
1354
  </div>
1319
1355
  <span class="team-intake-badge">30-minute intake</span>
1320
1356
  </div>
1321
- <div class="team-paid-path" data-sprint-paid-path aria-label="Paid workflow hardening options">
1322
- <div class="team-paid-card">
1323
- <div>
1324
- <h4>Workflow Hardening Diagnostic</h4>
1325
- <p>Paid triage for one repeated agent or review failure, with a concrete proof plan and go/no-go recommendation.</p>
1326
- </div>
1327
- <div>
1328
- <div class="team-paid-price">$<span data-sprint-diagnostic-price>499</span></div>
1329
- <a class="team-paid-link" data-sprint-diagnostic-link href="__SPRINT_DIAGNOSTIC_CHECKOUT_URL__">Pay for diagnostic</a>
1330
- </div>
1331
- </div>
1332
- <div class="team-paid-card">
1333
- <div>
1334
- <h4>AI Agent Governance Sprint</h4>
1335
- <p>48-hour Workflow Hardening Sprint for one workflow owner, one blocker, approval boundaries, rollback safety, one proof review, and one hardened rollout path.</p>
1336
- </div>
1337
- <div>
1338
- <div class="team-paid-price">$<span data-workflow-sprint-price>1500</span></div>
1339
- <a class="team-paid-link" data-workflow-sprint-link href="__WORKFLOW_SPRINT_CHECKOUT_URL__">Pay for sprint</a>
1340
- </div>
1341
- </div>
1342
- <div class="team-paid-card">
1343
- <div>
1344
- <h4>Reliable AI Agent Governance Setup</h4>
1345
- <p>Full ThumbGate-powered setup for Claude Code, Cursor, or Codex teams: npx install, custom prevention rules, audit trail, training, and proof reports. Optional ongoing rule management is $297/mo.</p>
1346
- </div>
1347
- <div>
1348
- <div class="team-paid-price">$3,997</div>
1349
- <a class="team-paid-link" href="#team-pilot-intake-form" onclick="sendFirstPartyTelemetry('governance_setup_intake_clicked',{ctaId:'team_governance_setup_intake',ctaPlacement:'team_paid_path',planId:'team',offer:'reliable_ai_agent_governance_setup',price:3997});sendGa4Event('generate_lead',{currency:'USD',value:3997,method:'governance_setup_intake'});">Request setup</a>
1350
- </div>
1351
- </div>
1352
- <div class="team-paid-card">
1353
- <div>
1354
- <h4>OpenClaw Agent Governance Kit</h4>
1355
- <p>Self-serve digital kit with ThumbGate prevention rules, OpenClaw-compatible workflow prompts, agent registry checklist, proof report template, and Zernio launch copy.</p>
1356
- </div>
1357
- <div>
1358
- <div class="team-paid-price">$97</div>
1359
- <a rel="nofollow noopener noreferrer" target="_blank" class="team-paid-link" href="https://buy.stripe.com/bJe14naiE9Lo7xT49Z3sI12" onclick="sendFirstPartyTelemetry('openclaw_governance_kit_checkout_started',{ctaId:'team_openclaw_governance_kit_checkout',ctaPlacement:'team_paid_path',planId:'digital_kit',offer:'openclaw_agent_governance_kit',price:97});sendGa4Event('begin_checkout',{currency:'USD',value:97,items:[{item_id:'openclaw_agent_governance_kit',item_name:'OpenClaw Agent Governance Kit'}]});">Buy kit</a>
1360
- </div>
1361
- </div>
1362
- </div>
1363
1357
  <div class="team-intake-recovery" aria-label="Checkout recovery path for workflow sprint buyers">
1364
1358
  <div>
1365
- <strong>Not ready to pay from a checkout page?</strong>
1366
- <span>Send the workflow first. We can qualify the blocker, confirm the proof plan, and route you to the $499 diagnostic, $1500 sprint, or $3,997 governance setup only when the scope is real.</span>
1359
+ <strong>Team checkout happens after scope.</strong>
1360
+ <span>Send the workflow first. We will qualify the blocker, confirm whether Pro, Team, or a scoped rollout is the right next step, and keep the purchase path tied to real evidence.</span>
1367
1361
  </div>
1368
- <a href="#team-pilot-intake-form" onclick="sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'team_workflow_sprint_recovery_intake',ctaPlacement:'team_paid_path_recovery',planId:'team',offer:'workflow_hardening_sprint',reason:'checkout_abandon'});sendGa4Event('generate_lead',{currency:'USD',value:0,method:'workflow_sprint_recovery_intake'});">Send workflow first</a>
1362
+ <a href="#team-pilot-intake-form" onclick="sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'team_workflow_sprint_recovery_intake',ctaPlacement:'team_intake_recovery',planId:'team',offer:'workflow_hardening_sprint',reason:'scope_first'});sendGa4Event('generate_lead',{currency:'USD',value:0,method:'workflow_sprint_recovery_intake'});">Send workflow first</a>
1369
1363
  </div>
1370
1364
  <form id="team-pilot-intake-form" class="team-form" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form>
1371
1365
  <input type="hidden" name="ctaId" value="workflow_sprint_intake">
@@ -1404,6 +1398,10 @@ __GA_BOOTSTRAP__
1404
1398
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How is ThumbGate different from model-training feedback loops?</div>
1405
1399
  <div class="faq-a">ThumbGate's intelligence is context, not weights. It doesn't touch the model — it injects past feedback into context so your agent is conditioned by your corrections. Think of it as a behavioral immune system, not a training pipeline. The check blocks are hard enforcement, not soft suggestions.</div>
1406
1400
  </div>
1401
+ <div class="faq-item">
1402
+ <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How is ThumbGate different from persistent agent skills?</div>
1403
+ <div class="faq-a">Persistent agent skills are reusable instructions. ThumbGate uses the same market shift but adds the missing enforcement loop: lessons become portable skill context, Pre-Action Checks block repeated failures before tool execution, and the dashboard shows evidence for which rule fired and why.</div>
1404
+ </div>
1407
1405
  <div class="faq-item">
1408
1406
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What's the tech stack?</div>
1409
1407
  <div class="faq-a">SQLite+FTS5 lesson DB for fast full-text search. MemAlign-inspired dual recall (principle-based rules + episodic context). Thompson Sampling for adaptive check sensitivity per failure domain. LanceDB + Apache Arrow for local vector search with Hugging Face embeddings. ContextFS for context assembly. Bayesian belief updates on each memory. PreToolUse hook enforcement blocks known-bad actions before execution. All local-first — no cloud required.</div>
@@ -1494,7 +1492,7 @@ __GA_BOOTSTRAP__
1494
1492
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1495
1493
  <a href="/blog">Blog</a>
1496
1494
  </div>
1497
- <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.19.0</span>
1495
+ <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.21.0</span>
1498
1496
  </div>
1499
1497
  </footer>
1500
1498
 
@@ -1584,55 +1582,6 @@ function sendGa4Event(eventName, params) {
1584
1582
  globalThis.gtag('event', eventName, params || {});
1585
1583
  }
1586
1584
 
1587
- function initializePaidSprintPath() {
1588
- var panel = document.querySelector('[data-sprint-paid-path]');
1589
- if (!panel) return;
1590
- var diagnosticLink = document.querySelector('[data-sprint-diagnostic-link]');
1591
- var sprintLink = document.querySelector('[data-workflow-sprint-link]');
1592
- var diagnosticPrice = document.querySelector('[data-sprint-diagnostic-price]');
1593
- var sprintPrice = document.querySelector('[data-workflow-sprint-price]');
1594
- if (diagnosticPrice) diagnosticPrice.textContent = String(sprintDiagnosticPriceDollars);
1595
- if (sprintPrice) sprintPrice.textContent = String(workflowSprintPriceDollars);
1596
- var hasDiagnosticUrl = /^https?:\/\//.test(sprintDiagnosticCheckoutUrl);
1597
- var hasSprintUrl = /^https?:\/\//.test(workflowSprintCheckoutUrl);
1598
- if (!hasDiagnosticUrl && !hasSprintUrl) return;
1599
- panel.classList.add('visible');
1600
- if (hasDiagnosticUrl && diagnosticLink) {
1601
- diagnosticLink.href = sprintDiagnosticCheckoutUrl;
1602
- diagnosticLink.addEventListener('click', function() {
1603
- sendFirstPartyTelemetry('workflow_sprint_diagnostic_checkout_started', {
1604
- ctaId: 'workflow_sprint_diagnostic_checkout',
1605
- ctaPlacement: 'team_paid_path',
1606
- planId: 'team',
1607
- offer: 'workflow_hardening_diagnostic',
1608
- price: sprintDiagnosticPriceDollars,
1609
- });
1610
- sendGa4Event('begin_checkout', {
1611
- currency: 'USD',
1612
- value: sprintDiagnosticPriceDollars,
1613
- items: [{ item_id: 'workflow_hardening_diagnostic', item_name: 'Workflow Hardening Diagnostic' }],
1614
- });
1615
- });
1616
- }
1617
- if (hasSprintUrl && sprintLink) {
1618
- sprintLink.href = workflowSprintCheckoutUrl;
1619
- sprintLink.addEventListener('click', function() {
1620
- sendFirstPartyTelemetry('workflow_sprint_checkout_started', {
1621
- ctaId: 'workflow_sprint_checkout',
1622
- ctaPlacement: 'team_paid_path',
1623
- planId: 'team',
1624
- offer: 'workflow_hardening_sprint',
1625
- price: workflowSprintPriceDollars,
1626
- });
1627
- sendGa4Event('begin_checkout', {
1628
- currency: 'USD',
1629
- value: workflowSprintPriceDollars,
1630
- items: [{ item_id: 'workflow_hardening_sprint', item_name: 'Workflow Hardening Sprint' }],
1631
- });
1632
- });
1633
- }
1634
- }
1635
-
1636
1585
  function initializeTeamIntakeTelemetry() {
1637
1586
  document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
1638
1587
  var started = false;
@@ -1657,7 +1606,7 @@ function initializeTeamIntakeTelemetry() {
1657
1606
  });
1658
1607
  sendGa4Event('generate_lead', {
1659
1608
  currency: 'USD',
1660
- value: workflowSprintPriceDollars,
1609
+ value: 0,
1661
1610
  method: 'workflow_sprint_intake',
1662
1611
  });
1663
1612
  });
@@ -1797,8 +1746,7 @@ function copyInstall(el) {
1797
1746
  { selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
1798
1747
  { selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
1799
1748
  { selector: '.hero-actions .btn-pro-page', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
1800
- { selector: '.hero-paid-actions .diagnostic', ctaId: 'hero_workflow_sprint_diagnostic_checkout', ctaPlacement: 'hero_paid_path', planId: 'team' },
1801
- { selector: '.hero-paid-actions .intake', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero_paid_path', planId: 'team' },
1749
+ { selector: '.hero-actions .hero-pro', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
1802
1750
  { selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
1803
1751
  { selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
1804
1752
  { selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
@@ -1808,7 +1756,6 @@ function copyInstall(el) {
1808
1756
  </script>
1809
1757
  <script>
1810
1758
  initializeBuyerIntentForms();
1811
- initializePaidSprintPath();
1812
1759
  initializeTeamIntakeTelemetry();
1813
1760
 
1814
1761
  async function handleProCheckout() {
@@ -1833,6 +1780,11 @@ async function handleProCheckout() {
1833
1780
  if (typeof plausible === 'function') {
1834
1781
  plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
1835
1782
  }
1783
+ sendGa4Event('begin_checkout', {
1784
+ currency: 'USD',
1785
+ value: proPriceDollars,
1786
+ items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
1787
+ });
1836
1788
  try {
1837
1789
  await buyerIntent.submitNewsletterSignup(normalizedEmail);
1838
1790
  } catch (_err) {
@@ -1840,6 +1792,27 @@ async function handleProCheckout() {
1840
1792
  }
1841
1793
  globalThis.location.assign(checkoutUrl);
1842
1794
  }
1795
+
1796
+ // Conversion-path safety: /services redirects to /#workflow-sprint-intake.
1797
+ // Modern browsers auto-open a <details> containing the hash target, but
1798
+ // older Safari/Firefox/Chrome (<2020) do not. Force-open any ancestor
1799
+ // <details> of the hash target so high-intent buyers always see the
1800
+ // paid intake content on arrival.
1801
+ function openDetailsForHash() {
1802
+ var hash = globalThis.location.hash;
1803
+ if (!hash || hash.length < 2) return;
1804
+ var target;
1805
+ try { target = document.querySelector(hash); } catch (_) { return; }
1806
+ if (!target) return;
1807
+ var el = target;
1808
+ while (el && el !== document.body) {
1809
+ if (el.tagName === 'DETAILS') { el.open = true; }
1810
+ el = el.parentElement;
1811
+ }
1812
+ target.scrollIntoView({ behavior: 'auto', block: 'start' });
1813
+ }
1814
+ globalThis.addEventListener('DOMContentLoaded', openDetailsForHash);
1815
+ globalThis.addEventListener('hashchange', openDetailsForHash);
1843
1816
  </script>
1844
1817
  </body>
1845
1818
  </html>
package/public/learn.html CHANGED
@@ -243,6 +243,14 @@
243
243
  <p class="hero-sub" style="font-size:0.85rem;margin-top:-1rem;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
244
244
 
245
245
  <div class="article-grid">
246
+ <a href="/learn/regulated-agent-execution-boundary" class="article-card">
247
+ <h3>The $1.4M Cost of Building Agent Guardrails — And Why Pre-Action Gates Are the Buy-Side Answer</h3>
248
+ <p>GitLab&apos;s Field CTO put a $1.4M / 18-month price tag on DIY agentic AI platforms in regulated industries. We agree with the buy thesis and name the layer the article didn&apos;t: the execution boundary between the platform and prod.</p>
249
+ <span class="article-tag">Regulated Industries</span>
250
+ <span class="article-tag">DORA / EU AI Act</span>
251
+ <span class="article-tag">Build vs Buy</span>
252
+ </a>
253
+
246
254
  <a href="/learn/stop-ai-agent-force-push" class="article-card">
247
255
  <h3>How to Stop AI Agents From Force-Pushing to Main</h3>
248
256
  <p>Your agent just ran git push --force on main. Again. Here is how to make that physically impossible with a pre-action check that takes two minutes to set up.</p>
@@ -266,6 +274,13 @@
266
274
  <span class="article-tag">PreToolUse</span>
267
275
  <span class="article-tag">Technical</span>
268
276
  </a>
277
+ <a href="/learn/ai-agent-governance" class="article-card">
278
+ <h3>AI Agent Governance — The Four Layers Pattern</h3>
279
+ <p>AI agent governance has four layers: prompt rules, decorator wrappers, pre-action hooks, sandbox isolation. Each catches a different failure mode. Pick the layer that matches your stack — and understand why prompt rules alone fail.</p>
280
+ <span class="article-tag">Governance</span>
281
+ <span class="article-tag">Architecture</span>
282
+ <span class="article-tag">Pattern</span>
283
+ </a>
269
284
  <a href="/learn/agent-harness-pattern" class="article-card">
270
285
  <h3>The Agent Harness Pattern: Why Your AI Needs a Seatbelt</h3>
271
286
  <p>Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification checks, and durable state. ThumbGate implements this pattern in production today.</p>
@@ -274,6 +289,22 @@
274
289
  <span class="article-tag">NLAH</span>
275
290
  </a>
276
291
 
292
+ <a href="/learn/agent-swarms-shared-gates" class="article-card">
293
+ <h3>Agent Swarms: One Gate Layer, Every Model</h3>
294
+ <p>A 5-agent swarm without shared memory pays 5&times; the tokens on every repeated mistake. Here is how a single MCP gate layer makes Opus, GPT, and Gemini fail the same way only once.</p>
295
+ <span class="article-tag">Agent Swarms</span>
296
+ <span class="article-tag">Multi-Agent</span>
297
+ <span class="article-tag">Shared Memory</span>
298
+ </a>
299
+
300
+ <a href="/learn/claude-code-goal-with-rubrics" class="article-card">
301
+ <h3>Claude Code /goal vs Todo: The 4-Field Pattern That Actually Holds</h3>
302
+ <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>
303
+ <span class="article-tag">Claude Code</span>
304
+ <span class="article-tag">/goal Pattern</span>
305
+ <span class="article-tag">Rubric Enforcement</span>
306
+ </a>
307
+
277
308
  <a href="/learn/ai-agent-persistent-memory" class="article-card">
278
309
  <h3>How to Give Your AI Coding Agent Persistent Memory Across Sessions</h3>
279
310
  <p>Your agent forgets everything when the session ends. Here is how to give Claude Code, Cursor, Codex, and Gemini memory that survives restarts — without retraining.</p>
@@ -25,7 +25,7 @@
25
25
  "alternateName": "thumbgate",
26
26
  "applicationCategory": "DeveloperApplication",
27
27
  "operatingSystem": "Cross-platform, Node.js >=18.18.0",
28
- "softwareVersion": "1.19.0",
28
+ "softwareVersion": "1.21.0",
29
29
  "url": "https://thumbgate-production.up.railway.app/numbers",
30
30
  "dateModified": "2026-05-07",
31
31
  "creator": {
@@ -202,7 +202,7 @@
202
202
  <main class="container">
203
203
  <h1>The Numbers</h1>
204
204
  <p class="subtitle">Generated first-party operational snapshot from the ThumbGate runtime. This is not customer traction, install volume, revenue, or proof that a configured gate has fired.</p>
205
- <div class="freshness">Updated: 2026-05-07 · Version 1.19.0</div>
205
+ <div class="freshness">Updated: 2026-05-07 · Version 1.21.0</div>
206
206
  <div class="truth-note"><strong>Read this first:</strong> configured checks are inventory. Recorded blocks and warnings are usage evidence. This snapshot currently reports 0 recorded hard-block event(s) and 0 recorded warning event(s).</div>
207
207
 
208
208
  <h2>Gate enforcement</h2>