thumbgate 1.20.0 → 1.21.1
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 +40 -12
- package/.claude-plugin/plugin.json +15 -6
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +28 -8
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +15 -5
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +119 -2
- package/bin/postinstall.js +19 -13
- package/config/merge-quality-checks.json +0 -1
- package/config/post-deploy-marketing-pages.json +46 -0
- package/package.json +74 -60
- package/public/agent-manager.html +139 -0
- package/public/compare.html +1 -1
- package/public/dashboard.html +3 -3
- package/public/guide.html +23 -0
- package/public/index.html +79 -133
- package/public/learn.html +16 -0
- package/public/lessons.html +22 -0
- package/public/numbers.html +2 -2
- package/public/pricing.html +345 -0
- package/scripts/auto-promote-gates.js +7 -6
- package/scripts/billing.js +64 -0
- package/scripts/context-manager.js +42 -2
- package/scripts/feedback-loop.js +2 -1
- package/scripts/gates-engine.js +133 -7
- package/scripts/license.js +0 -1
- package/scripts/rate-limiter.js +36 -1
- package/scripts/tool-registry.js +28 -0
- package/scripts/verify-marketing-pages-deployed.js +195 -0
- package/scripts/workflow-sentinel.js +6 -1
- package/src/api/server.js +514 -142
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.
|
|
22
|
+
<meta name="thumbgate-version" content="1.21.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">
|
|
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 —
|
|
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">👍 👎
|
|
720
|
-
<h1>
|
|
721
|
-
<p class="hero-lede">
|
|
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
|
|
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="
|
|
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"
|
|
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="
|
|
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">
|
|
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="
|
|
1300
|
-
<
|
|
1301
|
-
|
|
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,64 +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.
|
|
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
|
-
<details style="border:1px solid var(--border);border-radius:14px;padding:18px 22px;background:var(--bg-raised);margin:18px 0;">
|
|
1322
|
-
<summary style="cursor:pointer;font-size:16px;font-weight:600;color:var(--cyan);list-style:none;display:flex;align-items:center;gap:8px;">
|
|
1323
|
-
<span style="display:inline-block;transition:transform 0.15s;">▸</span>
|
|
1324
|
-
Need consulting, a one-off diagnostic, or a hardening sprint? View paid services & kits
|
|
1325
|
-
</summary>
|
|
1326
|
-
<div class="team-paid-path" data-sprint-paid-path aria-label="Paid workflow hardening options">
|
|
1327
|
-
<div class="team-paid-card">
|
|
1328
|
-
<div>
|
|
1329
|
-
<h4>Workflow Hardening Diagnostic</h4>
|
|
1330
|
-
<p>Paid triage for one repeated agent or review failure, with a concrete proof plan and go/no-go recommendation.</p>
|
|
1331
|
-
</div>
|
|
1332
|
-
<div>
|
|
1333
|
-
<div class="team-paid-price">$<span data-sprint-diagnostic-price>499</span></div>
|
|
1334
|
-
<a class="team-paid-link" data-sprint-diagnostic-link href="__SPRINT_DIAGNOSTIC_CHECKOUT_URL__">Pay for diagnostic</a>
|
|
1335
|
-
</div>
|
|
1336
|
-
</div>
|
|
1337
|
-
<div class="team-paid-card">
|
|
1338
|
-
<div>
|
|
1339
|
-
<h4>AI Agent Governance Sprint</h4>
|
|
1340
|
-
<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>
|
|
1341
|
-
</div>
|
|
1342
|
-
<div>
|
|
1343
|
-
<div class="team-paid-price">$<span data-workflow-sprint-price>1500</span></div>
|
|
1344
|
-
<a class="team-paid-link" data-workflow-sprint-link href="__WORKFLOW_SPRINT_CHECKOUT_URL__">Pay for sprint</a>
|
|
1345
|
-
</div>
|
|
1346
|
-
</div>
|
|
1347
|
-
<div class="team-paid-card">
|
|
1348
|
-
<div>
|
|
1349
|
-
<h4>Reliable AI Agent Governance Setup</h4>
|
|
1350
|
-
<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>
|
|
1351
|
-
</div>
|
|
1352
|
-
<div>
|
|
1353
|
-
<div class="team-paid-price">$3,997</div>
|
|
1354
|
-
<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>
|
|
1355
|
-
</div>
|
|
1356
|
-
</div>
|
|
1357
|
-
<div class="team-paid-card">
|
|
1358
|
-
<div>
|
|
1359
|
-
<h4>OpenClaw Agent Governance Kit</h4>
|
|
1360
|
-
<p>Self-serve digital kit with ThumbGate prevention rules, OpenClaw-compatible workflow prompts, agent registry checklist, proof report template, and Zernio launch copy.</p>
|
|
1361
|
-
</div>
|
|
1362
|
-
<div>
|
|
1363
|
-
<div class="team-paid-price">$97</div>
|
|
1364
|
-
<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>
|
|
1365
|
-
</div>
|
|
1366
|
-
</div>
|
|
1367
|
-
</div>
|
|
1368
|
-
</details>
|
|
1369
1357
|
<div class="team-intake-recovery" aria-label="Checkout recovery path for workflow sprint buyers">
|
|
1370
1358
|
<div>
|
|
1371
|
-
<strong>
|
|
1372
|
-
<span>Send the workflow first. We
|
|
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>
|
|
1373
1361
|
</div>
|
|
1374
|
-
<a href="#team-pilot-intake-form" onclick="sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'team_workflow_sprint_recovery_intake',ctaPlacement:'
|
|
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>
|
|
1375
1363
|
</div>
|
|
1376
1364
|
<form id="team-pilot-intake-form" class="team-form" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form>
|
|
1377
1365
|
<input type="hidden" name="ctaId" value="workflow_sprint_intake">
|
|
@@ -1410,6 +1398,10 @@ __GA_BOOTSTRAP__
|
|
|
1410
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>
|
|
1411
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>
|
|
1412
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>
|
|
1413
1405
|
<div class="faq-item">
|
|
1414
1406
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What's the tech stack?</div>
|
|
1415
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>
|
|
@@ -1500,7 +1492,7 @@ __GA_BOOTSTRAP__
|
|
|
1500
1492
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1501
1493
|
<a href="/blog">Blog</a>
|
|
1502
1494
|
</div>
|
|
1503
|
-
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.
|
|
1495
|
+
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.21.1</span>
|
|
1504
1496
|
</div>
|
|
1505
1497
|
</footer>
|
|
1506
1498
|
|
|
@@ -1590,55 +1582,6 @@ function sendGa4Event(eventName, params) {
|
|
|
1590
1582
|
globalThis.gtag('event', eventName, params || {});
|
|
1591
1583
|
}
|
|
1592
1584
|
|
|
1593
|
-
function initializePaidSprintPath() {
|
|
1594
|
-
var panel = document.querySelector('[data-sprint-paid-path]');
|
|
1595
|
-
if (!panel) return;
|
|
1596
|
-
var diagnosticLink = document.querySelector('[data-sprint-diagnostic-link]');
|
|
1597
|
-
var sprintLink = document.querySelector('[data-workflow-sprint-link]');
|
|
1598
|
-
var diagnosticPrice = document.querySelector('[data-sprint-diagnostic-price]');
|
|
1599
|
-
var sprintPrice = document.querySelector('[data-workflow-sprint-price]');
|
|
1600
|
-
if (diagnosticPrice) diagnosticPrice.textContent = String(sprintDiagnosticPriceDollars);
|
|
1601
|
-
if (sprintPrice) sprintPrice.textContent = String(workflowSprintPriceDollars);
|
|
1602
|
-
var hasDiagnosticUrl = /^https?:\/\//.test(sprintDiagnosticCheckoutUrl);
|
|
1603
|
-
var hasSprintUrl = /^https?:\/\//.test(workflowSprintCheckoutUrl);
|
|
1604
|
-
if (!hasDiagnosticUrl && !hasSprintUrl) return;
|
|
1605
|
-
panel.classList.add('visible');
|
|
1606
|
-
if (hasDiagnosticUrl && diagnosticLink) {
|
|
1607
|
-
diagnosticLink.href = sprintDiagnosticCheckoutUrl;
|
|
1608
|
-
diagnosticLink.addEventListener('click', function() {
|
|
1609
|
-
sendFirstPartyTelemetry('workflow_sprint_diagnostic_checkout_started', {
|
|
1610
|
-
ctaId: 'workflow_sprint_diagnostic_checkout',
|
|
1611
|
-
ctaPlacement: 'team_paid_path',
|
|
1612
|
-
planId: 'team',
|
|
1613
|
-
offer: 'workflow_hardening_diagnostic',
|
|
1614
|
-
price: sprintDiagnosticPriceDollars,
|
|
1615
|
-
});
|
|
1616
|
-
sendGa4Event('begin_checkout', {
|
|
1617
|
-
currency: 'USD',
|
|
1618
|
-
value: sprintDiagnosticPriceDollars,
|
|
1619
|
-
items: [{ item_id: 'workflow_hardening_diagnostic', item_name: 'Workflow Hardening Diagnostic' }],
|
|
1620
|
-
});
|
|
1621
|
-
});
|
|
1622
|
-
}
|
|
1623
|
-
if (hasSprintUrl && sprintLink) {
|
|
1624
|
-
sprintLink.href = workflowSprintCheckoutUrl;
|
|
1625
|
-
sprintLink.addEventListener('click', function() {
|
|
1626
|
-
sendFirstPartyTelemetry('workflow_sprint_checkout_started', {
|
|
1627
|
-
ctaId: 'workflow_sprint_checkout',
|
|
1628
|
-
ctaPlacement: 'team_paid_path',
|
|
1629
|
-
planId: 'team',
|
|
1630
|
-
offer: 'workflow_hardening_sprint',
|
|
1631
|
-
price: workflowSprintPriceDollars,
|
|
1632
|
-
});
|
|
1633
|
-
sendGa4Event('begin_checkout', {
|
|
1634
|
-
currency: 'USD',
|
|
1635
|
-
value: workflowSprintPriceDollars,
|
|
1636
|
-
items: [{ item_id: 'workflow_hardening_sprint', item_name: 'Workflow Hardening Sprint' }],
|
|
1637
|
-
});
|
|
1638
|
-
});
|
|
1639
|
-
}
|
|
1640
|
-
}
|
|
1641
|
-
|
|
1642
1585
|
function initializeTeamIntakeTelemetry() {
|
|
1643
1586
|
document.querySelectorAll('[data-team-intake-form]').forEach(function(form) {
|
|
1644
1587
|
var started = false;
|
|
@@ -1663,7 +1606,7 @@ function initializeTeamIntakeTelemetry() {
|
|
|
1663
1606
|
});
|
|
1664
1607
|
sendGa4Event('generate_lead', {
|
|
1665
1608
|
currency: 'USD',
|
|
1666
|
-
value:
|
|
1609
|
+
value: 0,
|
|
1667
1610
|
method: 'workflow_sprint_intake',
|
|
1668
1611
|
});
|
|
1669
1612
|
});
|
|
@@ -1803,8 +1746,7 @@ function copyInstall(el) {
|
|
|
1803
1746
|
{ selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1804
1747
|
{ selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
|
|
1805
1748
|
{ selector: '.hero-actions .btn-pro-page', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
|
|
1806
|
-
{ selector: '.hero-
|
|
1807
|
-
{ 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' },
|
|
1808
1750
|
{ selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
|
|
1809
1751
|
{ selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
|
|
1810
1752
|
{ selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
|
|
@@ -1814,7 +1756,6 @@ function copyInstall(el) {
|
|
|
1814
1756
|
</script>
|
|
1815
1757
|
<script>
|
|
1816
1758
|
initializeBuyerIntentForms();
|
|
1817
|
-
initializePaidSprintPath();
|
|
1818
1759
|
initializeTeamIntakeTelemetry();
|
|
1819
1760
|
|
|
1820
1761
|
async function handleProCheckout() {
|
|
@@ -1839,6 +1780,11 @@ async function handleProCheckout() {
|
|
|
1839
1780
|
if (typeof plausible === 'function') {
|
|
1840
1781
|
plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
|
|
1841
1782
|
}
|
|
1783
|
+
sendGa4Event('begin_checkout', {
|
|
1784
|
+
currency: 'USD',
|
|
1785
|
+
value: proPriceDollars,
|
|
1786
|
+
items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
|
|
1787
|
+
});
|
|
1842
1788
|
try {
|
|
1843
1789
|
await buyerIntent.submitNewsletterSignup(normalizedEmail);
|
|
1844
1790
|
} catch (_err) {
|
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'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'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>
|
|
@@ -289,6 +297,14 @@
|
|
|
289
297
|
<span class="article-tag">Shared Memory</span>
|
|
290
298
|
</a>
|
|
291
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
|
+
|
|
292
308
|
<a href="/learn/ai-agent-persistent-memory" class="article-card">
|
|
293
309
|
<h3>How to Give Your AI Coding Agent Persistent Memory Across Sessions</h3>
|
|
294
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>
|
package/public/lessons.html
CHANGED
|
@@ -922,6 +922,28 @@ async function loadLive() {
|
|
|
922
922
|
}
|
|
923
923
|
|
|
924
924
|
loadLive().then(function() {
|
|
925
|
+
// Handle ?signal= query param from dashboard stat-card navigation.
|
|
926
|
+
// Vocabulary: 'up' | 'down' | 'all' (canonical). Also accepts the legacy
|
|
927
|
+
// 'positive' | 'negative' aliases the dashboard once emitted.
|
|
928
|
+
var qsSignal = new URLSearchParams(window.location.search).get('signal');
|
|
929
|
+
if (qsSignal) {
|
|
930
|
+
var signalMap = { positive: 'up', negative: 'down', up: 'up', down: 'down', all: 'all' };
|
|
931
|
+
var mapped = signalMap[qsSignal];
|
|
932
|
+
if (mapped) {
|
|
933
|
+
switchTab('timeline');
|
|
934
|
+
filterTimeline(mapped, null);
|
|
935
|
+
var filterBtns = document.querySelectorAll('#tab-timeline .filter-btn');
|
|
936
|
+
filterBtns.forEach(function(b) {
|
|
937
|
+
var label = b.textContent.trim().toLowerCase();
|
|
938
|
+
var match = (mapped === 'all' && label === 'all') ||
|
|
939
|
+
(mapped === 'up' && (label.indexOf('👍') !== -1 || label.indexOf('positive') !== -1 || label === 'up')) ||
|
|
940
|
+
(mapped === 'down' && (label.indexOf('👎') !== -1 || label.indexOf('negative') !== -1 || label === 'down'));
|
|
941
|
+
b.classList.toggle('active', match);
|
|
942
|
+
});
|
|
943
|
+
return;
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
|
|
925
947
|
// Default: highlight Active Rules card on page load
|
|
926
948
|
highlightCard(0);
|
|
927
949
|
|
package/public/numbers.html
CHANGED
|
@@ -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.
|
|
28
|
+
"softwareVersion": "1.21.1",
|
|
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.
|
|
205
|
+
<div class="freshness">Updated: 2026-05-07 · Version 1.21.1</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>
|