thumbgate 1.27.18 → 1.27.20

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 (170) hide show
  1. package/.claude/commands/dashboard.md +15 -0
  2. package/.claude/commands/thumbgate-blocked.md +27 -0
  3. package/.claude/commands/thumbgate-dashboard.md +15 -0
  4. package/.claude/commands/thumbgate-doctor.md +30 -0
  5. package/.claude/commands/thumbgate-guard.md +36 -0
  6. package/.claude/commands/thumbgate-protect.md +30 -0
  7. package/.claude/commands/thumbgate-rules.md +30 -0
  8. package/.claude-plugin/plugin.json +4 -3
  9. package/.well-known/agentic-verify.txt +1 -0
  10. package/.well-known/llms.txt +33 -12
  11. package/.well-known/mcp/server-card.json +8 -8
  12. package/README.md +246 -30
  13. package/adapters/claude/.mcp.json +2 -2
  14. package/adapters/codex/config.toml +2 -2
  15. package/adapters/gcp/dfcx-webhook-gate.js +295 -0
  16. package/adapters/gemini/function-declarations.json +1 -0
  17. package/adapters/letta/README.md +41 -0
  18. package/adapters/letta/thumbgate-letta-adapter.js +133 -0
  19. package/adapters/mcp/server-stdio.js +263 -11
  20. package/adapters/opencode/opencode.json +1 -1
  21. package/adapters/policy-engine/ethicore-guardian-client.js +68 -0
  22. package/adapters/policy-engine/thumbgate-policy-engine-adapter.js +260 -0
  23. package/bench/observability-eval-suite.json +26 -0
  24. package/bench/thumbgate-bench.json +2 -2
  25. package/bin/cli.js +1456 -122
  26. package/bin/dashboard-cli.js +7 -0
  27. package/bin/postinstall.js +11 -27
  28. package/commands/dashboard.md +15 -0
  29. package/commands/thumbgate-dashboard.md +15 -0
  30. package/config/gate-classifier-routing.json +98 -0
  31. package/config/gate-templates.json +216 -0
  32. package/config/gates/claim-verification.json +12 -0
  33. package/config/gates/default.json +31 -2
  34. package/config/github-about.json +2 -2
  35. package/config/mcp-allowlists.json +23 -13
  36. package/config/merge-quality-checks.json +0 -1
  37. package/config/model-candidates.json +121 -6
  38. package/config/post-deploy-marketing-pages.json +80 -0
  39. package/config/tessl-tiles.json +1 -3
  40. package/openapi/openapi.yaml +12 -0
  41. package/package.json +225 -100
  42. package/public/about.html +162 -0
  43. package/public/agent-manager.html +179 -0
  44. package/public/agents-cost-savings.html +153 -0
  45. package/public/ai-malpractice-prevention.html +818 -0
  46. package/public/assets/brand/github-social-preview.png +0 -0
  47. package/public/assets/brand/thumbgate-icon-512.png +0 -0
  48. package/public/assets/brand/thumbgate-icon-pro-512.png +0 -0
  49. package/public/assets/brand/thumbgate-icon-team-512.png +0 -0
  50. package/public/assets/brand/thumbgate-logo-1200x360.png +0 -0
  51. package/public/assets/brand/thumbgate-logo-transparent.svg +28 -0
  52. package/public/assets/brand/thumbgate-mark-inline-v3.svg +18 -0
  53. package/public/assets/brand/thumbgate-mark-pro.svg +23 -0
  54. package/public/assets/brand/thumbgate-mark-team.svg +26 -0
  55. package/public/assets/brand/thumbgate-mark.svg +21 -0
  56. package/public/assets/brand/thumbgate-wordmark.svg +20 -0
  57. package/public/assets/claude-thumbgate-statusbar.svg +8 -0
  58. package/public/assets/codex-thumbgate-statusbar-test.svg +9 -0
  59. package/public/assets/legal-intake-control-flow.svg +66 -0
  60. package/public/blog.html +4 -4
  61. package/public/brand/thumbgate-mark.svg +19 -0
  62. package/public/brand/thumbgate-og.svg +16 -0
  63. package/public/chatgpt-app.html +330 -0
  64. package/public/codex-enterprise.html +123 -0
  65. package/public/codex-plugin.html +72 -20
  66. package/public/compare.html +31 -8
  67. package/public/dashboard.html +930 -166
  68. package/public/diagnostic.html +345 -0
  69. package/public/federal.html +2 -2
  70. package/public/guide.html +33 -13
  71. package/public/index.html +469 -111
  72. package/public/install.html +193 -0
  73. package/public/js/buyer-intent.js +672 -0
  74. package/public/learn.html +183 -18
  75. package/public/lessons.html +168 -10
  76. package/public/numbers.html +7 -7
  77. package/public/pricing.html +399 -0
  78. package/public/pro.html +34 -11
  79. package/scripts/action-receipts.js +324 -0
  80. package/scripts/activation-quickstart.js +187 -0
  81. package/scripts/agent-memory-lifecycle.js +211 -0
  82. package/scripts/agent-operations-planner.js +621 -0
  83. package/scripts/agent-readiness.js +20 -3
  84. package/scripts/agent-reward-model.js +53 -1
  85. package/scripts/ai-component-inventory.js +367 -0
  86. package/scripts/async-eval-observability.js +236 -0
  87. package/scripts/audit.js +65 -0
  88. package/scripts/auto-promote-gates.js +82 -10
  89. package/scripts/auto-wire-hooks.js +14 -0
  90. package/scripts/aws-blocks-guardrails.js +272 -0
  91. package/scripts/billing.js +93 -1
  92. package/scripts/bot-detection.js +61 -3
  93. package/scripts/build-metadata.js +50 -10
  94. package/scripts/classifier-routing.js +130 -0
  95. package/scripts/cli-feedback.js +4 -2
  96. package/scripts/cli-schema.js +97 -0
  97. package/scripts/cli-telemetry.js +6 -1
  98. package/scripts/commercial-offer.js +82 -2
  99. package/scripts/context-manager.js +74 -6
  100. package/scripts/dashboard-chat.js +332 -0
  101. package/scripts/dashboard.js +68 -2
  102. package/scripts/export-databricks-bundle.js +5 -1
  103. package/scripts/export-dpo-pairs.js +7 -2
  104. package/scripts/feedback-aggregate.js +281 -0
  105. package/scripts/feedback-loop.js +123 -1
  106. package/scripts/feedback-quality.js +87 -0
  107. package/scripts/feedback-sanitizer.js +105 -0
  108. package/scripts/filesystem-search.js +35 -10
  109. package/scripts/gate-stats.js +89 -0
  110. package/scripts/gates-engine.js +1176 -85
  111. package/scripts/gemini-embedding-policy.js +2 -1
  112. package/scripts/hook-runtime.js +20 -14
  113. package/scripts/hook-stop-anti-claim.js +301 -0
  114. package/scripts/hook-thumbgate-cache-updater.js +18 -2
  115. package/scripts/hybrid-feedback-context.js +142 -7
  116. package/scripts/install-shim.js +87 -0
  117. package/scripts/lesson-inference.js +8 -3
  118. package/scripts/lesson-search.js +17 -1
  119. package/scripts/license.js +10 -10
  120. package/scripts/llm-client.js +169 -4
  121. package/scripts/local-model-profile.js +15 -8
  122. package/scripts/mcp-config.js +7 -1
  123. package/scripts/mcp-oauth.js +293 -0
  124. package/scripts/memory-scope-readiness.js +159 -0
  125. package/scripts/meta-agent-loop.js +36 -0
  126. package/scripts/noop-detect.js +285 -0
  127. package/scripts/operational-integrity.js +39 -5
  128. package/scripts/oss-pr-opportunity-scout.js +35 -5
  129. package/scripts/parallel-workflow-orchestrator.js +293 -0
  130. package/scripts/plan-gate.js +243 -0
  131. package/scripts/plausible-domain-config.js +99 -0
  132. package/scripts/plausible-server-events.js +9 -6
  133. package/scripts/pro-local-dashboard.js +4 -4
  134. package/scripts/proxy-pointer-rag-guardrails.js +42 -1
  135. package/scripts/published-cli.js +0 -8
  136. package/scripts/qa-scenario-planner.js +136 -0
  137. package/scripts/rate-limiter.js +64 -13
  138. package/scripts/repeat-metric.js +137 -0
  139. package/scripts/secret-fixture-tokens.js +61 -0
  140. package/scripts/secret-redaction.js +166 -0
  141. package/scripts/secret-scanner.js +44 -5
  142. package/scripts/security-scanner.js +260 -10
  143. package/scripts/self-distill-agent.js +3 -1
  144. package/scripts/self-harness-optimizer.js +141 -0
  145. package/scripts/self-healing-check.js +193 -0
  146. package/scripts/self-protection.js +90 -0
  147. package/scripts/seo-gsd.js +916 -7
  148. package/scripts/silent-failure-cluster.js +531 -0
  149. package/scripts/statusline-cache-path.js +17 -2
  150. package/scripts/statusline-cache-read.js +57 -0
  151. package/scripts/statusline-local-stats.js +9 -1
  152. package/scripts/statusline-meta.js +28 -2
  153. package/scripts/statusline.sh +20 -4
  154. package/scripts/sync-telemetry-from-prod.js +374 -0
  155. package/scripts/telemetry-analytics.js +357 -0
  156. package/scripts/thompson-sampling.js +31 -10
  157. package/scripts/thumbgate-bench.js +16 -1
  158. package/scripts/thumbgate-search.js +85 -19
  159. package/scripts/tool-contract-validator.js +76 -0
  160. package/scripts/tool-registry.js +169 -1
  161. package/scripts/trajectory-scorer.js +63 -0
  162. package/scripts/vector-store.js +45 -0
  163. package/scripts/verify-marketing-pages-deployed.js +212 -0
  164. package/scripts/visitor-journey.js +172 -0
  165. package/scripts/workflow-sentinel.js +286 -53
  166. package/scripts/workspace-evolver.js +62 -2
  167. package/src/api/server.js +2683 -319
  168. package/.claude-plugin/marketplace.json +0 -85
  169. package/adapters/chatgpt/openapi.yaml +0 -1695
  170. package/scripts/bot-detector.js +0 -50
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // Insert 'dashboard' and '--open' as the subcommands/arguments
5
+ process.argv.splice(2, 0, 'dashboard', '--open');
6
+
7
+ require('./cli.js');
@@ -26,37 +26,21 @@ const DASHBOARD_URL = 'https://thumbgate.ai/dashboard?utm_source=npm&utm_medium=
26
26
 
