thumbgate 1.27.8 โ†’ 1.27.10

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.
Files changed (117) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.well-known/llms.txt +1 -2
  3. package/.well-known/mcp/server-card.json +1 -1
  4. package/README.md +4 -2
  5. package/adapters/claude/.mcp.json +2 -2
  6. package/adapters/mcp/server-stdio.js +1 -1
  7. package/adapters/opencode/opencode.json +1 -1
  8. package/bin/cli.js +259 -78
  9. package/config/gate-templates.json +228 -0
  10. package/config/gates/claim-verification.json +18 -0
  11. package/package.json +14 -21
  12. package/public/blog.html +30 -0
  13. package/public/compare/adopt-ai.html +219 -0
  14. package/public/compare/agentix-labs.html +197 -0
  15. package/public/compare/ai-experience-orchestration.html +216 -0
  16. package/public/compare/anthropic-claude-for-legal.html +260 -0
  17. package/public/compare/anthropic-containment.html +280 -0
  18. package/public/compare/arcade.html +175 -0
  19. package/public/compare/arcjet.html +239 -0
  20. package/public/compare/bumblebee.html +307 -0
  21. package/public/compare/claude-code-hooks.html +294 -0
  22. package/public/compare/databricks-unity-ai-gateway.html +215 -0
  23. package/public/compare/fallow.html +351 -0
  24. package/public/compare/heidi.html +233 -0
  25. package/public/compare/mem0.html +342 -0
  26. package/public/compare/oak-and-sparrow-gatekeeper.html +289 -0
  27. package/public/compare/rein.html +236 -0
  28. package/public/compare/sigmashake.html +256 -0
  29. package/public/compare/speclock.html +342 -0
  30. package/public/compare.html +2 -0
  31. package/public/guides/agent-harness-optimization.html +342 -0
  32. package/public/guides/agentic-web-governance.html +406 -0
  33. package/public/guides/ai-agent-governance-sprint.html +415 -0
  34. package/public/guides/ai-agent-pre-action-approval-gates.html +401 -0
  35. package/public/guides/ai-agent-workflow-migration-checklist.html +392 -0
  36. package/public/guides/ai-deployment-readiness.html +415 -0
  37. package/public/guides/ai-mode-ads-agent-governance.html +401 -0
  38. package/public/guides/ai-search-topical-presence.html +342 -0
  39. package/public/guides/autoresearch-agent-safety.html +342 -0
  40. package/public/guides/background-agent-governance.html +358 -0
  41. package/public/guides/best-tools-stop-ai-agents-breaking-production.html +363 -0
  42. package/public/guides/browser-automation-safety.html +342 -0
  43. package/public/guides/chatgpt-ads-trust.html +353 -0
  44. package/public/guides/claude-code-feedback.html +339 -0
  45. package/public/guides/claude-code-prevent-repeated-mistakes.html +161 -0
  46. package/public/guides/claude-code-skills-guardrails.html +343 -0
  47. package/public/guides/claude-desktop.html +356 -0
  48. package/public/guides/code-knowledge-graph-guardrails.html +365 -0
  49. package/public/guides/codex-cli-guardrails.html +339 -0
  50. package/public/guides/cursor-agent-guardrails.html +339 -0
  51. package/public/guides/cursor-prevent-repeated-mistakes.html +161 -0
  52. package/public/guides/database-agent-safety.html +406 -0
  53. package/public/guides/deepseek-v4-runtime-guardrails.html +346 -0
  54. package/public/guides/developer-machine-supply-chain-guardrails.html +358 -0
  55. package/public/guides/gcp-mcp-guardrails.html +147 -0
  56. package/public/guides/gemini-cli-feedback-memory.html +339 -0
  57. package/public/guides/gpt-5-5-model-evaluation.html +358 -0
  58. package/public/guides/internal-ai-engineering-stack-guardrails.html +348 -0
  59. package/public/guides/long-running-agent-context-management.html +346 -0
  60. package/public/guides/mcp-tool-governance.html +401 -0
  61. package/public/guides/multica-thumbgate-setup.html +134 -0
  62. package/public/guides/native-messaging-host-security.html +342 -0
  63. package/public/guides/policy-engine-pre-action-gates.html +346 -0
  64. package/public/guides/pre-action-checks.html +342 -0
  65. package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +342 -0
  66. package/public/guides/prompt-tricks-to-workflow-rules.html +365 -0
  67. package/public/guides/proxy-pointer-rag-guardrails.html +352 -0
  68. package/public/guides/rag-precision-tuning-guardrails.html +352 -0
  69. package/public/guides/reasoning-compression-guardrails.html +346 -0
  70. package/public/guides/relational-knowledge-ai-recommendations.html +342 -0
  71. package/public/guides/roo-code-alternative-cline.html +339 -0
  72. package/public/guides/semantic-programmatic-seo-guardrails.html +352 -0
  73. package/public/guides/seo-agent-skills-guardrails.html +344 -0
  74. package/public/guides/stop-repeated-ai-agent-mistakes.html +342 -0
  75. package/public/index.html +192 -50
  76. package/public/learn/ac-dc-runtime-enforcement.html +277 -0
  77. package/public/learn/agent-harness-pattern.html +181 -0
  78. package/public/learn/agent-identity-connector-governance.html +146 -0
  79. package/public/learn/agent-swarms-shared-gates.html +173 -0
  80. package/public/learn/agentic-enterprise-context-brain.html +117 -0
  81. package/public/learn/agentic-os-team-governance.html +146 -0
  82. package/public/learn/ai-agent-governance.html +158 -0
  83. package/public/learn/ai-agent-persistent-memory.html +211 -0
  84. package/public/learn/anthropomorphic-claim-gates.html +180 -0
  85. package/public/learn/background-agent-control-layer.html +184 -0
  86. package/public/learn/claude-code-goal-with-rubrics.html +205 -0
  87. package/public/learn/codex-role-plugins-need-governance.html +125 -0
  88. package/public/learn/cost-aware-agent-gate-routing.html +173 -0
  89. package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +157 -0
  90. package/public/learn/deterministic-agent-workflows.html +185 -0
  91. package/public/learn/feedback-loop-vs-decision-layer.html +283 -0
  92. package/public/learn/from-prototype-to-production.html +223 -0
  93. package/public/learn/learn.css +51 -0
  94. package/public/learn/mcp-pre-action-checks-explained.html +172 -0
  95. package/public/learn/pretix-stripe-connect-marketplaces.html +161 -0
  96. package/public/learn/regulated-agent-execution-boundary.html +196 -0
  97. package/public/learn/spec-driven-development.html +168 -0
  98. package/public/learn/stop-ai-agent-force-push.html +134 -0
  99. package/public/learn/vibe-coding-safety-net.html +142 -0
  100. package/public/learn.html +34 -50
  101. package/public/numbers.html +2 -2
  102. package/public/pro.html +6 -6
  103. package/scripts/cli-schema.js +10 -22
  104. package/scripts/dashboard-chat.js +1 -2
  105. package/scripts/document-intake.js +49 -1
  106. package/scripts/gemini-embedding-policy.js +1 -2
  107. package/scripts/hook-stop-anti-claim.js +103 -42
  108. package/scripts/hosted-config.js +12 -0
  109. package/scripts/plausible-domain-config.js +1 -3
  110. package/scripts/reddit-browser-notification-watch.js +230 -0
  111. package/scripts/seo-gsd.js +0 -239
  112. package/scripts/tool-registry.js +2 -2
  113. package/scripts/vector-store.js +0 -44
  114. package/scripts/workspace-evolver.js +2 -62
  115. package/src/api/server.js +126 -335
  116. package/adapters/policy-engine/ethicore-guardian-client.js +0 -68
  117. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +0 -260
