thumbgate 1.14.1 → 1.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +6 -6
- package/.claude-plugin/plugin.json +3 -3
- package/.well-known/llms.txt +5 -5
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +60 -35
- package/adapters/chatgpt/openapi.yaml +118 -2
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +217 -84
- package/adapters/opencode/opencode.json +1 -1
- package/bench/prompt-eval-suite.json +5 -1
- package/bin/cli.js +211 -8
- package/config/enforcement.json +59 -7
- package/config/evals/agent-safety-eval.json +338 -22
- package/config/gates/default.json +33 -0
- package/config/gates/routine.json +43 -0
- package/config/github-about.json +3 -3
- package/config/mcp-allowlists.json +4 -0
- package/config/merge-quality-checks.json +2 -1
- package/config/model-candidates.json +131 -0
- package/openapi/openapi.yaml +118 -2
- package/package.json +70 -51
- package/public/blog.html +7 -7
- package/public/codex-plugin.html +13 -7
- package/public/compare.html +29 -23
- package/public/dashboard.html +105 -12
- package/public/guide.html +28 -28
- package/public/index.html +233 -97
- package/public/learn.html +87 -20
- package/public/lessons.html +26 -2
- package/public/numbers.html +271 -0
- package/public/pro.html +89 -19
- package/scripts/agent-audit-trace.js +55 -0
- package/scripts/agent-memory-lifecycle.js +96 -0
- package/scripts/agent-readiness-plan.js +118 -0
- package/scripts/agentic-data-pipeline.js +21 -1
- package/scripts/agents-sdk-sandbox-plan.js +57 -0
- package/scripts/ai-org-governance.js +98 -0
- package/scripts/ai-search-distribution.js +43 -0
- package/scripts/artifact-agent-plan.js +81 -0
- package/scripts/billing.js +27 -8
- package/scripts/cli-feedback.js +2 -1
- package/scripts/cli-schema.js +60 -5
- package/scripts/code-mode-mcp-plan.js +71 -0
- package/scripts/commercial-offer.js +1 -1
- package/scripts/context-engine.js +1 -2
- package/scripts/context-manager.js +4 -1
- package/scripts/contextfs.js +214 -32
- package/scripts/dashboard-render-spec.js +1 -1
- package/scripts/dashboard.js +275 -9
- package/scripts/decision-journal.js +13 -3
- package/scripts/document-workflow-governance.js +62 -0
- package/scripts/enterprise-agent-rollout.js +34 -0
- package/scripts/experience-replay-governance.js +69 -0
- package/scripts/export-hf-dataset.js +1 -1
- package/scripts/feedback-loop.js +141 -9
- package/scripts/feedback-to-rules.js +17 -23
- package/scripts/gates-engine.js +4 -6
- package/scripts/growth-campaigns.js +49 -0
- package/scripts/harness-selector.js +145 -1
- package/scripts/hybrid-supervisor-agent.js +64 -0
- package/scripts/inference-cache-policy.js +72 -0
- package/scripts/inference-economics.js +53 -0
- package/scripts/internal-agent-bootstrap.js +12 -2
- package/scripts/knowledge-layer-plan.js +108 -0
- package/scripts/lesson-canonical.js +181 -0
- package/scripts/lesson-db.js +71 -10
- package/scripts/lesson-inference.js +183 -44
- package/scripts/lesson-search.js +4 -1
- package/scripts/lesson-synthesis.js +23 -2
- package/scripts/llm-client.js +157 -26
- package/scripts/mailer/resend-mailer.js +112 -1
- package/scripts/mcp-transport-strategy.js +66 -0
- package/scripts/memory-store-governance.js +60 -0
- package/scripts/meta-agent-loop.js +7 -13
- package/scripts/model-access-eligibility.js +38 -0
- package/scripts/model-migration-readiness.js +55 -0
- package/scripts/native-messaging-audit.js +514 -0
- package/scripts/operational-integrity.js +96 -3
- package/scripts/otel-declarative-config.js +56 -0
- package/scripts/perplexity-client.js +1 -1
- package/scripts/post-training-governance.js +34 -0
- package/scripts/pr-manager.js +47 -7
- package/scripts/private-core-boundary.js +72 -0
- package/scripts/production-agent-readiness.js +40 -0
- package/scripts/profile-router.js +16 -1
- package/scripts/prompt-eval.js +564 -32
- package/scripts/prompt-programs.js +93 -0
- package/scripts/provider-action-normalizer.js +585 -0
- package/scripts/rule-validator.js +285 -0
- package/scripts/scaling-law-claims.js +60 -0
- package/scripts/security-scanner.js +1 -1
- package/scripts/self-distill-agent.js +7 -32
- package/scripts/seo-gsd.js +400 -43
- package/scripts/skill-rag-router.js +53 -0
- package/scripts/spec-gate.js +1 -1
- package/scripts/student-consistent-training.js +73 -0
- package/scripts/synthetic-data-provenance.js +98 -0
- package/scripts/task-context-result.js +81 -0
- package/scripts/telemetry-analytics.js +149 -0
- package/scripts/thompson-sampling.js +2 -2
- package/scripts/token-savings.js +7 -6
- package/scripts/token-tco.js +46 -0
- package/scripts/tool-registry.js +75 -3
- package/scripts/verification-loop.js +10 -1
- package/scripts/verifier-scoring.js +71 -0
- package/scripts/workflow-sentinel.js +284 -28
- package/scripts/workspace-agent-routines.js +118 -0
- package/skills/thumbgate/SKILL.md +1 -1
- package/src/api/server.js +434 -120
- package/.claude-plugin/README.md +0 -170
- package/adapters/README.md +0 -12
- package/scripts/analytics-report.js +0 -328
- package/scripts/autonomous-workflow.js +0 -377
- package/scripts/billing-setup.js +0 -109
- package/scripts/creator-campaigns.js +0 -239
- package/scripts/cross-encoder-reranker.js +0 -235
- package/scripts/daemon-manager.js +0 -108
- package/scripts/decision-trace.js +0 -354
- package/scripts/delegation-runtime.js +0 -896
- package/scripts/dispatch-brief.js +0 -159
- package/scripts/distribution-surfaces.js +0 -110
- package/scripts/feedback-history-distiller.js +0 -382
- package/scripts/funnel-analytics.js +0 -35
- package/scripts/history-distiller.js +0 -200
- package/scripts/hosted-job-launcher.js +0 -256
- package/scripts/intent-router.js +0 -392
- package/scripts/lesson-reranker.js +0 -263
- package/scripts/lesson-retrieval.js +0 -148
- package/scripts/managed-lesson-agent.js +0 -183
- package/scripts/operational-dashboard.js +0 -103
- package/scripts/operational-summary.js +0 -129
- package/scripts/operator-artifacts.js +0 -608
- package/scripts/optimize-context.js +0 -17
- package/scripts/org-dashboard.js +0 -206
- package/scripts/partner-orchestration.js +0 -146
- package/scripts/predictive-insights.js +0 -356
- package/scripts/pulse.js +0 -80
- package/scripts/reflector-agent.js +0 -221
- package/scripts/sales-pipeline.js +0 -681
- package/scripts/session-episode-store.js +0 -329
- package/scripts/session-health-sensor.js +0 -242
- package/scripts/session-report.js +0 -120
- package/scripts/swarm-coordinator.js +0 -81
- package/scripts/tool-kpi-tracker.js +0 -12
- package/scripts/webhook-delivery.js +0 -62
- package/scripts/workflow-sprint-intake.js +0 -475
- package/skills/agent-memory/SKILL.md +0 -97
- package/skills/solve-architecture-autonomy/SKILL.md +0 -17
- package/skills/solve-architecture-autonomy/tool.js +0 -33
- package/skills/thumbgate-feedback/SKILL.md +0 -49
package/public/learn.html
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Learn — AI Agent Safety, Pre-Action
|
|
6
|
+
<title>Learn — AI Agent Safety, Pre-Action Checks, and Vibe Coding Guardrails</title>
|
|
7
7
|
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
|
-
<meta name="description" content="Practical guides for stopping AI coding agent mistakes. Learn about pre-action
|
|
9
|
-
<meta name="keywords" content="AI agent safety, pre-action
|
|
8
|
+
<meta name="description" content="Practical guides for stopping AI coding agent mistakes. Learn about pre-action checks, MCP guardrails, feedback-driven enforcement, and vibe coding safety for Claude Code, Cursor, Codex, and more.">
|
|
9
|
+
<meta name="keywords" content="AI agent safety, pre-action checks, vibe coding guardrails, Claude Code mistakes, Cursor agent memory, MCP server hooks, AI coding agent feedback, ThumbGate guides">
|
|
10
10
|
<meta property="og:title" content="Learn — AI Agent Safety Guides by ThumbGate">
|
|
11
|
-
<meta property="og:description" content="Practical guides for stopping AI coding agent mistakes with pre-action
|
|
11
|
+
<meta property="og:description" content="Practical guides for stopping AI coding agent mistakes with pre-action checks and feedback-driven enforcement.">
|
|
12
12
|
<meta property="og:type" content="website">
|
|
13
13
|
<meta property="og:url" content="https://thumbgate-production.up.railway.app/learn">
|
|
14
14
|
<link rel="canonical" href="https://thumbgate-production.up.railway.app/learn">
|
|
@@ -20,8 +20,18 @@
|
|
|
20
20
|
"@context": "https://schema.org",
|
|
21
21
|
"@type": "CollectionPage",
|
|
22
22
|
"name": "ThumbGate Learning Hub",
|
|
23
|
-
"description": "Practical guides for AI coding agent safety, pre-action
|
|
23
|
+
"description": "Practical guides for AI coding agent safety, pre-action checks, and vibe coding guardrails.",
|
|
24
24
|
"url": "https://thumbgate-production.up.railway.app/learn",
|
|
25
|
+
"dateModified": "2026-04-20",
|
|
26
|
+
"author": {
|
|
27
|
+
"@type": "Person",
|
|
28
|
+
"name": "Igor Ganapolsky",
|
|
29
|
+
"url": "https://github.com/IgorGanapolsky",
|
|
30
|
+
"sameAs": [
|
|
31
|
+
"https://github.com/IgorGanapolsky",
|
|
32
|
+
"https://www.linkedin.com/in/igorganapolsky"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
25
35
|
"publisher": {
|
|
26
36
|
"@type": "Organization",
|
|
27
37
|
"name": "ThumbGate",
|
|
@@ -45,8 +55,8 @@
|
|
|
45
55
|
{
|
|
46
56
|
"@type": "ListItem",
|
|
47
57
|
"position": 3,
|
|
48
|
-
"url": "https://thumbgate-production.up.railway.app/learn/mcp-pre-action-
|
|
49
|
-
"name": "MCP Pre-Action
|
|
58
|
+
"url": "https://thumbgate-production.up.railway.app/learn/mcp-pre-action-checks-explained",
|
|
59
|
+
"name": "MCP Pre-Action Checks Explained"
|
|
50
60
|
},
|
|
51
61
|
{
|
|
52
62
|
"@type": "ListItem",
|
|
@@ -63,26 +73,50 @@
|
|
|
63
73
|
{
|
|
64
74
|
"@type": "ListItem",
|
|
65
75
|
"position": 6,
|
|
66
|
-
"url": "https://thumbgate
|
|
76
|
+
"url": "https://thumbgate.ai/guides/stop-repeated-ai-agent-mistakes",
|
|
67
77
|
"name": "How to Stop AI Coding Agents From Repeating Mistakes"
|
|
68
78
|
},
|
|
69
79
|
{
|
|
70
80
|
"@type": "ListItem",
|
|
71
81
|
"position": 7,
|
|
72
|
-
"url": "https://thumbgate
|
|
82
|
+
"url": "https://thumbgate.ai/guides/cursor-agent-guardrails",
|
|
73
83
|
"name": "Cursor Guardrails That Block Repeated Mistakes"
|
|
74
84
|
},
|
|
75
85
|
{
|
|
76
86
|
"@type": "ListItem",
|
|
77
87
|
"position": 8,
|
|
78
|
-
"url": "https://thumbgate
|
|
88
|
+
"url": "https://thumbgate.ai/guides/codex-cli-guardrails",
|
|
79
89
|
"name": "Codex CLI Guardrails That Actually Enforce"
|
|
80
90
|
},
|
|
81
91
|
{
|
|
82
92
|
"@type": "ListItem",
|
|
83
93
|
"position": 9,
|
|
84
|
-
"url": "https://thumbgate
|
|
94
|
+
"url": "https://thumbgate.ai/guides/gemini-cli-feedback-memory",
|
|
85
95
|
"name": "Gemini CLI Feedback Memory That Leads to Enforcement"
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"@type": "ListItem",
|
|
99
|
+
"position": 10,
|
|
100
|
+
"url": "https://thumbgate.ai/guides/browser-automation-safety",
|
|
101
|
+
"name": "Browser Automation Safety for AI Agents"
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"@type": "ListItem",
|
|
105
|
+
"position": 11,
|
|
106
|
+
"url": "https://thumbgate.ai/guides/native-messaging-host-security",
|
|
107
|
+
"name": "Native Messaging Host Security"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"@type": "ListItem",
|
|
111
|
+
"position": 12,
|
|
112
|
+
"url": "https://thumbgate.ai/guides/ai-search-topical-presence",
|
|
113
|
+
"name": "AI Search Topical Presence"
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"@type": "ListItem",
|
|
117
|
+
"position": 13,
|
|
118
|
+
"url": "https://thumbgate.ai/guides/relational-knowledge-ai-recommendations",
|
|
119
|
+
"name": "Relational Knowledge in AI Recommendations"
|
|
86
120
|
}
|
|
87
121
|
]
|
|
88
122
|
}
|
|
@@ -188,14 +222,15 @@
|
|
|
188
222
|
<div class="container">
|
|
189
223
|
<h1>Learn: AI Agent Safety</h1>
|
|
190
224
|
<p class="hero-sub">Practical guides for developers who use AI coding agents and want them to stop repeating the same mistakes. Every article ends with something you can ship today.</p>
|
|
225
|
+
<p class="hero-sub" style="font-size:0.85rem;margin-top:-1rem;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
|
|
191
226
|
|
|
192
227
|
<div class="article-grid">
|
|
193
228
|
<a href="/learn/stop-ai-agent-force-push" class="article-card">
|
|
194
229
|
<h3>How to Stop AI Agents From Force-Pushing to Main</h3>
|
|
195
|
-
<p>Your agent just ran git push --force on main. Again. Here is how to make that physically impossible with a pre-action
|
|
230
|
+
<p>Your agent just ran git push --force on main. Again. Here is how to make that physically impossible with a pre-action check that takes two minutes to set up.</p>
|
|
196
231
|
<span class="article-tag">Claude Code</span>
|
|
197
232
|
<span class="article-tag">Git Safety</span>
|
|
198
|
-
<span class="article-tag">Pre-Action
|
|
233
|
+
<span class="article-tag">Pre-Action Checks</span>
|
|
199
234
|
</a>
|
|
200
235
|
|
|
201
236
|
<a href="/learn/vibe-coding-safety-net" class="article-card">
|
|
@@ -206,16 +241,16 @@
|
|
|
206
241
|
<span class="article-tag">MCP</span>
|
|
207
242
|
</a>
|
|
208
243
|
|
|
209
|
-
<a href="/learn/mcp-pre-action-
|
|
210
|
-
<h3>MCP Pre-Action
|
|
211
|
-
<p>What pre-action
|
|
244
|
+
<a href="/learn/mcp-pre-action-checks-explained" class="article-card">
|
|
245
|
+
<h3>MCP Pre-Action Checks Explained</h3>
|
|
246
|
+
<p>What pre-action checks are, how they differ from prompt rules, and why enforcement beats instructions. A technical deep-dive for developers building on the Model Context Protocol.</p>
|
|
212
247
|
<span class="article-tag">MCP</span>
|
|
213
248
|
<span class="article-tag">PreToolUse</span>
|
|
214
249
|
<span class="article-tag">Technical</span>
|
|
215
250
|
</a>
|
|
216
251
|
<a href="/learn/agent-harness-pattern" class="article-card">
|
|
217
252
|
<h3>The Agent Harness Pattern: Why Your AI Needs a Seatbelt</h3>
|
|
218
|
-
<p>Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification
|
|
253
|
+
<p>Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification checks, and durable state. ThumbGate implements this pattern in production today.</p>
|
|
219
254
|
<span class="article-tag">Research</span>
|
|
220
255
|
<span class="article-tag">Agent Harness</span>
|
|
221
256
|
<span class="article-tag">NLAH</span>
|
|
@@ -233,6 +268,22 @@
|
|
|
233
268
|
<h2>Popular buyer questions</h2>
|
|
234
269
|
<p class="section-intro">These are the high-intent guides for buyers who already know the pain and want to understand where ThumbGate fits fast.</p>
|
|
235
270
|
<div class="article-grid">
|
|
271
|
+
<a href="/guides/ai-search-topical-presence" class="article-card">
|
|
272
|
+
<h3>AI Search Topical Presence</h3>
|
|
273
|
+
<p>Why AI assistants recommend the tools they repeatedly see tied to a buyer problem, and how ThumbGate builds that association with proof-backed pages.</p>
|
|
274
|
+
<span class="article-tag">AI Search</span>
|
|
275
|
+
<span class="article-tag">Topical Presence</span>
|
|
276
|
+
<span class="article-tag">Recommendation</span>
|
|
277
|
+
</a>
|
|
278
|
+
|
|
279
|
+
<a href="/guides/relational-knowledge-ai-recommendations" class="article-card">
|
|
280
|
+
<h3>Relational Knowledge in AI Recommendations</h3>
|
|
281
|
+
<p>How stored brand-to-problem associations shape AI answers, and why ThumbGate should own the pre-action-checks category in those retrieval paths.</p>
|
|
282
|
+
<span class="article-tag">Relational Knowledge</span>
|
|
283
|
+
<span class="article-tag">AI Answers</span>
|
|
284
|
+
<span class="article-tag">GEO</span>
|
|
285
|
+
</a>
|
|
286
|
+
|
|
236
287
|
<a href="/guides/stop-repeated-ai-agent-mistakes" class="article-card">
|
|
237
288
|
<h3>How to Stop AI Coding Agents From Repeating Mistakes</h3>
|
|
238
289
|
<p>The fastest explanation of why memory alone is not enough when your agent keeps making the same bad move twice.</p>
|
|
@@ -259,18 +310,34 @@
|
|
|
259
310
|
|
|
260
311
|
<a href="/guides/gemini-cli-feedback-memory" class="article-card">
|
|
261
312
|
<h3>Gemini CLI Feedback Memory That Leads to Enforcement</h3>
|
|
262
|
-
<p>A memory-first buyer path for Gemini CLI users who will eventually care about
|
|
313
|
+
<p>A memory-first buyer path for Gemini CLI users who will eventually care about checks, proof, and operational control.</p>
|
|
263
314
|
<span class="article-tag">Gemini</span>
|
|
264
315
|
<span class="article-tag">Memory</span>
|
|
265
316
|
<span class="article-tag">Enforcement</span>
|
|
266
317
|
</a>
|
|
267
318
|
|
|
319
|
+
<a href="/guides/browser-automation-safety" class="article-card">
|
|
320
|
+
<h3>Browser Automation Safety for AI Agents</h3>
|
|
321
|
+
<p>Prompt injection gets more dangerous when browser agents can create cross-app bridges, hold persistent permissions, or silently widen connector scope.</p>
|
|
322
|
+
<span class="article-tag">Browser Use</span>
|
|
323
|
+
<span class="article-tag">Prompt Injection</span>
|
|
324
|
+
<span class="article-tag">Buyer Guide</span>
|
|
325
|
+
</a>
|
|
326
|
+
|
|
327
|
+
<a href="/guides/native-messaging-host-security" class="article-card">
|
|
328
|
+
<h3>Native Messaging Host Security</h3>
|
|
329
|
+
<p>Understand how native messaging manifests work, which extension IDs already have access, and how to audit dormant AI browser bridges before they surprise a team.</p>
|
|
330
|
+
<span class="article-tag">Native Messaging</span>
|
|
331
|
+
<span class="article-tag">Bridge Audit</span>
|
|
332
|
+
<span class="article-tag">Buyer Guide</span>
|
|
333
|
+
</a>
|
|
334
|
+
|
|
268
335
|
<a href="/guides/autoresearch-agent-safety" class="article-card">
|
|
269
336
|
<h3>Autoresearch Agent Safety for Self-Improving Coding Agents</h3>
|
|
270
|
-
<p>The control-plane story for benchmark-search loops that need holdout tests, proof trails, and reward-hacking
|
|
337
|
+
<p>The control-plane story for benchmark-search loops that need holdout tests, proof trails, and reward-hacking checks.</p>
|
|
271
338
|
<span class="article-tag">Autoresearch</span>
|
|
272
339
|
<span class="article-tag">Holdout Proof</span>
|
|
273
|
-
<span class="article-tag">
|
|
340
|
+
<span class="article-tag">Checks</span>
|
|
274
341
|
</a>
|
|
275
342
|
</div>
|
|
276
343
|
|
package/public/lessons.html
CHANGED
|
@@ -7,6 +7,29 @@
|
|
|
7
7
|
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
8
8
|
<link rel="apple-touch-icon" href="/assets/brand/thumbgate-mark.svg">
|
|
9
9
|
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
10
|
+
<script type="application/ld+json">
|
|
11
|
+
{
|
|
12
|
+
"@context": "https://schema.org",
|
|
13
|
+
"@type": "WebPage",
|
|
14
|
+
"name": "ThumbGate Lessons Learned",
|
|
15
|
+
"url": "https://thumbgate-production.up.railway.app/lessons",
|
|
16
|
+
"dateModified": "2026-04-20",
|
|
17
|
+
"author": {
|
|
18
|
+
"@type": "Person",
|
|
19
|
+
"name": "Igor Ganapolsky",
|
|
20
|
+
"url": "https://github.com/IgorGanapolsky",
|
|
21
|
+
"sameAs": [
|
|
22
|
+
"https://github.com/IgorGanapolsky",
|
|
23
|
+
"https://www.linkedin.com/in/igorganapolsky"
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"publisher": {
|
|
27
|
+
"@type": "Organization",
|
|
28
|
+
"name": "ThumbGate",
|
|
29
|
+
"url": "https://thumbgate-production.up.railway.app"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
10
33
|
<style>
|
|
11
34
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
12
35
|
:root {
|
|
@@ -201,7 +224,8 @@
|
|
|
201
224
|
<div class="container">
|
|
202
225
|
<div style="margin:32px 0 24px;padding:24px;background:linear-gradient(135deg,rgba(167,139,250,0.08),rgba(34,211,238,0.05));border:1px solid rgba(167,139,250,0.2);border-radius:12px;">
|
|
203
226
|
<h1 style="font-size:22px;font-weight:700;margin-bottom:8px;letter-spacing:-0.02em;">📚 Lessons Learned</h1>
|
|
204
|
-
<p style="font-size:
|
|
227
|
+
<p style="font-size:12px;color:var(--text-muted);margin-bottom:8px;">Updated: <time datetime="2026-04-20">2026-04-20</time> · by <a href="https://github.com/IgorGanapolsky" style="color:inherit;">Igor Ganapolsky</a></p>
|
|
228
|
+
<p style="font-size:14px;color:var(--text-muted);line-height:1.6;max-width:700px;">See what ThumbGate learned from your feedback, which failure patterns keep repeating, and how many actions the approval layer actually blocked. <span style="color:var(--purple);font-weight:600;">This view separates repeated failures from recorded gate blocks so the proof stays honest.</span></p>
|
|
205
229
|
<div style="display:flex;gap:16px;margin-top:12px;font-size:12px;color:var(--text-muted);">
|
|
206
230
|
<span>📋 <strong style="color:var(--text);">Active Rules</strong> — what was learned</span>
|
|
207
231
|
<span>📊 <strong style="color:var(--text);">Timeline</strong> — when it was learned</span>
|
|
@@ -820,7 +844,7 @@ function renderUpgradeWall(containerId) {
|
|
|
820
844
|
'<div style="text-align:center;background:rgba(10,10,15,0.92);border:1px solid #333;border-radius:12px;padding:28px 36px;">' +
|
|
821
845
|
'<div style="font-size:20px;font-weight:700;color:#fff;margin-bottom:8px;">Unlock your full lessons</div>' +
|
|
822
846
|
'<div style="color:#aaa;margin-bottom:16px;">Pro shows your real prevention rules, timeline, and insights.</div>' +
|
|
823
|
-
'<a href="
|
|
847
|
+
'<a href="/go/pro?utm_source=lessons" rel="noopener" ' +
|
|
824
848
|
'style="display:inline-block;background:#b85c2d;color:#fff;padding:10px 24px;border-radius:8px;text-decoration:none;font-weight:700;">Start 7-day free trial</a>' +
|
|
825
849
|
'<div style="color:#666;font-size:12px;margin-top:10px;">npx thumbgate pro --activate --key=YOUR_KEY</div>' +
|
|
826
850
|
'</div></div>';
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
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
|
+
<title>ThumbGate — The Numbers | Live First-Party Data</title>
|
|
9
|
+
<meta name="description" content="ThumbGate's live operational numbers: active pre-action checks, AI agent actions blocked, estimated LLM tokens and dollars saved, and the Bayes error rate of our intervention scorer. First-party data, regenerated on every release.">
|
|
10
|
+
<meta property="og:title" content="ThumbGate — The Numbers">
|
|
11
|
+
<meta property="og:description" content="Live first-party operational metrics: checks, blocks, token savings, and scorer calibration. Regenerated on every release.">
|
|
12
|
+
<meta property="og:type" content="website">
|
|
13
|
+
<meta property="og:url" content="https://thumbgate-production.up.railway.app/numbers">
|
|
14
|
+
<meta name="twitter:card" content="summary_large_image">
|
|
15
|
+
<link rel="canonical" href="https://thumbgate-production.up.railway.app/numbers">
|
|
16
|
+
<link rel="icon" type="image/png" href="/thumbgate-icon.png">
|
|
17
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
18
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
19
|
+
|
|
20
|
+
<script type="application/ld+json">
|
|
21
|
+
{
|
|
22
|
+
"@context": "https://schema.org",
|
|
23
|
+
"@type": "SoftwareApplication",
|
|
24
|
+
"name": "ThumbGate",
|
|
25
|
+
"alternateName": "thumbgate",
|
|
26
|
+
"applicationCategory": "DeveloperApplication",
|
|
27
|
+
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
28
|
+
"softwareVersion": "1.12.2",
|
|
29
|
+
"url": "https://thumbgate-production.up.railway.app/numbers",
|
|
30
|
+
"dateModified": "2026-04-20",
|
|
31
|
+
"creator": {
|
|
32
|
+
"@type": "Person",
|
|
33
|
+
"name": "Igor Ganapolsky",
|
|
34
|
+
"url": "https://github.com/IgorGanapolsky",
|
|
35
|
+
"sameAs": [
|
|
36
|
+
"https://github.com/IgorGanapolsky",
|
|
37
|
+
"https://www.linkedin.com/in/igorganapolsky"
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<script type="application/ld+json">
|
|
44
|
+
{
|
|
45
|
+
"@context": "https://schema.org",
|
|
46
|
+
"@type": "Dataset",
|
|
47
|
+
"name": "ThumbGate Live Operational Metrics",
|
|
48
|
+
"description": "First-party operational metrics from the ThumbGate pre-action check runtime: active checks, blocked AI agent actions, estimated token savings, and Bayes error rate of the intervention scorer.",
|
|
49
|
+
"url": "https://thumbgate-production.up.railway.app/numbers",
|
|
50
|
+
"license": "https://opensource.org/licenses/MIT",
|
|
51
|
+
"creator": {
|
|
52
|
+
"@type": "Person",
|
|
53
|
+
"name": "Igor Ganapolsky",
|
|
54
|
+
"url": "https://github.com/IgorGanapolsky",
|
|
55
|
+
"sameAs": [
|
|
56
|
+
"https://github.com/IgorGanapolsky",
|
|
57
|
+
"https://www.linkedin.com/in/igorganapolsky"
|
|
58
|
+
]
|
|
59
|
+
},
|
|
60
|
+
"dateModified": "2026-04-20",
|
|
61
|
+
"datePublished": "2026-04-20",
|
|
62
|
+
"keywords": [
|
|
63
|
+
"AI agent checks",
|
|
64
|
+
"LLM token savings",
|
|
65
|
+
"prevention rules",
|
|
66
|
+
"Bayes error rate",
|
|
67
|
+
"self-improving agents"
|
|
68
|
+
],
|
|
69
|
+
"variableMeasured": [
|
|
70
|
+
{
|
|
71
|
+
"@type": "PropertyValue",
|
|
72
|
+
"name": "active_gates",
|
|
73
|
+
"value": 52
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"@type": "PropertyValue",
|
|
77
|
+
"name": "actions_blocked",
|
|
78
|
+
"value": 0
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"@type": "PropertyValue",
|
|
82
|
+
"name": "actions_warned",
|
|
83
|
+
"value": 455
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"@type": "PropertyValue",
|
|
87
|
+
"name": "estimated_hours_saved",
|
|
88
|
+
"value": "113.8"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"@type": "PropertyValue",
|
|
92
|
+
"name": "estimated_dollars_saved",
|
|
93
|
+
"value": 0,
|
|
94
|
+
"unitText": "USD"
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"@type": "PropertyValue",
|
|
98
|
+
"name": "tokens_saved_total",
|
|
99
|
+
"value": 0
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"@type": "PropertyValue",
|
|
103
|
+
"name": "bayes_error_rate",
|
|
104
|
+
"value": 0.015
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
</script>
|
|
109
|
+
|
|
110
|
+
<style>
|
|
111
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
112
|
+
:root {
|
|
113
|
+
--bg: #0a0a0b;
|
|
114
|
+
--bg-card: #161618;
|
|
115
|
+
--bg-raised: #111113;
|
|
116
|
+
--border: #222225;
|
|
117
|
+
--text: #e8e8ec;
|
|
118
|
+
--muted: #8b8b94;
|
|
119
|
+
--cyan: #22d3ee;
|
|
120
|
+
--green: #34d399;
|
|
121
|
+
--amber: #fbbf24;
|
|
122
|
+
}
|
|
123
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
|
|
124
|
+
nav { padding: 1rem 2rem; border-bottom: 1px solid var(--border); display: flex; gap: 1.5rem; align-items: center; }
|
|
125
|
+
nav a { color: var(--muted); text-decoration: none; font-size: 0.9rem; }
|
|
126
|
+
nav a:hover { color: var(--cyan); }
|
|
127
|
+
nav .brand { color: var(--text); font-weight: 700; font-size: 1.05rem; text-decoration: none; }
|
|
128
|
+
.container { max-width: 900px; margin: 0 auto; padding: 3rem 1.5rem 5rem; }
|
|
129
|
+
h1 { font-size: 2.4rem; line-height: 1.15; margin-bottom: 0.75rem; }
|
|
130
|
+
h2 { font-size: 1.35rem; color: var(--cyan); margin: 3rem 0 1rem; }
|
|
131
|
+
.subtitle { color: var(--muted); font-size: 1.05rem; max-width: 640px; margin-bottom: 1.25rem; }
|
|
132
|
+
.freshness {
|
|
133
|
+
display: inline-block;
|
|
134
|
+
padding: 6px 14px;
|
|
135
|
+
background: rgba(52, 211, 153, 0.08);
|
|
136
|
+
border: 1px solid rgba(52, 211, 153, 0.35);
|
|
137
|
+
border-radius: 999px;
|
|
138
|
+
color: var(--green);
|
|
139
|
+
font-size: 0.82rem;
|
|
140
|
+
font-weight: 600;
|
|
141
|
+
margin-bottom: 2.5rem;
|
|
142
|
+
}
|
|
143
|
+
.stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 18px; margin: 1.5rem 0; }
|
|
144
|
+
.stat-card {
|
|
145
|
+
background: var(--bg-card);
|
|
146
|
+
border: 1px solid var(--border);
|
|
147
|
+
border-radius: 12px;
|
|
148
|
+
padding: 22px 20px;
|
|
149
|
+
}
|
|
150
|
+
.stat-label { color: var(--muted); font-size: 0.82rem; text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 10px; }
|
|
151
|
+
.stat-value { font-size: 2.1rem; font-weight: 700; color: var(--text); line-height: 1.1; }
|
|
152
|
+
.stat-sub { color: var(--muted); font-size: 0.85rem; margin-top: 8px; }
|
|
153
|
+
.stat-source { display: block; color: var(--cyan); font-size: 0.75rem; text-decoration: none; margin-top: 10px; }
|
|
154
|
+
.stat-source:hover { text-decoration: underline; }
|
|
155
|
+
.method {
|
|
156
|
+
background: var(--bg-raised);
|
|
157
|
+
border: 1px solid var(--border);
|
|
158
|
+
border-radius: 12px;
|
|
159
|
+
padding: 22px 24px;
|
|
160
|
+
color: var(--muted);
|
|
161
|
+
font-size: 0.95rem;
|
|
162
|
+
}
|
|
163
|
+
.method strong { color: var(--text); }
|
|
164
|
+
.method ul { margin: 10px 0 0 18px; }
|
|
165
|
+
.method li { margin-bottom: 6px; }
|
|
166
|
+
.cta { text-align: center; margin-top: 3rem; }
|
|
167
|
+
.cta a {
|
|
168
|
+
display: inline-block;
|
|
169
|
+
padding: 14px 28px;
|
|
170
|
+
background: var(--cyan);
|
|
171
|
+
color: #0a0a0b;
|
|
172
|
+
border-radius: 10px;
|
|
173
|
+
font-weight: 700;
|
|
174
|
+
text-decoration: none;
|
|
175
|
+
}
|
|
176
|
+
.footer-note { color: var(--muted); font-size: 0.85rem; margin-top: 1.5rem; text-align: center; }
|
|
177
|
+
.footer-note a { color: var(--cyan); text-decoration: none; }
|
|
178
|
+
</style>
|
|
179
|
+
</head>
|
|
180
|
+
<body>
|
|
181
|
+
<nav>
|
|
182
|
+
<a class="brand" href="/">ThumbGate</a>
|
|
183
|
+
<a href="/learn">Learn</a>
|
|
184
|
+
<a href="/compare">Compare</a>
|
|
185
|
+
<a href="/numbers">Numbers</a>
|
|
186
|
+
<a href="/dashboard">Dashboard</a>
|
|
187
|
+
<a href="/pro">Pro</a>
|
|
188
|
+
</nav>
|
|
189
|
+
|
|
190
|
+
<main class="container">
|
|
191
|
+
<h1>The Numbers</h1>
|
|
192
|
+
<p class="subtitle">Live first-party operational data from the ThumbGate runtime. No surveys, no projections — counts pulled from the same local scripts that power the CLI and dashboard.</p>
|
|
193
|
+
<div class="freshness">Updated: 2026-04-20 · Version 1.12.2</div>
|
|
194
|
+
|
|
195
|
+
<h2>Check enforcement</h2>
|
|
196
|
+
<div class="stats-grid">
|
|
197
|
+
<div class="stat-card">
|
|
198
|
+
<div class="stat-label">Active checks</div>
|
|
199
|
+
<div class="stat-value">52</div>
|
|
200
|
+
<div class="stat-sub">33 manual · 19 auto-promoted</div>
|
|
201
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
|
|
202
|
+
</div>
|
|
203
|
+
<div class="stat-card">
|
|
204
|
+
<div class="stat-label">Actions blocked</div>
|
|
205
|
+
<div class="stat-value">0</div>
|
|
206
|
+
<div class="stat-sub">repeat AI mistakes prevented at the check</div>
|
|
207
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
|
|
208
|
+
</div>
|
|
209
|
+
<div class="stat-card">
|
|
210
|
+
<div class="stat-label">Actions warned</div>
|
|
211
|
+
<div class="stat-value">455</div>
|
|
212
|
+
<div class="stat-sub">soft interventions; not blocks</div>
|
|
213
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
|
|
214
|
+
</div>
|
|
215
|
+
<div class="stat-card">
|
|
216
|
+
<div class="stat-label">Top blocked check</div>
|
|
217
|
+
<div class="stat-value" style="font-size:1.1rem;">local-only-git-writes (0 blocks)</div>
|
|
218
|
+
<div class="stat-sub">highest-occurrence prevention rule</div>
|
|
219
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
<h2>Token & time savings</h2>
|
|
224
|
+
<div class="stats-grid">
|
|
225
|
+
<div class="stat-card">
|
|
226
|
+
<div class="stat-label">Estimated hours saved</div>
|
|
227
|
+
<div class="stat-value">113.8</div>
|
|
228
|
+
<div class="stat-sub">~15 min per blocked mistake × blocks+warns</div>
|
|
229
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/check-stats.js">source: check-stats.js</a>
|
|
230
|
+
</div>
|
|
231
|
+
<div class="stat-card">
|
|
232
|
+
<div class="stat-label">Estimated LLM dollars saved</div>
|
|
233
|
+
<div class="stat-value">$0.00</div>
|
|
234
|
+
<div class="stat-sub">blended Sonnet/Opus/Haiku 80/15/5 mix</div>
|
|
235
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/token-savings.js">source: token-savings.js</a>
|
|
236
|
+
</div>
|
|
237
|
+
<div class="stat-card">
|
|
238
|
+
<div class="stat-label">Tokens not spent</div>
|
|
239
|
+
<div class="stat-value">0</div>
|
|
240
|
+
<div class="stat-sub">2,000 input + 600 output per block, conservative</div>
|
|
241
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/token-savings.js">source: token-savings.js</a>
|
|
242
|
+
</div>
|
|
243
|
+
<div class="stat-card">
|
|
244
|
+
<div class="stat-label">Scorer Bayes error</div>
|
|
245
|
+
<div class="stat-value">1.5%</div>
|
|
246
|
+
<div class="stat-sub">irreducible error given current feature set</div>
|
|
247
|
+
<a class="stat-source" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/scripts/bayes-optimal-check.js">source: bayes-optimal-check.js</a>
|
|
248
|
+
</div>
|
|
249
|
+
</div>
|
|
250
|
+
|
|
251
|
+
<h2>Methodology</h2>
|
|
252
|
+
<div class="method">
|
|
253
|
+
<p><strong>Where the numbers come from.</strong> This page is regenerated from local scripts — no survey data, no hand-edited figures, no third-party attribution. Every number on this page is produced by code in the public <a href="https://github.com/IgorGanapolsky/ThumbGate">ThumbGate repo</a>.</p>
|
|
254
|
+
<ul>
|
|
255
|
+
<li><strong>Active checks</strong> — union of shipped default rules and the auto-promotion ledger (auto).</li>
|
|
256
|
+
<li><strong>Actions blocked/warned</strong> — sum of <code>occurrences</code> across checks with the corresponding action.</li>
|
|
257
|
+
<li><strong>Hours saved</strong> — conservative 15-minute/incident estimate for debugging a repeated AI mistake × (blocks + warns).</li>
|
|
258
|
+
<li><strong>Dollars saved</strong> — blended per-call token estimate (2k input + 600 output) × blocks × 2026-04-15 Anthropic + OpenAI list prices. See <code>scripts/token-savings.js</code> for the full price snapshot.</li>
|
|
259
|
+
<li><strong>Bayes error rate</strong> — irreducible classifier error of the current risk scorer given its feature set. High values mean "add features, don't tune thresholds."</li>
|
|
260
|
+
</ul>
|
|
261
|
+
<p style="margin-top:12px;">Last auto-promotion: auto-entity-funnel-metric-roi on 2026-04-17. Regenerated on every release via <code>npm run numbers:generate</code> and on a weekly cadence.</p>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<div class="cta">
|
|
265
|
+
<a href="https://www.npmjs.com/package/thumbgate">Install ThumbGate — npx thumbgate init</a>
|
|
266
|
+
<div class="footer-note">Prefer the raw feed? See <a href="https://github.com/IgorGanapolsky/ThumbGate">GitHub</a> or run <code>npm run check:stats</code> locally.</div>
|
|
267
|
+
<div class="footer-note">Generated at 2026-04-20T21:45:34.500Z UTC.</div>
|
|
268
|
+
</div>
|
|
269
|
+
</main>
|
|
270
|
+
</body>
|
|
271
|
+
</html>
|