sentinel-verify 1.0.1 → 1.1.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/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  All notable changes to Sentinel are documented here.
4
4
 
5
+ ## 1.1.0 — 2026-07-14
6
+
7
+ ### Added
8
+ - `sentinel connect <agent>`: one-command MCP setup — writes the sentinel entry (absolute paths + `SENTINEL_PROJECT_ROOT` pinned to the current project) into the agent's MCP config, merging safely with existing servers. Supported: `claude-code` (`<project>/.mcp.json`), `cursor` (`<project>/.cursor/mcp.json`), `antigravity` (`~/.gemini/antigravity/mcp_config.json`). `sentinel connect --list` shows the table; unknown agent names print it too. Malformed config files fail with a clear error and are never modified. Adding an agent is one entry in the `AGENTS` table in `src/cli/commands/connect.ts`.
9
+
5
10
  ## 1.0.1 — 2026-07-12
6
11
 
7
12
  ### Fixed
package/README.md CHANGED
@@ -13,13 +13,28 @@ npm install -g sentinel-verify
13
13
  cd your-project
14
14
  sentinel init # creates the local .sentinel/ data folder
15
15
 
16
- # Connect your agent (example: Claude Code run this inside your project)
17
- claude mcp add sentinel -e SENTINEL_PROJECT_ROOT="$(pwd)" -- sentinel mcp
16
+ # Connect your agent — one command, no config editing:
17
+ sentinel connect claude-code # or: cursor, antigravity
18
18
  ```
19
19
 
20
20
  That's it. Your agent now has four verification tools it can call after making changes. In agent mode Sentinel needs **no API key and no local model** — see the two modes below.
21
21
 
22
- **How Sentinel finds your project:** some MCP clients launch servers from an unexpected working directory (even `/`), so Sentinel resolves the project root defensively, in this order: the `SENTINEL_PROJECT_ROOT` environment variable → a plausible launch directory → the workspace roots your MCP client declares (the protocol's `roots` capability). If none of those work, tool calls fail with a clear message instead of writing anywhere wrong. For clients configured via JSON (Cursor, Claude Desktop, …), set the env var explicitly:
22
+ ## Connecting an agent
23
+
24
+ **Recommended: `sentinel connect <agent>`** — run it from your project's root directory and it writes the correct MCP entry (absolute paths, project root pinned via `SENTINEL_PROJECT_ROOT`) into that agent's config, merging safely with any MCP servers already configured there. Malformed config files are never touched — you get an error instead.
25
+
26
+ | Agent | Command | Config it writes |
27
+ |---|---|---|
28
+ | Claude Code | `sentinel connect claude-code` | `<project>/.mcp.json` |
29
+ | Cursor | `sentinel connect cursor` | `<project>/.cursor/mcp.json` |
30
+ | Antigravity | `sentinel connect antigravity` | `~/.gemini/antigravity/mcp_config.json` (global — pinned to the project you ran it from) |
31
+
32
+ `sentinel connect --list` shows this table in the terminal. After connecting, restart/reload the agent so it picks up the new server. Re-run `connect` any time (e.g. after updating Node or Sentinel) — it refreshes the entry in place. Supporting a new agent is one entry in the `AGENTS` table in `src/cli/commands/connect.ts` — PRs welcome.
33
+
34
+ <details>
35
+ <summary><strong>Manual setup (fallback for agents not listed above)</strong></summary>
36
+
37
+ Any MCP client works — configure it to launch `sentinel mcp` as a stdio server. For clients configured via JSON:
23
38
 
24
39
  ```json
25
40
  {
@@ -33,6 +48,12 @@ That's it. Your agent now has four verification tools it can call after making c
33
48
  }
34
49
  ```
35
50
 
51
+ If the agent launches servers without your shell's PATH, use the absolute path to the `sentinel` binary (find it with `which sentinel`) or `node /path/to/dist/cli/index.js` as the command. Claude Code users can equivalently run `claude mcp add sentinel -e SENTINEL_PROJECT_ROOT="$(pwd)" -- sentinel mcp`.
52
+
53
+ </details>
54
+
55
+ **How Sentinel finds your project:** some MCP clients launch servers from an unexpected working directory (even `/`), so Sentinel resolves the project root defensively, in this order: the `SENTINEL_PROJECT_ROOT` environment variable → a plausible launch directory → the workspace roots your MCP client declares (the protocol's `roots` capability). If none of those work, tool calls fail with a clear message instead of writing anywhere wrong. `sentinel connect` sets the env var for you, which is why it's the recommended path.
56
+
36
57
  Optional extras:
37
58
 
38
59
  ```bash