package/public/index.html CHANGED
@@ -20,7 +20,7 @@ __GOOGLE_SITE_VERIFICATION_META__
20
20
  <meta property="og:image" content="https://thumbgate.ai/og.png">
21
21
  <meta name="twitter:card" content="summary_large_image">
22
22
  <meta name="twitter:image" content="https://thumbgate.ai/og.png">
23
- <meta name="thumbgate-version" content="1.27.8">
23
+ <meta name="thumbgate-version" content="1.27.7">
24
24
  <meta name="keywords" content="ThumbGate, thumbgate, AI agent orchestration, AI experience orchestration, agentic development cycle, AC/DC framework, Guide Generate Verify Solve, agent enforcement layer, save LLM tokens, reduce Claude API cost, reduce OpenAI cost, AI agent token savings, prevent LLM retries, prevent hallucination retries, stop AI token waste, pre-action checks, agent governance, Claude Code, Cursor, Codex, Gemini, Amp, Cline, OpenCode, workflow hardening, context engineering, AI authenticity, brand authenticity AI">
25
25
  <link rel="canonical" href="__APP_ORIGIN__/">
26
26
  <link rel="alternate" type="text/markdown" title="ThumbGate LLM context" href="__APP_ORIGIN__/llm-context.md">
@@ -337,7 +337,7 @@ __GA_BOOTSTRAP__
337
337
  "name": "How does ThumbGate reduce host blast radius for high-risk local runs?",
