thumbgate 1.3.0 → 1.4.1
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/README.md +25 -0
- 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 +242 -126
- package/adapters/README.md +1 -1
- package/adapters/chatgpt/INSTALL.md +59 -4
- 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 +204 -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 +47 -11
- 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 +172 -65
- package/public/lessons.html +33 -24
- package/public/llm-context.md +140 -0
- package/public/pro.html +24 -22
- 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/auto-promote-gates.js +5 -3
- package/scripts/background-agent-governance.js +2 -10
- package/scripts/billing-setup.js +109 -0
- package/scripts/billing.js +2 -16
- package/scripts/budget-enforcer.js +173 -0
- package/scripts/build-claude-mcpb.js +71 -5
- 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 +54 -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 +215 -36
- package/scripts/filesystem-search.js +1 -9
- package/scripts/fs-utils.js +104 -0
- package/scripts/gates-engine.js +200 -11
- 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-config.js +2 -0
- package/scripts/hosted-job-launcher.js +1 -5
- package/scripts/hybrid-feedback-context.js +33 -49
- 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/operational-summary.js +41 -5
- 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/ralph-loop.js +376 -0
- package/scripts/ralph-mode-ci.js +331 -0
- package/scripts/rate-limiter.js +3 -1
- package/scripts/reddit-dm-outreach.js +14 -4
- package/scripts/rotate-stripe-webhook-secret.js +314 -0
- 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 +296 -7
- package/scripts/__pycache__/train_from_feedback.cpython-312.pyc +0 -0
- 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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "thumbgate",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "ThumbGate
|
|
3
|
+
"version": "1.4.1",
|
|
4
|
+
"description": "ThumbGate: self-improving agent governance for engineering teams. Three-tier approval routing (block/approve/log), shared enforcement, CI gates, and audit trails. Every mistake becomes a prevention rule. PreToolUse hooks, Thompson Sampling, SQLite+FTS5 lesson DB, and LanceDB vector search.",
|
|
5
5
|
"homepage": "https://thumbgate-production.up.railway.app",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
"changeset:status": "changeset status",
|
|
38
38
|
"changeset:check": "node scripts/changeset-check.js",
|
|
39
39
|
"build:claude-mcpb": "node scripts/build-claude-mcpb.js",
|
|
40
|
+
"build:claude-review-zip": "node scripts/build-claude-mcpb.js --review-zip",
|
|
41
|
+
"build:codex-plugin": "node scripts/build-codex-plugin.js",
|
|
40
42
|
"verify:quick": "node scripts/verify-run.js quick",
|
|
41
43
|
"verify:full": "node scripts/verify-run.js full",
|
|
42
44
|
"budget:status": "node scripts/budget-guard.js --status",
|
|
@@ -70,7 +72,7 @@
|
|
|
70
72
|
"social:post-everywhere:dry": "node scripts/post-everywhere.js --dry-run",
|
|
71
73
|
"social:reply-monitor": "node scripts/social-reply-monitor.js",
|
|
72
74
|
"social:reply-monitor:dry": "node scripts/social-reply-monitor.js --dry-run",
|
|
73
|
-
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:lesson-retrieval && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility",
|
|
75
|
+
"test": "npm run test:schema && npm run test:loop && npm run test:dpo && npm run test:kto && npm run test:api && npm run test:proof && npm run test:e2e && npm run test:rlaif && npm run test:attribution && npm run test:quality && npm run test:intelligence && npm run test:training-export && npm run test:deployment && npm run test:operational-integrity && npm run test:workflow && npm run test:billing && npm run test:cli && npm run test:watcher && npm run test:autoresearch && npm run test:ops && npm run test:tessl && npm run test:gates && npm run test:evoskill && npm run test:gates-hardening && npm run test:workers && npm run test:social-analytics && npm run test:memalign && npm run test:xmemory-lite && npm run test:filesystem-search && npm run test:zernio && npm run test:obsidian-export && npm run test:lesson-db && npm run test:lesson-rotation && npm run test:memory-dedup && npm run test:feedback-quality && npm run test:sync-version && npm run test:check-congruence && npm run test:tool-registry && npm run test:feedback-to-rules && npm run test:memory-firewall && npm run test:belief-update && npm run test:hosted-config && npm run test:operational-summary && npm run test:cloudflare-sandbox && npm run test:mcp-config && npm run test:plan-gate && npm run test:pulse && npm run test:semantic-layer && npm run test:data-pipeline && npm run test:optimize-context && npm run test:principle-extractor && npm run test:analytics-window && npm run test:funnel-analytics && npm run test:experiment-tracker && npm run test:build-metadata && npm run test:context-engine && npm run test:hf-papers && npm run test:marketing-experiment && npm run test:seo-gsd && npm run test:verify-run && npm run test:export-dpo-pairs && npm run test:export-hf-dataset && npm run test:license && npm run test:bot-detector && npm run test:postinstall && npm run test:funnel-invariants && npm run test:cli-telemetry && npm run test:pro-parity && npm run test:model-tier-router && npm run test:computer-use-firewall && npm run test:skill-exporter && npm run test:statusline && npm run test:evolution && npm run test:org-dashboard && npm run test:multi-hop-recall && npm run test:synthetic-dpo && npm run test:thumbgate-skill && npm run test:learn-hub && npm run test:feedback-fallback && npm run test:metaclaw && npm run test:server-lock && npm run test:control-tower && npm run test:pii-scanner && npm run test:data-governance && npm run test:lesson-inference && npm run test:semantic-dedup && npm run test:fs-utils && npm run test:lesson-retrieval && npm run test:reflector-agent && npm run test:feedback-session && npm run test:feedback-history-distiller && npm run test:hallucination-detector && npm run test:history-distiller && npm run test:predictive-insights && npm run test:prove-predictive-insights && npm run test:statusbar-cli && npm run test:generate-instagram-card && npm run test:instagram-thumbgate-post && npm run test:publish-instagram-thumbgate && npm run test:lesson-synthesis && npm run test:background-governance && npm run test:memory-migration && npm run test:prompt-dlp && npm run test:ephemeral-store && npm run test:agent-security && npm run test:skill-progressive && npm run test:per-step-scoring && npm run test:weekly-auto-post && npm run test:social-post-hourly && npm run test:social-quality-gate && npm run test:a2ui-engine && npm run test:gate-satisfy && npm run test:money-watcher && npm run test:budget && npm run test:quick-start && npm run test:utm && npm run test:product-feedback && npm run test:feedback-root-consolidator && npm run test:engagement-audit && npm run test:install-growth-automation && npm run test:publish-thumbgate-launch && npm run test:reconcile-thumbgate-campaign && npm run test:reddit-publisher && npm run test:schedule-thumbgate-campaign && npm run test:social-reply-monitor && npm run test:sync-launch-assets && npm run test:ai-search-visibility && npm run test:security-scanner && npm run test:llm-client && npm run test:managed-lesson-agent && npm run test:self-distill && npm run test:meta-agent && npm run test:harness-selector && npm run test:seo-guides && npm run test:enforcement-loop",
|
|
74
76
|
"test:feedback-fallback": "node --test tests/feedback-fallback.test.js",
|
|
75
77
|
"test:metaclaw": "node --test tests/metaclaw-features.test.js",
|
|
76
78
|
"test:server-lock": "node --test tests/server-stdio-lock.test.js",
|
|
@@ -91,6 +93,7 @@
|
|
|
91
93
|
"test:memory-firewall": "node --test tests/memory-firewall.test.js",
|
|
92
94
|
"test:belief-update": "node --test tests/belief-update.test.js",
|
|
93
95
|
"test:hosted-config": "node --test tests/hosted-config.test.js",
|
|
96
|
+
"test:operational-summary": "node --test tests/operational-summary.test.js",
|
|
94
97
|
"test:cloudflare-sandbox": "node --test tests/cloudflare-dynamic-sandbox.test.js tests/cloudflare-sandbox-api.test.js",
|
|
95
98
|
"test:mcp-config": "node --test tests/mcp-config.test.js",
|
|
96
99
|
"test:plan-gate": "node --test tests/plan-gate.test.js",
|
|
@@ -121,8 +124,8 @@
|
|
|
121
124
|
"test:loop": "node scripts/feedback-loop.js --test",
|
|
122
125
|
"test:dpo": "node scripts/export-dpo-pairs.js --test",
|
|
123
126
|
"test:kto": "node --test tests/export-kto.test.js",
|
|
124
|
-
"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/context-manager.test.js tests/contextfs.test.js tests/job-api.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/lessons-page.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",
|
|
125
|
-
"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",
|
|
127
|
+
"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/context-manager.test.js tests/contextfs.test.js tests/job-api.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/document-intake.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/lessons-page.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",
|
|
128
|
+
"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-packaged-runtime.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",
|
|
126
129
|
"test:e2e": "node --test tests/e2e-pipeline.test.js tests/e2e-product-flows.test.js tests/e2e-coverage-contract.test.js",
|
|
127
130
|
"test:rlaif": "node --test tests/rlaif-self-audit.test.js tests/dpo-optimizer.test.js tests/meta-policy.test.js",
|
|
128
131
|
"test:attribution": "node --test tests/feedback-attribution.test.js tests/hybrid-feedback-context.test.js",
|
|
@@ -130,16 +133,17 @@
|
|
|
130
133
|
"test:intelligence": "node --test tests/intelligence.test.js",
|
|
131
134
|
"test:training-export": "node --test tests/training-export.test.js tests/databricks-export.test.js",
|
|
132
135
|
"test:deployment": "node --test tests/deployment.test.js tests/deploy-policy.test.js tests/publish-decision.test.js tests/changeset-check.test.js tests/sonarcloud-workflow.test.js",
|
|
133
|
-
"test:operational-integrity": "node --test tests/operational-integrity.test.js",
|
|
134
|
-
"test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/enterprise-story.test.js",
|
|
136
|
+
"test:operational-integrity": "node --test tests/operational-integrity.test.js tests/sync-branch-protection.test.js",
|
|
137
|
+
"test:workflow": "node --test tests/workflow-contract.test.js tests/social-marketing-assets.test.js tests/social-pipeline.test.js tests/positioning-contract.test.js tests/docs-claim-hygiene.test.js tests/workflow-runs.test.js tests/workflow-sprint-intake.test.js tests/gtm-revenue-loop.test.js tests/enterprise-story.test.js tests/ralph-loop.test.js",
|
|
135
138
|
"test:billing": "node --test tests/billing.test.js",
|
|
136
139
|
"test:cli": "node --test tests/analytics-report.test.js tests/creator-campaigns.test.js tests/cli.test.js tests/codex-bridge-script.test.js tests/dispatch-brief.test.js tests/feedback-normalize.test.js tests/install-mcp.test.js tests/pr-manager.test.js tests/pro-local-dashboard.test.js tests/published-cli.test.js tests/revenue-status.test.js",
|
|
137
140
|
"test:evolution": "node --test tests/workspace-evolver.test.js",
|
|
138
141
|
"test:watcher": "node --test tests/jsonl-watcher.test.js",
|
|
139
142
|
"test:autoresearch": "node --test tests/autoresearch.test.js",
|
|
140
|
-
"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/intervention-policy.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/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js",
|
|
143
|
+
"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/decision-journal.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/intervention-policy.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/stripe-webhook-rotation.test.js tests/train-from-feedback.test.js tests/workflow-hardening-sprint.test.js tests/workflow-sentinel.test.js tests/test-suite-parity.test.js tests/a2ui-engine.test.js tests/webhook-delivery.test.js",
|
|
141
144
|
"test:tessl": "node --test tests/tessl-export.test.js",
|
|
142
145
|
"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 tests/docker-sandbox-planner.test.js",
|
|
146
|
+
"test:budget": "node --test tests/budget-enforcer.test.js",
|
|
143
147
|
"test:workers": "npm --prefix workers ci && npm --prefix workers test",
|
|
144
148
|
"test:evoskill": "node --test tests/evoskill.test.js",
|
|
145
149
|
"test:gates-hardening": "node --test tests/gates-hardening.test.js",
|
|
@@ -157,6 +161,8 @@
|
|
|
157
161
|
"adk:consolidate": "node scripts/adk-consolidator.js",
|
|
158
162
|
"adk:watch": "node scripts/adk-consolidator.js --watch",
|
|
159
163
|
"pr:manage": "node scripts/pr-manager.js",
|
|
164
|
+
"branch-protection:check": "node scripts/sync-branch-protection.js --check",
|
|
165
|
+
"branch-protection:sync": "node scripts/sync-branch-protection.js",
|
|
160
166
|
"self-heal:run": "node scripts/self-heal.js",
|
|
161
167
|
"self-heal:check": "node scripts/self-healing-check.js",
|
|
162
168
|
"skill:verify": "node scripts/tessl-export.js verify",
|
|
@@ -221,10 +227,12 @@
|
|
|
221
227
|
"test:skill-progressive": "node --test tests/skill-progressive-disclosure.test.js",
|
|
222
228
|
"test:per-step-scoring": "node --test tests/per-step-scoring.test.js",
|
|
223
229
|
"test:weekly-auto-post": "node --test tests/weekly-auto-post.test.js",
|
|
230
|
+
"test:social-post-hourly": "node --test tests/social-post-hourly.test.js",
|
|
224
231
|
"test:social-quality-gate": "node --test tests/social-quality-gate.test.js",
|
|
225
232
|
"test:a2ui-engine": "node --test tests/a2ui-engine.test.js",
|
|
226
233
|
"test:gate-satisfy": "node --test tests/gate-satisfy.test.js",
|
|
227
234
|
"test:money-watcher": "node --test tests/money-watcher.test.js",
|
|
235
|
+
"test:quick-start": "node --test tests/quick-start.test.js",
|
|
228
236
|
"test:utm": "node --test tests/utm.test.js",
|
|
229
237
|
"test:product-feedback": "node --test tests/product-feedback.test.js",
|
|
230
238
|
"test:feedback-root-consolidator": "node --test tests/feedback-root-consolidator.test.js",
|
|
@@ -242,7 +250,26 @@
|
|
|
242
250
|
"test:sync-launch-assets": "node --test tests/sync-launch-assets.test.js",
|
|
243
251
|
"test:reddit-publisher": "node --test tests/reddit-publisher.test.js",
|
|
244
252
|
"test:engagement-audit": "node --test tests/engagement-audit.test.js",
|
|
245
|
-
"test:
|
|
253
|
+
"test:enforcement-loop": "node --test tests/enforcement-loop-fixes.test.js",
|
|
254
|
+
"test:ai-search-visibility": "node --test tests/ai-search-visibility.test.js",
|
|
255
|
+
"test:security-scanner": "node --test tests/security-scanner.test.js",
|
|
256
|
+
"test:llm-client": "node --test tests/llm-client.test.js",
|
|
257
|
+
"test:managed-lesson-agent": "node --test tests/managed-lesson-agent.test.js",
|
|
258
|
+
"agent:run": "node scripts/managed-lesson-agent.js",
|
|
259
|
+
"agent:run:dry": "node scripts/managed-lesson-agent.js --dry-run",
|
|
260
|
+
"agent:schedule": "node scripts/schedule-manager.js install --label managed-lesson-agent --spec 'daily 02:00' --command 'npm run agent:run' --workingDirectory .",
|
|
261
|
+
"feedback:rules:llm": "node scripts/feedback-to-rules.js --llm",
|
|
262
|
+
"test:self-distill": "node --test tests/self-distill-agent.test.js",
|
|
263
|
+
"test:seo-guides": "node --test tests/seo-guides.test.js",
|
|
264
|
+
"self-distill:run": "node scripts/self-distill-agent.js",
|
|
265
|
+
"self-distill:dry": "node scripts/self-distill-agent.js --dry-run",
|
|
266
|
+
"meta-agent:run": "node scripts/meta-agent-loop.js",
|
|
267
|
+
"meta-agent:dry": "node scripts/meta-agent-loop.js --dry-run",
|
|
268
|
+
"meta-agent:status": "node scripts/meta-agent-loop.js --status",
|
|
269
|
+
"test:meta-agent": "node --test tests/meta-agent-loop.test.js",
|
|
270
|
+
"test:semantic-dedup": "node --test tests/semantic-dedup.test.js",
|
|
271
|
+
"test:fs-utils": "node --test tests/fs-utils.test.js",
|
|
272
|
+
"test:harness-selector": "node --test tests/harness-selector.test.js"
|
|
246
273
|
},
|
|
247
274
|
"keywords": [
|
|
248
275
|
"mcp",
|
|
@@ -272,7 +299,14 @@
|
|
|
272
299
|
"cursor",
|
|
273
300
|
"codex",
|
|
274
301
|
"safety",
|
|
275
|
-
"enforcement"
|
|
302
|
+
"enforcement",
|
|
303
|
+
"ai agent memory",
|
|
304
|
+
"repeated mistakes",
|
|
305
|
+
"agent error prevention",
|
|
306
|
+
"ai-authenticity",
|
|
307
|
+
"prevent-ai-slop",
|
|
308
|
+
"human-led-ai",
|
|
309
|
+
"ai-standards-enforcement"
|
|
276
310
|
],
|
|
277
311
|
"author": "Igor Ganapolsky",
|
|
278
312
|
"license": "MIT",
|
|
@@ -290,6 +324,7 @@
|
|
|
290
324
|
"node": ">=18.18.0"
|
|
291
325
|
},
|
|
292
326
|
"dependencies": {
|
|
327
|
+
"@anthropic-ai/sdk": "^0.24.0",
|
|
293
328
|
"@google/genai": "^1.48.0",
|
|
294
329
|
"@huggingface/transformers": "^4.0.1",
|
|
295
330
|
"@lancedb/lancedb": "^0.27.2",
|
|
@@ -308,6 +343,7 @@
|
|
|
308
343
|
"devDependencies": {
|
|
309
344
|
"@changesets/changelog-github": "^0.5.1",
|
|
310
345
|
"@changesets/cli": "^2.30.0",
|
|
311
|
-
"c8": "^11.0.0"
|
|
346
|
+
"c8": "^11.0.0",
|
|
347
|
+
"undici": "^8.0.2"
|
|
312
348
|
}
|
|
313
349
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-bridge",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.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",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const fs = require('node:fs');
|
|
4
4
|
const path = require('node:path');
|
|
5
5
|
const { spawnSync } = require('node:child_process');
|
|
6
|
+
const { ensureDir } = require('../../../scripts/fs-utils');
|
|
6
7
|
|
|
7
8
|
function getPluginRoot() {
|
|
8
9
|
return process.env.CLAUDE_PLUGIN_ROOT || path.resolve(__dirname, '..');
|
|
@@ -20,9 +21,6 @@ function getCodexBin() {
|
|
|
20
21
|
return process.env.THUMBGATE_CODEX_BIN || 'codex';
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
function ensureDir(dirPath) {
|
|
24
|
-
fs.mkdirSync(dirPath, { recursive: true });
|
|
25
|
-
}
|
|
26
24
|
|
|
27
25
|
function readJson(filePath) {
|
|
28
26
|
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codex-profile",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.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",
|
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
# ThumbGate for Codex
|
|
2
2
|
|
|
3
|
-
ThumbGate now ships a repo-local Codex app plugin surface
|
|
3
|
+
ThumbGate now ships a standalone Codex plugin bundle, a repo-local Codex app plugin surface, and the version-pinned MCP profile.
|
|
4
|
+
|
|
5
|
+
## Option 1: Use the standalone release bundle
|
|
6
|
+
|
|
7
|
+
Download the latest bundle:
|
|
8
|
+
|
|
9
|
+
- `https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip`
|
|
10
|
+
|
|
11
|
+
Or build it from source:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm run build:codex-plugin
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
After extracting `thumbgate-codex-plugin.zip`, the folder already contains:
|
|
18
|
+
|
|
19
|
+
- `.codex-plugin/plugin.json`
|
|
20
|
+
- `.mcp.json`
|
|
21
|
+
- `.agents/plugins/marketplace.json`
|
|
22
|
+
- `config.toml`
|
|
23
|
+
|
|
24
|
+
The bundled marketplace catalog points at `./`, so the extracted directory is a self-contained plugin root instead of a repo-relative stub.
|
|
25
|
+
|
|
26
|
+
## Option 2: Use the repo-local plugin files
|
|
4
27
|
|
|
5
28
|
## Shipped plugin files
|
|
6
29
|
|
|
@@ -9,7 +32,7 @@ ThumbGate now ships a repo-local Codex app plugin surface plus the version-pinne
|
|
|
9
32
|
- Codex marketplace entry: `.agents/plugins/marketplace.json`
|
|
10
33
|
- Manual install profile: `adapters/codex/config.toml`
|
|
11
34
|
|
|
12
|
-
##
|
|
35
|
+
## Option 3: Manual MCP install
|
|
13
36
|
|
|
14
37
|
Add the MCP server block to your Codex config:
|
|
15
38
|
|
|
@@ -31,7 +54,7 @@ The following block is appended to `~/.codex/config.toml`:
|
|
|
31
54
|
```toml
|
|
32
55
|
[mcp_servers.thumbgate]
|
|
33
56
|
command = "npx"
|
|
34
|
-
args = ["--yes", "--package", "thumbgate@1.
|
|
57
|
+
args = ["--yes", "--package", "thumbgate@1.4.0", "thumbgate", "serve"]
|
|
35
58
|
```
|
|
36
59
|
|
|
37
60
|
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.
|
|
@@ -59,7 +82,7 @@ Then restart Codex. The `thumbgate` MCP server will appear in the tool list.
|
|
|
59
82
|
|
|
60
83
|
- Codex with MCP support
|
|
61
84
|
- Node.js 18+ in PATH
|
|
62
|
-
- Config file at `~/.codex/config.toml`
|
|
85
|
+
- Config file at `~/.codex/config.toml` when using the manual MCP install path
|
|
63
86
|
|
|
64
87
|
## Uninstall
|
|
65
88
|
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
# ThumbGate for Codex
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
ThumbGate now ships a standalone Codex plugin bundle in GitHub Releases, alongside the repo-local Codex profile in this repository.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Release surfaces
|
|
6
6
|
|
|
7
|
-
- `
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
7
|
+
- Latest standalone bundle: `https://github.com/IgorGanapolsky/ThumbGate/releases/latest/download/thumbgate-codex-plugin.zip`
|
|
8
|
+
- Versioned bundle pattern: `https://github.com/IgorGanapolsky/ThumbGate/releases/download/v<VERSION>/thumbgate-codex-plugin-v<VERSION>.zip`
|
|
9
|
+
- Source plugin manifest: `plugins/codex-profile/.codex-plugin/plugin.json`
|
|
10
|
+
- Source MCP config: `plugins/codex-profile/.mcp.json`
|
|
11
|
+
- Manual install profile: `adapters/codex/config.toml`
|
|
10
12
|
|
|
11
13
|
## What it does
|
|
12
14
|
|
|
@@ -14,11 +16,25 @@ It packages the same ThumbGate runtime you already use elsewhere:
|
|
|
14
16
|
- captures thumbs-up/down feedback that survives session boundaries
|
|
15
17
|
- reuses the same local-first MCP runtime as Claude, Cursor, Gemini, Amp, and OpenCode
|
|
16
18
|
|
|
19
|
+
## What's inside the standalone bundle
|
|
20
|
+
|
|
21
|
+
- `.codex-plugin/plugin.json`
|
|
22
|
+
- `.mcp.json`
|
|
23
|
+
- `.agents/plugins/marketplace.json`
|
|
24
|
+
- `config.toml`
|
|
25
|
+
- `README.md`, `INSTALL.md`, and `AGENTS.md`
|
|
26
|
+
|
|
27
|
+
The bundled marketplace catalog rewrites the plugin path to `./`, so the extracted folder can act as a self-contained plugin root instead of depending on this repository layout.
|
|
28
|
+
|
|
17
29
|
## Install paths
|
|
18
30
|
|
|
19
|
-
### Codex
|
|
31
|
+
### Standalone Codex plugin bundle
|
|
32
|
+
|
|
33
|
+
Download the latest `thumbgate-codex-plugin.zip`, unzip it, and point Codex at the extracted `thumbgate-codex-plugin/` directory when you want a standalone plugin release surface.
|
|
34
|
+
|
|
35
|
+
### Repo-local Codex app plugin
|
|
20
36
|
|
|
21
|
-
Use the
|
|
37
|
+
Use the plugin metadata and MCP config in this folder when Codex is loading plugin surfaces directly from the repository.
|
|
22
38
|
|
|
23
39
|
### Manual install
|
|
24
40
|
|
|
@@ -29,9 +45,17 @@ That profile launches:
|
|
|
29
45
|
```toml
|
|
30
46
|
[mcp_servers.thumbgate]
|
|
31
47
|
command = "npx"
|
|
32
|
-
args = ["--yes", "--package", "thumbgate@1.
|
|
48
|
+
args = ["--yes", "--package", "thumbgate@1.4.0", "thumbgate", "serve"]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Build from source
|
|
52
|
+
|
|
53
|
+
Build the same standalone release bundle locally with:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npm run build:codex-plugin
|
|
33
57
|
```
|
|
34
58
|
|
|
35
59
|
## Why this exists
|
|
36
60
|
|
|
37
|
-
The Codex support story is no longer just "copy this config block."
|
|
61
|
+
The Codex support story is no longer just "copy this config block." ThumbGate now has a direct-download Codex plugin bundle, a repo-local plugin surface, and a pinned manual MCP profile so release assets, install docs, and the runtime stay aligned.
|
|
@@ -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": "1.
|
|
5
|
+
"version": "1.4.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@1.
|
|
28
|
+
"command": ["npx", "--yes", "--package", "thumbgate@1.4.0", "thumbgate", "serve"],
|
|
29
29
|
"enabled": true
|
|
30
30
|
}
|
|
31
31
|
}
|
package/public/blog.html
CHANGED
|
@@ -34,6 +34,12 @@
|
|
|
34
34
|
"url": "https://thumbgate-production.up.railway.app/blog",
|
|
35
35
|
"publisher": { "@type": "Organization", "name": "Max Smith KDP LLC" },
|
|
36
36
|
"blogPost": [
|
|
37
|
+
{
|
|
38
|
+
"@type": "BlogPosting",
|
|
39
|
+
"headline": "Your AI agent is a supply chain attack surface. Here's how to gate it.",
|
|
40
|
+
"datePublished": "2026-04-10",
|
|
41
|
+
"keywords": "AI agent security, supply chain attack, pre-action gates, agent governance, ThumbGate"
|
|
42
|
+
},
|
|
37
43
|
{
|
|
38
44
|
"@type": "BlogPosting",
|
|
39
45
|
"headline": "The Claude Code Leak Proves Why Pre-Action Gates Matter",
|
|
@@ -166,6 +172,73 @@
|
|
|
166
172
|
</header>
|
|
167
173
|
|
|
168
174
|
<div class="container">
|
|
175
|
+
<article class="post">
|
|
176
|
+
<div class="post-date">April 10, 2026</div>
|
|
177
|
+
<h2>Your AI agent is a supply chain attack surface. Here's how to gate it.</h2>
|
|
178
|
+
|
|
179
|
+
<p>
|
|
180
|
+
Your AI coding agent runs shell commands. It installs packages. It
|
|
181
|
+
modifies files, pushes commits, and calls external APIs — all
|
|
182
|
+
without requiring you to type a single character. That's the pitch.
|
|
183
|
+
That's also the attack surface.
|
|
184
|
+
</p>
|
|
185
|
+
|
|
186
|
+
<h3>The gap is pre-action enforcement</h3>
|
|
187
|
+
<p>
|
|
188
|
+
Static analysis catches known-bad patterns in code you've already
|
|
189
|
+
written. Dependency scanners audit lock files <em>after</em> packages
|
|
190
|
+
are installed. By the time your scanner flags a problem, the agent
|
|
191
|
+
already ran the command.
|
|
192
|
+
</p>
|
|
193
|
+
<p>
|
|
194
|
+
These tools operate on the <em>output</em> of agent actions. You need
|
|
195
|
+
something that operates on the <em>input</em> — before execution.
|
|
196
|
+
</p>
|
|
197
|
+
|
|
198
|
+
<h3>Pre-Action Gates via PreToolUse hooks</h3>
|
|
199
|
+
<p>
|
|
200
|
+
ThumbGate implements pre-action gates via <code>PreToolUse</code> hooks
|
|
201
|
+
— interception points that run before every tool invocation. No
|
|
202
|
+
action reaches execution without passing through the gate. Not Bash
|
|
203
|
+
commands, not file edits, not web fetches.
|
|
204
|
+
</p>
|
|
205
|
+
<p>
|
|
206
|
+
What makes this more than a static blocklist is the
|
|
207
|
+
<strong>feedback-to-enforcement pipeline</strong>. When something goes
|
|
208
|
+
wrong, you record a thumbs-down with context. That failure feeds a
|
|
209
|
+
promotion engine. One failure becomes a warning. Three confirmed
|
|
210
|
+
failures of the same pattern become a hard block.
|
|
211
|
+
</p>
|
|
212
|
+
|
|
213
|
+
<h3>Real examples</h3>
|
|
214
|
+
<ul>
|
|
215
|
+
<li>
|
|
216
|
+
<strong>Force-push to main</strong> — Gate fires, push never
|
|
217
|
+
happens. Agent is redirected to create a branch and open a PR.
|
|
218
|
+
</li>
|
|
219
|
+
<li>
|
|
220
|
+
<strong>Unknown dependency install</strong> — Flagged for human
|
|
221
|
+
review. Agent pauses until you approve.
|
|
222
|
+
</li>
|
|
223
|
+
<li>
|
|
224
|
+
<strong>Destructive shell command</strong> — Blocked by a
|
|
225
|
+
prevention rule learned from a prior incident.
|
|
226
|
+
</li>
|
|
227
|
+
</ul>
|
|
228
|
+
|
|
229
|
+
<h3>Five-minute setup</h3>
|
|
230
|
+
<p>
|
|
231
|
+
<code>npx thumbgate init</code> installs the PreToolUse hook and
|
|
232
|
+
generates a starter gate config. Gates are just JSON — commit
|
|
233
|
+
them, review them, share them across your team.
|
|
234
|
+
</p>
|
|
235
|
+
<p>
|
|
236
|
+
<strong>Human judgment leads. AI supports. ThumbGate enforces it.</strong>
|
|
237
|
+
</p>
|
|
238
|
+
|
|
239
|
+
<a class="cta" href="/guide">Full setup guide →</a>
|
|
240
|
+
</article>
|
|
241
|
+
|
|
169
242
|
<article class="post">
|
|
170
243
|
<div class="post-date">April 1, 2026</div>
|
|
171
244
|
<h2>Dual-Signal Feedback: Why "What Failed" Isn't Enough</h2>
|