27
27
  process.stderr.write(`
28
28
  ╭─────────────────────────────────────────────────────╮
29
- │ ThumbGate installed.
29
+ │ ThumbGate installed — 7-day Pro trial is live.
30
30
  │ │
31
- Every repeat-mistake your agent makes costs
32
- tokens. ThumbGate blocks known-bad tool calls
33
- │ BEFORE the model sees them — zero tokens spent │
34
- │ on mistakes you've already corrected. │
31
+ Start now: npx thumbgate init
32
+ Updates: npx thumbgate subscribe you@company.com
35
33
  │ │
36
- Start free (local-only, never expires):
37
- npx thumbgate init
38
- │ npx thumbgate stats │
39
- │ │
40
- │ See your gates firing live: │
41
- │ ${DASHBOARD_URL.slice(0, 47).padEnd(47, ' ')} │
34
+ Free after trial: 3 rules, 2 captures/day.
35
+ Pro ($19/mo): unlimited everything.
42
36
  ╰─────────────────────────────────────────────────────╯
43
37
 
44
- Pro ${PRO_PRICE_LABEL}
45
- Hosted lesson sync across all your machines.
46
- Adapter matrix kept current for Claude Code,
47
- Cursor, Codex, Gemini, Amp, Cline, OpenCode.
48
- Org dashboard. DPO export. 24×7 ops.
49
- Upgrade: ${PRO_CTA_URL}
50
- Direct: ${PRO_MONTHLY_PAYMENT_LINK}
51
-
52
- ⚡ LAUNCH PROMO: 50% off first 3 months with code THUMB50
53
- One-click (discount applied): https://buy.stripe.com/eVqeVd62o0aO19v7mb3sI3g
54
- Limited to first 50 customers. ${new Date().getMonth() === 6 ? 'July 2026' : ''}
55
-
56
- Team: ${TEAM_PRICE_LABEL}
57
- Workflow Hardening Sprint intake:
58
- ${WORKFLOW_SPRINT_URL}
38
+ Trial unlocks: unlimited rules, lesson search, DPO export,
39
+ hosted dashboard. After 7 days, free tier limits apply.
40
+ Subscribe for the 5-min setup guide + weekly tips:
41
+ npx thumbgate subscribe you@company.com
59
42
 
60
- Or run: npx thumbgate pro
43
+ Dashboard: ${DASHBOARD_URL}
44
+ Keep Pro: ${PRO_CTA_URL}
61
45
 
62
46
  `);
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: dashboard
3
+ description: Open the local HTTP dashboard for the current project in your web browser.
4
+ ---
5
+
6
+ # Open Dashboard
7
+
8
+ Open the local HTTP dashboard for the current project in your web browser.
9
+
10
+ ## Instructions
11
+ Execute the following command in the project directory to open the browser dashboard scoped to the current repository:
12
+ ```bash
13
+ thumbgate-dashboard
14
+ ```
15
+
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: thumbgate-dashboard
3
+ description: Open the local HTTP dashboard for the current project in your web browser.
4
+ ---
5
+
6
+ # Open Scoped ThumbGate Dashboard
7
+
8
+ Open the local HTTP dashboard for the current project in your web browser.
9
+
10
+ ## Instructions
11
+ Execute the following command in the project directory to open the browser dashboard:
12
+ ```bash
13
+ thumbgate-dashboard
14
+ ```
15
+
@@ -0,0 +1,98 @@
1
+ {
2
+ "version": 1,
3
+ "defaultLane": "local_classical",
4
+ "lanes": {
5
+ "deterministic": {
6
+ "description": "Regex, allow/deny lists, protected paths, branch rules, and exact policy checks. Always runs first.",
7
+ "maxLatencyMs": 25,
8
+ "cloudAllowed": false,
9
+ "useFor": [
10
+ "secret patterns",
11
+ "force-push",
12
+ "destructive SQL",
13
+ "protected operating files",
14
+ "known repeated command signatures"
15
+ ]
16
+ },
17
+ "semantic_cache": {
18
+ "description": "Cached decision for semantically equivalent repeats where wording or PII changed but action meaning did not.",
19
+ "maxLatencyMs": 50,
20
+ "cloudAllowed": false,
21
+ "requiresProvenance": true,
22
+ "useFor": [
23
+ "semantic repeat blocks",
24
+ "cached approvals",
25
+ "prompt variants with same action meaning",
26
+ "PII-normalized duplicate checks"
27
+ ]
28
+ },
29
+ "local_classical": {
30
+ "description": "Fast local text routing for high-volume, low-ambiguity feedback and gate labels.",
31
+ "maxLatencyMs": 250,
32
+ "cloudAllowed": false,
33
+ "minExamples": 40,
34
+ "useFor": [
35
+ "routine feedback triage",
36
+ "known error classes",
37
+ "low-risk support labels",
38
+ "bulk import classification"
39
+ ]
40
+ },
41
+ "local_semantic": {
42
+ "description": "Local semantic/FTS recall for near-miss lessons, fuzzy duplicates, and low-data labels.",
43
+ "maxLatencyMs": 750,
44
+ "cloudAllowed": false,
45
+ "useFor": [
46
+ "near-duplicate lessons",
47
+ "sparse labels",
48
+ "cross-session recurrence",
49
+ "similar command intent"
50
+ ]
51
+ },
52
+ "llm_judge": {
53
+ "description": "Budget-capped LLM review for ambiguous, high-value decisions where semantics matter.",
54
+ "maxLatencyMs": 10000,
55
+ "cloudAllowed": true,
56
+ "requiresEvidence": true,
57
+ "useFor": [
58
+ "ambiguous policy mapping",
59
+ "multi-document evidence review",
60
+ "rubric critique",
61
+ "structured dataset provenance review"
62
+ ]
63
+ },
64
+ "rubric_gate": {
65
+ "description": "Completion blocker for failed rubrics, missing evidence, and loop-until-done harness caps.",
66
+ "maxLatencyMs": 500,
67
+ "cloudAllowed": false,
68
+ "requiresEvidence": true,
69
+ "useFor": [
70
+ "failed rubric criteria",
71
+ "missing done evidence",
72
+ "critic review failure",
73
+ "workflow completion claims"
74
+ ]
75
+ },
76
+ "human_review": {
77
+ "description": "Stop and ask for approval when the action is high-risk, private, or too ambiguous for automated routing.",
78
+ "maxLatencyMs": null,
79
+ "cloudAllowed": false,
80
+ "requiresEvidence": true,
81
+ "useFor": [
82
+ "production credentials",
83
+ "customer data",
84
+ "regulated workflows",
85
+ "unbounded external posting",
86
+ "payment or refund changes"
87
+ ]
88
+ }
89
+ },
90
+ "thresholds": {
91
+ "classicalMinExamples": 40,
92
+ "lowLatencyBudgetMs": 300,
93
+ "llmMinLatencyBudgetMs": 2000,
94
+ "highRiskAmbiguity": 0.65,
95
+ "mediumAmbiguity": 0.35,
96
+ "largeBatchRows": 50
97
+ }
98
+ }
@@ -157,6 +157,18 @@
157
157
  "roi": "Connects prevention with remediation: what credential lived where, who touched it, and whether rotation is required.",
