thumbgate 1.5.3 โ 1.5.8
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 +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/adapters/README.md +1 -1
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/package.json +11 -3
- package/public/blog.html +474 -0
- package/public/dashboard.html +52 -0
- package/public/index.html +65 -21
- package/public/learn.html +274 -0
- package/public/pro.html +1087 -0
- package/scripts/auto-wire-hooks.js +61 -1
- package/scripts/dashboard.js +13 -0
- package/src/api/server.js +15 -17
package/public/dashboard.html
CHANGED
|
@@ -330,6 +330,21 @@
|
|
|
330
330
|
<h2>๐ Feedback Insights & Lesson Pipeline</h2>
|
|
331
331
|
<p class="template-summary">How your thumbs-up/down signals turn into lessons that prevent repeat mistakes.</p>
|
|
332
332
|
|
|
333
|
+
<!-- Token Savings โ computed from real gate-block counts -->
|
|
334
|
+
<div class="panel" id="tokenSavingsPanel" style="margin-bottom:24px;background:linear-gradient(135deg,rgba(74,222,128,0.04),rgba(34,211,238,0.03));border-color:rgba(74,222,128,0.25);">
|
|
335
|
+
<div style="display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;">
|
|
336
|
+
<div style="flex:1;min-width:240px;">
|
|
337
|
+
<h3 style="margin-bottom:6px;">๐ธ Estimated tokens saved</h3>
|
|
338
|
+
<div style="font-size:12px;color:var(--text-muted);line-height:1.55;">Computed from your real blocked-action count ร 2,000 input + 600 output tokens per avoided retry, priced at a Sonnet-heavy blend (80% Sonnet 4.5 / 15% Opus 4.6 / 5% Haiku 4.5). Conservative estimate โ actual savings may be higher.</div>
|
|
339
|
+
</div>
|
|
340
|
+
<div style="text-align:right;min-width:220px;">
|
|
341
|
+
<div id="tokenSavingsDollars" style="font-size:40px;font-weight:800;color:#4ade80;letter-spacing:-0.02em;line-height:1;">โ</div>
|
|
342
|
+
<div id="tokenSavingsTokens" style="font-size:13px;color:var(--text-muted);margin-top:6px;">โ tokens ยท from <span id="tokenSavingsBlocks">โ</span> blocked calls</div>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
<div id="tokenSavingsSource" style="margin-top:12px;padding-top:12px;border-top:1px solid var(--border);font-size:11px;color:var(--text-muted);line-height:1.6;"></div>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
333
348
|
<!-- Pipeline Flow -->
|
|
334
349
|
<div class="panel" style="margin-bottom:24px;">
|
|
335
350
|
<h3 style="margin-bottom:16px;">Feedback โ Lesson Pipeline</h3>
|
|
@@ -1220,12 +1235,49 @@ var lessonChart = null;
|
|
|
1220
1235
|
var gateAuditChart = null;
|
|
1221
1236
|
|
|
1222
1237
|
function renderInsights(data) {
|
|
1238
|
+
renderTokenSavings(data.tokenSavings, data.gateStats || {});
|
|
1223
1239
|
renderPipeline(data.lessonPipeline || {});
|
|
1224
1240
|
renderFeedbackTrendChart(data.feedbackTimeSeries || {});
|
|
1225
1241
|
renderLessonTrendChart(data.feedbackTimeSeries || {});
|
|
1226
1242
|
renderGateAuditChartFromData(data.gateAudit || {});
|
|
1227
1243
|
}
|
|
1228
1244
|
|
|
1245
|
+
/**
|
|
1246
|
+
* Render token-savings panel from /v1/dashboard.tokenSavings.
|
|
1247
|
+
* Only shows a dollar figure when it's backed by real gate blocks.
|
|
1248
|
+
* Otherwise shows an honest "$0.00 โ no blocks yet" state, NEVER
|
|
1249
|
+
* a marketing placeholder.
|
|
1250
|
+
*/
|
|
1251
|
+
function renderTokenSavings(savings, gateStats) {
|
|
1252
|
+
var panel = document.getElementById('tokenSavingsPanel');
|
|
1253
|
+
if (!panel) return;
|
|
1254
|
+
var dollarsEl = document.getElementById('tokenSavingsDollars');
|
|
1255
|
+
var tokensEl = document.getElementById('tokenSavingsTokens');
|
|
1256
|
+
var blocksEl = document.getElementById('tokenSavingsBlocks');
|
|
1257
|
+
var sourceEl = document.getElementById('tokenSavingsSource');
|
|
1258
|
+
|
|
1259
|
+
if (!savings || typeof savings.dollarsSaved !== 'number') {
|
|
1260
|
+
dollarsEl.textContent = '$0.00';
|
|
1261
|
+
tokensEl.innerHTML = 'No blocked calls yet โ estimate will appear after your first gate fires';
|
|
1262
|
+
if (blocksEl) blocksEl.textContent = '0';
|
|
1263
|
+
sourceEl.textContent = '';
|
|
1264
|
+
return;
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
dollarsEl.textContent = savings.dollarsSavedDisplay || ('$' + Number(savings.dollarsSaved).toFixed(2));
|
|
1268
|
+
tokensEl.innerHTML = (savings.tokensSavedDisplay || '0') + ' tokens ยท from <span id="tokenSavingsBlocks">' +
|
|
1269
|
+
(savings.blockedCalls || 0) + '</span> blocked calls';
|
|
1270
|
+
|
|
1271
|
+
var mix = savings.modelMix || {};
|
|
1272
|
+
var mixParts = [];
|
|
1273
|
+
for (var m in mix) { mixParts.push(Math.round(mix[m] * 100) + '% ' + m); }
|
|
1274
|
+
var blend = savings.blendedPricePer1M || { input: 0, output: 0 };
|
|
1275
|
+
sourceEl.textContent =
|
|
1276
|
+
'Methodology: blended ' + mixParts.join(' / ') +
|
|
1277
|
+
' at $' + blend.input.toFixed(2) + '/1M input + $' + blend.output.toFixed(2) + '/1M output. ' +
|
|
1278
|
+
'Data source: actual blocked count from gate-stats.json. No sample numbers.';
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1229
1281
|
function renderPipeline(pipeline) {
|
|
1230
1282
|
var stages = pipeline.stages || [];
|
|
1231
1283
|
var rates = pipeline.rates || {};
|
package/public/index.html
CHANGED
|
@@ -283,9 +283,13 @@ __GA_BOOTSTRAP__
|
|
|
283
283
|
.hero p { font-size: 17px; color: var(--text-muted); max-width: 520px; margin: 0 auto 36px; line-height: 1.6; }
|
|
284
284
|
.hero-persona { font-size: 15px; color: var(--cyan); max-width: 600px; margin: 0 auto 20px; line-height: 1.5; font-weight: 500; }
|
|
285
285
|
.hero-signals { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin: 0 auto 28px; max-width: 760px; }
|
|
286
|
-
.signal-pill { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-raised); font-size: 13px; font-weight: 600; letter-spacing: -0.01em; }
|
|
286
|
+
.signal-pill { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-raised); font-size: 13px; font-weight: 600; letter-spacing: -0.01em; text-decoration: none; cursor: pointer; transition: transform 0.12s ease, border-color 0.12s ease, background 0.12s ease; }
|
|
287
|
+
.signal-pill:hover { transform: translateY(-1px); border-color: rgba(34, 211, 238, 0.5); background: rgba(34, 211, 238, 0.06); }
|
|
288
|
+
.signal-pill:focus-visible { outline: 2px solid var(--cyan); outline-offset: 2px; }
|
|
287
289
|
.signal-pill.signal-up { border-color: rgba(74, 222, 128, 0.28); color: #b8f7c8; background: rgba(74, 222, 128, 0.08); }
|
|
290
|
+
.signal-pill.signal-up:hover { border-color: rgba(74, 222, 128, 0.6); background: rgba(74, 222, 128, 0.14); }
|
|
288
291
|
.signal-pill.signal-down { border-color: rgba(248, 113, 113, 0.28); color: #ffc0c0; background: rgba(248, 113, 113, 0.08); }
|
|
292
|
+
.signal-pill.signal-down:hover { border-color: rgba(248, 113, 113, 0.6); background: rgba(248, 113, 113, 0.14); }
|
|
289
293
|
.hero-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin: 0 auto 16px; max-width: 760px; }
|
|
290
294
|
.btn-pro-page { display: inline-flex; align-items: center; justify-content: center; padding: 11px 18px; background: var(--cyan); color: var(--bg); border-radius: 999px; text-decoration: none; font-size: 14px; font-weight: 700; box-shadow: 0 0 0 1px rgba(34,211,238,0.28), 0 12px 32px rgba(34,211,238,0.18); transition: opacity 0.15s, transform 0.15s; }
|
|
291
295
|
.btn-pro-page:hover { opacity: 0.9; transform: translateY(-1px); }
|
|
@@ -528,6 +532,35 @@ __GA_BOOTSTRAP__
|
|
|
528
532
|
<div class="hero-badge">โ Your AI coding bill has a leak</div>
|
|
529
533
|
<h1>Stop paying $ for the same AI mistake.</h1>
|
|
530
534
|
<p style="font-size:18px;color:var(--text-muted);max-width:720px;margin:0 auto 20px;line-height:1.6;">Every retry loop, every hallucinated import, every "let me try a different approach" โ those are billable tokens on every LLM vendor's bill. Thumbs-down once; ThumbGate blocks that exact mistake on every future call. Across Claude Code, Cursor, Codex, Gemini, Amp, OpenCode โ any MCP-compatible agent, forever, including fast-moving vibe coding workflows.</p>
|
|
535
|
+
|
|
536
|
+
<!-- HERO PRICING CARD โ visible in first viewport so $19/mo and $149/yr never get buried -->
|
|
537
|
+
<div id="pro-pitch" style="max-width:820px;margin:0 auto 32px;padding:24px 28px;background:linear-gradient(180deg,rgba(17,17,19,0.94) 0%,rgba(22,22,24,0.94) 100%);border:1px solid rgba(34,211,238,0.32);border-radius:20px;box-shadow:0 0 0 1px rgba(34,211,238,0.18),0 24px 64px rgba(0,0,0,0.35);text-align:left;">
|
|
538
|
+
<div style="display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:16px;">
|
|
539
|
+
<div>
|
|
540
|
+
<div style="display:inline-flex;align-items:center;gap:8px;padding:6px 12px;border-radius:999px;border:1px solid rgba(34,211,238,0.25);background:var(--cyan-dim);color:var(--cyan);font-size:11px;font-weight:700;letter-spacing:0.08em;text-transform:uppercase;">Start 7-day free trial</div>
|
|
541
|
+
<h2 style="margin:10px 0 4px;font-size:22px;letter-spacing:-0.025em;line-height:1.2;">Go Pro โ one correction, every agent, every session.</h2>
|
|
542
|
+
<p style="margin:0;font-size:13px;color:var(--text-muted);">Personal local dashboard ยท DPO export from real corrections ยท founder support on risky flows.</p>
|
|
543
|
+
</div>
|
|
544
|
+
</div>
|
|
545
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px;">
|
|
546
|
+
<div style="display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border-radius:14px;border:1px solid rgba(34,211,238,0.35);background:rgba(34,211,238,0.06);">
|
|
547
|
+
<div style="text-align:left;">
|
|
548
|
+
<div style="font-size:22px;font-weight:800;letter-spacing:-0.03em;line-height:1.1;">$19<span style="font-size:13px;font-weight:600;color:var(--text-muted);">/mo</span></div>
|
|
549
|
+
<div style="font-size:12px;color:var(--text-muted);margin-top:2px;">Monthly Pro</div>
|
|
550
|
+
</div>
|
|
551
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=hero_pricing_card&utm_campaign=pro_pack&cta_id=hero_pro_monthly&cta_placement=hero_pricing&plan_id=pro&landing_path=%2F" onclick="posthog.capture('hero_pricing_monthly_click',{cta:'choose_monthly'})" style="display:inline-flex;align-items:center;gap:6px;padding:11px 20px;background:var(--cyan);color:#041016;border-radius:999px;text-decoration:none;font-weight:700;font-size:14px;box-shadow:0 0 0 1px rgba(34,211,238,0.28),0 12px 32px rgba(34,211,238,0.18);white-space:nowrap;">Choose monthly โ</a>
|
|
552
|
+
</div>
|
|
553
|
+
<div style="display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 16px;border-radius:14px;border:1px solid var(--border);background:rgba(255,255,255,0.02);">
|
|
554
|
+
<div style="text-align:left;">
|
|
555
|
+
<div style="font-size:22px;font-weight:800;letter-spacing:-0.03em;line-height:1.1;">$149<span style="font-size:13px;font-weight:600;color:var(--text-muted);">/yr</span> <span style="font-size:11px;color:#4ade80;background:rgba(74,222,128,0.14);padding:2px 7px;border-radius:999px;font-weight:700;vertical-align:middle;margin-left:4px;">SAVE 35%</span></div>
|
|
556
|
+
<div style="font-size:12px;color:var(--text-muted);margin-top:2px;">Annual Pro</div>
|
|
557
|
+
</div>
|
|
558
|
+
<a href="/checkout/pro?utm_source=website&utm_medium=hero_pricing_card&utm_campaign=pro_pack&cta_id=hero_pro_annual&cta_placement=hero_pricing&plan_id=pro&billing_cycle=annual&landing_path=%2F" onclick="posthog.capture('hero_pricing_annual_click',{cta:'choose_annual'})" style="display:inline-flex;align-items:center;gap:6px;padding:11px 20px;background:rgba(17,17,19,0.75);color:var(--text);border:1px solid var(--border);border-radius:999px;text-decoration:none;font-weight:700;font-size:14px;white-space:nowrap;">Choose annual โ</a>
|
|
559
|
+
</div>
|
|
560
|
+
</div>
|
|
561
|
+
<p style="margin:14px 0 0;font-size:11px;color:var(--text-muted);text-align:center;">No credit card for 7-day trial ยท cancel anytime ยท your rules and captures stay local. <a href="/go/install" style="color:var(--cyan);text-decoration:none;">Prefer free? Install CLI โ</a></p>
|
|
562
|
+
</div>
|
|
563
|
+
|
|
531
564
|
<a href="/dashboard" class="hero-dashboard-preview" style="display:block;max-width:620px;margin:0 auto 28px;background:linear-gradient(135deg,#0d1220 0%,#121a2e 100%);border:1px solid rgba(34,211,238,0.35);border-radius:12px;padding:20px 24px;box-shadow:0 0 48px rgba(34,211,238,0.15);font-family:var(--mono);text-align:left;text-decoration:none;color:inherit;" title="Open your live dashboard">
|
|
532
565
|
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:var(--text-muted);">
|
|
533
566
|
<span>Your dashboard ยท <span style="color:#eab308;background:rgba(234,179,8,0.1);padding:2px 6px;border-radius:3px;letter-spacing:0.04em;">Sample</span></span>
|
|
@@ -554,9 +587,9 @@ __GA_BOOTSTRAP__
|
|
|
554
587
|
})();
|
|
555
588
|
</script>
|
|
556
589
|
<div class="hero-signals">
|
|
557
|
-
<
|
|
558
|
-
<
|
|
559
|
-
<
|
|
590
|
+
<a class="signal-pill signal-down" href="#how-it-works" title="See how gate interception works">Block repeat hallucinations before the model sees them</a>
|
|
591
|
+
<a class="signal-pill signal-up" href="#how-it-works" title="See the one-thumbs-down enforcement loop">Thumbs-down once, blocked forever, across every agent</a>
|
|
592
|
+
<a class="signal-pill" href="#install" title="Install the CLI">CLI-first workflow governance with a live tokens-saved counter</a>
|
|
560
593
|
</div>
|
|
561
594
|
<p class="hero-persona" style="display:none">For consultancies, platform teams, and AI product teams with one workflow owner, one repeated failure, and one buyer who needs proof before a wider rollout.</p>
|
|
562
595
|
<div class="hero-actions" style="margin-top:32px;">
|
|
@@ -571,6 +604,7 @@ __GA_BOOTSTRAP__
|
|
|
571
604
|
<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('hero_claude_extension_click',{cta:'install_claude_extension'})" style="font-size:12px;padding:8px 16px;background:#d97706;color:#fff;box-shadow:none;">Install Claude Extension</a>
|
|
572
605
|
<a href="/go/github?utm_source=website&utm_medium=hero_cta&utm_campaign=github_repo&cta_id=hero_star_github&cta_placement=hero" target="_blank" rel="noopener" class="btn-free" style="display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;font-size:12px;">โญ Star on GitHub</a>
|
|
573
606
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" class="btn-install-link" target="_blank" rel="noopener" onclick="posthog.capture('hero_codex_plugin_click',{cta:'install_codex_plugin'})" style="font-size:11px;color:var(--text-muted);text-decoration:none;padding:6px 10px;">Install Codex plugin โ</a>
|
|
607
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/tree/main/plugins/cursor-marketplace" class="btn-install-link" target="_blank" rel="noopener" onclick="posthog.capture('hero_cursor_plugin_click',{cta:'install_cursor_plugin'})" style="font-size:11px;color:var(--text-muted);text-decoration:none;padding:6px 10px;">Install Cursor plugin โ</a>
|
|
574
608
|
<a href="/go/gpt?utm_source=website&utm_medium=hero_cta&utm_campaign=chatgpt_gpt&cta_id=hero_open_gpt&cta_placement=hero" class="btn-gpt-page" target="_blank" rel="noopener" onclick="posthog.capture('hero_cta_click',{cta:'open_gpt'})" style="font-size:11px;padding:6px 12px;background:transparent;border:1px solid rgba(74,222,128,0.3);color:var(--green);">Open ThumbGate GPT</a>
|
|
575
609
|
</div>
|
|
576
610
|
</div>
|
|
@@ -594,7 +628,7 @@ __GA_BOOTSTRAP__
|
|
|
594
628
|
<div class="first-gate-steps">
|
|
595
629
|
<div class="first-gate-step">
|
|
596
630
|
<strong>1. Install ThumbGate</strong>
|
|
597
|
-
<p>Run <code>npx thumbgate init</code> in your repo. Or install the <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" style="color:var(--cyan);">Claude Extension</a>, <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" style="color:var(--cyan);">Codex plugin</a>, or <a href="/go/gpt" style="color:var(--cyan);">open the GPT</a>. Native ChatGPT rating buttons are not the ThumbGate capture path.</p>
|
|
631
|
+
<p>Run <code>npx thumbgate init</code> in your repo. Or install the <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" style="color:var(--cyan);">Claude Extension</a>, <a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" style="color:var(--cyan);">Codex plugin</a>, <a href="https://github.com/IgorGanapolsky/ThumbGate/tree/main/plugins/cursor-marketplace" style="color:var(--cyan);">Cursor plugin</a>, or <a href="/go/gpt" style="color:var(--cyan);">open the GPT</a>. Native ChatGPT rating buttons are not the ThumbGate capture path.</p>
|
|
598
632
|
</div>
|
|
599
633
|
<div class="first-gate-step">
|
|
600
634
|
<strong>2. Give feedback</strong>
|
|
@@ -701,7 +735,7 @@ __GA_BOOTSTRAP__
|
|
|
701
735
|
</div>
|
|
702
736
|
<div style="display:flex;gap:12px;flex-wrap:wrap;">
|
|
703
737
|
<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('claude_section_extension_click',{cta:'install_claude_extension'})" style="background:#d97706;color:#fff;">Download Claude Extension (.mcpb)</a>
|
|
704
|
-
<a href="/
|
|
738
|
+
<a href="/guide.html" class="btn-free" style="display:inline-flex;align-items:center;padding:12px 20px;border-radius:8px;">Claude Desktop setup guide</a>
|
|
705
739
|
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/.claude-plugin/README.md" class="btn-free" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;padding:12px 20px;border-radius:8px;">Claude plugin docs</a>
|
|
706
740
|
</div>
|
|
707
741
|
<p class="gpt-note"><strong>Claude Code Skill:</strong> Type <code>/thumbgate</code> in any Claude Code session. Auto-triggers on โgateโ, โfeedbackโ, โblock mistakeโ. Free skill on top of the same local gateway.</p>
|
|
@@ -744,30 +778,40 @@ __GA_BOOTSTRAP__
|
|
|
744
778
|
<div class="section-label">Compatibility</div>
|
|
745
779
|
<h2 class="section-title">One gateway across the agent surfaces you already use</h2>
|
|
746
780
|
<div class="compatibility-grid">
|
|
747
|
-
<a class="compat-card" href="/
|
|
781
|
+
<a class="compat-card" href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-claude-desktop.mcpb" target="_blank" rel="noopener" onclick="if(typeof posthog!=='undefined')posthog.capture('compat_claude_desktop_click',{cta:'download_claude_desktop'})" style="border-color:rgba(217,119,6,0.3);background:linear-gradient(135deg, rgba(217,119,6,0.06) 0%, var(--bg-card) 100%);">
|
|
748
782
|
<h3>๐งฉ Claude Desktop Extension</h3>
|
|
749
|
-
<p>Install the published Claude Desktop plugin <code>.mcpb</code> bundle today. Claude Code users can add the repo marketplace immediately with <code>/plugin marketplace add</code>. No waiting for directory approval
|
|
750
|
-
<div class="card-arrow" style="color:#d97706;">
|
|
783
|
+
<p>Install the published Claude Desktop plugin <code>.mcpb</code> bundle today. Claude Code users can add the repo marketplace immediately with <code>/plugin marketplace add</code>. No waiting for directory approval. <a href="/guide.html" style="color:var(--text-muted);text-decoration:underline;" onclick="event.stopPropagation();">60-second setup guide โ</a></p>
|
|
784
|
+
<div class="card-arrow" style="color:#d97706;">Download .mcpb bundle โ</div>
|
|
751
785
|
</a>
|
|
752
|
-
<a class="compat-card seo-card" href="
|
|
786
|
+
<a class="compat-card seo-card" href="/guides/claude-code-prevent-repeated-mistakes.html" rel="noopener">
|
|
753
787
|
<h3>โก Claude Code Skill</h3>
|
|
754
788
|
<p>Type <code>/thumbgate</code> in any Claude Code session. Auto-triggers on "gate", "feedback", "block mistake". Free skill on top of the same local gateway teams later harden into a shared workflow.</p>
|
|
755
|
-
<div class="card-arrow">
|
|
789
|
+
<div class="card-arrow">Read the Claude Code guide โ</div>
|
|
756
790
|
</a>
|
|
757
|
-
<a class="compat-card" href="
|
|
791
|
+
<a class="compat-card" href="/guide.html" rel="noopener">
|
|
758
792
|
<h3>๐ค AI CLIs</h3>
|
|
759
793
|
<p>Claude Code, Codex, Gemini CLI, Amp, and OpenCode all use the same gateway and memory model. Any MCP-compatible agent gets pre-action gates, feedback memory, and enforcement out of the box.</p>
|
|
760
|
-
<div class="card-arrow">
|
|
794
|
+
<div class="card-arrow">Open the setup guide โ</div>
|
|
761
795
|
</a>
|
|
762
|
-
<a class="compat-card" href="https://github.com/IgorGanapolsky/ThumbGate/
|
|
796
|
+
<a class="compat-card" href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" target="_blank" rel="noopener" onclick="if(typeof posthog!=='undefined')posthog.capture('compat_codex_plugin_click',{cta:'download_codex_plugin'})">
|
|
763
797
|
<h3>๐งฉ Codex plugin</h3>
|
|
764
|
-
<p>Codex ships with a published standalone ThumbGate plugin bundle plus a repo-local plugin profile. Download the zip, extract it, and install without wiring MCP by hand
|
|
765
|
-
<div class="card-arrow">
|
|
798
|
+
<p>Codex ships with a published standalone ThumbGate plugin bundle plus a repo-local plugin profile. Download the zip, extract it, and install without wiring MCP by hand. <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/plugins/codex-profile/INSTALL.md" target="_blank" rel="noopener" style="color:var(--text-muted);text-decoration:underline;" onclick="event.stopPropagation();">Setup instructions โ</a></p>
|
|
799
|
+
<div class="card-arrow">Download the Codex plugin โ</div>
|
|
766
800
|
</a>
|
|
767
|
-
<a class="compat-card" href="
|
|
801
|
+
<a class="compat-card" href="/guides/cursor-prevent-repeated-mistakes.html" rel="noopener">
|
|
802
|
+
<h3>๐ฏ Cursor plugin</h3>
|
|
803
|
+
<p>Drop the ThumbGate MCP config into <code>.cursor/mcp.json</code> and Cursor gets the same pre-action gates as Claude Code and Codex. Ships with bundled rules, commands, hooks, and agents.</p>
|
|
804
|
+
<div class="card-arrow">Read the Cursor guide โ</div>
|
|
805
|
+
</a>
|
|
806
|
+
<a class="compat-card" href="/guide.html" rel="noopener">
|
|
768
807
|
<h3>โ๏ธ Editor workflows</h3>
|
|
769
|
-
<p>
|
|
770
|
-
<div class="card-arrow">
|
|
808
|
+
<p>VS Code works when you run an MCP-compatible agent inside it (Continue, Cline, etc.). Any editor that speaks MCP stdio gets the same gateway.</p>
|
|
809
|
+
<div class="card-arrow">Open the setup guide โ</div>
|
|
810
|
+
</a>
|
|
811
|
+
<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'})">
|
|
812
|
+
<h3>๐๏ธ MCP Server Directory</h3>
|
|
813
|
+
<p>ThumbGate is listed on <code>mcp.so</code> โ the largest public MCP server directory. Install via Smithery CLI, copy-paste config for your client, or verify it's a legitimate server before running it.</p>
|
|
814
|
+
<div class="card-arrow">View on mcp.so โ</div>
|
|
771
815
|
</a>
|
|
772
816
|
<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">
|
|
773
817
|
<h3>๐ฌ ChatGPT GPT Actions</h3>
|
|
@@ -872,7 +916,7 @@ __GA_BOOTSTRAP__
|
|
|
872
916
|
<!-- HOW IT WORKS -->
|
|
873
917
|
<section class="how-it-works" id="how-it-works">
|
|
874
918
|
<div class="container">
|
|
875
|
-
<div class="section-label">New in v1.5.
|
|
919
|
+
<div class="section-label">New in v1.5.8</div>
|
|
876
920
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
877
921
|
<div class="steps">
|
|
878
922
|
<div class="step">
|
|
@@ -1228,7 +1272,7 @@ __GA_BOOTSTRAP__
|
|
|
1228
1272
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
1229
1273
|
<a href="/blog">Blog</a>
|
|
1230
1274
|
</div>
|
|
1231
|
-
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.5.
|
|
1275
|
+
<span class="footer-copy">ยฉ 2026 Max Smith KDP LLC ยท MIT License ยท v1.5.8</span>
|
|
1232
1276
|
</div>
|
|
1233
1277
|
</footer>
|
|
1234
1278
|
|
|
@@ -0,0 +1,274 @@
|
|
|
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
|
+
<title>Learn โ AI Agent Safety, Pre-Action Gates, and Vibe Coding Guardrails</title>
|
|
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 gates, 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 gates, vibe coding guardrails, Claude Code mistakes, Cursor agent memory, MCP server hooks, AI coding agent feedback, ThumbGate guides">
|
|
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 gates and feedback-driven enforcement.">
|
|
12
|
+
<meta property="og:type" content="website">
|
|
13
|
+
<meta property="og:url" content="https://thumbgate-production.up.railway.app/learn">
|
|
14
|
+
<link rel="canonical" href="https://thumbgate-production.up.railway.app/learn">
|
|
15
|
+
|
|
16
|
+
<script type="application/ld+json">
|
|
17
|
+
{
|
|
18
|
+
"@context": "https://schema.org",
|
|
19
|
+
"@type": "CollectionPage",
|
|
20
|
+
"name": "ThumbGate Learning Hub",
|
|
21
|
+
"description": "Practical guides for AI coding agent safety, pre-action gates, and vibe coding guardrails.",
|
|
22
|
+
"url": "https://thumbgate-production.up.railway.app/learn",
|
|
23
|
+
"publisher": {
|
|
24
|
+
"@type": "Organization",
|
|
25
|
+
"name": "ThumbGate",
|
|
26
|
+
"url": "https://thumbgate-production.up.railway.app"
|
|
27
|
+
},
|
|
28
|
+
"mainEntity": {
|
|
29
|
+
"@type": "ItemList",
|
|
30
|
+
"itemListElement": [
|
|
31
|
+
{
|
|
32
|
+
"@type": "ListItem",
|
|
33
|
+
"position": 1,
|
|
34
|
+
"url": "https://thumbgate-production.up.railway.app/learn/stop-ai-agent-force-push",
|
|
35
|
+
"name": "How to Stop AI Agents From Force-Pushing to Main"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"@type": "ListItem",
|
|
39
|
+
"position": 2,
|
|
40
|
+
"url": "https://thumbgate-production.up.railway.app/learn/vibe-coding-safety-net",
|
|
41
|
+
"name": "The Vibe Coding Safety Net You Are Missing"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"@type": "ListItem",
|
|
45
|
+
"position": 3,
|
|
46
|
+
"url": "https://thumbgate-production.up.railway.app/learn/mcp-pre-action-gates-explained",
|
|
47
|
+
"name": "MCP Pre-Action Gates Explained"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"@type": "ListItem",
|
|
51
|
+
"position": 4,
|
|
52
|
+
"url": "https://thumbgate-production.up.railway.app/learn/agent-harness-pattern",
|
|
53
|
+
"name": "The Agent Harness Pattern: Why Your AI Needs a Seatbelt"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"@type": "ListItem",
|
|
57
|
+
"position": 5,
|
|
58
|
+
"url": "https://thumbgate-production.up.railway.app/learn/ai-agent-persistent-memory",
|
|
59
|
+
"name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"@type": "ListItem",
|
|
63
|
+
"position": 6,
|
|
64
|
+
"url": "https://thumbgate-production.up.railway.app/guides/stop-repeated-ai-agent-mistakes",
|
|
65
|
+
"name": "How to Stop AI Coding Agents From Repeating Mistakes"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"@type": "ListItem",
|
|
69
|
+
"position": 7,
|
|
70
|
+
"url": "https://thumbgate-production.up.railway.app/guides/cursor-agent-guardrails",
|
|
71
|
+
"name": "Cursor Guardrails That Block Repeated Mistakes"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"@type": "ListItem",
|
|
75
|
+
"position": 8,
|
|
76
|
+
"url": "https://thumbgate-production.up.railway.app/guides/codex-cli-guardrails",
|
|
77
|
+
"name": "Codex CLI Guardrails That Actually Enforce"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"@type": "ListItem",
|
|
81
|
+
"position": 9,
|
|
82
|
+
"url": "https://thumbgate-production.up.railway.app/guides/gemini-cli-feedback-memory",
|
|
83
|
+
"name": "Gemini CLI Feedback Memory That Leads to Enforcement"
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<style>
|
|
91
|
+
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
92
|
+
:root {
|
|
93
|
+
--bg: #0a0a0b;
|
|
94
|
+
--bg-card: #161618;
|
|
95
|
+
--bg-raised: #111113;
|
|
96
|
+
--border: #222225;
|
|
97
|
+
--text: #e8e8ec;
|
|
98
|
+
--muted: #8b8b94;
|
|
99
|
+
--cyan: #22d3ee;
|
|
100
|
+
--green: #34d399;
|
|
101
|
+
--red: #f87171;
|
|
102
|
+
}
|
|
103
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); line-height: 1.7; }
|
|
104
|
+
.container { max-width: 780px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
|
|
105
|
+
nav { padding: 1rem 2rem; border-bottom: 1px solid var(--border); display: flex; gap: 1.5rem; align-items: center; }
|
|
106
|
+
nav a { color: var(--muted); text-decoration: none; font-size: 0.9rem; }
|
|
107
|
+
nav a:hover { color: var(--cyan); }
|
|
108
|
+
nav .brand { color: var(--text); font-weight: 700; font-size: 1.1rem; }
|
|
109
|
+
h1 { font-size: 2.2rem; line-height: 1.2; margin: 2rem 0 1rem; }
|
|
110
|
+
h2 { font-size: 1.5rem; margin: 2.5rem 0 1rem; color: var(--cyan); }
|
|
111
|
+
p { color: var(--text); margin-bottom: 0.75rem; }
|
|
112
|
+
.hero-sub { color: var(--muted); font-size: 1.1rem; max-width: 600px; margin-bottom: 2rem; }
|
|
113
|
+
.section-intro { color: var(--muted); margin-bottom: 1rem; }
|
|
114
|
+
|
|
115
|
+
.article-grid { display: grid; grid-template-columns: 1fr; gap: 24px; margin-top: 2rem; }
|
|
116
|
+
.article-card {
|
|
117
|
+
background: var(--bg-card);
|
|
118
|
+
border: 1px solid var(--border);
|
|
119
|
+
border-radius: 12px;
|
|
120
|
+
padding: 28px;
|
|
121
|
+
text-decoration: none;
|
|
122
|
+
display: block;
|
|
123
|
+
transition: border-color 0.2s, transform 0.15s;
|
|
124
|
+
}
|
|
125
|
+
.article-card:hover {
|
|
126
|
+
border-color: rgba(34,211,238,0.3);
|
|
127
|
+
transform: translateY(-2px);
|
|
128
|
+
}
|
|
129
|
+
.article-card h3 {
|
|
130
|
+
font-size: 1.25rem;
|
|
131
|
+
color: var(--text);
|
|
132
|
+
margin-bottom: 8px;
|
|
133
|
+
}
|
|
134
|
+
.article-card p {
|
|
135
|
+
color: var(--muted);
|
|
136
|
+
font-size: 0.95rem;
|
|
137
|
+
margin-bottom: 12px;
|
|
138
|
+
}
|
|
139
|
+
.article-tag {
|
|
140
|
+
display: inline-block;
|
|
141
|
+
font-size: 0.75rem;
|
|
142
|
+
font-weight: 600;
|
|
143
|
+
padding: 3px 10px;
|
|
144
|
+
border-radius: 999px;
|
|
145
|
+
border: 1px solid var(--border);
|
|
146
|
+
color: var(--cyan);
|
|
147
|
+
background: rgba(34,211,238,0.06);
|
|
148
|
+
margin-right: 6px;
|
|
149
|
+
}
|
|
150
|
+
.cta-section {
|
|
151
|
+
margin-top: 3rem;
|
|
152
|
+
padding: 2rem;
|
|
153
|
+
background: var(--bg-raised);
|
|
154
|
+
border: 1px solid var(--border);
|
|
155
|
+
border-radius: 12px;
|
|
156
|
+
text-align: center;
|
|
157
|
+
}
|
|
158
|
+
.cta-section p { color: var(--muted); margin-bottom: 1rem; }
|
|
159
|
+
.cta-install {
|
|
160
|
+
display: inline-block;
|
|
161
|
+
background: var(--bg-card);
|
|
162
|
+
border: 1px solid var(--border);
|
|
163
|
+
border-radius: 8px;
|
|
164
|
+
padding: 10px 20px;
|
|
165
|
+
font-family: 'SF Mono', 'Cascadia Code', 'JetBrains Mono', Consolas, monospace;
|
|
166
|
+
font-size: 0.95rem;
|
|
167
|
+
color: var(--cyan);
|
|
168
|
+
}
|
|
169
|
+
@media (max-width: 700px) {
|
|
170
|
+
h1 { font-size: 1.6rem; }
|
|
171
|
+
.container { padding: 1.5rem 1rem 3rem; }
|
|
172
|
+
}
|
|
173
|
+
</style>
|
|
174
|
+
</head>
|
|
175
|
+
<body>
|
|
176
|
+
|
|
177
|
+
<nav>
|
|
178
|
+
<a href="/" class="brand">๐๐ ThumbGate</a>
|
|
179
|
+
<a href="/guide">Setup Guide</a>
|
|
180
|
+
<a href="/learn">Learn</a>
|
|
181
|
+
<a href="/dashboard">Dashboard</a>
|
|
182
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
183
|
+
</nav>
|
|
184
|
+
|
|
185
|
+
<div class="container">
|
|
186
|
+
<h1>Learn: AI Agent Safety</h1>
|
|
187
|
+
<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>
|
|
188
|
+
|
|
189
|
+
<div class="article-grid">
|
|
190
|
+
<a href="/learn/stop-ai-agent-force-push" class="article-card">
|
|
191
|
+
<h3>How to Stop AI Agents From Force-Pushing to Main</h3>
|
|
192
|
+
<p>Your agent just ran git push --force on main. Again. Here is how to make that physically impossible with a pre-action gate that takes two minutes to set up.</p>
|
|
193
|
+
<span class="article-tag">Claude Code</span>
|
|
194
|
+
<span class="article-tag">Git Safety</span>
|
|
195
|
+
<span class="article-tag">Pre-Action Gates</span>
|
|
196
|
+
</a>
|
|
197
|
+
|
|
198
|
+
<a href="/learn/vibe-coding-safety-net" class="article-card">
|
|
199
|
+
<h3>The Vibe Coding Safety Net You Are Missing</h3>
|
|
200
|
+
<p>Vibe coding is fast until your agent deletes a production table or rewrites a file you did not ask it to touch. This guide shows how to add guardrails without slowing down.</p>
|
|
201
|
+
<span class="article-tag">Vibe Coding</span>
|
|
202
|
+
<span class="article-tag">Guardrails</span>
|
|
203
|
+
<span class="article-tag">MCP</span>
|
|
204
|
+
</a>
|
|
205
|
+
|
|
206
|
+
<a href="/learn/mcp-pre-action-gates-explained" class="article-card">
|
|
207
|
+
<h3>MCP Pre-Action Gates Explained</h3>
|
|
208
|
+
<p>What pre-action gates 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>
|
|
209
|
+
<span class="article-tag">MCP</span>
|
|
210
|
+
<span class="article-tag">PreToolUse</span>
|
|
211
|
+
<span class="article-tag">Technical</span>
|
|
212
|
+
</a>
|
|
213
|
+
<a href="/learn/agent-harness-pattern" class="article-card">
|
|
214
|
+
<h3>The Agent Harness Pattern: Why Your AI Needs a Seatbelt</h3>
|
|
215
|
+
<p>Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification gates, and durable state. ThumbGate implements this pattern in production today.</p>
|
|
216
|
+
<span class="article-tag">Research</span>
|
|
217
|
+
<span class="article-tag">Agent Harness</span>
|
|
218
|
+
<span class="article-tag">NLAH</span>
|
|
219
|
+
</a>
|
|
220
|
+
|
|
221
|
+
<a href="/learn/ai-agent-persistent-memory" class="article-card">
|
|
222
|
+
<h3>How to Give Your AI Coding Agent Persistent Memory Across Sessions</h3>
|
|
223
|
+
<p>Your agent forgets everything when the session ends. Here is how to give Claude Code, Cursor, Codex, and Gemini memory that survives restarts โ without retraining.</p>
|
|
224
|
+
<span class="article-tag">Memory</span>
|
|
225
|
+
<span class="article-tag">SQLite+FTS5</span>
|
|
226
|
+
<span class="article-tag">Session Persistence</span>
|
|
227
|
+
</a>
|
|
228
|
+
</div>
|
|
229
|
+
|
|
230
|
+
<h2>Popular buyer questions</h2>
|
|
231
|
+
<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>
|
|
232
|
+
<div class="article-grid">
|
|
233
|
+
<a href="/guides/stop-repeated-ai-agent-mistakes" class="article-card">
|
|
234
|
+
<h3>How to Stop AI Coding Agents From Repeating Mistakes</h3>
|
|
235
|
+
<p>The fastest explanation of why memory alone is not enough when your agent keeps making the same bad move twice.</p>
|
|
236
|
+
<span class="article-tag">Repeat Failures</span>
|
|
237
|
+
<span class="article-tag">Guardrails</span>
|
|
238
|
+
<span class="article-tag">Buyer Guide</span>
|
|
239
|
+
</a>
|
|
240
|
+
|
|
241
|
+
<a href="/guides/cursor-agent-guardrails" class="article-card">
|
|
242
|
+
<h3>Cursor Guardrails That Block Repeated Mistakes</h3>
|
|
243
|
+
<p>For Cursor users who need to keep speed while adding a runtime enforcement layer that does more than prompt politely.</p>
|
|
244
|
+
<span class="article-tag">Cursor</span>
|
|
245
|
+
<span class="article-tag">Guardrails</span>
|
|
246
|
+
<span class="article-tag">Integration</span>
|
|
247
|
+
</a>
|
|
248
|
+
|
|
249
|
+
<a href="/guides/codex-cli-guardrails" class="article-card">
|
|
250
|
+
<h3>Codex CLI Guardrails That Actually Enforce</h3>
|
|
251
|
+
<p>Why operators looking for Codex CLI guardrails are really looking for a feedback-to-enforcement loop they can trust.</p>
|
|
252
|
+
<span class="article-tag">Codex</span>
|
|
253
|
+
<span class="article-tag">CLI</span>
|
|
254
|
+
<span class="article-tag">Reliability</span>
|
|
255
|
+
</a>
|
|
256
|
+
|
|
257
|
+
<a href="/guides/gemini-cli-feedback-memory" class="article-card">
|
|
258
|
+
<h3>Gemini CLI Feedback Memory That Leads to Enforcement</h3>
|
|
259
|
+
<p>A memory-first buyer path for Gemini CLI users who will eventually care about gates, proof, and operational control.</p>
|
|
260
|
+
<span class="article-tag">Gemini</span>
|
|
261
|
+
<span class="article-tag">Memory</span>
|
|
262
|
+
<span class="article-tag">Enforcement</span>
|
|
263
|
+
</a>
|
|
264
|
+
</div>
|
|
265
|
+
|
|
266
|
+
<div class="cta-section">
|
|
267
|
+
<h2 style="color:var(--text);font-size:1.3rem;margin:0 0 8px;">Ready to try it?</h2>
|
|
268
|
+
<p>One command. Works with Claude Code, Cursor, Codex, Gemini, Amp, and any MCP agent.</p>
|
|
269
|
+
<div class="cta-install">$ npx thumbgate init</div>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
</body>
|
|
274
|
+
</html>
|