@rigour-labs/mcp 6.6.6 → 6.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,147 +1,42 @@
1
- # 🛡️ Rigour MCP Server
1
+ # @rigour-labs/mcp
2
2
 
3
- **AI Agent Governance via Model Context Protocol — quality gates, DLP, drift detection, and deep analysis.**
3
+ [![npm version](https://img.shields.io/npm/v/@rigour-labs/mcp?color=4f46e5)](https://www.npmjs.com/package/@rigour-labs/mcp)
4
4
 
5
- Rigour is a local-first MCP server that governs AI agents (Claude, Cursor, Cline, Windsurf) with deterministic quality gates, credential warnings, and memory governance.
5
+ Rigour's MCP server. It gives a coding agent tools to review its own change before it says it is done, to
6
+ check for an existing helper before writing a new one, and to recall what the repository and the team have
7
+ learned. It runs on your machine over stdio and works with Claude Code, Cursor and other MCP clients.
6
8
 
7
- [![Registry](https://img.shields.io/badge/MCP-Registry-brightgreen)](https://github.com/mcp)
8
- [![npm version](https://img.shields.io/npm/v/@rigour-labs/mcp?color=cyan)](https://www.npmjs.com/package/@rigour-labs/mcp)
9
+ ## Set it up
9
10
 
10
- ---
11
+ `rigour setup` (from [@rigour-labs/cli](https://www.npmjs.com/package/@rigour-labs/cli)) registers it for
12
+ Claude Code and Cursor, together with the hooks that run Rigour's checks whether or not the agent asks. To
13
+ register it by hand:
11
14
 
12
- ## 🚀 Overview
13
-
14
- Rigour moves code quality enforcement from "Post-Commit" to "In-Progress." By running as an MCP server inside your editor, it provides the AI with a deterministic PASS/FAIL loop, preventing "Vibe Coding" and broken builds.
15
-
16
- ### Key Features:
17
-
18
- - **27+ Quality Gates**: Deterministic checks for file size, complexity, hygiene, security, and AI-native drift detection.
19
- - **8-Language Hallucination Detection**: JS/TS, Python, Go, Ruby, C#/.NET, Rust, Java, and Kotlin — with stdlib whitelists, dependency manifest parsing, and project-relative import resolution.
20
- - **AI Agent DLP**: 29 credential patterns intercepted before agents see them (<50ms). Anti-evasion: unicode normalization, entropy detection, bidi stripping.
21
- - **Memory & Skills Governance**: Blocks agent writes to native memory files (CLAUDE.md, .clinerules, .windsurf/memories/); forces DLP-scanned `rigour_remember` instead.
22
- - **Real-Time Hooks**: Sub-200ms file-write hooks for Claude Code, Cursor, Cline, and Windsurf — catches issues as the AI writes, not after CI.
23
- - **Two-Score System**: Separate AI Health Score and Structural Score with provenance tracking (`ai-drift`, `traditional`, `security`, `governance`).
24
- - **Deep Analysis**: Five-signal LLM pipeline (AST facts, embeddings, style fingerprints, logic baselines, dependency graphs) with deterministic verification.
25
- - **Multi-Agent Governance**: Agent registration, scope isolation, checkpoint supervision, and verified handoffs.
26
- - **Industry Presets**: SOC2, HIPAA, FedRAMP-ready gate configurations.
27
- - **Local-First**: Deterministic gates run locally. Cloud deep analysis is opt-in BYOK.
28
-
29
- ---
30
-
31
- ## 🛠️ Available Tools (25)
32
-
33
- ### Core Quality Tools
34
-
35
- | Tool | Description |
36
- |:---|:---|
37
- | `rigour_check` | Runs all configured quality gates on the current workspace. |
38
- | `rigour_explain` | Explains why a specific gate failed with actionable fix instructions. |
39
- | `rigour_status` | Quick PASS/FAIL check with JSON-friendly output for polling. |
40
- | `rigour_get_fix_packet` | Retrieves prioritized Fix Packet (v2) with severity and provenance. |
41
- | `rigour_list_gates` | Lists all configured quality gates and their thresholds. |
42
- | `rigour_get_config` | Returns the current rigour.yml configuration. |
43
- | `rigour_check_pattern` | Checks if a proposed code pattern already exists in the codebase. |
44
- | `rigour_security_audit` | Runs a live CVE check on project dependencies. |
45
- | `rigour_review` | High-fidelity code review on a PR diff against all quality gates. |
46
-
47
- ### Memory & Context Tools
48
-
49
- | Tool | Description |
50
- |:---|:---|
51
- | `rigour_remember` | Memory for this repository, all your repositories (`scope: "user"`), or your team (`scope: "team"`, served once promoted). Refuses values containing credentials. |
52
- | `rigour_recall` | `query`: the memories that match by meaning, plus promoted team knowledge; `key`: one memory. Withholds any memory containing a credential. |
53
- | `rigour_forget` | Removes a stored memory by key. |
54
-
55
- ### Real-Time Hooks & DLP
56
-
57
- | Tool | Description |
58
- |:---|:---|
59
- | `rigour_hooks_check` | Fast hook checker on specific files (<200ms). Also accepts `text` param for DLP mode — scans user input for credentials (AWS keys, API tokens, database URLs, private keys, JWTs) before agent processing. |
60
- | `rigour_hooks_init` | Generate hook configs for Claude, Cursor, Cline, or Windsurf. Installs quality hooks + DLP pre-input hooks by default. Pass `dlp: false` to skip DLP. |
61
-
62
- ### Deep Analysis
63
-
64
- | Tool | Description |
65
- |:---|:---|
66
- | `rigour_check_deep` | LLM-powered code review with five-signal extraction → verification pipeline. Local-first or cloud BYOK. |
67
- | `rigour_deep_stats` | Score history, trend analysis, and top issues from SQLite storage. |
68
-
69
- ### Supervisor & Execution
70
-
71
- | Tool | Description |
72
- |:---|:---|
73
- | `rigour_run` | Executes a command under Rigour supervision with human arbitration. |
74
- | `rigour_run_supervised` | Full supervisor mode — iterative command + gate check loop. |
75
-
76
- ### Settings
77
-
78
- | Tool | Description |
79
- |:---|:---|
80
- | `rigour_mcp_get_settings` | Get MCP runtime settings (.rigour/mcp-settings.json). |
81
- | `rigour_mcp_set_settings` | Set MCP runtime settings (e.g., deep_default_mode). |
82
-
83
- ### Multi-Agent Governance
84
-
85
- | Tool | Description |
86
- |:---|:---|
87
- | `rigour_agent_register` | Register agent in session with scope conflict detection. |
88
- | `rigour_agent_deregister` | Remove agent from session when work is complete. |
89
- | `rigour_checkpoint` | Record quality checkpoint with drift detection. |
90
- | `rigour_handoff` | Initiate task handoff to another agent. |
91
- | `rigour_handoff_accept` | Accept a pending handoff from another agent. |
92
-
93
- ---
94
-
95
- ## 🌐 Language Support
96
-
97
- Hallucinated import detection with full stdlib whitelists and dependency manifest parsing:
98
-
99
- | Language | Stdlib | Dependency Manifest | Import Patterns |
100
- |:---|:---|:---|:---|
101
- | **JavaScript/TypeScript** | Node.js 22.x builtins | `package.json` | `import`, `require()`, `export from` |
102
- | **Python** | 160+ stdlib modules (3.12+) | Local module resolution | `import`, `from ... import` |
103
- | **Go** | 150+ stdlib packages (1.22+) | `go.mod` module path | `import "..."`, aliased imports |
104
- | **Ruby** | 80+ stdlib gems (3.3+ MRI) | `Gemfile`, `.gemspec` | `require`, `require_relative` |
105
- | **C# / .NET** | .NET 8 framework namespaces | `.csproj` (NuGet PackageReference) | `using`, `using static` |
106
- | **Rust** | `std`/`core`/`alloc`/`proc_macro` | `Cargo.toml` (with `-` → `_`) | `use`, `extern crate`, `pub use` |
107
- | **Java** | `java.*`/`javax.*`/`jakarta.*` | `build.gradle`, `pom.xml` | `import`, `import static` |
108
- | **Kotlin** | `kotlin.*`/`kotlinx.*` + Java interop | `build.gradle.kts` | `import` |
109
-
110
- ---
111
-
112
- ## 📦 Installation
113
-
114
- No global install: npx fetches the server when your agent starts it. Keep a version in the package name (`@latest`, or a major such as `@6`); with a bare `@rigour-labs/mcp`, npx runs any older copy installed globally instead. If you once ran `npm install -g @rigour-labs/mcp`, remove it with `npm rm -g @rigour-labs/mcp`.
15
+ ```bash
16
+ claude mcp add --scope user rigour -- npx -y @rigour-labs/mcp@6
17
+ ```
115
18
 
116
- **Claude Code:** use the plugin (`/plugin marketplace add rigour-labs/rigour-plugin`, then `/plugin install rigour@rigour-labs`).
19
+ Or, in any client's MCP configuration:
117
20
 
118
- **Cursor, Claude Desktop and other MCP clients:**
119
21
  ```json
120
- {
121
- "mcpServers": {
122
- "rigour": {
123
- "command": "npx",
124
- "args": ["-y", "@rigour-labs/mcp@latest"],
125
- "env": {
126
- "RIGOUR_CWD": "/path/to/your/project"
127
- }
128
- }
129
- }
130
- }
22
+ { "mcpServers": { "rigour": { "command": "npx", "args": ["-y", "@rigour-labs/mcp@6"] } } }
131
23
  ```
132
24
 
133
- Only Rigour's core tools are listed by default; add `"RIGOUR_MCP_TOOLS": "governance,telemetry"` (or `"full"`) to `env` for the rest. Node.js 22 or later is required.
134
-
135
- To keep a server apart from your other work (one per employer or client), add `"RIGOUR_USER_MEMORY": "off"`: it then never reads or writes the memories you keep for all your repositories.
136
-
137
- ---
138
-
139
- ## 📖 Documentation
25
+ Node 22 or later. Each call works in the repository given by its `cwd` argument, else `RIGOUR_CWD`, else
26
+ the directory the server started in.
140
27
 
141
- For full configuration and advanced usage, visit **[docs.rigour.run](https://docs.rigour.run)**.
28
+ ## The tools
142
29
 
143
- ---
30
+ | Tool | What it is for |
31
+ | --- | --- |
32
+ | `rigour_review` | Review the change before calling it done: only findings on changed lines, each with a fix |
33
+ | `rigour_review_ack` | Record the agent's verdict on a risky changed function |
34
+ | `rigour_reviewer_verdict` | What the reviewer last decided for the branch (read-only) |
35
+ | `rigour_check`, `rigour_get_fix_packet` | Run the checks, and get the violations a page at a time |
36
+ | `rigour_index`, `rigour_context_scope`, `rigour_check_pattern` | Find the few files a task needs, and whether a helper already exists |
37
+ | `rigour_recall`, `rigour_remember` | Recall and store conventions and lessons |
144
38
 
145
- ## 📜 License
39
+ More groups (agent teams, context, telemetry) are listed with `RIGOUR_MCP_TOOLS`. Every tool:
40
+ [Coding agents and MCP](https://github.com/rigour-labs/rigour/blob/main/docs/AGENTS.md).
146
41
 
147
42
  MIT © [Rigour Labs](https://github.com/rigour-labs)
@@ -1,6 +1,6 @@
1
1
  export declare const TOOL_GROUPS: {
2
2
  /** Load memory, scope context, avoid reinvention, gate and review the change, learn. */
3
- readonly core: readonly ["rigour_recall", "rigour_index", "rigour_context_scope", "rigour_check_pattern", "rigour_check", "rigour_review", "rigour_review_ack", "rigour_get_fix_packet", "rigour_remember"];
3
+ readonly core: readonly ["rigour_recall", "rigour_index", "rigour_context_scope", "rigour_check_pattern", "rigour_check", "rigour_review", "rigour_review_ack", "rigour_reviewer_verdict", "rigour_get_fix_packet", "rigour_remember"];
4
4
  /** Multi-agent registration, checkpoints, handoffs, hooks and supervised runs. */
5
5
  readonly governance: readonly ["rigour_agent_register", "rigour_agent_deregister", "rigour_checkpoint", "rigour_handoff", "rigour_handoff_accept", "rigour_hooks_check", "rigour_hooks_init", "rigour_run", "rigour_run_supervised"];
6
6
  /** Occasional context and security tools. */
@@ -23,6 +23,7 @@ export const TOOL_GROUPS = {
23
23
  'rigour_check',
24
24
  'rigour_review',
25
25
  'rigour_review_ack',
26
+ 'rigour_reviewer_verdict',
26
27
  'rigour_get_fix_packet',
27
28
  'rigour_remember',
28
29
  ],
package/dist/index.js CHANGED
@@ -32,6 +32,7 @@ import { handleCheckPattern, handleSecurityAudit } from './tools/pattern-handler
32
32
  import { handleRun, handleRunSupervised } from './tools/execution-handlers.js';
33
33
  import { handleAgentRegister, handleCheckpoint, handleHandoff, handleAgentDeregister, handleHandoffAccept } from './tools/agent-handlers.js';
34
34
  import { handleReview, handleReviewAck } from './tools/review-handler.js';
35
+ import { handleReviewerVerdict } from './tools/reviewer-verdict-handler.js';
35
36
  import { handleHooksCheck, handleHooksInit } from './tools/hooks-handler.js';
36
37
  import { handleCheckDeep, handleDeepStats } from './tools/deep-handlers.js';
37
38
  import { handleMcpGetSettings, handleMcpSetSettings } from './tools/mcp-settings-handler.js';
@@ -226,6 +227,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
226
227
  case "rigour_review_ack":
227
228
  result = handleReviewAck(cwd, args);
228
229
  break;
230
+ case "rigour_reviewer_verdict":
231
+ result = await handleReviewerVerdict(cwd);
232
+ break;
229
233
  // Context Telemetry & Cost Tools
230
234
  case "rigour_context_stats":
231
235
  result = await handleContextStats(cwd, args.taskId);
@@ -536,6 +536,22 @@ export const TOOL_DEFINITIONS = [
536
536
  openWorldHint: false,
537
537
  },
538
538
  },
539
+ {
540
+ name: "rigour_reviewer_verdict",
541
+ description: "What the model reviewer last decided for this branch: the confirmed items to fix (with id, file:line, consequence and evidence), the disputed ones that are not work, which mode ran, and whether the verdict is for the current commit. Read-only: never runs a model, never dismisses.",
542
+ inputSchema: {
543
+ type: "object",
544
+ properties: { ...cwdParam() },
545
+ required: ["cwd"],
546
+ },
547
+ annotations: {
548
+ title: "Reviewer Verdict",
549
+ readOnlyHint: true,
550
+ destructiveHint: false,
551
+ idempotentHint: true,
552
+ openWorldHint: false,
553
+ },
554
+ },
539
555
  {
540
556
  name: "rigour_review_ack",
541
557
  description: "Record that you reviewed a function from rigour_review's review_task: verdict \"fixed\" (you fixed a defect) or \"no_issue\", with a note saying what you checked. Covers the function's current code only; editing it later puts it back in the task.",
@@ -580,7 +596,7 @@ export const TOOL_DEFINITIONS = [
580
596
  },
581
597
  {
582
598
  name: "rigour_task_cost",
583
- description: "Returns both verified actual model usage/cost (from Cursor Admin API or imported CSV) and Rigour estimated avoided context/cost USD.",
599
+ description: "Rigour's estimate of the context and cost its scoped reads avoided for a task, beside any model usage recorded for it.",
584
600
  inputSchema: {
585
601
  type: "object",
586
602
  properties: {
@@ -0,0 +1,2 @@
1
+ import type { ToolResult } from '../utils/context-telemetry.js';
2
+ export declare function handleReviewerVerdict(cwd: string): Promise<ToolResult>;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * rigour_reviewer_verdict: what the model reviewer last decided for this branch, for the agent
3
+ * that does the fixing. Confirmed items are the work, each with the id a person can dismiss it by;
4
+ * disputed items have no majority and are not work. Read only: it never runs a model (that spends
5
+ * the person's money) and never dismisses (a person decides what is not a bug).
6
+ */
7
+ import { execFileSync } from 'child_process';
8
+ import { reviewStatus } from '@rigour-labs/core';
9
+ const git = (cwd, args) => {
10
+ try {
11
+ return execFileSync('git', args, { cwd, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
12
+ }
13
+ catch {
14
+ return '';
15
+ }
16
+ };
17
+ const brief = (item) => ({ id: item.id, class: item.class, file: item.file ?? null, line: item.line ?? null, issue: item.issue, consequence: item.consequence ?? null, evidence: item.evidence ?? null, judges: item.reviewer ?? null });
18
+ export async function handleReviewerVerdict(cwd) {
19
+ const branch = git(cwd, ['rev-parse', '--abbrev-ref', 'HEAD']);
20
+ const head = git(cwd, ['rev-parse', 'HEAD']);
21
+ const status = branch ? await reviewStatus(cwd, branch) : undefined;
22
+ if (!status)
23
+ return { content: [{ type: 'text', text: JSON.stringify({ error: 'not a git repository' }) }], isError: true };
24
+ const last = status.last;
25
+ const answer = {
26
+ branch,
27
+ running: status.running ? { head: status.running.head } : null,
28
+ last_attempt: status.attempt ? { head: status.attempt.head, outcome: status.attempt.outcome, reason: status.attempt.reason } : null,
29
+ verdict: last ? {
30
+ head: last.head,
31
+ current: last.head === head,
32
+ scope: last.mode,
33
+ ran: last.ran ?? null,
34
+ fix: last.open.map(brief),
35
+ disputed_not_work: last.disputed.map(brief),
36
+ } : null,
37
+ next: !last && status.attempt
38
+ ? `The last review ${status.attempt.outcome === 'skipped' ? 'was skipped' : 'could not run'}: ${status.attempt.reason}. Tell the person; there is nothing from the reviewer to fix yet.`
39
+ : !last
40
+ ? 'No reviewer verdict on this branch yet. A person runs `rigour review --reviewer`, or pushes with the reviewer on.'
41
+ : last.open.length
42
+ ? `Fix each item in "fix", then push; the next review checks each by id.${last.head === head ? '' : ' This verdict is for an earlier commit: some items may already be fixed.'} If one is not a bug, say why to the person: only they can dismiss it.`
43
+ : 'Nothing to fix from the reviewer.',
44
+ };
45
+ return { content: [{ type: 'text', text: JSON.stringify(answer, null, 2) }] };
46
+ }
@@ -5,7 +5,6 @@
5
5
  */
6
6
  export declare function loadConfig(cwd: string): Promise<{
7
7
  ignore: string[];
8
- version: number;
9
8
  commands: {
10
9
  format?: string | undefined;
11
10
  lint?: string | undefined;
@@ -14,11 +13,6 @@ export declare function loadConfig(cwd: string): Promise<{
14
13
  };
15
14
  gates: {
16
15
  deep: {
17
- enabled: boolean;
18
- pro: boolean;
19
- max: boolean;
20
- provider: string;
21
- threads: number;
22
16
  temperature: number;
23
17
  intent_checks: boolean;
24
18
  checks: {
@@ -31,10 +25,6 @@ export declare function loadConfig(cwd: string): Promise<{
31
25
  error_handling: boolean;
32
26
  code_smells: boolean;
33
27
  };
34
- api_key?: string | undefined;
35
- api_base_url?: string | undefined;
36
- model_name?: string | undefined;
37
- model_path?: string | undefined;
38
28
  max_tokens?: number | undefined;
39
29
  timeout_ms?: number | undefined;
40
30
  budget_ms?: number | undefined;
@@ -50,16 +40,11 @@ export declare function loadConfig(cwd: string): Promise<{
50
40
  max_file_lines: number;
51
41
  forbid_todos: boolean;
52
42
  forbid_fixme: boolean;
53
- forbid_paths: string[];
54
43
  required_files: string[];
55
44
  ast: {
56
45
  complexity: number;
57
46
  max_methods: number;
58
47
  max_params: number;
59
- max_nesting: number;
60
- max_inheritance_depth: number;
61
- max_class_dependencies: number;
62
- max_function_lines: number;
63
48
  };
64
49
  staleness: {
65
50
  enabled: boolean;
@@ -71,7 +56,6 @@ export declare function loadConfig(cwd: string): Promise<{
71
56
  detect_heavy_alternatives: boolean;
72
57
  detect_duplicate_purpose: boolean;
73
58
  unused_allowlist: string[];
74
- trusted_registry?: string | undefined;
75
59
  };
76
60
  architecture: {
77
61
  boundaries: {
@@ -88,11 +72,6 @@ export declare function loadConfig(cwd: string): Promise<{
88
72
  enabled: boolean;
89
73
  sensitivity: number;
90
74
  mining_depth: number;
91
- ignored_patterns: string[];
92
- cross_file_patterns: boolean;
93
- naming_consistency: boolean;
94
- import_relationships: boolean;
95
- max_cross_file_depth: number;
96
75
  };
97
76
  environment: {
98
77
  enabled: boolean;
@@ -103,14 +82,11 @@ export declare function loadConfig(cwd: string): Promise<{
103
82
  retry_loop_breaker: {
104
83
  enabled: boolean;
105
84
  max_retries: number;
106
- auto_classify: boolean;
107
85
  doc_sources: Record<string, string>;
108
86
  };
109
87
  agent_team: {
110
88
  enabled: boolean;
111
89
  max_concurrent_agents: number;
112
- cross_agent_pattern_check: boolean;
113
- handoff_verification: boolean;
114
90
  task_ownership: "strict" | "collaborative";
115
91
  };
116
92
  checkpoint: {
@@ -118,7 +94,6 @@ export declare function loadConfig(cwd: string): Promise<{
118
94
  interval_minutes: number;
119
95
  quality_threshold: number;
120
96
  drift_detection: boolean;
121
- auto_save_on_failure: boolean;
122
97
  };
123
98
  security: {
124
99
  enabled: boolean;
@@ -141,13 +116,6 @@ export declare function loadConfig(cwd: string): Promise<{
141
116
  server_path_patterns: string[];
142
117
  allowlist_env_names: string[];
143
118
  };
144
- adaptive: {
145
- enabled: boolean;
146
- base_coverage_threshold: number;
147
- base_quality_threshold: number;
148
- auto_detect_tier: boolean;
149
- forced_tier?: "hobby" | "startup" | "enterprise" | undefined;
150
- };
151
119
  duplication_drift: {
152
120
  enabled: boolean;
153
121
  similarity_threshold: number;
@@ -155,8 +123,6 @@ export declare function loadConfig(cwd: string): Promise<{
155
123
  };
156
124
  hallucinated_imports: {
157
125
  enabled: boolean;
158
- check_relative: boolean;
159
- check_packages: boolean;
160
126
  ignore_patterns: string[];
161
127
  };
162
128
  inconsistent_error_handling: {
@@ -201,11 +167,9 @@ export declare function loadConfig(cwd: string): Promise<{
201
167
  };
202
168
  test_quality: {
203
169
  enabled: boolean;
204
- ignore_patterns: string[];
205
170
  check_empty_tests: boolean;
206
171
  check_tautological: boolean;
207
172
  check_mock_heavy: boolean;
208
- check_snapshot_abuse: boolean;
209
173
  check_assertion_free_async: boolean;
210
174
  max_mocks_per_test: number;
211
175
  };
@@ -218,14 +182,6 @@ export declare function loadConfig(cwd: string): Promise<{
218
182
  protected_skills_paths: string[];
219
183
  exempt_paths: string[];
220
184
  };
221
- input_validation: {
222
- enabled: boolean;
223
- ignore_patterns: string[];
224
- block_on_detection: boolean;
225
- min_secret_length: number;
226
- custom_patterns: string[];
227
- audit_log: boolean;
228
- };
229
185
  unindexed_reads: {
230
186
  enabled: boolean;
231
187
  migrations: string[];
@@ -247,6 +203,7 @@ export declare function loadConfig(cwd: string): Promise<{
247
203
  redundancy: {
248
204
  enabled: boolean;
249
205
  wire_contracts: string[];
206
+ schema_migrations: string[];
250
207
  };
251
208
  optional_params: {
252
209
  enabled: boolean;
@@ -293,13 +250,7 @@ export declare function loadConfig(cwd: string): Promise<{
293
250
  };
294
251
  };
295
252
  hooks: {
296
- enabled: boolean;
297
- tools: ("claude" | "cursor" | "cline" | "windsurf")[];
298
- timeout_ms: number;
299
- fast_gates: string[];
300
- block_on_failure: boolean;
301
253
  require_review_ack: boolean;
302
- dlp: boolean;
303
254
  };
304
255
  output: {
305
256
  report_path: string;
@@ -314,11 +265,19 @@ export declare function loadConfig(cwd: string): Promise<{
314
265
  on_push: "off" | "background" | "wait";
315
266
  reviewers: string[];
316
267
  models: Record<string, string>;
268
+ panel: "off" | "on" | "required";
269
+ mode_required: boolean;
270
+ dismissals: boolean;
271
+ panel_max_items: number;
272
+ judges: 2 | 3;
273
+ escalate: "always" | "risk";
274
+ cross_models: Record<string, string>;
317
275
  model?: string | undefined;
276
+ max_runs_per_day?: number | undefined;
277
+ max_usd_per_day?: number | undefined;
318
278
  };
319
279
  github_account?: string | undefined;
320
280
  };
321
- planned: string[];
322
281
  preset?: string | undefined;
323
282
  paradigm?: string | undefined;
324
283
  }>;
@@ -22,7 +22,7 @@ export async function loadConfig(cwd) {
22
22
  const configPath = path.join(cwd, "rigour.yml");
23
23
  if (!(await fs.pathExists(configPath))) {
24
24
  noteMissingConfig(cwd);
25
- return ConfigSchema.parse({ version: 1 });
25
+ return ConfigSchema.parse({});
26
26
  }
27
27
  const configContent = await fs.readFile(configPath, "utf-8");
28
28
  return ConfigSchema.parse(yaml.parse(configContent));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@rigour-labs/mcp",
3
- "version": "6.6.6",
4
- "description": "MCP server + live dashboard for AI code governance — OWASP LLM Top 10 (10/10), real-time MCP App UI, 25+ security patterns, memory and lessons recalled by meaning, hallucinated import detection, multi-agent governance. Works with Claude, Cursor, VS Code, ChatGPT, Goose, Windsurf. Industry presets for HIPAA, SOC2, FedRAMP.",
3
+ "version": "6.7.0",
4
+ "description": "Rigour's MCP server: lets coding agents review their change, check for an existing helper before writing a new one, and recall the team's lessons. Works with Claude Code, Cursor and other MCP clients.",
5
5
  "engines": {
6
6
  "node": ">=22"
7
7
  },
@@ -65,7 +65,7 @@
65
65
  "execa": "^8.0.1",
66
66
  "fs-extra": "^11.4.0",
67
67
  "yaml": "^2.8.2",
68
- "@rigour-labs/core": "6.6.6"
68
+ "@rigour-labs/core": "6.7.0"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@types/node": "^25.0.3",