158
158
  "rollout": "Use with incident-response runbooks and secrets scanner output from GitGuardian or internal tooling."
159
159
  },
160
+ {
161
+ "id": "require-local-dependency-vulnerability-scan",
162
+ "name": "Require local dependency vulnerability scan before installation",
163
+ "category": "Supply Chain Safety",
164
+ "signal": "👎",
165
+ "defaultAction": "block",
166
+ "severity": "high",
167
+ "pattern": "(npm install|pnpm add|yarn add|bun add|npm i|pnpm i|yarn i).*(vulnerable|cve|high|critical|osv|cve-lite)",
168
+ "problem": "Blocks package installations that introduce dependencies containing known high-severity or critical vulnerabilities (CVEs) before they are written to the lockfile.",
169
+ "roi": "Prevents AI agents from introducing vulnerable packages into the workspace. Complements zero-egress local-first scanning toolings (like OWASP CVE Lite CLI) directly at the terminal level.",
170
+ "rollout": "Enable on every repo where agents can install dependencies or modify lockfiles."
171
+ },
160
172
  {
161
173
  "id": "require-section-tree-before-multimodal-answer",
162
174
  "name": "Require section tree before multimodal answers",
@@ -325,6 +337,18 @@
325
337
  "roi": "Prevents expensive long-context inference rollouts from reusing stale cache state or corrupting speculative decode paths.",
326
338
  "rollout": "Enable before raising context windows, switching cache implementations, or deploying ShadowRadix-style prefix caching."
327
339
  },
