thumbgate 0.9.13 → 1.0.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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.well-known/mcp/server-card.json +1 -1
- package/README.md +6 -3
- package/adapters/README.md +1 -1
- package/adapters/chatgpt/openapi.yaml +105 -0
- package/adapters/claude/.mcp.json +2 -2
- package/adapters/codex/config.toml +2 -2
- package/adapters/forge/forge.yaml +28 -0
- package/adapters/mcp/server-stdio.js +32 -1
- package/adapters/opencode/opencode.json +1 -1
- package/bin/cli.js +53 -3
- package/config/mcp-allowlists.json +10 -0
- package/openapi/openapi.yaml +105 -0
- package/package.json +4 -4
- package/plugins/amp-skill/INSTALL.md +3 -4
- package/plugins/amp-skill/SKILL.md +0 -1
- package/plugins/claude-codex-bridge/.claude-plugin/plugin.json +1 -1
- package/plugins/claude-codex-bridge/.mcp.json +1 -1
- package/plugins/claude-skill/INSTALL.md +1 -2
- package/plugins/codex-profile/.codex-plugin/plugin.json +1 -1
- package/plugins/codex-profile/.mcp.json +1 -1
- package/plugins/codex-profile/INSTALL.md +1 -1
- package/plugins/codex-profile/README.md +1 -1
- package/plugins/cursor-marketplace/.cursor-plugin/plugin.json +1 -1
- package/plugins/opencode-profile/INSTALL.md +1 -1
- package/public/blog.html +1 -0
- package/public/dashboard.html +1 -1
- package/public/guide.html +1 -1
- package/public/index.html +29 -5
- package/public/learn/agent-harness-pattern.html +1 -1
- package/public/learn/ai-agent-persistent-memory.html +1 -1
- package/public/learn/mcp-pre-action-gates-explained.html +1 -1
- package/public/learn/stop-ai-agent-force-push.html +1 -1
- package/public/learn/vibe-coding-safety-net.html +1 -1
- package/public/learn.html +62 -1
- package/public/lessons.html +1 -1
- package/public/pro.html +1 -1
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- package/scripts/agent-security-hardening.js +4 -4
- package/scripts/async-job-runner.js +84 -24
- package/scripts/auto-wire-hooks.js +59 -1
- package/scripts/context-manager.js +330 -0
- package/scripts/dashboard.js +1 -1
- package/scripts/distribution-surfaces.js +12 -0
- package/scripts/ensure-repo-bootstrap.js +15 -14
- package/scripts/feedback-history-distiller.js +7 -1
- package/scripts/feedback-loop.js +10 -4
- package/scripts/feedback-paths.js +142 -10
- package/scripts/feedback-root-consolidator.js +18 -4
- package/scripts/gates-engine.js +96 -10
- package/scripts/hook-auto-capture.sh +1 -1
- package/scripts/hosted-job-launcher.js +260 -0
- package/scripts/managed-dpo-export.js +91 -0
- package/scripts/obsidian-export.js +0 -1
- package/scripts/operational-integrity.js +50 -7
- package/scripts/post-everywhere.js +10 -0
- package/scripts/prove-lancedb.js +62 -4
- package/scripts/publish-decision.js +16 -0
- package/scripts/self-healing-check.js +6 -1
- package/scripts/seo-gsd.js +217 -4
- package/scripts/social-analytics/load-env.js +33 -2
- package/scripts/social-analytics/store.js +200 -2
- package/scripts/statusline-cache-path.js +9 -6
- package/scripts/sync-version.js +18 -11
- package/scripts/tool-registry.js +37 -0
- package/scripts/train_from_feedback.py +0 -4
- package/scripts/workflow-sentinel.js +793 -0
- package/src/api/server.js +297 -38
- /package/scripts/{rlhf_session_start.sh → thumbgate_session_start.sh} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "ThumbGate — Make your AI coding agent self-improving. Every mistake becomes a prevention rule that physically blocks the agent from repeating it. Feedback-driven enforcement via PreToolUse hooks, Thompson Sampling for adaptive gates, SQLite+FTS5 lesson DB, and LanceDB vector search. Your agent gets smarter with every session.",
|
|
5
5
|
"homepage": "https://thumbgate-production.up.railway.app",
|
|
6
6
|
"repository": {
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"test:funnel-analytics": "node --test tests/funnel-analytics.test.js",
|
|
100
100
|
"test:experiment-tracker": "node --test tests/experiment-tracker.test.js",
|
|
101
101
|
"test:build-metadata": "node --test tests/build-metadata.test.js",
|
|
102
|
-
"test:context-engine": "node --test tests/context-engine.test.js",
|
|
102
|
+
"test:context-engine": "node --test tests/context-engine.test.js tests/context-manager.test.js",
|
|
103
103
|
"test:hf-papers": "node --test tests/hf-papers.test.js",
|
|
104
104
|
"test:marketing-experiment": "node --test tests/marketing-experiment.test.js",
|
|
105
105
|
"test:seo-gsd": "node --test tests/seo-gsd.test.js",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"test:loop": "node scripts/feedback-loop.js --test",
|
|
116
116
|
"test:dpo": "node scripts/export-dpo-pairs.js --test",
|
|
117
117
|
"test:kto": "node --test tests/export-kto.test.js",
|
|
118
|
-
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/contextfs.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/lesson-search.test.js tests/thumbgate-search.test.js tests/rubric-engine.test.js tests/self-healing-check.test.js tests/self-heal.test.js tests/feedback-schema.test.js tests/thompson-sampling.test.js tests/feedback-sequences.test.js tests/diversity-tracking.test.js tests/vector-store.test.js tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/loop-closure.test.js tests/code-reasoning.test.js tests/feedback-loop.test.js tests/feedback-inbox-read.test.js tests/feedback-to-memory.test.js tests/test-coverage.test.js tests/version-metadata.test.js tests/claude-mcpb.test.js tests/claude-codex-bridge.test.js tests/cursor-plugin.test.js tests/codex-plugin.test.js tests/telemetry-analytics.test.js tests/public-landing.test.js tests/pro-landing.test.js tests/local-model-profile.test.js tests/risk-scorer.test.js tests/context-compaction.test.js tests/reminder-engine.test.js tests/post-to-x.test.js tests/verification-loop.test.js tests/async-job-runner.test.js tests/commerce-quality.test.js tests/recall-limit.test.js tests/problem-detail.test.js tests/natural-language-harness.test.js tests/settings-hierarchy.test.js",
|
|
118
|
+
"test:api": "node --test --test-concurrency=1 tests/api-server.test.js tests/api-auth-config.test.js tests/mcp-server.test.js tests/adapters.test.js tests/openapi-parity.test.js tests/budget-guard.test.js tests/contextfs.test.js tests/pack-templates.test.js tests/dashboard.test.js tests/dashboard-render-spec.test.js tests/dashboard-html.test.js tests/agent-readiness.test.js tests/mcp-policy.test.js tests/subagent-profiles.test.js tests/intent-router.test.js tests/internal-agent-bootstrap.test.js tests/job-api.test.js tests/lesson-search.test.js tests/thumbgate-search.test.js tests/rubric-engine.test.js tests/self-healing-check.test.js tests/self-heal.test.js tests/feedback-schema.test.js tests/thompson-sampling.test.js tests/feedback-sequences.test.js tests/diversity-tracking.test.js tests/vector-store.test.js tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js tests/loop-closure.test.js tests/code-reasoning.test.js tests/feedback-loop.test.js tests/feedback-inbox-read.test.js tests/feedback-to-memory.test.js tests/test-coverage.test.js tests/version-metadata.test.js tests/claude-mcpb.test.js tests/claude-codex-bridge.test.js tests/cursor-plugin.test.js tests/codex-plugin.test.js tests/telemetry-analytics.test.js tests/public-landing.test.js tests/pro-landing.test.js tests/local-model-profile.test.js tests/risk-scorer.test.js tests/context-compaction.test.js tests/reminder-engine.test.js tests/post-to-x.test.js tests/verification-loop.test.js tests/async-job-runner.test.js tests/commerce-quality.test.js tests/recall-limit.test.js tests/problem-detail.test.js tests/natural-language-harness.test.js tests/settings-hierarchy.test.js",
|
|
119
119
|
"test:proof": "node --test tests/prove-adapters.test.js tests/prove-attribution.test.js tests/prove-cloudflare-sandbox.test.js tests/prove-data-quality.test.js tests/prove-intelligence.test.js tests/prove-lancedb.test.js tests/prove-loop-closure.test.js tests/prove-subway-upgrades.test.js tests/prove-training-export.test.js tests/prove-local-intelligence.test.js tests/prove-workflow-contract.test.js tests/prove-autoresearch.test.js tests/prove-claim-verification.test.js tests/prove-data-pipeline.test.js tests/prove-evolution.test.js tests/prove-harnesses.test.js tests/prove-runtime.test.js tests/prove-seo-gsd.test.js tests/prove-settings.test.js tests/prove-xmemory.test.js && node --test tests/prove-automation.test.js",
|
|
120
120
|
"test:e2e": "node --test tests/e2e-pipeline.test.js tests/e2e-product-flows.test.js tests/e2e-coverage-contract.test.js",
|
|
121
121
|
"test:rlaif": "node --test tests/rlaif-self-audit.test.js tests/dpo-optimizer.test.js tests/meta-policy.test.js",
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
134
134
|
"test:ops": "node --test tests/adk-consolidator.test.js tests/anthropic-partner-strategy.test.js tests/auto-promote-gates.test.js tests/auto-wire-hooks.test.js tests/claude-skill.test.js tests/codegraph-context.test.js tests/commercial-signals.test.js tests/delegation-runtime.test.js tests/disagreement-mining.test.js tests/failure-diagnostics.test.js tests/gate-stats.test.js tests/github-billing.test.js tests/markdown-escape.test.js tests/mcp-tools-gates.test.js tests/project-bayes-e2e.test.js tests/project-bayes.test.js tests/rate-limiter.test.js tests/schedule-manager.test.js tests/session-handoff.test.js tests/skill-generator.test.js tests/smart-learning.test.js tests/spike-and-sink.test.js tests/stripe-webhook-route.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js",
|
|
135
135
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
136
|
-
"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/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js",
|
|
136
|
+
"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/prompt-guard.test.js tests/audit-trail.test.js tests/profile-router.test.js tests/workflow-sentinel.test.js",
|
|
137
137
|
"test:workers": "npm --prefix workers ci && npm --prefix workers test",
|
|
138
138
|
"test:evoskill": "node --test tests/evoskill.test.js",
|
|
139
139
|
"test:gates-hardening": "node --test tests/gates-hardening.test.js",
|
|
@@ -13,7 +13,6 @@ Or from the npm package:
|
|
|
13
13
|
```bash
|
|
14
14
|
npx thumbgate init
|
|
15
15
|
cp node_modules/thumbgate/plugins/amp-skill/SKILL.md .amp/skills/thumbgate-feedback.md
|
|
16
|
-
cp node_modules/thumbgate/plugins/amp-skill/SKILL.md .amp/skills/rlhf-feedback.md
|
|
17
16
|
```
|
|
18
17
|
|
|
19
18
|
## What This Does
|
|
@@ -27,17 +26,17 @@ After copying, restart Amp. The skill will appear in the active skills list.
|
|
|
27
26
|
Then test:
|
|
28
27
|
|
|
29
28
|
```bash
|
|
30
|
-
|
|
29
|
+
npx thumbgate capture --feedback=up --context="amp skill install verified" --tags="install"
|
|
31
30
|
```
|
|
32
31
|
|
|
33
32
|
## Available Commands (via skill)
|
|
34
33
|
|
|
35
34
|
```bash
|
|
36
35
|
# Positive feedback
|
|
37
|
-
|
|
36
|
+
npx thumbgate capture --feedback=up --context="..." --tags="..."
|
|
38
37
|
|
|
39
38
|
# Negative feedback
|
|
40
|
-
|
|
39
|
+
npx thumbgate capture --feedback=down --context="..." --what-went-wrong="..." --what-to-change="..." --tags="..."
|
|
41
40
|
```
|
|
42
41
|
|
|
43
42
|
## Requirements
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-bridge",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Run Codex review, adversarial review, and second-pass handoffs from Claude Code while keeping ThumbGate reliability memory in the loop.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
@@ -13,7 +13,6 @@ Or from the published npm package:
|
|
|
13
13
|
```bash
|
|
14
14
|
npx thumbgate init
|
|
15
15
|
cp node_modules/thumbgate/plugins/claude-skill/SKILL.md .claude/skills/thumbgate-feedback.md
|
|
16
|
-
cp node_modules/thumbgate/plugins/claude-skill/SKILL.md .claude/skills/rlhf-feedback.md
|
|
17
16
|
```
|
|
18
17
|
|
|
19
18
|
## What This Does
|
|
@@ -34,7 +33,7 @@ After copying, restart Claude Code and run:
|
|
|
34
33
|
Then test it:
|
|
35
34
|
|
|
36
35
|
```bash
|
|
37
|
-
|
|
36
|
+
npx thumbgate capture --feedback=up --context="skill install verified" --tags="install"
|
|
38
37
|
```
|
|
39
38
|
|
|
40
39
|
## What You Get
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-profile",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "ThumbGate for Codex: pre-action gates, skill packs, hallucination detection, PII scanning, progressive disclosure (82% token savings), and MCP-backed reliability memory.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Igor Ganapolsky",
|
|
@@ -31,7 +31,7 @@ The following block is appended to `~/.codex/config.toml`:
|
|
|
31
31
|
```toml
|
|
32
32
|
[mcp_servers.thumbgate]
|
|
33
33
|
command = "npx"
|
|
34
|
-
args = ["--yes", "--package", "thumbgate@0.
|
|
34
|
+
args = ["--yes", "--package", "thumbgate@1.0.0", "thumbgate", "serve"]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
The repo-local Codex app plugin ships the same runtime path through `plugins/codex-profile/.mcp.json`, so the manual config and plugin metadata stay aligned.
|
|
@@ -29,7 +29,7 @@ That profile launches:
|
|
|
29
29
|
```toml
|
|
30
30
|
[mcp_servers.thumbgate]
|
|
31
31
|
command = "npx"
|
|
32
|
-
args = ["--yes", "--package", "thumbgate@0.
|
|
32
|
+
args = ["--yes", "--package", "thumbgate@1.0.0", "thumbgate", "serve"]
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Why this exists
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "thumbgate",
|
|
3
3
|
"displayName": "ThumbGate",
|
|
4
4
|
"description": "👍👎 Thumbs down a mistake — your AI agent won't repeat it. Thumbs up good work — it remembers the pattern.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "1.0.0",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Igor Ganapolsky"
|
|
8
8
|
},
|
|
@@ -25,7 +25,7 @@ The portable profile adds this MCP server entry:
|
|
|
25
25
|
"mcp": {
|
|
26
26
|
"thumbgate": {
|
|
27
27
|
"type": "local",
|
|
28
|
-
"command": ["npx", "--yes", "--package", "thumbgate@0.
|
|
28
|
+
"command": ["npx", "--yes", "--package", "thumbgate@1.0.0", "thumbgate", "serve"],
|
|
29
29
|
"enabled": true
|
|
30
30
|
}
|
|
31
31
|
}
|
package/public/blog.html
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>ThumbGate Blog — Agent Governance Engineering</title>
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
7
8
|
<meta
|
|
8
9
|
name="description"
|
|
9
10
|
content="Technical breakdowns, release notes, and agent governance insights from the ThumbGate team."
|
package/public/dashboard.html
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<link rel="canonical" href="https://thumbgate-production.up.railway.app/dashboard">
|
|
9
9
|
<meta name="robots" content="noindex">
|
|
10
10
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
11
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
11
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
12
12
|
<style>
|
|
13
13
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
14
14
|
:root {
|
package/public/guide.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>How to Stop AI Coding Agents From Repeating Mistakes — ThumbGate Guide</title>
|
|
7
7
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
8
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
8
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
9
9
|
<meta name="description" content="The complete guide to preventing AI coding agent mistakes with pre-action gates, history-aware lesson distillation, and automatic prevention rules.">
|
|
10
10
|
<meta name="keywords" content="AI agent mistakes, Claude Code force push, AI coding agent memory, MCP server guardrails, pre-action gates, vibe coding safety, PreToolUse hooks, ThumbGate, SpecLock alternative, Mem0 alternative">
|
|
11
11
|
<meta property="og:title" content="How to Stop AI Coding Agents From Repeating Mistakes">
|
package/public/index.html
CHANGED
|
@@ -27,7 +27,7 @@ __GOOGLE_SITE_VERIFICATION_META__
|
|
|
27
27
|
<meta name="keywords" content="ThumbGate, thumbgate, self-improving AI agents, AI agent self-improvement, AI agent learning, AI agent memory, pre-action gates, human-in-the-loop, MCP server, Claude Code, Cursor, Codex, Gemini, Amp, OpenCode, vibe coding safety, SpecLock alternative, Mem0 alternative, AI coding agent feedback loop, PreToolUse hooks, prevention rules, feedback enforcement, context engineering">
|
|
28
28
|
|
|
29
29
|
<!-- Privacy-friendly analytics by Plausible -->
|
|
30
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
30
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
31
31
|
__GA_BOOTSTRAP__
|
|
32
32
|
|
|
33
33
|
<script>
|
|
@@ -520,8 +520,8 @@ __GA_BOOTSTRAP__
|
|
|
520
520
|
|
|
521
521
|
<section class="seo-pages" id="compare-guides">
|
|
522
522
|
<div class="container">
|
|
523
|
-
<div class="section-label">
|
|
524
|
-
<h2 class="section-title">How ThumbGate
|
|
523
|
+
<div class="section-label">Popular Buyer Questions</div>
|
|
524
|
+
<h2 class="section-title">How buyers discover ThumbGate in search and AI answers</h2>
|
|
525
525
|
<div class="seo-grid">
|
|
526
526
|
<a class="seo-card" href="/compare/speclock">
|
|
527
527
|
<div class="seo-kicker">Comparison</div>
|
|
@@ -547,6 +547,30 @@ __GA_BOOTSTRAP__
|
|
|
547
547
|
<p>Why structured feedback memory matters more when it becomes a live gate that blocks your agent from repeating mistakes.</p>
|
|
548
548
|
<div class="card-arrow">Read the integration guide →</div>
|
|
549
549
|
</a>
|
|
550
|
+
<a class="seo-card" href="/guides/stop-repeated-ai-agent-mistakes">
|
|
551
|
+
<div class="seo-kicker">Problem Guide</div>
|
|
552
|
+
<h3>How to Stop AI Agents From Repeating Mistakes</h3>
|
|
553
|
+
<p>The shortest path from “I already corrected this once” to a pre-action gate that blocks the repeat before the next tool call lands.</p>
|
|
554
|
+
<div class="card-arrow">See the fix →</div>
|
|
555
|
+
</a>
|
|
556
|
+
<a class="seo-card" href="/guides/cursor-agent-guardrails">
|
|
557
|
+
<div class="seo-kicker">Cursor</div>
|
|
558
|
+
<h3>Cursor Guardrails That Block Repeat Failures</h3>
|
|
559
|
+
<p>Why Cursor users need more than prompts when the same risky refactor, shell step, or git action keeps coming back.</p>
|
|
560
|
+
<div class="card-arrow">Read the Cursor guide →</div>
|
|
561
|
+
</a>
|
|
562
|
+
<a class="seo-card" href="/guides/codex-cli-guardrails">
|
|
563
|
+
<div class="seo-kicker">Codex</div>
|
|
564
|
+
<h3>Codex CLI Guardrails That Actually Enforce</h3>
|
|
565
|
+
<p>Turn operator feedback into searchable lessons, linked prevention rules, and a runtime stop before Codex repeats the mistake.</p>
|
|
566
|
+
<div class="card-arrow">Read the Codex guide →</div>
|
|
567
|
+
</a>
|
|
568
|
+
<a class="seo-card" href="/guides/gemini-cli-feedback-memory">
|
|
569
|
+
<div class="seo-kicker">Gemini</div>
|
|
570
|
+
<h3>Gemini CLI Memory That Leads to Enforcement</h3>
|
|
571
|
+
<p>Why Gemini CLI buyers start with memory and convert when they see how memory becomes real pre-action gates.</p>
|
|
572
|
+
<div class="card-arrow">Read the Gemini guide →</div>
|
|
573
|
+
</a>
|
|
550
574
|
</div>
|
|
551
575
|
</div>
|
|
552
576
|
</section>
|
|
@@ -554,7 +578,7 @@ __GA_BOOTSTRAP__
|
|
|
554
578
|
<!-- HOW IT WORKS -->
|
|
555
579
|
<section class="how-it-works" id="how-it-works">
|
|
556
580
|
<div class="container">
|
|
557
|
-
<div class="section-label">New in
|
|
581
|
+
<div class="section-label">New in v1.0.0</div>
|
|
558
582
|
<h2 class="section-title">Three steps to stop repeated AI failures</h2>
|
|
559
583
|
<div class="steps">
|
|
560
584
|
<div class="step">
|
|
@@ -811,7 +835,7 @@ __GA_BOOTSTRAP__
|
|
|
811
835
|
<a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
|
|
812
836
|
<a href="/blog">Blog</a>
|
|
813
837
|
</div>
|
|
814
|
-
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License ·
|
|
838
|
+
<span class="footer-copy">© 2026 Max Smith KDP LLC · MIT License · v1.0.0</span>
|
|
815
839
|
</div>
|
|
816
840
|
</footer>
|
|
817
841
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>The Agent Harness Pattern: Why Your AI Needs a Seatbelt — ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification gates, and durable state. ThumbGate implements this pattern today.">
|
|
9
9
|
<meta name="keywords" content="agent harness pattern, natural language agent harness, NLAH, AI agent safety, pre-action gates, verification gates, agent contracts, ThumbGate, MCP hooks">
|
|
10
10
|
<meta property="og:title" content="The Agent Harness Pattern: Why Your AI Needs a Seatbelt">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>How to Give Your AI Coding Agent Persistent Memory Across Sessions — ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="AI coding agents forget everything when a session ends. Learn how to give Claude Code, Cursor, Codex, and Gemini persistent memory using an MCP memory server that survives restarts.">
|
|
9
9
|
<meta name="keywords" content="ai agent memory, persistent memory, claude code memory, cursor agent memory, MCP memory server, session persistence, agent context, episodic memory, semantic memory">
|
|
10
10
|
<meta property="og:title" content="How to Give Your AI Coding Agent Persistent Memory Across Sessions">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>MCP Pre-Action Gates Explained — ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="What pre-action gates are, how they work in the Model Context Protocol, and why enforcement beats prompt rules for AI coding agent safety.">
|
|
9
9
|
<meta name="keywords" content="MCP pre-action gates, PreToolUse hooks, Model Context Protocol, AI agent enforcement, Claude Code hooks, MCP server guardrails, tool call interception, ThumbGate">
|
|
10
10
|
<meta property="og:title" content="MCP Pre-Action Gates Explained">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>How to Stop AI Agents From Force-Pushing to Main — ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Your AI coding agent just force-pushed to main. Again. Here is how to make that physically impossible with a pre-action gate in two minutes.">
|
|
9
9
|
<meta name="keywords" content="AI agent force push, Claude Code force push prevention, git push force main, AI coding agent git safety, pre-action gates, ThumbGate">
|
|
10
10
|
<meta property="og:title" content="How to Stop AI Agents From Force-Pushing to Main">
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>The Vibe Coding Safety Net You Are Missing — ThumbGate</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Vibe coding is fast until your AI agent deletes a production table or rewrites a file you did not ask it to touch. Add guardrails without slowing down.">
|
|
9
9
|
<meta name="keywords" content="vibe coding safety, vibe coding guardrails, AI coding mistakes, Claude Code safety net, Cursor agent guardrails, AI agent enforcement, ThumbGate">
|
|
10
10
|
<meta property="og:title" content="The Vibe Coding Safety Net You Are Missing">
|
package/public/learn.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Learn — AI Agent Safety, Pre-Action Gates, and Vibe Coding Guardrails</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<meta name="description" content="Practical guides for stopping AI coding agent mistakes. Learn about pre-action gates, MCP guardrails, feedback-driven enforcement, and vibe coding safety for Claude Code, Cursor, Codex, and more.">
|
|
9
9
|
<meta name="keywords" content="AI agent safety, pre-action gates, vibe coding guardrails, Claude Code mistakes, Cursor agent memory, MCP server hooks, AI coding agent feedback, ThumbGate guides">
|
|
10
10
|
<meta property="og:title" content="Learn — AI Agent Safety Guides by ThumbGate">
|
|
@@ -57,6 +57,30 @@
|
|
|
57
57
|
"position": 5,
|
|
58
58
|
"url": "https://thumbgate-production.up.railway.app/learn/ai-agent-persistent-memory",
|
|
59
59
|
"name": "How to Give Your AI Coding Agent Persistent Memory Across Sessions"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"@type": "ListItem",
|
|
63
|
+
"position": 6,
|
|
64
|
+
"url": "https://thumbgate-production.up.railway.app/guides/stop-repeated-ai-agent-mistakes",
|
|
65
|
+
"name": "How to Stop AI Coding Agents From Repeating Mistakes"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"@type": "ListItem",
|
|
69
|
+
"position": 7,
|
|
70
|
+
"url": "https://thumbgate-production.up.railway.app/guides/cursor-agent-guardrails",
|
|
71
|
+
"name": "Cursor Guardrails That Block Repeated Mistakes"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"@type": "ListItem",
|
|
75
|
+
"position": 8,
|
|
76
|
+
"url": "https://thumbgate-production.up.railway.app/guides/codex-cli-guardrails",
|
|
77
|
+
"name": "Codex CLI Guardrails That Actually Enforce"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"@type": "ListItem",
|
|
81
|
+
"position": 9,
|
|
82
|
+
"url": "https://thumbgate-production.up.railway.app/guides/gemini-cli-feedback-memory",
|
|
83
|
+
"name": "Gemini CLI Feedback Memory That Leads to Enforcement"
|
|
60
84
|
}
|
|
61
85
|
]
|
|
62
86
|
}
|
|
@@ -86,6 +110,7 @@
|
|
|
86
110
|
h2 { font-size: 1.5rem; margin: 2.5rem 0 1rem; color: var(--cyan); }
|
|
87
111
|
p { color: var(--text); margin-bottom: 0.75rem; }
|
|
88
112
|
.hero-sub { color: var(--muted); font-size: 1.1rem; max-width: 600px; margin-bottom: 2rem; }
|
|
113
|
+
.section-intro { color: var(--muted); margin-bottom: 1rem; }
|
|
89
114
|
|
|
90
115
|
.article-grid { display: grid; grid-template-columns: 1fr; gap: 24px; margin-top: 2rem; }
|
|
91
116
|
.article-card {
|
|
@@ -202,6 +227,42 @@
|
|
|
202
227
|
</a>
|
|
203
228
|
</div>
|
|
204
229
|
|
|
230
|
+
<h2>Popular buyer questions</h2>
|
|
231
|
+
<p class="section-intro">These are the high-intent guides for buyers who already know the pain and want to understand where ThumbGate fits fast.</p>
|
|
232
|
+
<div class="article-grid">
|
|
233
|
+
<a href="/guides/stop-repeated-ai-agent-mistakes" class="article-card">
|
|
234
|
+
<h3>How to Stop AI Coding Agents From Repeating Mistakes</h3>
|
|
235
|
+
<p>The fastest explanation of why memory alone is not enough when your agent keeps making the same bad move twice.</p>
|
|
236
|
+
<span class="article-tag">Repeat Failures</span>
|
|
237
|
+
<span class="article-tag">Guardrails</span>
|
|
238
|
+
<span class="article-tag">Buyer Guide</span>
|
|
239
|
+
</a>
|
|
240
|
+
|
|
241
|
+
<a href="/guides/cursor-agent-guardrails" class="article-card">
|
|
242
|
+
<h3>Cursor Guardrails That Block Repeated Mistakes</h3>
|
|
243
|
+
<p>For Cursor users who need to keep speed while adding a runtime enforcement layer that does more than prompt politely.</p>
|
|
244
|
+
<span class="article-tag">Cursor</span>
|
|
245
|
+
<span class="article-tag">Guardrails</span>
|
|
246
|
+
<span class="article-tag">Integration</span>
|
|
247
|
+
</a>
|
|
248
|
+
|
|
249
|
+
<a href="/guides/codex-cli-guardrails" class="article-card">
|
|
250
|
+
<h3>Codex CLI Guardrails That Actually Enforce</h3>
|
|
251
|
+
<p>Why operators looking for Codex CLI guardrails are really looking for a feedback-to-enforcement loop they can trust.</p>
|
|
252
|
+
<span class="article-tag">Codex</span>
|
|
253
|
+
<span class="article-tag">CLI</span>
|
|
254
|
+
<span class="article-tag">Reliability</span>
|
|
255
|
+
</a>
|
|
256
|
+
|
|
257
|
+
<a href="/guides/gemini-cli-feedback-memory" class="article-card">
|
|
258
|
+
<h3>Gemini CLI Feedback Memory That Leads to Enforcement</h3>
|
|
259
|
+
<p>A memory-first buyer path for Gemini CLI users who will eventually care about gates, proof, and operational control.</p>
|
|
260
|
+
<span class="article-tag">Gemini</span>
|
|
261
|
+
<span class="article-tag">Memory</span>
|
|
262
|
+
<span class="article-tag">Enforcement</span>
|
|
263
|
+
</a>
|
|
264
|
+
</div>
|
|
265
|
+
|
|
205
266
|
<div class="cta-section">
|
|
206
267
|
<h2 style="color:var(--text);font-size:1.3rem;margin:0 0 8px;">Ready to try it?</h2>
|
|
207
268
|
<p>One command. Works with Claude Code, Cursor, Codex, Gemini, Amp, and any MCP agent.</p>
|
package/public/lessons.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>ThumbGate — Lessons Learned</title>
|
|
7
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
7
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
8
8
|
<style>
|
|
9
9
|
*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
|
|
10
10
|
:root {
|
package/public/pro.html
CHANGED
|
@@ -13,7 +13,7 @@ __GOOGLE_SITE_VERIFICATION_META__
|
|
|
13
13
|
<link rel="canonical" href="__APP_ORIGIN__/pro">
|
|
14
14
|
<meta name="keywords" content="ThumbGate Pro, AI agent reliability, pre-action gates, DPO export, local dashboard, review-ready evidence, Claude Code reliability, Codex reliability, Cursor reliability">
|
|
15
15
|
|
|
16
|
-
<script defer data-domain="thumbgate-production.up.railway.app"
|
|
16
|
+
<script defer data-domain="thumbgate-production.up.railway.app" src="https://plausible.io/js/script.js"></script>
|
|
17
17
|
__GA_BOOTSTRAP__
|
|
18
18
|
|
|
19
19
|
<script>
|
|
Binary file
|
|
@@ -84,10 +84,10 @@ function getCredentialAudit({ periodHours = 24 } = {}) {
|
|
|
84
84
|
|
|
85
85
|
// MCP profile tool allowlists (loaded from config or defaults)
|
|
86
86
|
const PROFILE_ALLOWLISTS = {
|
|
87
|
-
essential: new Set(['capture_feedback', 'recall', 'search_lessons', 'search_thumbgate', 'prevention_rules', 'enforcement_matrix', 'feedback_stats', 'estimate_uncertainty', 'org_dashboard', 'set_task_scope', 'get_scope_state', 'set_branch_governance', 'get_branch_governance', 'approve_protected_action', 'check_operational_integrity']),
|
|
88
|
-
readonly: new Set(['recall', 'feedback_summary', 'search_lessons', 'verify_claim', 'gate_stats', 'search_thumbgate', 'feedback_stats', 'estimate_uncertainty', 'org_dashboard', 'get_scope_state', 'get_branch_governance', 'check_operational_integrity']),
|
|
89
|
-
locked: new Set(['feedback_summary', 'search_lessons', 'diagnose_failure', 'list_intents', 'plan_intent', 'list_harnesses', 'verify_claim', 'get_scope_state', 'get_branch_governance', 'check_operational_integrity']),
|
|
90
|
-
commerce: new Set(['capture_feedback', 'recall', 'search_thumbgate', 'commerce_recall', 'track_action', 'verify_claim', 'feedback_stats', 'set_task_scope', 'get_scope_state', 'set_branch_governance', 'get_branch_governance', 'approve_protected_action', 'check_operational_integrity']),
|
|
87
|
+
essential: new Set(['capture_feedback', 'recall', 'search_lessons', 'search_thumbgate', 'prevention_rules', 'enforcement_matrix', 'feedback_stats', 'estimate_uncertainty', 'org_dashboard', 'set_task_scope', 'get_scope_state', 'set_branch_governance', 'get_branch_governance', 'approve_protected_action', 'check_operational_integrity', 'workflow_sentinel']),
|
|
88
|
+
readonly: new Set(['recall', 'feedback_summary', 'search_lessons', 'verify_claim', 'gate_stats', 'search_thumbgate', 'feedback_stats', 'estimate_uncertainty', 'org_dashboard', 'get_scope_state', 'get_branch_governance', 'check_operational_integrity', 'workflow_sentinel']),
|
|
89
|
+
locked: new Set(['feedback_summary', 'search_lessons', 'diagnose_failure', 'list_intents', 'plan_intent', 'list_harnesses', 'verify_claim', 'get_scope_state', 'get_branch_governance', 'check_operational_integrity', 'workflow_sentinel']),
|
|
90
|
+
commerce: new Set(['capture_feedback', 'recall', 'search_thumbgate', 'commerce_recall', 'track_action', 'verify_claim', 'feedback_stats', 'set_task_scope', 'get_scope_state', 'set_branch_governance', 'get_branch_governance', 'approve_protected_action', 'check_operational_integrity', 'workflow_sentinel']),
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
/**
|