thumbgate 1.27.2 โ†’ 1.27.4

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "thumbgate",
3
3
  "description": "One ๐Ÿ‘Ž becomes a hard rule the agent cannot bypass. Captures thumbs-down feedback, distills it into PreToolUse Pre-Action Checks, enforced across every future Claude Code session.",
4
- "version": "1.27.2",
4
+ "version": "1.27.4",
5
5
  "author": {
6
6
  "name": "Igor Ganapolsky",
7
7
  "email": "ig5973700@gmail.com",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.27.2",
3
+ "version": "1.27.4",
4
4
  "description": "ThumbGate โ€” ๐Ÿ‘๐Ÿ‘Ž feedback that teaches your AI agent. Thumbs down a mistake, it never happens again.",
5
5
  "homepage": "https://thumbgate.ai",
6
6
  "transport": "stdio",
package/README.md CHANGED
@@ -24,7 +24,7 @@ The product is a self-improving enforcement layer: thumbs-down feedback, prompt
24
24
  npx thumbgate init # auto-detects your agent, wires hooks, 30 seconds
25
25
  ```
26
26
 
27
- Works with **Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode** and any MCP-compatible agent. Free tier: 5 feedback captures/day, 25 total captures, and 3 active auto-promoted prevention rules. [Pro: $19/mo or $149/yr](https://thumbgate.ai/checkout/pro?utm_source=github&utm_medium=readme) โ€” unlimited feedback captures, unlimited rules, history-aware lessons, feedback sessions, dashboard, DPO export. Team is $49/seat/mo with a shared hosted lesson DB and org dashboard.
27
+ Works with **Claude Code, Cursor, Codex, Gemini CLI, Amp, Cline, OpenCode** and any MCP-compatible agent. Free tier: 5 feedback captures/day (25 total) and up to 3 active auto-promoted prevention rules. [Pro: $19/mo or $149/yr](https://thumbgate.ai/checkout/pro?utm_source=github&utm_medium=readme) โ€” unlimited rules, history-aware lessons, feedback sessions, dashboard, DPO export. Enterprise (custom pricing, scoped after intake) adds a shared hosted lesson DB, org dashboard, and shared org-wide enforcement.
28
28
 
29
29
  [![CI](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml/badge.svg)](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml)
30
30
  [![npm](https://img.shields.io/npm/v/thumbgate)](https://www.npmjs.com/package/thumbgate)
@@ -379,26 +379,26 @@ If you change MCP or hook settings, restart the affected agent session so Claude
379
379
 
380
380
  ## Pricing
381
381
 
382
- | | Free | Pro ($19/mo) | Team ($49/seat/mo) | Enterprise |
383
- |---|---|---|---|---|
384
- | Local CLI + enforced checks | โœ… | โœ… | โœ… | โœ… |
385
- | Feedback captures | 5/day, 25 total | Unlimited | Unlimited | Unlimited |
386
- | Auto-promoted prevention rules | 3 active | Unlimited | Unlimited | Unlimited |
387
- | MCP agent integrations | All | All | All | All |
388
- | Personal dashboard | โ€” | โœ… | โœ… | โœ… |
389
- | DPO export (model fine-tuning) | โ€” | โœ… | โœ… | โœ… |
390
- | Team lesson export/import | โ€” | โœ… | โœ… | โœ… |
391
- | Shared hosted lesson DB | โ€” | โ€” | โœ… | โœ… |
392
- | Org-wide dashboard | โ€” | โ€” | โœ… | โœ… |
393
- | Approval + audit proof | โ€” | โ€” | โœ… | โœ… |
394
- | Regulatory gate templates | โ€” | โ€” | โ€” | โœ… |
395
- | Custom policy layers (firm/practice-area) | โ€” | โ€” | โ€” | โœ… |
396
- | Compliance audit export | โ€” | โ€” | โ€” | โœ… |
397
- | Dedicated onboarding + SLA | โ€” | โ€” | โ€” | โœ… |
398
-
399
- The free tier gives you 5 feedback captures/day, 25 total captures, and up to 3 active auto-promoted prevention rules โ€” enough to prove the loop before buying. MCP integrations for all agents (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode) ship free.
400
-
401
- Pro ($19/mo or $149/yr) removes the rule cap and adds history-aware lesson recall, lesson search, DPO export, and a personal dashboard. Team ($49/seat/mo) adds a shared hosted lesson DB, org dashboard, and shared enforcement across the org. Enterprise adds regulatory gate templates (legal intake, financial compliance, healthcare), custom policy layers scoped to firm/practice-area, compliance audit export, and dedicated onboarding with SLA.
382
+ | | Free | Pro ($19/mo) | Enterprise |
383
+ |---|---|---|---|
384
+ | Local CLI + enforced checks | โœ… | โœ… | โœ… |
385
+ | Feedback captures | 5/day (25 total) | Unlimited | Unlimited |
386
+ | Active auto-promoted prevention rules | 3 | Unlimited | Unlimited |
387
+ | MCP agent integrations | All | All | All |
388
+ | Personal dashboard | โ€” | โœ… | โœ… |
389
+ | DPO export (model fine-tuning) | โ€” | โœ… | โœ… |
390
+ | Lesson export/import | โ€” | โœ… | โœ… |
391
+ | Shared hosted lesson DB | โ€” | โ€” | โœ… |
392
+ | Org-wide dashboard | โ€” | โ€” | โœ… |
393
+ | Approval + audit proof | โ€” | โ€” | โœ… |
394
+ | Regulatory gate templates | โ€” | โ€” | โœ… |
395
+ | Custom policy layers (firm/practice-area) | โ€” | โ€” | โœ… |
396
+ | Compliance audit export | โ€” | โ€” | โœ… |
397
+ | Dedicated onboarding + SLA | โ€” | โ€” | โœ… |
398
+
399
+ The free tier gives you 5 feedback captures/day (25 total) and up to 3 active auto-promoted prevention rules โ€” enough to make ThumbGate part of your daily flow before you upgrade. MCP integrations for all agents (Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode) ship free.
400
+
401
+ Pro ($19/mo or $149/yr) removes the rule cap and adds history-aware lesson recall, lesson search, DPO export, and a personal dashboard. Enterprise (custom pricing, scoped after intake) adds a shared hosted lesson DB, org dashboard, and shared enforcement across the org, plus regulatory gate templates (legal intake, financial compliance, healthcare), custom policy layers scoped to firm/practice-area, compliance audit export, and dedicated onboarding with SLA.
402
402
 
403
403
  **Best first paid motion for teams:** the **Workflow Hardening Sprint** โ€” qualify one repeated failure before committing to a full rollout. **[Start intake โ†’](https://thumbgate.ai/?utm_source=github&utm_medium=readme&utm_campaign=team_rollout#workflow-sprint-intake)**
404
404
 
@@ -539,11 +539,13 @@ Free and self-hosted users can invoke `search_lessons` directly through MCP, and
539
539
 
540
540
  ---
541
541
 
542
- ## Enterprise Gating (Vertex AI & Google Cloud)
542
+ ## Enterprise Data Chat and Optional Google Adapters
543
543
 
544
- For enterprise subscriptions, ThumbGate natively integrates with Google Cloud Platform and **Vertex AI** to route all agent checks through compliant Gemini models inside your corporate VPC.
544
+ The Enterprise dashboard chat is local/open-source first: it answers over local ThumbGate data using lesson retrieval, LanceDB-backed vectors, and your configured LLM. Set `THUMBGATE_LOCAL_LLM_ENDPOINT` to an OpenAI-compatible local endpoint (Ollama, llama.cpp, vLLM, LM Studio, etc.) when you want generated answers without sending dashboard data to Google.
545
545
 
546
- ### Zero-Friction Setup
546
+ Google Cloud is an optional regulated-enterprise adapter, not a dashboard chatbot requirement. If a buyer already standardizes on Vertex AI or Dialogflow CX, ThumbGate can verify that posture and deploy guard adapters in their tenancy.
547
+
548
+ ### Optional Vertex Setup
547
549
  To wire local ThumbGate scoring to Vertex AI, run:
548
550
  ```bash
549
551
  npx thumbgate setup-vertex
@@ -552,7 +554,7 @@ npx thumbgate setup-vertex
552
554
  * **Auto-Enablement:** Programmatically enables the Vertex AI API in your project.
553
555
  * **Auto-Configuration:** Writes local Vertex routing settings to your `.env` file.
554
556
 
555
- This command does **not** create or verify a live Dialogflow CX agent. On current Google Cloud CLI installs, the old alpha gcloud CX command group is not available; verify Conversational Agents / Dialogflow CX with the Google Cloud console or the official Dialogflow CX REST API (`projects.locations.agents`) before claiming a live DFCX deployment.
557
+ This command does **not** create or verify a live Dialogflow CX agent. Dialogflow is only relevant when a customer wants ThumbGate guard adapters in front of their own production DFCX agents. On current Google Cloud CLI installs, the old alpha gcloud CX command group is not available; verify Conversational Agents / Dialogflow CX with the Google Cloud console or the official Dialogflow CX REST API (`projects.locations.agents`) before claiming a live DFCX deployment.
556
558
 
557
559
  ### Zero-Friction Cost Containment ($10/mo Hard Cap)
558
560
  Google Cloud budget alerts are "alert-only" and do not stop API traffic, risking unexpected bill shock. ThumbGate completely resolves this on the client side:
@@ -575,7 +577,7 @@ If it supports MCP or pre-action hooks, yes. Claude Code, Claude Desktop, Cursor
575
577
  **Is it free?**
576
578
  The free tier gives you 5 feedback captures/day, 25 total captures, and up to 3 active auto-promoted prevention rules โ€” enough for solo devs to prove a blocked repeat before upgrading. MCP integrations ship free for every agent.
577
579
 
578
- Pro ($19/mo or $149/yr) removes the rule cap and adds history-aware lesson recall, lesson search, and a personal dashboard. Team ($49/seat/mo) adds a shared hosted lesson DB, org dashboard, and shared enforcement.
580
+ Pro ($19/mo or $149/yr) removes the rule cap and adds history-aware lesson recall, lesson search, and a personal dashboard. Enterprise (custom pricing, scoped after intake) adds a shared hosted lesson DB, org dashboard, and shared enforcement.
579
581
 
580
582
  ---
581
583
 
@@ -2,13 +2,13 @@
2
2
  "mcpServers": {
3
3
  "thumbgate": {
4
4
  "command": "npx",
5
- "args": ["--yes", "--package", "thumbgate@1.27.2", "thumbgate", "serve"]
5
+ "args": ["--yes", "--package", "thumbgate@1.27.4", "thumbgate", "serve"]
6
6
  }
7
7
  },
8
8
  "hooks": {
9
9
  "preToolUse": {
10
10
  "command": "npx",
11
- "args": ["--yes", "--package", "thumbgate@1.27.2", "thumbgate", "gate-check"]
11
+ "args": ["--yes", "--package", "thumbgate@1.27.4", "thumbgate", "gate-check"]
12
12
  }
13
13
  }
14
14
  }
