thumbgate 1.3.0 → 1.4.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 +32 -13
- package/.claude-plugin/plugin.json +15 -2
- package/.well-known/llms.txt +60 -0
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +109 -20
- package/adapters/README.md +1 -1
- package/adapters/chatgpt/openapi.yaml +168 -0
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/mcp/server-stdio.js +84 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +200 -13
- package/bin/postinstall.js +8 -2
- package/config/budget.json +18 -0
- package/config/gates/code-edit.json +61 -0
- package/config/gates/db-write.json +61 -0
- package/config/gates/default.json +154 -3
- package/config/gates/deploy.json +61 -0
- package/config/github-about.json +2 -1
- package/config/merge-quality-checks.json +23 -0
- package/openapi/openapi.yaml +168 -0
- package/package.json +42 -10
- package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-codex-bridge/.mcp.json +1 -1
- package/plugins/claude-codex-bridge/scripts/codex-bridge.js +1 -3
- package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
- package/plugins/codex-profile/.mcp.json +1 -1
- package/plugins/codex-profile/INSTALL.md +27 -4
- package/plugins/codex-profile/README.md +33 -9
- package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
- package/plugins/opencode-profile/INSTALL.md +1 -1
- package/public/blog.html +73 -0
- package/public/compare/mem0.html +189 -0
- package/public/compare/speclock.html +180 -0
- package/public/compare.html +10 -2
- package/public/guide.html +2 -2
- package/public/guides/claude-code-prevent-repeated-mistakes.html +161 -0
- package/public/guides/codex-cli-guardrails.html +158 -0
- package/public/guides/cursor-prevent-repeated-mistakes.html +161 -0
- package/public/guides/pre-action-gates.html +162 -0
- package/public/guides/stop-repeated-ai-agent-mistakes.html +159 -0
- package/public/index.html +136 -50
- package/public/lessons.html +33 -24
- package/public/llm-context.md +140 -0
- package/public/pro.html +24 -22
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- package/scripts/access-anomaly-detector.js +1 -1
- package/scripts/adk-consolidator.js +1 -5
- package/scripts/agent-security-hardening.js +4 -6
- package/scripts/agentic-data-pipeline.js +1 -3
- package/scripts/async-job-runner.js +1 -5
- package/scripts/audit-trail.js +1 -5
- package/scripts/background-agent-governance.js +2 -10
- package/scripts/billing.js +2 -16
- package/scripts/budget-enforcer.js +173 -0
- package/scripts/build-codex-plugin.js +152 -0
- package/scripts/check-congruence.js +132 -14
- package/scripts/commercial-offer.js +5 -7
- package/scripts/content-engine/linkedin-content-generator.js +154 -0
- package/scripts/content-engine/output/linkedin-memento-validation.md +17 -0
- package/scripts/content-engine/output/linkedin-posts-2026-04-09.md +175 -0
- package/scripts/content-engine/reddit-thread-finder.js +154 -0
- package/scripts/context-engine.js +21 -6
- package/scripts/contextfs.js +1 -21
- package/scripts/dashboard.js +20 -0
- package/scripts/decision-journal.js +341 -0
- package/scripts/delegation-runtime.js +1 -5
- package/scripts/distribution-surfaces.js +26 -0
- package/scripts/document-intake.js +927 -0
- package/scripts/ephemeral-agent-store.js +1 -8
- package/scripts/evolution-state.js +1 -5
- package/scripts/experiment-tracker.js +1 -5
- package/scripts/export-databricks-bundle.js +1 -5
- package/scripts/export-hf-dataset.js +1 -5
- package/scripts/export-training.js +1 -5
- package/scripts/feedback-attribution.js +1 -16
- package/scripts/feedback-history-distiller.js +1 -16
- package/scripts/feedback-loop.js +1 -5
- package/scripts/feedback-root-consolidator.js +2 -21
- package/scripts/feedback-session.js +49 -0
- package/scripts/feedback-to-rules.js +188 -28
- package/scripts/filesystem-search.js +1 -9
- package/scripts/fs-utils.js +104 -0
- package/scripts/gates-engine.js +149 -4
- package/scripts/github-about.js +32 -8
- package/scripts/gtm-revenue-loop.js +1 -5
- package/scripts/harness-selector.js +148 -0
- package/scripts/hosted-job-launcher.js +1 -5
- package/scripts/hybrid-feedback-context.js +7 -33
- package/scripts/intervention-policy.js +58 -1
- package/scripts/lesson-db.js +3 -18
- package/scripts/lesson-inference.js +194 -16
- package/scripts/lesson-retrieval.js +60 -24
- package/scripts/llm-client.js +59 -0
- package/scripts/managed-lesson-agent.js +183 -0
- package/scripts/marketing-experiment.js +8 -22
- package/scripts/meta-agent-loop.js +624 -0
- package/scripts/metered-billing.js +1 -1
- package/scripts/money-watcher.js +1 -4
- package/scripts/obsidian-export.js +1 -5
- package/scripts/operational-integrity.js +15 -3
- package/scripts/org-dashboard.js +6 -1
- package/scripts/per-step-scoring.js +2 -4
- package/scripts/pr-manager.js +201 -19
- package/scripts/pro-features.js +3 -2
- package/scripts/prompt-dlp.js +3 -3
- package/scripts/prove-adapters.js +1 -5
- package/scripts/prove-attribution.js +1 -5
- package/scripts/prove-automation.js +1 -3
- package/scripts/prove-cloudflare-sandbox.js +1 -3
- package/scripts/prove-data-pipeline.js +1 -3
- package/scripts/prove-intelligence.js +1 -3
- package/scripts/prove-lancedb.js +1 -5
- package/scripts/prove-local-intelligence.js +1 -3
- package/scripts/prove-packaged-runtime.js +75 -9
- package/scripts/prove-predictive-insights.js +1 -3
- package/scripts/prove-training-export.js +1 -3
- package/scripts/prove-workflow-contract.js +1 -5
- package/scripts/rate-limiter.js +3 -1
- package/scripts/reddit-dm-outreach.js +14 -4
- package/scripts/schedule-manager.js +3 -5
- package/scripts/security-scanner.js +448 -0
- package/scripts/self-distill-agent.js +579 -0
- package/scripts/semantic-dedup.js +115 -0
- package/scripts/skill-exporter.js +1 -3
- package/scripts/skill-generator.js +1 -5
- package/scripts/social-analytics/engagement-audit.js +1 -18
- package/scripts/social-analytics/pollers/linkedin.js +26 -16
- package/scripts/social-analytics/publishers/linkedin.js +1 -1
- package/scripts/social-analytics/publishers/zernio.js +51 -0
- package/scripts/social-pipeline.js +1 -3
- package/scripts/social-post-hourly.js +47 -4
- package/scripts/statusline-links.js +6 -5
- package/scripts/statusline.sh +29 -153
- package/scripts/sync-branch-protection.js +340 -0
- package/scripts/tessl-export.js +1 -3
- package/scripts/thumbgate-search.js +32 -1
- package/scripts/tool-kpi-tracker.js +1 -1
- package/scripts/tool-registry.js +106 -2
- package/scripts/vector-store.js +1 -5
- package/scripts/weekly-auto-post.js +1 -1
- package/scripts/workflow-sentinel.js +91 -0
- package/skills/thumbgate/SKILL.md +1 -1
- package/src/api/server.js +273 -4
- package/scripts/social-analytics/db/social-analytics.db-shm +0 -0
- /package/scripts/social-analytics/db/{social-analytics.db-wal → analytics.sqlite} +0 -0
package/public/index.html
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
<meta charset="UTF-8">
|
|
20
20
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
21
21
|
__GOOGLE_SITE_VERIFICATION_META__
|
|
22
|
-
<title>ThumbGate —
|
|
23
|
-
<meta name="description" content="
|
|
24
|
-
<meta property="og:title" content="ThumbGate —
|
|
25
|
-
<meta property="og:description" content="
|
|
22
|
+
<title>ThumbGate — Agent governance for AI coding workflows</title>
|
|
23
|
+
<meta name="description" content="CLI-first agent governance for teams shipping AI-generated changes. 👎 Thumbs down distills history-aware lessons from up to 8 prior entries and stays linked to a 60-second feedback session. 👍 Thumbs up reinforces safe patterns. Pre-action gates, workflow governance, shared lessons and org visibility, release confidence, and isolated execution guidance turn vibe coding mistakes into shared enforcement and proof-ready rollout.">
|
|
24
|
+
<meta property="og:title" content="ThumbGate — Agent governance for AI coding workflows">
|
|
25
|
+
<meta property="og:description" content="CLI-first agent governance for teams shipping AI-generated changes. 👎 Thumbs down distills history-aware lessons from up to 8 prior entries and stays linked to a 60-second feedback session. 👍 Thumbs up reinforces safe patterns. Pre-action gates, workflow governance, shared lessons and org visibility, release confidence, and isolated execution guidance turn vibe coding mistakes into shared enforcement and proof-ready rollout.">
|
|
26
26
|
<meta property="og:type" content="website">
|
|
27
|
-
<meta name="keywords" content="ThumbGate, thumbgate,
|
|
27
|
+
<meta name="keywords" content="ThumbGate, thumbgate, agent governance, AI coding workflow governance, workflow hardening sprint, pre-action gates, CLI-first agent safety, Claude Code, Cursor, Codex, Gemini, Amp, OpenCode, approval policies, audit trail, release confidence, Docker Sandboxes, feedback enforcement, context engineering, AI authenticity, prevent AI slop, human-led AI, AI agent standards enforcement, brand authenticity AI">
|
|
28
28
|
|
|
29
29
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
30
30
|
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
@@ -44,14 +44,14 @@ __GA_BOOTSTRAP__
|
|
|
44
44
|
"@type": "SoftwareApplication",
|
|
45
45
|
"name": "ThumbGate",
|
|
46
46
|
"alternateName": "thumbgate",
|
|
47
|
-
"description": "
|
|
47
|
+
"description": "ThumbGate is a CLI-first agent governance control plane for AI coding workflows. Every repeated failure can become shared enforcement, every risky rollout can carry approval and audit boundaries, and high-risk local autonomy can be routed toward isolated execution instead of running directly on the host.",
|
|
48
48
|
"applicationCategory": "DeveloperApplication",
|
|
49
49
|
"operatingSystem": "Cross-platform, Node.js >=18.18.0",
|
|
50
50
|
"license": "https://opensource.org/licenses/MIT",
|
|
51
51
|
"url": "https://github.com/IgorGanapolsky/ThumbGate",
|
|
52
52
|
"downloadUrl": "https://www.npmjs.com/package/thumbgate",
|
|
53
53
|
"installUrl": "https://www.npmjs.com/package/thumbgate",
|
|
54
|
-
"dateModified": "2026-04-
|
|
54
|
+
"dateModified": "2026-04-09",
|
|
55
55
|
"creator": {
|
|
56
56
|
"@type": "Person",
|
|
57
57
|
"name": "Igor Ganapolsky",
|
|
@@ -71,7 +71,8 @@ __GA_BOOTSTRAP__
|
|
|
71
71
|
"Prompt-Level DLP — scans tool call inputs before execution",
|
|
72
72
|
"Per-Step Scoring — every gate decision becomes a DPO/KTO training signal",
|
|
73
73
|
"HuggingFace Export — share PII-redacted agent traces as open training datasets",
|
|
74
|
-
"Unified Context — one-call context assembly with session, lessons, guards, and code-graph"
|
|
74
|
+
"Unified Context — one-call context assembly with session, lessons, guards, and code-graph",
|
|
75
|
+
"AI Authenticity Enforcement — every gate reflects your team's actual standards, not generic AI patterns"
|
|
75
76
|
],
|
|
76
77
|
"offers": [
|
|
77
78
|
{
|
|
@@ -81,12 +82,20 @@ __GA_BOOTSTRAP__
|
|
|
81
82
|
"priceCurrency": "USD",
|
|
82
83
|
"description": "Local enforcement — captures, recalls, gates, and PreToolUse hook blocking for solo devs"
|
|
83
84
|
},
|
|
85
|
+
{
|
|
86
|
+
"@type": "Offer",
|
|
87
|
+
"name": "Team",
|
|
88
|
+
"price": "99",
|
|
89
|
+
"priceCurrency": "USD",
|
|
90
|
+
"description": "Intake-led team rollout with a workflow hardening sprint, shared enforcement memory, org dashboard visibility, approval boundaries, release confidence, Docker Sandboxes guidance for risky local autonomy, and pilot support for teams shipping AI-generated changes",
|
|
91
|
+
"url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
|
|
92
|
+
},
|
|
84
93
|
{
|
|
85
94
|
"@type": "Offer",
|
|
86
95
|
"name": "Pro Monthly",
|
|
87
96
|
"price": "19",
|
|
88
97
|
"priceCurrency": "USD",
|
|
89
|
-
"description": "
|
|
98
|
+
"description": "Self-serve side lane for solo operators who want a personal local dashboard, DPO export, and proof-ready exports",
|
|
90
99
|
"url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&landing_path=%2F"
|
|
91
100
|
},
|
|
92
101
|
{
|
|
@@ -96,14 +105,6 @@ __GA_BOOTSTRAP__
|
|
|
96
105
|
"priceCurrency": "USD",
|
|
97
106
|
"description": "Annual Pro for individual operators who want the personal local dashboard and proof-ready exports",
|
|
98
107
|
"url": "https://thumbgate-production.up.railway.app/checkout/pro?plan_id=pro&billing_cycle=annual&landing_path=%2F"
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
"@type": "Offer",
|
|
102
|
-
"name": "Team",
|
|
103
|
-
"price": "12",
|
|
104
|
-
"priceCurrency": "USD",
|
|
105
|
-
"description": "Intake-led team rollout with a workflow hardening sprint, shared enforcement memory, org dashboard visibility, Docker Sandboxes guidance for risky local autonomy, and pilot support for teams shipping AI-generated changes",
|
|
106
|
-
"url": "https://thumbgate-production.up.railway.app/#workflow-sprint-intake"
|
|
107
108
|
}
|
|
108
109
|
]
|
|
109
110
|
}
|
|
@@ -120,7 +121,7 @@ __GA_BOOTSTRAP__
|
|
|
120
121
|
"@type": "HowToStep",
|
|
121
122
|
"position": 1,
|
|
122
123
|
"name": "Install ThumbGate",
|
|
123
|
-
"text": "Run: npx thumbgate init --agent claude-code. This
|
|
124
|
+
"text": "Run: npx thumbgate init --agent claude-code. This installs the local CLI gateway and wires the agent's MCP transport automatically. No API key needed and the core path stays local."
|
|
124
125
|
},
|
|
125
126
|
{
|
|
126
127
|
"@type": "HowToStep",
|
|
@@ -199,6 +200,14 @@ __GA_BOOTSTRAP__
|
|
|
199
200
|
"text": "Prompt rules are suggestions agents can ignore. Pre-Action Gates are enforcement — they block the action before execution via PreToolUse hooks. Gates are auto-generated from feedback and use Thompson Sampling to adapt."
|
|
200
201
|
}
|
|
201
202
|
},
|
|
203
|
+
{
|
|
204
|
+
"@type": "Question",
|
|
205
|
+
"name": "How does ThumbGate prevent AI slop and protect brand authenticity?",
|
|
206
|
+
"acceptedAnswer": {
|
|
207
|
+
"@type": "Answer",
|
|
208
|
+
"text": "AI slop happens when agents act without human judgment as a hard gate — generating repetitive, generic outputs that erode trust and dilute your brand. ThumbGate inserts human thumbs-up/down between AI intent and execution. Every thumbs-down becomes a prevention rule that blocks the bad pattern permanently. Every thumbs-up reinforces what 'good' looks like for your specific context. Your agent's outputs reflect your actual standards, not generic AI patterns. This is authenticity enforcement at the tool-call level."
|
|
209
|
+
}
|
|
210
|
+
},
|
|
202
211
|
{
|
|
203
212
|
"@type": "Question",
|
|
204
213
|
"name": "How is ThumbGate different from SpecLock?",
|
|
@@ -448,28 +457,43 @@ __GA_BOOTSTRAP__
|
|
|
448
457
|
<div class="hero-signals">
|
|
449
458
|
<div class="signal-pill signal-down">👎 Repeated failure becomes enforcement before the next run</div>
|
|
450
459
|
<div class="signal-pill signal-up">👍 Safe pattern reinforced across the shared workflow</div>
|
|
460
|
+
<div class="signal-pill">🛡️ Human judgment gates every AI action — your standards, not AI slop</div>
|
|
451
461
|
</div>
|
|
452
462
|
<p class="hero-persona">For consultancies, platform teams, and AI product teams with one workflow owner, one repeated failure, and one buyer who needs proof before a wider rollout.</p>
|
|
453
463
|
<p><strong>Best first paid motion:</strong> start with one repo, one workflow, and one repeat failure. ThumbGate turns the blocker into enforcement, routes risky runs toward isolated execution, and gives the buyer a proof-ready story around shared memory, approval boundaries, release confidence, and auditability.</p>
|
|
454
464
|
<div class="hero-actions">
|
|
455
465
|
<a href="#workflow-sprint-intake" class="btn-team">Start Workflow Hardening Sprint</a>
|
|
456
|
-
<a href="/
|
|
466
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" class="btn-install-link" target="_blank" rel="noopener">Install Codex plugin</a>
|
|
467
|
+
<a href="/guide?utm_source=website&utm_medium=homepage_hero&utm_campaign=install_free" class="btn-pro-page btn-install-link">Install Free CLI</a>
|
|
457
468
|
<a href="/dashboard?utm_source=website&utm_medium=homepage_hero&utm_campaign=demo" class="btn-demo-link">Open dashboard demo</a>
|
|
458
469
|
</div>
|
|
459
|
-
<p class="hero-paid-note"><strong>
|
|
470
|
+
<p class="hero-paid-note"><strong>Running Codex?</strong> Download the published plugin bundle or open the <a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/plugins/codex-profile/INSTALL.md" target="_blank" rel="noopener">Codex install guide</a> for the repo-local profile and MCP path.</p>
|
|
471
|
+
<p class="hero-paid-note"><strong>Start free as an individual.</strong> Pro stays the self-serve lane for personal dashboard and DPO export. Team pricing anchors at <strong>$99/seat/mo with a 3-seat minimum</strong>, but the team path starts intake-first with the Workflow Hardening Sprint so buyers see proof before a wider rollout.</p>
|
|
460
472
|
<div class="hero-install" onclick="copyInstall(this)" title="Click to copy">
|
|
461
473
|
<span class="prompt">$</span>
|
|
462
474
|
<span class="cmd">npx thumbgate init</span>
|
|
463
475
|
<span class="copy-hint">click to copy</span>
|
|
464
476
|
</div>
|
|
465
477
|
<div class="proof-bar">
|
|
466
|
-
<a href="
|
|
478
|
+
<a href="/guide" rel="noopener">CLI-first setup guide →</a>
|
|
479
|
+
<span class="dot"></span>
|
|
480
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip" target="_blank" rel="noopener">Codex plugin download →</a>
|
|
481
|
+
<span class="dot"></span>
|
|
482
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/VERIFICATION_EVIDENCE.md" target="_blank" rel="noopener">Verification evidence →</a>
|
|
483
|
+
<span class="dot"></span>
|
|
484
|
+
<a href="https://arxiv.org/abs/2603.18743" target="_blank" rel="noopener">Research-backed (Memento-Skills, arXiv 2603.18743) →</a>
|
|
485
|
+
<span class="dot"></span>
|
|
486
|
+
<a href="https://blog.langchain.dev/continual-learning-for-ai-agents/" target="_blank" rel="noopener">Three-layer continual learning (LangChain) →</a>
|
|
467
487
|
<span class="dot"></span>
|
|
468
|
-
<a href="https://
|
|
488
|
+
<a href="https://cloud.google.com/blog/topics/healthcare-life-sciences/ensuring-safety-and-quality-in-healthcare-qa-agents" target="_blank" rel="noopener">Google Cloud safety framework architecture →</a>
|
|
469
489
|
<span class="dot"></span>
|
|
470
490
|
<a href="https://www.producthunt.com/products/thumbgate" target="_blank" rel="noopener">Product Hunt →</a>
|
|
471
491
|
<span class="dot"></span>
|
|
472
|
-
<a href="https://github.com/IgorGanapolsky/ThumbGate/
|
|
492
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">Proof-backed CI →</a>
|
|
493
|
+
<span class="dot"></span>
|
|
494
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/docs/RELEASE_CONFIDENCE.md" target="_blank" rel="noopener">Release confidence →</a>
|
|
495
|
+
<span class="dot"></span>
|
|
496
|
+
<a href="https://github.com/IgorGanapolsky/ThumbGate/actions" target="_blank" rel="noopener">CI and proof lanes →</a>
|
|
473
497
|
<span class="dot"></span>
|
|
474
498
|
<a href="#compatibility">Claude Code · Cursor · Codex · Gemini · Amp · OpenCode</a>
|
|
475
499
|
</div>
|
|
@@ -486,6 +510,11 @@ __GA_BOOTSTRAP__
|
|
|
486
510
|
<p>Claude Code, Claw-code, Codex, Gemini CLI, Amp, and OpenCode all use the same gateway and memory model. Any MCP-compatible agent gets pre-action gates, feedback memory, and enforcement out of the box.</p>
|
|
487
511
|
<div class="card-arrow">View setup guide →</div>
|
|
488
512
|
</a>
|
|
513
|
+
<a class="compat-card" href="https://github.com/IgorGanapolsky/ThumbGate/blob/main/plugins/codex-profile/INSTALL.md" target="_blank" rel="noopener">
|
|
514
|
+
<h3>🧩 Codex plugin</h3>
|
|
515
|
+
<p>Codex ships with a published standalone ThumbGate plugin bundle plus a repo-local plugin profile. Download the zip, extract it, and install without wiring MCP by hand.</p>
|
|
516
|
+
<div class="card-arrow">Get the Codex plugin →</div>
|
|
517
|
+
</a>
|
|
489
518
|
<a class="compat-card" href="/guides/claude-desktop">
|
|
490
519
|
<h3>🧩 Claude Desktop plugin</h3>
|
|
491
520
|
<p>One command install. No build step, no cloud account. Grab the <code>.mcpb</code> bundle or run <code>npx thumbgate init --claude-desktop</code>.</p>
|
|
@@ -498,7 +527,7 @@ __GA_BOOTSTRAP__
|
|
|
498
527
|
</a>
|
|
499
528
|
<a class="compat-card seo-card" href="https://github.com/IgorGanapolsky/ThumbGate/tree/main/.claude/skills/thumbgate" target="_blank" rel="noopener">
|
|
500
529
|
<h3>⚡ Claude Code Skill</h3>
|
|
501
|
-
<p>Type <code>/thumbgate</code> in any Claude Code session. Auto-triggers on "gate", "feedback", "block mistake". Free skill
|
|
530
|
+
<p>Type <code>/thumbgate</code> in any Claude Code session. Auto-triggers on "gate", "feedback", "block mistake". Free skill on top of the same local gateway teams later harden into a shared workflow.</p>
|
|
502
531
|
<div class="card-arrow">View skill on GitHub →</div>
|
|
503
532
|
</a>
|
|
504
533
|
</div>
|
|
@@ -520,8 +549,8 @@ __GA_BOOTSTRAP__
|
|
|
520
549
|
<p>Every block explains why: which pattern matched, what evidence triggered it, and whether the rule came from your own corrections.</p>
|
|
521
550
|
</div>
|
|
522
551
|
<div class="agent-card">
|
|
523
|
-
<h3>📊 Org Dashboard (
|
|
524
|
-
<p>See which agents are creating review churn, which gates are saving time, and where rollout risk is still concentrated.</p>
|
|
552
|
+
<h3>📊 Org Dashboard (Team)</h3>
|
|
553
|
+
<p>See which agents are creating review churn, which gates are saving time, and where rollout risk is still concentrated across the shared workflow.</p>
|
|
525
554
|
</div>
|
|
526
555
|
<div class="agent-card">
|
|
527
556
|
<h3>🧱 Isolated Execution Lanes</h3>
|
|
@@ -599,7 +628,7 @@ __GA_BOOTSTRAP__
|
|
|
599
628
|
<!-- HOW IT WORKS -->
|
|
600
629
|
<section class="how-it-works" id="how-it-works">
|
|
601
630
|
<div class="container">
|
|
602
|
-
<div class="section-label">New in v1.
|
|
631
|
+
<div class="section-label">New in v1.4.0</div>
|
|
603
632
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
604
633
|
<div class="steps">
|
|
605
634
|
<div class="step">
|
|
@@ -682,17 +711,72 @@ __GA_BOOTSTRAP__
|
|
|
682
711
|
</div>
|
|
683
712
|
</section>
|
|
684
713
|
|
|
714
|
+
<section id="install" style="padding: 60px 40px; max-width: 900px; margin: 0 auto;">
|
|
715
|
+
<h2 style="font-size: 2em; text-align: center; margin-bottom: 40px;">Install for Your Agent</h2>
|
|
716
|
+
|
|
717
|
+
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
|
|
718
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
719
|
+
<h3>Claude Code</h3>
|
|
720
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent claude-code</code>
|
|
721
|
+
<p style="color: #8b949e; font-size: 14px;">Wires PreToolUse hooks automatically</p>
|
|
722
|
+
</div>
|
|
723
|
+
|
|
724
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
725
|
+
<h3>Cursor</h3>
|
|
726
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent cursor</code>
|
|
727
|
+
<p style="color: #8b949e; font-size: 14px;">4 skills: feedback, rules, search, recall</p>
|
|
728
|
+
</div>
|
|
729
|
+
|
|
730
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
731
|
+
<h3>Codex</h3>
|
|
732
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent codex</code>
|
|
733
|
+
<p style="color: #8b949e; font-size: 14px;">6 skills including adversarial review</p>
|
|
734
|
+
</div>
|
|
735
|
+
|
|
736
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
737
|
+
<h3>Gemini CLI</h3>
|
|
738
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent gemini</code>
|
|
739
|
+
<p style="color: #8b949e; font-size: 14px;">Gemini CLI integration</p>
|
|
740
|
+
</div>
|
|
741
|
+
|
|
742
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
743
|
+
<h3>Amp</h3>
|
|
744
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate init --agent amp</code>
|
|
745
|
+
<p style="color: #8b949e; font-size: 14px;">Amp agent integration</p>
|
|
746
|
+
</div>
|
|
747
|
+
|
|
748
|
+
<div style="background: #161b22; border-radius: 12px; padding: 24px; border: 1px solid #30363d;">
|
|
749
|
+
<h3>Any MCP Client</h3>
|
|
750
|
+
<code style="display: block; background: #0d1117; padding: 12px; border-radius: 8px; color: #58a6ff; margin: 12px 0;">npx thumbgate serve</code>
|
|
751
|
+
<p style="color: #8b949e; font-size: 14px;">MCP stdio server for any compatible client</p>
|
|
752
|
+
</div>
|
|
753
|
+
</div>
|
|
754
|
+
|
|
755
|
+
<div style="text-align: center; margin-top: 40px;">
|
|
756
|
+
<h3>Claude Desktop</h3>
|
|
757
|
+
<p style="color: #8b949e;">Add to your <code>claude_desktop_config.json</code>:</p>
|
|
758
|
+
<pre style="background: #0d1117; padding: 16px; border-radius: 8px; color: #58a6ff; text-align: left; display: inline-block; margin: 12px auto;">{
|
|
759
|
+
"mcpServers": {
|
|
760
|
+
"thumbgate": {
|
|
761
|
+
"command": "npx",
|
|
762
|
+
"args": ["--yes", "thumbgate", "serve"]
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}</pre>
|
|
766
|
+
</div>
|
|
767
|
+
</section>
|
|
768
|
+
|
|
685
769
|
<!-- PRICING -->
|
|
686
770
|
<section class="pricing" id="pricing">
|
|
687
771
|
<div class="container">
|
|
688
772
|
<div class="section-label">Pricing</div>
|
|
689
|
-
<h2 class="section-title">
|
|
773
|
+
<h2 class="section-title">Install free. Buy with the workflow hardening sprint. Keep Pro as the solo side lane.</h2>
|
|
690
774
|
<div class="pricing-grid">
|
|
691
775
|
<div class="price-card">
|
|
692
776
|
<div class="tier">Free</div>
|
|
693
777
|
<div class="price">$0</div>
|
|
694
|
-
<div class="price-sub">Forever free ·
|
|
695
|
-
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo developers who want to stop the same agent mistake from showing up twice.</p>
|
|
778
|
+
<div class="price-sub">Forever free · CLI-first local enforcement for one developer</div>
|
|
779
|
+
<p style="font-size:13px;color:#aaa;margin-bottom:16px;">For solo developers who want to stop the same agent mistake from showing up twice and prove value before a team rollout conversation exists.</p>
|
|
696
780
|
<ul>
|
|
697
781
|
<li>3 feedback captures/day · 5 lesson searches/day · unlimited recall</li>
|
|
698
782
|
<li>5 auto-promoted gates plus the core safety policy</li>
|
|
@@ -705,12 +789,12 @@ __GA_BOOTSTRAP__
|
|
|
705
789
|
<a href="https://www.npmjs.com/package/thumbgate" target="_blank" rel="noopener" class="btn-free">Install Free</a>
|
|
706
790
|
</div>
|
|
707
791
|
<div class="price-card pro" data-price-dollars="__PRO_PRICE_DOLLARS__">
|
|
708
|
-
<div class="tier">Pro</div>
|
|
792
|
+
<div class="tier">Solo Pro</div>
|
|
709
793
|
<div class="price">$19<span style="font-size:16px;color:var(--text-dim)">/mo</span></div>
|
|
710
794
|
<div class="price-sub">or $149/yr (save 35%) · Personal dashboard + exports</div>
|
|
711
|
-
<p style="font-size:13px;color:var(--cyan);margin-bottom:16px;font-weight:500;">For individual
|
|
795
|
+
<p style="font-size:13px;color:var(--cyan);margin-bottom:16px;font-weight:500;">For an individual operator who wants a personal dashboard and proof-ready exports without starting the team rollout motion.</p>
|
|
712
796
|
<div class="pro-upgrade-triggers" style="font-size:12px;color:#aaa;margin-bottom:12px;">
|
|
713
|
-
<strong style="color:#fff;">
|
|
797
|
+
<strong style="color:#fff;">Choose Pro when:</strong> you want review-ready evidence, need your own dashboard, or are still operating solo.
|
|
714
798
|
</div>
|
|
715
799
|
<div class="dashboard-preview" style="margin-bottom:16px;border:1px solid #333;border-radius:8px;overflow:hidden;">
|
|
716
800
|
<div style="background:linear-gradient(135deg,#1a1a2e 0%,#16213e 100%);padding:16px;text-align:center;">
|
|
@@ -731,7 +815,7 @@ __GA_BOOTSTRAP__
|
|
|
731
815
|
<li><strong>HuggingFace dataset export</strong> — share PII-redacted agent traces as open training datasets (<code>npm run export:hf</code>)</li>
|
|
732
816
|
<li><strong>Model Hardening Advisor</strong> — get recommendations on when and how to fine-tune your model to natively avoid recurring failures</li>
|
|
733
817
|
<li>Personal local dashboard — every Pro user gets a localhost dashboard without extra cloud setup</li>
|
|
734
|
-
<li>
|
|
818
|
+
<li>Review-ready workflow support — we help you wire the riskiest flows first: migrations, force-pushes, deploys, and CI</li>
|
|
735
819
|
</ul>
|
|
736
820
|
<a href="/checkout/pro?utm_source=website&utm_medium=homepage_pricing&utm_campaign=pro_pack&cta_id=homepage_pricing_trial&cta_placement=pricing&plan_id=pro&landing_path=%2F" class="btn-pro" style="display:none" id="pro-checkout-link">Start Free Trial — then $19/mo</a>
|
|
737
821
|
<div class="trial-badge" style="background:var(--cyan);color:#000;display:inline-block;padding:4px 12px;border-radius:12px;font-size:12px;font-weight:700;margin-bottom:12px;">7-DAY FREE TRIAL</div>
|
|
@@ -739,14 +823,13 @@ __GA_BOOTSTRAP__
|
|
|
739
823
|
<input type="email" id="pro-email" data-buyer-email placeholder="Your email to start trial" style="width:100%;padding:10px 14px;border:1px solid #333;border-radius:6px;background:#1a1a2e;color:#fff;font-size:14px;">
|
|
740
824
|
</div>
|
|
741
825
|
<button class="btn-pro" id="pro-trial-btn" onclick="handleProTrial()" style="width:100%;cursor:pointer;border:none;">Start 7-Day Free Trial</button>
|
|
742
|
-
<p style="font-size:11px;color:#666;margin-top:8px;">
|
|
743
|
-
<p style="font-size:12px;color:var(--cyan);margin-top:6px;">Mem0 Pro: $249/mo. ThumbGate Pro: $19/mo.</p>
|
|
826
|
+
<p style="font-size:11px;color:#666;margin-top:8px;">Solo Pro stays available for operators who want a personal dashboard and export-ready evidence without the team rollout motion.</p>
|
|
744
827
|
</div>
|
|
745
828
|
<div class="price-card team">
|
|
746
829
|
<div class="tier">Team</div>
|
|
747
|
-
<div class="price">$
|
|
830
|
+
<div class="price">$99<span style="font-size:16px;color:var(--text-dim)">/seat/mo</span></div>
|
|
748
831
|
<div class="price-sub">3-seat minimum · intake-led rollout for the first workflow</div>
|
|
749
|
-
<p style="font-size:13px;color:var(--green);margin-bottom:16px;font-weight:500;">For teams shipping AI-generated changes across shared repos who need one correction to protect every reviewer and runtime.
|
|
832
|
+
<p style="font-size:13px;color:var(--green);margin-bottom:16px;font-weight:500;">For teams shipping AI-generated changes across shared repos who need one correction to protect every reviewer and runtime. This is the primary buying motion.</p>
|
|
750
833
|
<div class="pro-upgrade-triggers" style="font-size:12px;color:#aaa;margin-bottom:12px;">
|
|
751
834
|
<strong style="color:#fff;">Best first paid motion:</strong> one workflow, one owner, one proof review. Qualify the blocker first, then expand into seats.
|
|
752
835
|
</div>
|
|
@@ -762,7 +845,7 @@ __GA_BOOTSTRAP__
|
|
|
762
845
|
<li>Proof pack — attach verification evidence and rollout diagnostics so the buyer does not have to trust a demo</li>
|
|
763
846
|
</ul>
|
|
764
847
|
<a href="#workflow-sprint-intake" class="btn-team">Start Workflow Hardening Sprint</a>
|
|
765
|
-
<p style="font-size:11px;color:#666;margin-top:8px;">Team pricing anchors at $
|
|
848
|
+
<p style="font-size:11px;color:#666;margin-top:8px;">Team pricing anchors at $99/seat/mo with a 3-seat minimum after qualification. The first step is a 30-minute intake around one real blocker.</p>
|
|
766
849
|
</div>
|
|
767
850
|
</div>
|
|
768
851
|
</div>
|
|
@@ -811,7 +894,7 @@ __GA_BOOTSTRAP__
|
|
|
811
894
|
</div>
|
|
812
895
|
<div class="faq-item">
|
|
813
896
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What AI agents and editors does this work with?</div>
|
|
814
|
-
<div class="faq-a">ThumbGate works with Claude Code, Cursor, Codex, Gemini CLI, Amp, OpenCode, and any other MCP-compatible agent. Cursor ships with a plugin bundle in this repo. Codex ships
|
|
897
|
+
<div class="faq-a">ThumbGate works with Claude Code, Cursor, Codex, Gemini CLI, Amp, OpenCode, and any other MCP-compatible agent. Cursor ships with a plugin bundle in this repo. Codex now ships both a standalone plugin bundle and a repo-local app plugin profile, and the published download is linked directly from this page. VS Code works when you run an MCP-compatible agent inside it, but this repo does not ship a standalone VS Code extension today.</div>
|
|
815
898
|
</div>
|
|
816
899
|
<div class="faq-item">
|
|
817
900
|
<button class="faq-q" type="button" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How do we keep high-risk autonomous runs off the host?</button>
|
|
@@ -823,7 +906,7 @@ __GA_BOOTSTRAP__
|
|
|
823
906
|
</div>
|
|
824
907
|
<div class="faq-item">
|
|
825
908
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">Do I need a cloud account?</div>
|
|
826
|
-
<div class="faq-a">No. Free keeps local enforcement on your machine with 3 daily feedback captures, 5 lesson searches, unlimited recall, gates, and hook blocking. No cloud account is required.
|
|
909
|
+
<div class="faq-a">No. Free keeps local enforcement on your machine with 3 daily feedback captures, 5 lesson searches, unlimited recall, gates, and hook blocking. No cloud account is required. The business starts when a team wants shared rules, approval boundaries, hosted review views, org dashboard visibility, and proof that survives handoffs. Pro is the optional solo side lane for a personal dashboard and DPO export.</div>
|
|
827
910
|
</div>
|
|
828
911
|
<div class="faq-item">
|
|
829
912
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What if my thumbs-down is vague?</div>
|
|
@@ -835,7 +918,7 @@ __GA_BOOTSTRAP__
|
|
|
835
918
|
</div>
|
|
836
919
|
<div class="faq-item">
|
|
837
920
|
<div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">What does Pro cost?</div>
|
|
838
|
-
<div class="faq-a">Pro is $19/mo or $149/yr (save 35%) for individual operators. Team pricing anchors at $
|
|
921
|
+
<div class="faq-a">Pro is $19/mo or $149/yr (save 35%) for individual operators. Team pricing anchors at $99/seat/mo with a 3-seat minimum, and team buyers start with the workflow sprint intake instead of a blind org-wide rollout.</div>
|
|
839
922
|
</div>
|
|
840
923
|
</div>
|
|
841
924
|
</div>
|
|
@@ -845,11 +928,11 @@ __GA_BOOTSTRAP__
|
|
|
845
928
|
<section class="compatibility" id="newsletter" style="padding: 48px 0;">
|
|
846
929
|
<div class="container" style="text-align: center;">
|
|
847
930
|
<div class="section-label">Buyer Follow-Up</div>
|
|
848
|
-
<h2 class="section-title" style="margin-bottom: 16px;">Not ready to buy today? Keep the sprint brief, demo, and
|
|
849
|
-
<p style="color: var(--text-dim); margin-bottom: 24px; max-width: 560px; margin-left: auto; margin-right: auto;">Save your work email for
|
|
931
|
+
<h2 class="section-title" style="margin-bottom: 16px;">Not ready to buy today? Keep the sprint brief, demo, and discovery notes one click away.</h2>
|
|
932
|
+
<p style="color: var(--text-dim); margin-bottom: 24px; max-width: 560px; margin-left: auto; margin-right: auto;">Save your work email for the workflow sprint brief, new gate patterns, and buyer-facing proof updates. If you later choose the solo Pro checkout, we keep that path prefilled on this device too.</p>
|
|
850
933
|
<form action="/api/newsletter" method="POST" data-newsletter-form data-page="homepage" data-intent="buyer_follow_up" style="display: flex; gap: 8px; max-width: 480px; margin: 0 auto; flex-wrap: wrap; justify-content: center;">
|
|
851
934
|
<input type="email" name="email" data-buyer-email placeholder="you@company.com" required style="flex: 1; min-width: 220px; padding: 12px 16px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-raised); color: var(--text); font-size: 15px;">
|
|
852
|
-
<button type="submit" style="padding: 12px 24px; background: var(--cyan); color: #000; border: none; border-radius: 8px; font-weight: 600; font-size: 15px; cursor: pointer;">Get
|
|
935
|
+
<button type="submit" style="padding: 12px 24px; background: var(--cyan); color: #000; border: none; border-radius: 8px; font-weight: 600; font-size: 15px; cursor: pointer;">Get sprint brief + updates</button>
|
|
853
936
|
</form>
|
|
854
937
|
<p data-newsletter-status style="min-height:20px;font-size:12px;color:var(--text-dim);margin-top:10px;" aria-live="polite"></p>
|
|
855
938
|
</div>
|
|
@@ -859,10 +942,10 @@ __GA_BOOTSTRAP__
|
|
|
859
942
|
<section class="final-cta">
|
|
860
943
|
<div class="container">
|
|
861
944
|
<h2>Start with one workflow you actually need to defend.</h2>
|
|
862
|
-
<p>Use the workflow hardening sprint for team rollout
|
|
945
|
+
<p>Use the workflow hardening sprint for team rollout. Install the free CLI if you are still evaluating alone. Pro remains the solo side lane for a personal dashboard and review-ready exports.</p>
|
|
863
946
|
<div style="display:flex;gap:12px;justify-content:center;flex-wrap:wrap;">
|
|
864
947
|
<a href="#workflow-sprint-intake" class="btn-team" style="background:var(--green);">Start Workflow Hardening Sprint</a>
|
|
865
|
-
<a href="/
|
|
948
|
+
<a href="/guide?utm_source=website&utm_medium=homepage_final&utm_campaign=install_free" class="btn-pro btn-install-link">Install Free CLI</a>
|
|
866
949
|
</div>
|
|
867
950
|
</div>
|
|
868
951
|
</section>
|
|
@@ -873,11 +956,12 @@ __GA_BOOTSTRAP__
|
|
|
873
956
|
<div class="footer-links">
|
|
874
957
|
<a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
|
|
875
958
|
<a href="https://www.npmjs.com/package/thumbgate" target="_blank" rel="noopener">npm</a>
|
|
959
|
+
<a href="https://www.producthunt.com/products/thumbgate" target="_blank" rel="noopener">Product Hunt</a>
|
|
876
960
|
<a href="https://x.com/IgorGanapolsky" target="_blank" rel="noopener">X / Twitter</a>
|
|
877
961
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
878
962
|
<a href="/blog">Blog</a>
|
|
879
963
|
</div>
|
|
880
|
-
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v1.
|
|
964
|
+
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v1.4.0</span>
|
|
881
965
|
</div>
|
|
882
966
|
</footer>
|
|
883
967
|
|
|
@@ -892,6 +976,7 @@ function initializeBuyerIntentForms() {
|
|
|
892
976
|
}
|
|
893
977
|
|
|
894
978
|
function resolvePricingClickTier(el) {
|
|
979
|
+
if (el.classList.contains('btn-install-link')) return 'install';
|
|
895
980
|
if (el.classList.contains('btn-pro')) return 'pro';
|
|
896
981
|
if (el.classList.contains('btn-pro-page')) return 'pro_page';
|
|
897
982
|
if (el.classList.contains('btn-team')) return 'team';
|
|
@@ -935,7 +1020,8 @@ function copyInstall(el) {
|
|
|
935
1020
|
|
|
936
1021
|
/* CTA clicks */
|
|
937
1022
|
trackClick('.btn-pro', 'checkout_start', { tier: 'pro', price: 19, billing: 'monthly' });
|
|
938
|
-
trackClick('.btn-pro-page', 'pro_page_click', { tier: 'pro', source: 'hero' });
|
|
1023
|
+
trackClick('.btn-pro-page:not(.btn-install-link)', 'pro_page_click', { tier: 'pro', source: 'hero' });
|
|
1024
|
+
trackClick('.btn-install-link', 'install_guide_click', { tier: 'free', source: 'homepage_cta' });
|
|
939
1025
|
trackClick('.btn-team', 'workflow_sprint_intake_click', { tier: 'team', offer: 'workflow_hardening_sprint' });
|
|
940
1026
|
trackClick('.btn-free', 'install_click', { tier: 'free' });
|
|
941
1027
|
trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
|
|
@@ -943,7 +1029,7 @@ function copyInstall(el) {
|
|
|
943
1029
|
|
|
944
1030
|
/* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
|
|
945
1031
|
with section context so we can distinguish pricing section vs final CTA section clicks */
|
|
946
|
-
document.querySelectorAll('.btn-pro, .btn-pro-page, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
|
|
1032
|
+
document.querySelectorAll('.btn-pro, .btn-pro-page, .btn-install-link, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
|
|
947
1033
|
el.addEventListener('click', function() {
|
|
948
1034
|
var section = el.closest('section');
|
|
949
1035
|
var sectionId = section ? (section.id || section.className.split(' ')[0] || 'unknown') : 'unknown';
|
package/public/lessons.html
CHANGED
|
@@ -242,24 +242,24 @@
|
|
|
242
242
|
</div>
|
|
243
243
|
<div class="metrics-summary-grid" id="metricsSummaryGrid">
|
|
244
244
|
<div class="metric-tile">
|
|
245
|
-
<div class="metric-kicker">
|
|
245
|
+
<div class="metric-kicker">Fast path rate</div>
|
|
246
246
|
<div class="metric-number purple">--</div>
|
|
247
|
-
<div class="metric-note">Waiting for live
|
|
247
|
+
<div class="metric-note">Waiting for live decisions</div>
|
|
248
248
|
</div>
|
|
249
249
|
<div class="metric-tile">
|
|
250
|
-
<div class="metric-kicker">
|
|
250
|
+
<div class="metric-kicker">Override rate</div>
|
|
251
251
|
<div class="metric-number red">--</div>
|
|
252
|
-
<div class="metric-note">Waiting for live
|
|
252
|
+
<div class="metric-note">Waiting for live decisions</div>
|
|
253
253
|
</div>
|
|
254
254
|
<div class="metric-tile">
|
|
255
|
-
<div class="metric-kicker">
|
|
256
|
-
<div class="metric-number
|
|
257
|
-
<div class="metric-note">
|
|
255
|
+
<div class="metric-kicker">Rollback rate</div>
|
|
256
|
+
<div class="metric-number cyan">--</div>
|
|
257
|
+
<div class="metric-note">Waiting for live decisions</div>
|
|
258
258
|
</div>
|
|
259
259
|
<div class="metric-tile">
|
|
260
|
-
<div class="metric-kicker">
|
|
261
|
-
<div class="metric-number
|
|
262
|
-
<div class="metric-note">
|
|
260
|
+
<div class="metric-kicker">Median latency</div>
|
|
261
|
+
<div class="metric-number green">--</div>
|
|
262
|
+
<div class="metric-note">Time from recommendation to recorded outcome</div>
|
|
263
263
|
</div>
|
|
264
264
|
</div>
|
|
265
265
|
<div class="metrics-chart-wrap">
|
|
@@ -492,7 +492,7 @@ function updateMetricsSelection() {
|
|
|
492
492
|
note.textContent = 'Showing timeline events for ' + formatShortDay(activeTimelineDay) + '. Clear the day filter to return to the full timeline.';
|
|
493
493
|
}
|
|
494
494
|
} else {
|
|
495
|
-
note.textContent = 'The chart combines recorded feedback events with daily gate-audit activity.';
|
|
495
|
+
note.textContent = 'The chart combines recorded feedback events with daily gate-audit activity. Decision-loop metrics above come from recorded evaluations and outcomes.';
|
|
496
496
|
}
|
|
497
497
|
}
|
|
498
498
|
|
|
@@ -627,12 +627,12 @@ function renderImprovementMetrics(stats, data) {
|
|
|
627
627
|
if (!summary || !grid || !chart) return;
|
|
628
628
|
|
|
629
629
|
if (isDemo) {
|
|
630
|
-
summary.textContent = 'Live improvement trends appear here once local Pro is connected. The
|
|
630
|
+
summary.textContent = 'Live improvement trends appear here once local Pro is connected. The decision tiles are based on recorded evaluations plus override and rollback outcomes, while the chart below stays anchored to feedback and gate audits.';
|
|
631
631
|
grid.innerHTML = [
|
|
632
|
-
{ label: '
|
|
633
|
-
{ label: '
|
|
634
|
-
{ label: '
|
|
635
|
-
{ label: '
|
|
632
|
+
{ label: 'Fast path rate', value: '62%', tone: 'purple', note: 'Sample auto-execute share' },
|
|
633
|
+
{ label: 'Override rate', value: '14%', tone: 'red', note: 'Sample operator overrides' },
|
|
634
|
+
{ label: 'Rollback rate', value: '4%', tone: 'cyan', note: 'Sample reversed decisions' },
|
|
635
|
+
{ label: 'Median latency', value: '6m', tone: 'green', note: 'Sample decision completion speed' }
|
|
636
636
|
].map(function(tile) {
|
|
637
637
|
return '<div class="metric-tile"><div class="metric-kicker">' + escHtml(tile.label) + '</div><div class="metric-number ' + escHtml(tile.tone) + '">' + escHtml(tile.value) + '</div><div class="metric-note">' + escHtml(tile.note) + '</div></div>';
|
|
638
638
|
}).join('');
|
|
@@ -645,23 +645,32 @@ function renderImprovementMetrics(stats, data) {
|
|
|
645
645
|
var gateStats = (data && data.gateStats) || {};
|
|
646
646
|
var gateAudit = (data && data.gateAudit) || {};
|
|
647
647
|
var liveMetrics = (data && data.liveMetrics) || {};
|
|
648
|
+
var decisionLoop = (data && data.decisions) || {};
|
|
648
649
|
var harness = (data && data.harness) || {};
|
|
649
650
|
var approvalRate = Math.round(((stats && (stats.recentRate || stats.approvalRate)) || 0) * 100);
|
|
650
651
|
var errorTrend = liveMetrics.errorTrend || {};
|
|
651
|
-
var
|
|
652
|
-
var
|
|
652
|
+
var fastPathRate = Math.round(((decisionLoop.fastPathRate || 0) * 100));
|
|
653
|
+
var overrideRate = Math.round(((decisionLoop.overrideRate || 0) * 100));
|
|
654
|
+
var rollbackRate = Math.round(((decisionLoop.rollbackRate || 0) * 100));
|
|
655
|
+
var medianLatencyMs = Number(decisionLoop.medianLatencyMs || 0);
|
|
656
|
+
var medianLatencyText = medianLatencyMs >= 3600000
|
|
657
|
+
? (medianLatencyMs / 3600000).toFixed(1) + 'h'
|
|
658
|
+
: medianLatencyMs >= 60000
|
|
659
|
+
? Math.round(medianLatencyMs / 60000) + 'm'
|
|
660
|
+
: Math.round(medianLatencyMs / 1000) + 's';
|
|
653
661
|
var thisWeekNeg = errorTrend.thisWeek || 0;
|
|
654
662
|
var lastWeekNeg = errorTrend.lastWeek || 0;
|
|
655
663
|
var blocked = gateStats.blocked || 0;
|
|
664
|
+
var resolvedCount = decisionLoop.resolvedCount || 0;
|
|
656
665
|
|
|
657
|
-
summary.textContent = '
|
|
658
|
-
+ '
|
|
666
|
+
summary.textContent = 'ThumbGate is auto-routing ' + fastPathRate + '% of tracked decisions while holding override rate at ' + overrideRate + '% and rollback rate at ' + rollbackRate + '% across '
|
|
667
|
+
+ resolvedCount + ' resolved decision' + (resolvedCount === 1 ? '' : 's') + '. Feedback approval is ' + approvalRate + '%, and gates still recorded ' + blocked + ' deny decision' + (blocked === 1 ? '' : 's') + '.';
|
|
659
668
|
|
|
660
669
|
grid.innerHTML = [
|
|
661
|
-
{ label: '
|
|
662
|
-
{ label: '
|
|
663
|
-
{ label: '
|
|
664
|
-
{ label: '
|
|
670
|
+
{ label: 'Fast path rate', value: fastPathRate + '%', tone: 'purple', note: 'Recorded evaluations that stayed auto-executable' },
|
|
671
|
+
{ label: 'Override rate', value: overrideRate + '%', tone: 'red', note: 'Resolved decisions later changed by a human' },
|
|
672
|
+
{ label: 'Rollback rate', value: rollbackRate + '%', tone: 'cyan', note: 'Resolved decisions later reversed' },
|
|
673
|
+
{ label: 'Median latency', value: medianLatencyText, tone: 'green', note: 'Time from recommendation to recorded outcome' }
|
|
665
674
|
].map(function(tile) {
|
|
666
675
|
return '<div class="metric-tile"><div class="metric-kicker">' + escHtml(tile.label) + '</div><div class="metric-number ' + escHtml(tile.tone) + '">' + escHtml(tile.value) + '</div><div class="metric-note">' + escHtml(tile.note) + '</div></div>';
|
|
667
676
|
}).join('');
|