338
338
  "acceptedAnswer": {
339
339
  "@type": "Answer",
340
- "text": "ThumbGate combines pre-action checks with execution guidance. Workflow Sentinel predicts risky local actions before they execute, and high-risk runs can be routed into Docker Sandboxes instead of running directly on the host. Enterprise workflows also have a signed hosted sandbox lane for isolated automation dispatch."
340
+ "text": "ThumbGate combines pre-action checks with execution guidance. Workflow Sentinel predicts risky local actions before they execute, and high-risk runs can be routed into Docker Sandboxes instead of running directly on the host. Team workflows also have a signed hosted sandbox lane for isolated automation dispatch."
341
341
  }
342
342
  },
343
343
  {
@@ -430,6 +430,32 @@ __GA_BOOTSTRAP__
430
430
  .hero p { font-size: 17px; color: var(--text-muted); max-width: 620px; margin: 0 auto 28px; line-height: 1.6; }
431
431
  .hero-lede { font-size: clamp(18px, 2vw, 21px) !important; max-width: 760px !important; color: var(--text-muted); }
432
432
  .hero-proof-card { max-width: 720px; margin: 0 auto 28px; padding: 20px 22px; border: 1px solid rgba(34,211,238,0.24); border-radius: 8px; background: #090d12; box-shadow: 0 20px 80px rgba(0,0,0,0.35); font-family: var(--mono); text-align: left; }
433
+ .interactive-gate-demo { max-width: 980px; margin: 0 auto 28px; text-align: left; border: 1px solid rgba(34,211,238,0.24); border-radius: 14px; background: linear-gradient(180deg, rgba(17,17,19,0.98) 0%, rgba(10,16,18,0.98) 100%); box-shadow: 0 20px 80px rgba(0,0,0,0.28); overflow: hidden; }
434
+ .interactive-gate-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 18px 20px; border-bottom: 1px solid var(--border); }
435
+ .interactive-gate-head h2 { margin: 0; font-size: clamp(20px, 3vw, 28px); line-height: 1.15; letter-spacing: -0.025em; }
436
+ .interactive-gate-head p { max-width: 480px; margin: 0; font-size: 13px; line-height: 1.5; color: var(--text-muted); text-align: right; }
437
+ .interactive-gate-body { display: grid; grid-template-columns: minmax(210px, 0.9fr) minmax(0, 1.35fr); gap: 0; }
438
+ .action-picker { border-right: 1px solid var(--border); padding: 16px; display: grid; gap: 10px; align-content: start; }
439
+ .action-picker button { width: 100%; text-align: left; border: 1px solid var(--border); border-radius: 8px; background: rgba(10,10,11,0.82); color: var(--text); padding: 12px 14px; font: inherit; cursor: pointer; transition: border-color 0.15s, background 0.15s, transform 0.15s; }
440
+ .action-picker button:hover, .action-picker button:focus-visible { border-color: rgba(34,211,238,0.55); outline: none; transform: translateY(-1px); }
441
+ .action-picker button[aria-pressed="true"] { border-color: rgba(34,211,238,0.72); background: rgba(34,211,238,0.1); }
442
+ .action-picker strong { display: block; font-size: 13px; line-height: 1.25; margin-bottom: 4px; }
443
+ .action-picker span { display: block; color: var(--text-muted); font-size: 12px; line-height: 1.35; }
444
+ .gate-visual { padding: 18px; }
445
+ .gate-flow { display: grid; grid-template-columns: 1fr auto 1fr auto 1fr; align-items: stretch; gap: 10px; margin-bottom: 16px; }
446
+ .gate-node { border: 1px solid var(--border); border-radius: 10px; background: rgba(10,10,11,0.72); padding: 14px; min-height: 112px; }
447
+ .gate-node-label { color: var(--text-muted); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 8px; font-weight: 800; }
448
+ .gate-node-value { font-family: var(--mono); font-size: 13px; line-height: 1.5; color: var(--text); overflow-wrap: anywhere; }
449
+ .gate-node.blocked { border-color: rgba(248,113,113,0.42); background: rgba(248,113,113,0.08); }
450
+ .gate-node.allowed { border-color: rgba(74,222,128,0.42); background: rgba(74,222,128,0.08); }
451
+ .gate-arrow { align-self: center; color: var(--cyan); font-weight: 900; font-size: 20px; }
452
+ .gate-result { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
453
+ .gate-metric { border: 1px solid var(--border); border-radius: 8px; padding: 12px; background: rgba(10,10,11,0.58); }
454
+ .gate-metric span { display: block; color: var(--text-muted); font-size: 11px; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 4px; }
455
+ .gate-metric strong { display: block; color: var(--text); font-size: 16px; }
456
+ .gate-metric.block strong { color: var(--red); }
457
+ .gate-metric.allow strong { color: var(--green); }
458
+ .gate-caption { margin: 12px 0 0; color: var(--text-muted); font-size: 12px; line-height: 1.5; }
433
459
  .terminal-row { padding: 8px 0; font-size: 14px; line-height: 1.45; border-bottom: 1px solid rgba(255,255,255,0.06); }
434
460
  .terminal-row:last-child { border-bottom: 0; }
435
461
  .terminal-row.muted { color: var(--text-muted); }
@@ -703,6 +729,13 @@ __GA_BOOTSTRAP__
703
729
  .team-intake-recovery a { width: 100%; }
704
730
  .team-form { grid-template-columns: 1fr; }
705
731
  .hero { padding: 72px 0 56px; }
732
+ .interactive-gate-head { display: block; }
733
+ .interactive-gate-head p { text-align: left; margin-top: 8px; }
734
+ .interactive-gate-body { grid-template-columns: 1fr; }
735
+ .action-picker { border-right: 0; border-bottom: 1px solid var(--border); }
736
+ .gate-flow { grid-template-columns: 1fr; }
737
+ .gate-arrow { transform: rotate(90deg); justify-self: center; }
738
+ .gate-result { grid-template-columns: 1fr; }
706
739
  .hero-actions { flex-direction: column; }
707
740
  .hero-actions a { width: 100%; }
708
741
  .offer-router { grid-template-columns: 1fr; }
@@ -770,10 +803,70 @@ __GA_BOOTSTRAP__
770
803
  <img src="/media/thumbgate-demo.gif" alt="ThumbGate blocking an AI agent's rm -rf, git push --force, and chmod 777 in real time, while letting safe commands through" style="width:100%;display:block;border-radius:8px;" loading="lazy" />
771
804
  </div>
772
805
 
806
+ <div class="interactive-gate-demo" data-gate-demo aria-label="Interactive ThumbGate pre-action gate simulator">
807
+ <div class="interactive-gate-head">
808
+ <h2>Click an agent action. See the gate fire before execution.</h2>
809
+ <p>This is the part dashboards miss: ThumbGate checks the proposed tool call while it is still only intent, then records the receipt.</p>
810
+ </div>
811
+ <div class="interactive-gate-body">
812
+ <div class="action-picker" role="group" aria-label="Choose an AI agent action to simulate">
813
+ <button type="button" data-demo-action="forcePush" aria-pressed="true">
814
+ <strong>Force-push main</strong>
815
+ <span>Known repeated failure from a thumbs-down</span>
816
+ </button>
817
+ <button type="button" data-demo-action="secretPaste" aria-pressed="false">
818
+ <strong>Paste an API key</strong>
819
+ <span>Public LLM prompt with secret-shaped data</span>
820
+ </button>
821
+ <button type="button" data-demo-action="safeTest" aria-pressed="false">
822
+ <strong>Run tests</strong>
823
+ <span>Safe local verification command</span>
824
+ </button>
825
+ <button type="button" data-demo-action="deployNoProof" aria-pressed="false">
826
+ <strong>Deploy without proof</strong>
827
+ <span>Risky production action missing receipts</span>
828
+ </button>
829
+ </div>
830
+ <div class="gate-visual">
831
+ <div class="gate-flow" aria-live="polite">
832
+ <div class="gate-node">
833
+ <div class="gate-node-label">Agent Intent</div>
834
+ <div class="gate-node-value" data-demo-command>git push --force origin main</div>
835
+ </div>
836
+ <div class="gate-arrow" aria-hidden="true">โ†’</div>
837
+ <div class="gate-node">
838
+ <div class="gate-node-label">PreToolUse Gate</div>
839
+ <div class="gate-node-value" data-demo-rule>Rule: never force-push protected branches</div>
840
+ </div>
841
+ <div class="gate-arrow" aria-hidden="true">โ†’</div>
842
+ <div class="gate-node blocked" data-demo-decision-node>
843
+ <div class="gate-node-label">Decision</div>
844
+ <div class="gate-node-value" data-demo-decision>BLOCK before execution</div>
845
+ </div>
846
+ </div>
847
+ <div class="gate-result">
848
+ <div class="gate-metric block" data-demo-status-card>
849
+ <span>Status</span>
850
+ <strong data-demo-status>Blocked</strong>
851
+ </div>
852
+ <div class="gate-metric">
853
+ <span>Repeat Tokens</span>
854
+ <strong data-demo-tokens>0 spent</strong>
855
+ </div>
856
+ <div class="gate-metric">
857
+ <span>Receipt</span>
858
+ <strong data-demo-receipt>tg_427_force_push</strong>
859
+ </div>
860
+ </div>
861
+ <p class="gate-caption" data-demo-caption>The agent receives a concrete refusal and chooses a safer plan. The audit trail keeps the rule, source feedback, timestamp, and proposed command.</p>
862
+ </div>
863
+ </div>
864
+ </div>
865
+
773
866
  <div class="hero-actions">
774
867
  <a href="/checkout/pro?utm_source=website&utm_medium=hero_cta&utm_campaign=pro_upgrade&cta_id=hero_start_pro&cta_placement=hero&plan_id=pro&landing_path=%2F" data-revenue-cta data-cta-id="hero_start_pro" data-cta-placement="hero" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);try{posthog.capture('hero_pro_checkout_click',{cta:'hero_start_pro',tier:'pro',price:19})}catch(_){}" class="btn-pro-page hero-pro hero-pro-primary">Start Pro โ€” $19/mo</a>
775
- <a href="#workflow-sprint-intake" onclick="try{posthog.capture('hero_sprint_click',{cta:'sprint_intake'})}catch(_){};sendFirstPartyTelemetry('hero_sprint_intake_started',{ctaId:'hero_workflow_sprint',ctaPlacement:'hero',offer:'workflow_sprint'});" class="btn-pro-page hero-pro">Workflow Hardening Sprint โ†’</a>
776
- <a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied โœ“ โ€” paste in your repo'; setTimeout(()=>{this.textContent='Install Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-free btn-install-hero" title="Click to copy: npx thumbgate init">Install Free CLI</a>
868
+ <a href="#workflow-sprint-intake" onclick="try{posthog.capture('hero_sprint_click',{cta:'sprint_intake'})}catch(_){};sendFirstPartyTelemetry('hero_sprint_intake_started',{ctaId:'hero_workflow_sprint',ctaPlacement:'hero',offer:'workflow_sprint'});" class="btn-pro-page hero-pro">Send workflow first</a>
869
+ <a href="/go/install?utm_source=website&utm_medium=hero_cta&utm_campaign=install_free&cta_id=hero_install_cli&cta_placement=hero" onclick="event.preventDefault(); navigator.clipboard.writeText('npx thumbgate init'); this.textContent='Copied โœ“ โ€” paste in your repo'; setTimeout(()=>{this.textContent='Copy Free CLI'},2000); try{posthog.capture('hero_install_click',{cta:'install_cli'})}catch(_){}" class="btn-free btn-install-hero" title="Click to copy: npx thumbgate init">Copy Free CLI</a>
777
870
  </div>
778
871
 
779
872
  <div class="offer-router" aria-label="Choose the right ThumbGate path">
@@ -783,7 +876,7 @@ __GA_BOOTSTRAP__
783
876
  <a href="/checkout/pro?utm_source=website&utm_medium=offer_router&cta_id=router_start_pro&cta_placement=offer_router&plan_id=pro" data-revenue-cta data-cta-id="router_start_pro" data-cta-placement="offer_router" data-tier="pro" data-plan-id="pro" data-price="19" onclick="trackRevenueCta(this);">Pay $19/mo with Stripe โ†’</a>
784
877
  </div>
785
878
  <div class="offer-route">
786
- <strong>Enterprise workflow: Start with intake</strong>
879
+ <strong>Team workflow: Start with intake</strong>
787
880
  <p>One repeated failure, one owner, one proof plan.</p>
788
881
  <a href="#workflow-sprint-intake" onclick="sendFirstPartyTelemetry('workflow_sprint_intake_started',{ctaId:'router_workflow_sprint',ctaPlacement:'offer_router',offer:'workflow_sprint'});">Talk to us โ†’</a>
789
882
  </div>
@@ -1094,21 +1187,6 @@ __GA_BOOTSTRAP__
1094
1187
  <p>Claude Code, Codex, Gemini CLI, Amp, and OpenCode all use the same gateway and memory model. Any MCP-compatible agent gets pre-action checks, feedback memory, and enforcement out of the box.</p>
1095
1188
  <div class="card-arrow">Open the setup guide โ†’</div>
1096
1189
  </a>
1097
- <a class="compat-card seo-card" href="/guides/hermes-agent-guardrails" rel="noopener">
1098
- <h3>โ˜ค Hermes Agent guardrails</h3>
1099
- <p>Hermes-style agents bring persistent memory, generated skills, messaging gateways, scheduled automations, and sandboxed execution. ThumbGate adds the safer self-evolution loop: propose rule and skill changes from failures, then gate them with evidence before anything overwrites stable instructions or repeats an expensive action.</p>
1100
- <div class="card-arrow">Read the Hermes guardrails guide โ†’</div>
1101
- </a>
1102
- <a class="compat-card seo-card" href="/guides/vllm-serving-guardrails" rel="noopener">
1103
- <h3>vLLM serving guardrails</h3>
1104
- <p>vLLM makes self-hosted inference cheaper and faster with PagedAttention, continuous batching, chunked prefill, prefix caching, and optimized kernels. ThumbGate gates the routing change with latency, cache-isolation, benchmark, and rollback proof before agent traffic moves.</p>
1105
- <div class="card-arrow">Read the vLLM guardrails guide โ†’</div>
1106
- </a>
1107
- <a class="compat-card seo-card" href="/guides/agent-context-governance" rel="noopener">
1108
- <h3>Context and tool governance</h3>
1109
- <p>Long-running agents need cleaner working context, approved model routes, isolated execution, tool lockdown, direct pushback, and evidence before high-risk actions. ThumbGate turns those controls into local pre-action gates.</p>
1110
- <div class="card-arrow">Read the context governance guide โ†’</div>
1111
- </a>
1112
1190
  <a class="compat-card seo-card" href="/guides/gcp-mcp-guardrails" rel="noopener">
1113
1191
  <h3>โ˜๏ธ Google Data Agent Kit</h3>
1114
1192
  <p>Cloud Next 2026 shipped BigQuery, Spanner, AlloyDB, and Cloud SQL as MCP tool calls into Claude Code, Codex, and Gemini CLI. ThumbGate checks the destructive ones โ€” DROP on prod datasets, unscoped DELETEs, IAM escalation โ€” before they fire.</p>
@@ -1159,7 +1237,7 @@ __GA_BOOTSTRAP__
1159
1237
  <p>Every block explains why: which pattern matched, what evidence triggered it, and whether the rule came from your own corrections.</p>
1160
1238
  </div>
1161
1239
  <div class="agent-card">
1162
- <h3>๐Ÿ“Š Org Dashboard</h3>
1240
+ <h3>๐Ÿ“Š Org Dashboard (Team)</h3>
1163
1241
  <p>See which agents are creating review churn, which checks are saving time, and where rollout risk is still concentrated across the shared workflow.</p>
1164
1242
  </div>
1165
1243
  <div class="agent-card">
@@ -1182,28 +1260,6 @@ __GA_BOOTSTRAP__
1182
1260
  </div>
1183
1261
  </section>
1184
1262
 
1185
- <section class="compatibility" id="governance-not-logging">
1186
- <div class="container">
1187
- <div class="section-label">Governance, Not Logging</div>
1188
- <h2 class="section-title">Logs describe the damage. ThumbGate blocks the risky action before it runs.</h2>
1189
- <p style="color:var(--text-dim);max-width:820px;margin:0 auto 22px;">Self-governance is an operator writing local rules and keeping local logs. ThumbGate starts there, then turns each correction into a pre-action decision: allow, block, require evidence, or route for approval before the tool call touches code, data, money, or customers.</p>
1190
- <div class="agent-grid">
1191
- <div class="agent-card">
1192
- <h3>Pre-action enforcement</h3>
1193
- <p>The rule is evaluated at the execution boundary, not after the fact. Repeated failures are stopped before shell commands, PR actions, deploys, refunds, or production writes run.</p>
1194
- </div>
1195
- <div class="agent-card">
1196
- <h3>Reviewable decision trail</h3>
1197
- <p>Each event records the rule, source lesson, policy version, actor, action, evidence requirement, and reason so reviewers can inspect the decision instead of trusting an agent summary.</p>
1198
- </div>
1199
- <div class="agent-card">
1200
- <h3>Enterprise governance mode</h3>
1201
- <p>Org-owned policies, reviewer approvals, signed evidence bundles, and export paths turn local corrections into shared controls without giving the agent unilateral authority over the rules.</p>
1202
- </div>
1203
- </div>
1204
- </div>
1205
- </section>
1206
-
1207
1263
  <section class="compatibility" id="orchestration-layer">
1208
1264
  <div class="container">
1209
1265
  <div class="section-label">Positioning</div>
@@ -1289,7 +1345,7 @@ __GA_BOOTSTRAP__
1289
1345
  </div>
1290
1346
  <div class="autoresearch-card">
1291
1347
  <h3>Ship into CI</h3>
1292
- <p>Start with templates for <code>npm test</code>, Playwright duration, bundle size, lint, and CI failures, then add shared workflow checks for team-owned releases.</p>
1348
+ <p>Start with templates for <code>npm test</code>, Playwright duration, bundle size, lint, and CI failures, then add Team checks for shared workflows.</p>
1293
1349
  </div>
1294
1350
  </div>
1295
1351
  <div class="autoresearch-cta">
@@ -1325,9 +1381,8 @@ __GA_BOOTSTRAP__
1325
1381
  <!-- HOW IT WORKS -->
1326
1382
  <section class="how-it-works" id="how-it-works">
1327
1383
  <div class="container">
1328
- <div class="section-label">Self-improving enforcement</div>
1384
+ <div class="section-label">Current release</div>
1329
1385
  <h2 class="section-title">Three steps to stop repeated AI failures</h2>
1330
- <p class="section-sub" style="max-width:720px;margin:6px auto 22px;text-align:center;color:var(--text-muted);font-size:clamp(16px,1.6vw,18px);">Self-improving โ€” but for safety, not capability: every <code>๐Ÿ‘Ž</code> compiles into a hard rule, and each rule regression-tests itself against your history, so it blocks the repeat and never the safe action.</p>
1331
1386
  <div class="steps">
1332
1387
  <div class="step">
1333
1388
  <div class="step-num">1</div>
@@ -1532,7 +1587,7 @@ __GA_BOOTSTRAP__
1532
1587
  <li><strong>Audit-ready enforcement proof</strong> โ€” Personal local dashboard for the individual operator with auditable block history</li>
1533
1588
  <li><strong>Ship hardened agents to production</strong> โ€” Model Hardening Advisor plus HuggingFace dataset export</li>
1534
1589
  <li><strong>Hand a PR with proof</strong> โ€” Review-ready workflow support and proof-ready lesson bundles a reviewer can verify in 30 seconds</li>
1535
- <li><strong>Hand off without re-onboarding</strong> โ€” Lesson export/import for handoff or migration</li>
1590
+ <li><strong>Hand off without re-onboarding</strong> โ€” Team lesson export/import for handoff or migration</li>
1536
1591
  </ul>
1537
1592
  <div style="margin:12px 0 16px;padding:12px;border:1px solid rgba(34,211,238,0.25);border-radius:8px;background:rgba(34,211,238,0.06);">
1538
1593
  <div style="font-size:12px;color:var(--text-muted);margin-bottom:4px;">What your Pro dashboard looks like</div>
@@ -1710,7 +1765,7 @@ __GA_BOOTSTRAP__
1710
1765
  </div>
1711
1766
  <div class="faq-item">
1712
1767
  <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>
1713
- <div class="faq-a">ThumbGate is the control plane, not just a prompt layer. Workflow Sentinel predicts blast radius before execution, and risky local autonomy can be routed into Docker Sandboxes instead of running directly on the host. Enterprise workflows also have a signed hosted sandbox lane for isolated dispatch when local repo access is not required.</div>
1768
+ <div class="faq-a">ThumbGate is the control plane, not just a prompt layer. Workflow Sentinel predicts blast radius before execution, and risky local autonomy can be routed into Docker Sandboxes instead of running directly on the host. Team workflows also have a signed hosted sandbox lane for isolated dispatch when local repo access is not required.</div>
1714
1769
  </div>
1715
1770
  <div class="faq-item">
1716
1771
  <div class="faq-q" role="button" tabindex="0" aria-expanded="false" onclick="toggleFaq(this)" onkeydown="handleFaqKeydown(event)">How do we trust a new package release?</div>
@@ -1794,7 +1849,7 @@ __GA_BOOTSTRAP__
1794
1849
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1795
1850
  <a href="/blog">Blog</a>
1796
1851
  </div>
1797
- <span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.27.8</span>
1852
+ <span class="footer-copy">ยฉ 2026 ThumbGate ยท MIT License ยท npm v1.27.7</span>
1798
1853
  </div>
1799
1854
  </footer>
1800
1855
 
@@ -1990,6 +2045,93 @@ function copyInstall(el) {
1990
2045
  });