@@ -231,7 +231,7 @@ const {
231
231
  finalizeSession: finalizeFeedbackSession,
232
232
  } = require('../../scripts/feedback-session');
233
233
 
234
- const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.27.2' };
234
+ const SERVER_INFO = { name: 'thumbgate-mcp', version: '1.27.4' };
235
235
  const COMMERCE_CATEGORIES = [
236
236
  'product_recommendation',
237
237
  'brand_compliance',
@@ -1480,6 +1480,19 @@ function startStdioServer() {
1480
1480
  acquireLock();
1481
1481
 
1482
1482
  process.stdin.resume();
1483
+
1484
+ // Self-terminate when the client disconnects (stdin EOF/close). A stdio MCP
1485
+ // server must not outlive its parent: clients spawn it over stdin/stdout and
1486
+ // a well-behaved server exits when that pipe closes. Without this, children
1487
+ // abandoned by a client that exits without killing them linger forever and
1488
+ // accumulate. WHY: on 2026-06-05, 117 orphaned `thumbgate serve` processes
1489
+ // (spawned by a Codex app-server over ~4 days, never reaped) piled up and
1490
+ // helped exhaust a 24GB host. The existing exit handlers (cleanupLock /
1491
+ // cleanupSessionLock registered on 'exit') run via process.exit(0).
1492
+ const exitOnDisconnect = () => process.exit(0);
1493
+ process.stdin.on('end', exitOnDisconnect);
1494
+ process.stdin.on('close', exitOnDisconnect);
1495
+
1483
1496
  let buffer = Buffer.alloc(0);
1484
1497
  // Auto-detect transport from first request and lock it for the session.
1485
1498
  // mcp-proxy (Glama) sends NDJSON and expects NDJSON back.
@@ -7,7 +7,7 @@
7
7
  "npx",
8
8
  "--yes",
9
9
  "--package",
10
- "thumbgate@1.27.2",
10
+ "thumbgate@1.27.4",
11
11
  "thumbgate",
12
12
  "serve"
13
13
  ],
package/bin/cli.js CHANGED
@@ -32,7 +32,8 @@ const fs = require('fs');
32
32
  const os = require('os');
33
33
  const path = require('path');
34
34
  const crypto = require('crypto');
35
- const { execSync, execFileSync } = require('child_process');
35
+ const http = require('http');
36
+ const { execSync, execFileSync, execFile, spawn } = require('child_process');
36
37
  const {
37
38
  codexAutoUpdateCliEntry,
38
39
  codexAutoUpdateMcpEntry,
@@ -239,6 +240,58 @@ function parseArgs(argv) {
239
240
  return args;
240
241
  }
241
242
 
243
+ function probeDash(port) {
244
+ return new Promise((resolve) => {
245
+ const req = http.get({ hostname: '127.0.0.1', port, path: '/health', timeout: 750 }, (res) => {
246
+ res.resume();
247
+ resolve(res.statusCode >= 200 && res.statusCode < 500);
248
+ });
249
+ req.on('error', () => resolve(false));
250
+ req.on('timeout', () => { req.destroy(); resolve(false); });
251
+ });
252
+ }
253
+
254
+ async function waitDash(port, timeoutMs = 8000) {
255
+ const deadline = Date.now() + timeoutMs;
256
+ while (Date.now() < deadline) {
257
+ if (await probeDash(port)) return true;
258
+ await new Promise((r) => setTimeout(r, 250));
259
+ }
260
+ return false;
261
+ }
262
+
263
+ async function ensureDash(port) {
264
+ if (await probeDash(port)) {
265
+ return { started: false, pid: null };
266
+ }
267
+
268
+ const serverPath = path.join(PKG_ROOT, 'src', 'api', 'server.js');
269
+ const child = spawn(process.execPath, [serverPath], {
270
+ cwd: PKG_ROOT,
271
+ detached: true,
272
+ env: { ...process.env, PORT: String(port), THUMBGATE_ALLOW_INSECURE: process.env.THUMBGATE_ALLOW_INSECURE || 'true' },
273
+ stdio: 'ignore',
274
+ });
275
+ child.unref();
276
+
277
+ if (!(await waitDash(port))) {
278
+ throw new Error('Dashboard API timeout');
279
+ }
280
+
281
+ return { started: true, pid: child.pid };
282
+ }
283
+
284
+ function openBrowser(url) {
285
+ if (process.env.THUMBGATE_DASHBOARD_NO_OPEN === '1') {
286
+ console.log(`Ready: ${url}`);
287
+ return Promise.resolve();
288
+ }
289
+ const [command, args] = ({ darwin: ['open', [url]], win32: ['cmd', ['/c', 'start', '', url]] }[process.platform] || ['xdg-open', [url]]);
290
+ return new Promise((resolve, reject) => {
291
+ execFile(command, args, (err) => (err ? reject(err) : resolve()));
292
+ });
293
+ }
294
+
242
295
  function parseTtlMs(value, fallbackMs = 5 * 60 * 1000) {
243
296
  if (value === undefined || value === null || value === true || value === '') return fallbackMs;
244
297
  const raw = String(value).trim().toLowerCase();
@@ -2502,12 +2555,15 @@ function install() {
2502
2555
  }
2503
2556
 
2504
2557
  async function gateCheck() {
2505
- // HOTFIX 2026-06-03 emergency owner bypass. Always approve.
2506
- // Restore: set THUMBGATE_HOTFIX_BYPASS=0
2507
- if (process.env.THUMBGATE_HOTFIX_BYPASS === '1' || (process.env.NODE_ENV !== 'test' && process.env.THUMBGATE_HOTFIX_BYPASS !== '0')) {
2558
+ // Explicit emergency escape hatch ONLY. The 2026-06-03 hotfix made this
2559
+ // bypass-by-default, which silently disabled ThumbGate's enforcement entirely
2560
+ // (the firewall approved everything). Restored 2026-06-04: enforcement runs by
2561
+ // default in warn-by-default posture (see gates-engine applyEnforcementPosture);
2562
+ // set THUMBGATE_HOTFIX_BYPASS=1 to disable all checks if a gate ever misfires.
2563
+ if (process.env.THUMBGATE_HOTFIX_BYPASS === '1') {
2508
2564
  process.stdout.write(JSON.stringify({
2509
2565
  decision: 'approve',
2510
- reason: 'hotfix-bypass-2026-06-03',
2566
+ reason: 'hotfix-bypass-opt-in',
2511
2567
  hookSpecificOutput: { hookEventName: 'PreToolUse', additionalContext: '' }
2512
2568
  }) + '\n');
2513
2569
  return;
@@ -2669,28 +2725,23 @@ function installMcp() {
2669
2725
  function dashboard() {
2670
2726
  const args = parseArgs(process.argv.slice(3));
2671
2727
  if (args.open || args.web) {
2672
- const { exec } = require('child_process');
2673
2728
  const { resolveProjectDir } = require(path.join(PKG_ROOT, 'scripts', 'feedback-paths'));
2674
2729
  const projectDir = resolveProjectDir({ cwd: process.cwd(), env: process.env });
2675
2730
  const port = process.env.PORT || 3456;
2676
- const url = `http://localhost:${port}/dashboard?project=${encodeURIComponent(projectDir)}`;
2677
-
2678
- console.log(`Opening browser to: ${url}`);
2679
- let command;
2680
- if (process.platform === 'darwin') {
2681
- command = `open "${url}"`;
2682
- } else if (process.platform === 'win32') {
2683
- command = `start "" "${url}"`;
2684
- } else {
2685
- command = `xdg-open "${url}"`;
2686
- }
2687
-
2688
- exec(command, (err) => {
2689
- if (err) {
2690
- console.error('Failed to open browser:', err.message);
2691
- }
2692
- process.exit(err ? 1 : 0);
2693
- });
2731
+ const url = `http://127.0.0.1:${port}/dashboard?project=${encodeURIComponent(projectDir)}`;
2732
+
2733
+ ensureDash(Number(port))
2734
+ .then((server) => {
2735
+ if (server.started) {
2736
+ console.log(`API ${port} pid ${server.pid}`);
2737
+ }
2738
+ return openBrowser(url);
2739
+ })
2740
+ .then(() => process.exit(0))
2741
+ .catch((err) => {
2742
+ console.error(err && err.message ? err.message : err);
2743
+ process.exit(1);
2744
+ });
2694
2745
  return;
2695
2746
  }
2696
2747
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thumbgate",
3
- "version": "1.27.2",
3
+ "version": "1.27.4",
4
4
  "description": "ThumbGate self-improving agent governance: thumbs-up/down turns every mistake into a prevention rule and blocks repeat patterns. 36 pre-action checks, budget enforcement, and self-protection for Claude Code, Cursor, Codex, Gemini CLI, and Amp.",
5
5
  "homepage": "https://thumbgate.ai",
6
6
  "repository": {
@@ -221,7 +221,6 @@
221
221
  "scripts/workspace-agent-routines.js",
222
222
  "scripts/workspace-evolver.js",
223
223
  "scripts/xmemory-lite.js",
224
- ".claude-plugin/marketplace.json",
225
224
  ".claude-plugin/plugin.json",
226
225
  ".well-known/",
227
226
  "LICENSE",
@@ -242,6 +241,7 @@
242
241
  "bin/postinstall.js",
243
242
  "config/",
244
243
  "openapi/",
244
+ "public/about.html",
245
245
  "public/agent-manager.html",
246
246
  "public/blog.html",
247
247
  "public/codex-enterprise.html",
@@ -482,7 +482,7 @@
482
482
  "test:session-analyzer": "node --test tests/session-analyzer.test.js",
483
483
  "test:tessl": "node --test tests/tessl-export.test.js",
484
484
  "test:gates": "node --test tests/gate-templates.test.js tests/gates-engine.test.js tests/claim-verification.test.js tests/secret-scanner.test.js tests/secret-fixture-safety.test.js tests/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js tests/docker-sandbox-planner.test.js tests/mcp-tools-suggest-fix.test.js",
485
- "test:budget": "node --test tests/budget-enforcer.test.js",
485
+ "test:budget": "node --test tests/budget-guard.test.js tests/budget-enforcer.test.js tests/tokenomics-cost-guard.test.js",
486
486
  "test:workers": "npm --prefix workers ci && npm --prefix workers test",
487
487
  "test:evoskill": "node --test tests/evoskill.test.js",
488
488
  "test:gates-hardening": "node --test tests/gates-hardening.test.js",
@@ -0,0 +1,162 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta name="generator" content="ThumbGate">
5
+ <meta name="author" content="Igor Ganapolsky">
6
+ <meta charset="UTF-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ __GOOGLE_SITE_VERIFICATION_META__
9
+ <link rel="icon" type="image/png" href="/thumbgate-icon.png">
10
+ <link rel="alternate icon" type="image/svg+xml" href="/assets/brand/thumbgate-mark.svg">
11
+ <title>About Igor Ganapolsky โ€” ThumbGate</title>
12
+ <meta name="description" content="Igor Ganapolsky โ€” Senior AI &amp; Mobile Engineer building ThumbGate, an agent-governance layer for Claude Code, Cursor, Codex, and Gemini. Production Stripe Connect, Agentic RAG, and React Native experience.">
13
+ <meta property="og:title" content="About Igor Ganapolsky โ€” ThumbGate">
14
+ <meta property="og:description" content="Senior AI &amp; Mobile Engineer. Builder of ThumbGate. Production Stripe Connect + Agentic RAG + React Native engineer for hire.">
15
+ <meta property="og:type" content="profile">
16
+ <meta property="og:url" content="https://thumbgate.ai/about">
17
+ <meta property="og:image" content="https://thumbgate.ai/og.png">
18
+ <meta name="twitter:card" content="summary_large_image">
19
+ <link rel="canonical" href="https://thumbgate.ai/about">
20
+ <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="https://thumbgate.ai/llm-context.md">
21
+
22
+ <script type="application/ld+json">
23
+ {
24
+ "@context": "https://schema.org",
25
+ "@type": "Person",
26
+ "name": "Igor Ganapolsky",
27
+ "givenName": "Igor",
28
+ "familyName": "Ganapolsky",
29
+ "alternateName": ["iganapolsky", "IgorGanapolsky"],
30
+ "url": "https://thumbgate.ai/about",
31
+ "image": "https://thumbgate.ai/og.png",
32
+ "jobTitle": "Senior AI & Mobile Engineer",
33
+ "description": "Production Stripe Connect, Agentic RAG, React Native, and AI-agent governance engineer. Creator of ThumbGate โ€” pre-action defense for AI coding agents.",
34
+ "knowsAbout": [
35
+ "Agentic RAG",
36
+ "Stripe Connect",
37
+ "Stripe Billing",
38
+ "React Native",
39
+ "Android",
40
+ "Claude Code",
41
+ "Cursor",
42
+ "Codex",
43
+ "Gemini",
44
+ "AI agent governance",
45
+ "LLM cost optimization",
46
+ "Pre-action checks",
47
+ "Workflow hardening",
48
+ "Context engineering",
49
+ "MCP servers",
50
+ "LangChain",
51
+ "LangGraph",
52
+ "Patchright",
53
+ "Playwright",
54
+ "OpenAI API",
55
+ "Anthropic API"
56
+ ],
57
+ "address": {
58
+ "@type": "PostalAddress",
59
+ "addressLocality": "Coral Springs",
60
+ "addressRegion": "FL",
61
+ "addressCountry": "US"
62
+ },
63
+ "email": "iganapolsky@gmail.com",
64
+ "sameAs": [
65
+ "https://github.com/IgorGanapolsky",
66
+ "https://www.linkedin.com/in/igor-ganapolsky-5324b7330",
67
+ "https://dev.to/igorganapolsky",
68
+ "https://www.upwork.com/freelancers/~01b5f08ed8b1a9a3c1",
69
+ "https://huggingface.co/IgorGanapolsky",
70
+ "https://x.com/igorganapolsky"
71
+ ],
72
+ "worksFor": {
73
+ "@type": "Organization",
74
+ "name": "ThumbGate",
75
+ "url": "https://thumbgate.ai/"
76
+ },
77
+ "owns": {
78
+ "@type": "SoftwareApplication",
79
+ "name": "ThumbGate",
80
+ "applicationCategory": "DeveloperApplication",
81
+ "description": "Pre-action defense for AI coding agents โ€” thumbs up/down become history-aware lessons across Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode."
82
+ }
83
+ }
84
+ </script>
85
+
86
+ <style>
87
+ body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text",Inter,system-ui,sans-serif;line-height:1.6;color:#0f172a;background:#fafafa}
88
+ header{padding:1rem 1.5rem;border-bottom:1px solid #e5e7eb;background:#fff;display:flex;align-items:center;gap:1rem}
89
+ header a{color:#0f172a;text-decoration:none;font-weight:600}
90
+ main{max-width:780px;margin:0 auto;padding:2.5rem 1.5rem}
91
+ h1{font-size:2rem;margin:0 0 .25rem}
92
+ h2{margin-top:2rem;font-size:1.25rem}
93
+ .lede{font-size:1.125rem;color:#475569}
94
+ .chips{display:flex;flex-wrap:wrap;gap:.4rem;margin:.75rem 0 0}
95
+ .chip{display:inline-block;padding:.2rem .55rem;border:1px solid #e2e8f0;border-radius:9999px;font-size:.85rem;color:#334155;background:#fff}
96
+ ul.links{list-style:none;padding:0;margin:1rem 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:.5rem}
97
+ ul.links li a{display:block;padding:.6rem .8rem;background:#fff;border:1px solid #e2e8f0;border-radius:.5rem;color:#0f172a;text-decoration:none}
98
+ ul.links li a:hover{border-color:#0f172a}
99
+ .section{background:#fff;border:1px solid #e5e7eb;border-radius:.75rem;padding:1.25rem 1.5rem;margin:1.25rem 0}
100
+ footer{padding:2rem 1.5rem;color:#64748b;font-size:.9rem;text-align:center}
101
+ </style>
102
+ </head>
103
+ <body>
104
+
105
+ <header>
106
+ <a href="/">ThumbGate</a>
107
+ <span style="color:#94a3b8">/</span>
108
+ <span>About</span>
109
+ </header>
110
+
111
+ <main>
112
+
113
+ <h1>Igor Ganapolsky</h1>
114
+ <p class="lede">Senior AI &amp; Mobile Engineer. Builder of <a href="/">ThumbGate</a> โ€” pre-action defense for AI coding agents. Available for high-leverage Stripe Connect, Agentic RAG, and React Native contract engagements.</p>
115
+
116
+ <div class="chips">
117
+ <span class="chip">Coral Springs, FL ยท US</span>
118
+ <span class="chip">Agentic RAG</span>
119
+ <span class="chip">Stripe Connect</span>
120
+ <span class="chip">React Native</span>
121
+ <span class="chip">Android</span>
122
+ <span class="chip">Claude Code ยท Cursor ยท Codex ยท Gemini</span>
123
+ </div>
124
+
125
+ <section class="section">
126
+ <h2>What I build</h2>
127
+ <p><strong>ThumbGate</strong> is the agent-governance layer that turns ๐Ÿ‘ / ๐Ÿ‘Ž signals into history-aware lessons across Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode. Pre-Action Checks block the next repeated mistake before the tool call runs โ€” workflow shape, inspection evidence, token budget, and repeated-failure memory in one gate.</p>
128
+ <p>Outside ThumbGate, I ship production Stripe Connect marketplaces, Agentic RAG systems with LanceDB / pgvector / FAISS retrieval, React Native + Android apps, and LLM cost-instrumentation layers.</p>
129
+ </section>
130
+
131
+ <section class="section">
132
+ <h2>Recent ships</h2>
133
+ <ul>
134
+ <li><strong>Hilltown Media Group ยท Pretix Stripe Connect plugin</strong> โ€” production payments + automation, 100% test coverage, milestone-funded delivery.</li>
135
+ <li><strong>ThumbGate v1.27</strong> โ€” pre-action governance for AI coding agents, available on npm as <code>thumbgate</code>.</li>
136
+ <li><strong>Resume revenue ML stack</strong> โ€” Thompson-sampling bandit + copy/buyer logistic regression + Agentic RAG for closed-loop UpWork bidding.</li>
137
+ </ul>
138
+ </section>
139
+
140
+ <section class="section">
141
+ <h2>For hire</h2>
142
+ <p>Available for fixed-price engagements โ‰ฅ $2K and ongoing retainers. Standard rate $120โ€“150/hr 1099. Strong signal on Stripe Connect &amp; Billing audits, RAG + LLM evaluation harnesses, and React Native + Android engineering. Email <a href="mailto:iganapolsky@gmail.com">iganapolsky@gmail.com</a> or reach me on <a href="https://www.upwork.com/freelancers/~01b5f08ed8b1a9a3c1">Upwork</a>.</p>
143
+ </section>
144
+
145
+ <h2>Links</h2>
146
+ <ul class="links">
147
+ <li><a href="https://github.com/IgorGanapolsky" rel="me">GitHub</a></li>
148
+ <li><a href="https://www.linkedin.com/in/igor-ganapolsky-5324b7330" rel="me">LinkedIn</a></li>
149
+ <li><a href="https://dev.to/igorganapolsky" rel="me">dev.to</a></li>
150
+ <li><a href="https://www.upwork.com/freelancers/~01b5f08ed8b1a9a3c1" rel="me">Upwork</a></li>
151
+ <li><a href="https://huggingface.co/IgorGanapolsky" rel="me">Hugging Face</a></li>
152
+ <li><a href="https://x.com/igorganapolsky" rel="me">X</a></li>
153
+ </ul>
154
+
155
+ </main>
156
+
157
+ <footer>
158
+ ยฉ 2026 ThumbGate ยท Built by <a href="/about">Igor Ganapolsky</a>
159
+ </footer>
160
+
161
+ </body>
162
+ </html>
@@ -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 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."
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. Enterprise (custom pricing, scoped after intake) 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 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>
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. Enterprise (custom pricing, scoped after intake) adds a shared lesson database and org dashboard.</p>
315
315
  </div>
316
316
 
317
317
  <div class="card">