Show HN: Marrow AI – a no-account seatbelt that stops force-pushes to main Marrow AI released a no-account "keyless seatbelt" in version 3.9.103 of its @getmarrow/mcp server that stops seven kinds of risky action, including force-pushes to main, for users of its Claude Code and Cursor plugins. The plugins are installed from the getmarrow/plugins marketplace and require Node.js 18 or later on PATH; the Codex plugins pin the older @getmarrow/mcp 3.9.102 and do not yet include the keyless seatbelt. Marrow's hooks do not work on native Windows, where every action is blocked, and Cursor cannot install its plugin yet, though a one-click MCP-only link is available. The getmarrow marketplace for Claude Code, Cursor and Codex. Each host's marrow plugin adds Marrow's approval hooks, the Marrow MCP server and a short skill to that host. Codex also has marrow-advisory , with no hooks. Cursor cannot install its plugin yet: see "Install in Cursor" below. | Host | Plugin folder | Marketplace file | |---|---|---| | Claude Code | plugins/marrow | .claude-plugin/marketplace.json | | Cursor | plugins/marrow-cursor | .cursor-plugin/marketplace.json | | Codex | codex/marrow hooks , codex/marrow-advisory no hooks; install one of the two, not both | .agents/plugins/marketplace.json | Each plugin governs its own host only. The Claude Code plugin does not govern Cursor, even where Cursor imports Claude Code plugins: Cursor users will install the Cursor plugin once it can be installed see "Install in Cursor" below . The Claude Code and Cursor plugins run @getmarrow/mcp 3.9.103, which includes the free keyless seatbelt: with no account and no key, their hooks stop seven kinds of action see "Without a key: the keyless seatbelt" below . With an account, Marrow holds risky actions for approval and keeps the audit trail. The Codex plugins pin @getmarrow/mcp 3.9.102 and do not include the keyless seatbelt; it comes to them with the next update. Windows: Marrow's hooks do not work on native Windows yet: every action is blocked. Use WSL, or wait for the fix. In Claude Code: /plugin marketplace add getmarrow/plugins /plugin install marrow@getmarrow Or from your shell, in one command Claude Code v2.1.292 or later : claude plugin install marrow --marketplace getmarrow/plugins No account or key is needed to install. Claude Code shows what the plugin adds before you confirm. If it asks, run /reload-plugins . The hooks and MCP server need Node.js 18 or later on PATH , as Marrow's npx hooks do today. Check that claude plugin marketplace list shows getmarrow coming from getmarrow/plugins , and that claude plugin list shows exactly one marrow@... plugin. Not available yet: Cursor cannot install this plugin today, from its marketplace or from this repository. We will update this section when it can. Only the MCP server, without hooks, is a one-click link a page renders it as a link or an "Add to Cursor" button : cursor://anysphere.cursor-deeplink/mcp/install?name=marrow&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIi0tcGFja2FnZT1AZ2V0bWFycm93L21jcEAzLjkuMTAzIiwibWFycm93LW1jcCJdfQ== The config value is base64 of {"command":"npx","args": "-y","--package=@getmarrow/mcp@3.9.103","marrow-mcp" } , pinned, with no key and no env . The MCP server alone is advisory: approvals are enforced only by the plugin's hooks. Unlike the plugin, the link starts the server through npx , which can pick up a copy of @getmarrow/mcp that a project's node modules claims at the same version. Prefer the plugin. | Component | Claude Code plugins/marrow | Cursor plugins/marrow-cursor | |---|---|---| | Hooks | UserPromptSubmit , PreToolUse , PostToolUse , PostToolUseFailure , Stop , and the async PermissionRequest and PostToolBatch hooks: the events npx @getmarrow/install writes into .claude/settings.json . Their tool matcher sends Marrow every tool call the installer's matcher does, and skips only this plugin's own 17 Marrow tools by exact name. A warn-only SessionStart check says when Marrow is also set up outside the plugin or another plugin named marrow is enabled. | The ten hooks npx @getmarrow/install 0.1.70 writes into .cursor/hooks.json : preToolUse , beforeShellExecution and beforeMCPExecution 15 s, failClosed , postToolUse , postToolUseFailure , afterShellExecution , afterMCPExecution , stop , sessionStart and beforeSubmitPrompt , with the installer's matchers byte for byte. | | MCP server | .mcp.json : server marrow . Its tools are on demand. | mcp.json : server marrow . Its tools are on demand. | | Skill | skills/marrow : when to call Marrow, holds and approvals, the key step, update commands. | skills/marrow : the same rules for Cursor. | Both run the pinned @getmarrow/mcp 3.9.103 entrypoints, the same ones the installer writes, through the same launcher. The plugins add no policy of their own. Hooks are cooperative, client-reported control. They act only while the plugin is enabled and the host runs them. A configured hook never proves coverage or enforcement on its own. Hook commands. Every hook command is one string that names the plugin root variable and the entrypoint inline node "${CLAUDE PLUGIN ROOT}/scripts/marrow-launch.cjs" claude-pre-action-hook , node "${CURSOR PLUGIN ROOT}/scripts/marrow-launch.cjs" cursor-pre-action-hook , ${PLUGIN ROOT} on Codex . None is relative to your project and none relies on separate args , which a host that imports the plugin may drop. The launcher starts the MCP server only for the explicit mcp argument in the plugin's MCP config; started with no argument it refuses exit 2 and starts nothing. tools/check.cjs enforces both. Cursor: how Marrow's own tools are told apart. Cursor's preToolUse names an MCP tool MCP: