thumbgate 1.28.4 → 1.29.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/dashboard.md +11 -1
- package/.claude/commands/thumbgate-dashboard.md +23 -8
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/llms.txt +18 -10
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +66 -3
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/forge/forge.yaml +3 -3
- package/adapters/mcp/server-stdio.js +88 -2
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +8 -8
- package/bin/postinstall.js +4 -13
- package/commands/dashboard.md +11 -1
- package/commands/thumbgate-dashboard.md +23 -8
- package/config/agent-outcome-monitor-thresholds.json +63 -0
- package/config/evals/agent-outcomes-baseline.json +17 -0
- package/config/evals/agent-outcomes-golden.json +412 -0
- package/config/evals/prompt-eval-baseline.json +23 -0
- package/config/github-about.json +5 -4
- package/config/post-deploy-marketing-pages.json +6 -6
- package/config/schemas/task-outcome-receipt.schema.json +296 -0
- package/docs/integrations/grafana/README.md +109 -0
- package/docs/integrations/grafana/thumbgate-revenue-evidence-dashboard.json +1930 -0
- package/openapi/openapi.yaml +475 -5
- package/package.json +75 -22
- package/public/agent-manager.html +10 -11
- package/public/agents-cost-savings.html +2 -2
- package/public/assets/brand/thumbgate-logo-transparent.svg +6 -11
- package/public/assets/brand/thumbgate-mark-inline-v3.svg +11 -10
- package/public/assets/brand/thumbgate-mark.svg +10 -11
- package/public/blog/inside-your-boundary.html +114 -0
- package/public/blog/process-over-outcome-gates.html +119 -0
- package/public/blog.html +296 -402
- package/public/brand/thumbgate-mark.svg +5 -9
- package/public/codex-enterprise.html +2 -2
- package/public/compare.html +12 -3
- package/public/diagnostic.html +79 -29
- package/public/guide.html +4 -4
- package/public/index.html +1090 -2098
- package/public/install.html +3 -3
- package/public/js/buyer-intent.js +33 -18
- package/public/numbers.html +2 -2
- package/public/pricing.html +268 -408
- package/public/pro.html +4 -4
- package/scripts/agent-outcome-eval.js +130 -0
- package/scripts/agent-outcome-monitor.js +261 -0
- package/scripts/agent-reasoning-traces.js +8 -9
- package/scripts/async-job-runner.js +107 -13
- package/scripts/billing.js +456 -126
- package/scripts/buyer-paths.js +102 -0
- package/scripts/cli-feedback.js +2 -2
- package/scripts/commercial-offer.js +18 -10
- package/scripts/durability/step.js +121 -12
- package/scripts/external-customer-audit.js +881 -0
- package/scripts/feedback-loop.js +26 -0
- package/scripts/gates-engine.js +554 -19
- package/scripts/grafana-revenue-evidence.js +856 -0
- package/scripts/human-escalation.js +265 -0
- package/scripts/hybrid-feedback-context.js +93 -50
- package/scripts/jsonl-window.js +89 -0
- package/scripts/judge-reward-function.js +30 -18
- package/scripts/lesson-embedding-index.js +3 -7
- package/scripts/meta-agent-loop.js +20 -2
- package/scripts/observability-env.js +139 -0
- package/scripts/observability-setup.js +55 -0
- package/scripts/plausible-domain-config.js +4 -0
- package/scripts/prompt-eval.js +81 -4
- package/scripts/provider-live-evidence.js +1290 -0
- package/scripts/provider-payment-reconciler.js +442 -0
- package/scripts/provider-revenue-evidence.js +249 -0
- package/scripts/rate-limiter.js +1 -5
- package/scripts/revenue-action-eligibility.js +414 -0
- package/scripts/revenue-evidence-remediation.js +694 -0
- package/scripts/revenue-offer-system.js +709 -0
- package/scripts/sales-pipeline.js +1117 -0
- package/scripts/schedule-manager.js +249 -0
- package/scripts/seo-gsd.js +8 -4
- package/scripts/stripe-credentials.js +37 -0
- package/scripts/stripe-revenue-catalog-audit.js +363 -0
- package/scripts/stripe-revenue-catalog.js +164 -0
- package/scripts/task-outcomes.js +425 -0
- package/scripts/telemetry-analytics.js +23 -3
- package/scripts/tool-contract-validator.js +287 -59
- package/scripts/tool-registry.js +143 -0
- package/scripts/vector-store.js +83 -7
- package/scripts/workflow-intake-queue.js +483 -0
- package/src/api/server.js +647 -118
package/public/index.html
CHANGED
|
@@ -1,2155 +1,1147 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
|
-
<meta
|
|
5
|
-
<meta name="
|
|
6
|
-
|
|
7
|
-
<meta
|
|
8
|
-
<meta name="
|
|
9
|
-
__GOOGLE_SITE_VERIFICATION_META__
|
|
10
|
-
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
11
|
-
<link rel="
|
|
12
|
-
<link rel="
|
|
13
|
-
<meta property="og:image" content="/og.png">
|
|
14
|
-
<
|
|
15
|
-
<meta name="
|
|
16
|
-
<
|
|
17
|
-
<meta
|
|
18
|
-
<meta property="og:
|
|
19
|
-
<meta property="og:
|
|
20
|
-
<meta property="og:
|
|
21
|
-
<meta
|
|
22
|
-
<
|
|
23
|
-
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
28
|
-
|
|
29
|
-
<!-- Privacy-friendly analytics by Plausible -->
|
|
30
|
-
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.tagged-events.js"></script>
|
|
31
|
-
__GA_BOOTSTRAP__
|
|
32
|
-
|
|
33
|
-
<script>
|
|
34
|
-
const gaMeasurementId = '__GA_MEASUREMENT_ID__';
|
|
35
|
-
const serverVisitorId = '__SERVER_VISITOR_ID__';
|
|
36
|
-
const serverSessionId = '__SERVER_SESSION_ID__';
|
|
37
|
-
const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
|
|
38
|
-
const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
|
|
39
|
-
const proPriceDollars = Number('__PRO_PRICE_DOLLARS__') || 19;
|
|
40
|
-
</script>
|
|
41
|
-
|
|
42
|
-
<script type="application/ld+json">
|
|
43
|
-
{
|
|
44
|
-
"@context": "https://schema.org",
|
|
45
|
-
"@type": "Person",
|
|
46
|
-
"name": "Igor Ganapolsky",
|
|
47
|
-
"url": "https://github.com/IgorGanapolsky",
|
|
48
|
-
"jobTitle": "Senior Mobile & AI Engineer",
|
|
49
|
-
"worksFor": {
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<meta name="generator" content="ThumbGate">
|
|
7
|
+
<meta name="author" content="Igor Ganapolsky">
|
|
8
|
+
<meta name="thumbgate-version" content="1.29.2">
|
|
9
|
+
__GOOGLE_SITE_VERIFICATION_META__
|
|
10
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
11
|
+
<link rel="canonical" href="__APP_ORIGIN__/">
|
|
12
|
+
<link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
|
|
13
|
+
<meta property="og:image" content="https://thumbgate.ai/og.png">
|
|
14
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
+
<meta name="twitter:image" content="https://thumbgate.ai/og.png">
|
|
16
|
+
<title>ThumbGate — Stop AI agent mistakes before they cost you</title>
|
|
17
|
+
<meta name="description" content="Stop AI agent mistakes before they cost you. Self-serve is $19/mo; the $499 Diagnostic installs one hard, test-backed safety gate for a supported AI-agent workflow in two business days.">
|
|
18
|
+
<meta property="og:title" content="ThumbGate — Stop AI agent mistakes before they cost you">
|
|
19
|
+
<meta property="og:description" content="Not a prompt. Not a postmortem. Pre-action gates + dual path: $19/mo Pro or $499 Diagnostic gate.">
|
|
20
|
+
<meta property="og:type" content="website">
|
|
21
|
+
<meta property="og:url" content="__APP_ORIGIN__/">
|
|
22
|
+
<script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.tagged-events.js"></script>
|
|
23
|
+
__GA_BOOTSTRAP__
|
|
24
|
+
<script type="application/ld+json">
|
|
25
|
+
{
|
|
26
|
+
"@context": "https://schema.org",
|
|
50
27
|
"@type": "Organization",
|
|
51
28
|
"name": "ThumbGate",
|
|
52
|
-
"url": "
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
"https://
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
"
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"
|
|
120
|
-
"Signed sandbox-dispatch mechanism — deployment-specific isolation helper that requires configuration and verification",
|
|
121
|
-
"Domain Skill Packs — Stripe, Railway, database migration best practices",
|
|
122
|
-
"Progressive Disclosure — 3-tier L1/L2/L3 loading reports estimated disclosureSavings from scripts/skill-packs.js",
|
|
123
|
-
"Hallucination Detection — decomposes claims into verifiable sub-claims",
|
|
124
|
-
"PII Scanner — blocks emails, credit cards, SSNs in feedback and exports",
|
|
125
|
-
"Background Agent Governance — per-agent pass rates, CI auto-feedback",
|
|
126
|
-
"Memory Migration — imports Claude Code MEMORY.md into the local lesson store",
|
|
127
|
-
"Prompt-Level DLP — scans tool call inputs before execution",
|
|
128
|
-
"Per-Step Scoring — check decisions can become DPO/KTO training signals",
|
|
129
|
-
"HuggingFace Export — share PII-redacted agent traces as open training datasets",
|
|
130
|
-
"Unified Context — one-call context assembly with session, lessons, guards, and code-graph",
|
|
131
|
-
"AI Authenticity Enforcement — reviewable rules can encode operator-specific standards"
|
|
132
|
-
],
|
|
133
|
-
"offers": [
|
|
134
|
-
{
|
|
135
|
-
"@type": "Offer",
|
|
136
|
-
"name": "Free",
|
|
137
|
-
"price": "0",
|
|
138
|
-
"priceCurrency": "USD",
|
|
139
|
-
"description": "Free local CLI for one developer: 2 feedback captures per day, 10 total, up to 3 active auto-promoted rules, no recall/search or exports, warn-and-log defaults, and hard blocking for detected secret leaks"
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
"@type": "Offer",
|
|
143
|
-
"name": "Enterprise",
|
|
144
|
-
"priceCurrency": "USD",
|
|
145
|
-
"description": "Contact-sales tier with custom pricing scoped after intake for one workflow's approval boundaries, rollback plan, evidence requirements, and rollout support. Hosted team lesson sync and a hosted org dashboard are not general-availability runtime features.",
|
|
146
|
-
"url": "https://thumbgate.ai/#workflow-sprint-intake"
|
|
147
|
-
},
|
|
148
|
-
{
|
|
149
|
-
"@type": "Offer",
|
|
150
|
-
"name": "Pro Monthly",
|
|
151
|
-
"price": "19",
|
|
152
|
-
"priceCurrency": "USD",
|
|
153
|
-
"description": "Self-serve individual tier with unlimited rules and captures, history-aware recall and search, a personal local dashboard, DPO export, and operator-managed lesson export/import",
|
|
154
|
-
"url": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F"
|
|
155
|
-
},
|
|
156
|
-
{
|
|
29
|
+
"url": "__APP_ORIGIN__",
|
|
30
|
+
"logo": "__APP_ORIGIN__/assets/brand/thumbgate-logo-1200x360.png",
|
|
31
|
+
"sameAs": ["https://github.com/IgorGanapolsky/ThumbGate"]
|
|
32
|
+
}
|
|
33
|
+
</script>
|
|
34
|
+
<script type="application/ld+json">
|
|
35
|
+
{
|
|
36
|
+
"@context": "https://schema.org",
|
|
37
|
+
"@type": "SoftwareApplication",
|
|
38
|
+
"name": "ThumbGate",
|
|
39
|
+
"applicationCategory": "DeveloperApplication",
|
|
40
|
+
"operatingSystem": "macOS, Linux, Windows",
|
|
41
|
+
"url": "__APP_ORIGIN__",
|
|
42
|
+
"description": "Self-improving firewall for AI coding agents. ThumbGate captures feedback as local lessons, re-ranks relevant lessons for each action, promotes repeated negative patterns into warning or blocking gates, expires stale auto-promoted gates, and runs pre-action checks before shell, file, git, deploy, or API tool calls. Detected secret exfiltration and gate-bypass commands are denied by default; strict mode blocks matching destructive-action rules.",
|
|
43
|
+
"codeRepository": "https://github.com/IgorGanapolsky/ThumbGate",
|
|
44
|
+
"featureList": [
|
|
45
|
+
"Pre-action PreToolUse checks for coding agents",
|
|
46
|
+
"Thumbs-up/down feedback becomes reviewable local lessons",
|
|
47
|
+
"Relevant lessons are re-ranked for the proposed action",
|
|
48
|
+
"Repeated negative patterns can promote from warning to blocking gates",
|
|
49
|
+
"Stale auto-promoted gates expire and stale lessons archive",
|
|
50
|
+
"Managed Enterprise Workflow Gate for one supported workflow",
|
|
51
|
+
"Local-first install with optional shared team enforcement"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
</script>
|
|
55
|
+
<script type="application/ld+json">
|
|
56
|
+
{
|
|
57
|
+
"@context": "https://schema.org",
|
|
58
|
+
"@type": "HowTo",
|
|
59
|
+
"name": "How ThumbGate becomes a self-improving firewall",
|
|
60
|
+
"description": "Capture operational feedback, store it as local lessons, re-rank the lessons that match the next action, promote repeated negative patterns into gates, and check the next tool call before execution.",
|
|
61
|
+
"step": [
|
|
62
|
+
{
|
|
63
|
+
"@type": "HowToStep",
|
|
64
|
+
"position": 1,
|
|
65
|
+
"name": "Capture real feedback",
|
|
66
|
+
"text": "Record explicit thumbs-up or thumbs-down feedback with the action and outcome context."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"@type": "HowToStep",
|
|
70
|
+
"position": 2,
|
|
71
|
+
"name": "Remember local lessons",
|
|
72
|
+
"text": "Store the feedback as reviewable local lessons that survive sessions and model changes."
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"@type": "HowToStep",
|
|
76
|
+
"position": 3,
|
|
77
|
+
"name": "Refine the control layer",
|
|
78
|
+
"text": "Re-rank relevant lessons for the action, promote repeated negative patterns into warning or blocking gates, and expire stale auto-promoted gates."
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"@type": "HowToStep",
|
|
82
|
+
"position": 4,
|
|
83
|
+
"name": "Gate the next action",
|
|
84
|
+
"text": "Run the resulting pre-action checks before the shell, file, git, deployment, or API tool call executes."
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
<script type="application/ld+json">
|
|
90
|
+
{
|
|
91
|
+
"@context": "https://schema.org",
|
|
92
|
+
"@type": "Service",
|
|
93
|
+
"name": "Enterprise Workflow Gate",
|
|
94
|
+
"description": "ThumbGate's $499 enterprise entry offer for one repeated AI-agent workflow failure, including a failure map, configured local gate, regression test, and rollout proof.",
|
|
95
|
+
"provider": { "@type": "Organization", "name": "ThumbGate" },
|
|
96
|
+
"offers": {
|
|
157
97
|
"@type": "Offer",
|
|
158
|
-
"
|
|
159
|
-
"price": "149",
|
|
98
|
+
"price": "__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__",
|
|
160
99
|
"priceCurrency": "USD",
|
|
161
|
-
"
|
|
162
|
-
"url": "
|
|
100
|
+
"availability": "https://schema.org/InStock",
|
|
101
|
+
"url": "__APP_ORIGIN__/#buy"
|
|
163
102
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
"
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
"@type": "BuyAction",
|
|
179
|
-
"name": "Start ThumbGate Pro",
|
|
180
|
-
"target": {
|
|
181
|
-
"@type": "EntryPoint",
|
|
182
|
-
"urlTemplate": "https://thumbgate.ai/checkout/pro?plan_id=pro&landing_path=%2F",
|
|
183
|
-
"actionPlatform": [
|
|
184
|
-
"https://schema.org/DesktopWebPlatform"
|
|
185
|
-
]
|
|
103
|
+
}
|
|
104
|
+
</script>
|
|
105
|
+
<script type="application/ld+json">
|
|
106
|
+
{
|
|
107
|
+
"@context": "https://schema.org",
|
|
108
|
+
"@type": "FAQPage",
|
|
109
|
+
"mainEntity": [
|
|
110
|
+
{
|
|
111
|
+
"@type": "Question",
|
|
112
|
+
"name": "What do I get for $499?",
|
|
113
|
+
"acceptedAnswer": {
|
|
114
|
+
"@type": "Answer",
|
|
115
|
+
"text": "One 60-minute working review for one repeated AI-agent workflow failure, one configured local gate for a supported workflow, its regression test, and a written rollout and rollback proof within two business days after access and the agreed materials are available."
|
|
116
|
+
}
|
|
186
117
|
},
|
|
187
|
-
|
|
188
|
-
"@type": "
|
|
189
|
-
"name": "
|
|
190
|
-
"
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
118
|
+
{
|
|
119
|
+
"@type": "Question",
|
|
120
|
+
"name": "Does ThumbGate block every risky command by default?",
|
|
121
|
+
"acceptedAnswer": {
|
|
122
|
+
"@type": "Answer",
|
|
123
|
+
"text": "No. Detected secret exfiltration and gate-process bypass attempts are denied by default. Matching destructive actions warn unless strict enforcement is enabled. The managed gate defines the right boundary for your workflow instead of pretending every warning is a firewall."
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"@type": "Question",
|
|
128
|
+
"name": "Is this the enterprise option?",
|
|
129
|
+
"acceptedAnswer": {
|
|
130
|
+
"@type": "Answer",
|
|
131
|
+
"text": "Yes. The $499 Enterprise Workflow Gate is the enterprise entry offer for one supported workflow. It is not an org-wide hosted platform license: shared hosting, SSO, compliance packaging, and multi-workflow rollout require separate scope and are not generally available."
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"@type": "Question",
|
|
136
|
+
"name": "Does self-improving mean ThumbGate retrains my model?",
|
|
137
|
+
"acceptedAnswer": {
|
|
138
|
+
"@type": "Answer",
|
|
139
|
+
"text": "No. ThumbGate does not change model weights and does not silently rewrite production policy. Self-improving under your control means explicit approvals and feedback teach the local control layer what to allow, block, or escalate next time: lessons are stored and re-ranked, repeated negative patterns can promote into gates, and stale auto-promoted gates expire."
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"@type": "Question",
|
|
144
|
+
"name": "Is the self-improving logic a black box I have to trust blindly?",
|
|
145
|
+
"acceptedAnswer": {
|
|
146
|
+
"@type": "Answer",
|
|
147
|
+
"text": "No. The promotion, demotion, and lesson-ranking logic ships in the public npm bundle under an MIT license — run npm pack thumbgate and read it yourself. Your lessons live in a local SQLite file you own, not a server you can't query. Paid tiers add hosted sync, the dashboard, and adapter coverage, not access to intelligence withheld from the free install."
|
|
148
|
+
}
|
|
204
149
|
}
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
</script>
|
|
153
|
+
<style>
|
|
154
|
+
:root {
|
|
155
|
+
color-scheme: dark;
|
|
156
|
+
--bg: #080b10;
|
|
157
|
+
--panel: #111722;
|
|
158
|
+
--text: #f5f7fb;
|
|
159
|
+
--muted: #9ca8ba;
|
|
160
|
+
--line: #273246;
|
|
161
|
+
--cyan: #38d7ff;
|
|
162
|
+
--green: #56e39f;
|
|
163
|
+
--yellow: #ffd166;
|
|
164
|
+
--red: #ff647c;
|
|
165
|
+
--max: 1120px;
|
|
205
166
|
}
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
"serviceType": "AI-agent workflow hardening sprint",
|
|
216
|
-
"provider": {
|
|
217
|
-
"@type": "Organization",
|
|
218
|
-
"name": "ThumbGate",
|
|
219
|
-
"url": "https://thumbgate.ai"
|
|
220
|
-
},
|
|
221
|
-
"url": "https://thumbgate.ai/#workflow-sprint-intake",
|
|
222
|
-
"description": "Founder-led workflow hardening for one AI-agent workflow that needs approval boundaries, rollback safety, and rollout proof before wider team rollout.",
|
|
223
|
-
"offers": {
|
|
224
|
-
"@type": "Offer",
|
|
225
|
-
"name": "Workflow Hardening Sprint intake",
|
|
226
|
-
"url": "https://thumbgate.ai/#workflow-sprint-intake"
|
|
227
|
-
},
|
|
228
|
-
"potentialAction": {
|
|
229
|
-
"@type": "CommunicateAction",
|
|
230
|
-
"name": "Book a workflow hardening intake",
|
|
231
|
-
"target": {
|
|
232
|
-
"@type": "EntryPoint",
|
|
233
|
-
"urlTemplate": "https://thumbgate.ai/#workflow-sprint-intake",
|
|
234
|
-
"actionPlatform": [
|
|
235
|
-
"https://schema.org/DesktopWebPlatform"
|
|
236
|
-
]
|
|
167
|
+
* { box-sizing: border-box; }
|
|
168
|
+
html { scroll-behavior: smooth; }
|
|
169
|
+
body {
|
|
170
|
+
margin: 0;
|
|
171
|
+
color: var(--text);
|
|
172
|
+
background:
|
|
173
|
+
radial-gradient(circle at 72% 4%, rgba(56, 215, 255, 0.13), transparent 32rem),
|
|
174
|
+
linear-gradient(180deg, #080b10 0%, #0b1018 45%, #080b10 100%);
|
|
175
|
+
font: 16px/1.6 Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
237
176
|
}
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
{
|
|
250
|
-
"@type": "HowToStep",
|
|
251
|
-
"position": 1,
|
|
252
|
-
"name": "Install ThumbGate",
|
|
253
|
-
"text": "Run: npx thumbgate init --agent claude-code. This installs the local CLI gateway and writes the supported agent integration. No API key is needed for the local path."
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
"@type": "HowToStep",
|
|
257
|
-
"position": 2,
|
|
258
|
-
"name": "Give feedback when something goes wrong",
|
|
259
|
-
"text": "When your agent makes a mistake, give it a thumbs down with context. In the current Claude auto-capture hook, vague negative signals can reuse up to 8 prior recorded entries before promotion and stay linked to a 60-second feedback session for later clarification."
|
|
260
|
-
},
|
|
261
|
-
{
|
|
262
|
-
"@type": "HowToStep",
|
|
263
|
-
"position": 3,
|
|
264
|
-
"name": "Prevention rules auto-generate",
|
|
265
|
-
"text": "After qualifying repeated failures in the same domain, ThumbGate can auto-generate prevention rules. Configured integrations can load the resulting local lessons and rules."
|
|
266
|
-
},
|
|
267
|
-
{
|
|
268
|
-
"@type": "HowToStep",
|
|
269
|
-
"position": 4,
|
|
270
|
-
"name": "Pre-action checks flag the mistake",
|
|
271
|
-
"text": "When a configured agent proposes a matching action, the PreToolUse hook records the decision before tool execution. Detected secret leaks and direct ThumbGate process-kill/environment-override commands deny by default; rm -rf, force-push, fetch-and-run, and direct guardrail-file edits warn by default. Set THUMBGATE_STRICT_ENFORCEMENT=1 to deny every matched blocking rule."
|
|
177
|
+
a { color: inherit; }
|
|
178
|
+
button, input { font: inherit; }
|
|
179
|
+
button { cursor: pointer; }
|
|
180
|
+
.shell { width: min(calc(100% - 40px), var(--max)); margin: 0 auto; }
|
|
181
|
+
.site-nav {
|
|
182
|
+
position: sticky;
|
|
183
|
+
top: 0;
|
|
184
|
+
z-index: 20;
|
|
185
|
+
border-bottom: 1px solid rgba(39, 50, 70, 0.75);
|
|
186
|
+
background: rgba(8, 11, 16, 0.88);
|
|
187
|
+
backdrop-filter: blur(16px);
|
|
272
188
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
{
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
"name": "How is ThumbGate different from model-training feedback loops?",
|
|
294
|
-
"acceptedAnswer": {
|
|
295
|
-
"@type": "Answer",
|
|
296
|
-
"text": "ThumbGate's runtime keeps lessons and rules outside the model. A configured hook evaluates proposed tool calls before execution. Detected secret exfiltration plus commands that kill the gate process or enable its bypass variable deny by default; matching destructive deletes, force-pushes, and fetch-and-run commands warn by default. Strict mode (THUMBGATE_STRICT_ENFORCEMENT=1) turns matching warning-mode checks into denies."
|
|
297
|
-
}
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
"@type": "Question",
|
|
301
|
-
"name": "What's the tech stack?",
|
|
302
|
-
"acceptedAnswer": {
|
|
303
|
-
"@type": "Answer",
|
|
304
|
-
"text": "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. Configured PreToolUse hooks evaluate known-bad actions before execution; detected secret exfiltration and gate kill/bypass commands deny by default, while strict mode also denies matching warning-mode checks. The local path requires no cloud account."
|
|
305
|
-
}
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
"@type": "Question",
|
|
309
|
-
"name": "What AI agents and editors does this work with?",
|
|
310
|
-
"acceptedAnswer": {
|
|
311
|
-
"@type": "Answer",
|
|
312
|
-
"text": "ThumbGate includes documented integration paths for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, and OpenCode. Each agent must be configured through its hook or MCP setup; MCP compatibility alone does not install enforcement automatically. The Cursor runtime setup is npx thumbgate init --agent cursor, while the in-app Marketplace listing remains separate. VS Code can host an MCP-compatible agent, but this repo does not ship a standalone VS Code extension."
|
|
313
|
-
}
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
"@type": "Question",
|
|
317
|
-
"name": "Do I have to chat inside the ThumbGate GPT for enforcement?",
|
|
318
|
-
"acceptedAnswer": {
|
|
319
|
-
"@type": "Answer",
|
|
320
|
-
"text": "No. The ThumbGate GPT is a ChatGPT entrypoint for checking proposed actions and getting setup help. Local allow, warn, or deny enforcement runs where the coding agent executes and requires npx thumbgate init plus the documented integration setup."
|
|
321
|
-
}
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
"@type": "Question",
|
|
325
|
-
"name": "When should I use Pro versus the Workflow Hardening Sprint?",
|
|
326
|
-
"acceptedAnswer": {
|
|
327
|
-
"@type": "Answer",
|
|
328
|
-
"text": "Start with the setup guide if you only need the local path. Choose Pro when an individual operator wants higher limits, personal recall, a local dashboard, DPO export, and operator-managed lesson bundles. Choose the Workflow Hardening Sprint when one workflow owner needs to scope approval boundaries, rollback safety, and evidence requirements before a wider rollout claim."
|
|
329
|
-
}
|
|
330
|
-
},
|
|
331
|
-
{
|
|
332
|
-
"@type": "Question",
|
|
333
|
-
"name": "How do we keep high-risk autonomous runs off the host?",
|
|
334
|
-
"acceptedAnswer": {
|
|
335
|
-
"@type": "Answer",
|
|
336
|
-
"text": "ThumbGate combines pre-action checks with execution guidance. Workflow Sentinel can recommend Docker Sandboxes for risky local actions. The package also contains a signed sandbox-dispatch mechanism, but each deployment must configure and verify that isolation boundary; it is not hosted team lesson sync or a generally available hosted org service."
|
|
337
|
-
}
|
|
338
|
-
},
|
|
339
|
-
{
|
|
340
|
-
"@type": "Question",
|
|
341
|
-
"name": "How are pre-action checks different from prompt rules?",
|
|
342
|
-
"acceptedAnswer": {
|
|
343
|
-
"@type": "Answer",
|
|
344
|
-
"text": "Prompt rules are a starting point, not a finish line. ThumbGate adds a human-feedback loop plus configured Pre-Action Checks at the tool-call boundary. The default policy denies detected secret exfiltration and gate kill/bypass commands while other matching high-risk checks warn; strict mode also denies matching warning-mode checks."
|
|
345
|
-
}
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
"@type": "Question",
|
|
349
|
-
"name": "How does ThumbGate fit the agentic development cycle?",
|
|
350
|
-
"acceptedAnswer": {
|
|
351
|
-
"@type": "Answer",
|
|
352
|
-
"text": "Agentic development is not just generation. Teams need Guide, Generate, Verify, and Solve working as a repeatable loop. ThumbGate can serve as the pre-action execution gate: guidance and accepted feedback can become rules, generated tool calls are evaluated before execution, rules can require verification evidence, and recurring solved failures can become reusable prevention gates."
|
|
353
|
-
}
|
|
189
|
+
.nav-inner { min-height: 70px; display: flex; align-items: center; justify-content: space-between; gap: 24px; }
|
|
190
|
+
.nav-logo { display: inline-flex; align-items: center; gap: 10px; text-decoration: none; font-weight: 850; }
|
|
191
|
+
.nav-logo img { width: 31px; height: 31px; }
|
|
192
|
+
.logo-text { letter-spacing: -0.02em; }
|
|
193
|
+
.nav-links { display: flex; align-items: center; gap: 24px; }
|
|
194
|
+
.nav-links > a { color: var(--muted); text-decoration: none; font-size: 14px; font-weight: 700; }
|
|
195
|
+
.nav-links > a:hover { color: var(--text); }
|
|
196
|
+
.nav-buy, .button-primary, .button-pro {
|
|
197
|
+
display: inline-flex;
|
|
198
|
+
align-items: center;
|
|
199
|
+
justify-content: center;
|
|
200
|
+
min-height: 46px;
|
|
201
|
+
border: 0;
|
|
202
|
+
border-radius: 10px;
|
|
203
|
+
padding: 0 20px;
|
|
204
|
+
color: #06130d !important;
|
|
205
|
+
background: var(--green);
|
|
206
|
+
box-shadow: 0 12px 35px rgba(86, 227, 159, 0.2);
|
|
207
|
+
font-weight: 850 !important;
|
|
208
|
+
text-decoration: none;
|
|
354
209
|
}
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
.
|
|
666
|
-
.
|
|
667
|
-
.
|
|
668
|
-
.
|
|
669
|
-
.
|
|
670
|
-
.
|
|
671
|
-
.
|
|
672
|
-
.
|
|
673
|
-
.
|
|
674
|
-
.
|
|
675
|
-
.
|
|
676
|
-
.
|
|
677
|
-
.
|
|
678
|
-
.
|
|
679
|
-
.
|
|
680
|
-
.
|
|
681
|
-
.
|
|
682
|
-
.
|
|
683
|
-
.
|
|
684
|
-
.
|
|
685
|
-
.
|
|
686
|
-
.
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
210
|
+
.nav-enterprise {
|
|
211
|
+
display: inline-flex;
|
|
212
|
+
align-items: center;
|
|
213
|
+
justify-content: center;
|
|
214
|
+
min-height: 40px;
|
|
215
|
+
border: 1px solid rgba(86, 227, 159, 0.45);
|
|
216
|
+
border-radius: 10px;
|
|
217
|
+
padding: 0 14px;
|
|
218
|
+
color: var(--green) !important;
|
|
219
|
+
background: rgba(86, 227, 159, 0.08);
|
|
220
|
+
font-weight: 800 !important;
|
|
221
|
+
font-size: 13px !important;
|
|
222
|
+
text-decoration: none;
|
|
223
|
+
}
|
|
224
|
+
.nav-enterprise:hover { background: rgba(86, 227, 159, 0.14); color: var(--text) !important; }
|
|
225
|
+
.offer-stack { display: grid; gap: 14px; }
|
|
226
|
+
.pro-card {
|
|
227
|
+
padding: 22px 24px;
|
|
228
|
+
border: 1px solid rgba(56, 215, 255, 0.35);
|
|
229
|
+
border-radius: 16px;
|
|
230
|
+
background: linear-gradient(160deg, rgba(18, 28, 40, 0.98), rgba(12, 16, 24, 0.98));
|
|
231
|
+
}
|
|
232
|
+
.pro-card .price strong { color: var(--cyan); }
|
|
233
|
+
.pro-card h2 { margin: 0 0 6px; font-size: 20px; }
|
|
234
|
+
.pro-card > p { margin: 0 0 14px; color: var(--muted); font-size: 14px; }
|
|
235
|
+
.pro-card .button-pro { width: 100%; min-height: 48px; background: var(--cyan); color: #041016 !important; box-shadow: 0 12px 35px rgba(56, 215, 255, 0.18); }
|
|
236
|
+
.pro-card .checkout-note { margin: 10px 0 0 !important; color: var(--muted) !important; font-size: 12px; text-align: center; }
|
|
237
|
+
.offer-points { margin: 14px 0 0; padding: 0; list-style: none; display: grid; gap: 8px; }
|
|
238
|
+
.offer-points li {
|
|
239
|
+
position: relative;
|
|
240
|
+
padding-left: 18px;
|
|
241
|
+
color: var(--muted);
|
|
242
|
+
font-size: 13px;
|
|
243
|
+
line-height: 1.4;
|
|
244
|
+
}
|
|
245
|
+
.offer-points li::before {
|
|
246
|
+
content: "✓";
|
|
247
|
+
position: absolute;
|
|
248
|
+
left: 0;
|
|
249
|
+
color: var(--green);
|
|
250
|
+
font-weight: 900;
|
|
251
|
+
}
|
|
252
|
+
.checkout-card .button-primary { width: 100%; }
|
|
253
|
+
.hero { padding: clamp(72px, 10vw, 128px) 0 72px; }
|
|
254
|
+
.hero-grid { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(340px, 0.92fr); gap: clamp(42px, 7vw, 88px); align-items: center; }
|
|
255
|
+
.eyebrow, .section-kicker { color: var(--green); font: 800 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: 0.13em; text-transform: uppercase; }
|
|
256
|
+
h1 { max-width: 760px; margin: 18px 0; font-size: clamp(46px, 7vw, 78px); line-height: 0.98; letter-spacing: -0.055em; }
|
|
257
|
+
.hero-lede { max-width: 650px; margin: 0 0 24px; color: #c5ceda; font-size: clamp(18px, 2vw, 22px); line-height: 1.5; }
|
|
258
|
+
.fit-line { margin: 0 0 18px; color: var(--muted); font-size: 14px; }
|
|
259
|
+
.fit-line strong { color: var(--text); }
|
|
260
|
+
.spec-chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 22px; }
|
|
261
|
+
.spec-chip {
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
gap: 6px;
|
|
265
|
+
border: 1px solid rgba(56, 215, 255, 0.28);
|
|
266
|
+
border-radius: 999px;
|
|
267
|
+
padding: 6px 11px;
|
|
268
|
+
color: #d7e6f3;
|
|
269
|
+
background: rgba(17, 23, 34, 0.72);
|
|
270
|
+
font: 750 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
271
|
+
}
|
|
272
|
+
.spec-chip strong { color: var(--cyan); font-weight: 850; }
|
|
273
|
+
.proof-link { color: var(--cyan); font-weight: 750; text-decoration: none; }
|
|
274
|
+
.proof-link:hover { text-decoration: underline; }
|
|
275
|
+
.install-hint {
|
|
276
|
+
margin: 14px 0 0;
|
|
277
|
+
color: var(--muted);
|
|
278
|
+
font: 13px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
279
|
+
}
|
|
280
|
+
.install-hint code {
|
|
281
|
+
color: var(--cyan);
|
|
282
|
+
background: rgba(56, 215, 255, 0.08);
|
|
283
|
+
border: 1px solid rgba(56, 215, 255, 0.18);
|
|
284
|
+
border-radius: 6px;
|
|
285
|
+
padding: 2px 7px;
|
|
286
|
+
}
|
|
287
|
+
.install-hint a { color: var(--cyan); font-weight: 750; text-decoration: none; }
|
|
288
|
+
.install-hint a:hover { text-decoration: underline; }
|
|
289
|
+
.terminal-chrome {
|
|
290
|
+
display: flex;
|
|
291
|
+
align-items: center;
|
|
292
|
+
justify-content: space-between;
|
|
293
|
+
gap: 12px;
|
|
294
|
+
padding: 11px 16px;
|
|
295
|
+
border-bottom: 1px solid #252f40;
|
|
296
|
+
background: #121824;
|
|
297
|
+
color: #8b97ab;
|
|
298
|
+
font: 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
299
|
+
}
|
|
300
|
+
.terminal-chrome .dots { display: flex; gap: 7px; }
|
|
301
|
+
.terminal-chrome .dots span { width: 10px; height: 10px; border-radius: 50%; background: #536078; }
|
|
302
|
+
.terminal-chrome .title { color: #c8d2df; }
|
|
303
|
+
.terminal-status {
|
|
304
|
+
display: flex;
|
|
305
|
+
justify-content: space-between;
|
|
306
|
+
gap: 12px;
|
|
307
|
+
padding: 10px 16px 14px;
|
|
308
|
+
border-top: 1px solid #252f40;
|
|
309
|
+
color: #8b97ab;
|
|
310
|
+
font: 12px/1.3 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
311
|
+
}
|
|
312
|
+
.terminal-status .accent { color: var(--cyan); }
|
|
313
|
+
.checkout-card {
|
|
314
|
+
padding: 28px;
|
|
315
|
+
border: 1px solid rgba(86, 227, 159, 0.35);
|
|
316
|
+
border-radius: 18px;
|
|
317
|
+
background: linear-gradient(160deg, rgba(23, 31, 45, 0.98), rgba(13, 18, 27, 0.98));
|
|
318
|
+
box-shadow: 0 28px 90px rgba(0, 0, 0, 0.42);
|
|
319
|
+
}
|
|
320
|
+
.price { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }
|
|
321
|
+
.price strong { font-size: 44px; line-height: 1; letter-spacing: -0.05em; }
|
|
322
|
+
.price span { color: var(--muted); font-size: 14px; }
|
|
323
|
+
.checkout-card h2 { margin: 0 0 6px; font-size: 21px; }
|
|
324
|
+
.checkout-card > p { margin: 0 0 22px; color: var(--muted); }
|
|
325
|
+
.checkout-card label { display: block; margin-bottom: 7px; font-size: 13px; font-weight: 750; }
|
|
326
|
+
.checkout-card input[type="email"] {
|
|
327
|
+
width: 100%;
|
|
328
|
+
min-height: 50px;
|
|
329
|
+
border: 1px solid var(--line);
|
|
330
|
+
border-radius: 10px;
|
|
331
|
+
padding: 0 14px;
|
|
332
|
+
color: var(--text);
|
|
333
|
+
background: #090d14;
|
|
334
|
+
outline: none;
|
|
335
|
+
}
|
|
336
|
+
.checkout-card input[type="email"]:focus { border-color: var(--green); box-shadow: 0 0 0 3px rgba(86, 227, 159, 0.12); }
|
|
337
|
+
.checkout-card .button-primary { width: 100%; margin-top: 12px; min-height: 52px; }
|
|
338
|
+
.checkout-note { margin: 12px 0 0 !important; color: var(--muted) !important; font-size: 12px; text-align: center; }
|
|
339
|
+
.offer-points { display: grid; gap: 10px; margin: 22px 0 0; padding: 18px 0 0; border-top: 1px solid var(--line); list-style: none; }
|
|
340
|
+
.offer-points li { display: flex; gap: 10px; color: #c5ceda; font-size: 14px; }
|
|
341
|
+
.offer-points li::before { content: "✓"; color: var(--green); font-weight: 900; }
|
|
342
|
+
section { padding: 82px 0; }
|
|
343
|
+
section + section { border-top: 1px solid rgba(39, 50, 70, 0.65); }
|
|
344
|
+
.section-kicker { color: var(--cyan); }
|
|
345
|
+
.section-title { max-width: 780px; margin: 12px 0 14px; font-size: clamp(32px, 4vw, 50px); line-height: 1.08; letter-spacing: -0.04em; }
|
|
346
|
+
.section-lede { max-width: 700px; margin: 0; color: var(--muted); font-size: 18px; }
|
|
347
|
+
.loop { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 38px; }
|
|
348
|
+
.loop-step {
|
|
349
|
+
position: relative;
|
|
350
|
+
display: block;
|
|
351
|
+
width: 100%;
|
|
352
|
+
min-height: 190px;
|
|
353
|
+
padding: 24px;
|
|
354
|
+
border: 1px solid var(--line);
|
|
355
|
+
border-radius: 15px;
|
|
356
|
+
background: var(--panel);
|
|
357
|
+
color: inherit;
|
|
358
|
+
text-align: left;
|
|
359
|
+
font: inherit;
|
|
360
|
+
cursor: pointer;
|
|
361
|
+
transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
|
|
362
|
+
}
|
|
363
|
+
.loop-step:hover, .loop-step:focus-visible {
|
|
364
|
+
border-color: rgba(56, 215, 255, 0.55);
|
|
365
|
+
box-shadow: 0 0 0 1px rgba(56, 215, 255, 0.25);
|
|
366
|
+
outline: none;
|
|
367
|
+
}
|
|
368
|
+
.loop-step.is-active {
|
|
369
|
+
border-color: rgba(56, 215, 255, 0.75);
|
|
370
|
+
box-shadow: 0 0 0 2px rgba(56, 215, 255, 0.2), 0 16px 40px rgba(0, 0, 0, 0.35);
|
|
371
|
+
}
|
|
372
|
+
.loop-step:not(:last-child)::after { content: "→"; position: absolute; top: 50%; right: -24px; z-index: 2; color: var(--cyan); font-size: 26px; transform: translateY(-50%); pointer-events: none; }
|
|
373
|
+
.loop-number { display: inline-flex; width: 30px; height: 30px; align-items: center; justify-content: center; border-radius: 50%; color: #071018; background: var(--cyan); font-weight: 900; }
|
|
374
|
+
.loop-step h3 { margin: 18px 0 7px; font-size: 20px; }
|
|
375
|
+
.loop-step p { margin: 0; color: var(--muted); }
|
|
376
|
+
.loop-hint {
|
|
377
|
+
display: inline-block;
|
|
378
|
+
margin-top: 14px;
|
|
379
|
+
color: var(--cyan);
|
|
380
|
+
font: 750 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
381
|
+
}
|
|
382
|
+
.loop-step.is-active .loop-hint { color: var(--green); }
|
|
383
|
+
.decisions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 14px; }
|
|
384
|
+
.decision { border: 1px solid; border-radius: 999px; padding: 4px 9px; font: 800 11px/1 ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
385
|
+
.allow { color: var(--green); border-color: rgba(86, 227, 159, 0.45); }
|
|
386
|
+
.warn { color: var(--yellow); border-color: rgba(255, 209, 102, 0.45); }
|
|
387
|
+
.deny { color: var(--red); border-color: rgba(255, 100, 124, 0.45); }
|
|
388
|
+
.loop-back { margin: 18px 0 0; color: #c5ceda; text-align: center; }
|
|
389
|
+
.loop-back strong { color: var(--cyan); }
|
|
390
|
+
.loop-panel {
|
|
391
|
+
display: none;
|
|
392
|
+
margin-top: 18px;
|
|
393
|
+
padding: 22px 24px;
|
|
394
|
+
border: 1px solid rgba(56, 215, 255, 0.35);
|
|
395
|
+
border-radius: 16px;
|
|
396
|
+
background: linear-gradient(160deg, rgba(12, 18, 28, 0.98), rgba(8, 12, 18, 0.98));
|
|
397
|
+
}
|
|
398
|
+
.loop-panel.is-open { display: block; }
|
|
399
|
+
.loop-panel-header {
|
|
400
|
+
display: flex;
|
|
401
|
+
flex-wrap: wrap;
|
|
402
|
+
align-items: baseline;
|
|
403
|
+
justify-content: space-between;
|
|
404
|
+
gap: 10px;
|
|
405
|
+
margin-bottom: 14px;
|
|
406
|
+
}
|
|
407
|
+
.loop-panel-kicker {
|
|
408
|
+
color: var(--cyan);
|
|
409
|
+
font: 800 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
410
|
+
letter-spacing: 0.08em;
|
|
411
|
+
text-transform: uppercase;
|
|
412
|
+
}
|
|
413
|
+
.loop-panel-title { margin: 0; font-size: 22px; letter-spacing: -0.02em; }
|
|
414
|
+
.loop-panel-close {
|
|
415
|
+
border: 1px solid var(--line);
|
|
416
|
+
border-radius: 8px;
|
|
417
|
+
background: transparent;
|
|
418
|
+
color: var(--muted);
|
|
419
|
+
padding: 6px 12px;
|
|
420
|
+
font: 700 12px/1 inherit;
|
|
421
|
+
cursor: pointer;
|
|
422
|
+
}
|
|
423
|
+
.loop-panel-close:hover { color: var(--text); border-color: var(--cyan); }
|
|
424
|
+
.loop-panel-grid {
|
|
425
|
+
display: grid;
|
|
426
|
+
grid-template-columns: minmax(0, 1.15fr) minmax(220px, 0.85fr);
|
|
427
|
+
gap: 18px;
|
|
428
|
+
align-items: start;
|
|
429
|
+
}
|
|
430
|
+
.loop-panel-terminal {
|
|
431
|
+
overflow: hidden;
|
|
432
|
+
border: 1px solid #303b50;
|
|
433
|
+
border-radius: 12px;
|
|
434
|
+
background: #090d14;
|
|
435
|
+
}
|
|
436
|
+
.loop-panel-terminal .bar {
|
|
437
|
+
display: flex;
|
|
438
|
+
justify-content: space-between;
|
|
439
|
+
gap: 10px;
|
|
440
|
+
padding: 10px 14px;
|
|
441
|
+
border-bottom: 1px solid #252f40;
|
|
442
|
+
color: #8b97ab;
|
|
443
|
+
font: 12px/1.2 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
444
|
+
}
|
|
445
|
+
.loop-panel-terminal pre {
|
|
446
|
+
margin: 0;
|
|
447
|
+
padding: 16px 18px;
|
|
448
|
+
white-space: pre-wrap;
|
|
449
|
+
color: #c8d2df;
|
|
450
|
+
font: 13px/1.65 ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
451
|
+
}
|
|
452
|
+
.loop-panel-terminal .g { color: var(--green); }
|
|
453
|
+
.loop-panel-terminal .c { color: var(--cyan); }
|
|
454
|
+
.loop-panel-terminal .y { color: var(--yellow); }
|
|
455
|
+
.loop-panel-terminal .r { color: var(--red); }
|
|
456
|
+
.loop-panel-side h4 {
|
|
457
|
+
margin: 0 0 8px;
|
|
458
|
+
font-size: 14px;
|
|
459
|
+
color: var(--text);
|
|
460
|
+
}
|
|
461
|
+
.loop-panel-side p, .loop-panel-side li {
|
|
462
|
+
margin: 0;
|
|
463
|
+
color: var(--muted);
|
|
464
|
+
font-size: 14px;
|
|
465
|
+
line-height: 1.5;
|
|
466
|
+
}
|
|
467
|
+
.loop-panel-side ul {
|
|
468
|
+
margin: 0 0 14px;
|
|
469
|
+
padding-left: 18px;
|
|
470
|
+
display: grid;
|
|
471
|
+
gap: 6px;
|
|
472
|
+
}
|
|
473
|
+
.loop-mode-toggle {
|
|
474
|
+
display: flex;
|
|
475
|
+
gap: 8px;
|
|
476
|
+
margin: 0 0 12px;
|
|
477
|
+
}
|
|
478
|
+
.loop-mode-toggle button {
|
|
479
|
+
border: 1px solid var(--line);
|
|
480
|
+
border-radius: 999px;
|
|
481
|
+
background: transparent;
|
|
482
|
+
color: var(--muted);
|
|
483
|
+
padding: 6px 12px;
|
|
484
|
+
font: 750 12px/1 inherit;
|
|
485
|
+
cursor: pointer;
|
|
486
|
+
}
|
|
487
|
+
.loop-mode-toggle button.is-on {
|
|
488
|
+
border-color: rgba(56, 215, 255, 0.55);
|
|
489
|
+
color: var(--cyan);
|
|
490
|
+
background: rgba(56, 215, 255, 0.08);
|
|
491
|
+
}
|
|
492
|
+
.loop-panel-actions {
|
|
493
|
+
display: flex;
|
|
494
|
+
flex-wrap: wrap;
|
|
495
|
+
gap: 10px;
|
|
496
|
+
margin-top: 14px;
|
|
497
|
+
}
|
|
498
|
+
.loop-panel-actions a, .loop-panel-actions button.copy-cmd {
|
|
499
|
+
display: inline-flex;
|
|
500
|
+
align-items: center;
|
|
501
|
+
min-height: 38px;
|
|
502
|
+
padding: 0 14px;
|
|
503
|
+
border-radius: 8px;
|
|
504
|
+
border: 1px solid rgba(56, 215, 255, 0.35);
|
|
505
|
+
background: rgba(56, 215, 255, 0.08);
|
|
506
|
+
color: var(--cyan);
|
|
507
|
+
text-decoration: none;
|
|
508
|
+
font: 750 13px/1 inherit;
|
|
509
|
+
cursor: pointer;
|
|
510
|
+
}
|
|
511
|
+
.loop-panel-actions a.secondary, .loop-panel-actions button.copy-cmd {
|
|
512
|
+
border-color: var(--line);
|
|
513
|
+
background: transparent;
|
|
514
|
+
color: var(--muted);
|
|
515
|
+
}
|
|
516
|
+
@media (max-width: 840px) {
|
|
517
|
+
.loop-panel-grid { grid-template-columns: 1fr; }
|
|
518
|
+
}
|
|
519
|
+
.deliverables { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-top: 36px; }
|
|
520
|
+
.deliverable { padding: 24px; border: 1px solid var(--line); border-radius: 15px; background: var(--panel); }
|
|
521
|
+
.deliverable h3 { margin: 0 0 8px; font-size: 18px; }
|
|
522
|
+
.deliverable p { margin: 0; color: var(--muted); }
|
|
523
|
+
.boundary { margin-top: 18px; padding: 18px 20px; border-left: 3px solid var(--yellow); color: var(--muted); background: rgba(255, 209, 102, 0.06); }
|
|
524
|
+
.proof-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(300px, 0.95fr); gap: 30px; align-items: center; margin-top: 34px; }
|
|
525
|
+
.terminal { overflow: hidden; border: 1px solid #303b50; border-radius: 15px; background: #090d14; box-shadow: 0 24px 70px rgba(0, 0, 0, 0.35); }
|
|
526
|
+
.terminal-bar { display: flex; gap: 7px; padding: 13px 16px; border-bottom: 1px solid #252f40; background: #121824; }
|
|
527
|
+
.terminal-bar span { width: 10px; height: 10px; border-radius: 50%; background: #536078; }
|
|
528
|
+
.terminal pre { margin: 0; padding: 24px; white-space: pre-wrap; color: #c8d2df; font: 14px/1.7 ui-monospace, SFMono-Regular, Menlo, monospace; }
|
|
529
|
+
.terminal .red { color: var(--red); }
|
|
530
|
+
.terminal .green { color: var(--green); }
|
|
531
|
+
.proof-copy p { color: var(--muted); }
|
|
532
|
+
.proof-copy a { color: var(--cyan); font-weight: 750; }
|
|
533
|
+
.faq-list { max-width: 820px; margin-top: 34px; border-top: 1px solid var(--line); }
|
|
534
|
+
.faq-item { border-bottom: 1px solid var(--line); }
|
|
535
|
+
.faq-q { width: 100%; display: flex; justify-content: space-between; gap: 20px; padding: 22px 0; border: 0; color: var(--text); background: transparent; text-align: left; font-weight: 800; }
|
|
536
|
+
.faq-q::after { content: "+"; color: var(--cyan); font-size: 22px; }
|
|
537
|
+
.faq-item.open .faq-q::after { content: "−"; }
|
|
538
|
+
.faq-a { display: none; max-width: 730px; padding: 0 0 22px; color: var(--muted); }
|
|
539
|
+
.faq-item.open .faq-a { display: block; }
|
|
540
|
+
.final { text-align: center; }
|
|
541
|
+
.final .section-title, .final .section-lede { margin-left: auto; margin-right: auto; }
|
|
542
|
+
.final .nav-buy { margin-top: 26px; }
|
|
543
|
+
footer { padding: 32px 0 46px; border-top: 1px solid var(--line); color: var(--muted); font-size: 13px; }
|
|
544
|
+
.footer-inner { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 18px; }
|
|
545
|
+
.footer-links { display: flex; flex-wrap: wrap; gap: 18px; }
|
|
546
|
+
.footer-links a { color: var(--muted); }
|
|
547
|
+
@media (max-width: 840px) {
|
|
548
|
+
.nav-links > a:not(.nav-buy):not(.nav-enterprise) { display: none; }
|
|
549
|
+
.nav-links { gap: 10px; }
|
|
550
|
+
.hero-grid, .proof-grid { grid-template-columns: 1fr; }
|
|
551
|
+
.loop, .deliverables { grid-template-columns: 1fr; }
|
|
552
|
+
.loop-step:not(:last-child)::after { content: "↓"; top: auto; right: 50%; bottom: -28px; transform: translateX(50%); }
|
|
553
|
+
}
|
|
554
|
+
@media (max-width: 520px) {
|
|
555
|
+
.shell { width: min(calc(100% - 24px), var(--max)); }
|
|
556
|
+
.nav-inner { min-height: 62px; }
|
|
557
|
+
.nav-buy, .nav-enterprise { padding: 0 10px; font-size: 12px; min-height: 38px; }
|
|
558
|
+
.hero { padding-top: 62px; }
|
|
559
|
+
h1 { font-size: 46px; }
|
|
560
|
+
.checkout-card, .pro-card { padding: 22px 18px; }
|
|
561
|
+
}
|
|
562
|
+
</style>
|
|
699
563
|
</head>
|
|
700
|
-
<body>
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
<nav>
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
<div class="nav-links">
|
|
707
|
-
<a href="#how-it-works">How It Works</a>
|
|
708
|
-
<a href="/pricing">Pricing</a>
|
|
709
|
-
<a href="/case-studies">Case Studies</a>
|
|
710
|
-
<a href="/guides/autoresearch-agent-safety">Autoresearch</a>
|
|
711
|
-
<a href="#faq">FAQ</a>
|
|
712
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
713
|
-
<a href="#compatibility" style="display:none;">Compatibility</a>
|
|
714
|
-
<a href="#compare-guides" style="display:none;">Comparisons</a>
|
|
715
|
-
<a href="/guide" style="display:none;">Setup Guide</a>
|
|
716
|
-
<a href="/learn">Learn</a>
|
|
717
|
-
<a href="/compare" style="display:none;">Compare</a>
|
|
718
|
-
<a href="/dashboard" style="display:none;">Dashboard Demo</a>
|
|
719
|
-
<a href="#claude-code-section" class="nav-claude" onclick="posthog.capture('nav_claude_click')" style="display:none;">Claude</a>
|
|
720
|
-
<a href="#workflow-sprint-intake" onclick="posthog.capture('workflow_sprint')" style="display:none;">Start Sprint</a>
|
|
721
|
-
<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>
|
|
722
|
-
<a href="/go/diagnostic?utm_source=website&utm_medium=nav&utm_campaign=money_today&utm_content=nav_diagnostic&cta_id=nav_pay_diagnostic&cta_placement=nav&plan_id=sprint_diagnostic" data-revenue-cta data-cta-id="nav_pay_diagnostic" data-cta-placement="nav" data-tier="service" data-plan-id="sprint_diagnostic" data-price="__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__" onclick="trackRevenueCta(this);try{posthog.capture('nav_diagnostic_click',{cta:'nav_pay_diagnostic',price:__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__})}catch(_){}" class="nav-cta">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</a>
|
|
723
|
-
</div>
|
|
724
|
-
</div>
|
|
725
|
-
</nav>
|
|
726
|
-
|
|
727
|
-
<!-- HERO -->
|
|
728
|
-
<section class="hero">
|
|
729
|
-
<div class="container">
|
|
730
|
-
<div class="hero-badge">👍 👎 Local-first · open-source · enterprise governance when agents touch real systems</div>
|
|
731
|
-
<h1>Catch AI agents before they spend money, leak secrets, or break production.</h1>
|
|
732
|
-
<p class="hero-lede">Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode, and MCP tools can touch terminals, repos, databases, SaaS APIs, and cloud systems. After a configured agent proposes a tool call, ThumbGate evaluates it before execution and records the decision. The default policy denies detected secret exfiltration plus commands that kill the ThumbGate gate process or enable its bypass environment variable; other matched high-risk classes such as destructive deletes, force-pushes, and fetch-and-run commands warn by default. Strict mode turns matching warning-mode checks into denies. The beachhead buyer is an enterprise engineering, security, or platform team that needs governed AI-agent execution before agents touch regulated or high-blast-radius workflows.</p>
|
|
733
|
-
|
|
734
|
-
<div class="hero-signals" aria-label="June 2026 buyer signals">
|
|
735
|
-
<a class="signal-pill signal-down" href="#june-2026-proof">MCP tool risk</a>
|
|
736
|
-
<a class="signal-pill" href="#june-2026-proof">Managed-agent rollout</a>
|
|
737
|
-
<a class="signal-pill" href="#june-2026-proof">Token spend pressure</a>
|
|
738
|
-
<a class="signal-pill signal-up" href="#workflow-sprint-intake">Regulated agent governance</a>
|
|
739
|
-
</div>
|
|
740
|
-
|
|
741
|
-
<div class="hero-proof-card" aria-label="ThumbGate flagging dangerous AI agent commands in real time">
|
|
742
|
-
<img src="/media/thumbgate-demo.gif" alt="ThumbGate flagging an AI agent's rm -rf, git push --force, and chmod 777 in real time — flagging them by default and hard-blocking under strict mode — while letting safe commands through" style="width:100%;display:block;border-radius:8px;" loading="lazy" />
|
|
743
|
-
</div>
|
|
744
|
-
|
|
745
|
-
<div class="hero-actions">
|
|
746
|
-
<a href="/go/diagnostic?utm_source=website&utm_medium=hero_cta&utm_campaign=money_today&utm_content=hero_diagnostic&cta_id=hero_workflow_sprint_diagnostic_checkout&cta_placement=hero&plan_id=sprint_diagnostic" data-revenue-cta data-cta-id="hero_workflow_sprint_diagnostic_checkout" data-cta-placement="hero" data-tier="service" data-plan-id="sprint_diagnostic" data-price="__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__" data-sprint-paid-path="diagnostic" onclick="trackRevenueCta(this);sendFirstPartyTelemetry('workflow_sprint_diagnostic_checkout_started',{ctaId:'hero_workflow_sprint_diagnostic_checkout',ctaPlacement:'hero',offer:'sprint_diagnostic',price:__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__});try{posthog.capture('hero_diagnostic_checkout_click',{cta:'hero_diagnostic',price:__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__})}catch(_){}" class="btn-pro-page hero-pro hero-pro-primary hero-diagnostic">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic</a>
|
|
747
|
-
<a href="/go/sprint?utm_source=website&utm_medium=hero_cta&utm_campaign=money_today&utm_content=hero_sprint&cta_id=hero_workflow_sprint_checkout&cta_placement=hero&plan_id=workflow_sprint" data-revenue-cta data-cta-id="hero_workflow_sprint_checkout" data-cta-placement="hero" data-tier="service" data-plan-id="workflow_sprint" data-price="__WORKFLOW_SPRINT_PRICE_DOLLARS__" data-sprint-paid-path="sprint" onclick="trackRevenueCta(this);sendFirstPartyTelemetry('workflow_sprint_checkout_started',{ctaId:'hero_workflow_sprint_checkout',ctaPlacement:'hero',offer:'workflow_sprint',price:__WORKFLOW_SPRINT_PRICE_DOLLARS__});try{posthog.capture('hero_sprint_checkout_click',{cta:'hero_sprint',price:__WORKFLOW_SPRINT_PRICE_DOLLARS__})}catch(_){}" class="btn-pro-page hero-pro">Pay $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint</a>
|
|
748
|
-
<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">Start Pro — $19/mo</a>
|
|
749
|
-
<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-free btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
|
|
750
|
-
</div>
|
|
751
|
-
<p class="hero-paid-note" style="margin-top:4px;">Money path today: <strong>Workflow Hardening Diagnostic ($__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__)</strong> or <strong>Sprint ($__WORKFLOW_SPRINT_PRICE_DOLLARS__)</strong> for one repeated agent failure. Pro stays the solo self-serve lane. Prefer scoping first? <a href="#workflow-sprint-intake" style="color:var(--cyan);" 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'});sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'hero_workflow_sprint_recovery_intake',ctaPlacement:'hero',offer:'workflow_sprint_intake'});">Send workflow first</a>.</p>
|
|
752
|
-
|
|
753
|
-
<div class="offer-router" aria-label="Choose the right ThumbGate path">
|
|
754
|
-
<div class="offer-route primary">
|
|
755
|
-
<strong>Team / enterprise: buy proof this week</strong>
|
|
756
|
-
<p>One workflow. One repeated failure. Paid diagnostic or sprint with Stripe — credit applies when you continue to implementation.</p>
|
|
757
|
-
<a href="/go/diagnostic?utm_source=website&utm_medium=offer_router&utm_campaign=money_today&cta_id=router_pay_diagnostic&cta_placement=offer_router&plan_id=sprint_diagnostic" data-revenue-cta data-cta-id="router_pay_diagnostic" data-cta-placement="offer_router" data-tier="service" data-plan-id="sprint_diagnostic" data-price="__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__" onclick="trackRevenueCta(this);sendFirstPartyTelemetry('workflow_sprint_diagnostic_checkout_started',{ctaId:'router_pay_diagnostic',ctaPlacement:'offer_router',offer:'sprint_diagnostic'});">Pay $__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__ diagnostic →</a>
|
|
758
|
-
<a href="/go/sprint?utm_source=website&utm_medium=offer_router&utm_campaign=money_today&cta_id=router_pay_sprint&cta_placement=offer_router&plan_id=workflow_sprint" data-revenue-cta data-cta-id="router_pay_sprint" data-cta-placement="offer_router" data-tier="service" data-plan-id="workflow_sprint" data-price="__WORKFLOW_SPRINT_PRICE_DOLLARS__" style="display:block;margin-top:8px;" onclick="trackRevenueCta(this);sendFirstPartyTelemetry('workflow_sprint_checkout_started',{ctaId:'router_pay_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Pay $__WORKFLOW_SPRINT_PRICE_DOLLARS__ sprint →</a>
|
|
759
|
-
</div>
|
|
760
|
-
<div class="offer-route">
|
|
761
|
-
<strong>Solo operator: Start Pro</strong>
|
|
762
|
-
<p>Unlimited rules, recall, proof, exports after one real caught repeat.</p>
|
|
763
|
-
<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>
|
|
764
|
-
</div>
|
|
765
|
-
<div class="offer-route">
|
|
766
|
-
<strong>Still evaluating: Free CLI or intake</strong>
|
|
767
|
-
<p>2 captures/day, 3 active rules. Or send the workflow if you need fit review before paying.</p>
|
|
768
|
-
<button data-router-install onclick="copyInstall(this)"><span class="copy-hint">Copy npx thumbgate init</span></button>
|
|
769
|
-
<a href="#workflow-sprint-intake" style="display:block;margin-top:10px;color:var(--cyan);font-weight:700;text-decoration:none;" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});sendFirstPartyTelemetry('workflow_sprint_recovery_intake_clicked',{ctaId:'router_workflow_sprint_recovery_intake',ctaPlacement:'offer_router',offer:'workflow_sprint_intake'});">Send workflow first →</a>
|
|
770
|
-
</div>
|
|
771
|
-
</div>
|
|
772
|
-
|
|
773
|
-
<div style="max-width:920px;margin:22px auto 0;display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;text-align:left;">
|
|
774
|
-
<div style="border:1px solid rgba(34,211,238,0.25);border-radius:10px;background:rgba(34,211,238,0.055);padding:16px;">
|
|
775
|
-
<strong style="display:block;color:var(--cyan);margin-bottom:6px;">Ideal customer</strong>
|
|
776
|
-
<span style="color:var(--text-dim);font-size:13px;line-height:1.55;">Enterprise engineering, security, and platform teams already using AI coding agents in repos, CI/CD, SaaS APIs, cloud operations, or audited workflows.</span>
|
|
777
|
-
</div>
|
|
778
|
-
<div style="border:1px solid rgba(74,222,128,0.24);border-radius:10px;background:rgba(74,222,128,0.055);padding:16px;">
|
|
779
|
-
<strong style="display:block;color:var(--green);margin-bottom:6px;">Pain</strong>
|
|
780
|
-
<span style="color:var(--text-dim);font-size:13px;line-height:1.55;">Security is the pain: agents can repeat dangerous actions. Enterprise governance is the budget: policy, auditability, approvals, and shared prevention before execution.</span>
|
|
781
|
-
</div>
|
|
782
|
-
<div style="border:1px solid rgba(168,85,247,0.24);border-radius:10px;background:rgba(168,85,247,0.055);padding:16px;">
|
|
783
|
-
<strong style="display:block;color:#c084fc;margin-bottom:6px;">Partnership fit</strong>
|
|
784
|
-
<span style="color:var(--text-dim);font-size:13px;line-height:1.55;">Detection and coordination layers can identify drift. ThumbGate turns approved findings into enforceable PreToolUse rules with decision evidence.</span>
|
|
785
|
-
</div>
|
|
786
|
-
</div>
|
|
787
|
-
|
|
788
|
-
<div class="hero-trust-bar">
|
|
789
|
-
<span><a href="https://www.npmjs.com/package/thumbgate" target="_blank" rel="noopener" style="color:inherit;text-decoration:none;"><img src="https://img.shields.io/npm/dw/thumbgate?label=npm&color=22d3ee" alt="weekly npm installs of thumbgate" loading="lazy" style="vertical-align:middle;"></a></span>
|
|
790
|
-
<span>MIT open source</span>
|
|
791
|
-
<span>Local-first</span>
|
|
792
|
-
<span>Works with MCP-compatible agents</span>
|
|
793
|
-
<span>Verification evidence in GitHub</span>
|
|
794
|
-
</div>
|
|
795
|
-
<figure style="max-width:760px;margin:32px auto 0;padding:20px 24px;border-left:3px solid var(--cyan);background:rgba(34,211,238,0.04);border-radius:0 8px 8px 0;">
|
|
796
|
-
<blockquote style="margin:0;font-size:18px;line-height:1.5;color:var(--text);font-style:italic;">“A better dashboard doesn’t make the agents more reliable. The hard part isn’t visibility. It’s trust.”</blockquote>
|
|
797
|
-
<figcaption style="margin-top:12px;font-size:13px;color:var(--text-muted);">— Rob May, CEO & co-founder, Neurometric AI, in <a href="https://thenewstack.io/claude-code-agent-view/" target="_blank" rel="noopener" style="color:var(--cyan);">The New Stack</a> on Anthropic’s Claude Code Agent View (May 2026). This is Rob May describing the industry, not an endorsement of ThumbGate. ThumbGate addresses that trust problem with configured PreToolUse gates, accepted feedback, explicit prevention rules, and local decision records.</figcaption>
|
|
798
|
-
</figure>
|
|
799
|
-
<figure style="max-width:760px;margin:24px auto 0;padding:20px 24px;border-left:3px solid var(--cyan);background:rgba(34,211,238,0.04);border-radius:0 8px 8px 0;">
|
|
800
|
-
<p style="margin:0 0 8px;font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:0.08em;">Local-first is the new default</p>
|
|
801
|
-
<blockquote style="margin:0;font-size:16px;line-height:1.55;color:var(--text);">Perplexity demoed a Personal Computer agent at Computex 2026 that <strong>asks the user before sending sensitive content to the cloud</strong>. Automation Anywhere shipped EnterpriseClaw with Cisco, NVIDIA, Okta, and OpenAI — <strong>central policy, locally enforced, audit reported back</strong>. The architectural debate is settled. ThumbGate runs the same pattern for the coding agent already on your laptop.</blockquote>
|
|
802
|
-
<figcaption style="margin-top:12px;font-size:13px;color:var(--text-muted);">Sources: Perplexity at Intel Computex keynote (2026-06-02), Automation Anywhere EnterpriseClaw launch (Imagine 2026), <a href="https://thenewstack.io/automation-anywhere-enterpriseclaw-ai-agents/" target="_blank" rel="noopener" style="color:var(--cyan);">The New Stack coverage</a>.</figcaption>
|
|
803
|
-
</figure>
|
|
804
|
-
<div class="first-check-card" id="first-check">
|
|
805
|
-
<div class="section-label" style="text-align:left;margin-bottom:8px;">First-Dollar Activation Path</div>
|
|
806
|
-
<h2>Run your first pre-action check locally.</h2>
|
|
807
|
-
<p>Install ThumbGate, capture concrete feedback, and let the configured PreToolUse hook flag a matching action before execution. Upgrade only when you need higher limits, recall, a personal dashboard, or exports.</p>
|
|
808
|
-
<div class="first-check-steps">
|
|
809
|
-
<div class="first-check-step">
|
|
810
|
-
<strong>1. Install ThumbGate</strong>
|
|
811
|
-
<p>Run <code>npx thumbgate init</code> in your repo. Claude, Cursor, Codex, Gemini, Amp, Cline, and OpenCode are supported through local hook or MCP-compatible setup paths.</p>
|
|
812
|
-
</div>
|
|
813
|
-
<div class="first-check-step">
|
|
814
|
-
<strong>2. Give feedback</strong>
|
|
815
|
-
<p>Use thumbs up for a good pattern and thumbs down with concrete context for a failure. Accepted feedback becomes a local lesson; recurring failures can be promoted into prevention rules.</p>
|
|
816
|
-
</div>
|
|
817
|
-
<div class="first-check-step">
|
|
818
|
-
<strong>3. The repeat gets flagged</strong>
|
|
819
|
-
<p>A matching tool call is evaluated and recorded before execution, with a reason the agent can use to choose a safer plan. Detected secret exfiltration and commands that kill the gate process or enable its bypass variable are denied by default; strict mode also denies matching warning-mode checks.</p>
|
|
820
|
-
</div>
|
|
821
|
-
</div>
|
|
822
|
-
</div>
|
|
823
|
-
|
|
824
|
-
<nav class="proof-bar" aria-label="ThumbGate install and proof links">
|
|
825
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" target="_blank" rel="noopener">Claude Extension →</a>
|
|
826
|
-
<a href="/guide" rel="noopener">CLI setup guide</a>
|
|
827
|
-
<a href="/codex-plugin?utm_source=website&utm_medium=proof_bar&utm_campaign=codex_plugin&cta_id=proof_bar_codex_plugin&cta_placement=proof_bar">Codex plugin setup →</a>
|
|
828
|
-
<a href="/go/gpt?utm_source=website&utm_medium=proof_bar&utm_campaign=chatgpt_gpt&cta_id=proof_bar_open_gpt&cta_placement=proof_bar" target="_blank" rel="noopener">ThumbGate GPT</a>
|
|
829
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence →</a>
|
|
830
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/THUMBGATE_BENCH.md" target="_blank" rel="noopener">ThumbGate Bench</a>
|
|
831
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/RELEASE_CONFIDENCE.md" target="_blank" rel="noopener">Release confidence</a>
|
|
832
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">Proof-backed CI</a>
|
|
833
|
-
<a href="#compatibility">Claude Code · Cursor · Codex · Gemini · Amp · Cline · OpenCode</a>
|
|
834
|
-
</nav>
|
|
835
|
-
<div class="marketing-test-copy" hidden>
|
|
836
|
-
<div class="hero-thumbs">👍👎</div>
|
|
837
|
-
<a class="signal-pill signal-up">Accepted feedback becomes local lessons</a>
|
|
838
|
-
<a class="signal-pill signal-down">Evaluate proposed tool calls before execution</a>
|
|
839
|
-
<p class="hero-persona">For consultancies, platform teams, and AI product teams that want workflow governance, CLI-first rollout, and a reliable operator.</p>
|
|
840
|
-
<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>
|
|
841
|
-
<p>Prove one evaluated repeat before asking anyone to buy. Give <code>thumbs up</code> when the agent follows your standards and a concrete <code>thumbs down</code> when it misses. Upgrade when the individual operator needs higher limits, recall, a personal dashboard, or exports.</p>
|
|
842
|
-
<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>
|
|
843
|
-
<!--
|
|
844
|
-
Hidden test/asserter strings — required by tests/public-landing.test.js regex assertions
|
|
845
|
-
(workflow_sprint_*, hero_workflow_sprint_*, ctaId references, dashboard-preview tokens,
|
|
846
|
-
ChatGPT/GPT messaging, team-pilot-intake-form attribute names). These strings are
|
|
847
|
-
intentionally not user-visible body text. Do not render. If you remove this block,
|
|
848
|
-
update the test assertions in the same PR.
|
|
849
|
-
-->
|
|
850
|
-
<div hidden aria-hidden="true" data-thumbgate-test-anchors style="display:none">
|
|
851
|
-
<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>
|
|
852
|
-
<span data-anchor="dashboard-preview">dashboard-preview What your Pro dashboard looks like check:no-force-push</span>
|
|
853
|
-
<span data-anchor="team-intake-form">Start Enterprise 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" Enterprise 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>
|
|
854
|
-
<span data-anchor="chatgpt-context">No, you do not have to chat inside the GPT forever. ChatGPT is a discovery and checkpointing 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 typed thumbs-up/down feedback Local allow/warn/deny enforcement for coding agents requires a configured integration 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>
|
|
855
|
-
</div>
|
|
856
|
-
</div>
|
|
857
|
-
</div>
|
|
858
|
-
</section>
|
|
859
|
-
|
|
860
|
-
<section class="compatibility" id="why-not-diy" aria-label="Why not write your own hooks">
|
|
861
|
-
<div class="container">
|
|
862
|
-
<h2>“Why not just write my own PreToolUse hooks?”</h2>
|
|
863
|
-
<p class="hero-lede" style="max-width:760px;margin:0 auto 18px;">You can — on one machine, for one agent, until the next breaking change. ThumbGate is that idea, maintained: accepted feedback becomes local lessons, recurring failures can become explicit rules, and those rules can be reused by supported agents configured against the same local install scope. Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode each require their documented integration setup. Hand-written hooks do not automatically provide ThumbGate's lesson store, rule promotion, local decision records, or adapter tests.</p>
|
|
864
|
-
<p><a href="/compare/claude-code-hooks">See ThumbGate vs. hand-written hooks →</a></p>
|
|
865
|
-
</div>
|
|
866
|
-
</section>
|
|
867
|
-
|
|
868
|
-
<section class="compatibility" id="june-2026-proof">
|
|
869
|
-
<div class="container">
|
|
870
|
-
<div class="section-label">June 2026 Market Signal</div>
|
|
871
|
-
<h2 class="section-title">The market moved from “agents can code” to “who is allowed to let agents act?”</h2>
|
|
872
|
-
<p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:900px;margin:0 auto 26px;line-height:1.7;">The high-ROI buyer story is not another chatbot memory claim. June 2026 coverage is pushing the same pattern from multiple directions: tool lockdown, MCP security, managed agents, context budgets, and agent-authored production code all need pre-action governance at the execution boundary.</p>
|
|
873
|
-
<div class="agent-grid">
|
|
874
|
-
<div class="agent-card">
|
|
875
|
-
<h3>MCP and tool lockdown</h3>
|
|
876
|
-
<p>As MCP servers and hosted tools spread, the failure mode is no longer just a bad answer. It is an agent calling the wrong tool with real developer permissions. ThumbGate provides a local allow, warn, or deny decision before a configured tool call executes.</p>
|
|
877
|
-
</div>
|
|
878
|
-
<div class="agent-card">
|
|
879
|
-
<h3>Managed agents need receipts</h3>
|
|
880
|
-
<p>Managed background agents can multiply output, but every extra autonomous run needs evidence, rollback boundaries, and approval rules. ThumbGate records why a configured pre-action check allowed, warned on, or denied a proposed action.</p>
|
|
881
|
-
</div>
|
|
882
|
-
<div class="agent-card">
|
|
883
|
-
<h3>Tokenmaxxing backlash</h3>
|
|
884
|
-
<p>Long-context agents are expensive when they repeatedly reload irrelevant history. ThumbGate keeps paid value above the free wedge with recall, search, context gating, and proof exports instead of dumping everything into every prompt.</p>
|
|
885
|
-
</div>
|
|
886
|
-
<div class="agent-card">
|
|
887
|
-
<h3>Production code by AI</h3>
|
|
888
|
-
<p>When teams claim most new production code is AI-authored, the real enterprise question becomes auditability. ThumbGate can promote accepted recurring corrections into prevention rules and retain the local gate evidence available to reviewers.</p>
|
|
889
|
-
</div>
|
|
890
|
-
</div>
|
|
891
|
-
<div style="margin:22px auto 0;max-width:900px;border:1px solid rgba(74,222,128,0.26);border-radius:8px;background:rgba(74,222,128,0.07);padding:16px 18px;color:var(--text-muted);">
|
|
892
|
-
<strong style="color:var(--green);">Data-science posture:</strong> treat Pro checkout starts and workflow-intake submissions as intent, not revenue. Make conversion or traction claims only from authenticated billing and analytics telemetry; this page does not publish a current customer or revenue count.
|
|
893
|
-
</div>
|
|
894
|
-
</div>
|
|
895
|
-
</section>
|
|
896
|
-
|
|
897
|
-
<section class="compatibility" id="agentic-development-cycle">
|
|
898
|
-
<div class="container">
|
|
899
|
-
<div class="section-label">Agentic Development Cycle</div>
|
|
900
|
-
<h2 class="section-title">Guide, Generate, Verify, Solve still needs an execution gate.</h2>
|
|
901
|
-
<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>
|
|
902
|
-
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;max-width:1080px;margin:0 auto;" aria-label="Agentic development cycle stages">
|
|
903
|
-
<a class="cycle-card" href="/learn/feedback-loop-vs-decision-layer" rel="noopener" aria-label="Learn how Guide turns feedback into enforceable rules" onclick="try{posthog.capture('agentic_cycle_card_click',{stage:'guide'})}catch(_){}">
|
|
904
|
-
<h3>Guide</h3>
|
|
905
|
-
<p>Rules, standards, past thumbs-downs, workflow boundaries, and approval policies are loaded as concrete operating context instead of vague prompt advice.</p>
|
|
906
|
-
<div class="card-arrow">See how feedback becomes rules →</div>
|
|
907
|
-
</a>
|
|
908
|
-
<a class="cycle-card" href="/guide" rel="noopener" aria-label="Open the setup guide for AI agents that generate plans edits and tool calls" onclick="try{posthog.capture('agentic_cycle_card_click',{stage:'generate'})}catch(_){}">
|
|
909
|
-
<h3>Generate</h3>
|
|
910
|
-
<p>Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, and MCP-compatible agents keep generating plans, edits, and tool calls.</p>
|
|
911
|
-
<div class="card-arrow">Open the agent setup guide →</div>
|
|
912
|
-
</a>
|
|
913
|
-
<a class="cycle-card" href="/learn/ac-dc-runtime-enforcement" rel="noopener" aria-label="Read the AC/DC mapping framework article" onclick="try{posthog.capture('agentic_cycle_card_click',{stage:'verify'})}catch(_){}">
|
|
914
|
-
<h3>Verify</h3>
|
|
915
|
-
<p>Pre-Action Checks can require inspection evidence, tests, CI, screenshots, API responses, or human approval for configured high-risk actions.</p>
|
|
916
|
-
<div class="card-arrow">Read the AC/DC map →</div>
|
|
564
|
+
<body data-revenue-assist="off">
|
|
565
|
+
<nav class="site-nav" aria-label="Primary navigation">
|
|
566
|
+
<div class="shell nav-inner">
|
|
567
|
+
<a class="nav-logo" href="/" aria-label="ThumbGate home">
|
|
568
|
+
<img src="/assets/brand/thumbgate-mark-inline-v3.svg" alt="" width="31" height="31">
|
|
569
|
+
<span class="logo-text">ThumbGate</span>
|
|
917
570
|
</a>
|
|
918
|
-
<
|
|
919
|
-
<
|
|
920
|
-
<
|
|
921
|
-
<
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
<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);">
|
|
925
|
-
<strong style="display:block;color:var(--green);margin-bottom:6px;">ThumbGate's role: the pre-action gate between generated intent and executed action.</strong>
|
|
926
|
-
<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>
|
|
927
|
-
</div>
|
|
928
|
-
</div>
|
|
929
|
-
</section>
|
|
930
|
-
|
|
931
|
-
<!-- CODE EXAMPLE — moved up for conversion: show the product immediately after hero -->
|
|
932
|
-
<section class="code-section">
|
|
933
|
-
<div class="container">
|
|
934
|
-
<div class="code-block" style="box-shadow:0 0 40px rgba(34,211,238,0.08);">
|
|
935
|
-
<div class="code-header">
|
|
936
|
-
<div class="code-dot red"></div>
|
|
937
|
-
<div class="code-dot yellow"></div>
|
|
938
|
-
<div class="code-dot green"></div>
|
|
939
|
-
<span>terminal — local setup</span>
|
|
940
|
-
</div>
|
|
941
|
-
<div class="code-body" style="font-size:14px;">
|
|
942
|
-
<div><span class="comment"># Install the local CLI</span></div>
|
|
943
|
-
<div><span class="fn">npx</span> thumbgate init</div>
|
|
944
|
-
<div> </div>
|
|
945
|
-
<div><span class="comment"># Your agent tries to delete production db...</span></div>
|
|
946
|
-
<div><span class="keyword">⚠️ Check flagged:</span> <span class="string">"Never run DROP on production tables"</span> <span class="comment"># blocks under strict mode</span></div>
|
|
947
|
-
<div><span class="comment"># Rule promoted from accepted recurring feedback</span></div>
|
|
948
|
-
<div> </div>
|
|
949
|
-
<div><span class="comment"># Matching warning-mode checks deny when strict mode is enabled.</span></div>
|
|
571
|
+
<div class="nav-links">
|
|
572
|
+
<a href="#how-it-works">How it works</a>
|
|
573
|
+
<a href="#offers">Pricing</a>
|
|
574
|
+
<a href="#proof">Proof</a>
|
|
575
|
+
<a class="nav-enterprise" href="#enterprise-gate" data-offer-link data-cta-id="nav_diagnostic_buy">Get Started · $499</a>
|
|
576
|
+
<a class="nav-buy" href="/checkout/pro?utm_source=website&utm_medium=homepage_nav&utm_campaign=rally_style_gtm&cta_id=nav_pro_buy&cta_placement=nav&plan_id=pro" data-offer-link data-cta-id="nav_pro_buy">Pro · $19/mo</a>
|
|
950
577
|
</div>
|
|
951
578
|
</div>
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
<section class="
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
<p>The final decision is not another model opinion. ThumbGate checks tool name, arguments, working directory, command shape, confidence, and required evidence before the action runs.</p>
|
|
973
|
-
</div>
|
|
974
|
-
</div>
|
|
975
|
-
<div style="margin:26px auto 0;max-width:960px;border:1px solid rgba(34,211,238,0.18);border-radius:8px;background:rgba(34,211,238,0.05);padding:18px 20px;">
|
|
976
|
-
<h3 style="margin:0 0 10px;color:var(--text);font-size:18px;">Why this matters now</h3>
|
|
977
|
-
<ul style="margin:0;padding-left:20px;color:var(--text-muted);line-height:1.7;">
|
|
978
|
-
<li><strong>Agent security is now mainstream risk.</strong> Coding agents run shell commands, write files, query databases, and chain actions with developer permissions, so unattended autonomy needs a local policy boundary.</li>
|
|
979
|
-
<li><strong>MCP adoption is accelerating.</strong> More tools are becoming agent-callable through shared protocols, which means one cross-agent governance layer beats one-off prompt rules per app.</li>
|
|
980
|
-
<li><strong>Managed-agent output needs audit evidence.</strong> Background agents, subagents, and workflow runners can ship more work, but buyers need receipts for what was blocked, approved, and verified.</li>
|
|
981
|
-
<li><strong>Repeated failures waste cash and trust.</strong> Repeats can burn tokens, review time, and release confidence. ThumbGate can promote accepted recurring feedback into a reusable prevention check.</li>
|
|
982
|
-
</ul>
|
|
983
|
-
<p style="margin:12px 0 0;font-size:13px;color:var(--text-dim);">Sources to verify the market timing: <a href="https://www.docker.com/blog/ai-coding-agent-horror-stories-security-risks/" target="_blank" rel="noopener" style="color:var(--cyan);">Docker on AI coding agent security risks</a>, <a href="https://www.techradar.com/pro/how-ai-agents-are-wrecking-havoc-in-legacy-security-setups-and-enterprises-are-catching-up" target="_blank" rel="noopener" style="color:var(--cyan);">TechRadar on enterprise agent security pressure</a>, and <a href="https://www.techradar.com/pro/zendesk-becomes-the-latest-to-adopt-mcp-to-futureproof-customers-in-the-ai-first-era" target="_blank" rel="noopener" style="color:var(--cyan);">current MCP adoption coverage</a>.</p>
|
|
984
|
-
</div>
|
|
985
|
-
</div>
|
|
986
|
-
</section>
|
|
987
|
-
|
|
988
|
-
<section class="marketing-deep-dive" style="padding:28px 0 10px;">
|
|
989
|
-
<div class="container" style="max-width:1240px;">
|
|
990
|
-
<div class="section-label">Status bar proof</div>
|
|
991
|
-
<h2 style="text-align:center;margin-bottom:12px;">See the footer before you ship the next repeat.</h2>
|
|
992
|
-
<p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:860px;margin:0 auto 28px;line-height:1.7;">Claude renders the live ThumbGate footer now. <code>npx thumbgate init --agent codex</code> installs the same Codex hook bundle and writes the ThumbGate <code>statusLine</code> target so you can test it on your local Codex build immediately.</p>
|
|
993
|
-
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:24px;align-items:start;">
|
|
994
|
-
<figure style="margin:0;">
|
|
995
|
-
<img src="/assets/claude-thumbgate-statusbar.svg" alt="Claude Code terminal footer showing ThumbGate version, plan, thumbs up and thumbs down counts, dashboard, lessons, and latest mistake." style="width:100%;height:auto;display:block;border-radius:14px;border:1px solid var(--border);background:#050816;">
|
|
996
|
-
<figcaption style="margin-top:10px;font-size:14px;color:var(--text-muted);line-height:1.6;">Claude live footer with ThumbGate stats, links, and the latest mistake summary.</figcaption>
|
|
997
|
-
</figure>
|
|
998
|
-
<figure style="margin:0;">
|
|
999
|
-
<img src="/assets/codex-thumbgate-statusbar-test.svg" alt="OpenAI Codex terminal footer on the published ThumbGate test lane." style="width:100%;height:auto;display:block;border-radius:14px;border:1px solid var(--border);background:#050816;">
|
|
1000
|
-
<figcaption style="margin-top:10px;font-size:14px;color:var(--text-muted);line-height:1.6;">Codex test lane after the published ThumbGate install path writes PreToolUse, UserPromptSubmit, PostToolUse, SessionStart, and the statusLine target.</figcaption>
|
|
1001
|
-
</figure>
|
|
1002
|
-
</div>
|
|
1003
|
-
</div>
|
|
1004
|
-
</section>
|
|
1005
|
-
|
|
1006
|
-
<!-- CLAUDE CODE SECTION -->
|
|
1007
|
-
<section class="gpt-path" id="claude-code-section">
|
|
1008
|
-
<div class="container">
|
|
1009
|
-
<div class="gpt-panel" style="border-color:rgba(217,119,6,0.3);background:linear-gradient(135deg, rgba(217,119,6,0.06) 0%, rgba(34,211,238,0.04) 100%);">
|
|
1010
|
-
<div class="section-label" style="text-align:left;color:#d97706;">Claude Code · Claude Desktop · Claude Extension</div>
|
|
1011
|
-
<h2>Configure ThumbGate for Claude Code or Claude Desktop.</h2>
|
|
1012
|
-
<p>ThumbGate ships a published Claude Desktop extension bundle (<code>.mcpb</code>) you can install today. Claude Code users can also add the repo marketplace plugin immediately. No waiting for directory approval.</p>
|
|
1013
|
-
<div class="gpt-steps">
|
|
1014
|
-
<div class="gpt-step">
|
|
1015
|
-
<strong>1. Install for Claude Code</strong>
|
|
1016
|
-
<p>Run <code>npx thumbgate init --agent claude-code</code> or add via <code>claude mcp add thumbgate -- npx --yes --package thumbgate thumbgate serve</code></p>
|
|
1017
|
-
</div>
|
|
1018
|
-
<div class="gpt-step">
|
|
1019
|
-
<strong>2. Or install the Claude Extension</strong>
|
|
1020
|
-
<p>Download the <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" style="color:#d97706;font-weight:600;">.mcpb bundle</a> for Claude Desktop, or use the repo marketplace: <code>/plugin marketplace add IgorGanapolsky/ThumbGate</code></p>
|
|
579
|
+
</nav>
|
|
580
|
+
|
|
581
|
+
<main>
|
|
582
|
+
<!-- HERO -->
|
|
583
|
+
<section class="hero">
|
|
584
|
+
<div class="shell hero-grid">
|
|
585
|
+
<div class="hero-copy">
|
|
586
|
+
<div class="eyebrow">Now live · Pre-action gates · Not a prompt · Not a postmortem</div>
|
|
587
|
+
<h1>Stop AI agent mistakes before they cost you.</h1>
|
|
588
|
+
<p class="hero-lede">Hard allow/deny at the <strong>tool-call boundary</strong>. Audit entry written at decision time. Every approval teaches the next gate.</p>
|
|
589
|
+
<p class="fit-line"><strong>Dual path (buy + book):</strong> <strong>$499 Diagnostic</strong> maps one expensive failure on Claude Code, Cursor, Codex, or similar agents and installs a hard gate with proof — or self-serve <strong>Pro at $19/mo</strong> if you already know the loop. Free local evaluate stays free.</p>
|
|
590
|
+
<div class="spec-chips" aria-label="What ThumbGate does">
|
|
591
|
+
<span class="spec-chip"><strong>Capture</strong> feedback</span>
|
|
592
|
+
<span class="spec-chip"><strong>Rank</strong> lessons</span>
|
|
593
|
+
<span class="spec-chip"><strong>Promote</strong> gates</span>
|
|
594
|
+
<span class="spec-chip"><strong>Block</strong> next action</span>
|
|
595
|
+
</div>
|
|
596
|
+
<a class="proof-link" href="#proof">See a strict-mode deny example ↓</a>
|
|
597
|
+
<p class="install-hint"><code>npx thumbgate init</code> free local evaluate · first hard gate usually minutes after install · <a href="/pricing">how we stack up</a></p>
|
|
598
|
+
<p class="install-hint" id="thumbgate-dashboard-command" style="margin-top:10px;">Dashboard: <code>npx thumbgate dashboard --open</code> · <code>/thumbgate-dashboard</code> · bin <code>thumbgate-dashboard</code> if global · <a href="/dashboard#insights">demo</a></p>
|
|
1021
599
|
</div>
|
|
1022
|
-
<div class="
|
|
1023
|
-
<
|
|
1024
|
-
|
|
600
|
+
<div id="offers" class="offer-stack">
|
|
601
|
+
<form id="buy" class="checkout-card" action="/go/diagnostic-pay" method="POST" data-primary-checkout style="order:-1;border-color:rgba(0,110,82,.35);box-shadow:0 18px 50px rgba(0,110,82,.12);">
|
|
602
|
+
<span id="workflow-sprint-intake" data-legacy-intake-alias aria-hidden="true"></span>
|
|
603
|
+
<span id="enterprise-gate"></span>
|
|
604
|
+
<input type="hidden" name="utm_source" value="website">
|
|
605
|
+
<input type="hidden" name="utm_medium" value="homepage_checkout">
|
|
606
|
+
<input type="hidden" name="utm_campaign" value="rally_style_gtm">
|
|
607
|
+
<input type="hidden" name="utm_content" value="hero_direct_checkout">
|
|
608
|
+
<input type="hidden" name="cta_id" value="homepage_diagnostic_buy">
|
|
609
|
+
<input type="hidden" name="cta_placement" value="hero">
|
|
610
|
+
<input type="hidden" name="plan_id" value="sprint_diagnostic">
|
|
611
|
+
<input type="hidden" name="landing_path" value="/">
|
|
612
|
+
<div class="price"><strong>$__SPRINT_DIAGNOSTIC_PRICE_DOLLARS__</strong><span>one time · cash path</span></div>
|
|
613
|
+
<h2>Diagnostic Gate</h2>
|
|
614
|
+
<p><strong>Managed AI Agent Workflow Gate.</strong> Bring the failure. Leave with one hard gate and proof — ranked burn, configured pre-action check, regression test. Not a strategy deck.</p>
|
|
615
|
+
<label for="buyer-email">Work email for the receipt</label>
|
|
616
|
+
<input id="buyer-email" type="email" name="customer_email" autocomplete="email" required placeholder="you@company.com">
|
|
617
|
+
<button class="button-primary" type="submit" data-revenue-cta data-cta-id="homepage_diagnostic_buy" data-cta-placement="hero">Get Started — $499 Diagnostic</button>
|
|
618
|
+
<p class="checkout-note">Secure Stripe · no subscription · one workflow. Prefer a call first? <a href="#how-it-works" style="color:inherit;font-weight:700;">See how it works</a> or email after checkout.</p>
|
|
619
|
+
<ul class="offer-points">
|
|
620
|
+
<li>60-minute working review for one workflow</li>
|
|
621
|
+
<li>One configured local gate and its regression test</li>
|
|
622
|
+
<li>Rollout and rollback proof within two business days</li>
|
|
623
|
+
</ul>
|
|
624
|
+
</form>
|
|
625
|
+
<aside class="pro-card" id="pro" aria-label="ThumbGate Pro subscription">
|
|
626
|
+
<div class="price"><strong>$19</strong><span>/mo · or $149/yr</span></div>
|
|
627
|
+
<h2>Pro</h2>
|
|
628
|
+
<p><strong>Self-serve for individual operators.</strong> Local enforcement proof, dashboard, recall, exports — start today.</p>
|
|
629
|
+
<a class="button-pro" href="/checkout/pro?utm_source=website&utm_medium=homepage_hero&utm_campaign=rally_style_gtm&cta_id=homepage_pro_buy&cta_placement=hero&plan_id=pro" data-offer-link data-cta-id="homepage_pro_buy" data-revenue-cta data-cta-placement="hero">Start Pro — $19/mo</a>
|
|
630
|
+
<p class="checkout-note">Hosted checkout · cancel anytime · free local evaluate stays free</p>
|
|
631
|
+
<ul class="offer-points">
|
|
632
|
+
<li>Personal enforcement proof and local dashboard</li>
|
|
633
|
+
<li>Recall, managed adapter coverage, proof-ready exports</li>
|
|
634
|
+
<li>Preference-pair export for model-hardening workflows</li>
|
|
635
|
+
</ul>
|
|
636
|
+
</aside>
|
|
1025
637
|
</div>
|
|
1026
638
|
</div>
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
<
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
<
|
|
639
|
+
</section>
|
|
640
|
+
|
|
641
|
+
<section id="how-it-works">
|
|
642
|
+
<div class="shell">
|
|
643
|
+
<div class="section-kicker">Self-improving product loop</div>
|
|
644
|
+
<h2 class="section-title">Pre-action checks—and the systems that refine them.</h2>
|
|
645
|
+
<p class="section-lede">No governance novel. Corrections become reviewable local lessons; relevant lessons are re-ranked; repeated negative patterns can become explicit gates; and the next action is checked before execution. <strong style="color:var(--text)">Click a step</strong> to see what happens under the hood.</p>
|
|
646
|
+
<div class="loop" role="tablist" aria-label="Self-improving product loop — click a step for under-the-hood demo">
|
|
647
|
+
<!-- Cards are divs (not <button>) so headings/chips stay valid HTML; browsers
|
|
648
|
+
auto-close <button> around <h3>/<div>, which broke click targets. -->
|
|
649
|
+
<div class="loop-step" role="tab" tabindex="0" id="loop-tab-1" data-loop-step="1" aria-selected="false" aria-controls="loop-panel" aria-expanded="false">
|
|
650
|
+
<span class="loop-number">1</span>
|
|
651
|
+
<h3>Capture feedback</h3>
|
|
652
|
+
<p>Record explicit 👍 or 👎 feedback with the action and outcome context that made it useful or wrong.</p>
|
|
653
|
+
<span class="loop-hint">Under the hood ↓</span>
|
|
654
|
+
</div>
|
|
655
|
+
<div class="loop-step" role="tab" tabindex="0" id="loop-tab-2" data-loop-step="2" aria-selected="false" aria-controls="loop-panel" aria-expanded="false">
|
|
656
|
+
<span class="loop-number">2</span>
|
|
657
|
+
<h3>Remember locally</h3>
|
|
658
|
+
<p>Store a reviewable lesson that survives sessions and model changes without sending the control history into model weights.</p>
|
|
659
|
+
<span class="loop-hint">Under the hood ↓</span>
|
|
660
|
+
</div>
|
|
661
|
+
<div class="loop-step" role="tab" tabindex="0" id="loop-tab-3" data-loop-step="3" aria-selected="false" aria-controls="loop-panel" aria-expanded="false">
|
|
662
|
+
<span class="loop-number">3</span>
|
|
663
|
+
<h3>Rank and refine</h3>
|
|
664
|
+
<p>Re-rank relevant lessons for the action. Repeated negative patterns can promote from warnings to blocking gates; stale gates expire.</p>
|
|
665
|
+
<span class="loop-hint">Under the hood ↓</span>
|
|
666
|
+
</div>
|
|
667
|
+
<div class="loop-step" role="tab" tabindex="0" id="loop-tab-4" data-loop-step="4" aria-selected="false" aria-controls="loop-panel" aria-expanded="false">
|
|
668
|
+
<span class="loop-number">4</span>
|
|
669
|
+
<h3>Gate the next action</h3>
|
|
670
|
+
<p>The action is allowed, warned, or denied before the tool proceeds.</p>
|
|
671
|
+
<div class="decisions" aria-label="Possible decisions">
|
|
672
|
+
<span class="decision allow">ALLOW</span>
|
|
673
|
+
<span class="decision warn">WARN</span>
|
|
674
|
+
<span class="decision deny">DENY</span>
|
|
675
|
+
</div>
|
|
676
|
+
<span class="loop-hint">Under the hood ↓</span>
|
|
677
|
+
</div>
|
|
1056
678
|
</div>
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
<
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
<h3>☤ Hermes Agent guardrails</h3>
|
|
1090
|
-
<p>Hermes-style agents bring persistent memory, generated skills, messaging gateways, scheduled automations, and sandboxed execution. ThumbGate adds the safer self-evolution loop: propose rule and skill changes from failures, then gate them with evidence before anything overwrites stable instructions or repeats an expensive action.</p>
|
|
1091
|
-
<div class="card-arrow">Read the Hermes guardrails guide →</div>
|
|
1092
|
-
</a>
|
|
1093
|
-
<a class="compat-card seo-card" href="/guides/vllm-serving-guardrails" rel="noopener">
|
|
1094
|
-
<h3>vLLM serving guardrails</h3>
|
|
1095
|
-
<p>vLLM makes self-hosted inference cheaper and faster with PagedAttention, continuous batching, chunked prefill, prefix caching, and optimized kernels. ThumbGate gates the routing change with latency, cache-isolation, benchmark, and rollback proof before agent traffic moves.</p>
|
|
1096
|
-
<div class="card-arrow">Read the vLLM guardrails guide →</div>
|
|
1097
|
-
</a>
|
|
1098
|
-
<a class="compat-card seo-card" href="/guides/agent-context-governance" rel="noopener">
|
|
1099
|
-
<h3>Context and tool governance</h3>
|
|
1100
|
-
<p>Long-running agents need cleaner working context, approved model routes, isolated execution, tool lockdown, direct pushback, and evidence before high-risk actions. ThumbGate turns those controls into local pre-action gates.</p>
|
|
1101
|
-
<div class="card-arrow">Read the context governance guide →</div>
|
|
1102
|
-
</a>
|
|
1103
|
-
<a class="compat-card seo-card" href="/guides/gcp-mcp-guardrails" rel="noopener">
|
|
1104
|
-
<h3>☁️ Google Data Agent Kit</h3>
|
|
1105
|
-
<p>When database and IAM operations are exposed as agent tool calls, ThumbGate can evaluate configured patterns such as production DROP, unscoped DELETE, or IAM escalation before execution. The resulting action depends on the matched rule and enforcement mode.</p>
|
|
1106
|
-
<div class="card-arrow">Read the GCP guardrails guide →</div>
|
|
1107
|
-
</a>
|
|
1108
|
-
<a class="compat-card" href="/codex-plugin?utm_source=website&utm_medium=compatibility&utm_campaign=codex_plugin&cta_id=compat_codex_plugin&cta_placement=compatibility" rel="noopener" onclick="if(typeof posthog!=='undefined')posthog.capture('compat_codex_plugin_click',{cta:'open_codex_plugin_page'})">
|
|
1109
|
-
<h3>🧩 Codex plugin</h3>
|
|
1110
|
-
<p>Codex gets a standalone ThumbGate plugin bundle, a repo-local plugin profile, and the same auto-updating MCP launcher. The runtime resolves <code>thumbgate@latest</code> when Codex starts, so npm fixes reach active installs. The install page includes the zip, MCP config, and verification path in one place.</p>
|
|
1111
|
-
<div class="card-arrow">Open the Codex install page →</div>
|
|
1112
|
-
</a>
|
|
1113
|
-
<a class="compat-card" href="/guides/cursor-prevent-repeated-mistakes" rel="noopener">
|
|
1114
|
-
<h3>🎯 Cursor integration</h3>
|
|
1115
|
-
<p>Run <code>npx thumbgate init --agent cursor</code> or configure <code>.cursor/mcp.json</code> through the documented setup path. The npm runtime path is separate from any in-app Marketplace listing.</p>
|
|
1116
|
-
<div class="card-arrow">Read the Cursor guide →</div>
|
|
1117
|
-
</a>
|
|
1118
|
-
<a class="compat-card" href="/guide" rel="noopener">
|
|
1119
|
-
<h3>✏️ Editor workflows</h3>
|
|
1120
|
-
<p>VS Code can host an MCP-compatible agent such as Continue or Cline. Each editor or agent still requires its MCP stdio or hook configuration; this repo does not ship a standalone VS Code extension.</p>
|
|
1121
|
-
<div class="card-arrow">Open the setup guide →</div>
|
|
1122
|
-
</a>
|
|
1123
|
-
<a class="compat-card" href="https://mcp.so/server/thumbgate" target="_blank" rel="noopener" onclick="if(typeof posthog!=='undefined')posthog.capture('compat_mcp_so_click',{cta:'view_mcp_directory'})">
|
|
1124
|
-
<h3>🗂️ MCP Server Directory</h3>
|
|
1125
|
-
<p>ThumbGate is listed on <code>mcp.so</code> so MCP-compatible clients can verify the package, copy the npx config, and confirm they are installing the real Pre-Action Checks server.</p>
|
|
1126
|
-
<div class="card-arrow">View on mcp.so →</div>
|
|
1127
|
-
</a>
|
|
1128
|
-
<a class="compat-card" href="/go/gpt?utm_source=website&utm_medium=compatibility&utm_campaign=chatgpt_gpt&cta_id=compat_open_gpt&cta_placement=compatibility" target="_blank" rel="noopener">
|
|
1129
|
-
<h3>💬 ChatGPT GPT Actions</h3>
|
|
1130
|
-
<p>Open the ThumbGate GPT to preflight risky commands, deploys, refunds, PR actions, and setup steps. Local allow, warn, or deny enforcement for coding agents requires <code>npx thumbgate init</code> plus the documented integration setup.</p>
|
|
1131
|
-
<div class="card-arrow">Open ThumbGate GPT →</div>
|
|
1132
|
-
</a>
|
|
1133
|
-
</div>
|
|
1134
|
-
</div>
|
|
1135
|
-
</section>
|
|
1136
|
-
|
|
1137
|
-
<section class="compatibility" id="demo">
|
|
1138
|
-
<a id="social-proof" aria-hidden="true"></a>
|
|
1139
|
-
<div class="container">
|
|
1140
|
-
<div class="section-label">See It In Action</div>
|
|
1141
|
-
<h2 class="section-title">See the enforcement before you buy anything</h2>
|
|
1142
|
-
<div class="agent-grid">
|
|
1143
|
-
<div class="agent-card">
|
|
1144
|
-
<h3>🔍 Live Dashboard Demo</h3>
|
|
1145
|
-
<p>Search lessons, inspect checks, mark a review checkpoint, and see only what changed since the last pass. No signup or install required.</p>
|
|
1146
|
-
<a href="/dashboard" style="display:inline-block;margin-top:12px;color:var(--cyan);font-weight:600;text-decoration:underline;">Open Dashboard Demo →</a>
|
|
1147
|
-
</div>
|
|
1148
|
-
<div class="agent-card">
|
|
1149
|
-
<h3>⛔ Check Decisions</h3>
|
|
1150
|
-
<p>Inspect the matched gate, allow/warn/deny decision, and reason returned by the local evaluator.</p>
|
|
1151
|
-
</div>
|
|
1152
|
-
<div class="agent-card">
|
|
1153
|
-
<h3>📊 Local Reports</h3>
|
|
1154
|
-
<p>Generate local dashboard and report views from the operator's available gate and feedback data. A hosted org dashboard is not generally available.</p>
|
|
1155
|
-
</div>
|
|
1156
|
-
<div class="agent-card">
|
|
1157
|
-
<h3>🧱 Isolated Execution Lanes</h3>
|
|
1158
|
-
<p>Workflow Sentinel can recommend Docker Sandboxes for high-risk local actions. The package includes a signed sandbox-dispatch mechanism, but each deployment must configure and verify its isolation boundary.</p>
|
|
1159
|
-
</div>
|
|
1160
|
-
<div class="agent-card">
|
|
1161
|
-
<h3>Data Processing Boundaries</h3>
|
|
1162
|
-
<p>Local enforcement data stays in the operator's ThumbGate feedback directory by default. Checkout, intake, newsletter, and product analytics are separate hosted processing surfaces. Hosted team lesson sync is not generally available.</p>
|
|
1163
|
-
</div>
|
|
1164
|
-
<div class="agent-card">
|
|
1165
|
-
<h3>🧪 Thompson Sampling</h3>
|
|
1166
|
-
<p>Confidence tiers (none/low/medium/high) are available inputs to adaptive rule selection; they do not guarantee a correct decision.</p>
|
|
1167
|
-
</div>
|
|
1168
|
-
<div class="agent-card">
|
|
1169
|
-
<h3>🪞 History-Aware Lessons</h3>
|
|
1170
|
-
<p>When the current Claude auto-capture hook only gets a vague thumbs-down, ThumbGate can reuse up to 8 prior recorded entries plus the failed tool call, then keep a linked 60-second feedback session open for later corrections instead of creating a dead-end note.</p>
|
|
1171
|
-
</div>
|
|
1172
|
-
</div>
|
|
1173
|
-
</div>
|
|
1174
|
-
</section>
|
|
1175
|
-
|
|
1176
|
-
<section class="compatibility" id="governance-not-logging">
|
|
1177
|
-
<div class="container">
|
|
1178
|
-
<div class="section-label">Governance, Not Logging</div>
|
|
1179
|
-
<h2 class="section-title">Logs describe the damage. ThumbGate evaluates the proposed action before it runs.</h2>
|
|
1180
|
-
<p style="color:var(--text-dim);max-width:820px;margin:0 auto 22px;">Self-governance is an operator writing local rules and keeping local logs. ThumbGate starts there, then evaluates configured checks as an allow, warn, or deny decision before the tool call touches code, data, money, or customers.</p>
|
|
1181
|
-
<div class="agent-grid">
|
|
1182
|
-
<div class="agent-card">
|
|
1183
|
-
<h3>Pre-action enforcement</h3>
|
|
1184
|
-
<p>The rule is evaluated at the execution boundary, not after the fact. Matching failures are evaluated before configured shell commands, PR actions, deploys, refunds, or production writes run. Detected secret exfiltration and gate kill/bypass commands deny by default; strict mode also denies matching warning-mode checks.</p>
|
|
1185
|
-
</div>
|
|
1186
|
-
<div class="agent-card">
|
|
1187
|
-
<h3>Reviewable decision trail</h3>
|
|
1188
|
-
<p>Gate records expose the fields available for that evaluation, including its decision, matched gate, reason, and provided context, so reviewers can inspect local evidence instead of trusting an agent summary.</p>
|
|
1189
|
-
</div>
|
|
1190
|
-
<div class="agent-card">
|
|
1191
|
-
<h3>Enterprise governance mode</h3>
|
|
1192
|
-
<p>Enterprise is intake-first and scoped around one workflow's approval boundaries, rollback plan, evidence requirements, and rollout support. Hosted team sync, org dashboards, SSO, SIEM, and compliance packaging are not general-availability runtime features.</p>
|
|
1193
|
-
</div>
|
|
1194
|
-
</div>
|
|
1195
|
-
</div>
|
|
1196
|
-
</section>
|
|
1197
|
-
|
|
1198
|
-
<section class="compatibility" id="orchestration-layer">
|
|
1199
|
-
<div class="container">
|
|
1200
|
-
<div class="section-label">Positioning</div>
|
|
1201
|
-
<h2 class="section-title">Enforcement is the missing layer in AI orchestration.</h2>
|
|
1202
|
-
<p style="color:var(--text-dim);max-width:760px;margin:0 auto 20px;">Big orchestration suites unify data, routes, and decisions. ThumbGate sits closer to the moment of execution: the point where an agent is about to run a shell command, ship a PR, approve a release, or repeat a mistake you already corrected. That is where workflow trust is won or lost.</p>
|
|
1203
|
-
<div class="agent-grid">
|
|
1204
|
-
<div class="agent-card">
|
|
1205
|
-
<h3>Broad orchestration platforms</h3>
|
|
1206
|
-
<p>Good at customer journeys, routing, and cross-system context. Weak when you need a coding agent or automation to stop before a destructive or low-trust action actually runs.</p>
|
|
1207
|
-
</div>
|
|
1208
|
-
<div class="agent-card">
|
|
1209
|
-
<h3>ThumbGate</h3>
|
|
1210
|
-
<p>Turns accepted operator feedback into local lessons and recurring failures into Pre-Action Checks. Supported agent integrations evaluate matching rules at the tool-call boundary. Detected secret exfiltration and gate kill/bypass commands deny by default; strict mode also denies matching warning-mode checks.</p>
|
|
1211
|
-
</div>
|
|
1212
|
-
<div class="agent-card">
|
|
1213
|
-
<h3>The stack that makes sense</h3>
|
|
1214
|
-
<p>Use orchestration to decide what should happen next. Use ThumbGate to decide what is allowed to execute. That is the control layer enterprises actually need once agents touch repos, terminals, CI, or production workflows.</p>
|
|
1215
|
-
</div>
|
|
1216
|
-
</div>
|
|
1217
|
-
<div style="display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:18px;">
|
|
1218
|
-
<a class="btn-team" href="/compare/ai-experience-orchestration">Compare orchestration vs enforcement →</a>
|
|
1219
|
-
<a class="btn-free" href="/guides/ai-deployment-readiness" style="display:inline-flex;align-items:center;">AI deployment readiness →</a>
|
|
1220
|
-
<a class="btn-free" href="/use-cases/platform-teams" style="display:inline-flex;align-items:center;">Platform team rollout →</a>
|
|
1221
|
-
<a class="btn-free" href="/use-cases/regulated-workflows" style="display:inline-flex;align-items:center;">Regulated workflow pattern →</a>
|
|
1222
|
-
<a class="btn-free" href="/agent-manager" style="display:inline-flex;align-items:center;">Built for the Agent Manager →</a>
|
|
1223
|
-
</div>
|
|
1224
|
-
</div>
|
|
1225
|
-
</section>
|
|
1226
|
-
|
|
1227
|
-
<section class="seo-pages" id="compare-guides">
|
|
1228
|
-
<div class="container">
|
|
1229
|
-
<div style="max-width:900px;margin:26px auto 0;border:1px solid rgba(34,211,238,0.14);border-radius:8px;background:rgba(17,17,19,0.55);padding:14px 16px;">
|
|
1230
|
-
<div style="color:var(--cyan);font-weight:700;">Compare ThumbGate with other agent-safety approaches</div>
|
|
1231
|
-
<div style="display:flex;flex-wrap:wrap;gap:10px;margin-top:14px;font-size:13px;line-height:1.4;">
|
|
1232
|
-
<a href="/learn">Browse the guide library</a>
|
|
1233
|
-
<a href="/compare/claude-code-hooks" title="ThumbGate vs native Claude Code hooks and free community repos">Claude Code hooks</a>
|
|
1234
|
-
<a href="/compare/arcjet">Arcjet</a>
|
|
1235
|
-
<a href="/compare/bumblebee">Bumblebee</a>
|
|
1236
|
-
<a href="/compare/anthropic-containment">Claude Containment</a>
|
|
1237
|
-
<a href="/compare/speclock">SpecLock</a>
|
|
1238
|
-
<a href="/compare/mem0">Mem0</a>
|
|
1239
|
-
<a href="/compare/fallow">Fallow</a>
|
|
1240
|
-
<a href="/compare" style="font-weight:700;color:var(--cyan);">Compare all →</a>
|
|
1241
|
-
<a href="/guides/pre-action-checks">Pre-action checks</a>
|
|
1242
|
-
<a href="/guides/agent-harness-optimization">Agent harness optimization</a>
|
|
1243
|
-
<a href="/guides/code-knowledge-graph-guardrails">Code graph guardrails</a>
|
|
1244
|
-
<a href="/guides/developer-machine-supply-chain-guardrails" title="Developer Machine Supply Chain Guardrails: npm, PyPI, Docker, and CLI compromise paths">Developer machine supply chain</a>
|
|
1245
|
-
<a href="/guides/proxy-pointer-rag-guardrails">Proxy pointer RAG</a>
|
|
1246
|
-
<a href="/guides/rag-precision-tuning-guardrails">RAG precision tuning</a>
|
|
1247
|
-
<a href="/guides/internal-ai-engineering-stack-guardrails">Internal AI engineering stack</a>
|
|
1248
|
-
<a href="/guides/seo-agent-skills-guardrails">SEO agent skills</a>
|
|
1249
|
-
<a href="/guides/claude-code-skills-guardrails">Claude Code skills</a>
|
|
1250
|
-
<a href="/guides/long-running-agent-context-management">Long-running agent context</a>
|
|
1251
|
-
<a href="/guides/reasoning-compression-guardrails">Reasoning compression</a>
|
|
1252
|
-
<a href="/guides/ai-deployment-readiness">AI deployment readiness</a>
|
|
1253
|
-
<a href="/guides/browser-automation-safety">Browser automation safety</a>
|
|
1254
|
-
<a href="/guides/native-messaging-host-security">Native messaging host security</a>
|
|
1255
|
-
<a href="/guides/ai-search-topical-presence">AI search topical presence</a>
|
|
1256
|
-
<a href="/guides/agentic-web-governance">Agentic web governance</a>
|
|
1257
|
-
<a href="/guides/best-tools-stop-ai-agents-breaking-production">Stop agents breaking production</a>
|
|
1258
|
-
<a href="/guides/relational-knowledge-ai-recommendations">Relational knowledge</a>
|
|
1259
|
-
<a href="/guides/claude-code-feedback">Claude Code feedback</a>
|
|
1260
|
-
<a href="/guides/autoresearch-agent-safety">Autoresearch safety</a>
|
|
1261
|
-
</div>
|
|
1262
|
-
</div>
|
|
1263
|
-
</div>
|
|
1264
|
-
</section>
|
|
1265
|
-
|
|
1266
|
-
<section class="autoresearch-pack" id="autoresearch-pack">
|
|
1267
|
-
<div class="container">
|
|
1268
|
-
<div class="autoresearch-panel">
|
|
1269
|
-
<div class="section-label" style="text-align:left;">Autoresearch Safety Pack</div>
|
|
1270
|
-
<h2>Stop self-improving coding loops from hacking the benchmark.</h2>
|
|
1271
|
-
<p>Autoresearch loops run experiments, inspect metrics, and accept better variants. ThumbGate gives those loops a Reliability Gateway: Pre-Action Checks for skipped holdout tests, fake proof, reward hacking, unsafe edits, and promotion without verification evidence.</p>
|
|
1272
|
-
<div class="autoresearch-grid">
|
|
1273
|
-
<div class="autoresearch-card">
|
|
1274
|
-
<h3>Guard the metric</h3>
|
|
1275
|
-
<p>Require primary and holdout checks before an agent can call a variant better. Flag cherry-picked runs and missing baselines, then configure strict enforcement where a deny is required.</p>
|
|
679
|
+
<div id="loop-panel" class="loop-panel" role="tabpanel" aria-labelledby="loop-tab-1" hidden>
|
|
680
|
+
<div class="loop-panel-header">
|
|
681
|
+
<div>
|
|
682
|
+
<div class="loop-panel-kicker" id="loop-panel-kicker">Under the hood</div>
|
|
683
|
+
<h3 class="loop-panel-title" id="loop-panel-title">Capture feedback</h3>
|
|
684
|
+
</div>
|
|
685
|
+
<button type="button" class="loop-panel-close" id="loop-panel-close" aria-label="Close under-the-hood demo">Close</button>
|
|
686
|
+
</div>
|
|
687
|
+
<div class="loop-panel-grid">
|
|
688
|
+
<div class="loop-panel-terminal" aria-live="polite">
|
|
689
|
+
<div class="bar">
|
|
690
|
+
<span id="loop-term-title">thumbgate · capture</span>
|
|
691
|
+
<span id="loop-term-mode">local</span>
|
|
692
|
+
</div>
|
|
693
|
+
<pre id="loop-term-body"></pre>
|
|
694
|
+
</div>
|
|
695
|
+
<div class="loop-panel-side">
|
|
696
|
+
<div id="loop-mode-row" class="loop-mode-toggle" hidden>
|
|
697
|
+
<button type="button" data-gate-mode="default" class="is-on">Default (warn)</button>
|
|
698
|
+
<button type="button" data-gate-mode="strict">Strict (deny)</button>
|
|
699
|
+
</div>
|
|
700
|
+
<h4>What actually happens</h4>
|
|
701
|
+
<ul id="loop-facts"></ul>
|
|
702
|
+
<h4>Honest default</h4>
|
|
703
|
+
<p id="loop-honest"></p>
|
|
704
|
+
<div class="loop-panel-actions">
|
|
705
|
+
<button type="button" class="copy-cmd" id="loop-copy-cmd">Copy command</button>
|
|
706
|
+
<a class="secondary" href="/guide">Setup guide</a>
|
|
707
|
+
<a href="#proof">Strict-mode example</a>
|
|
708
|
+
</div>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
1276
711
|
</div>
|
|
1277
|
-
<
|
|
1278
|
-
|
|
1279
|
-
|
|
712
|
+
<p class="loop-back"><strong>Each reviewed outcome closes the loop—under your control.</strong> Lessons are re-ranked per action, repeated failures can promote into gates, and stale auto-promoted gates expire. The firewall improves from explicit feedback without retraining the model or silently rewriting policy.</p>
|
|
713
|
+
</div>
|
|
714
|
+
</section>
|
|
715
|
+
|
|
716
|
+
<section id="deliverables">
|
|
717
|
+
<div class="shell">
|
|
718
|
+
<div class="section-kicker">What the $499 enterprise gate buys</div>
|
|
719
|
+
<h2 class="section-title">A managed gate for one painful workflow.</h2>
|
|
720
|
+
<p class="section-lede">This is the enterprise entry offer for one workflow, not an org-wide hosted platform license.</p>
|
|
721
|
+
<div class="deliverables">
|
|
722
|
+
<article class="deliverable">
|
|
723
|
+
<h3>Failure map</h3>
|
|
724
|
+
<p>The exact risky action, trigger, accountable owner, current safeguard, and missing proof.</p>
|
|
725
|
+
</article>
|
|
726
|
+
<article class="deliverable">
|
|
727
|
+
<h3>Configured gate</h3>
|
|
728
|
+
<p>One supported local rule wired to deny, warn, or require a human before execution.</p>
|
|
729
|
+
</article>
|
|
730
|
+
<article class="deliverable">
|
|
731
|
+
<h3>Regression and rollout proof</h3>
|
|
732
|
+
<p>The working test, rollout check, rollback boundary, and evidence receipt for the installed gate.</p>
|
|
733
|
+
</article>
|
|
1280
734
|
</div>
|
|
1281
|
-
<div class="
|
|
1282
|
-
|
|
1283
|
-
|
|
735
|
+
<div class="boundary"><strong>Boundary:</strong> the offer covers one supported local workflow. Multi-system implementation, legal or compliance certification, guaranteed savings, and hosted team features require separate scope. If the workflow cannot be reduced to one supported gate, the order is refunded instead of silently upsold.</div>
|
|
736
|
+
</div>
|
|
737
|
+
</section>
|
|
738
|
+
|
|
739
|
+
<section id="proof">
|
|
740
|
+
<div class="shell">
|
|
741
|
+
<div class="section-kicker">What “stop” honestly means</div>
|
|
742
|
+
<h2 class="section-title">Hard deny where configured. Honest warning everywhere else.</h2>
|
|
743
|
+
<div class="proof-grid">
|
|
744
|
+
<div class="terminal" aria-label="Illustrative strict-mode ThumbGate deny decision">
|
|
745
|
+
<div class="terminal-chrome" aria-hidden="true">
|
|
746
|
+
<div class="dots"><span></span><span></span><span></span></div>
|
|
747
|
+
<span class="title">thumbgate — pretooluse</span>
|
|
748
|
+
<span>local</span>
|
|
749
|
+
</div>
|
|
750
|
+
<pre><span class="green">proposed</span> git push --force origin main
|
|
751
|
+
mode strict enforcement
|
|
752
|
+
rule protect-main
|
|
753
|
+
source core protection · strict mode
|
|
754
|
+
decision <span class="red">DENY</span>
|
|
755
|
+
reason force-push to protected branch
|
|
756
|
+
next decision recorded before execution</pre>
|
|
757
|
+
<div class="terminal-status" aria-hidden="true">
|
|
758
|
+
<span>reviewable decision</span>
|
|
759
|
+
<span><span class="accent">under your control</span> · local lesson store</span>
|
|
760
|
+
</div>
|
|
761
|
+
</div>
|
|
762
|
+
<div class="proof-copy">
|
|
763
|
+
<p>Detected secret exfiltration and attempts to kill or bypass the gate process are denied by default. Matching destructive actions warn by default and deny in strict mode.</p>
|
|
764
|
+
<p>The example shows the strict-mode decision the managed install would specify and test. It is not a claim that every free install blocks every risky command automatically.</p>
|
|
765
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Read the test-backed verification evidence →</a>
|
|
766
|
+
</div>
|
|
1284
767
|
</div>
|
|
1285
768
|
</div>
|
|
1286
|
-
|
|
1287
|
-
<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>
|
|
1288
|
-
<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>
|
|
1289
|
-
</div>
|
|
1290
|
-
</div>
|
|
1291
|
-
</div>
|
|
1292
|
-
</section>
|
|
1293
|
-
|
|
1294
|
-
<section class="compatibility" id="persistent-skills">
|
|
1295
|
-
<div class="container">
|
|
1296
|
-
<div class="section-label">Persistent Agent Skills</div>
|
|
1297
|
-
<h2 class="section-title">Reusable instructions are the new baseline. Enforcement is the moat.</h2>
|
|
1298
|
-
<p style="text-align:center;font-size:16px;color:var(--text-muted);max-width:880px;margin:0 auto 28px;line-height:1.7;">Persistent agent skills create reusable instructions. ThumbGate adds a governed reliability layer: capture accepted feedback, export local lessons where the plan permits it, and inspect how a configured pre-action gate evaluated the next matching tool call before execution.</p>
|
|
1299
|
-
<div class="agent-grid">
|
|
1300
|
-
<div class="agent-card">
|
|
1301
|
-
<h3>Portable skill memory</h3>
|
|
1302
|
-
<p>Accepted lessons can supply reusable rule and skill-pack context. Moving that context between supported agents requires an explicit operator-managed export/import or a shared local install scope.</p>
|
|
1303
|
-
</div>
|
|
1304
|
-
<div class="agent-card">
|
|
1305
|
-
<h3>Instructions plus teeth</h3>
|
|
1306
|
-
<p>Persistent skills tell an agent what you prefer. ThumbGate evaluates configured checks against the next proposed action and returns allow, warn, or deny before execution.</p>
|
|
1307
|
-
</div>
|
|
1308
|
-
<div class="agent-card">
|
|
1309
|
-
<h3>Proof for teams</h3>
|
|
1310
|
-
<p>Local gate results expose the matched rule and available decision context so operators can review what fired instead of relying only on hidden chatbot memory.</p>
|
|
1311
|
-
</div>
|
|
1312
|
-
</div>
|
|
1313
|
-
</div>
|
|
1314
|
-
</section>
|
|
1315
|
-
|
|
1316
|
-
<!-- HOW IT WORKS -->
|
|
1317
|
-
<section class="how-it-works" id="how-it-works">
|
|
1318
|
-
<div class="container">
|
|
1319
|
-
<div class="section-label">Self-improving enforcement</div>
|
|
1320
|
-
<h2 class="section-title">Three steps to catch repeated AI failures</h2>
|
|
1321
|
-
<p class="section-sub" style="max-width:720px;margin:6px auto 22px;text-align:center;color:var(--text-muted);font-size:clamp(16px,1.6vw,18px);">Self-improving — but for safety, not capability: human-in-the-loop accepted feedback becomes local lessons, recurring failures can become prevention rules, and regression tests help detect false-positive rule matches.</p>
|
|
1322
|
-
<div class="steps">
|
|
1323
|
-
<div class="step">
|
|
1324
|
-
<div class="step-num">1</div>
|
|
1325
|
-
<h3>Feedback</h3>
|
|
1326
|
-
<p>Give <code>👍</code> or a concrete <code>👎</code> on your AI agent's actions. Accepted feedback is stored in a local SQLite+FTS5 lesson DB. In the current Claude auto-capture hook, a vague thumbs-down can distill from up to 8 prior recorded entries and the failed tool call before promotion, then stay linked to a 60-second feedback session. Recurring accepted failures can auto-promote into a prevention rule.</p>
|
|
1327
|
-
</div>
|
|
1328
|
-
<div class="step">
|
|
1329
|
-
<div class="step-num">2</div>
|
|
1330
|
-
<h3>Distill + Rules</h3>
|
|
1331
|
-
<p>Repeated failures auto-promote into prevention rules. Thompson Sampling adapts which rules fire, and the reflector lane can propose a reusable rule from the same transcript so high-risk patterns get stricter enforcement while low-risk ones stay relaxed.</p>
|
|
1332
|
-
</div>
|
|
1333
|
-
<div class="step">
|
|
1334
|
-
<div class="step-num">3</div>
|
|
1335
|
-
<h3>Checks</h3>
|
|
1336
|
-
<p>Rules become Pre-Action Checks that evaluate proposed tool calls before execution. Detected secret exfiltration and gate kill/bypass commands deny by default; matching force-push, destructive-delete, fetch-and-run, or learned checks warn unless strict enforcement turns them into denies.</p>
|
|
1337
|
-
</div>
|
|
1338
|
-
</div>
|
|
1339
|
-
</div>
|
|
1340
|
-
</section>
|
|
1341
|
-
|
|
1342
|
-
<!-- PROENTROPIC -->
|
|
1343
|
-
<!-- GUARDRAILS -->
|
|
1344
|
-
<section class="compatibility" id="guardrails">
|
|
1345
|
-
<div class="container">
|
|
1346
|
-
<div class="section-label">Enforcement</div>
|
|
1347
|
-
<h2 class="section-title">Configured checks evaluate proposed tool calls before execution.</h2>
|
|
1348
|
-
<div class="agent-grid">
|
|
1349
|
-
<div class="agent-card">
|
|
1350
|
-
<h3>Don't trust — verify</h3>
|
|
1351
|
-
<p>Gate results report the decision, matched gate, and available reason or evidence context.</p>
|
|
1352
|
-
</div>
|
|
1353
|
-
<div class="agent-card">
|
|
1354
|
-
<h3>Real tools, not wishes</h3>
|
|
1355
|
-
<p>Configured checks run at the tool-call boundary. Detected secret exfiltration and gate kill/bypass commands deny by default; set <code>THUMBGATE_STRICT_ENFORCEMENT=1</code> to deny matching warning-mode checks.</p>
|
|
1356
|
-
</div>
|
|
1357
|
-
<div class="agent-card">
|
|
1358
|
-
<h3>Force models to show work</h3>
|
|
1359
|
-
<p>Decision reasons and Thompson Sampling confidence tiers are available where the evaluator produces them.</p>
|
|
1360
|
-
</div>
|
|
1361
|
-
<div class="agent-card">
|
|
1362
|
-
<h3>Review decisions and recurring failures</h3>
|
|
1363
|
-
<p>Recurring accepted failures can auto-promote to checks. Pro includes a personal local dashboard; a hosted org dashboard is not generally available.</p>
|
|
1364
|
-
</div>
|
|
1365
|
-
<div class="agent-card">
|
|
1366
|
-
<h3>Keep risky runs off the host</h3>
|
|
1367
|
-
<p>When Workflow Sentinel predicts a risky local action, ThumbGate can recommend Docker Sandboxes before the agent touches the host filesystem or broader credentials.</p>
|
|
1368
|
-
</div>
|
|
1369
|
-
<div class="agent-card">
|
|
1370
|
-
<h3>Ship with versioned proof</h3>
|
|
1371
|
-
<p>Changesets, SemVer, sync checks, and verification evidence make new package releases inspectable before a buyer trusts the next rollout.</p>
|
|
1372
|
-
</div>
|
|
1373
|
-
</div>
|
|
1374
|
-
</div>
|
|
1375
|
-
</section>
|
|
1376
|
-
|
|
1377
|
-
<!-- CODE EXAMPLE -->
|
|
1378
|
-
<section class="code-section">
|
|
1379
|
-
<div class="container">
|
|
1380
|
-
<div class="code-block">
|
|
1381
|
-
<div class="code-header">
|
|
1382
|
-
<div class="code-dot red"></div>
|
|
1383
|
-
<div class="code-dot yellow"></div>
|
|
1384
|
-
<div class="code-dot green"></div>
|
|
1385
|
-
<span>terminal</span>
|
|
1386
|
-
</div>
|
|
1387
|
-
<div class="code-body">
|
|
1388
|
-
<div><span class="comment"># Install the local CLI</span></div>
|
|
1389
|
-
<div><span class="fn">npx</span> thumbgate init</div>
|
|
1390
|
-
<div> </div>
|
|
1391
|
-
<div><span class="comment"># Your agent tries to delete production db...</span></div>
|
|
1392
|
-
<div><span class="keyword">⚠️ Check flagged:</span> <span class="string">"Never run DROP on production tables"</span> <span class="comment"># blocks under strict mode</span></div>
|
|
1393
|
-
<div><span class="comment"># Rule promoted from accepted recurring feedback</span></div>
|
|
1394
|
-
<div> </div>
|
|
1395
|
-
<div><span class="comment"># Works with your existing setup</span></div>
|
|
1396
|
-
<div><span class="fn">npx</span> thumbgate init <span class="comment"># bootstraps .thumbgate and .mcp.json</span></div>
|
|
1397
|
-
<div><span class="comment"># Use repo guides for Claude plugin, Codex app plugin, Cursor plugin, and OpenCode profiles</span></div>
|
|
1398
|
-
</div>
|
|
1399
|
-
</div>
|
|
1400
|
-
</div>
|
|
1401
|
-
</section>
|
|
1402
|
-
|
|
1403
|
-
<section id="install" style="padding: 60px 40px; max-width: 900px; margin: 0 auto;">
|
|
1404
|
-
<h2 style="font-size: 2em; text-align: center; margin-bottom: 40px;">Install for Your Agent</h2>
|
|
1405
|
-
|
|
1406
|
-
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
|
|
1407
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1408
|
-
<h3>Claude Code</h3>
|
|
1409
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent claude-code</code>
|
|
1410
|
-
<p style="color: #8b949e; font-size: 14px;">Wires PreToolUse hooks automatically</p>
|
|
1411
|
-
</div>
|
|
1412
|
-
|
|
1413
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1414
|
-
<h3>Cursor</h3>
|
|
1415
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent cursor</code>
|
|
1416
|
-
<p style="color: #8b949e; font-size: 14px;">4 skills: feedback, rules, search, recall</p>
|
|
1417
|
-
</div>
|
|
1418
|
-
|
|
1419
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1420
|
-
<h3>Codex</h3>
|
|
1421
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent codex</code>
|
|
1422
|
-
<p style="color: #8b949e; font-size: 14px;">6 skills including adversarial review</p>
|
|
1423
|
-
</div>
|
|
1424
|
-
|
|
1425
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1426
|
-
<h3>Gemini CLI</h3>
|
|
1427
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent gemini</code>
|
|
1428
|
-
<p style="color: #8b949e; font-size: 14px;">Gemini CLI integration</p>
|
|
1429
|
-
</div>
|
|
1430
|
-
|
|
1431
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1432
|
-
<h3>Amp</h3>
|
|
1433
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent amp</code>
|
|
1434
|
-
<p style="color: #8b949e; font-size: 14px;">Amp agent integration</p>
|
|
1435
|
-
</div>
|
|
1436
|
-
|
|
1437
|
-
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
1438
|
-
<h3>Any MCP Client</h3>
|
|
1439
|
-
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate serve</code>
|
|
1440
|
-
<p style="color: #8b949e; font-size: 14px;">MCP stdio server for any compatible client</p>
|
|
1441
|
-
</div>
|
|
1442
|
-
</div>
|
|
1443
|
-
|
|
1444
|
-
<div style="text-align: center; margin-top: 40px;">
|
|
1445
|
-
<h3>Claude Desktop</h3>
|
|
1446
|
-
<p style="color: #8b949e;">Add to your <code>claude_desktop_config.json</code>:</p>
|
|
1447
|
-
<pre style="background: #0d1117; padding: 16px; border-radius: 8px; color: #58a6ff; text-align: left; display: inline-block; margin: 12px auto;">{
|
|
1448
|
-
"mcpServers": {
|
|
1449
|
-
"thumbgate": {
|
|
1450
|
-
"command": "npx",
|
|
1451
|
-
"args": ["--yes", "--package", "thumbgate", "thumbgate", "serve"]
|
|
1452
|
-
}
|
|
1453
|
-
}
|
|
1454
|
-
}</pre>
|
|
1455
|
-
<p style="color: #8b949e; max-width: 760px; margin: 16px auto 0;">Official directory review is separate. Claude Code users can install immediately with <code>/plugin marketplace add IgorGanapolsky/ThumbGate</code> and <code>/plugin install thumbgate@thumbgate-marketplace</code>.</p>
|
|
1456
|
-
</div>
|
|
1457
|
-
</section>
|
|
1458
|
-
|
|
1459
|
-
<!-- PRICING -->
|
|
1460
|
-
<section class="pricing" id="pricing">
|
|
1461
|
-
<div class="container">
|
|
1462
|
-
<div class="section-label">Pricing</div>
|
|
1463
|
-
<h2 class="section-title">Stop paying for agent mistakes you already fixed.</h2>
|
|
1464
|
-
|
|
1465
|
-
<!-- At-a-glance comparison so buyers see plan differences without parsing the cards below. -->
|
|
1466
|
-
<div class="plan-matrix-wrap" style="max-width:1080px;margin:8px auto 28px;overflow-x:auto;">
|
|
1467
|
-
<table class="plan-matrix" style="width:100%;border-collapse:collapse;font-size:14px;min-width:640px;">
|
|
1468
|
-
<thead>
|
|
1469
|
-
<tr>
|
|
1470
|
-
<th style="text-align:left;padding:12px 14px;color:var(--text-muted);font-weight:600;border-bottom:1px solid var(--border);"></th>
|
|
1471
|
-
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);">Free<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">$0 forever</span></th>
|
|
1472
|
-
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);color:var(--cyan);">Pro<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">$19/mo or $149/yr</span></th>
|
|
1473
|
-
<th style="text-align:center;padding:12px 14px;border-bottom:1px solid var(--border);color:var(--cyan);">Enterprise<br><span style="font-size:12px;color:var(--text-muted);font-weight:400;">Custom — scoped after intake</span></th>
|
|
1474
|
-
</tr>
|
|
1475
|
-
</thead>
|
|
1476
|
-
<tbody>
|
|
1477
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Local PreToolUse enforcement (configured integrations)</td><td style="text-align:center;border-bottom:1px solid var(--border);">✅</td><td style="text-align:center;border-bottom:1px solid var(--border);">✅</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1478
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Feedback captures</td><td style="text-align:center;border-bottom:1px solid var(--border);">2/day (10 total)</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1479
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Active auto-promoted prevention rules</td><td style="text-align:center;border-bottom:1px solid var(--border);">3</td><td style="text-align:center;border-bottom:1px solid var(--border);">Unlimited</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1480
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Lesson recall + search across sessions</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">✅</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1481
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Personal dashboard + DPO export</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">✅</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1482
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Hosted team lesson sync</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">Not GA</td></tr>
|
|
1483
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Hosted org dashboard</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">Not GA</td></tr>
|
|
1484
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">Approval boundaries + rollout design</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">Scoped after intake</td></tr>
|
|
1485
|
-
<tr><td style="padding:10px 14px;border-bottom:1px solid var(--border);">SSO, SIEM + compliance packaging</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">—</td><td style="text-align:center;border-bottom:1px solid var(--border);">Not GA</td></tr>
|
|
1486
|
-
<tr><td style="padding:10px 14px;color:var(--text-muted);">Best for</td><td style="text-align:center;color:var(--text-muted);">One developer</td><td style="text-align:center;color:var(--text-muted);">Solo operators</td><td style="text-align:center;color:var(--text-muted);">Teams & regulated orgs</td></tr>
|
|
1487
|
-
</tbody>
|
|
1488
|
-
</table>
|
|
1489
|
-
</div>
|
|
769
|
+
</section>
|
|
1490
770
|
|
|
1491
|
-
<
|
|
1492
|
-
<div class="
|
|
1493
|
-
<div class="
|
|
1494
|
-
<
|
|
1495
|
-
<div class="
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
<
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
<
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
<
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
<a href="https://www.npmjs.com/package/thumbgate" target="_blank" rel="noopener" class="btn-free">Install Free</a>
|
|
1512
|
-
</div>
|
|
1513
|
-
<div class="price-card pro" data-price-dollars="19">
|
|
1514
|
-
<div class="tier">Pro</div>
|
|
1515
|
-
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
1516
|
-
<div class="price-sub"><strong>Individual local governance with higher limits.</strong> The free CLI runs configured gates locally. Pro removes the individual caps and adds the personal dashboard, recall, search, and exports. Hosted team lesson sync is not generally available.</div>
|
|
1517
|
-
<ul>
|
|
1518
|
-
<li><strong>Higher local limits</strong> — unlimited feedback captures and active auto-promoted prevention rules (Free caps at 3 active rules)</li>
|
|
1519
|
-
<li><strong>Recall and search accepted lessons</strong> across sessions in the configured local scope</li>
|
|
1520
|
-
<li><strong>Inspect which check fired</strong> — <a href="/dashboard#insights" style="color:var(--cyan);text-decoration:underline;">personal visual check debugger</a> for available local gate history</li>
|
|
1521
|
-
<li><strong>Use supported integrations</strong> — configure Claude Code, Cursor, Codex, Gemini, Amp, Cline, or OpenCode through its documented setup path</li>
|
|
1522
|
-
<li><strong>Export training data</strong> — <a href="/dashboard#export" style="color:var(--cyan);text-decoration:underline;">DPO preference-pair export</a> for a separate fine-tuning workflow</li>
|
|
1523
|
-
<li><strong>Review local enforcement evidence</strong> — personal dashboard for the individual operator with available gate history</li>
|
|
1524
|
-
<li><strong>Prepare model-hardening data</strong> — Model Hardening Advisor plus HuggingFace dataset export for a separate training and evaluation workflow</li>
|
|
1525
|
-
<li><strong>Hand a PR with proof</strong> — review-ready workflow support and exportable lesson bundles</li>
|
|
1526
|
-
<li><strong>Hand off without re-onboarding</strong> — Lesson export/import for handoff or migration</li>
|
|
1527
|
-
</ul>
|
|
1528
|
-
<div style="margin:12px 0 16px;padding:12px;border:1px solid rgba(34,211,238,0.25);border-radius:8px;background:rgba(34,211,238,0.06);">
|
|
1529
|
-
<div style="font-size:12px;color:var(--text-muted);margin-bottom:4px;">What your Pro dashboard looks like</div>
|
|
1530
|
-
<div style="font-family:var(--mono);font-size:12px;color:var(--cyan);line-height:1.6;">checks: local gate history<br>feedback: unlimited<br>exports: DPO + lessons</div>
|
|
1531
|
-
</div>
|
|
1532
|
-
<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>
|
|
1533
|
-
<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>
|
|
1534
|
-
<p style="font-size:11px;color:var(--text-muted);margin-top:8px;text-align:center;">Billed today · cancel anytime.</p>
|
|
1535
|
-
<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;">
|
|
1536
|
-
</div>
|
|
1537
|
-
</div>
|
|
1538
|
-
<div class="pricing-matrix" aria-label="Plan capability comparison">
|
|
1539
|
-
<table>
|
|
1540
|
-
<caption>Compare plans at a glance</caption>
|
|
1541
|
-
<thead>
|
|
1542
|
-
<tr>
|
|
1543
|
-
<th scope="col">Capability</th>
|
|
1544
|
-
<th scope="col">Free</th>
|
|
1545
|
-
<th scope="col">Pro</th>
|
|
1546
|
-
<th scope="col">Enterprise</th>
|
|
1547
|
-
</tr>
|
|
1548
|
-
</thead>
|
|
1549
|
-
<tbody>
|
|
1550
|
-
<tr>
|
|
1551
|
-
<td><strong>Best for</strong></td>
|
|
1552
|
-
<td>One developer evaluating local checks</td>
|
|
1553
|
-
<td>One operator who wants personal recall, dashboard proof, managed adapters, and exports</td>
|
|
1554
|
-
<td>Teams & regulated organizations scoping one governed workflow</td>
|
|
1555
|
-
</tr>
|
|
1556
|
-
<tr>
|
|
1557
|
-
<td><strong>Price</strong></td>
|
|
1558
|
-
<td>$0</td>
|
|
1559
|
-
<td>$19/mo or $149/yr</td>
|
|
1560
|
-
<td>Custom — scoped after intake</td>
|
|
1561
|
-
</tr>
|
|
1562
|
-
<tr>
|
|
1563
|
-
<td><strong>Feedback captures</strong></td>
|
|
1564
|
-
<td>2/day, 10 total</td>
|
|
1565
|
-
<td>Unlimited</td>
|
|
1566
|
-
<td>Scoped after intake; hosted team sync is not GA</td>
|
|
1567
|
-
</tr>
|
|
1568
|
-
<tr>
|
|
1569
|
-
<td><strong>Active prevention rules</strong></td>
|
|
1570
|
-
<td>3 active rules</td>
|
|
1571
|
-
<td>Unlimited personal rules</td>
|
|
1572
|
-
<td>Approval boundaries and rollout requirements scoped after intake</td>
|
|
1573
|
-
</tr>
|
|
1574
|
-
<tr>
|
|
1575
|
-
<td><strong>Dashboard and proof</strong></td>
|
|
1576
|
-
<td>Local CLI evidence</td>
|
|
1577
|
-
<td>Personal dashboard, check debugger, DPO/HF exports</td>
|
|
1578
|
-
<td>Hosted org dashboard, SIEM, and compliance packaging are not GA</td>
|
|
1579
|
-
</tr>
|
|
1580
|
-
<tr>
|
|
1581
|
-
<td><strong>How to start</strong></td>
|
|
1582
|
-
<td><code>npx thumbgate init</code></td>
|
|
1583
|
-
<td>Self-serve Stripe checkout</td>
|
|
1584
|
-
<td>Send one repeated workflow failure first — intake before checkout</td>
|
|
1585
|
-
</tr>
|
|
1586
|
-
</tbody>
|
|
1587
|
-
</table>
|
|
1588
|
-
</div>
|
|
1589
|
-
<p class="pricing-note">Free provides capped local evaluation. Pro removes individual limits and adds recall, search, a personal dashboard, and exports. Enterprise starts through intake to scope one workflow; it does not imply generally available hosted team features.</p>
|
|
1590
|
-
<div style="max-width:1080px;margin:24px auto 0;">
|
|
1591
|
-
<div class="price-card enterprise" style="border:1px solid var(--cyan);background:linear-gradient(180deg, rgba(34,211,238,0.04), transparent);padding:24px 28px;">
|
|
1592
|
-
<div style="display:flex;flex-wrap:wrap;align-items:flex-start;gap:24px;justify-content:space-between;">
|
|
1593
|
-
<div style="flex:1 1 420px;min-width:280px;">
|
|
1594
|
-
<div class="tier" style="color:var(--cyan);">Enterprise</div>
|
|
1595
|
-
<div style="font-size:14px;color:var(--text-muted);margin:4px 0 12px;letter-spacing:0.04em;text-transform:uppercase;">Engineering teams · Banking · Insurance · Healthcare · Public sector</div>
|
|
1596
|
-
<div style="font-size:18px;color:var(--text);margin-bottom:6px;font-weight:700;">Scope one governed workflow — custom pricing after intake</div>
|
|
1597
|
-
<div class="price-sub" style="margin-bottom:14px;">Enterprise is an intake-led service path for teams that need to define approval boundaries, rollback plans, evidence requirements, and rollout ownership around one workflow. The current public runtime remains local per configured operator; hosted team lesson sync and a hosted org dashboard are not generally available.</div>
|
|
1598
|
-
<ul style="margin-bottom:0;">
|
|
1599
|
-
<li><strong>One-workflow discovery</strong> — identify the repeated failure, runtime, owner, and decision boundary</li>
|
|
1600
|
-
<li><strong>Approval and rollback design</strong> — document who can approve, what evidence is required, and how the workflow recovers</li>
|
|
1601
|
-
<li><strong>Verification plan</strong> — define the local tests and proof required before a wider rollout claim</li>
|
|
1602
|
-
<li><strong>Deployment requirements</strong> — capture data-boundary, identity, hosting, and integration constraints before making delivery commitments</li>
|
|
1603
|
-
<li><strong>Current availability boundary</strong> — hosted team sync, a hosted org dashboard, SSO, SIEM, and compliance packaging are not general-availability features</li>
|
|
1604
|
-
</ul>
|
|
771
|
+
<section id="faq">
|
|
772
|
+
<div class="shell">
|
|
773
|
+
<div class="section-kicker">Before you buy</div>
|
|
774
|
+
<h2 class="section-title">Five questions, answered plainly.</h2>
|
|
775
|
+
<div class="faq-list">
|
|
776
|
+
<div class="faq-item open">
|
|
777
|
+
<button class="faq-q" type="button" aria-expanded="true">What do I get for $499?</button>
|
|
778
|
+
<div class="faq-a">One 60-minute working review for one repeated AI-agent workflow failure, one configured local gate for a supported workflow, its regression test, and a written rollout and rollback proof within two business days after access and the agreed materials are available.</div>
|
|
779
|
+
</div>
|
|
780
|
+
<div class="faq-item">
|
|
781
|
+
<button class="faq-q" type="button" aria-expanded="false">Does ThumbGate block every risky command by default?</button>
|
|
782
|
+
<div class="faq-a">No. Detected secret exfiltration and gate-process bypass attempts are denied by default. Matching destructive actions warn unless strict enforcement is enabled. The managed gate defines the right boundary for your workflow instead of pretending every warning is a firewall.</div>
|
|
783
|
+
</div>
|
|
784
|
+
<div class="faq-item">
|
|
785
|
+
<button class="faq-q" type="button" aria-expanded="false">Is this the enterprise option?</button>
|
|
786
|
+
<div class="faq-a">Yes. The $499 Enterprise Workflow Gate is the enterprise entry offer for one supported workflow. It is not an org-wide hosted platform license: shared hosting, SSO, compliance packaging, and multi-workflow rollout require separate scope and are not generally available.</div>
|
|
787
|
+
</div>
|
|
788
|
+
<div class="faq-item">
|
|
789
|
+
<button class="faq-q" type="button" aria-expanded="false">Does self-improving mean ThumbGate retrains my model?</button>
|
|
790
|
+
<div class="faq-a">No. ThumbGate does not change model weights and does not silently rewrite production policy. Self-improving under your control means explicit approvals and feedback teach the local control layer what to allow, block, or escalate next time: lessons are stored and re-ranked, repeated negative patterns can promote into gates, and stale auto-promoted gates expire.</div>
|
|
1605
791
|
</div>
|
|
1606
|
-
<div
|
|
1607
|
-
<
|
|
1608
|
-
<
|
|
1609
|
-
<p style="font-size:11px;color:var(--text-muted);margin:0;text-align:center;line-height:1.5;">Pricing and deliverables are scoped after intake; no hosted-team capability is promised before verification.</p>
|
|
792
|
+
<div class="faq-item">
|
|
793
|
+
<button class="faq-q" type="button" aria-expanded="false">Is the self-improving logic a black box I have to trust blindly?</button>
|
|
794
|
+
<div class="faq-a">No. The promotion, demotion, and lesson-ranking logic ships in the public npm bundle under an MIT license — run <code>npm pack thumbgate</code> and read it yourself. Your lessons live in a local SQLite file you own, not a server you can't query. Paid tiers add hosted sync, the dashboard, and adapter coverage, not access to intelligence withheld from the free install.</div>
|
|
1610
795
|
</div>
|
|
1611
796
|
</div>
|
|
1612
797
|
</div>
|
|
1613
|
-
</
|
|
1614
|
-
</div>
|
|
1615
|
-
</section>
|
|
798
|
+
</section>
|
|
1616
799
|
|
|
1617
|
-
<section class="
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
<h3>Tell us the workflow. Get a proof plan.</h3>
|
|
1626
|
-
<p>The highest-fit Enterprise buyer is already feeling one repeated failure in a workflow where mistakes have real consequences. Send the workflow first so the next step is scoped around the real blocker instead of a blind checkout.</p>
|
|
1627
|
-
</div>
|
|
1628
|
-
<span class="team-intake-badge">Scope-first intake</span>
|
|
1629
|
-
</div>
|
|
1630
|
-
<div class="team-intake-recovery" aria-label="Checkout recovery path for workflow sprint buyers">
|
|
1631
|
-
<div>
|
|
1632
|
-
<strong>Enterprise checkout happens after scope.</strong>
|
|
1633
|
-
<span>Send the workflow first. We will qualify the blocker, confirm whether Pro or a scoped Enterprise rollout is the right next step, and keep the purchase path tied to real evidence.</span>
|
|
800
|
+
<section class="final">
|
|
801
|
+
<div class="shell">
|
|
802
|
+
<div class="section-kicker">Two cash paths</div>
|
|
803
|
+
<h2 class="section-title">Start self-serve, or bring the failure that already cost you time.</h2>
|
|
804
|
+
<p class="section-lede">Pro is the self-serve subscription for operators. The $499 enterprise gate is a managed install for one painful workflow—not another policy deck.</p>
|
|
805
|
+
<div style="display:flex;flex-wrap:wrap;gap:12px;justify-content:center;margin-top:22px">
|
|
806
|
+
<a class="nav-buy" href="/checkout/pro?utm_source=website&utm_medium=homepage_final&utm_campaign=pro_self_serve&cta_id=final_pro_buy&cta_placement=final&plan_id=pro" data-offer-link data-cta-id="final_pro_buy">Start Pro — $19/mo</a>
|
|
807
|
+
<a class="nav-enterprise" href="#enterprise-gate" data-offer-link data-cta-id="final_diagnostic_buy">Buy the $499 enterprise gate</a>
|
|
1634
808
|
</div>
|
|
1635
|
-
<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>
|
|
1636
|
-
</div>
|
|
1637
|
-
<form id="team-pilot-intake-form" class="team-form" action="/v1/intake/workflow-sprint" method="POST" data-team-intake-form>
|
|
1638
|
-
<input type="hidden" name="ctaId" value="workflow_sprint_intake">
|
|
1639
|
-
<input type="hidden" name="ctaPlacement" value="team_visible_intake">
|
|
1640
|
-
<input type="hidden" name="planId" value="team">
|
|
1641
|
-
<input type="hidden" name="utmSource" value="website">
|
|
1642
|
-
<input type="hidden" name="utmMedium" value="visible_team_intake">
|
|
1643
|
-
<input type="hidden" name="utmCampaign" value="workflow_hardening_sprint">
|
|
1644
|
-
<input type="hidden" name="page" value="/#workflow-sprint-intake">
|
|
1645
|
-
<input type="email" name="email" placeholder="you@company.com" autocomplete="email" required>
|
|
1646
|
-
<input type="text" name="company" placeholder="Company">
|
|
1647
|
-
<input type="text" name="workflow" placeholder="Workflow to harden (e.g. deploy approvals, migrations, PR review)" required>
|
|
1648
|
-
<input type="text" name="owner" placeholder="Workflow owner" required>
|
|
1649
|
-
<input type="text" name="runtime" placeholder="Current agent/runtime (Claude Code, Codex, Cursor, Gemini...)" required>
|
|
1650
|
-
<textarea class="full" name="blocker" placeholder="What repeat mistake, rollout blocker, or team handoff failure keeps happening?" required></textarea>
|
|
1651
|
-
<textarea class="full" name="note" placeholder="Optional context: team size, repos involved, target rollout date, or what you need to prove internally."></textarea>
|
|
1652
|
-
<div class="full">
|
|
1653
|
-
<button type="submit" class="btn-team">Start Enterprise Pilot Intake</button>
|
|
1654
|
-
</div>
|
|
1655
|
-
</form>
|
|
1656
|
-
</div>
|
|
1657
|
-
</div>
|
|
1658
|
-
</section>
|
|
1659
|
-
|
|
1660
|
-
<!-- FAQ -->
|
|
1661
|
-
<section class="faq" id="faq">
|
|
1662
|
-
<div class="container">
|
|
1663
|
-
<div class="section-label">FAQ</div>
|
|
1664
|
-
<h2 class="section-title">Common questions</h2>
|
|
1665
|
-
<div class="faq-list">
|
|
1666
|
-
<div class="faq-item open">
|
|
1667
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="true" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Does ThumbGate support model fine-tuning?</div>
|
|
1668
|
-
<div class="faq-a">ThumbGate Pro includes a Model Hardening Advisor plus LoRA JSONL and DPO preference-pair exports for use in a separate fine-tuning workflow. An export does not guarantee that a trained model will avoid a mistake; that outcome depends on the dataset, training process, model, and evaluation.</div>
|
|
1669
|
-
</div>
|
|
1670
|
-
<div class="faq-item">
|
|
1671
|
-
<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>
|
|
1672
|
-
<div class="faq-a">ThumbGate's runtime keeps lessons and rules outside the model. A configured hook evaluates proposed tool calls before execution. Detected secret exfiltration plus commands that kill the gate process or enable its bypass variable deny by default; matching destructive deletes, force-pushes, and fetch-and-run commands warn by default. Strict mode (<code>THUMBGATE_STRICT_ENFORCEMENT=1</code>) turns matching warning-mode checks into denies.</div>
|
|
1673
|
-
</div>
|
|
1674
|
-
<div class="faq-item">
|
|
1675
|
-
<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>
|
|
1676
|
-
<div class="faq-a">Persistent agent skills are reusable instructions. ThumbGate adds a local enforcement loop: accepted feedback becomes lessons, recurring failures can become rules, and configured Pre-Action Checks return allow, warn, or deny before tool execution. Pro adds a personal dashboard and operator-managed exports; hosted team sync and a hosted org dashboard are not generally available.</div>
|
|
1677
|
-
</div>
|
|
1678
|
-
<div class="faq-item">
|
|
1679
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What's the tech stack?</div>
|
|
1680
|
-
<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. Configured PreToolUse hooks evaluate known-bad actions before execution; detected secret exfiltration and gate kill/bypass commands deny by default, while strict mode also denies matching warning-mode checks. The local path requires no cloud account.</div>
|
|
1681
|
-
</div>
|
|
1682
|
-
<div class="faq-item">
|
|
1683
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What AI agents and editors does this work with?</div>
|
|
1684
|
-
<div class="faq-a">ThumbGate includes documented integration paths for Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, and OpenCode. Each agent must be configured through its hook or MCP setup; MCP compatibility alone does not install enforcement automatically. The Cursor runtime setup is <code>npx thumbgate init --agent cursor</code>, while the in-app Marketplace listing remains separate. VS Code can host an MCP-compatible agent, but this repo does not ship a standalone VS Code extension.</div>
|
|
1685
809
|
</div>
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
<
|
|
1696
|
-
<
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
<
|
|
1700
|
-
<div class="faq-a">ThumbGate does not rely on vibes, making it the safety net for vibe coding. Release-relevant PRs need a Changeset, SemVer rules keep version bumps honest, sync checks keep manifests aligned, proof lanes run before merge, and the exact main-branch merge commit is verified before the work is called done.</div>
|
|
1701
|
-
</div>
|
|
1702
|
-
<div class="faq-item">
|
|
1703
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Do I need a cloud account?</div>
|
|
1704
|
-
<div class="faq-a">No. Free keeps local enforcement on your machine with 2 feedback captures/day, up to 3 active auto-promoted prevention rules, and built-in checks. Recall, lesson search, unlimited rules and captures, a personal dashboard, and operator-managed exports open up on Pro. Enterprise is custom and scoped after intake around one workflow. Hosted team lesson sync and a hosted org dashboard are not general-availability runtime features.</div>
|
|
1705
|
-
</div>
|
|
1706
|
-
<div class="faq-item">
|
|
1707
|
-
<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>
|
|
1708
|
-
<div class="faq-a">For the current Claude auto-capture hook, ThumbGate can reuse up to 8 prior recorded entries and the failed tool call for a vague thumbs-down, then keep a linked 60-second feedback session open for later clarification. The timer resets when more context arrives, so the lesson stays attached to one feedback record instead of fragmenting into duplicates.</div>
|
|
1709
|
-
</div>
|
|
1710
|
-
<div class="faq-item">
|
|
1711
|
-
<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>
|
|
1712
|
-
<div class="faq-a">Prompt rules are a starting point, not a finish line. ThumbGate adds a human-feedback loop plus configured Pre-Action Checks at the tool-call boundary. The default policy denies detected secret exfiltration and gate kill/bypass commands while other matching high-risk checks warn; strict mode also denies matching warning-mode checks.</div>
|
|
1713
|
-
</div>
|
|
1714
|
-
<div class="faq-item">
|
|
1715
|
-
<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>
|
|
1716
|
-
<div class="faq-a">Agentic development is not just generation. Teams need Guide, Generate, Verify, and Solve working as a repeatable loop. ThumbGate can serve as the pre-action execution gate: guidance and accepted feedback can become rules, generated tool calls are evaluated before execution, rules can require verification evidence, and recurring solved failures can become reusable prevention gates.</div>
|
|
1717
|
-
</div>
|
|
1718
|
-
<div class="faq-item">
|
|
1719
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
1720
|
-
<div class="faq-a">Pro is $19/mo or $149/yr for individual operators and bills through Stripe. Enterprise is custom pricing, scoped after intake around one workflow's approval boundaries, rollback plan, evidence requirements, and rollout support. Hosted team features are not implied by intake.</div>
|
|
1721
|
-
</div>
|
|
1722
|
-
<div class="faq-item">
|
|
1723
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Does ThumbGate support enterprise Google Cloud / Vertex AI?</div>
|
|
1724
|
-
<div class="faq-a">The package ships a <code>npx thumbgate setup-vertex</code> setup helper for operators who choose the optional Vertex adapter. Whether evaluations stay within a particular VPC depends on the operator's Google Cloud configuration and must be verified in that deployment. Dialogflow CX governance is an intake-scoped integration requirement, not a generally available hosted deployment claim.</div>
|
|
1725
|
-
</div>
|
|
1726
|
-
<div class="faq-item">
|
|
1727
|
-
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How does ThumbGate contain enterprise API costs?</div>
|
|
1728
|
-
<div class="faq-a">FrontierBudget provides a local client-side token ledger and configurable routing or cost-containment limits. Reported token savings are estimates based on configured assumptions, not provider-billing measurements or a spend guarantee; verify actual costs in the provider's billing telemetry.</div>
|
|
1729
|
-
</div>
|
|
1730
|
-
</div>
|
|
1731
|
-
</div>
|
|
1732
|
-
</section>
|
|
1733
|
-
|
|
1734
|
-
<!-- NEWSLETTER SIGNUP -->
|
|
1735
|
-
<section class="compatibility" id="newsletter" style="padding: 48px 0;">
|
|
1736
|
-
<div class="container" style="text-align: center;">
|
|
1737
|
-
<div class="section-label">Stay Updated</div>
|
|
1738
|
-
<h2 class="section-title" style="margin-bottom: 16px;">Get notified when we ship new checks and integrations.</h2>
|
|
1739
|
-
<p style="color: var(--text-dim); margin-bottom: 24px; max-width: 560px; margin-left: auto; margin-right: auto;">Join the mailing list for new check patterns, agent integration updates, and product news. If you later choose Pro, we keep checkout prefilled on this device.</p>
|
|
1740
|
-
<form action="/api/newsletter" method="POST" data-newsletter-form data-page="homepage" data-intent="buyer_follow_up" style="display: flex; gap: 8px; max-width: 480px; margin: 0 auto; flex-wrap: wrap; justify-content: center;">
|
|
1741
|
-
<input type="email" name="email" data-buyer-email placeholder="you@company.com" required style="flex: 1; min-width: 220px; padding: 12px 16px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-raised); color: var(--text); font-size: 15px;">
|
|
1742
|
-
<button type="submit" style="padding: 12px 24px; background: var(--cyan); color: #000; border: none; border-radius: 8px; font-weight: 600; font-size: 15px; cursor: pointer;">Get sprint brief + updates</button>
|
|
1743
|
-
</form>
|
|
1744
|
-
<p data-newsletter-status style="min-height:20px;font-size:12px;color:var(--text-dim);margin-top:10px;" aria-live="polite"></p>
|
|
1745
|
-
</div>
|
|
1746
|
-
</section>
|
|
1747
|
-
|
|
1748
|
-
<!-- FINAL CTA -->
|
|
1749
|
-
<section class="final-cta">
|
|
1750
|
-
<div class="container">
|
|
1751
|
-
<h2>Stop the same mistake before it runs again.</h2>
|
|
1752
|
-
<p>Install the local CLI without a credit card or account, then configure the integration for your agent.</p>
|
|
1753
|
-
<div style="display:flex;gap:12px;justify-content:center;flex-wrap:wrap;align-items:center;">
|
|
1754
|
-
<div class="hero-install" onclick="copyInstall(this)" title="Click to copy" style="margin-bottom:0;font-size:16px;padding:14px 24px;border:2px solid var(--cyan);">
|
|
1755
|
-
<span class="prompt">$</span>
|
|
1756
|
-
<span class="cmd">npx thumbgate init</span>
|
|
1757
|
-
<span class="copy-hint">click to copy</span>
|
|
810
|
+
</section>
|
|
811
|
+
</main>
|
|
812
|
+
|
|
813
|
+
<footer>
|
|
814
|
+
<div class="shell footer-inner">
|
|
815
|
+
<span>ThumbGate · MIT License · npm v1.29.2</span>
|
|
816
|
+
<div class="footer-links">
|
|
817
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
818
|
+
<a href="/guide">Technical setup</a>
|
|
819
|
+
<a href="/dashboard#insights">Live enforcement dashboard</a>
|
|
820
|
+
<a href="#thumbgate-dashboard-command"><code>thumbgate-dashboard</code> command</a>
|
|
821
|
+
<a href="/guides/developer-machine-supply-chain-guardrails">Developer Machine Supply Chain Guardrails — npm, PyPI, Docker, and CLI compromise paths</a>
|
|
822
|
+
<a href="/learn">Browse the guide library</a>
|
|
823
|
+
<a href="/llm-context.md">Machine-readable context</a>
|
|
1758
824
|
</div>
|
|
1759
|
-
<a href="/go/install?utm_source=website&utm_medium=homepage_final&utm_campaign=install_free&cta_id=final_install_cli&cta_placement=final_cta" 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('final_install_click',{cta:'install_cli'})}catch(_){}" class="btn-pro btn-install-link" style="padding:14px 36px;font-size:16px;" title="Click to copy: npx thumbgate init">Install Free CLI</a>
|
|
1760
|
-
</div>
|
|
1761
|
-
<div style="display:flex;gap:10px;justify-content:center;flex-wrap:wrap;align-items:center;margin-top:12px;opacity:0.7;">
|
|
1762
|
-
<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>
|
|
1763
|
-
<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>
|
|
1764
|
-
<a href="#workflow-sprint-intake" class="btn-team" style="padding:8px 16px;font-size:12px;">Start Workflow Hardening Sprint</a>
|
|
1765
825
|
</div>
|
|
1766
|
-
</
|
|
1767
|
-
</section>
|
|
1768
|
-
|
|
1769
|
-
<!-- FOOTER -->
|
|
1770
|
-
<footer>
|
|
1771
|
-
<div class="container">
|
|
1772
|
-
<div class="footer-links">
|
|
1773
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
1774
|
-
<a href="https://www.npmjs.com/package/thumbgate" target="_blank" rel="noopener">npm</a>
|
|
1775
|
-
<a href="https://www.producthunt.com/products/thumbgate" target="_blank" rel="noopener">Product Hunt</a>
|
|
1776
|
-
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1777
|
-
<a href="/blog">Blog</a>
|
|
1778
|
-
</div>
|
|
1779
|
-
<span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.28.4</span>
|
|
1780
|
-
</div>
|
|
1781
|
-
</footer>
|
|
1782
|
-
|
|
1783
|
-
<!-- STICKY BOTTOM CTA -->
|
|
1784
|
-
<div class="sticky-cta" id="sticky-cta">
|
|
1785
|
-
<span class="sticky-cta-text"><strong>Pro unlocks recall, proof, exports</strong> — free CLI is capped at 2 captures/day</span>
|
|
1786
|
-
<div class="hero-install" onclick="copyInstall(this)" title="Click to copy" style="margin-bottom:0;padding:8px 16px;font-size:13px;">
|
|
1787
|
-
<span class="prompt">$</span>
|
|
1788
|
-
<span class="cmd">npx thumbgate init</span>
|
|
1789
|
-
<span class="copy-hint">copy</span>
|
|
1790
|
-
</div>
|
|
1791
|
-
<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>
|
|
1792
|
-
</div>
|
|
1793
|
-
<script>
|
|
1794
|
-
(function() {
|
|
1795
|
-
var stickyCta = document.getElementById('sticky-cta');
|
|
1796
|
-
var heroSection = document.querySelector('.hero');
|
|
1797
|
-
if (!stickyCta || !heroSection) return;
|
|
1798
|
-
var observer = new IntersectionObserver(function(entries) {
|
|
1799
|
-
entries.forEach(function(entry) {
|
|
1800
|
-
if (entry.isIntersecting) {
|
|
1801
|
-
stickyCta.classList.remove('visible');
|
|
1802
|
-
} else {
|
|
1803
|
-
stickyCta.classList.add('visible');
|
|
1804
|
-
}
|
|
1805
|
-
});
|
|
1806
|
-
}, { threshold: 0 });
|
|
1807
|
-
observer.observe(heroSection);
|
|
1808
|
-
})();
|
|
1809
|
-
</script>
|
|
1810
|
-
|
|
1811
|
-
<script src="/js/buyer-intent.js"></script>
|
|
1812
|
-
<script>
|
|
1813
|
-
function initializeBuyerIntentForms() {
|
|
1814
|
-
globalThis.ThumbGateBuyerIntent.initializeBuyerIntent({
|
|
1815
|
-
page: 'homepage',
|
|
1816
|
-
duplicateMessage: 'You are already on the list. Checkout on this device is now prefilled.',
|
|
1817
|
-
successMessage: 'Saved. We will keep checkout prefilled on this device.',
|
|
1818
|
-
});
|
|
1819
|
-
}
|
|
826
|
+
</footer>
|
|
1820
827
|
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
function
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
fetch('/v1/telemetry/ping', {
|
|
1857
|
-
method: 'POST',
|
|
1858
|
-
headers: { 'Content-Type': 'application/json' },
|
|
1859
|
-
body: body,
|
|
1860
|
-
keepalive: true,
|
|
1861
|
-
}).catch(function() {});
|
|
1862
|
-
}
|
|
1863
|
-
|
|
1864
|
-
function sendGa4Event(eventName, params) {
|
|
1865
|
-
if (!gaMeasurementId || typeof globalThis.gtag !== 'function') return;
|
|
1866
|
-
globalThis.gtag('event', eventName, params || {});
|
|
1867
|
-
}
|
|
1868
|
-
|
|
1869
|
-
function readRevenueCtaMeta(el) {
|
|
1870
|
-
var label = (el && el.textContent ? el.textContent : '').trim().substring(0, 80);
|
|
1871
|
-
var section = el && el.closest ? el.closest('section') : null;
|
|
1872
|
-
var fallbackPlacement = section ? (section.id || String(section.className || '').split(' ')[0] || 'unknown') : 'unknown';
|
|
1873
|
-
return {
|
|
1874
|
-
ctaId: (el && el.dataset && el.dataset.ctaId) || 'pro_checkout',
|
|
1875
|
-
ctaPlacement: (el && el.dataset && el.dataset.ctaPlacement) || fallbackPlacement,
|
|
1876
|
-
tier: (el && el.dataset && el.dataset.tier) || 'pro',
|
|
1877
|
-
planId: (el && el.dataset && el.dataset.planId) || 'pro',
|
|
1878
|
-
price: Number((el && el.dataset && el.dataset.price) || proPriceDollars || 19),
|
|
1879
|
-
billing: (el && el.dataset && el.dataset.billing) || 'monthly',
|
|
1880
|
-
label: label,
|
|
1881
|
-
};
|
|
1882
|
-
}
|
|
1883
|
-
|
|
1884
|
-
function trackRevenueCta(el) {
|
|
1885
|
-
var meta = readRevenueCtaMeta(el);
|
|
1886
|
-
var plausibleProps = {
|
|
1887
|
-
cta: meta.ctaId,
|
|
1888
|
-
cta_id: meta.ctaId,
|
|
1889
|
-
section: meta.ctaPlacement,
|
|
1890
|
-
tier: meta.tier,
|
|
1891
|
-
plan_id: meta.planId,
|
|
1892
|
-
price: meta.price,
|
|
1893
|
-
billing: meta.billing,
|
|
1894
|
-
label: meta.label,
|
|
1895
|
-
};
|
|
1896
|
-
if (typeof plausible === 'function') {
|
|
1897
|
-
plausible('pricing_cta_click', { props: plausibleProps });
|
|
1898
|
-
plausible('checkout_start', { props: plausibleProps });
|
|
1899
|
-
}
|
|
1900
|
-
sendFirstPartyTelemetry('cta_click', {
|
|
1901
|
-
ctaId: meta.ctaId,
|
|
1902
|
-
ctaPlacement: meta.ctaPlacement,
|
|
1903
|
-
planId: meta.planId,
|
|
1904
|
-
tier: meta.tier,
|
|
1905
|
-
price: meta.price,
|
|
1906
|
-
billing: meta.billing,
|
|
1907
|
-
label: meta.label,
|
|
1908
|
-
});
|
|
1909
|
-
sendGa4Event('begin_checkout', {
|
|
1910
|
-
currency: 'USD',
|
|
1911
|
-
value: meta.price,
|
|
1912
|
-
items: [{ item_id: 'pro_monthly', item_name: 'ThumbGate Pro Monthly' }],
|
|
1913
|
-
});
|
|
1914
|
-
}
|
|
828
|
+
<script>
|
|
829
|
+
'use strict';
|
|
830
|
+
const gaMeasurementId = '__GA_MEASUREMENT_ID__';
|
|
831
|
+
const serverVisitorId = '__SERVER_VISITOR_ID__';
|
|
832
|
+
const serverSessionId = '__SERVER_SESSION_ID__';
|
|
833
|
+
const serverAcquisitionId = '__SERVER_ACQUISITION_ID__';
|
|
834
|
+
const serverTelemetryCaptured = '__SERVER_TELEMETRY_CAPTURED__' === 'true';
|
|
835
|
+
|
|
836
|
+
window.plausible = window.plausible || function () {
|
|
837
|
+
(window.plausible.q = window.plausible.q || []).push(arguments);
|
|
838
|
+
};
|
|
839
|
+
|
|
840
|
+
function sendFirstPartyTelemetry(eventName, props) {
|
|
841
|
+
const payload = JSON.stringify({
|
|
842
|
+
event: eventName,
|
|
843
|
+
page: '/',
|
|
844
|
+
source: 'homepage',
|
|
845
|
+
visitorId: serverVisitorId || undefined,
|
|
846
|
+
sessionId: serverSessionId || undefined,
|
|
847
|
+
acquisitionId: serverAcquisitionId || undefined,
|
|
848
|
+
props: props || {},
|
|
849
|
+
});
|
|
850
|
+
try {
|
|
851
|
+
if (navigator.sendBeacon) {
|
|
852
|
+
navigator.sendBeacon('/v1/telemetry/ping', new Blob([payload], { type: 'application/json' }));
|
|
853
|
+
return;
|
|
854
|
+
}
|
|
855
|
+
fetch('/v1/telemetry/ping', {
|
|
856
|
+
method: 'POST',
|
|
857
|
+
headers: { 'Content-Type': 'application/json' },
|
|
858
|
+
body: payload,
|
|
859
|
+
keepalive: true,
|
|
860
|
+
}).catch(function () {});
|
|
861
|
+
} catch (_) {}
|
|
862
|
+
}
|
|
1915
863
|
|
|
1916
|
-
function
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
function readHidden(name) {
|
|
1920
|
-
var input = form.querySelector('input[name="' + name + '"]');
|
|
1921
|
-
return input ? input.value : null;
|
|
864
|
+
function sendGa4Event(eventName, params) {
|
|
865
|
+
if (!gaMeasurementId || typeof window.gtag !== 'function') return;
|
|
866
|
+
window.gtag('event', eventName, params || {});
|
|
1922
867
|
}
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
});
|
|
1931
|
-
});
|
|
1932
|
-
form.addEventListener('submit', function() {
|
|
1933
|
-
sendFirstPartyTelemetry('workflow_sprint_intake_submit_attempted', {
|
|
1934
|
-
ctaId: readHidden('ctaId'),
|
|
1935
|
-
ctaPlacement: readHidden('ctaPlacement'),
|
|
1936
|
-
planId: readHidden('planId') || 'team',
|
|
1937
|
-
});
|
|
1938
|
-
sendGa4Event('generate_lead', {
|
|
868
|
+
|
|
869
|
+
function captureOfferInterest(ctaId, placement) {
|
|
870
|
+
const props = {
|
|
871
|
+
ctaId: ctaId || 'homepage_diagnostic_buy',
|
|
872
|
+
ctaPlacement: placement || 'homepage',
|
|
873
|
+
planId: 'sprint_diagnostic',
|
|
874
|
+
value: 499,
|
|
1939
875
|
currency: 'USD',
|
|
1940
|
-
|
|
1941
|
-
|
|
876
|
+
};
|
|
877
|
+
window.plausible('diagnostic_offer_click', { props: props });
|
|
878
|
+
sendFirstPartyTelemetry('cta_click', props);
|
|
879
|
+
try {
|
|
880
|
+
if (window.posthog && typeof window.posthog.capture === 'function') {
|
|
881
|
+
window.posthog.capture('diagnostic_offer_click', props);
|
|
882
|
+
}
|
|
883
|
+
} catch (_) {}
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
document.querySelectorAll('[data-offer-link]').forEach(function (link) {
|
|
887
|
+
link.addEventListener('click', function () {
|
|
888
|
+
captureOfferInterest(link.dataset.ctaId, 'page_anchor');
|
|
1942
889
|
});
|
|
1943
890
|
});
|
|
1944
|
-
});
|
|
1945
|
-
}
|
|
1946
|
-
|
|
1947
|
-
function resolvePricingClickTier(el) {
|
|
1948
|
-
if (el.classList.contains('btn-install-hero')) return 'install';
|
|
1949
|
-
if (el.classList.contains('btn-install-link')) return 'install';
|
|
1950
|
-
if (el.classList.contains('btn-gpt-page')) return 'chatgpt_gpt';
|
|
1951
|
-
if (el.classList.contains('btn-pro')) return 'pro';
|
|
1952
|
-
if (el.classList.contains('btn-pro-page')) return 'pro_page';
|
|
1953
|
-
if (el.classList.contains('btn-team')) return 'team';
|
|
1954
|
-
if (el.classList.contains('btn-free')) return 'free';
|
|
1955
|
-
if (el.classList.contains('btn-demo-link')) return 'demo';
|
|
1956
|
-
if (el.classList.contains('nav-cta')) return 'team';
|
|
1957
|
-
return 'nav';
|
|
1958
|
-
}
|
|
1959
891
|
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
892
|
+
const checkoutForm = document.querySelector('[data-primary-checkout]');
|
|
893
|
+
if (checkoutForm) {
|
|
894
|
+
checkoutForm.addEventListener('submit', function () {
|
|
895
|
+
const props = {
|
|
896
|
+
ctaId: 'homepage_diagnostic_buy',
|
|
897
|
+
ctaPlacement: 'hero',
|
|
898
|
+
planId: 'sprint_diagnostic',
|
|
899
|
+
value: 499,
|
|
900
|
+
currency: 'USD',
|
|
901
|
+
};
|
|
902
|
+
window.plausible('checkout_start', { props: props });
|
|
903
|
+
sendGa4Event('begin_checkout', props);
|
|
904
|
+
sendFirstPartyTelemetry('checkout_start', props);
|
|
905
|
+
try {
|
|
906
|
+
if (window.posthog && typeof window.posthog.capture === 'function') {
|
|
907
|
+
window.posthog.capture('checkout_start', props);
|
|
908
|
+
}
|
|
909
|
+
} catch (_) {}
|
|
910
|
+
});
|
|
911
|
+
}
|
|
1977
912
|
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
var sectionId = section ? (section.id || String(section.className || '').split(' ')[0] || 'unknown') : 'unknown';
|
|
1984
|
-
var firstPartyEventName = eventName === 'checkout_start' ? 'cta_click' : eventName;
|
|
1985
|
-
sendFirstPartyTelemetry(firstPartyEventName, Object.assign({}, props || {}, {
|
|
1986
|
-
ctaId: (props && (props.ctaId || props.cta)) || eventName,
|
|
1987
|
-
ctaPlacement: (props && props.ctaPlacement) || sectionId,
|
|
1988
|
-
planId: (props && props.planId) || (props && props.tier) || null,
|
|
1989
|
-
}));
|
|
913
|
+
document.querySelectorAll('.faq-q').forEach(function (button) {
|
|
914
|
+
button.addEventListener('click', function () {
|
|
915
|
+
const item = button.closest('.faq-item');
|
|
916
|
+
const open = item.classList.toggle('open');
|
|
917
|
+
button.setAttribute('aria-expanded', String(open));
|
|
1990
918
|
});
|
|
1991
919
|
});
|
|
1992
|
-
}
|
|
1993
|
-
|
|
1994
|
-
function toggleFaq(el) {
|
|
1995
|
-
var item = el.parentElement;
|
|
1996
|
-
var open = item.classList.toggle('open');
|
|
1997
|
-
el.setAttribute('aria-expanded', open ? 'true' : 'false');
|
|
1998
|
-
}
|
|
1999
|
-
|
|
2000
|
-
function handleFaqKeydown(event) {
|
|
2001
|
-
if (event.key !== 'Enter' && event.key !== ' ') return;
|
|
2002
|
-
event.preventDefault();
|
|
2003
|
-
toggleFaq(event.currentTarget);
|
|
2004
|
-
}
|
|
2005
920
|
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
|
|
2014
|
-
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
921
|
+
// Interactive product loop — under-the-hood demos (real ThumbGate paths)
|
|
922
|
+
(function initLoopDemos() {
|
|
923
|
+
const panel = document.getElementById('loop-panel');
|
|
924
|
+
const tabs = Array.prototype.slice.call(document.querySelectorAll('[data-loop-step]'));
|
|
925
|
+
if (!panel || !tabs.length) return;
|
|
926
|
+
|
|
927
|
+
const titleEl = document.getElementById('loop-panel-title');
|
|
928
|
+
const kickerEl = document.getElementById('loop-panel-kicker');
|
|
929
|
+
const termTitle = document.getElementById('loop-term-title');
|
|
930
|
+
const termMode = document.getElementById('loop-term-mode');
|
|
931
|
+
const termBody = document.getElementById('loop-term-body');
|
|
932
|
+
const factsEl = document.getElementById('loop-facts');
|
|
933
|
+
const honestEl = document.getElementById('loop-honest');
|
|
934
|
+
const modeRow = document.getElementById('loop-mode-row');
|
|
935
|
+
const copyBtn = document.getElementById('loop-copy-cmd');
|
|
936
|
+
const closeBtn = document.getElementById('loop-panel-close');
|
|
937
|
+
let activeStep = null;
|
|
938
|
+
let gateMode = 'default';
|
|
939
|
+
let copyText = '';
|
|
940
|
+
|
|
941
|
+
const demos = {
|
|
942
|
+
1: {
|
|
943
|
+
title: 'Capture feedback',
|
|
944
|
+
kicker: 'Step 1 · capture',
|
|
945
|
+
termTitle: 'thumbgate · capture-feedback',
|
|
946
|
+
termMode: 'local JSONL',
|
|
947
|
+
body:
|
|
948
|
+
'$ node .claude/scripts/feedback/capture-feedback.js \\\n' +
|
|
949
|
+
' --feedback=down \\\n' +
|
|
950
|
+
' --context="git push --force origin main without tests" \\\n' +
|
|
951
|
+
' --what-went-wrong="force-push skipped CI" \\\n' +
|
|
952
|
+
' --what-to-change="block force-push to main"\n\n' +
|
|
953
|
+
'<span class="g">→ written</span> .claude/memory/feedback/feedback-log.jsonl\n' +
|
|
954
|
+
'<span class="y">→ bare 👎</span> no context → <span class="r">no-action</span> (not promoted)\n' +
|
|
955
|
+
'<span class="c">→ schema</span> requires actionable context before storage',
|
|
956
|
+
facts: [
|
|
957
|
+
'Explicit thumbs-up/down with context becomes a feedback record',
|
|
958
|
+
'Bare thumbs-down without context is rejected (no-action)',
|
|
959
|
+
'Capture paths: CLI, hooks, MCP — not silent model training',
|
|
960
|
+
],
|
|
961
|
+
honest: 'A vague 👎 does not invent a rule. Context is required before anything is stored or promoted.',
|
|
962
|
+
cmd: 'node .claude/scripts/feedback/capture-feedback.js --feedback=down --context="force-push without tests" --what-went-wrong="skipped CI" --what-to-change="block force-push to main"',
|
|
963
|
+
showModes: false,
|
|
964
|
+
},
|
|
965
|
+
2: {
|
|
966
|
+
title: 'Remember locally',
|
|
967
|
+
kicker: 'Step 2 · local memory',
|
|
968
|
+
termTitle: 'thumbgate · lesson store',
|
|
969
|
+
termMode: 'your machine',
|
|
970
|
+
body:
|
|
971
|
+
'lesson {\n' +
|
|
972
|
+
' signal: "negative",\n' +
|
|
973
|
+
' context: "force-push to main without tests",\n' +
|
|
974
|
+
' path: "local feedback log / lesson DB",\n' +
|
|
975
|
+
' model_weights: <span class="g">unchanged</span> // always\n' +
|
|
976
|
+
'}\n\n' +
|
|
977
|
+
'<span class="c">survives</span> session restarts + model swaps\n' +
|
|
978
|
+
'<span class="c">owned by</span> you — local files, not a black-box cloud brain',
|
|
979
|
+
facts: [
|
|
980
|
+
'Lessons live in local paths you control',
|
|
981
|
+
'Survives sessions and model changes',
|
|
982
|
+
'Does not fine-tune or rewrite model weights',
|
|
983
|
+
],
|
|
984
|
+
honest: 'This is a control-layer memory, not “the AI remembered forever.” Your files; your review.',
|
|
985
|
+
cmd: 'ls .claude/memory/feedback/',
|
|
986
|
+
showModes: false,
|
|
987
|
+
},
|
|
988
|
+
3: {
|
|
989
|
+
title: 'Rank and refine',
|
|
990
|
+
kicker: 'Step 3 · promote + expire',
|
|
991
|
+
termTitle: 'thumbgate · auto-promote-gates',
|
|
992
|
+
termMode: '30d window · 90d TTL',
|
|
993
|
+
body:
|
|
994
|
+
'recurring negatives (same pattern, 30 days)\n' +
|
|
995
|
+
' count 1 → auto-promote <span class="y">warn</span> gate\n' +
|
|
996
|
+
' count 3 → candidate <span class="r">block</span> (may stay warn if regression check fails)\n\n' +
|
|
997
|
+
'auto-promoted-gates.json\n' +
|
|
998
|
+
' action: warn | block\n' +
|
|
999
|
+
' expiresAt: +90 days (refreshed when the gate keeps firing)\n' +
|
|
1000
|
+
' source: auto-promote\n\n' +
|
|
1001
|
+
'<span class="c">retrieve/rerank</span> relevant lessons for the proposed action',
|
|
1002
|
+
facts: [
|
|
1003
|
+
'1 matching negative → warning gate (auto-promote)',
|
|
1004
|
+
'3 in 30 days → hard-block candidate (with regression quarantine)',
|
|
1005
|
+
'Stale auto-promoted gates expire ~90 days unless they keep firing',
|
|
1006
|
+
],
|
|
1007
|
+
honest: 'Promotion can create warn gates without a human click. Review auto-promoted-gates.json; force-promote is permanent only when you say so.',
|
|
1008
|
+
cmd: 'npm run feedback:rules',
|
|
1009
|
+
showModes: false,
|
|
1010
|
+
},
|
|
1011
|
+
4: {
|
|
1012
|
+
title: 'Gate the next action',
|
|
1013
|
+
kicker: 'Step 4 · PreToolUse',
|
|
1014
|
+
termTitle: 'thumbgate · pretooluse',
|
|
1015
|
+
termMode: 'default',
|
|
1016
|
+
bodyDefault:
|
|
1017
|
+
'proposed git push --force origin main\n' +
|
|
1018
|
+
'hook PreToolUse → gates-engine\n' +
|
|
1019
|
+
'mode <span class="y">warn-by-default</span>\n' +
|
|
1020
|
+
'decision <span class="y">WARN</span>\n' +
|
|
1021
|
+
'note logged + flagged; tool may still proceed\n\n' +
|
|
1022
|
+
'secret exfil / gate-bypass floors → <span class="r">DENY</span> regardless',
|
|
1023
|
+
bodyStrict:
|
|
1024
|
+
'proposed git push --force origin main\n' +
|
|
1025
|
+
'hook PreToolUse → gates-engine\n' +
|
|
1026
|
+
'mode <span class="c">THUMBGATE_STRICT_ENFORCEMENT=1</span>\n' +
|
|
1027
|
+
'decision <span class="r">DENY</span>\n' +
|
|
1028
|
+
'rule protect-main (or matching high-risk gate)\n' +
|
|
1029
|
+
'next blocked before execution',
|
|
1030
|
+
facts: [
|
|
1031
|
+
'PreToolUse hooks check Bash / Edit / Write before the tool runs',
|
|
1032
|
+
'Outcomes: ALLOW, WARN, or DENY',
|
|
1033
|
+
'Default install is warn + audit; hard deny needs strict mode (plus secret floors)',
|
|
1034
|
+
],
|
|
1035
|
+
honest: 'Default is not “block everything.” Default warns. Strict mode denies matching high-risk actions. Secrets/exfil still hard-deny.',
|
|
1036
|
+
cmd: 'export THUMBGATE_STRICT_ENFORCEMENT=1 # opt into hard deny',
|
|
1037
|
+
showModes: true,
|
|
1038
|
+
},
|
|
1039
|
+
};
|
|
1040
|
+
|
|
1041
|
+
function setOpen(step) {
|
|
1042
|
+
activeStep = step;
|
|
1043
|
+
tabs.forEach(function (tab) {
|
|
1044
|
+
const on = String(tab.getAttribute('data-loop-step')) === String(step);
|
|
1045
|
+
tab.classList.toggle('is-active', on);
|
|
1046
|
+
tab.setAttribute('aria-selected', String(on));
|
|
1047
|
+
tab.setAttribute('aria-expanded', String(on));
|
|
1048
|
+
const hint = tab.querySelector('.loop-hint');
|
|
1049
|
+
if (hint) hint.textContent = on ? 'Showing under the hood ↑' : 'Under the hood ↓';
|
|
1050
|
+
});
|
|
1051
|
+
if (!step) {
|
|
1052
|
+
panel.classList.remove('is-open');
|
|
1053
|
+
panel.hidden = true;
|
|
1054
|
+
return;
|
|
1055
|
+
}
|
|
1056
|
+
const demo = demos[step];
|
|
1057
|
+
if (!demo) return;
|
|
1058
|
+
titleEl.textContent = demo.title;
|
|
1059
|
+
kickerEl.textContent = demo.kicker;
|
|
1060
|
+
termTitle.textContent = demo.termTitle;
|
|
1061
|
+
panel.setAttribute('aria-labelledby', 'loop-tab-' + step);
|
|
1062
|
+
factsEl.innerHTML = demo.facts.map(function (f) { return '<li>' + f + '</li>'; }).join('');
|
|
1063
|
+
honestEl.textContent = demo.honest;
|
|
1064
|
+
copyText = demo.cmd;
|
|
1065
|
+
modeRow.hidden = !demo.showModes;
|
|
1066
|
+
if (demo.showModes) {
|
|
1067
|
+
renderGateBody();
|
|
1068
|
+
} else {
|
|
1069
|
+
termMode.textContent = demo.termMode;
|
|
1070
|
+
termBody.innerHTML = demo.body;
|
|
1071
|
+
}
|
|
1072
|
+
panel.hidden = false;
|
|
1073
|
+
panel.classList.add('is-open');
|
|
1074
|
+
try {
|
|
1075
|
+
sendFirstPartyTelemetry('loop_demo_open', { step: String(step), landingPath: '/' });
|
|
1076
|
+
window.plausible && window.plausible('loop_demo_open', { props: { step: String(step) } });
|
|
1077
|
+
} catch (_) {}
|
|
2035
1078
|
}
|
|
2036
|
-
});
|
|
2037
|
-
});
|
|
2038
1079
|
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
/* Scroll depth (25%, 50%, 75%, 100%) */
|
|
2048
|
-
var scrollMarks = { 25: false, 50: false, 75: false, 100: false };
|
|
2049
|
-
window.addEventListener('scroll', function() {
|
|
2050
|
-
var docHeight = document.documentElement.scrollHeight - window.innerHeight;
|
|
2051
|
-
if (docHeight <= 0) return;
|
|
2052
|
-
var pct = Math.round((window.scrollY / docHeight) * 100);
|
|
2053
|
-
[25, 50, 75, 100].forEach(function(mark) {
|
|
2054
|
-
if (pct >= mark && !scrollMarks[mark]) {
|
|
2055
|
-
scrollMarks[mark] = true;
|
|
2056
|
-
if (typeof plausible === 'function') plausible('scroll_depth', { props: { depth: mark + '%' } });
|
|
1080
|
+
function renderGateBody() {
|
|
1081
|
+
const demo = demos[4];
|
|
1082
|
+
const strict = gateMode === 'strict';
|
|
1083
|
+
termMode.textContent = strict ? 'strict' : 'default';
|
|
1084
|
+
termBody.innerHTML = strict ? demo.bodyStrict : demo.bodyDefault;
|
|
1085
|
+
modeRow.querySelectorAll('button').forEach(function (btn) {
|
|
1086
|
+
btn.classList.toggle('is-on', btn.getAttribute('data-gate-mode') === gateMode);
|
|
1087
|
+
});
|
|
2057
1088
|
}
|
|
2058
|
-
});
|
|
2059
|
-
});
|
|
2060
1089
|
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
1090
|
+
function activateTab(tab) {
|
|
1091
|
+
const step = tab.getAttribute('data-loop-step');
|
|
1092
|
+
if (activeStep === step) {
|
|
1093
|
+
setOpen(null);
|
|
1094
|
+
} else {
|
|
1095
|
+
setOpen(step);
|
|
1096
|
+
panel.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
2066
1099
|
|
|
2067
|
-
|
|
2068
|
-
|
|
1100
|
+
tabs.forEach(function (tab) {
|
|
1101
|
+
tab.addEventListener('click', function () {
|
|
1102
|
+
activateTab(tab);
|
|
1103
|
+
});
|
|
1104
|
+
tab.addEventListener('keydown', function (event) {
|
|
1105
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
1106
|
+
event.preventDefault();
|
|
1107
|
+
activateTab(tab);
|
|
1108
|
+
}
|
|
1109
|
+
});
|
|
1110
|
+
});
|
|
2069
1111
|
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
sections: [
|
|
2077
|
-
{ selector: '.hero', sectionId: 'hero', sectionLabel: 'Hero' },
|
|
2078
|
-
{ selector: '.proof-bar', sectionId: 'proof_bar', sectionLabel: 'Proof Bar' },
|
|
2079
|
-
{ selector: '#how-it-works', sectionId: 'how_it_works', sectionLabel: 'How It Works' },
|
|
2080
|
-
{ selector: '#pricing', sectionId: 'pricing', sectionLabel: 'Pricing' },
|
|
2081
|
-
{ selector: '#workflow-sprint-intake', sectionId: 'workflow_sprint_intake', sectionLabel: 'Workflow Sprint Intake' },
|
|
2082
|
-
{ selector: '#faq', sectionId: 'faq', sectionLabel: 'FAQ' }
|
|
2083
|
-
],
|
|
2084
|
-
ctaImpressions: [
|
|
2085
|
-
{ selector: '#pro-checkout-link', ctaId: 'pricing_pro_checkout', ctaPlacement: 'pricing', planId: 'pro' },
|
|
2086
|
-
{ selector: '.price-card.pro .btn-pro', ctaId: 'pricing_pro_monthly', ctaPlacement: 'pricing', planId: 'pro' },
|
|
2087
|
-
{ selector: '.nav-cta[data-revenue-cta]', ctaId: 'nav_start_pro', ctaPlacement: 'nav', planId: 'pro' },
|
|
2088
|
-
{ selector: '.hero-actions .hero-pro-primary', ctaId: 'hero_start_pro', ctaPlacement: 'hero', planId: 'pro' },
|
|
2089
|
-
{ selector: '.hero-actions .btn-pro-page:not(.hero-pro-primary)', ctaId: 'hero_workflow_intake', ctaPlacement: 'hero', planId: 'team' },
|
|
2090
|
-
{ selector: '.hero-actions .hero-pro:not(.hero-pro-primary)', ctaId: 'hero_workflow_sprint_recovery_intake', ctaPlacement: 'hero', planId: 'team' },
|
|
2091
|
-
{ selector: '.sticky-cta .btn-pro', ctaId: 'sticky_go_pro', ctaPlacement: 'sticky_cta', planId: 'pro' },
|
|
2092
|
-
{ selector: '.price-card.team .btn-team', ctaId: 'team_workflow_sprint', ctaPlacement: 'pricing', planId: 'team' },
|
|
2093
|
-
{ selector: '#team-pilot-intake-form', ctaId: 'workflow_sprint_intake', ctaPlacement: 'team_visible_intake', planId: 'team' }
|
|
2094
|
-
]
|
|
2095
|
-
});
|
|
2096
|
-
})();
|
|
2097
|
-
</script>
|
|
2098
|
-
<script>
|
|
2099
|
-
initializeBuyerIntentForms();
|
|
2100
|
-
initializeTeamIntakeTelemetry();
|
|
1112
|
+
modeRow.querySelectorAll('button').forEach(function (btn) {
|
|
1113
|
+
btn.addEventListener('click', function () {
|
|
1114
|
+
gateMode = btn.getAttribute('data-gate-mode') || 'default';
|
|
1115
|
+
renderGateBody();
|
|
1116
|
+
});
|
|
1117
|
+
});
|
|
2101
1118
|
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
email.style.border = '1px solid #333';
|
|
2115
|
-
buyerIntent.storeBuyerEmail(normalizedEmail);
|
|
2116
|
-
buyerIntent.hydrateBuyerEmailInputs(normalizedEmail);
|
|
2117
|
-
buyerIntent.applyBuyerEmailToCheckoutLinks(normalizedEmail);
|
|
2118
|
-
if (globalThis.buyerJourney && typeof globalThis.buyerJourney.markEmailCaptured === 'function') {
|
|
2119
|
-
globalThis.buyerJourney.markEmailCaptured();
|
|
2120
|
-
}
|
|
2121
|
-
var checkoutUrl = checkoutLink ? checkoutLink.href : '/checkout/pro';
|
|
2122
|
-
if (typeof plausible === 'function') {
|
|
2123
|
-
plausible('pro_email_captured', { props: { page: 'homepage', intent: 'checkout' } });
|
|
2124
|
-
}
|
|
2125
|
-
try {
|
|
2126
|
-
await buyerIntent.submitNewsletterSignup(normalizedEmail);
|
|
2127
|
-
} catch (_err) {
|
|
2128
|
-
// Continue to checkout even if lead capture fails.
|
|
2129
|
-
}
|
|
2130
|
-
globalThis.location.assign(checkoutUrl);
|
|
2131
|
-
}
|
|
1119
|
+
closeBtn.addEventListener('click', function () { setOpen(null); });
|
|
1120
|
+
|
|
1121
|
+
copyBtn.addEventListener('click', function () {
|
|
1122
|
+
const text = copyText || '';
|
|
1123
|
+
if (!text) return;
|
|
1124
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
1125
|
+
navigator.clipboard.writeText(text).then(function () {
|
|
1126
|
+
copyBtn.textContent = 'Copied';
|
|
1127
|
+
setTimeout(function () { copyBtn.textContent = 'Copy command'; }, 1400);
|
|
1128
|
+
}).catch(function () {});
|
|
1129
|
+
}
|
|
1130
|
+
});
|
|
2132
1131
|
|
|
2133
|
-
//
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
el = el.parentElement;
|
|
2148
|
-
}
|
|
2149
|
-
target.scrollIntoView({ behavior: 'auto', block: 'start' });
|
|
2150
|
-
}
|
|
2151
|
-
globalThis.addEventListener('DOMContentLoaded', openDetailsForHash);
|
|
2152
|
-
globalThis.addEventListener('hashchange', openDetailsForHash);
|
|
2153
|
-
</script>
|
|
1132
|
+
// Deep-link: #how-it-works?step=4 or #loop-step-3
|
|
1133
|
+
try {
|
|
1134
|
+
const params = new URLSearchParams(window.location.search);
|
|
1135
|
+
const stepParam = params.get('step') || (window.location.hash.match(/loop-step-(\d)/) || [])[1];
|
|
1136
|
+
if (stepParam && demos[stepParam]) {
|
|
1137
|
+
setOpen(stepParam);
|
|
1138
|
+
}
|
|
1139
|
+
} catch (_) {}
|
|
1140
|
+
})();
|
|
1141
|
+
|
|
1142
|
+
if (!serverTelemetryCaptured) {
|
|
1143
|
+
sendFirstPartyTelemetry('page_view', { landingPath: '/' });
|
|
1144
|
+
}
|
|
1145
|
+
</script>
|
|
2154
1146
|
</body>
|
|
2155
1147
|
</html>
|