@getmarrow/install 0.1.14 → 0.1.16
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 +23 -4
- package/package.json +1 -1
- package/src/governed-runner.js +19 -6
package/README.md
CHANGED
|
@@ -11,11 +11,22 @@ npx @getmarrow/install --repair
|
|
|
11
11
|
npx @getmarrow/install doctor
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
+
## What's New in v0.1.16
|
|
15
|
+
|
|
16
|
+
v0.1.16 expands the Govern TUI harness addon coverage while preserving adaptive mode recommendations.
|
|
17
|
+
|
|
18
|
+
- `npx @getmarrow/install govern` now shows first-class rows for Codex, Claude Code, Cursor, Gemini CLI, Grok CLI, DeepSeek CLI, Hermes, GLM CLI, Qwen CLI, OpenCode, OpenClaw, MCP-compatible clients, CI scripts, and custom commands.
|
|
19
|
+
- Marrow remains a thin governance layer. It does not replace your model or harness; it wraps the command your agent already runs with pre-action risk gates, proof requirements, and automatic outcome closure.
|
|
20
|
+
- Detection stays recommendation-first. Marrow uses local config, instruction, CI, and MCP markers to suggest the safest path, then the user or owner accepts, overrides, or saves a policy profile.
|
|
21
|
+
- If a harness is not detected yet, use **Custom command** or `npx @getmarrow/install run -- <your-agent-command>` to govern it immediately.
|
|
22
|
+
|
|
23
|
+
Business value: teams can add Marrow to the agent stack they already use instead of migrating to a new agent host. Codex, Claude Code, Cursor, Gemini, Grok, DeepSeek, Hermes, GLM, Qwen, OpenClaw, OpenCode, MCP clients, and CI scripts can all be brought under the same governance loop.
|
|
24
|
+
|
|
14
25
|
## What's New in v0.1.14
|
|
15
26
|
|
|
16
27
|
v0.1.14 adds adaptive governance mode recommendations without silent auto-switching.
|
|
17
28
|
|
|
18
|
-
- `npx @getmarrow/install govern` now detects project signals such as `package.json`, deploy/publish scripts,
|
|
29
|
+
- `npx @getmarrow/install govern` now detects project signals such as `package.json`, deploy/publish scripts, platform config files, GitHub workflows, migrations, Cursor/Codex/Claude files, and MCP config.
|
|
19
30
|
- When `MARROW_API_KEY` is present, the TUI asks Marrow for a recommended mode: `passive`, `pilot`, or `enforce`.
|
|
20
31
|
- The TUI shows the exact reasons, confidence, and selected command before the user applies anything.
|
|
21
32
|
- User choice is explicit. Marrow logs whether the recommendation was accepted or overridden, but it does not silently switch modes.
|
|
@@ -27,7 +38,7 @@ Example recommendation:
|
|
|
27
38
|
Recommended mode: pilot
|
|
28
39
|
Reason:
|
|
29
40
|
- Node project detected
|
|
30
|
-
-
|
|
41
|
+
- Edge service detected
|
|
31
42
|
- GitHub workflow detected
|
|
32
43
|
- No owner approval policy configured yet
|
|
33
44
|
```
|
|
@@ -82,7 +93,7 @@ MARROW_API_KEY=mrw_live_xxx npx @getmarrow/install run --agent codex-prod --prof
|
|
|
82
93
|
Gate a production action before the agent executes it:
|
|
83
94
|
|
|
84
95
|
```bash
|
|
85
|
-
MARROW_API_KEY=mrw_live_xxx npx @getmarrow/install gate "deploy production
|
|
96
|
+
MARROW_API_KEY=mrw_live_xxx npx @getmarrow/install gate "deploy production service after tests pass"
|
|
86
97
|
```
|
|
87
98
|
|
|
88
99
|
Wrap a real deploy, publish, merge, or migration command only after the agent has the required proof:
|
|
@@ -93,7 +104,7 @@ MARROW_API_KEY=mrw_live_xxx npx @getmarrow/install run \
|
|
|
93
104
|
--type deploy \
|
|
94
105
|
--profile production \
|
|
95
106
|
--policy enforce \
|
|
96
|
-
--
|
|
107
|
+
-- npm run deploy
|
|
97
108
|
```
|
|
98
109
|
|
|
99
110
|
Use `--policy warn` for pilot mode and `--fail-open` only for non-production local workflows where Marrow should never block execution.
|
|
@@ -159,10 +170,18 @@ Marrow should answer with `proceed`, `warn`, `block`, or `owner_approval_require
|
|
|
159
170
|
- Codex/agent instruction files such as `AGENTS.md`
|
|
160
171
|
- Claude Code settings and hooks
|
|
161
172
|
- Cursor project folders
|
|
173
|
+
- Gemini, Grok, DeepSeek, Hermes, GLM, and Qwen project marker files when present
|
|
162
174
|
- MCP config files
|
|
175
|
+
- CI workflow/script markers
|
|
163
176
|
- Node projects
|
|
164
177
|
- Python projects
|
|
165
178
|
|
|
179
|
+
The detector is intentionally conservative. If Marrow cannot identify the harness from local files, it still supports the workflow through the custom command path:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
MARROW_API_KEY=mrw_live_xxx npx @getmarrow/install run --agent research-agent -- <your-agent-command>
|
|
183
|
+
```
|
|
184
|
+
|
|
166
185
|
## Install Modes
|
|
167
186
|
|
|
168
187
|
```bash
|
package/package.json
CHANGED
package/src/governed-runner.js
CHANGED
|
@@ -568,14 +568,26 @@ async function statusOnly(parsed) {
|
|
|
568
568
|
return requestJson(parsed.options, 'GET', '/v1/agent/status');
|
|
569
569
|
}
|
|
570
570
|
|
|
571
|
+
function existsAny(paths) {
|
|
572
|
+
return paths.some((candidate) => fs.existsSync(candidate));
|
|
573
|
+
}
|
|
574
|
+
|
|
571
575
|
function detectHarnesses(cwd = process.cwd()) {
|
|
576
|
+
const home = os.homedir();
|
|
572
577
|
const candidates = [
|
|
573
|
-
{ name: 'Codex', command: 'codex', detected:
|
|
574
|
-
{ name: 'Claude Code', command: 'claude -p', detected:
|
|
575
|
-
{ name: 'Cursor', command: 'cursor', detected:
|
|
576
|
-
{ name: '
|
|
577
|
-
{ name: '
|
|
578
|
-
{ name: '
|
|
578
|
+
{ name: 'Codex', command: 'codex', detected: existsAny([path.join(cwd, 'AGENTS.md'), path.join(cwd, '.codex'), path.join(home, '.codex')]) },
|
|
579
|
+
{ name: 'Claude Code', command: 'claude -p', detected: existsAny([path.join(cwd, 'CLAUDE.md'), path.join(cwd, '.claude'), path.join(home, '.claude.json')]) },
|
|
580
|
+
{ name: 'Cursor', command: 'cursor', detected: existsAny([path.join(cwd, '.cursor'), path.join(cwd, '.cursor', 'mcp.json'), path.join(cwd, '.cursor', 'rules'), path.join(home, '.cursor')]) },
|
|
581
|
+
{ name: 'Gemini CLI', command: 'gemini', detected: existsAny([path.join(cwd, 'GEMINI.md'), path.join(cwd, '.gemini'), path.join(home, '.gemini')]) },
|
|
582
|
+
{ name: 'Grok CLI', command: 'grok', detected: existsAny([path.join(cwd, 'GROK.md'), path.join(cwd, '.grok'), path.join(home, '.grok')]) },
|
|
583
|
+
{ name: 'DeepSeek CLI', command: 'deepseek', detected: existsAny([path.join(cwd, 'DEEPSEEK.md'), path.join(cwd, '.deepseek'), path.join(home, '.deepseek')]) },
|
|
584
|
+
{ name: 'Hermes', command: 'hermes', detected: existsAny([path.join(cwd, 'HERMES.md'), path.join(cwd, 'hermes.json'), path.join(cwd, '.hermes'), path.join(home, '.hermes')]) },
|
|
585
|
+
{ name: 'GLM CLI', command: 'glm', detected: existsAny([path.join(cwd, 'GLM.md'), path.join(cwd, '.glm'), path.join(home, '.glm')]) },
|
|
586
|
+
{ name: 'Qwen CLI', command: 'qwen', detected: existsAny([path.join(cwd, 'QWEN.md'), path.join(cwd, '.qwen'), path.join(home, '.qwen')]) },
|
|
587
|
+
{ name: 'OpenCode', command: 'opencode', detected: existsAny([path.join(cwd, 'opencode.json'), path.join(cwd, '.opencode'), path.join(home, '.opencode')]) },
|
|
588
|
+
{ name: 'OpenClaw', command: 'openclaw agent', detected: existsAny([path.join(cwd, 'openclaw.json'), path.join(home, '.openclaw')]) },
|
|
589
|
+
{ name: 'MCP-compatible client', command: '<mcp-client>', detected: existsAny([path.join(cwd, '.mcp.json'), path.join(cwd, '.cursor', 'mcp.json'), path.join(cwd, '.claude', 'settings.json')]) },
|
|
590
|
+
{ name: 'CI scripts', command: 'npm test', detected: existsAny([path.join(cwd, '.github', 'workflows'), path.join(cwd, '.gitlab-ci.yml'), path.join(cwd, 'package.json')]) },
|
|
579
591
|
{ name: 'Custom command', command: '<your-agent-command>', detected: true },
|
|
580
592
|
];
|
|
581
593
|
return candidates;
|
|
@@ -1001,6 +1013,7 @@ module.exports = {
|
|
|
1001
1013
|
inferSurfaces,
|
|
1002
1014
|
commandForSelection,
|
|
1003
1015
|
buildGovernState,
|
|
1016
|
+
detectHarnesses,
|
|
1004
1017
|
detectProjectSignals,
|
|
1005
1018
|
recommendGovernanceMode,
|
|
1006
1019
|
recordGovernanceModeSelection,
|