340
+ {
341
+ "id": "require-hybrid-inference-routing-approval",
342
+ "name": "Require approval for hybrid cloud escalation on sensitive data",
343
+ "category": "Hybrid Inference Governance",
344
+ "signal": "👎",
345
+ "defaultAction": "block",
346
+ "severity": "high",
347
+ "pattern": "(hybrid|local-cloud|perplexity.*hybrid|personal computer).*(escalat|cloud|send to cloud|route to server).*(sensitive|secret|pii|customer|confidential|codebase)",
348
+ "problem": "Hybrid local-cloud orchestrators (e.g. Perplexity Computex 2026) must not silently escalate sensitive context (code, feedback, lessons, PII) to cloud models without explicit approval or local-only enforcement.",
349
+ "roi": "High: Prevents data exfil in agentic workflows while still allowing hybrid cost/privacy wins. Critical as more agents adopt local-cloud routing (Personal Computer, AI PCs). Captures high-value feedback for custom hybrid rules.",
350
+ "rollout": "Start as block for paths matching secrets/env/customer data; promote to warn after baseline hybrid agent sessions. Pair with perplexity/hybrid-* model candidates and adapters/perplexity/HYBRID.md."
351
+ },
328
352
  {
329
353
  "id": "checkpoint-speculative-decoding-acceptance",
330
354
  "name": "Checkpoint speculative decoding acceptance",
@@ -444,6 +468,198 @@
444
468
  "problem": "Blocks background agents from cloning, building, testing, or publishing unless they run in an isolated durable environment with logs.",
445
469
  "roi": "Lets the team pursue unattended revenue and engineering workflows without turning local developer machines into the execution boundary.",
446
470
  "rollout": "Enable for every agent that can run tests, push branches, deploy, publish content, change billing, or touch customer data."
471
+ },
472
+ {
473
+ "id": "block-unauthorized-practice-of-law",
474
+ "name": "Block unauthorized practice of law",
475
+ "category": "Legal Intake Safety",
476
+ "signal": "👎",
477
+ "defaultAction": "block",
478
+ "severity": "critical",
479
+ "pattern": "(outcome prediction|jurisdictional recommendation|[Yy]ou\\s+(should|could|might)\\s+(file|sue|claim)|strong case|likely\\s+(prevail|win|succeed))",
480
+ "problem": "Stops advice-shaped intake replies under ABA Rule 5.5.",
481
+ "roi": "Prevents malpractice exposure before delivery.",
482
+ "rollout": "Enable on every AI intake channel."
483
+ },
484
+ {
485
+ "id": "require-conflict-check-before-intake",
486
+ "name": "Require conflict check before intake continues",
487
+ "category": "Legal Intake Safety",
488
+ "signal": "👎",
489
+ "defaultAction": "block",
490
+ "severity": "critical",
491
+ "pattern": "(collect_case_facts|schedule_consultation|intake_continue).*(missing|no|unchecked).*(conflict|adverse[_-]party|clearance)",
492
+ "problem": "Requires adverse-party clearance before sensitive facts.",
493
+ "roi": "Catches conflicts before privileged facts cross ethical walls.",
494
+ "rollout": "Use the firm's conflicts API or a synthetic pilot fixture."
495
+ },
496
+ {
497
+ "id": "block-privileged-content-egress",
498
+ "name": "Block privileged content egress",
499
+ "category": "Legal Intake Safety",
500
+ "signal": "👎",
501
+ "defaultAction": "block",
502
+ "severity": "critical",
503
+ "pattern": "(send_email|api_call|external_request|schedule|crm_update).*(privileged|attorney[_-]client|work[_-]product|matter[_-]id|confidential)",
504
+ "problem": "Blocks outbound actions with privilege markers.",
505
+ "roi": "Prevents single-action privilege waiver.",
506
+ "rollout": "Define markers, start with hard block, then add in-tenant reroute."
507
+ },
508
+ {
509
+ "id": "require-approved-disclaimer-before-response",
510
+ "name": "Require approved disclaimer before response",
511
+ "category": "Legal Intake Safety",
512
+ "signal": "👎",
513
+ "defaultAction": "block",
514
+ "severity": "high",
515
+ "pattern": "(intake_response|client_reply).*((missing|no)\\s*(disclaimer|disclosure|non[_-]engagement)|(disclaimer|disclosure|non[_-]engagement)\\s*[:=]?\\s*(missing|none|no))",
516
+ "problem": "Requires firm-approved non-engagement language.",
517
+ "roi": "Reduces inadvertent client-relationship risk.",
518
+ "rollout": "Load approved disclaimer during pilot."
519
+ },
520
+ {
521
+ "id": "restrict-model-endpoint-to-approved-list",
522
+ "name": "Restrict model endpoint to approved list",
523
+ "category": "Legal Intake Safety",
524
+ "signal": "👎",
525
+ "defaultAction": "block",
526
+ "severity": "high",
527
+ "pattern": "(model_call|llm_request|api_endpoint).*(unapproved|unknown|public|consumer)",
528
+ "problem": "Blocks unapproved model endpoints.",
529
+ "roi": "Keeps data inside approved vendor boundaries.",
530
+ "rollout": "Allowlist endpoints during pilot."
531
+ },
532
+ {
533
+ "id": "require-attorney-review-before-routing",
534
+ "name": "Require attorney review before case routing",
535
+ "category": "Legal Intake Safety",
536
+ "signal": "👎",
537
+ "defaultAction": "block",
538
+ "severity": "high",
539
+ "pattern": "(route_to_attorney|assign_practice_area|schedule_consultation).*(no|missing).*(review|approval|supervisor)",
540
+ "problem": "Requires review before routing or scheduling.",
541
+ "roi": "Prevents bad prospect routing.",
542
+ "rollout": "Start strict; relax after pilot evidence."
543
+ },
544
+ {
545
+ "id": "block-dynamic-tool-creation-without-approval",
546
+ "name": "Block dynamic tool creation without approval",
547
+ "category": "Claw-Style Enterprise Agent Governance",
548
+ "signal": "👎",
549
+ "defaultAction": "block",
550
+ "severity": "critical",
551
+ "pattern": "(claw|enterpriseclaw|dynamic tool|runtime tool|create_tool|self.*evolving).*(create|generate|define).*(tool|action|capability|script)",
552
+ "problem": "Claw-style agents (Automation Anywhere EnterpriseClaw, inspired by Nvidia OpenShell) can create tools at runtime. This must be gated to prevent arbitrary code execution or exfil.",
553
+ "roi": "High: Prevents one of the most dangerous capabilities of autonomous enterprise agents while allowing safe dynamic extension under governance. Directly addresses the 'governance catching up' gap called out in coverage.",
554
+ "rollout": "Block by default for claw agents; allowlist specific safe tool patterns after review. Capture feedback on every dynamic creation attempt."
555
+ },
556
+ {
557
+ "id": "require-review-for-screen-ui-interaction",
558
+ "name": "Require review for screen/UI interaction by agents",
559
+ "category": "Claw-Style Enterprise Agent Governance",
560
+ "signal": "👎",
561
+ "defaultAction": "block",
562
+ "severity": "high",
563
+ "pattern": "(claw|screen|ui|computer use|mouse|keyboard|click|type|interact).*(screen|desktop|app|gui|human.*like)",
564
+ "problem": "Claw-style agents interact directly with computer screens and apps like a human operator. This creates high risk of unintended actions, data leaks via UI, or compliance violations.",
565
+ "roi": "Prevents agent-driven UI automation from bypassing existing controls. Essential for enterprise RPA + AI agent convergence (Automation Anywhere core).",
566
+ "rollout": "Require human-in-loop or explicit policy approval for any claw screen interaction on production systems. Log all such actions for audit."
567
+ },
568
+ {
569
+ "id": "enforce-agent-identity-separation",
570
+ "name": "Enforce separate agent identity and audit trail",
571
+ "category": "Claw-Style Enterprise Agent Governance",
572
+ "signal": "👎",
573
+ "defaultAction": "block",
574
+ "severity": "high",
575
+ "pattern": "(agent identity|agent.*credential|human.*credential|impersonat|audit.*agent|agent.*audit).*(missing|no|same as human|not separated)",
576
+ "problem": "Claw agents (and partners like Okta in EnterpriseClaw) require first-class agent identities separate from humans so actions are auditable as agent actions, not human ones. Using human creds hides responsibility.",
577
+ "roi": "Critical for compliance, forensics, and feedback loops. Enables proper capture of agent-specific lessons and prevention rules. Matches industry push (Okta, etc.).",
578
+ "rollout": "Block any claw or autonomous agent action that authenticates as a human user. Require dedicated agent service accounts / identities with scoped permissions."
579
+ },
580
+ {
581
+ "id": "gate-claw-file-system-access",
582
+ "name": "Gate claw-style agent file system access",
583
+ "category": "Claw-Style Enterprise Agent Governance",
584
+ "signal": "👎",
585
+ "defaultAction": "block",
586
+ "severity": "critical",
587
+ "pattern": "(claw|file system|fs access|read file|write file|list dir|device access).*(local|shared|on-prem|airgap)",
588
+ "problem": "Claw agents have broad device-level (local/shared) file system access. Must be strictly gated, especially in on-prem/air-gapped enterprise environments where most data lives.",
589
+ "roi": "Directly supports the hybrid/on-prem reality emphasized in EnterpriseClaw coverage. Prevents broad access from becoming broad exfil or corruption. Ties to ThumbGate's existing path globs and protected files.",
590
+ "rollout": "Use existing protected-paths + new claw-specific rules. Start with read-only for most, explicit approval for writes on sensitive dirs."
591
+ },
592
+ {
593
+ "id": "block-unauthorized-multi-channel-posts",
594
+ "name": "Block unauthorized multi-channel posts by Hermes Agent",
595
+ "category": "Nous Research Hermes Agent Governance",
596
+ "signal": "👎",
597
+ "defaultAction": "block",
598
+ "severity": "high",
599
+ "pattern": "(slack|telegram|discord|signal|whatsapp|send_message|post_message|channel_post).*(credentials|api_key|token|auth|password|unreviewed|unapproved)",
600
+ "problem": "Hermes Agent can post directly to messaging platforms. This gate prevents leaked credentials or unapproved messages from being posted publicly.",
601
+ "roi": "High: Prevents public-facing compliance violations, credential leaks, and messaging spam across Telegram, Slack, and Discord.",
602
+ "rollout": "Enable by default for agents connected to external communication channels."
603
+ },
604
+ {
605
+ "id": "prevent-infinite-skill-synthesis-loops",
606
+ "name": "Prevent infinite skill synthesis loops",
607
+ "category": "Nous Research Hermes Agent Governance",
608
+ "signal": "👎",
609
+ "defaultAction": "block",
610
+ "severity": "medium",
611
+ "pattern": "(hermes|skill synthesis|write skill|synthesize skill|evolve skill|self-improve).*(loop|repeated|stuck|regenerate|no progress)",
612
+ "problem": "Hermes Agent can get stuck repeatedly rewriting or generating the same skills in Markdown format without resolving the user's core task.",
613
+ "roi": "Reduces token burn and infinite loop execution loops by gating repeated skill write attempts.",
614
+ "rollout": "Warn/block when skill edits occur more than 3 times within the same session context."
615
+ },
616
+ {
617
+ "id": "validate-synthesized-skills-against-rules",
618
+ "name": "Validate synthesized skills against prevention rules",
619
+ "category": "Nous Research Hermes Agent Governance",
620
+ "signal": "👎",
621
+ "defaultAction": "block",
622
+ "severity": "critical",
623
+ "pattern": "(write skill|synthesize skill|create skill|update skill).*(override|bypass|ignore|violate).*(prevention rule|gate|thumbgate)",
624
+ "problem": "Hermes Agent's self-improvement loop can write new skills that conflict with or attempt to bypass established ThumbGate prevention rules.",
625
+ "roi": "Preserves security invariants by ensuring that synthesized skills never write code patterns blocked by active ThumbGate rules.",
626
+ "rollout": "Scan synthesized skill markdown content for pattern overlap with active prevention rules before writing to the skills directory."
627
+ },
628
+ {
629
+ "id": "require-human-in-the-loop-pause",
630
+ "name": "Enforce Human-in-the-Loop pause for critical decisions",
631
+ "category": "AI Engineering Stack Safety",
632
+ "signal": "👎",
633
+ "defaultAction": "block",
634
+ "severity": "high",
635
+ "pattern": "(agent_sdk|openrouter_sdk|human_in_loop|auto_resolve).*(auto_resolve|bypass|skip_pause|critical_action)",
636
+ "problem": "Prevents autonomous agents using the Agent SDK from auto-resolving critical decisions (such as model migration, credential rotations, or financial transactions) without pausing for explicit human approval.",
637
+ "roi": "Ensures human oversight remains functional on highest-risk actions, preventing the agent from acting entirely unsupervised on critical gates.",
638
+ "rollout": "Turn on for all production deployments utilizing OpenRouter or other Agent SDKs with auto-resolve capabilities."
639
+ },
640
+ {
641
+ "id": "careful-mode",
642
+ "name": "Enforce careful mode for destructive commands",
643
+ "category": "On-Demand Dynamic Gating",
644
+ "signal": "👎",
645
+ "defaultAction": "block",
646
+ "severity": "critical",
647
+ "pattern": "(rm\\s+-rf|drop\\s+table|force-push|git\\s+push\\s+-[fF]|git\\s+push\\s+--force|kubectl\\s+delete)",
648
+ "problem": "Blocks dangerous or destructive command sequences (rm -rf, DROP TABLE, force-push, kubectl delete) during sessions where careful mode is activated.",
649
+ "roi": "Protects production environments and main branches from accidental destructive commands executed by autonomous agents.",
650
+ "rollout": "Enable dynamically on-demand using /careful or env overrides when executing in sensitive or production workspaces."
651
+ },
652
+ {
653
+ "id": "freeze-mode",
654
+ "name": "Freeze directory edits",
655
+ "category": "On-Demand Dynamic Gating",
656
+ "signal": "👎",
657
+ "defaultAction": "block",
658
+ "severity": "high",
659
+ "pattern": "^freeze_edit_outside_path.*",
660
+ "problem": "Blocks any file edit or write tool call that is not within a specified active/target directory.",
661
+ "roi": "Restricts agent edits to a controlled workspace, preventing scope drift, accidental modification of configuration or source files, and unwanted global refactors during focused task debugging.",
662
+ "rollout": "Enable dynamically on-demand using /freeze to specify the only path(s) the agent is allowed to write to during the session."
447
663
  }