@@ -0,0 +1,98 @@
1
+ // Purpose: implements `sentinel connect <agent>` — writes the sentinel MCP server entry into a coding agent's config file, merging safely with whatever is already there.
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ const AGENTS = [
7
+ {
8
+ key: "claude-code",
9
+ displayName: "Claude Code",
10
+ configPath: (projectRoot) => join(projectRoot, ".mcp.json"),
11
+ scope: "project",
12
+ restartHint: "Restart your Claude Code session (or run /mcp) to pick it up.",
13
+ },
14
+ {
15
+ key: "cursor",
16
+ displayName: "Cursor",
17
+ configPath: (projectRoot) => join(projectRoot, ".cursor", "mcp.json"),
18
+ scope: "project",
19
+ restartHint: "Reload the Cursor window (or toggle the server in Cursor Settings → MCP).",
20
+ },
21
+ {
22
+ key: "antigravity",
23
+ displayName: "Antigravity",
24
+ configPath: () => join(homedir(), ".gemini", "antigravity", "mcp_config.json"),
25
+ scope: "user",
26
+ restartHint: "Restart Antigravity (its MCP config is global — it needs absolute paths, which is what was written).",
27
+ },
28
+ ];
29
+ function supportedList() {
30
+ return AGENTS.map((agent) => ` ${agent.key.padEnd(12)} ${agent.displayName} — ${agent.scope === "project" ? "<project>/" : ""}${agent.configPath("<project>").replace("<project>/", "")}`).join("\n");
31
+ }
32
+ /** The MCP server entry to write: absolute paths only, so GUI-launched agents work without shell PATH. */
33
+ function sentinelEntry(projectRoot) {
34
+ const cliEntry = resolve(dirname(fileURLToPath(import.meta.url)), "..", "index.js");
35
+ return {
36
+ command: process.execPath,
37
+ args: [cliEntry, "mcp"],
38
+ env: { SENTINEL_PROJECT_ROOT: projectRoot },
39
+ };
40
+ }
41
+ /** `sentinel connect --list` — show supported agents and their config locations. */
42
+ export function runConnectList() {
43
+ console.log("Supported agents:\n" + supportedList());
44
+ console.log('\nUsage: sentinel connect <agent> (run it from your project\'s root directory)');
45
+ }
46
+ /** `sentinel connect <agent>` — add or update the sentinel entry in that agent's MCP config. */
47
+ export function runConnect(agentKey) {
48
+ const agent = AGENTS.find((candidate) => candidate.key === agentKey.toLowerCase());
49
+ if (!agent) {
50
+ throw new Error(`Unknown agent "${agentKey}". Supported agents:\n${supportedList()}`);
51
+ }
52
+ const projectRoot = process.cwd();
53
+ const configPath = agent.configPath(projectRoot);
54
+ // Read the existing config, if any — other MCP servers in it must survive.
55
+ let config = {};
56
+ if (existsSync(configPath)) {
57
+ const raw = readFileSync(configPath, "utf8");
58
+ try {
59
+ config = JSON.parse(raw);
60
+ }
61
+ catch (error) {
62
+ throw new Error(`${configPath} exists but is not valid JSON ` +
63
+ `(${error instanceof Error ? error.message : String(error)}). ` +
64
+ `Not touching it — fix the file first, then re-run sentinel connect ${agent.key}.`);
65
+ }
66
+ if (config === null || typeof config !== "object" || Array.isArray(config)) {
67
+ throw new Error(`${configPath} does not contain a JSON object — not touching it. ` +
68
+ `Fix the file first, then re-run sentinel connect ${agent.key}.`);
69
+ }
70
+ }
71
+ const servers = (config.mcpServers ??= {});
72
+ if (typeof servers !== "object" || Array.isArray(servers)) {
73
+ throw new Error(`${configPath} has a non-object "mcpServers" field — not touching it.`);
74
+ }
75
+ const existing = "sentinel" in servers;
76
+ const otherServers = Object.keys(servers).filter((name) => name !== "sentinel");
77
+ const entry = sentinelEntry(projectRoot);
78
+ servers.sentinel = entry;
79
+ mkdirSync(dirname(configPath), { recursive: true });
80
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
81
+ console.log(`${existing ? "Updated" : "Added"} the sentinel entry in ${agent.displayName}'s MCP config:`);
82
+ console.log(` ${configPath}`);
83
+ if (otherServers.length > 0) {
84
+ console.log(` (${otherServers.length} other MCP server(s) in that file were left untouched: ${otherServers.join(", ")})`);
85
+ }
86
+ console.log("\nEntry written:");
87
+ console.log(JSON.stringify({ sentinel: entry }, null, 2)
88
+ .split("\n")
89
+ .map((line) => " " + line)
90
+ .join("\n"));
91
+ console.log(`\nProject root: ${projectRoot}`);
92
+ console.log(agent.restartHint);
93
+ if (agent.scope === "user") {
94
+ console.log(`Note: ${agent.displayName}'s config is global, so sentinel is pinned to this project. ` +
95
+ `Run sentinel connect ${agent.key} from a different project to repoint it.`);
96
+ }
97
+ }
98
+ //# sourceMappingURL=connect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../src/cli/commands/connect.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,7 @@ import { runTestStyle } from "./commands/testStyle.js";
9
9
  import { startMcpServer } from "../mcp/server.js";
10
10
  import { startDashboard, DEFAULT_DASHBOARD_PORT } from "../dashboard/server.js";
11
11
  import { runInstallHook, runUninstallHook, runHook } from "./commands/hook.js";
12
+ import { runConnect, runConnectList } from "./commands/connect.js";
12
13
  import { SENTINEL_VERSION } from "../version.js";
13
14
  const program = new Command();
14
15
  program
@@ -67,6 +68,18 @@ program
67
68
  }
68
69
  startDashboard(process.cwd(), port);
69
70
  });
71
+ program
72
+ .command("connect")
73
+ .description("Register Sentinel in a coding agent's MCP config (run from your project root).")
74
+ .argument("[agent]", "Which agent to connect: claude-code, cursor, antigravity.")
75
+ .option("--list", "Show all supported agents and their config file locations.")
76
+ .action((agent, options) => {
77
+ if (options.list || !agent) {
78
+ runConnectList();
79
+ return;
80
+ }
81
+ runConnect(agent);
82
+ });
70
83
  program
71
84
  .command("install-hook")
72
85
  .description("Install a git pre-commit hook that checks staged changes before every commit.")
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Purpose: single source of truth for Sentinel's version, used by the CLI and the MCP server.
2
- export const SENTINEL_VERSION = "1.0.1";
2
+ export const SENTINEL_VERSION = "1.1.0";
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sentinel-verify",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "A fully local, open-source verification layer for AI coding agents. Plugs into any MCP-compatible agent and lets it self-check its work before a human sees it.",
5
5
  "type": "module",
6
6
  "license": "MIT",