thumbgate 1.27.8 → 1.27.9

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 (112) 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 +0 -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/package.json +12 -19
  10. package/public/blog.html +30 -0
  11. package/public/compare/adopt-ai.html +219 -0
  12. package/public/compare/agentix-labs.html +197 -0
  13. package/public/compare/ai-experience-orchestration.html +216 -0
  14. package/public/compare/anthropic-claude-for-legal.html +260 -0
  15. package/public/compare/anthropic-containment.html +280 -0
  16. package/public/compare/arcade.html +175 -0
  17. package/public/compare/arcjet.html +239 -0
  18. package/public/compare/bumblebee.html +307 -0
  19. package/public/compare/claude-code-hooks.html +294 -0
  20. package/public/compare/databricks-unity-ai-gateway.html +215 -0
  21. package/public/compare/fallow.html +351 -0
  22. package/public/compare/heidi.html +233 -0
  23. package/public/compare/mem0.html +342 -0
  24. package/public/compare/oak-and-sparrow-gatekeeper.html +289 -0
  25. package/public/compare/rein.html +236 -0
  26. package/public/compare/sigmashake.html +256 -0
  27. package/public/compare/speclock.html +342 -0
  28. package/public/compare.html +2 -0
  29. package/public/guides/agent-harness-optimization.html +342 -0
  30. package/public/guides/agentic-web-governance.html +406 -0
  31. package/public/guides/ai-agent-governance-sprint.html +415 -0
  32. package/public/guides/ai-agent-pre-action-approval-gates.html +401 -0
  33. package/public/guides/ai-agent-workflow-migration-checklist.html +392 -0
  34. package/public/guides/ai-deployment-readiness.html +415 -0
  35. package/public/guides/ai-mode-ads-agent-governance.html +401 -0
  36. package/public/guides/ai-search-topical-presence.html +342 -0
  37. package/public/guides/autoresearch-agent-safety.html +342 -0
  38. package/public/guides/background-agent-governance.html +358 -0
  39. package/public/guides/best-tools-stop-ai-agents-breaking-production.html +363 -0
  40. package/public/guides/browser-automation-safety.html +342 -0
  41. package/public/guides/chatgpt-ads-trust.html +353 -0
  42. package/public/guides/claude-code-feedback.html +339 -0
  43. package/public/guides/claude-code-prevent-repeated-mistakes.html +161 -0
  44. package/public/guides/claude-code-skills-guardrails.html +343 -0
  45. package/public/guides/claude-desktop.html +356 -0
  46. package/public/guides/code-knowledge-graph-guardrails.html +365 -0
  47. package/public/guides/codex-cli-guardrails.html +339 -0
  48. package/public/guides/cursor-agent-guardrails.html +339 -0
  49. package/public/guides/cursor-prevent-repeated-mistakes.html +161 -0
  50. package/public/guides/database-agent-safety.html +406 -0
  51. package/public/guides/deepseek-v4-runtime-guardrails.html +346 -0
  52. package/public/guides/developer-machine-supply-chain-guardrails.html +358 -0
  53. package/public/guides/gcp-mcp-guardrails.html +147 -0
  54. package/public/guides/gemini-cli-feedback-memory.html +339 -0
  55. package/public/guides/gpt-5-5-model-evaluation.html +358 -0
  56. package/public/guides/internal-ai-engineering-stack-guardrails.html +348 -0
  57. package/public/guides/long-running-agent-context-management.html +346 -0
  58. package/public/guides/mcp-tool-governance.html +401 -0
  59. package/public/guides/multica-thumbgate-setup.html +134 -0
  60. package/public/guides/native-messaging-host-security.html +342 -0
  61. package/public/guides/policy-engine-pre-action-gates.html +346 -0
  62. package/public/guides/pre-action-checks.html +342 -0
  63. package/public/guides/pretooluse-hooks-vs-advisory-prompt-rules.html +342 -0
  64. package/public/guides/prompt-tricks-to-workflow-rules.html +365 -0
  65. package/public/guides/proxy-pointer-rag-guardrails.html +352 -0
  66. package/public/guides/rag-precision-tuning-guardrails.html +352 -0
  67. package/public/guides/reasoning-compression-guardrails.html +346 -0
  68. package/public/guides/relational-knowledge-ai-recommendations.html +342 -0
  69. package/public/guides/roo-code-alternative-cline.html +339 -0
  70. package/public/guides/semantic-programmatic-seo-guardrails.html +352 -0
  71. package/public/guides/seo-agent-skills-guardrails.html +344 -0
  72. package/public/guides/stop-repeated-ai-agent-mistakes.html +342 -0
  73. package/public/index.html +12 -50
  74. package/public/learn/ac-dc-runtime-enforcement.html +277 -0
  75. package/public/learn/agent-harness-pattern.html +181 -0
  76. package/public/learn/agent-swarms-shared-gates.html +173 -0
  77. package/public/learn/agentic-enterprise-context-brain.html +117 -0
  78. package/public/learn/agentic-os-team-governance.html +146 -0
  79. package/public/learn/ai-agent-governance.html +158 -0
  80. package/public/learn/ai-agent-persistent-memory.html +211 -0
  81. package/public/learn/background-agent-control-layer.html +184 -0
  82. package/public/learn/claude-code-goal-with-rubrics.html +205 -0
  83. package/public/learn/codex-role-plugins-need-governance.html +125 -0
  84. package/public/learn/cost-aware-agent-gate-routing.html +173 -0
  85. package/public/learn/databricks-unity-ai-gateway-runtime-governance.html +157 -0
  86. package/public/learn/deterministic-agent-workflows.html +185 -0
  87. package/public/learn/feedback-loop-vs-decision-layer.html +283 -0
  88. package/public/learn/from-prototype-to-production.html +223 -0
  89. package/public/learn/learn.css +51 -0
  90. package/public/learn/mcp-pre-action-checks-explained.html +172 -0
  91. package/public/learn/pretix-stripe-connect-marketplaces.html +161 -0
  92. package/public/learn/regulated-agent-execution-boundary.html +196 -0
  93. package/public/learn/spec-driven-development.html +168 -0
  94. package/public/learn/stop-ai-agent-force-push.html +134 -0
  95. package/public/learn/vibe-coding-safety-net.html +142 -0
  96. package/public/learn.html +6 -50
  97. package/public/numbers.html +2 -2
  98. package/public/pro.html +6 -6
  99. package/scripts/cli-schema.js +10 -22
  100. package/scripts/dashboard-chat.js +1 -2
  101. package/scripts/document-intake.js +49 -1
  102. package/scripts/gemini-embedding-policy.js +1 -2
  103. package/scripts/hosted-config.js +12 -0
  104. package/scripts/plausible-domain-config.js +1 -3
  105. package/scripts/reddit-browser-notification-watch.js +230 -0
  106. package/scripts/seo-gsd.js +0 -239
  107. package/scripts/vector-store.js +0 -44
  108. package/scripts/workspace-evolver.js +2 -62
  109. package/src/api/server.js +124 -335
  110. package/adapters/policy-engine/ethicore-guardian-client.js +0 -68
  111. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +0 -260
  112. package/scripts/hook-stop-anti-claim.js +0 -227
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
  {
@@ -772,8 +772,8 @@ __GA_BOOTSTRAP__
772
772
 
773
773
  <div class="hero-actions">
774
774
  <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>
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">Send workflow first</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='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
777
  </div>
778
778
 
779
779
  <div class="offer-router" aria-label="Choose the right ThumbGate path">
@@ -783,7 +783,7 @@ __GA_BOOTSTRAP__
783
783
  <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
784
  </div>
785
785
  <div class="offer-route">
786
- <strong>Enterprise workflow: Start with intake</strong>
786
+ <strong>Team workflow: Start with intake</strong>
787
787
  <p>One repeated failure, one owner, one proof plan.</p>
788
788
  <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
789
  </div>
@@ -1094,21 +1094,6 @@ __GA_BOOTSTRAP__
1094
1094
  <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
1095
  <div class="card-arrow">Open the setup guide →</div>
1096
1096
  </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
1097
  <a class="compat-card seo-card" href="/guides/gcp-mcp-guardrails" rel="noopener">
1113
1098
  <h3>☁️ Google Data Agent Kit</h3>
1114
1099
  <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 +1144,7 @@ __GA_BOOTSTRAP__
1159
1144
  <p>Every block explains why: which pattern matched, what evidence triggered it, and whether the rule came from your own corrections.</p>
1160
1145
  </div>
1161
1146
  <div class="agent-card">
1162
- <h3>📊 Org Dashboard</h3>
1147
+ <h3>📊 Org Dashboard (Team)</h3>
1163
1148
  <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
1149
  </div>
1165
1150
  <div class="agent-card">
@@ -1182,28 +1167,6 @@ __GA_BOOTSTRAP__
1182
1167
  </div>
1183
1168
  </section>
1184
1169
 
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
1170
  <section class="compatibility" id="orchestration-layer">
1208
1171
  <div class="container">
1209
1172
  <div class="section-label">Positioning</div>
@@ -1289,7 +1252,7 @@ __GA_BOOTSTRAP__
1289
1252
  </div>
1290
1253
  <div class="autoresearch-card">
1291
1254
  <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>
1255
+ <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
1256
  </div>
1294
1257
  </div>
1295
1258
  <div class="autoresearch-cta">
@@ -1325,9 +1288,8 @@ __GA_BOOTSTRAP__
1325
1288
  <!-- HOW IT WORKS -->
1326
1289
  <section class="how-it-works" id="how-it-works">
1327
1290
  <div class="container">
1328
- <div class="section-label">Self-improving enforcement</div>
1291
+ <div class="section-label">Current release</div>
1329
1292
  <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
1293
  <div class="steps">
1332
1294
  <div class="step">
1333
1295
  <div class="step-num">1</div>
@@ -1532,7 +1494,7 @@ __GA_BOOTSTRAP__
1532
1494
  <li><strong>Audit-ready enforcement proof</strong> — Personal local dashboard for the individual operator with auditable block history</li>
1533
1495
  <li><strong>Ship hardened agents to production</strong> — Model Hardening Advisor plus HuggingFace dataset export</li>
1534
1496
  <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>
1497
+ <li><strong>Hand off without re-onboarding</strong> — Team lesson export/import for handoff or migration</li>
1536
1498
  </ul>
1537
1499
  <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
1500
  <div style="font-size:12px;color:var(--text-muted);margin-bottom:4px;">What your Pro dashboard looks like</div>
@@ -1710,7 +1672,7 @@ __GA_BOOTSTRAP__
1710
1672
  </div>
1711
1673
  <div class="faq-item">
1712
1674
  <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>
1675
+ <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
1676
  </div>
1715
1677
  <div class="faq-item">
1716
1678
  <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 +1756,7 @@ __GA_BOOTSTRAP__
1794
1756
  <a href="https://www.linkedin.com/in/igorganapolsky" target="_blank" rel="noopener">LinkedIn</a>
1795
1757
  <a href="/blog">Blog</a>
1796
1758
  </div>
1797
- <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.27.8</span>
1759
+ <span class="footer-copy">© 2026 ThumbGate · MIT License · npm v1.27.7</span>
1798
1760
  </div>
1799
1761
  </footer>
1800
1762
 
@@ -2039,7 +2001,7 @@ function copyInstall(el) {
2039
2001
  trackClick('.btn-demo-link', 'demo_click', { source: 'homepage' });
2040
2002
  trackClick('.nav-cta:not([data-revenue-cta])', 'chatgpt_gpt_click', { tier: 'free', source: 'nav' });
2041
2003
 
2042
- /* Pricing CTA conversion tracking — fires on every Get Started / Pro / Enterprise button click
2004
+ /* Pricing CTA conversion tracking — fires on every Get Started / Pro / Team button click
2043
2005
  with section context so we can distinguish pricing section vs final CTA section clicks */
2044
2006
  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
2007
  el.addEventListener('click', function() {
@@ -0,0 +1,277 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>AC/DC governs the code agents write. Runtime enforcement governs what agents do. - ThumbGate</title>
7
+ <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
8
+ <meta name="description" content="Sonar's Agent Centric Development Cycle (AC/DC) defines Guide → Generate → Verify → Solve for code-quality. It has no Pre-Execution Gate. Here is where runtime enforcement plugs into AC/DC, with a worked map for each stage.">
9
+ <meta name="keywords" content="AC/DC framework, Agent Centric Development Cycle, AI coding agent governance, PreToolUse runtime enforcement, agentic SDLC, Sonar AC/DC, ThumbGate">
10
+ <meta property="og:title" content="AC/DC + Runtime Enforcement: Closing the Pre-Execution Gap">
11
+ <meta property="og:description" content="Sonar's AC/DC governs what agents WRITE. Runtime enforcement at PreToolUse governs what agents DO. The two compose — but only one of them stops rm -rf / DROP TABLE / unauthorized MCP calls before they happen.">
12
+ <meta property="og:type" content="article">
13
+ <meta property="og:url" content="https://thumbgate.ai/learn/ac-dc-runtime-enforcement">
14
+ <link rel="canonical" href="https://thumbgate.ai/learn/ac-dc-runtime-enforcement">
15
+ <link rel="stylesheet" href="/learn/learn.css">
16
+ <script type="application/ld+json">
17
+ {
18
+ "@context": "https://schema.org",
19
+ "@type": "TechArticle",
20
+ "headline": "AC/DC governs the code agents write. Runtime enforcement governs what agents do.",
21
+ "description": "Sonar's Agent Centric Development Cycle (AC/DC) framework — Guide, Generate, Verify, Solve — is a code-quality lifecycle. Its Verify stage operates on generated code. Many of the highest-blast-radius agent failures (destructive shell commands, unauthorized MCP calls, secret exfiltration) never become code that Verify can inspect. They happen between Generate and the next Guide as runtime actions. This article maps each AC/DC stage to the runtime-enforcement layer that closes the pre-execution gap.",
22
+ "author": {
23
+ "@type": "Person",
24
+ "name": "Igor Ganapolsky",
25
+ "url": "https://github.com/IgorGanapolsky"
26
+ },
27
+ "publisher": {
28
+ "@type": "Organization",
29
+ "name": "ThumbGate",
30
+ "url": "https://thumbgate.ai"
31
+ },
32
+ "datePublished": "2026-05-27",
33
+ "dateModified": "2026-05-27",
34
+ "mainEntityOfPage": "https://thumbgate.ai/learn/ac-dc-runtime-enforcement",
35
+ "citation": [
36
+ "https://www.sonarsource.com/blog/the-future-is-ac-dc-the-agent-centric-development-cycle",
37
+ "https://thenewstack.io/agentic-development-cycle-framework/"
38
+ ],
39
+ "about": [
40
+ { "@type": "Thing", "name": "AC/DC framework" },
41
+ { "@type": "Thing", "name": "Agent Centric Development Cycle" },
42
+ { "@type": "Thing", "name": "agentic SDLC governance" },
43
+ { "@type": "Thing", "name": "PreToolUse runtime enforcement" }
44
+ ]
45
+ }
46
+ </script>
47
+ <script type="application/ld+json">
48
+ {
49
+ "@context": "https://schema.org",
50
+ "@type": "FAQPage",
51
+ "mainEntity": [
52
+ {
53
+ "@type": "Question",
54
+ "name": "What is the AC/DC framework?",
55
+ "acceptedAnswer": {
56
+ "@type": "Answer",
57
+ "text": "AC/DC stands for Agent Centric Development Cycle. It is a four-stage governance framework published by Sonar (the company behind SonarCloud and SonarQube) for teams running AI coding agents. The stages are Guide (hand the agent your standards, architecture, and constraints before it writes code), Generate (the LLM writes code), Verify (mandatory verification of the generated code, primarily through static analysis), and Solve (fix the issues Verify surfaces). Each stage feeds the next, and outputs from Verify and Solve loop back into Guide so future iterations improve. AC/DC is a code-quality lifecycle for agentic development."
58
+ }
59
+ },
60
+ {
61
+ "@type": "Question",
62
+ "name": "Does AC/DC cover runtime safety?",
63
+ "acceptedAnswer": {
64
+ "@type": "Answer",
65
+ "text": "Not directly. AC/DC's Verify stage inspects generated code — typically after the agent has produced a diff or pull request. Many of the highest-blast-radius agent failures never become code that Verify can inspect. A destructive shell command like rm -rf, a DROP TABLE against the wrong database, a git push --force to main, a leaked environment variable through an MCP tool call, or an outbound LLM call to an unauthorized endpoint all happen between Generate and the next Guide loop as runtime actions. They produce no committed source code. Runtime enforcement at the PreToolUse hook is the layer that catches them before execution."
66
+ }
67
+ },
68
+ {
69
+ "@type": "Question",
70
+ "name": "Does runtime enforcement replace AC/DC's Verify stage?",
71
+ "acceptedAnswer": {
72
+ "@type": "Answer",
73
+ "text": "No. They cover different surfaces and compose cleanly. AC/DC's Verify stage catches problems in committed code. Runtime enforcement catches problems in proposed tool calls before the tool fires. A correct deployment of both means: PreToolUse hooks block destructive or unauthorized actions before execution, Verify catches quality and security issues in the code the agent did write, and Solve fixes what Verify surfaces. The two layers add up to coverage of both the action surface and the code surface."
74
+ }
75
+ },
76
+ {
77
+ "@type": "Question",
78
+ "name": "Where does ThumbGate fit into AC/DC?",
79
+ "acceptedAnswer": {
80
+ "@type": "Answer",
81
+ "text": "ThumbGate fits at two AC/DC stages. At Guide, ThumbGate's prevention-rules.md and context packs hand the agent local, learned constraints before it writes code — generated from prior failures captured by feedback hooks. At Verify, ThumbGate adds a runtime-action verification layer that operates on the tool call the agent is about to make, not on the code it already wrote. This closes the pre-execution gap between Generate and the next Guide iteration that pure-static Verify cannot reach."
82
+ }
83
+ },
84
+ {
85
+ "@type": "Question",
86
+ "name": "Is Sonar a ThumbGate competitor?",
87
+ "acceptedAnswer": {
88
+ "@type": "Answer",
89
+ "text": "No. Sonar runs at the code-quality layer (static analysis of committed code, security hotspots, coverage, duplications). ThumbGate runs at the runtime-action layer (PreToolUse hooks in Claude Code, Cursor, Codex CLI, Gemini CLI, Amp, Cline, OpenCode, Claude Desktop). The two layers are complementary. Regulated teams already running Sonar can keep Sonar at Verify-of-code and add ThumbGate at Verify-of-action to close the runtime gap AC/DC does not explicitly name."
90
+ }
91
+ }
92
+ ]
93
+ }
94
+ </script>
95
+ <style>
96
+ table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
97
+ th, td { text-align: left; padding: 0.7rem 0.8rem; border-bottom: 1px solid var(--border); vertical-align: top; font-size: 0.92rem; }
98
+ th { color: var(--cyan); font-weight: 700; }
99
+ .layer strong { color: var(--green); }
100
+ .mini-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; margin: 1.25rem 0; }
101
+ .mini-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 8px; padding: 1rem; }
102
+ .mini-card h3 { margin-top: 0; color: var(--text); }
103
+ .mini-card p { color: var(--muted); }
104
+ blockquote { border-left: 3px solid var(--cyan); margin: 1rem 0; padding: 0.5rem 1rem; color: var(--text); font-style: italic; background: rgba(34, 211, 238, 0.05); }
105
+ @media (max-width: 700px) { .mini-grid { grid-template-columns: 1fr; } }
106
+ </style>
107
+ </head>
108
+ <body>
109
+ <nav>
110
+ <a href="/" class="brand"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
111
+ <a href="/guide">Setup Guide</a>
112
+ <a href="/learn">Learn</a>
113
+ <a href="/dashboard">Dashboard</a>
114
+ <a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
115
+ </nav>
116
+
117
+ <div class="container">
118
+ <div class="breadcrumb"><a href="/learn">Learn</a> / AC/DC Runtime Enforcement</div>
119
+ <h1>AC/DC governs the code agents write. Runtime enforcement governs what agents do.</h1>
120
+ <p style="color:var(--muted);">6 min read &middot; For engineering leaders adopting Sonar's Agent Centric Development Cycle</p>
121
+
122
+ <div class="tldr"><strong>TL;DR:</strong> Sonar's AC/DC framework (Guide → Generate → Verify → Solve) is a code-quality lifecycle for agentic development. It has no Pre-Execution Gate stage. The highest-blast-radius agent failures — destructive shell, unauthorized MCP calls, force-push to main, secret exfiltration — never become committed code. They are runtime actions that happen between Generate and the next Guide loop. PreToolUse runtime enforcement is the layer that closes that gap. The two compose: AC/DC verifies the code, runtime enforcement verifies the action.</div>
123
+
124
+ <h2>What AC/DC is</h2>
125
+ <p>Sonar published <a href="https://www.sonarsource.com/blog/the-future-is-ac-dc-the-agent-centric-development-cycle" target="_blank" rel="noopener">the Agent Centric Development Cycle</a> (AC/DC) in early 2026 as a framework for teams shipping AI coding agents at scale. <a href="https://thenewstack.io/agentic-development-cycle-framework/" target="_blank" rel="noopener">The New Stack covered it as the governance framework</a> teams should reach for. Four stages, each feeding the next, with outputs from Verify and Solve looping back into Guide:</p>
126
+
127
+ <table>
128
+ <thead>
129
+ <tr>
130
+ <th>Stage</th>
131
+ <th>What happens</th>
132
+ <th>What it inspects</th>
133
+ </tr>
134
+ </thead>
135
+ <tbody>
136
+ <tr class="layer">
137
+ <td><strong>Guide</strong></td>
138
+ <td>Hand the agent your standards, architecture, and constraints before it writes a line of code.</td>
139
+ <td>Prompts, context packs, conventions.</td>
140
+ </tr>
141
+ <tr class="layer">
142
+ <td><strong>Generate</strong></td>
143
+ <td>The LLM produces the code it believes will achieve the desired outcome.</td>
144
+ <td>Nothing yet &mdash; pure generation.</td>
145
+ </tr>
146
+ <tr class="layer">
147
+ <td><strong>Verify</strong></td>
148
+ <td>Mandatory verification of the generated code &mdash; static analysis, security hotspots, coverage, duplication.</td>
149
+ <td>Committed source code.</td>
150
+ </tr>
151
+ <tr class="layer">
152
+ <td><strong>Solve</strong></td>
153
+ <td>Fix the issues Verify surfaces, so the next iteration is cleaner.</td>
154
+ <td>Issues, lessons.</td>
155
+ </tr>
156
+ </tbody>
157
+ </table>
158
+
159
+ <blockquote>"In an agentic development model, the primary challenge is no longer writing code; it is creating a system that makes generated code trustworthy." — Sonar, on AC/DC</blockquote>
160
+
161
+ <p>That's a correct framing for the code-quality slice of agentic governance. It is also the slice Sonar happens to own. The framework is honest about that — it is explicitly a code-trust framework, not an action-trust framework.</p>
162
+
163
+ <h2>The structural gap: no Pre-Execution Gate</h2>
164
+ <p>Look at the four stages again. Verify inspects code the agent already wrote. Solve fixes that code. Guide informs the next generation. Nowhere in the loop is there a stage that intercepts an action the agent is about to take.</p>
165
+
166
+ <p>That matters because the failures that wake operators at 2 a.m. are rarely "the committed code had a bug Verify missed." They are:</p>
167
+
168
+ <ul>
169
+ <li>An agent ran <code>rm -rf node_modules ../</code> with a path that traversed out of the workspace.</li>
170
+ <li>An agent ran <code>DROP TABLE users</code> against the staging connection because the staging connection happened to point at prod.</li>
171
+ <li>An agent ran <code>git push --force</code> to <code>main</code> to "clean up history" and erased two days of work.</li>
172
+ <li>An MCP tool was given an outbound URL the agent improvised &mdash; and the URL was a credential-stealing endpoint hidden in a doc the agent ingested.</li>
173
+ <li>An agent committed <code>.env</code> with live keys, pushed, and the leak detector caught it ninety seconds later.</li>
174
+ </ul>
175
+
176
+ <p>None of those produce committed source code that Verify can read. They are runtime actions that happen <em>between</em> Generate and the next Guide loop. By the time AC/DC's Verify stage runs, the damage is done.</p>
177
+
178
+ <div class="callout">
179
+ <strong>The gap in plain terms:</strong> AC/DC governs what the agent <strong>writes</strong>. The unsolved layer is what the agent <strong>does</strong> &mdash; tool calls, shell commands, file writes, MCP invocations, outbound network calls &mdash; before any of those actions become text that a static analyzer can see.
180
+ </div>
181
+
182
+ <h2>Where runtime enforcement plugs into AC/DC</h2>
183
+ <p>ThumbGate operates at the PreToolUse boundary inside the agent runtime &mdash; Claude Code, Cursor, OpenAI Codex CLI, Google Gemini CLI, Sourcegraph Amp, Cline, OpenCode, Claude Desktop. When the agent is about to execute a tool call, ThumbGate inspects the proposed call and returns allow, warn, block, or route-to-human. The boundary is the runtime, not the file system.</p>
184
+
185
+ <p>Mapped onto AC/DC, that lands in two stages:</p>
186
+
187
+ <table>
188
+ <thead>
189
+ <tr>
190
+ <th>AC/DC stage</th>
191
+ <th>What runtime enforcement adds</th>
192
+ </tr>
193
+ </thead>
194
+ <tbody>
195
+ <tr class="layer">
196
+ <td><strong>Guide</strong></td>
197
+ <td>Local prevention rules promoted from prior failures (auto-generated from feedback hooks) become part of the context handed to the agent. The agent doesn't just see "your team's standards" &mdash; it sees "your team's standards plus a list of specific tool-call patterns that have caused incidents here."</td>
198
+ </tr>
199
+ <tr class="layer">
200
+ <td><strong>Verify (runtime)</strong></td>
201
+ <td>A second Verify pass runs at PreToolUse: before the agent's proposed tool call executes, ThumbGate checks it against the local lesson DB, allowlists, and policy bundles. Allow, warn, block, or route. Evidence is logged structurally so reviewers can audit decisions later.</td>
202
+ </tr>
203
+ </tbody>
204
+ </table>
205
+
206
+ <div class="mini-grid">
207
+ <div class="mini-card">
208
+ <h3>Verify of code</h3>
209
+ <p>Static analysis on committed source code. Catches quality, security, and duplication issues after the diff exists. This is what Sonar does well, and what AC/DC's Verify stage maps to.</p>
210
+ </div>
211
+ <div class="mini-card">
212
+ <h3>Verify of action</h3>
213
+ <p>Runtime inspection of the proposed tool call before it fires. Catches destructive shell, unauthorized MCP, secret exfiltration, force-push, and out-of-scope file writes &mdash; before they become incidents.</p>
214
+ </div>
215
+ </div>
216
+
217
+ <h2>The two-layer deployment for an AC/DC team</h2>
218
+ <p>If your team already runs Sonar (or any static-analysis Verify stage), the integration story is short and additive:</p>
219
+
220
+ <ol>
221
+ <li><strong>Keep AC/DC's Verify on code.</strong> Sonar, SonarQube, or your existing static-analysis pipeline continues to inspect the source the agent produces. Nothing changes there.</li>
222
+ <li><strong>Add a Verify-of-action layer at the PreToolUse boundary.</strong> Install ThumbGate in the agent runtimes your developers actually use. The runtime now inspects every proposed tool call against your local rules and the prevention-rules.md generated from prior failures.</li>
223
+ <li><strong>Wire the feedback loop back into Guide.</strong> Every blocked action becomes a lesson. Lessons promote to prevention rules. Prevention rules become part of the context the next Guide iteration hands to the agent. AC/DC's loop closes one stage earlier.</li>
224
+ </ol>
225
+
226
+ <div class="callout callout-green">
227
+ <strong>Sales line:</strong> If your team adopted AC/DC and stopped at Verify-of-code, you are governing what the agent wrote and not what the agent did. Add the Pre-Execution Gate before the next blast-radius incident teaches you which half of the loop was missing.
228
+ </div>
229
+
230
+ <h2>What this looks like in a buyer demo</h2>
231
+ <ol>
232
+ <li>One AC/DC iteration where Sonar's Verify catches a real code-quality issue in generated code. Good. That's what AC/DC promises.</li>
233
+ <li>One proposed tool call (<code>git push --force origin main</code>) blocked at PreToolUse before execution. Evidence logged.</li>
234
+ <li>The blocked call promoted to a prevention rule. The next agent run sees that rule in its Guide context.</li>
235
+ <li>An export a reviewer or risk officer can inspect: allowed calls, blocked calls, overrides, rule-promotion history.</li>
236
+ </ol>
237
+
238
+ <h2>FAQ</h2>
239
+ <details class="faq-item" open>
240
+ <summary>Why doesn't AC/DC name a Pre-Execution Gate stage?</summary>
241
+ <p>AC/DC is framed by Sonar, whose product surface ends at static analysis of code. Naming a runtime-action stage that Sonar doesn't ship would be marketing against itself. The framework is internally consistent for the slice it owns; it just doesn't claim coverage of runtime actions. That's the gap a runtime-enforcement layer fills.</p>
242
+ </details>
243
+ <details class="faq-item">
244
+ <summary>Can I run ThumbGate without Sonar, or vice versa?</summary>
245
+ <p>Yes to both. ThumbGate adds runtime-action Verify regardless of what static-analysis tool runs alongside it. AC/DC's Verify stage can be filled by any static-analysis pipeline. They are independent layers.</p>
246
+ </details>
247
+ <details class="faq-item">
248
+ <summary>Where do prevention rules come from?</summary>
249
+ <p>From your team's own incidents and feedback. ThumbGate captures thumbs-down events via feedback hooks, promotes recurring failures to the local lesson DB, and synthesizes prevention rules that survive model upgrades and prompt resets. The rules are local to your team &mdash; they encode your specific failure patterns, not generic SOC2 boilerplate.</p>
250
+ </details>
251
+ <details class="faq-item">
252
+ <summary>Does ThumbGate work with Claude Code only?</summary>
253
+ <p>No. The PreToolUse boundary exists in Claude Code, Cursor, OpenAI Codex CLI, Google Gemini CLI, Sourcegraph Amp, Cline, OpenCode, and Claude Desktop. ThumbGate's adapter matrix covers all of them. One rule set, every agent runtime.</p>
254
+ </details>
255
+
256
+ <div class="cta-box">
257
+ <h2 style="color:var(--text);font-size:1.3rem;margin:0 0 8px;">Close the pre-execution gap in AC/DC</h2>
258
+ <p>Install runtime enforcement at the PreToolUse boundary across every agent your team uses. Local rules, hosted evidence, no static-analyzer in the path.</p>
259
+ <div class="cta-install">$ npx thumbgate init</div>
260
+ </div>
261
+
262
+ <div class="related">
263
+ <h3>Related articles</h3>
264
+ <a href="/learn/background-agent-control-layer">Background Agent Control Layer &rarr;</a>
265
+ <a href="/learn/mcp-pre-action-checks-explained">MCP Pre-Action Checks Explained &rarr;</a>
266
+ <a href="/learn/regulated-agent-execution-boundary">Regulated Agent Execution Boundary &rarr;</a>
267
+ <a href="/compare/anthropic-containment">ThumbGate vs Anthropic Containment &rarr;</a>
268
+ </div>
269
+ </div>
270
+
271
+ <div class="sticky-cta">
272
+ <span style="color:var(--muted)">Try it now:</span>
273
+ <code>npx thumbgate init</code>
274
+ <a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub &rarr;</a>
275
+ </div>
276
+ </body>
277
+ </html>
@@ -0,0 +1,181 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>The Agent Harness Pattern: Why Your AI Needs a Seatbelt — ThumbGate</title>
7
+ <script defer data-domain="thumbgate.ai" src="https://plausible.io/js/script.js"></script>
8
+ <meta name="description" content="Tsinghua researchers formalized agent harnesses as first-class objects with contracts, verification checks, and durable state. ThumbGate implements this pattern today.">
9
+ <meta name="keywords" content="agent harness pattern, natural language agent harness, NLAH, AI agent safety, pre-action checks, verification checks, agent contracts, ThumbGate, MCP hooks">
10
+ <meta property="og:title" content="The Agent Harness Pattern: Why Your AI Needs a Seatbelt">
11
+ <meta property="og:description" content="Academic research meets production code. How the natural-language agent harness pattern maps to real pre-action checks.">
12
+ <meta property="og:type" content="article">
13
+ <meta property="og:url" content="https://thumbgate.ai/learn/agent-harness-pattern">
14
+ <link rel="canonical" href="https://thumbgate.ai/learn/agent-harness-pattern">
15
+
16
+ <script type="application/ld+json">
17
+ {
18
+ "@context": "https://schema.org",
19
+ "@type": "TechArticle",
20
+ "headline": "The Agent Harness Pattern: Why Your AI Needs a Seatbelt",
21
+ "description": "How the natural-language agent harness pattern from academic research maps to real pre-action checks you can ship today.",
22
+ "author": {
23
+ "@type": "Person",
24
+ "name": "Igor Ganapolsky",
25
+ "url": "https://github.com/IgorGanapolsky"
26
+ },
27
+ "publisher": {
28
+ "@type": "Organization",
29
+ "name": "ThumbGate",
30
+ "url": "https://thumbgate.ai"
31
+ },
32
+ "datePublished": "2026-04-02",
33
+ "dateModified": "2026-04-02",
34
+ "mainEntityOfPage": "https://thumbgate.ai/learn/agent-harness-pattern",
35
+ "about": [
36
+ {"@type": "Thing", "name": "agent harness pattern"},
37
+ {"@type": "Thing", "name": "natural language agent harness"},
38
+ {"@type": "Thing", "name": "AI agent verification"}
39
+ ]
40
+ }
41
+ </script>
42
+
43
+ <link rel="stylesheet" href="/learn/learn.css">
44
+ <style>
45
+ table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
46
+ th, td { text-align: left; padding: 0.6rem 0.8rem; border-bottom: 1px solid var(--border); font-size: 0.9rem; }
47
+ th { color: var(--cyan); font-weight: 600; }
48
+ .mapping-row td:first-child { color: var(--green); font-weight: 500; }
49
+ </style>
50
+ </head>
51
+ <body>
52
+
53
+ <nav>
54
+ <a href="/" class="brand"><img src="/assets/brand/thumbgate-mark-inline.svg" alt="ThumbGate" class="logo-mark" width="28" height="28"><span class="logo-text">ThumbGate</span></a>
55
+ <a href="/guide">Setup Guide</a>
56
+ <a href="/learn">Learn</a>
57
+ <a href="/dashboard">Dashboard</a>
58
+ <a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub</a>
59
+ </nav>
60
+
61
+ <div class="container">
62
+ <div class="breadcrumb"><a href="/learn">Learn</a> / Agent Harness Pattern</div>
63
+ <h1>The Agent Harness Pattern: Why Your AI Needs a Seatbelt</h1>
64
+ <p style="color:var(--muted);">5 min read &middot; Research deep-dive for developers shipping AI agents in production</p>
65
+
66
+ <div class="tldr"><strong>TL;DR:</strong> Tsinghua researchers proved that AI agents need harnesses — contracts, verification checks, and durable state. ThumbGate is a production implementation you can ship today.</div>
67
+
68
+ <h2>The problem: agents act faster than you can review</h2>
69
+ <p>AI coding agents can write, commit, and deploy code in seconds. The gap between "agent decides to act" and "irreversible damage" is measured in milliseconds. Prompt instructions alone cannot close that gap because they live inside the same context the agent can override.</p>
70
+ <p>Researchers at Tsinghua University formalized this problem in their work on Natural-Language Agent Harnesses (NLAH). Their key insight: the safety layer must be <strong>external to the agent</strong>, treated as a first-class object with its own contracts, verification logic, and persistent state.</p>
71
+
72
+ <div class="callout">
73
+ <strong>The core idea:</strong> An agent harness is not a prompt. It is a runtime layer that sits between the agent's intent and the outside world, enforcing contracts that the agent cannot bypass.
74
+ </div>
75
+
76
+ <h2>Four components of an agent harness</h2>
77
+ <p>The NLAH framework defines four components that any production-grade harness needs. Here is how each maps to a concrete implementation in ThumbGate:</p>
78
+
79
+ <table>
80
+ <thead>
81
+ <tr>
82
+ <th>NLAH Component</th>
83
+ <th>What It Does</th>
84
+ <th>ThumbGate Implementation</th>
85
+ </tr>
86
+ </thead>
87
+ <tbody>
88
+ <tr class="mapping-row">
89
+ <td>Contracts</td>
90
+ <td>Formal rules that define what the agent must not do</td>
91
+ <td>Prevention rules in <code>prevention-rules.md</code> — auto-generated from thumbs-down feedback</td>
92
+ </tr>
93
+ <tr class="mapping-row">
94
+ <td>Verification Checks</td>
95
+ <td>Checkpoints that intercept actions before execution</td>
96
+ <td>PreToolUse hooks — intercept every tool call, match against checks, block or allow</td>
97
+ </tr>
98
+ <tr class="mapping-row">
99
+ <td>Durable State</td>
100
+ <td>Persistent memory that survives across sessions</td>
101
+ <td>SQLite+FTS5 lesson database — feedback, memories, and rules persist and are searchable</td>
102
+ </tr>
103
+ <tr class="mapping-row">
104
+ <td>Adapters</td>
105
+ <td>Platform-specific connectors for different agent runtimes</td>
106
+ <td>MCP server + adapters for Claude Code, Cursor, Codex, Gemini, Amp, OpenCode</td>
107
+ </tr>
108
+ </tbody>
109
+ </table>
110
+
111
+ <h2>Why contracts beat prompt rules</h2>
112
+ <p>A prompt rule says: "Do not force-push to main." An agent can reason around that, reinterpret it, or simply lose it in a long context window.</p>
113
+ <p>A contract says: if the tool call is <code>Bash</code> and the command matches <code>git push.*--force</code> targeting <code>main</code>, return <code>{"decision": "block"}</code>. The agent never executes the command. There is nothing to reason around.</p>
114
+
115
+ <div class="callout callout-red">
116
+ <strong>Prompt rules fail silently.</strong> When a prompt rule is violated, you only find out after the damage is done. A verification check fails loudly — the agent receives a block response and must adapt.
117
+ </div>
118
+
119
+ <h2>Verification checks in practice</h2>
120
+ <p>Every time your AI agent calls a tool — running a shell command, writing a file, making an API call — a PreToolUse hook fires. ThumbGate checks the call against your checks:</p>
121
+
122
+ <ol>
123
+ <li><strong>Pattern match:</strong> Does the tool name and arguments match any prevention rule?</li>
124
+ <li><strong>Thompson Sampling:</strong> For rules with uncertain severity, use multi-armed bandit sampling to decide block vs. warn</li>
125
+ <li><strong>Decision:</strong> Block (hard stop), warn (let agent reconsider), or allow (no match)</li>
126
+ <li><strong>Feedback loop:</strong> The decision is logged. Thumbs-up/down on outcomes refines future checks.</li>
127
+ </ol>
128
+
129
+ <p>This is the verification check pattern from the NLAH framework, running in production today.</p>
130
+
131
+ <h2>Durable state: memory that survives sessions</h2>
132
+ <p>One of the NLAH paper's strongest arguments is that agent harnesses need persistent state. An agent that forgets its mistakes between sessions will repeat them.</p>
133
+ <p>ThumbGate stores every feedback event in a SQLite database with full-text search (FTS5). When a new session starts, the agent's context is assembled from relevant past lessons — not the entire history, but the lessons most similar to the current task.</p>
134
+
135
+ <div class="callout callout-green">
136
+ <strong>The feedback loop closes itself:</strong> You thumbs-down a mistake → a prevention rule is generated → the check blocks the mistake next time → the agent adapts → you thumbs-up the adaptation → the rule is reinforced.
137
+ </div>
138
+
139
+ <h2>Adapters: one harness, many agents</h2>
140
+ <p>The NLAH framework emphasizes platform independence. A harness should work across different agent runtimes without rewriting the safety logic.</p>
141
+ <p>ThumbGate achieves this through the Model Context Protocol (MCP). Any agent that speaks MCP — Claude Code, Cursor, Codex, Gemini, Amp, OpenCode — connects to the same ThumbGate server and gets the same checks. Write your rules once, enforce everywhere.</p>
142
+
143
+ <h2>From research to production in two minutes</h2>
144
+ <p>The NLAH framework describes what an agent harness <em>should</em> be. ThumbGate is what it looks like when you ship one:</p>
145
+
146
+ <pre><code>npx thumbgate init</code></pre>
147
+
148
+ <p>That single command sets up:</p>
149
+ <ul>
150
+ <li>A PreToolUse hook that intercepts every tool call</li>
151
+ <li>A SQLite+FTS5 lesson database for durable state</li>
152
+ <li>Prevention rules generated from your feedback</li>
153
+ <li>Thompson Sampling for probabilistic check decisions</li>
154
+ <li>MCP server adapters for your agent runtime</li>
155
+ </ul>
156
+
157
+ <p>You are not writing safety rules from scratch. You are thumbs-downing mistakes and letting the harness learn.</p>
158
+
159
+ <div class="cta-box">
160
+ <h2 style="color:var(--text);font-size:1.3rem;margin:0 0 8px;">Ship the harness pattern today</h2>
161
+ <p>One command. Works with Claude Code, Cursor, Codex, Gemini, Amp, and any MCP agent.</p>
162
+ <div class="cta-install">$ npx thumbgate init</div>
163
+ </div>
164
+
165
+ <div class="related">
166
+ <h3>Related articles</h3>
167
+ <a href="/learn/mcp-pre-action-checks-explained">MCP Pre-Action Checks Explained →</a>
168
+ <a href="/learn/stop-ai-agent-force-push">How to Stop AI Agents From Force-Pushing to Main →</a>
169
+ <a href="/learn/vibe-coding-safety-net">The Vibe Coding Safety Net You Are Missing →</a>
170
+ </div>
171
+ </div>
172
+
173
+
174
+ <div class="sticky-cta">
175
+ <span style="color:var(--muted)">Try it now:</span>
176
+ <code>npx thumbgate init</code>
177
+ <a href="https://github.com/IgorGanapolsky/ThumbGate" target="_blank" rel="noopener">GitHub &rarr;</a>
178
+ </div>
179
+ <script src="/js/buyer-intent.js"></script>
180
+ </body>
181
+ </html>