448
664
  ]
449
665
  }
@@ -24,6 +24,18 @@
24
24
  "requiredActions": ["on_device_verified"],
25
25
  "message": "You claimed on-device verification without evidence. Capture the proof first, then call track_action('on_device_verified').",
26
26
  "createdAt": 1774972800000
27
+ },
28
+ {
29
+ "pattern": "(github|repo|repository).*(about|metadata|description|topics?).*(updated|verified|fixed|match(?:es|ed)?)|(about|metadata|description|topics?).*(updated|verified|fixed|match(?:es|ed)?).*(github|repo|repository)",
30
+ "requiredActions": ["github_metadata_verified"],
31
+ "message": "You claimed GitHub repository metadata was updated or verified without source-of-truth evidence. Read it back with gh api/gh repo view and rendered HTML, then call track_action('github_metadata_verified').",
32
+ "createdAt": 1780677400000
33
+ },
34
+ {
35
+ "pattern": "(money|payment|charge|checkout|revenue|price|pricing|invoice|billing|tax|sales tax|inventory|stock|permission|access|customer-facing|customer facing).*(correct|accurate|verified|valid|matches|working|fixed|resolved|calculated|configured)|(correct|accurate|verified|valid|matches|working|fixed|resolved|calculated|configured).*(money|payment|charge|checkout|revenue|price|pricing|invoice|billing|tax|sales tax|inventory|stock|permission|access|customer-facing|customer facing)",
36
+ "requiredActions": ["commercial_truth_verified"],
37
+ "message": "You claimed a commercial-data fact (money, tax, inventory, permissions, or customer-facing state) without external source-of-truth evidence. Read the authoritative system first, then call track_action('commercial_truth_verified').",
38
+ "createdAt": 1781640000000
27
39
  }
