thumbgate 1.23.1 → 1.25.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 +5 -5
- package/.claude-plugin/plugin.json +2 -2
- package/.well-known/llms.txt +26 -11
- package/.well-known/mcp/server-card.json +8 -8
- package/README.md +84 -38
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +1 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +39 -16
- package/bin/postinstall.js +11 -22
- package/config/gate-templates.json +72 -0
- package/config/github-about.json +1 -1
- package/config/post-deploy-marketing-pages.json +6 -1
- package/package.json +20 -8
- package/public/agent-manager.html +3 -3
- package/public/agents-cost-savings.html +3 -3
- package/public/ai-malpractice-prevention.html +335 -7
- package/public/blog.html +3 -3
- package/public/codex-enterprise.html +3 -3
- package/public/codex-plugin.html +4 -4
- package/public/compare.html +6 -6
- package/public/dashboard.html +211 -126
- package/public/guide.html +5 -5
- package/public/index.html +156 -47
- package/public/learn.html +24 -10
- package/public/lessons.html +2 -2
- package/public/numbers.html +6 -6
- package/public/pricing.html +6 -5
- package/public/pro.html +1 -0
- package/scripts/billing.js +17 -0
- package/scripts/commercial-offer.js +4 -1
- package/scripts/dashboard.js +53 -1
- package/scripts/gates-engine.js +101 -16
- package/scripts/mcp-oauth.js +293 -0
- package/scripts/plausible-server-events.js +2 -1
- package/scripts/rate-limiter.js +16 -12
- package/scripts/security-scanner.js +80 -10
- package/scripts/seo-gsd.js +167 -1
- package/scripts/telemetry-analytics.js +310 -0
- package/scripts/tool-registry.js +35 -1
- package/scripts/vector-store.js +1 -0
- package/scripts/visitor-journey.js +172 -0
- package/src/api/server.js +226 -31
- package/adapters/chatgpt/openapi.yaml +0 -1705
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
<meta property="og:title" content="Pre-Execution Controls for Legal AI Agents">
|
|
10
10
|
<meta property="og:description" content="ThumbGate preloads firm-approved ground truth, checks legal AI actions before execution, and records audit evidence for law-firm innovation, risk, and pricing teams.">
|
|
11
11
|
<meta property="og:type" content="article">
|
|
12
|
-
<meta property="og:image" content="https://thumbgate
|
|
13
|
-
<link rel="canonical" href="https://thumbgate
|
|
12
|
+
<meta property="og:image" content="https://thumbgate.ai/og.png">
|
|
13
|
+
<link rel="canonical" href="https://thumbgate.ai/ai-malpractice-prevention">
|
|
14
14
|
<script type="application/ld+json">
|
|
15
15
|
{
|
|
16
16
|
"@context": "https://schema.org",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"datePublished": "2026-05-21",
|
|
21
21
|
"dateModified": "2026-05-25",
|
|
22
22
|
"author": { "@type": "Person", "name": "Igor Ganapolsky", "url": "https://github.com/IgorGanapolsky" },
|
|
23
|
-
"publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate
|
|
23
|
+
"publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate.ai" },
|
|
24
24
|
"about": [
|
|
25
25
|
{ "@type": "Thing", "name": "Legal AI Governance" },
|
|
26
26
|
{ "@type": "Thing", "name": "Unauthorized Practice of Law" },
|
|
@@ -280,13 +280,16 @@
|
|
|
280
280
|
.matrix td:nth-child(2)::before { content: "Pilot answer"; }
|
|
281
281
|
.matrix td:nth-child(3)::before { content: "Evidence to bring"; }
|
|
282
282
|
}
|
|
283
|
+
.demo-result { margin-top:1rem; padding:1rem; border-radius:8px; font-size:0.95rem; }
|
|
284
|
+
.demo-blocked { background:rgba(248,113,113,0.1); border:1px solid var(--red); }
|
|
285
|
+
.demo-cleared { background:rgba(52,211,153,0.1); border:1px solid var(--green); }
|
|
286
|
+
.audit-log { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size:0.85rem; background:#0f0f11; padding:0.75rem; border-radius:6px; margin-top:0.75rem; white-space:pre-wrap; color:var(--soft); }
|
|
283
287
|
</style>
|
|
284
288
|
</head>
|
|
285
289
|
<body>
|
|
286
290
|
<nav>
|
|
287
|
-
<a href="/" class="brand">ThumbGate</a>
|
|
291
|
+
<a href="/ai-malpractice-prevention" class="brand">ThumbGate</a>
|
|
288
292
|
<a href="/agent-manager">Agent Manager</a>
|
|
289
|
-
<a href="/codex-enterprise">Codex Enterprise</a>
|
|
290
293
|
<a href="/agents-cost-savings">FinOps for Agents</a>
|
|
291
294
|
<a href="/dashboard">Dashboard demo</a>
|
|
292
295
|
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
@@ -295,13 +298,38 @@
|
|
|
295
298
|
<div class="wrap">
|
|
296
299
|
<header class="hero">
|
|
297
300
|
<div>
|
|
301
|
+
<div style="display: inline-block; border-left: 3px solid #fbbf24; background: rgba(251, 191, 36, 0.08); padding: 0.7rem 1rem; margin-bottom: 1.25rem; border-radius: 0 6px 6px 0; max-width: 760px;">
|
|
302
|
+
<strong style="color: #fbbf24; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.08em; display: block; margin-bottom: 0.25rem;">Why this matters now — 2026</strong>
|
|
303
|
+
<span style="color: var(--text); font-size: 0.95rem; line-height: 1.55;">Sullivan & Cromwell apologized to a federal judge for AI-hallucinated citations — despite policies, mandatory training, and verification requirements. Gordon Rees did the same on a bankruptcy filing. The <a href="https://www.damiencharlotin.com/hallucinations/" target="_blank" rel="noopener" style="color: #fbbf24">public hallucination-cases database</a> now catalogs <strong>1,369+ rulings</strong>. The firms with policies still got sanctioned. <em>Policies are not enforcement.</em> A runtime gate is.</span>
|
|
304
|
+
</div>
|
|
298
305
|
<span class="eyebrow">Pre-read for law-firm AI governance pilots</span>
|
|
299
306
|
<h1>Pre-execution controls for legal AI agents.</h1>
|
|
300
307
|
<p class="lead">Block unauthorized advice, conflict-check failures, privilege leaks, and unapproved model calls before an intake agent replies, fetches records, schedules a meeting, or sends data outside the firm's approved boundary.</p>
|
|
308
|
+
<p style="color: var(--soft); font-size: 0.98rem; max-width: 760px; margin: 0 0 1.1rem; padding: 0.7rem 1rem; border-left: 3px solid var(--green); background: rgba(114, 227, 165, 0.06); border-radius: 0 6px 6px 0;">
|
|
309
|
+
<strong style="color: var(--green)">Predictability you can put in front of a client.</strong>
|
|
310
|
+
Pre-execution controls aren't just defensive — they make agentic-AI deployment <em>predictable enough to sell</em>. Innovation teams at law firms have always had to choose between speed and certainty. The runtime gate lets you have both: the agent moves at machine speed, the gate enforces firm-specific policy deterministically, and every decision ships an audit log your pricing partners can underwrite. <strong style="color: var(--soft)">Predictability. Insights. Value.</strong> The three things your innovation team already promises clients — extended to the agentic surface.
|
|
311
|
+
</p>
|
|
312
|
+
<p style="color: var(--soft); font-size: 0.95rem; max-width: 760px; margin: 0 0 1rem; padding: 0.55rem 0.85rem; border-left: 3px solid var(--cyan); background: rgba(45, 212, 191, 0.05); border-radius: 0 6px 6px 0;">
|
|
313
|
+
<strong style="color: var(--cyan)">The gate learns from your attorneys.</strong>
|
|
314
|
+
Every 👍 / 👎 an attorney logs on an AI answer becomes a lesson in your firm's local DB. Recurring patterns promote to deterministic rules. The next time a similar action is proposed, the rule fires before any human is asked to approve.
|
|
315
|
+
<a href="/learn/feedback-loop-vs-decision-layer" style="color: var(--cyan); white-space: nowrap;">How the feedback loop works →</a>
|
|
316
|
+
</p>
|
|
317
|
+
<p style="color: var(--soft); font-size: 0.95rem; max-width: 760px; margin: 0 0 1.1rem; padding: 0.7rem 1rem; border-left: 3px solid #a78bfa; background: rgba(167, 139, 250, 0.06); border-radius: 0 6px 6px 0;">
|
|
318
|
+
<strong style="color: #a78bfa">No public-facing chatbot? You still have the risk surface.</strong>
|
|
319
|
+
Most BigLaw firms don't take client intake through a chatbot — but their associates already paste matter context into Claude, Cursor, Codex, and internal LLM gateways every day. The risk isn't a bot giving public advice; it's <em>internal</em> agent use the firm can't see. ThumbGate sits between each agent and its next action, captures attorney 👍/👎 on every output, and produces a <strong style="color: var(--soft)">searchable audit log + RAG of every gated detection</strong> — queryable by ethics, risk, and innovation owners. Your conflicts DB and document systems stay where they are; we instrument what the agents inside the firm are about to do.
|
|
320
|
+
</p>
|
|
321
|
+
<p style="color: var(--soft); font-size: 0.95rem; max-width: 760px; margin: 0 0 1.1rem; padding: 0.7rem 1rem; border-left: 3px solid #f59e0b; background: rgba(245, 158, 11, 0.06); border-radius: 0 6px 6px 0;">
|
|
322
|
+
<strong style="color: #f59e0b">Already piloting an AI case tool? It makes agents capable — ThumbGate makes them auditable.</strong>
|
|
323
|
+
Litigation & arbitration teams and in-house counsel are adopting AI case-intelligence and drafting copilots that touch privileged correspondence, pleadings, and matter files. Those tools make the agent <em>capable</em>; they don't give risk, ethics, and innovation owners a control point or a defensible record of what the agent was about to do. ThumbGate is the governance layer <em>around</em> them — a deterministic gate on the next action, attorney 👍/👎 promoted to firm rules, and an exportable audit trail — the evidence procurement (and your professional-liability review) actually ask for before agents run on multi-million-dollar matters.
|
|
324
|
+
</p>
|
|
301
325
|
<div class="hero-actions">
|
|
302
326
|
<a class="cta" href="mailto:iganapolsky@gmail.com?subject=ThumbGate%2025-minute%20legal%20AI%20pilot%20walkthrough&body=Hi%20Igor%2C%0A%0AWe%27d%20like%20to%20review%20the%2025-minute%20ThumbGate%20legal%20AI%20intake%20pilot.%20Please%20send%20the%20meeting%20invite%20and%20demo%20materials.%0A%0ABest%2C">Book a 25-minute pilot walkthrough</a>
|
|
327
|
+
<a class="ghost" href="#live-gate-demos">Try the live gates →</a>
|
|
303
328
|
<a class="ghost" href="#demo">View the 25-minute demo plan</a>
|
|
304
329
|
</div>
|
|
330
|
+
<p style="font-size: 0.85rem; color: var(--muted); margin: -0.5rem 0 1.2rem; max-width: 760px;">
|
|
331
|
+
Button not opening your mail client? <button type="button" onclick="__thumbgateCopyPilotEmail(this)" style="padding:0.35rem 0.7rem; font-size:0.85rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan); border-radius:5px; cursor:pointer; vertical-align: baseline;">Copy the email instead</button> or write to <span style="color: var(--text); user-select: all; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;">iganapolsky@gmail.com</span> directly.
|
|
332
|
+
</p>
|
|
305
333
|
<div class="proof-row" aria-label="Key proof points">
|
|
306
334
|
<div class="proof"><strong>Preloaded controls</strong><span>Firm policy, approved disclaimers, adverse-party lists, routing rules, and model endpoint allowlists.</span></div>
|
|
307
335
|
<div class="proof"><strong>Pre-action checks</strong><span>Controls run before the agent replies, fetches records, schedules intake, or calls an external model.</span></div>
|
|
@@ -352,7 +380,7 @@
|
|
|
352
380
|
<main>
|
|
353
381
|
<section>
|
|
354
382
|
<h2>Why this is credible now.</h2>
|
|
355
|
-
<p class="section-lead">The market is not waiting for perfect AI. Large firms are adopting legal AI while ethics, security, and innovation teams are still formalizing the controls around it. ThumbGate fits that gap: it is not another research assistant; it is a control point around the assistants and agents a firm already wants to evaluate.</p>
|
|
383
|
+
<p class="section-lead">The market is not waiting for perfect AI. Large firms are adopting legal AI while ethics, security, and innovation teams are still formalizing the controls around it. ThumbGate fits that gap: it is not another research assistant; it is a control point around the assistants and agents a firm already wants to evaluate. Governance has to live outside the model's context window. If the agent can reason around the rule, it is not really a rule.</p>
|
|
356
384
|
<div class="grid">
|
|
357
385
|
<div class="card">
|
|
358
386
|
<span class="tag blue">Governance</span>
|
|
@@ -372,6 +400,32 @@
|
|
|
372
400
|
</div>
|
|
373
401
|
</section>
|
|
374
402
|
|
|
403
|
+
<section>
|
|
404
|
+
<h2>The pilot is an AI-SDLC control layer, not a chatbot demo.</h2>
|
|
405
|
+
<p class="section-lead">The strongest buyer framing is simple: the firm may already have agents, copilots, research tools, and intake experiments. What it still needs is the system around those agents: triggers, isolated runs, approved context, visibility, and controls that live outside the model prompt.</p>
|
|
406
|
+
<div class="grid">
|
|
407
|
+
<div class="card">
|
|
408
|
+
<span class="tag blue">Trigger</span>
|
|
409
|
+
<h3>Define what starts legal AI work</h3>
|
|
410
|
+
<p>A pilot run should begin from a scoped intake event, not an open-ended prompt. The event carries practice area, jurisdiction, allowed tools, reviewer role, and done criteria.</p>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="card">
|
|
413
|
+
<span class="tag amber">Context</span>
|
|
414
|
+
<h3>Load only approved firm ground truth</h3>
|
|
415
|
+
<p>Disclaimers, adverse-party fixtures, model allowlists, routing policy, and supervision rules should be versioned inputs, not improvised chat context.</p>
|
|
416
|
+
</div>
|
|
417
|
+
<div class="card">
|
|
418
|
+
<span class="tag green">Controls</span>
|
|
419
|
+
<h3>Block before the action happens</h3>
|
|
420
|
+
<p>Pre-action gates stop advice-shaped replies, conflict-precheck bypass, and confidential egress before the agent sends, fetches, schedules, or calls out.</p>
|
|
421
|
+
</div>
|
|
422
|
+
</div>
|
|
423
|
+
<div class="callout" style="margin-top:1rem;">
|
|
424
|
+
<p><strong>Executive takeaway:</strong> ThumbGate does not ask a law firm to trust a bigger prompt. It gives risk, innovation, and security teams a reviewable control point between the agent and the next privileged action.</p>
|
|
425
|
+
<p><a href="/learn/background-agent-control-layer">Read the background-agent control-layer brief →</a></p>
|
|
426
|
+
</div>
|
|
427
|
+
</section>
|
|
428
|
+
|
|
375
429
|
<section>
|
|
376
430
|
<h2>Yes, the pilot can start with preloaded ground truth.</h2>
|
|
377
431
|
<p class="section-lead">The first pilot should not ask the model to discover the firm's risk posture. ThumbGate should load the approved rule pack before the first intake simulation, then prove that the agent is physically stopped when a proposed action violates that pack.</p>
|
|
@@ -476,8 +530,282 @@
|
|
|
476
530
|
<h2>Recommended 30-day pilot.</h2>
|
|
477
531
|
<p>Start narrow: one intake channel, one practice-area workflow, one adverse-party fixture, one approved-model routing policy, and one audit export format.</p>
|
|
478
532
|
<p>Deliverables: preloaded rule pack, demo agent, screenshot set, 60-second walkthrough clip, security data-flow note, pilot metrics, and a go/no-go rollout recommendation.</p>
|
|
479
|
-
<p
|
|
533
|
+
<p style="margin:1.2rem 0 0.6rem;color:var(--amber);font-size:1.1rem;font-weight:700;">Pilot setup fee: $2,500 – $7,500 flat (scope-dependent). No per-seat or per-query billing during the pilot.</p>
|
|
534
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0.75rem;margin:1.4rem 0 1rem;">
|
|
535
|
+
<div style="background:rgba(114,227,165,0.06);border-left:3px solid var(--green);padding:0.7rem 0.9rem;border-radius:0 6px 6px 0">
|
|
536
|
+
<strong style="color:var(--green);font-size:0.78rem;text-transform:uppercase;letter-spacing:0.08em;display:block;margin-bottom:0.3rem">What you walk away with</strong>
|
|
537
|
+
<span style="font-size:0.9rem;color:var(--soft)">A searchable audit log + RAG of every gated detection over 30 days, broken down by rule, agent, and disposition. Defensible in front of your risk committee.</span>
|
|
538
|
+
</div>
|
|
539
|
+
<div style="background:rgba(251,191,36,0.06);border-left:3px solid #fbbf24;padding:0.7rem 0.9rem;border-radius:0 6px 6px 0">
|
|
540
|
+
<strong style="color:#fbbf24;font-size:0.78rem;text-transform:uppercase;letter-spacing:0.08em;display:block;margin-bottom:0.3rem">What we don't claim</strong>
|
|
541
|
+
<span style="font-size:0.9rem;color:var(--soft)">Not SOC 2 today. Not BAA-ready as a blanket claim. No hallucination indemnity for third-party model output. Local-first deployment makes the pilot a no-client-data engagement.</span>
|
|
542
|
+
</div>
|
|
543
|
+
<div style="background:rgba(45,212,191,0.06);border-left:3px solid var(--cyan);padding:0.7rem 0.9rem;border-radius:0 6px 6px 0">
|
|
544
|
+
<strong style="color:var(--cyan);font-size:0.78rem;text-transform:uppercase;letter-spacing:0.08em;display:block;margin-bottom:0.3rem">What you bring</strong>
|
|
545
|
+
<span style="font-size:0.9rem;color:var(--soft)">One named owner, one workflow you're already evaluating AI on, your approved disclaimer language, and read-only access to whichever conflicts DB you already run.</span>
|
|
546
|
+
</div>
|
|
547
|
+
</div>
|
|
548
|
+
<div style="display:flex;gap:1rem;flex-wrap:wrap;margin-top:1rem;">
|
|
549
|
+
<a class="cta" href="mailto:iganapolsky@gmail.com?subject=ThumbGate%2025-minute%20legal%20AI%20pilot%20walkthrough&body=Hi%20Igor%2C%0A%0AWe%27d%20like%20to%20review%20the%2025-minute%20ThumbGate%20legal%20AI%20intake%20pilot.%20Please%20send%20the%20meeting%20invite%20and%20demo%20materials.%0A%0ABest%2C">Book a 25-minute pilot walkthrough</a>
|
|
550
|
+
<a class="ghost" href="/dashboard">View the live dashboard demo</a>
|
|
551
|
+
</div>
|
|
552
|
+
<p style="font-size:0.85rem; color:var(--muted); margin:0.75rem 0 0;">
|
|
553
|
+
Button not opening your mail client (common on Gmail Web / iPhone)? <button type="button" onclick="__thumbgateCopyPilotEmail(this)" style="padding:0.35rem 0.7rem; font-size:0.85rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan); border-radius:5px; cursor:pointer; vertical-align: baseline;">Copy the email instead</button> or write to <span style="color: var(--text); user-select: all; font-family: ui-monospace, SFMono-Regular, Menlo, monospace;">iganapolsky@gmail.com</span> directly.
|
|
554
|
+
</p>
|
|
555
|
+
</div>
|
|
556
|
+
</section>
|
|
557
|
+
|
|
558
|
+
<section id="live-gate-demos">
|
|
559
|
+
<h2>Live gate demos — try them yourself</h2>
|
|
560
|
+
<div style="border-left: 3px solid var(--cyan); background: rgba(34, 211, 238, 0.06); padding: 0.85rem 1.1rem; margin: 0 0 1.5rem; border-radius: 0 6px 6px 0;">
|
|
561
|
+
<strong style="color: var(--cyan)">Monitor vs enforce.</strong> <span style="color: var(--text)">Agent observability tools log what your agent <em>did</em>. ThumbGate gates what your agent is <em>about to do</em> — runtime block before execution, not retrospective alert after the harm. SIEM ingestion is the audit trail. The PreToolUse hook is the prevention.</span>
|
|
562
|
+
</div>
|
|
563
|
+
<p style="color:var(--muted); margin-bottom:1.5rem">These simulators use the exact same deterministic PreToolUse logic that runs in production. No LLM calls on the enforcement path — just fast, auditable pattern matching.</p>
|
|
564
|
+
|
|
565
|
+
<!-- UPL Gate Simulator -->
|
|
566
|
+
<div class="card" style="margin-bottom:2rem">
|
|
567
|
+
<h3 style="color:var(--cyan); margin-bottom:0.75rem">1. UPL Gate — advice-shaped output detector</h3>
|
|
568
|
+
<p style="font-size:0.95rem; color:var(--muted)">Paste an <strong>advice-shaped response a bot would deliver to a client</strong> (not a client's question). The gate detects predictions, recommendations, or jurisdictional legal analysis from a non-attorney source and blocks delivery. The patterns it matches were promoted from attorney 👎 feedback.</p>
|
|
569
|
+
<textarea id="upl-input" placeholder="E.g. 'Based on the facts you described, you likely have a strong claim for breach of contract and could recover significant damages.'" style="width:100%; height:90px; background:#0f0f11; color:var(--text); border:1px solid var(--line); border-radius:8px; padding:0.75rem; font-size:0.95rem; resize:vertical; margin:0.75rem 0"></textarea>
|
|
570
|
+
<div style="display:flex; gap:0.5rem; flex-wrap:wrap; align-items:center; margin-bottom:0.5rem">
|
|
571
|
+
<button onclick="runUPLDemo()" class="cta" style="padding:0.6rem 1.1rem; font-size:0.9rem">Run through UPL Gate</button>
|
|
572
|
+
<button type="button" onclick="document.getElementById('upl-input').value='You have a strong case for wrongful termination. In my opinion, you should file in the Southern District of Florida.';" style="padding:0.5rem 0.9rem; font-size:0.85rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan); border-radius:6px; cursor:pointer">Fill sample — will BLOCK</button>
|
|
573
|
+
<button type="button" onclick="document.getElementById('upl-input').value='I can schedule a 30-minute consultation with one of our employment attorneys. Would 2pm Thursday work?';" style="padding:0.5rem 0.9rem; font-size:0.85rem; background:transparent; color:var(--green); border:1px solid var(--green); border-radius:6px; cursor:pointer">Fill sample — will CLEAR</button>
|
|
574
|
+
</div>
|
|
575
|
+
<div id="upl-result" class="demo-result" style="display:none"></div>
|
|
576
|
+
</div>
|
|
577
|
+
|
|
578
|
+
<!-- Conflict Check Simulator -->
|
|
579
|
+
<div class="card" style="margin-bottom:2rem">
|
|
580
|
+
<h3 style="color:var(--cyan); margin-bottom:0.75rem">2. Conflict Gate — adverse party clearance</h3>
|
|
581
|
+
<p style="font-size:0.95rem; color:var(--muted)">Enter a prospective client or party name. <strong>In production this gate queries YOUR firm's existing conflicts DB</strong> (Intapp Open, IntelliPlan, Aderant, or a custom system) — not a vendor-hosted list. ThumbGate is the agent-side enforcement; your DB stays the source of truth. The sample list below is illustrative only.</p>
|
|
582
|
+
<div style="display:flex; gap:0.75rem; align-items:flex-end; margin:0.75rem 0; flex-wrap:wrap">
|
|
583
|
+
<div style="flex:1; min-width:240px">
|
|
584
|
+
<label style="font-size:0.8rem; color:var(--muted); display:block; margin-bottom:0.25rem">Party / Company Name</label>
|
|
585
|
+
<input id="conflict-input" type="text" placeholder="Latam Real Capital" value="Latam Real Capital S.A." style="width:100%; background:#0f0f11; color:var(--text); border:1px solid var(--line); border-radius:8px; padding:0.6rem; font-size:0.95rem">
|
|
586
|
+
</div>
|
|
587
|
+
<button onclick="runConflictDemo()" class="cta" style="padding:0.6rem 1.1rem; font-size:0.9rem; white-space:nowrap">Check Against Adverse List</button>
|
|
588
|
+
</div>
|
|
589
|
+
<div style="display:flex; gap:0.5rem; flex-wrap:wrap; margin-bottom:0.5rem">
|
|
590
|
+
<button type="button" onclick="document.getElementById('conflict-input').value='Latam Real Capital S.A.';" style="padding:0.4rem 0.8rem; font-size:0.8rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan); border-radius:6px; cursor:pointer">Fill — will BLOCK</button>
|
|
591
|
+
<button type="button" onclick="document.getElementById('conflict-input').value='Acme Manufacturing LLC';" style="padding:0.4rem 0.8rem; font-size:0.8rem; background:transparent; color:var(--green); border:1px solid var(--green); border-radius:6px; cursor:pointer">Fill — will CLEAR</button>
|
|
592
|
+
</div>
|
|
593
|
+
<div style="font-size:0.8rem; color:var(--muted); margin-bottom:0.5rem">Sample adverse list (synthetic, illustrative): Latam Real Capital S.A. (real estate #M-2847), Hospitalia Holdings (hospitality M&A #M-2911), NovaIA Latam (AI venture #M-2755)</div>
|
|
594
|
+
<div id="conflict-result" class="demo-result" style="display:none"></div>
|
|
595
|
+
</div>
|
|
596
|
+
|
|
597
|
+
<!-- Privilege Egress Simulator -->
|
|
598
|
+
<div class="card">
|
|
599
|
+
<h3 style="color:var(--cyan); margin-bottom:0.75rem">3. Egress Gate — privilege marker detector</h3>
|
|
600
|
+
<p style="font-size:0.95rem; color:var(--muted)">Paste content an agent might try to send to an external LLM (e.g. deposition summary request). The gate blocks if it detects privilege markers. Markers are firm-defined and the list grows from attorney 👍/👎 on what the gate let through.</p>
|
|
601
|
+
<textarea id="privilege-input" placeholder="Please summarize this deposition transcript. [Attorney Work Product - Matter M-2847 - Confidential]" style="width:100%; height:90px; background:#0f0f11; color:var(--text); border:1px solid var(--line); border-radius:8px; padding:0.75rem; font-size:0.95rem; resize:vertical; margin:0.75rem 0"></textarea>
|
|
602
|
+
<div style="display:flex; gap:0.5rem; flex-wrap:wrap; align-items:center; margin-bottom:0.5rem">
|
|
603
|
+
<button onclick="runPrivilegeDemo()" class="cta" style="padding:0.6rem 1.1rem; font-size:0.9rem">Attempt External LLM Call</button>
|
|
604
|
+
<button type="button" onclick="document.getElementById('privilege-input').value='Please summarize this deposition transcript. [Attorney Work Product - Matter M-2847 - Confidential]';" style="padding:0.5rem 0.9rem; font-size:0.85rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan); border-radius:6px; cursor:pointer">Fill sample — will BLOCK</button>
|
|
605
|
+
<button type="button" onclick="document.getElementById('privilege-input').value='Please summarize the public press release announcing the merger between Acme Corp and Foobar Inc.';" style="padding:0.5rem 0.9rem; font-size:0.85rem; background:transparent; color:var(--green); border:1px solid var(--green); border-radius:6px; cursor:pointer">Fill sample — will CLEAR</button>
|
|
606
|
+
</div>
|
|
607
|
+
<div id="privilege-result" class="demo-result" style="display:none"></div>
|
|
480
608
|
</div>
|
|
609
|
+
|
|
610
|
+
<script>
|
|
611
|
+
function escapeHtml(s) {
|
|
612
|
+
return String(s).replace(/[&<>"']/g, function(c) {
|
|
613
|
+
return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c];
|
|
614
|
+
});
|
|
615
|
+
}
|
|
616
|
+
window.__thumbgateCopyPilotEmail = function(btn) {
|
|
617
|
+
var body = "Hi Igor,\n\nWe'd like to review the 25-minute ThumbGate legal AI intake pilot. Please send the meeting invite and demo materials.\n\nBest,";
|
|
618
|
+
var full = "To: iganapolsky@gmail.com\nSubject: ThumbGate 25-minute legal AI pilot walkthrough\n\n" + body;
|
|
619
|
+
var done = function(label) {
|
|
620
|
+
var orig = btn.dataset.origLabel || btn.textContent;
|
|
621
|
+
btn.dataset.origLabel = orig;
|
|
622
|
+
btn.textContent = label;
|
|
623
|
+
setTimeout(function() { btn.textContent = orig; }, 2400);
|
|
624
|
+
};
|
|
625
|
+
if (navigator.clipboard && navigator.clipboard.writeText) {
|
|
626
|
+
navigator.clipboard.writeText(full)
|
|
627
|
+
.then(function() { done('Copied — paste into Gmail or any mail client'); })
|
|
628
|
+
.catch(function() { done('Copy failed — email iganapolsky@gmail.com directly'); });
|
|
629
|
+
} else {
|
|
630
|
+
done('Email iganapolsky@gmail.com directly');
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
// Produces the same JSON shape a production ThumbGate gate would stream to the firm's SIEM.
|
|
634
|
+
// Includes ISO 27001 control mapping so procurement can map evidence to controls without translation.
|
|
635
|
+
window.__thumbgateBuildAudit = function(args) {
|
|
636
|
+
return {
|
|
637
|
+
audit_id: args.audit_id,
|
|
638
|
+
timestamp_iso: args.timestamp_iso,
|
|
639
|
+
rule: { id: args.rule_id, version: args.rule_version, matched: args.matched },
|
|
640
|
+
blocked_call: {
|
|
641
|
+
agent: args.agent,
|
|
642
|
+
input_excerpt: String(args.input || '').slice(0, 280),
|
|
643
|
+
matter_context: args.matter_context
|
|
644
|
+
},
|
|
645
|
+
action: args.action,
|
|
646
|
+
reviewer: null,
|
|
647
|
+
iso_27001_controls: args.iso_controls,
|
|
648
|
+
generated_by: 'ThumbGate PreToolUse Gate (sample export — production version streams to your SIEM)',
|
|
649
|
+
sample_disclaimer: 'Synthetic audit record for evaluation. No real client data referenced.'
|
|
650
|
+
};
|
|
651
|
+
};
|
|
652
|
+
window.__thumbgateDownloadAudit = function(payload, filename) {
|
|
653
|
+
try {
|
|
654
|
+
var json = JSON.stringify(payload, null, 2);
|
|
655
|
+
var blob = new Blob([json], { type: 'application/json' });
|
|
656
|
+
var url = URL.createObjectURL(blob);
|
|
657
|
+
var a = document.createElement('a');
|
|
658
|
+
a.href = url; a.download = filename;
|
|
659
|
+
document.body.appendChild(a); a.click();
|
|
660
|
+
document.body.removeChild(a);
|
|
661
|
+
setTimeout(function() { URL.revokeObjectURL(url); }, 10000);
|
|
662
|
+
} catch (e) { console.error('audit download failed', e); }
|
|
663
|
+
};
|
|
664
|
+
window.__thumbgateAuditRegistry = {};
|
|
665
|
+
window.__thumbgateAuditByKey = function(key) {
|
|
666
|
+
var entry = window.__thumbgateAuditRegistry[key];
|
|
667
|
+
if (!entry) return;
|
|
668
|
+
window.__thumbgateDownloadAudit(entry.payload, entry.filename);
|
|
669
|
+
};
|
|
670
|
+
window.__thumbgateAuditButton = function(key, payload, filename) {
|
|
671
|
+
window.__thumbgateAuditRegistry[key] = { payload: payload, filename: filename };
|
|
672
|
+
return '<button class="cta" style="margin-top:0.5rem; padding:0.45rem 0.9rem; font-size:0.82rem; background:transparent; color:var(--cyan); border:1px solid var(--cyan)" ' +
|
|
673
|
+
'onclick="__thumbgateAuditByKey(\'' + key + '\')">' +
|
|
674
|
+
'Download audit JSON (sample) ↓</button>';
|
|
675
|
+
};
|
|
676
|
+
function runUPLDemo() {
|
|
677
|
+
var input = document.getElementById('upl-input').value.trim();
|
|
678
|
+
var resultDiv = document.getElementById('upl-result');
|
|
679
|
+
if (!input) { resultDiv.style.display = 'none'; return; }
|
|
680
|
+
var advicePatterns = ['you have a strong case', 'likely to win', 'you should', 'recommend that you', 'based on the facts you described', 'in my opinion', 'the best course is', 'you are entitled to'];
|
|
681
|
+
var lower = input.toLowerCase();
|
|
682
|
+
var blocked = false;
|
|
683
|
+
var reason = '';
|
|
684
|
+
for (var i = 0; i < advicePatterns.length; i++) {
|
|
685
|
+
if (lower.indexOf(advicePatterns[i]) !== -1) { blocked = true; reason = advicePatterns[i]; break; }
|
|
686
|
+
}
|
|
687
|
+
if (blocked) {
|
|
688
|
+
var uplPayload = __thumbgateBuildAudit({
|
|
689
|
+
audit_id: 'UPL-2847-20260526-091204',
|
|
690
|
+
timestamp_iso: '2026-05-26T09:12:04Z',
|
|
691
|
+
rule_id: 'UPL_RULE_05.5_ADVICE_SHAPE',
|
|
692
|
+
rule_version: '3.2',
|
|
693
|
+
matched: 'advice-shaped output from non-attorney source ("' + reason + '")',
|
|
694
|
+
agent: 'website-intake-bot-v2',
|
|
695
|
+
input: input,
|
|
696
|
+
matter_context: 'New client intake (web)',
|
|
697
|
+
action: 'REPLACE + LOG + NOTIFY_ATTORNEY',
|
|
698
|
+
iso_controls: ['A.5.34 (Privacy & PII protection)', 'A.5.24 (Information security incident management)']
|
|
699
|
+
});
|
|
700
|
+
resultDiv.innerHTML =
|
|
701
|
+
'<div class="demo-blocked">' +
|
|
702
|
+
'<strong style="color:#f87171">BLOCKED — UPL Gate fired</strong><br>' +
|
|
703
|
+
'Detected advice-shaped pattern: "' + escapeHtml(reason) + '"<br><br>' +
|
|
704
|
+
'<strong>Corrective action taken:</strong><br>' +
|
|
705
|
+
'Response replaced with: <em>"That\'s a legal question best answered by a licensed attorney. I can schedule a 30-minute consultation with one of our [practice area] attorneys — would [time] work for you?"</em><br><br>' +
|
|
706
|
+
'<div class="audit-log">[2026-05-26 09:12:04] PreToolUse gate: UPL_RULE_05.5_ADVICE_SHAPE v3.2\nRule matched: advice-shaped output from non-attorney source\nAction: REPLACE + LOG + NOTIFY_ATTORNEY\nAudit ID: UPL-2847-20260526-091204\nMatter context: New client intake (web)\nAgent: website-intake-bot-v2</div>' +
|
|
707
|
+
__thumbgateAuditButton('upl', uplPayload, 'ThumbGate-Audit-UPL-2847-2026-05-26.json') +
|
|
708
|
+
'</div>';
|
|
709
|
+
} else {
|
|
710
|
+
resultDiv.innerHTML =
|
|
711
|
+
'<div class="demo-cleared">' +
|
|
712
|
+
'<strong style="color:#34d399">CLEARED — no UPL pattern detected</strong><br>' +
|
|
713
|
+
'Response would be delivered as-is. (In production this would still be logged for training.)' +
|
|
714
|
+
'</div>';
|
|
715
|
+
}
|
|
716
|
+
resultDiv.style.display = 'block';
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
function runConflictDemo() {
|
|
720
|
+
var party = document.getElementById('conflict-input').value.trim().toLowerCase();
|
|
721
|
+
var resultDiv = document.getElementById('conflict-result');
|
|
722
|
+
if (!party) { resultDiv.style.display = 'none'; return; }
|
|
723
|
+
var adverseList = ['latam real capital', 'latam real', 'hospitalia holdings', 'hospitalia', 'novaia latam', 'novaia'];
|
|
724
|
+
var isAdverse = adverseList.some(function(a) { return party.indexOf(a) !== -1; });
|
|
725
|
+
if (isAdverse) {
|
|
726
|
+
var conflictPayload = __thumbgateBuildAudit({
|
|
727
|
+
audit_id: 'CONF-2911-20260526-091204',
|
|
728
|
+
timestamp_iso: '2026-05-26T09:12:04Z',
|
|
729
|
+
rule_id: 'CONFLICT_RULE_1.7_ADVERSE',
|
|
730
|
+
rule_version: '4.1',
|
|
731
|
+
matched: 'adverse-parties list match for "' + party + '"',
|
|
732
|
+
agent: 'doc-fetch-agent-v1',
|
|
733
|
+
input: party,
|
|
734
|
+
matter_context: 'New M&A intake — preliminary conflict check',
|
|
735
|
+
action: 'BLOCK + REDIRECT + LOG',
|
|
736
|
+
iso_controls: ['A.5.10 (Acceptable use of information)', 'A.5.24 (Information security incident management)', 'A.8.10 (Information deletion)']
|
|
737
|
+
});
|
|
738
|
+
resultDiv.innerHTML =
|
|
739
|
+
'<div class="demo-blocked">' +
|
|
740
|
+
'<strong style="color:#f87171">BLOCKED — Conflict Gate fired</strong><br>' +
|
|
741
|
+
'"' + escapeHtml(party) + '" matches adverse party in existing matter.<br><br>' +
|
|
742
|
+
'<strong>Corrective action:</strong> Fetch blocked. Agent redirected to: <em>"This party appears as adverse in matter M-2847. Contact ethics screen lead before proceeding."</em><br><br>' +
|
|
743
|
+
'<div class="audit-log">[2026-05-26 09:12:04] PreToolUse gate: CONFLICT_RULE_1.7_ADVERSE v4.1\nMatched: adverse-parties list\nAction: BLOCK + REDIRECT + LOG\nAudit ID: CONF-2911-20260526-091204\nRequesting matter: New M&A intake\nAgent: doc-fetch-agent-v1</div>' +
|
|
744
|
+
__thumbgateAuditButton('conflict', conflictPayload, 'ThumbGate-Audit-CONF-2911-2026-05-26.json') +
|
|
745
|
+
'</div>';
|
|
746
|
+
} else {
|
|
747
|
+
resultDiv.innerHTML =
|
|
748
|
+
'<div class="demo-cleared">' +
|
|
749
|
+
'<strong style="color:#34d399">CLEARED — no conflict found</strong><br>' +
|
|
750
|
+
'Positive clearance recorded. Agent may proceed with intake.<br><br>' +
|
|
751
|
+
'<div class="audit-log">[2026-05-26 09:12:04] PreToolUse gate: CONFLICT_RULE_1.7_ADVERSE v4.1\nResult: CLEAR (no match in adverse list)\nAction: ALLOW + LOG\nAudit ID: CONF-2912-20260526-091204</div>' +
|
|
752
|
+
'</div>';
|
|
753
|
+
}
|
|
754
|
+
resultDiv.style.display = 'block';
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
function runPrivilegeDemo() {
|
|
758
|
+
var input = document.getElementById('privilege-input').value.trim();
|
|
759
|
+
var resultDiv = document.getElementById('privilege-result');
|
|
760
|
+
if (!input) { resultDiv.style.display = 'none'; return; }
|
|
761
|
+
var privMarkers = ['attorney work product', 'privileged', 'confidential - attorney client', 'matter m-', 'm-2847', 'm-2911'];
|
|
762
|
+
var lower = input.toLowerCase();
|
|
763
|
+
var blocked = false;
|
|
764
|
+
var marker = '';
|
|
765
|
+
for (var i = 0; i < privMarkers.length; i++) {
|
|
766
|
+
if (lower.indexOf(privMarkers[i]) !== -1) { blocked = true; marker = privMarkers[i]; break; }
|
|
767
|
+
}
|
|
768
|
+
if (blocked) {
|
|
769
|
+
var privilegePayload = __thumbgateBuildAudit({
|
|
770
|
+
audit_id: 'PRIV-2755-20260526-091204',
|
|
771
|
+
timestamp_iso: '2026-05-26T09:12:04Z',
|
|
772
|
+
rule_id: 'EGRESS_RULE_1.6_PRIVILEGE',
|
|
773
|
+
rule_version: '2.8',
|
|
774
|
+
matched: 'privilege marker in outbound payload ("' + marker + '")',
|
|
775
|
+
agent: 'brief-assistant-v3',
|
|
776
|
+
input: input,
|
|
777
|
+
matter_context: 'Outbound LLM call from attorney workspace',
|
|
778
|
+
action: 'BLOCK + REDIRECT_TO_TENANT_LLM + LOG',
|
|
779
|
+
iso_controls: ['A.5.34 (Privacy & PII protection)', 'A.5.14 (Information transfer)', 'A.8.24 (Use of cryptography)']
|
|
780
|
+
});
|
|
781
|
+
resultDiv.innerHTML =
|
|
782
|
+
'<div class="demo-blocked">' +
|
|
783
|
+
'<strong style="color:#f87171">BLOCKED — Egress Gate fired</strong><br>' +
|
|
784
|
+
'Detected privilege marker: "' + escapeHtml(marker) + '"<br><br>' +
|
|
785
|
+
'<strong>Corrective action:</strong> Outbound call to external LLM blocked. Redirected to in-tenant Azure OpenAI (BAA-protected) or internal summarizer.<br><br>' +
|
|
786
|
+
'<div class="audit-log">[2026-05-26 09:12:04] PreToolUse gate: EGRESS_RULE_1.6_PRIVILEGE v2.8\nRule matched: privilege marker in outbound payload\nAction: BLOCK + REDIRECT_TO_TENANT_LLM + LOG\nAudit ID: PRIV-2755-20260526-091204\nContent hash: sha256:7f3a... (truncated)\nAgent: brief-assistant-v3</div>' +
|
|
787
|
+
__thumbgateAuditButton('privilege', privilegePayload, 'ThumbGate-Audit-PRIV-2755-2026-05-26.json') +
|
|
788
|
+
'</div>';
|
|
789
|
+
} else {
|
|
790
|
+
resultDiv.innerHTML =
|
|
791
|
+
'<div class="demo-cleared">' +
|
|
792
|
+
'<strong style="color:#34d399">CLEARED — no privilege markers detected</strong><br>' +
|
|
793
|
+
'Content would be sent to external LLM (in production this would still trigger logging + optional human review flag).' +
|
|
794
|
+
'</div>';
|
|
795
|
+
}
|
|
796
|
+
resultDiv.style.display = 'block';
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
// Keyboard support: Enter submits, Shift+Enter inserts newline
|
|
800
|
+
var uplEl = document.getElementById('upl-input');
|
|
801
|
+
if (uplEl) uplEl.addEventListener('keydown', function(e) {
|
|
802
|
+
if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); runUPLDemo(); }
|
|
803
|
+
});
|
|
804
|
+
var privEl = document.getElementById('privilege-input');
|
|
805
|
+
if (privEl) privEl.addEventListener('keydown', function(e) {
|
|
806
|
+
if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); runPrivilegeDemo(); }
|
|
807
|
+
});
|
|
808
|
+
</script>
|
|
481
809
|
</section>
|
|
482
810
|
</main>
|
|
483
811
|
|
package/public/blog.html
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
/>
|
|
12
12
|
<link
|
|
13
13
|
rel="canonical"
|
|
14
|
-
href="https://thumbgate
|
|
14
|
+
href="https://thumbgate.ai/blog"
|
|
15
15
|
/>
|
|
16
16
|
<meta
|
|
17
17
|
property="og:title"
|
|
@@ -24,14 +24,14 @@
|
|
|
24
24
|
<meta property="og:type" content="website" />
|
|
25
25
|
<meta
|
|
26
26
|
property="og:url"
|
|
27
|
-
content="https://thumbgate
|
|
27
|
+
content="https://thumbgate.ai/blog"
|
|
28
28
|
/>
|
|
29
29
|
<script type="application/ld+json">
|
|
30
30
|
{
|
|
31
31
|
"@context": "https://schema.org",
|
|
32
32
|
"@type": "Blog",
|
|
33
33
|
"name": "ThumbGate Blog",
|
|
34
|
-
"url": "https://thumbgate
|
|
34
|
+
"url": "https://thumbgate.ai/blog",
|
|
35
35
|
"publisher": { "@type": "Organization", "name": "ThumbGate" },
|
|
36
36
|
"blogPost": [
|
|
37
37
|
{
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
<meta property="og:title" content="ThumbGate for Codex in the Enterprise">
|
|
10
10
|
<meta property="og:description" content="Dell-distributed or self-hosted, Codex agents repeat the same mistakes. ThumbGate is the governance layer underneath — capture, promote, audit.">
|
|
11
11
|
<meta property="og:type" content="article">
|
|
12
|
-
<meta property="og:image" content="https://thumbgate
|
|
13
|
-
<link rel="canonical" href="https://thumbgate
|
|
12
|
+
<meta property="og:image" content="https://thumbgate.ai/og.png">
|
|
13
|
+
<link rel="canonical" href="https://thumbgate.ai/codex-enterprise">
|
|
14
14
|
<script type="application/ld+json">
|
|
15
15
|
{
|
|
16
16
|
"@context": "https://schema.org",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"datePublished": "2026-05-20",
|
|
21
21
|
"dateModified": "2026-05-20",
|
|
22
22
|
"author": { "@type": "Person", "name": "Igor Ganapolsky", "url": "https://github.com/IgorGanapolsky" },
|
|
23
|
-
"publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate
|
|
23
|
+
"publisher": { "@type": "Organization", "name": "ThumbGate", "url": "https://thumbgate.ai" },
|
|
24
24
|
"about": [
|
|
25
25
|
{ "@type": "Thing", "name": "OpenAI Codex" },
|
|
26
26
|
{ "@type": "Thing", "name": "Dell Codex Enterprise" },
|
package/public/codex-plugin.html
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
<meta property="og:title" content="ThumbGate for Codex">
|
|
11
11
|
<meta property="og:description" content="Auto-updating MCP and hook launcher for Codex. One install, then ThumbGate resolves the latest npm runtime when Codex starts.">
|
|
12
12
|
<meta property="og:type" content="website">
|
|
13
|
-
<meta property="og:url" content="https://thumbgate
|
|
14
|
-
<link rel="canonical" href="https://thumbgate
|
|
13
|
+
<meta property="og:url" content="https://thumbgate.ai/codex-plugin">
|
|
14
|
+
<link rel="canonical" href="https://thumbgate.ai/codex-plugin">
|
|
15
15
|
<link rel="llm-context" href="/llm-context.md" type="text/markdown">
|
|
16
16
|
|
|
17
17
|
<script type="application/ld+json">
|
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"applicationCategory": "DeveloperApplication",
|
|
23
23
|
"operatingSystem": "macOS, Linux, Windows with Node.js",
|
|
24
24
|
"description": "ThumbGate for Codex installs an MCP server and hook launcher that resolves thumbgate@latest at startup, captures thumbs-up/down feedback, and enforces Pre-Action Checks before risky agent actions run.",
|
|
25
|
-
"url": "https://thumbgate
|
|
25
|
+
"url": "https://thumbgate.ai/codex-plugin",
|
|
26
26
|
"downloadUrl": "https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip",
|
|
27
|
-
"installUrl": "https://thumbgate
|
|
27
|
+
"installUrl": "https://thumbgate.ai/codex-plugin",
|
|
28
28
|
"license": "https://opensource.org/licenses/MIT",
|
|
29
29
|
"dateModified": "2026-04-20",
|
|
30
30
|
"creator": {
|
package/public/compare.html
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
<meta property="og:title" content="Best Pre-Action Check Tools for AI Coding Agents (2026 Comparison)">
|
|
12
12
|
<meta property="og:description" content="Compare pre-action check tools that prevent AI coding agents from making costly mistakes. ThumbGate vs manual review vs post-hoc fixes.">
|
|
13
13
|
<meta property="og:type" content="article">
|
|
14
|
-
<meta property="og:url" content="https://thumbgate
|
|
15
|
-
<link rel="canonical" href="https://thumbgate
|
|
14
|
+
<meta property="og:url" content="https://thumbgate.ai/compare">
|
|
15
|
+
<link rel="canonical" href="https://thumbgate.ai/compare">
|
|
16
16
|
|
|
17
17
|
<script type="application/ld+json">
|
|
18
18
|
{
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"publisher": {
|
|
29
29
|
"@type": "Organization",
|
|
30
30
|
"name": "ThumbGate",
|
|
31
|
-
"url": "https://thumbgate
|
|
31
|
+
"url": "https://thumbgate.ai"
|
|
32
32
|
},
|
|
33
33
|
"datePublished": "2026-04-08",
|
|
34
34
|
"dateModified": "2026-04-08",
|
|
35
|
-
"mainEntityOfPage": "https://thumbgate
|
|
35
|
+
"mainEntityOfPage": "https://thumbgate.ai/compare"
|
|
36
36
|
}
|
|
37
37
|
</script>
|
|
38
38
|
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"name": "Is ThumbGate free?",
|
|
63
63
|
"acceptedAnswer": {
|
|
64
64
|
"@type": "Answer",
|
|
65
|
-
"text": "ThumbGate has a free tier that includes local enforcement with
|
|
65
|
+
"text": "ThumbGate has a free tier that includes local enforcement with 5 feedback captures/day, 25 total captures, up to 3 active auto-promoted prevention rules, and pre-action check blocking. Pro ($19/mo or $149/yr) adds hosted sync, a personal local dashboard, recall, lesson search, unlimited captures/rules, and DPO export. Team rollout ($49/seat/mo) adds a shared lesson database and org dashboard."
|
|
66
66
|
}
|
|
67
67
|
},
|
|
68
68
|
{
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
|
|
312
312
|
<div class="card">
|
|
313
313
|
<h3>Is ThumbGate free?</h3>
|
|
314
|
-
<p>ThumbGate has a free tier that includes local enforcement with
|
|
314
|
+
<p>ThumbGate has a free tier that includes local enforcement with 5 feedback captures/day, 25 total captures, up to 3 active auto-promoted prevention rules, and pre-action check blocking. Pro ($19/mo or $149/yr) adds hosted sync, a personal local dashboard, recall, lesson search, unlimited captures/rules, and DPO export. Team rollout ($49/seat/mo) adds a shared lesson database and org dashboard.</p>
|
|
315
315
|
</div>
|
|
316
316
|
|
|
317
317
|
<div class="card">
|