@clipboard-health/groundcrew 4.46.5 → 4.46.6
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 +5 -5
- package/clearance-allow-hosts +6 -0
- package/crew.config.example.ts +12 -5
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +13 -4
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -3
- package/dist/lib/adapters/todo-txt/source.d.ts.map +1 -1
- package/dist/lib/adapters/todo-txt/source.js +3 -0
- package/dist/lib/config.d.ts +4 -4
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +34 -0
- package/dist/lib/srtPolicy.d.ts +3 -1
- package/dist/lib/srtPolicy.d.ts.map +1 -1
- package/dist/lib/srtPolicy.js +30 -2
- package/docs/commands.md +1 -1
- package/docs/configuration.md +4 -4
- package/docs/runners.md +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -22,11 +22,11 @@ Groundcrew watches assigned tasks, creates isolated worktrees, launches agent CL
|
|
|
22
22
|
## Why
|
|
23
23
|
|
|
24
24
|
- **Local.** Agents run on your machine with your tools, shell, and credentials. That makes them more steerable than remote agents, and easy to nudge when they drift.
|
|
25
|
-
- **Interactive.** Each task launches the real `claude` or `
|
|
25
|
+
- **Interactive.** Each task launches the real `claude`, `codex`, or `cursor-agent` CLI in its own terminal pane, not a wrapper that approximates it. Watch any session live and take over when you need to.
|
|
26
26
|
- **One worktree per task.** Agents work in parallel without stepping on each other.
|
|
27
27
|
- **Sandboxed by default.** Safehouse or Docker Sandboxes isolate each agent on the host; `none` is an explicit escape hatch.
|
|
28
28
|
- **Pluggable task sources.** Linear by default; Jira and local files via [task sources](./docs/task-sources.md).
|
|
29
|
-
- **Multi-agent routing.** Ships `claude` and `
|
|
29
|
+
- **Multi-agent routing.** Ships `claude`, `codex`, and `cursor` (plus a `cursor-grok` variant) presets; bring your own CLI in config.
|
|
30
30
|
|
|
31
31
|
## Prerequisites
|
|
32
32
|
|
|
@@ -35,7 +35,7 @@ Groundcrew watches assigned tasks, creates isolated worktrees, launches agent CL
|
|
|
35
35
|
- **Node >= 24:** [nvm](https://github.com/nvm-sh/nvm): `nvm install 24`.
|
|
36
36
|
- **git:** e.g., `brew install git`, `apt install git`.
|
|
37
37
|
- **A terminal multiplexer:** [tmux](https://github.com/tmux/tmux/wiki/Installing) (cross-platform), [cmux](https://cmux.com/) (macOS), or [zellij](https://zellij.dev/).
|
|
38
|
-
- **An agent CLI:** [Claude Code](https://code.claude.com/docs/en/quickstart)
|
|
38
|
+
- **An agent CLI:** [Claude Code](https://code.claude.com/docs/en/quickstart), [Codex](https://developers.openai.com/codex/quickstart?setup=cli), and/or the [Cursor CLI](https://docs.cursor.com/en/cli/overview) (`cursor-agent`, for the `cursor` and `cursor-grok` presets).
|
|
39
39
|
- **A sandbox runner:** [Docker Sandboxes](https://docs.docker.com/ai/sandboxes/) (cross-platform) or [Safehouse](https://agent-safehouse.dev/) on macOS. Skip only with `--runner none`.
|
|
40
40
|
|
|
41
41
|
## Quickstart
|
|
@@ -61,7 +61,7 @@ crew doctor
|
|
|
61
61
|
crew run --watch
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
`crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos. `--agent claude
|
|
64
|
+
`crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos. `--agent claude`, `--agent codex`, or `--agent cursor` chooses the single built-in agent preset to enable in the generated config.
|
|
65
65
|
|
|
66
66
|
## Task Pickup
|
|
67
67
|
|
|
@@ -93,7 +93,7 @@ Write tasks as complete agent instructions: the goal, the context and constraint
|
|
|
93
93
|
```bash
|
|
94
94
|
crew init [--global | --local] [--force] [--dry-run] # create a crew.config.ts
|
|
95
95
|
[--project-dir <dir>] [--repo <repo>]...
|
|
96
|
-
[--runner <auto|safehouse|sdx|none>] [--agent <claude|codex>]
|
|
96
|
+
[--runner <auto|safehouse|sdx|none>] [--agent <claude|codex|cursor>]
|
|
97
97
|
crew doctor # check setup
|
|
98
98
|
crew source list|verify [<source>] # inspect configured task sources
|
|
99
99
|
crew task list [--source <name>] # list tasks across sources
|
package/clearance-allow-hosts
CHANGED
|
@@ -17,6 +17,12 @@ docs.claude.com
|
|
|
17
17
|
downloads.claude.ai
|
|
18
18
|
platform.claude.com
|
|
19
19
|
|
|
20
|
+
# Cursor (cursor-agent: composer, grok models). Wildcard covers the numbered API hosts
|
|
21
|
+
# (api2, api2direct, api3, repo42, ...) the CLI rotates through.
|
|
22
|
+
*.cursor.sh
|
|
23
|
+
cursor.com
|
|
24
|
+
www.cursor.com
|
|
25
|
+
|
|
20
26
|
# Hosted MCP servers + their auth/web hosts
|
|
21
27
|
api.linear.app
|
|
22
28
|
api.notion.com
|
package/crew.config.example.ts
CHANGED
|
@@ -64,12 +64,15 @@ export default {
|
|
|
64
64
|
default: "claude",
|
|
65
65
|
// `definitions` is the enabled launch profile set. Built-in keys can use
|
|
66
66
|
// `{}` to opt into the shipped command/color/usage preset. Add
|
|
67
|
-
// `codex: {}`
|
|
68
|
-
//
|
|
69
|
-
//
|
|
67
|
+
// `codex: {}`, `cursor: {}`, or `"cursor-grok": {}` for the other shipped
|
|
68
|
+
// agents (`cursor` runs Cursor's composer-2.5, `cursor-grok` runs grok-4.5).
|
|
69
|
+
// Agent names are launch profiles: add custom entries such as `claude-fable`
|
|
70
|
+
// or `claude-opus` to pin a model per task, then tag tasks with `agent-<name>`.
|
|
70
71
|
definitions: {
|
|
71
72
|
claude: {},
|
|
72
73
|
// codex: {},
|
|
74
|
+
// cursor: {},
|
|
75
|
+
// "cursor-grok": {},
|
|
73
76
|
// "claude-fable": {
|
|
74
77
|
// cmd: "claude --model claude-fable-5 --permission-mode auto",
|
|
75
78
|
// color: "#C15F3C",
|
|
@@ -80,9 +83,13 @@ export default {
|
|
|
80
83
|
// color: "#8A4FFF",
|
|
81
84
|
// usage: { codexbar: { provider: "claude" } },
|
|
82
85
|
// },
|
|
86
|
+
// The cursor/cursor-grok presets bypass Cursor's approval prompts for
|
|
87
|
+
// unattended runs: `--force` auto-approves shell/tool commands (unless
|
|
88
|
+
// explicitly denied) and `--approve-mcps` auto-approves MCP servers. To
|
|
89
|
+
// require approvals instead, override cmd without those flags:
|
|
83
90
|
// cursor: {
|
|
84
|
-
// cmd: "cursor-agent",
|
|
85
|
-
// color: "#
|
|
91
|
+
// cmd: "cursor-agent --model composer-2.5 --sandbox disabled",
|
|
92
|
+
// color: "#8B5CF6",
|
|
86
93
|
// },
|
|
87
94
|
},
|
|
88
95
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiRH,wBAAsB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAuF/C"}
|
package/dist/commands/doctor.js
CHANGED
|
@@ -15,7 +15,16 @@ import { resolveWorkspaceKind } from "../lib/workspaces.js";
|
|
|
15
15
|
// Tokenization stops after this many non-flag tokens. Two is enough to
|
|
16
16
|
// catch wrapper + wrapped CLI commands like `safehouse claude --foo`.
|
|
17
17
|
const MAX_TOKENS_PER_CMD = 2;
|
|
18
|
-
const BUILT_IN_AGENT_NAMES = ["claude", "codex"];
|
|
18
|
+
const BUILT_IN_AGENT_NAMES = ["claude", "codex", "cursor", "cursor-grok"];
|
|
19
|
+
// Primary CLI binary probed on PATH for each built-in agent. Usually equal to
|
|
20
|
+
// the agent name, but the cursor and cursor-grok presets both launch Cursor's
|
|
21
|
+
// `cursor-agent`, so the missing-CLI hint must key on the binary, not the name.
|
|
22
|
+
const BUILT_IN_AGENT_BINARIES = {
|
|
23
|
+
claude: "claude",
|
|
24
|
+
codex: "codex",
|
|
25
|
+
cursor: "cursor-agent",
|
|
26
|
+
"cursor-grok": "cursor-agent",
|
|
27
|
+
};
|
|
19
28
|
const CONFIG_SOURCE_LABELS = {
|
|
20
29
|
env: "GROUNDCREW_CONFIG",
|
|
21
30
|
project: "project",
|
|
@@ -202,16 +211,16 @@ function gatherToolTargets(config) {
|
|
|
202
211
|
return [...all].map(([token, hint]) => (hint === undefined ? { token } : { token, hint }));
|
|
203
212
|
}
|
|
204
213
|
function agentCliHint(agentName, token) {
|
|
205
|
-
if (
|
|
214
|
+
if (!isBuiltInAgentName(agentName)) {
|
|
206
215
|
return undefined;
|
|
207
216
|
}
|
|
208
|
-
if (
|
|
217
|
+
if (token !== BUILT_IN_AGENT_BINARIES[agentName]) {
|
|
209
218
|
return undefined;
|
|
210
219
|
}
|
|
211
220
|
return `install ${token} or remove \`agents.definitions.${agentName}\` from crew.config.ts`;
|
|
212
221
|
}
|
|
213
222
|
function isBuiltInAgentName(value) {
|
|
214
|
-
return value
|
|
223
|
+
return BUILT_IN_AGENT_NAMES.includes(value);
|
|
215
224
|
}
|
|
216
225
|
function format(check) {
|
|
217
226
|
let tag;
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* `cp` dance documented in the README.
|
|
6
6
|
*/
|
|
7
7
|
import { type LocalRunnerSetting } from "../lib/config.ts";
|
|
8
|
-
declare const INIT_AGENTS: readonly ["claude", "codex"];
|
|
8
|
+
declare const INIT_AGENTS: readonly ["claude", "codex", "cursor"];
|
|
9
9
|
type InitConfigScope = "global" | "local";
|
|
10
10
|
type InitAgent = (typeof INIT_AGENTS)[number];
|
|
11
11
|
interface InitConfigOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAYlF,QAAA,MAAM,WAAW,YAAI,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAU,CAAC;AAE3D,KAAK,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC1C,KAAK,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9C,UAAU,iBAAiB;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,yCAAyC;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,KAAK,iBAAiB,GAAG,qBAAqB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEpE,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAoB5E;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAWjE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -13,8 +13,10 @@ import { xdgConfigPath } from "../lib/xdg.js";
|
|
|
13
13
|
const CONFIG_FILE_NAME = "crew.config.ts";
|
|
14
14
|
const EXAMPLE_FILE_NAME = "crew.config.example.ts";
|
|
15
15
|
const DEFAULT_EXAMPLE_PROJECT_DIR = "~/dev/groundcrew";
|
|
16
|
-
const INIT_USAGE = "Usage: crew init [--global | --local] [--force] [--dry-run] [--project-dir <dir>] [--repo <owner/repo>]... [--runner <auto|safehouse|sdx|none>] [--agent <claude|codex>]";
|
|
17
|
-
|
|
16
|
+
const INIT_USAGE = "Usage: crew init [--global | --local] [--force] [--dry-run] [--project-dir <dir>] [--repo <owner/repo>]... [--runner <auto|safehouse|sdx|none>] [--agent <claude|codex|cursor>]";
|
|
17
|
+
// Model-variant presets with hyphens (e.g. `cursor-grok`) are enabled via
|
|
18
|
+
// config, not `init`: renderConfig would emit an unquoted, invalid TS key.
|
|
19
|
+
const INIT_AGENTS = ["claude", "codex", "cursor"];
|
|
18
20
|
export function initConfig(options = {}) {
|
|
19
21
|
const scope = options.scope ?? "local";
|
|
20
22
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -147,7 +149,7 @@ function isLocalRunnerSetting(value) {
|
|
|
147
149
|
return value === "auto" || value === "safehouse" || value === "sdx" || value === "none";
|
|
148
150
|
}
|
|
149
151
|
function isInitAgent(value) {
|
|
150
|
-
return value === "claude" || value === "codex";
|
|
152
|
+
return value === "claude" || value === "codex" || value === "cursor";
|
|
151
153
|
}
|
|
152
154
|
function tsString(value) {
|
|
153
155
|
return JSON.stringify(value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/todo-txt/source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/todo-txt/source.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA8WxD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,cAAc,GACtB,UAAU,CA2KZ"}
|
|
@@ -48,6 +48,7 @@ function readAndParseTodo(todoPath) {
|
|
|
48
48
|
content = readFileSync(todoPath, "utf8");
|
|
49
49
|
}
|
|
50
50
|
catch (error) {
|
|
51
|
+
/* v8 ignore next @preserve -- unreadable-file tests cover this; full-suite V8 coverage remaps the branch inconsistently. */
|
|
51
52
|
if (!isFileErrorCode(error, "ENOENT")) {
|
|
52
53
|
throw todoFileAccessError("read", todoPath, error);
|
|
53
54
|
}
|
|
@@ -273,7 +274,9 @@ function appendTodoLine(todoPath, line) {
|
|
|
273
274
|
}
|
|
274
275
|
appendFileSync(todoPath, `${separator}${line}\n`, "utf8");
|
|
275
276
|
}
|
|
277
|
+
/* v8 ignore next @preserve -- createTask tests cover prompt writes; full-suite V8 coverage remaps this helper inconsistently. */
|
|
276
278
|
function writePromptFile(promptPath, content) {
|
|
279
|
+
/* v8 ignore next @preserve -- createTask tests cover prompt writes; full-suite V8 coverage remaps this line inconsistently. */
|
|
277
280
|
mkdirSync(path.dirname(promptPath), { recursive: true });
|
|
278
281
|
writeFileSync(promptPath, content.endsWith("\n") ? content : `${content}\n`, "utf8");
|
|
279
282
|
}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -250,10 +250,10 @@ export interface Config {
|
|
|
250
250
|
agents?: {
|
|
251
251
|
default?: string;
|
|
252
252
|
/**
|
|
253
|
-
* Explicit enabled agent set. Built-in keys (`claude`, `codex`
|
|
254
|
-
* their presets, so `{ claude: {} }` enables
|
|
255
|
-
* command/color/usage. Brand-new agent names must
|
|
256
|
-
* satisfy `validate()`.
|
|
253
|
+
* Explicit enabled agent set. Built-in keys (`claude`, `codex`, `cursor`,
|
|
254
|
+
* `cursor-grok`) merge over their presets, so `{ claude: {} }` enables
|
|
255
|
+
* Claude with the shipped command/color/usage. Brand-new agent names must
|
|
256
|
+
* supply enough fields to satisfy `validate()`.
|
|
257
257
|
*/
|
|
258
258
|
definitions?: Record<string, UserAgentDefinition>;
|
|
259
259
|
};
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAO1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,oBAAoB,CAAC;AAEzB,MAAM,WAAW,YAAY;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvE,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAKzD,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,MAAM,CAAC;AAEtD,eAAO,MAAM,qBAAqB,EAAE,SAAS,kBAAkB,EAMrD,CAAC;AAEX;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG,MAAM,CAAC;AAE1D,eAAO,MAAM,uBAAuB,EAAE,SAAS,oBAAoB,EAGzD,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KACjD,CAAC;IACF;;;;OAIG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,KAAK,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,CAAC;AAC/D,KAAK,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,GAAG;IAC1E,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AACF,KAAK,mBAAmB,GAAG,0BAA0B,CAAC;AAEtD;;;;;;;;;GASG;AACH;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,oFAAoF;IACpF,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,2HAA2H;IAC3H,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE;QACJ,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB;;;;WAIG;QACH,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB;;;WAGG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,EAAE,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;KACpD,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,wBAAwB,CAAC,EAAE,MAAM,CAAC;QAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;KACnD,CAAC;IACF,OAAO,CAAC,EAAE;QACR,mEAAmE;QACnE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;WAIG;QACH,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;OAIG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC;;;;OAIG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAC5B;;;;;WAKG;QACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;QACrC;;;WAGG;QACH,SAAS,CAAC,EAAE;YACV;;;;;;;;;;eAUG;YACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;QACF;;;;;WAKG;QACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,OAAO,CAAC,EAAE;QACR;;;;;WAKG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;OAKG;IACH,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,GAAG,EAAE;QACH,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,EAAE;QACT,UAAU,EAAE,MAAM,CAAC;QACnB,4DAA4D;QAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,0EAA0E;QAC1E,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,6EAA6E;QAC7E,YAAY,EAAE,eAAe,EAAE,CAAC;QAChC,8EAA8E;QAC9E,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,YAAY,CAAC;KACrB,CAAC;IACF,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,wBAAwB,EAAE,MAAM,CAAC;QACjC,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC9C,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF;;;OAGG;IACH,aAAa,EAAE,oBAAoB,CAAC;IACpC;;;;OAIG;IACH,KAAK,EAAE;QACL,MAAM,EAAE,kBAAkB,CAAC;QAC3B;;;WAGG;QACH,aAAa,EAAE,oBAAoB,CAAC;QACpC;;;WAGG;QACH,SAAS,EAAE;YACT,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;SAC3B,CAAC;QACF,sFAAsF;QACtF,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC;IACF,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACjC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -92,6 +92,40 @@ const BUILT_IN_AGENT_DEFINITIONS = {
|
|
|
92
92
|
usage: { codexbar: { provider: "codex" } },
|
|
93
93
|
resumeArgs: "resume --last",
|
|
94
94
|
},
|
|
95
|
+
cursor: {
|
|
96
|
+
// Cursor's `cursor-agent` CLI running its composer-2.5 model. Unattended
|
|
97
|
+
// groundcrew runs cannot answer approval prompts, so `--force` auto-approves
|
|
98
|
+
// shell/tool commands (unless explicitly denied) and `--approve-mcps`
|
|
99
|
+
// auto-approves MCP servers (a separate gate). `--sandbox disabled` hands
|
|
100
|
+
// isolation to the groundcrew runner (mirroring codex's bypass), so the
|
|
101
|
+
// runner stays the sole boundary rather than nesting Cursor's own sandbox.
|
|
102
|
+
// Drop `--force`/`--approve-mcps` in your config to restore approval prompts.
|
|
103
|
+
//
|
|
104
|
+
// Flag order matters for `crew doctor`: its PATH-probe tokenizer assumes
|
|
105
|
+
// every flag consumes the next token as its value, so the valueless boolean
|
|
106
|
+
// flags (`--force`, `--approve-mcps`) must come last. With them trailing, the
|
|
107
|
+
// tokenizer resolves the command to `cursor-agent` alone instead of probing
|
|
108
|
+
// a phantom `disabled`.
|
|
109
|
+
cmd: "cursor-agent --model composer-2.5 --sandbox disabled --force --approve-mcps",
|
|
110
|
+
color: "#8B5CF6",
|
|
111
|
+
// No `usage`: codexbar has no Cursor provider, so cursor runs without
|
|
112
|
+
// session-limit gating. `usage` is optional on AgentDefinition, so a
|
|
113
|
+
// usage-less built-in validates and merges cleanly.
|
|
114
|
+
resumeArgs: "--continue",
|
|
115
|
+
},
|
|
116
|
+
"cursor-grok": {
|
|
117
|
+
// The same Cursor `cursor-agent` CLI as the `cursor` preset, but running
|
|
118
|
+
// Grok 4.5 instead of composer-2.5. Cursor labels `grok-4.5-xhigh` as the
|
|
119
|
+
// plain "Grok 4.5"; swap in a `-fast`/lower-effort variant (e.g.
|
|
120
|
+
// grok-4.5-fast-high) to trade quality for latency. Same
|
|
121
|
+
// `--sandbox disabled --force --approve-mcps` posture and trailing-boolean
|
|
122
|
+
// flag ordering as the `cursor` preset (see it for why order matters to
|
|
123
|
+
// `crew doctor`, and how to restore approval prompts).
|
|
124
|
+
cmd: "cursor-agent --model grok-4.5-xhigh --sandbox disabled --force --approve-mcps",
|
|
125
|
+
color: "#16A34A",
|
|
126
|
+
// No `usage`: cursor-agent has no codexbar provider.
|
|
127
|
+
resumeArgs: "--continue",
|
|
128
|
+
},
|
|
95
129
|
};
|
|
96
130
|
const MODEL_DEFINITIONS_MIGRATION_MESSAGE = [
|
|
97
131
|
"configuration migration required: agents are no longer enabled by default.",
|
package/dist/lib/srtPolicy.d.ts
CHANGED
|
@@ -26,7 +26,9 @@
|
|
|
26
26
|
* denied; claude tolerates those write denials. **codex** hard-fails with a
|
|
27
27
|
* read-only home, so it is pointed at a relocated, per-launch writable
|
|
28
28
|
* config dir (`CODEX_HOME`, see {@link agentConfigRelocation}) and its real
|
|
29
|
-
* `~/.codex` is never write-granted at all.
|
|
29
|
+
* `~/.codex` is never write-granted at all. **cursor-agent** keeps a
|
|
30
|
+
* writable `~/.cursor` (chats/projects/resume) but denies mcp.json,
|
|
31
|
+
* hooks, rules, skills, plugins, and commands — the host-RCE surfaces.
|
|
30
32
|
* 2. **Git (work item 2).** The git common dir is granted write as a **narrow
|
|
31
33
|
* allowlist** of exactly the paths `status/diff/add/commit/push/gc` write —
|
|
32
34
|
* never wholesale — so the per-worktree gitdir redirection files, sibling
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srtPolicy.d.ts","sourceRoot":"","sources":["../../src/lib/srtPolicy.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"srtPolicy.d.ts","sourceRoot":"","sources":["../../src/lib/srtPolicy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAMH,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,qBAAqB;IACpC,oEAAoE;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kFAAkF;IAClF,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAEtF;AAgOD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,oBAAoB,CA0HnF"}
|
package/dist/lib/srtPolicy.js
CHANGED
|
@@ -26,7 +26,9 @@
|
|
|
26
26
|
* denied; claude tolerates those write denials. **codex** hard-fails with a
|
|
27
27
|
* read-only home, so it is pointed at a relocated, per-launch writable
|
|
28
28
|
* config dir (`CODEX_HOME`, see {@link agentConfigRelocation}) and its real
|
|
29
|
-
* `~/.codex` is never write-granted at all.
|
|
29
|
+
* `~/.codex` is never write-granted at all. **cursor-agent** keeps a
|
|
30
|
+
* writable `~/.cursor` (chats/projects/resume) but denies mcp.json,
|
|
31
|
+
* hooks, rules, skills, plugins, and commands — the host-RCE surfaces.
|
|
30
32
|
* 2. **Git (work item 2).** The git common dir is granted write as a **narrow
|
|
31
33
|
* allowlist** of exactly the paths `status/diff/add/commit/push/gc` write —
|
|
32
34
|
* never wholesale — so the per-worktree gitdir redirection files, sibling
|
|
@@ -100,6 +102,32 @@ const AGENT_SRT_PROFILES = {
|
|
|
100
102
|
writePaths: [],
|
|
101
103
|
denyPaths: [],
|
|
102
104
|
},
|
|
105
|
+
"cursor-agent": {
|
|
106
|
+
// Writable state for chats/projects/resume (`--continue`), matching the
|
|
107
|
+
// paths Safehouse's cursor-agent profile re-opens. Persistence surfaces
|
|
108
|
+
// that would execute on the user's next host run are carved back out.
|
|
109
|
+
readPaths: [".cursor", ".config/cursor", ".local/share/cursor-agent"],
|
|
110
|
+
writePaths: [
|
|
111
|
+
".cursor",
|
|
112
|
+
".config/cursor",
|
|
113
|
+
".cache/cursor-compile-cache",
|
|
114
|
+
"Library/Caches/cursor-compile-cache",
|
|
115
|
+
],
|
|
116
|
+
denyPaths: [
|
|
117
|
+
// mcpServers — the sharpest host-RCE vector (same class as claude's
|
|
118
|
+
// ~/.claude.json mcpServers).
|
|
119
|
+
".cursor/mcp.json",
|
|
120
|
+
// Lifecycle hooks run on the user's next Cursor launch.
|
|
121
|
+
".cursor/hooks.json",
|
|
122
|
+
".cursor/hooks",
|
|
123
|
+
// Global rules can inject instructions into future Cursor sessions.
|
|
124
|
+
".cursor/rules",
|
|
125
|
+
".cursor/skills-cursor",
|
|
126
|
+
".cursor/plugins",
|
|
127
|
+
".cursor/commands",
|
|
128
|
+
],
|
|
129
|
+
usesMacosKeychain: true,
|
|
130
|
+
},
|
|
103
131
|
};
|
|
104
132
|
const AGENT_CONFIG_RELOCATIONS = {
|
|
105
133
|
codex: {
|
|
@@ -190,7 +218,7 @@ const GIT_COMMON_WRITE_PATHS = [
|
|
|
190
218
|
* profile. `denyWrite` wins over `allowWrite`, so denying the home dir overrides
|
|
191
219
|
* the default.
|
|
192
220
|
*/
|
|
193
|
-
const ALL_AGENT_HOME_DIRS = [".claude", ".codex"];
|
|
221
|
+
const ALL_AGENT_HOME_DIRS = [".claude", ".codex", ".cursor"];
|
|
194
222
|
/** Git identity/config the agent reads (never writes — see `allowGitConfig`). */
|
|
195
223
|
const GIT_READ_PATHS = [".gitconfig", ".config/git"];
|
|
196
224
|
/**
|
package/docs/commands.md
CHANGED
|
@@ -147,7 +147,7 @@ The command closes the cmux/tmux/zellij workspace if present, records local run
|
|
|
147
147
|
|
|
148
148
|
The resume prompt tells the agent to inspect git status and diff before editing, includes the previous interrupt reason when recorded, and reuses the recorded agent, repository, branch, runner, sandbox, and workspace backend. When no run-state file exists but a worktree does, resume falls back to Linear resolution for the agent and task context.
|
|
149
149
|
|
|
150
|
-
`crew resume <TASK>` reopens the agent's previous conversation in the worktree by default — the built-in `claude` and `
|
|
150
|
+
`crew resume <TASK>` reopens the agent's previous conversation in the worktree by default — the built-in `claude`, `codex`, `cursor`, and `cursor-grok` presets ship a [`resumeArgs`](./configuration.md#resuming-the-agents-conversation) default (`--continue`, `resume --last`, `--continue`, `--continue`) that groundcrew appends to the agent's command. `crew resume --new <TASK>` ignores `resumeArgs` and forces a fresh conversation. Custom agents cold-start unless they set `resumeArgs`. groundcrew stores no session id — it relies on one conversation per worktree.
|
|
151
151
|
|
|
152
152
|
## Open
|
|
153
153
|
|
package/docs/configuration.md
CHANGED
|
@@ -166,7 +166,7 @@ export default {
|
|
|
166
166
|
|
|
167
167
|
## Enabling Agent Presets
|
|
168
168
|
|
|
169
|
-
Groundcrew ships built-in presets for `claude` and `
|
|
169
|
+
Groundcrew ships built-in presets for `claude`, `codex`, `cursor` (Cursor's composer-2.5), and `cursor-grok` (grok-4.5), but agents are not enabled by default. List the agents you want in `agents.definitions`:
|
|
170
170
|
|
|
171
171
|
```ts
|
|
172
172
|
export default {
|
|
@@ -203,7 +203,7 @@ Rules:
|
|
|
203
203
|
|
|
204
204
|
## Resuming the agent's conversation
|
|
205
205
|
|
|
206
|
-
`crew resume` reopens the agent's previous conversation in the worktree — **no config required** for the built-in agents. The shipped `claude` and `
|
|
206
|
+
`crew resume` reopens the agent's previous conversation in the worktree — **no config required** for the built-in agents. The shipped `claude`, `codex`, `cursor`, and `cursor-grok` presets carry a `resumeArgs` default (`--continue`, `resume --last`, `--continue`, `--continue`), which groundcrew appends to the agent's command on resume.
|
|
207
207
|
|
|
208
208
|
How it works:
|
|
209
209
|
|
|
@@ -326,14 +326,14 @@ and hook contract.
|
|
|
326
326
|
| `orchestrator.pollIntervalMilliseconds` | `120_000` | Poll interval in `--watch` mode. |
|
|
327
327
|
| `orchestrator.sessionLimitPercentage` | `85` | Number in `(0, 100]`. An agent whose codexbar session window exceeds this percentage is skipped that tick. Agents are also skipped when codexbar reports weekly usage over the current weekly paced budget. |
|
|
328
328
|
| `agents.default` | `"claude"` | Tiebreak for `agent-any` resolution and fallback for explicit but unknown `agent-*` labels. Also used by `crew start <TASK>` for unlabeled tasks. `crew run` ignores unlabeled tasks and does not apply this default. Must exist in `agents.definitions`. If you enable only `codex`, set `default: "codex"`. |
|
|
329
|
-
| `agents.definitions` | **required** | Enabled launch profile set. Built-in keys (`claude`, `codex`) can use `{}` to opt into the shipped preset. Custom profile names must provide `cmd` and `color`; use custom profiles such as `claude-fable` and `claude-opus` to select model-specific commands per task.
|
|
329
|
+
| `agents.definitions` | **required** | Enabled launch profile set. Built-in keys (`claude`, `codex`, `cursor`, `cursor-grok`) can use `{}` to opt into the shipped preset. Custom profile names must provide `cmd` and `color`; use custom profiles such as `claude-fable` and `claude-opus` to select model-specific commands per task. |
|
|
330
330
|
| `agents.definitions.<name>.cmd` | preset for built-ins | Shell command launched for the agent. Required for custom profiles. Runs in the worktree through the resolved `local.runner`. `{{worktree}}` is replaced before launch; `{{sandbox}}` expands to the sbx sandbox name under the sdx runner and an empty string otherwise. |
|
|
331
331
|
| `agents.definitions.<name>.color` | preset for built-ins | Color for the workspace status pill (cmux only; tmux and zellij silently drop it). Required for custom profiles. |
|
|
332
332
|
| `agents.definitions.<name>.usage` | preset for built-ins | If set, codexbar usage is fetched for this agent and gated by `sessionLimitPercentage` plus the weekly paced budget when codexbar exposes a weekly window. When `usage.codexbar.source` is omitted, groundcrew uses `oauth` for Codex/Claude on macOS, `auto` for other macOS providers, and `cli` elsewhere. Set to `{ disabled: true }` to disable usage gating while keeping the agent enabled. |
|
|
333
333
|
| `agents.definitions.<name>.sandbox` | optional | Docker Sandboxes binding for the agent. Required at launch when `local.runner` resolves to `sdx`. Field: `agent` (required sbx agent name). Groundcrew assumes the `groundcrew-<agent>` sandbox already exists. |
|
|
334
334
|
| `agents.definitions.<name>.preLaunch` | optional | Host-only shell snippet run before the agent exec and outside Safehouse/sdx. Exports survive into the launch shell; under the default `safehouse` runner they are only forwarded to the agent when listed via `preLaunchEnv` or when `cmd` includes its own `safehouse --env-pass=NAMES`. `{{worktree}}` is substituted. A non-zero exit aborts launch. Not supported when `local.runner` resolves to `sdx` in v1. |
|
|
335
335
|
| `agents.definitions.<name>.preLaunchEnv` | optional | Companion to `preLaunch`: list of env var names to append to groundcrew's Safehouse `--env-pass=` flag, so `preLaunch` exports reach the agent without overriding `cmd`. Each entry must match `[A-Za-z_][A-Za-z0-9_]*`. Under `runner: "none"` exports already inherit and `preLaunchEnv` is a no-op. An empty array is a uniform no-op in every runner; a non-empty list is rejected when `cmd` already starts with `safehouse` or when `runner` resolves to `sdx`. |
|
|
336
|
-
| `agents.definitions.<name>.resumeArgs` | preset default | Shell args appended to `cmd` on `crew resume` so the agent [reopens its previous conversation](#resuming-the-agents-conversation) in the worktree. Defaults to `"--continue"` (claude) and `"resume --last"` (codex) on the built-in presets; set it for custom agents or to override. `crew resume --new` ignores it and cold-starts. No session id is stored.
|
|
336
|
+
| `agents.definitions.<name>.resumeArgs` | preset default | Shell args appended to `cmd` on `crew resume` so the agent [reopens its previous conversation](#resuming-the-agents-conversation) in the worktree. Defaults to `"--continue"` (claude, cursor, cursor-grok) and `"resume --last"` (codex) on the built-in presets; set it for custom agents or to override. `crew resume --new` ignores it and cold-starts. No session id is stored. |
|
|
337
337
|
| `prompts.initial` | unattended template | First message sent to the agent: the execution wrapper around each task. The task description is the task-specific prompt. Placeholders: `{{task}}`, `{{worktree}}`, `{{title}}`, `{{description}}`. Override only to change the execution contract for every task, such as team-wide review rules or tool conventions. Mutually exclusive with `prompts.promptFile`. |
|
|
338
338
|
| `prompts.promptFile` | optional | Path to a UTF-8 file whose contents become `prompts.initial`, read at load time. Resolved relative to the config file's directory; `~` is expanded and absolute paths are used as-is. The JSON-friendly alternative to inlining a large prompt or `readFileSync`. Mutually exclusive with `prompts.initial`. |
|
|
339
339
|
| `workspaceKind` | `"auto"` | Terminal session manager. `"auto"` picks `cmux` when on PATH, else `tmux`. Set to `"cmux"`, `"tmux"`, or `"zellij"` to fail loudly when the chosen backend is missing. |
|
package/docs/runners.md
CHANGED
|
@@ -71,6 +71,7 @@ Groundcrew generates a per-launch policy itself (Safehouse's `.sb` profiles have
|
|
|
71
71
|
- **Writes**: allow-only, and the host-CLI persistence vector (planting hooks, `mcpServers`, `commands/`, `plugins/`, … that run on the user's next host invocation) is closed per agent. **claude** keeps a writable `~/.claude` (its Bash tool needs scratch/session state there) but every fixed-path executable/instruction surface — `~/.claude.json` (`mcpServers`), `settings.json` and its hooks, `commands/`, `agents/`, `plugins/`, `skills/`, `statusline.sh`, `CLAUDE.md`, the bundled `chrome` binary, `.git/{hooks,config}` — is denied; claude tolerates those write denials. **codex** hard-fails with a read-only home, so it is pointed at a per-launch relocated config dir (`CODEX_HOME`) seeded with its credentials, leaving the real `~/.codex` entirely unwritten. The git common dir is granted as a **narrow allowlist** of only what `status/diff/add/commit/push/gc` write (`objects`, `refs`, `logs`, `packed-refs`, this worktree's gitdir, …) — never wholesale, so the repo `config`/`hooks`, the per-worktree gitdir redirection files, and **sibling worktree gitdirs** stay unwritable. Global toolchain bins (`~/.cargo/bin`, global `node_modules`, the npx cache, …) are never writable either.
|
|
72
72
|
- **Environment**: each `srt` invocation runs under a sanitized env (`env -i` + a benign baseline). Unlike safehouse and sdx, the `srt` CLI inherits the host env, so without this an ambient `AWS_*`, `GITHUB_TOKEN`, etc. would reach the agent and bypass the read mask. Credentials the agent legitimately needs from the environment must be forwarded explicitly via the agent's `preLaunchEnv` (the same opt-in pass-list safehouse uses).
|
|
73
73
|
- **Network**: allow-only, **reused from the same Clearance allowlist** (`CLEARANCE_ALLOW_HOSTS` / `CLEARANCE_ALLOW_HOSTS_FILES`, including the shipped `clearance-allow-hosts`) so there is one source of truth. Local binding and unix sockets stay off (never the Docker socket).
|
|
74
|
+
- **Built-in credential profiles**: the per-agent read/write/deny profiles above ship for `claude`, `codex`, and `cursor-agent` (the `cursor` / `cursor-grok` presets). Unknown agents get no extra home access.
|
|
74
75
|
|
|
75
76
|
### Linux / WSL prerequisites
|
|
76
77
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@clipboard-health/groundcrew",
|
|
3
|
-
"version": "4.46.
|
|
3
|
+
"version": "4.46.6",
|
|
4
4
|
"description": "Linear-driven orchestrator that launches AI coding agents in git worktrees, with workspace lifecycle and usage tracking.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"jscpd": "5.0.11",
|
|
93
93
|
"knip": "6.24.0",
|
|
94
94
|
"lint-staged": "17.0.8",
|
|
95
|
-
"markdownlint-cli2": "0.
|
|
95
|
+
"markdownlint-cli2": "0.23.0",
|
|
96
96
|
"nx": "22.7.6",
|
|
97
97
|
"oxfmt": "0.57.0",
|
|
98
98
|
"oxlint": "1.72.0",
|