28
40
  ]
29
41
  }
@@ -23,7 +23,7 @@
23
23
  "id": "task-scope-required",
24
24
  "layer": "Decisions",
25
25
  "toolNames": ["Bash"],
26
- "pattern": "^(git\\s+(add|commit|push)|gh\\s+pr\\s+(create|merge)|gh\\s+release\\s+create|git\\s+tag\\b|npm\\s+publish|yarn\\s+publish|pnpm\\s+publish)",
26
+ "pattern": "^(git\\s+(add|commit|push)|gh\\s+pr\\s+(create|merge)|gh\\s+api\\b(?=.*(?:/pulls\\b|repos/[^\\s]+/[^\\s]+/pulls\\b))(?=.*(?:-f\\b|--field\\b|-F\\b|--raw-field\\b|--method\\s+POST\\b|-X\\s+POST\\b))|gh\\s+release\\s+create|git\\s+tag\\b|npm\\s+publish|yarn\\s+publish|pnpm\\s+publish)",
27
27
  "requireTaskScope": true,
28
28
  "action": "block",
29
29
  "message": "Git write, PR, release, and publish operations require an explicit task scope.",
@@ -72,6 +72,15 @@
72
72
  "message": "PR creation requires explicit 'pr_create_allowed' satisfaction with evidence of user permission.",