1991
2046
  }
1992
2047
 
2048
+ function initializeGateDemo() {
2049
+ var root = document.querySelector('[data-gate-demo]');
2050
+ if (!root) return;
2051
+ var scenarios = {
2052
+ forcePush: {
2053
+ command: 'git push --force origin main',
2054
+ rule: 'Rule: never force-push protected branches',
2055
+ decision: 'BLOCK before execution',
2056
+ status: 'Blocked',
2057
+ statusClass: 'block',
2058
+ nodeClass: 'blocked',
2059
+ tokens: '0 spent',
2060
+ receipt: 'tg_427_force_push',
2061
+ caption: 'The agent receives a concrete refusal and chooses a safer plan. The audit trail keeps the rule, source feedback, timestamp, and proposed command.'
2062
+ },
2063
+ secretPaste: {
2064
+ command: 'paste STRIPE_SECRET_KEY into a public LLM prompt',
2065
+ rule: 'Rule: sanitize secrets before external AI tools',
2066
+ decision: 'BLOCK before data leaves the machine',
2067
+ status: 'Blocked',
2068
+ statusClass: 'block',
2069
+ nodeClass: 'blocked',
2070
+ tokens: '0 spent',
2071
+ receipt: 'tg_618_secret_prompt',
2072
+ caption: 'ThumbGate treats public prompt submission as an external action. Redact, tokenize, or route through a private endpoint before retrying.'
2073
+ },
2074
+ safeTest: {
2075
+ command: 'npm test -- --runInBand',
2076
+ rule: 'Rule: local verification is allowed',
2077
+ decision: 'ALLOW and log receipt',
2078
+ status: 'Allowed',
2079
+ statusClass: 'allow',
2080
+ nodeClass: 'allowed',
2081
+ tokens: 'normal',
2082
+ receipt: 'tg_102_test_ok',
2083
+ caption: 'Safe verification commands keep moving. ThumbGate records the action so later claims can cite what actually ran.'
2084
+ },
2085
+ deployNoProof: {
2086
+ command: 'railway deploy --production',
2087
+ rule: 'Rule: production deploy requires test, rollback, owner',
2088
+ decision: 'PAUSE for proof before execution',
2089
+ status: 'Needs proof',
2090
+ statusClass: 'block',
2091
+ nodeClass: 'blocked',
2092
+ tokens: 'retry avoided',
2093
+ receipt: 'tg_511_deploy_gate',
2094
+ caption: 'The deploy is not rejected forever; it is held until the agent shows the proof packet: tests, rollback path, owner, and target environment.'
2095
+ }
2096
+ };
2097
+ var fields = {
2098
+ command: root.querySelector('[data-demo-command]'),
2099
+ rule: root.querySelector('[data-demo-rule]'),
2100
+ decision: root.querySelector('[data-demo-decision]'),
2101
+ decisionNode: root.querySelector('[data-demo-decision-node]'),
2102
+ statusCard: root.querySelector('[data-demo-status-card]'),
2103
+ status: root.querySelector('[data-demo-status]'),
2104
+ tokens: root.querySelector('[data-demo-tokens]'),
2105
+ receipt: root.querySelector('[data-demo-receipt]'),
2106
+ caption: root.querySelector('[data-demo-caption]')
2107
+ };
2108
+ function render(key) {
2109
+ var next = scenarios[key] || scenarios.forcePush;
2110
+ fields.command.textContent = next.command;
2111
+ fields.rule.textContent = next.rule;
2112
+ fields.decision.textContent = next.decision;
2113
+ fields.status.textContent = next.status;
2114
+ fields.tokens.textContent = next.tokens;
2115
+ fields.receipt.textContent = next.receipt;
2116
+ fields.caption.textContent = next.caption;
2117
+ fields.decisionNode.classList.remove('blocked', 'allowed');
2118
+ fields.decisionNode.classList.add(next.nodeClass);
2119
+ fields.statusCard.classList.remove('block', 'allow');
2120
+ fields.statusCard.classList.add(next.statusClass);
2121
+ root.querySelectorAll('[data-demo-action]').forEach(function(button) {
2122
+ button.setAttribute('aria-pressed', button.getAttribute('data-demo-action') === key ? 'true' : 'false');
2123
+ });
2124
+ if (typeof plausible === 'function') plausible('interactive_gate_demo', { props: { scenario: key, status: next.status } });
2125
+ }
2126
+ root.querySelectorAll('[data-demo-action]').forEach(function(button) {
2127
+ button.addEventListener('click', function() {
2128
+ render(button.getAttribute('data-demo-action'));
2129
+ });
2130
+ });
2131
+ }
2132
+
2133
+ initializeGateDemo();
2134
+
1993
2135
  /* โ”€โ”€ Plausible custom event tracking โ”€โ”€ */
1994
2136
  (function() {
1995
2137
 
@@ -2039,7 +2181,7 @@ function copyInstall(el) {
2039
2181
  trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
2040
2182
  trackClick('.nav-cta:not([data-revenue-cta])', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
2041
2183
 
2042
- /* Pricing CTA conversion tracking โ€” fires on every Get Started / Pro / Enterprise button click
2184
+ /* Pricing CTA conversion tracking โ€” fires on every Get Started / Pro / Team button click
2043
2185
  with section context so we can distinguish pricing section vs final CTA section clicks */
2044
2186
  document.querySelectorAll('.btn-pro, .btn-gpt-page, .btn-pro-page, .btn-install-hero, .btn-install-link, .btn-team, .btn-free, .btn-demo-link, .nav-cta').forEach(function(el) {
2045
2187
  el.addEventListener('click', function() {