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.
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +28 -26
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/mcp/server-stdio.js +14 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +75 -24
- package/package.json +3 -3
- package/public/about.html +162 -0
- package/public/compare.html +2 -2
- package/public/dashboard.html +32 -30
- package/public/guide.html +2 -2
- package/public/index.html +61 -54
- package/public/numbers.html +2 -2
- package/public/pricing.html +23 -36
- package/public/pro.html +3 -3
- package/scripts/commercial-offer.js +10 -2
- package/scripts/dashboard-chat.js +173 -72
- package/scripts/dashboard.js +17 -3
- package/scripts/gates-engine.js +43 -6
- package/scripts/oss-pr-opportunity-scout.js +35 -5
- package/scripts/rate-limiter.js +2 -2
- package/scripts/seo-gsd.js +60 -0
- package/scripts/workflow-sentinel.js +111 -68
- package/src/api/server.js +363 -154
- package/.claude-plugin/marketplace.json +0 -85
|
@@ -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.
|
|
4
|
+
"version": "1.27.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
7
7
|
"email": "ig5973700@gmail.com",
|
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
|
|
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
|
[](https://github.com/IgorGanapolsky/ThumbGate/actions/workflows/ci.yml)
|
|
30
30
|
[](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) |
|
|
383
|
-
|
|
384
|
-
| Local CLI + enforced checks | โ
| โ
| โ
|
|
|
385
|
-
| Feedback captures | 5/day
|
|
386
|
-
|
|
|
387
|
-
| MCP agent integrations | All | All | All |
|
|
388
|
-
| Personal dashboard | โ | โ
| โ
|
|
|
389
|
-
| DPO export (model fine-tuning) | โ | โ
| โ
|
|
|
390
|
-
|
|
|
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
|
|
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.
|
|
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
|
|
542
|
+
## Enterprise Data Chat and Optional Google Adapters
|
|
543
543
|
|
|
544
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
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
|
|
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
|
-
//
|
|
2506
|
-
//
|
|
2507
|
-
|
|
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-
|
|
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://
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
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.
|
|
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 & 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 & 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 & 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 & 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>
|
package/public/compare.html
CHANGED
|
@@ -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.
|
|
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.
|
|
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">
|