73
73
  "severity": "high"
74
74
  },
75
+ {
76
+ "id": "gh-api-pr-create-restricted",
77
+ "layer": "Identity",
78
+ "pattern": "gh\\s+api\\b(?=.*(?:/pulls\\b|repos/[^\\s]+/[^\\s]+/pulls\\b))(?=.*(?:-f\\b|--field\\b|-F\\b|--raw-field\\b|--method\\s+POST\\b|-X\\s+POST\\b))",
79
+ "action": "block",
80
+ "unless": "pr_create_allowed",
81
+ "message": "GitHub API PR creation requires explicit 'pr_create_allowed' satisfaction with evidence of user permission. Use the same approval path as gh pr create.",
82
+ "severity": "high"
83
+ },
75
84
  {
76
85
  "id": "gh-pr-merge-restricted",
77
86
  "layer": "Identity",
@@ -85,7 +94,7 @@
85
94
  "id": "branch-governance-required",
86
95
  "layer": "Decisions",
87
96
  "toolNames": ["Bash"],
88
- "pattern": "^(gh\\s+pr\\s+(create|merge)|gh\\s+release\\s+create|git\\s+tag\\b|npm\\s+publish|yarn\\s+publish|pnpm\\s+publish)",
97
+ "pattern": "^(gh\\s+pr\\s+(create|merge)|gh\\s+api\\b(?=.*(?:/pulls\\b|repos/[^\\s]+/[^\\s]+/pulls\\b))(?=.*(?:-f\\b|--field\\b|-F\\b|--raw-field\\b|--method\\s+POST\\b|-X\\s+POST\\b))|gh\\s+release\\s+create|git\\s+tag\\b|npm\\s+publish|yarn\\s+publish|pnpm\\s+publish)",
89
98
  "requireBranchGovernance": true,
90
99
  "action": "block",
91
100
  "message": "PR, release, and publish actions require explicit branch governance.",
@@ -368,6 +377,26 @@
368
377
  "message": "Self-protection: agent cannot modify hook registrations.",
369
378
  "severity": "critical",
370
379
  "compliance": ["NIST-AC-3", "OWASP-A01", "SOC2-CC6.1"]
380
+ },
381
+ {
382
+ "id": "on-demand-careful-mode",
383
+ "layer": "Execution",
384
+ "toolNames": ["Bash"],
385
+ "pattern": "(rm\\s+-rf|drop\\s+table|force-push|git\\s+push\\s+-[fF]|git\\s+push\\s+--force|kubectl\\s+delete)",
386
+ "action": "block",
387
+ "when": { "constraints": { "careful_mode": true } },
388
+ "message": "Careful mode is active. Dangerous command is blocked.",
389
+ "severity": "critical"
390
+ },
391
+ {
392
+ "id": "on-demand-freeze-mode",
393
+ "layer": "Decisions",
394
+ "toolNames": ["Edit", "Write", "MultiEdit"],
395
+ "pattern": ".*",
396
+ "action": "block",
397
+ "when": { "constraints": { "freeze_mode": true } },
398
+ "message": "Freeze mode is active. Edits outside the frozen directory are blocked.",
399
+ "severity": "high"
371
400
  }
372
401
  ]
373
402
  }
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "repo": "IgorGanapolsky/ThumbGate",
3
3
  "repositoryUrl": "https://github.com/IgorGanapolsky/ThumbGate",
4
- "homepageUrl": "https://thumbgate-production.up.railway.app",
4
+ "homepageUrl": "https://thumbgate.ai",
5
5
  "githubDescription": "Agent governance for ThumbGate: 👍/👎 become Pre-Action Checks that block repeat mistakes before code, money, or customer systems change.",
6
- "metaDescription": "Stop paying for the same AI mistake twice. ThumbGate is machine-speed pre-action defense for AI coding agents and vibe coding workflows: 👍 thumbs up and 👎 thumbs down become history-aware lessons, shared lessons and org visibility, actionable remediations, agent surface inventory, and Pre-Action Checks that block repeat mistakes before the next tool call across Claude Code, Cursor, Codex, Gemini, Amp, Cline, and OpenCode.",
6
+ "metaDescription": "Stripe Connect integration engineering for ticketing and marketplace platforms — Pretix plugin shipped to Hilltown Media. ThumbGate is also the pre-action governance runtime for AI coding agents (Claude Code, Cursor, Codex, Gemini CLI): 👍 thumbs up and 👎 thumbs down feedback become history-aware lessons, shared lessons and org visibility, and PreToolUse checks that block repeated mistakes before code, money, or customer systems change. Perfect for vibe coding and human-in-the-loop workflows.",
7
7
  "topics": [
8
8
  "thumbgate",
9
9
  "pre-action-checks",
@@ -4,6 +4,9 @@
4
4
  "default": [
5
5
  "recall",
6
6
  "unified_context",
7
+ "set_task_scope",
8
+ "get_scope_state",
9
+ "satisfy_gate",
7
10
  "capture_feedback",
8
11
  "open_feedback_session",
9
12
  "append_feedback_context",
@@ -36,13 +39,13 @@
36
39
  "context_provenance",
37
40
  "commerce_recall",
38
41
  "generate_skill",
39
- "satisfy_gate",
40
- "set_task_scope",
41
- "get_scope_state",
42
42
  "set_branch_governance",
43
43
  "get_branch_governance",
44
44
  "approve_protected_action",
45
45
  "track_action",
46
+ "detect_noop",
47
+ "record_action_receipt",
48
+ "get_action_receipts",
46
49
  "verify_claim",
47
50
  "check_operational_integrity",
48
51
  "workflow_sentinel",
@@ -68,15 +71,19 @@
68
71
  "perplexity_search",
69
72
  "perplexity_ask",
70
73
  "perplexity_research",
71
- "perplexity_reason"
74
+ "perplexity_reason",
75
+ "suggest_fix"
72
76
  ],
73
77
  "essential": [
78
+ "recall",
79
+ "unified_context",
80
+ "set_task_scope",
81
+ "get_scope_state",
82
+ "satisfy_gate",
74
83
  "capture_feedback",
75
84
  "open_feedback_session",
76
85
  "append_feedback_context",
77
86
  "finalize_feedback_session",
78
- "recall",
79
- "unified_context",
80
87
  "search_lessons",
81
88
  "retrieve_lessons",
82
89
  "search_thumbgate",
@@ -89,8 +96,6 @@
89
96
  "plan_chatgpt_ads_readiness",
90
97
  "reflect_on_feedback",
91
98
  "prevention_rules",
92
- "set_task_scope",
93
- "get_scope_state",
94
99
  "set_branch_governance",
95
100
  "get_branch_governance",
96
101
  "approve_protected_action",
@@ -104,7 +109,8 @@
104
109
  "report_product_issue",
105
110
  "require_evidence_for_claim",
106
111
  "session_report",
107
- "generate_operator_artifact"
112
+ "generate_operator_artifact",
113
+ "suggest_fix"
108
114
  ],
109
115
  "commerce": [
110
116
  "capture_feedback",
@@ -123,7 +129,8 @@
123
129
  "workflow_sentinel",
124
130
  "prevention_rules",
125
131
  "feedback_stats",
126
- "feedback_summary"
132
+ "feedback_summary",
133
+ "suggest_fix"
127
134
  ],
128
135
  "readonly": [
129
136
  "recall",
@@ -164,7 +171,8 @@
164
171
  "session_report",
165
172
  "generate_operator_artifact",
166
173
  "perplexity_search",
167
- "perplexity_ask"
174
+ "perplexity_ask",
175
+ "suggest_fix"
168
176
  ],
169
177
  "dispatch": [
170
178
  "recall",
@@ -204,7 +212,8 @@
204
212
  "session_report",
205
213
  "generate_operator_artifact",
206
214
  "perplexity_search",
207
- "perplexity_ask"
215
+ "perplexity_ask",
216
+ "suggest_fix"
208
217
  ],
209
218
  "locked": [
210
219
  "feedback_summary",
@@ -228,7 +237,8 @@
228
237
  "workflow_sentinel",
229
238
  "settings_status",
230
239
  "native_messaging_audit",
231
- "generate_operator_artifact"
240
+ "generate_operator_artifact",
241
+ "suggest_fix"
232
242
  ]
233
243
  }
234
244
  }
@@ -4,7 +4,6 @@
4
4
  "CodeQL",
5
5
  "Analyze JavaScript (javascript-typescript)",
6
6
  "Verify changeset",
7
- "SonarCloud Code Analysis",
8
7
  "GitGuardian Security Checks",
9
8
  "Socket Security: Project Report",
10
9
  "Socket Security: Pull Request Alerts"