@clipboard-health/groundcrew 4.27.0 → 4.28.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,8 +1,5 @@
1
1
  <p align="center">
2
- <picture>
3
- <source media="(prefers-color-scheme: dark)" srcset="./static/groundcrew-wordmark-dark.svg">
4
- <img alt="groundcrew" src="./static/groundcrew-wordmark-light.svg" height="96">
5
- </picture>
2
+ <img alt="groundcrew" src="./static/groundcrew-wordmark.svg" height="96">
6
3
  </p>
7
4
 
8
5
  <p align="center">
@@ -10,10 +7,10 @@
10
7
  </p>
11
8
 
12
9
  <p align="center">
13
- <a href="https://www.npmjs.com/package/@clipboard-health/groundcrew"><img alt="npm" src="https://img.shields.io/npm/v/@clipboard-health/groundcrew?style=flat-square&label=npm&color=FF6D00&labelColor=18181b"></a>
14
- <a href="https://www.npmjs.com/package/@clipboard-health/groundcrew"><img alt="downloads" src="https://img.shields.io/npm/dw/@clipboard-health/groundcrew?style=flat-square&label=downloads&color=18181b&labelColor=18181b"></a>
15
- <a href="https://github.com/ClipboardHealth/groundcrew/actions/workflows/ci.yml"><img alt="ci" src="https://img.shields.io/github/actions/workflow/status/ClipboardHealth/groundcrew/ci.yml?style=flat-square&label=ci&color=77d94e&labelColor=18181b"></a>
16
- <a href="./LICENSE"><img alt="license" src="https://img.shields.io/npm/l/@clipboard-health/groundcrew?style=flat-square&label=license&color=18181b&labelColor=18181b"></a>
10
+ <a href="https://www.npmjs.com/package/@clipboard-health/groundcrew"><img alt="npm" src="https://img.shields.io/npm/v/@clipboard-health/groundcrew?style=flat-square&label=npm&color=F7C600&labelColor=111111"></a>
11
+ <a href="https://www.npmjs.com/package/@clipboard-health/groundcrew"><img alt="downloads" src="https://img.shields.io/npm/dw/@clipboard-health/groundcrew?style=flat-square&label=downloads&color=111111&labelColor=111111"></a>
12
+ <a href="https://github.com/ClipboardHealth/groundcrew/actions/workflows/ci.yml"><img alt="ci" src="https://img.shields.io/github/actions/workflow/status/ClipboardHealth/groundcrew/ci.yml?style=flat-square&label=ci&color=77d94e&labelColor=111111"></a>
13
+ <a href="./LICENSE"><img alt="license" src="https://img.shields.io/npm/l/@clipboard-health/groundcrew?style=flat-square&label=license&color=111111&labelColor=111111"></a>
17
14
  </p>
18
15
 
19
16
  <p align="center">
@@ -49,7 +46,7 @@ npm install -g @clipboard-health/groundcrew@latest
49
46
 
50
47
  # 2. Scaffold a global config. Agents are sandboxed by default
51
48
  # (Safehouse/Docker Sandboxes); add --runner none to run unsandboxed on the host.
52
- crew init --global --project-dir ~/dev --repo OWNER/REPO --model claude
49
+ crew init --global --project-dir ~/dev --repo OWNER/REPO --agent claude
53
50
 
54
51
  # 3. Run the clone commands printed by `crew init`.
55
52
 
@@ -64,7 +61,7 @@ crew doctor
64
61
  crew run --watch
65
62
  ```
66
63
 
67
- `crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos. `--model claude` or `--model codex` chooses the single built-in model preset to enable in the generated config.
64
+ `crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME/.config}/groundcrew/`. Pass `--repo` more than once for multiple repos. `--agent claude` or `--agent codex` chooses the single built-in agent preset to enable in the generated config.
68
65
 
69
66
  ## Task Pickup
70
67
 
@@ -72,8 +69,8 @@ crew run --watch
72
69
 
73
70
  Linear works out of the box: assign tasks to yourself and add an `agent-*` label.
74
71
 
75
- - `agent-claude`, `agent-codex`, or `agent-<name>` routes to that model.
76
- - `agent-any` routes to the enabled model with the most session headroom, after skipping models over their session limit or weekly paced budget.
72
+ - `agent-claude`, `agent-codex`, or `agent-<name>` routes to that agent.
73
+ - `agent-any` routes to the enabled agent with the most session headroom, after skipping agents over their session limit or weekly paced budget.
77
74
  - Tasks without an `agent-*` label are ignored by `crew run`; dispatch one manually with `crew start <TASK>`.
78
75
 
79
76
  Groundcrew scans `workspace.knownRepositories` to infer which repo a task belongs to.
@@ -91,17 +88,19 @@ Write tasks as complete agent instructions: the goal, the context and constraint
91
88
  ```bash
92
89
  crew init [--global | --local] [--force] [--dry-run] # create a crew.config.ts
93
90
  [--project-dir <dir>] [--repo <repo>]...
94
- [--runner <auto|safehouse|sdx|none>] [--model <claude|codex>]
91
+ [--runner <auto|safehouse|sdx|none>] [--agent <claude|codex>]
95
92
  crew doctor # check setup
93
+ crew source list|verify [<source>] # inspect configured task sources
96
94
  crew task list [--source <name>] # list tasks across sources
97
95
  crew task get <TASK> [--source <name>] [--prompt] # inspect one task or its prompt
98
96
  crew task create "Title" --source <name> [--agent <name>] # create a source task
97
+ crew task validate [<source>] # validate task content
99
98
  crew status [<TASK>] # inspect current state or one task
100
99
  crew run [--watch] # one-shot or --watch forever
101
100
  crew start <TASK> # provision + launch one task now
102
101
  crew stop <TASK> [--reason <text>] # stop workspace, keep worktree
103
102
  crew resume <TASK> # reopen a paused task
104
- crew cleanup <TASK> # tear down every worktree for a task
103
+ crew cleanup [--force] <TASK> # tear down every worktree for a task
105
104
  crew upgrade [<version>] # reinstall crew globally through npm
106
105
  ```
107
106
 
@@ -109,7 +108,7 @@ See [command details](./docs/commands.md) for status output, doctor behavior, an
109
108
 
110
109
  ## Configuration
111
110
 
112
- Workspace settings and at least one enabled model are required; everything else has a default.
111
+ Workspace settings and at least one enabled agent are required; everything else has a default.
113
112
 
114
113
  ```ts
115
114
  import type { Config } from "@clipboard-health/groundcrew";
@@ -122,7 +121,7 @@ export default {
122
121
  // Strings live under projectDir; use { name, projectDirOverride } to override per repo.
123
122
  knownRepositories: ["OWNER/REPO"],
124
123
  },
125
- models: {
124
+ agents: {
126
125
  default: "claude",
127
126
  definitions: {
128
127
  claude: {},
@@ -173,6 +172,13 @@ Regenerate the README demo with VHS:
173
172
  ./static/render-demo.sh
174
173
  ```
175
174
 
175
+ Regenerate the Slack bot avatar (also used as the emoji upload; Slack scales it down) after editing the mark:
176
+
177
+ ```bash
178
+ sed 's/width="120" height="120"/width="512" height="512"/' static/groundcrew-mark.svg > /tmp/mark512.svg
179
+ sips -s format png /tmp/mark512.svg --out static/groundcrew-avatar.png
180
+ ```
181
+
176
182
  ## License
177
183
 
178
184
  [MIT](./LICENSE)
@@ -27,9 +27,9 @@ export default {
27
27
  // { name: "other-org/other-repo", projectDirOverride: "~/work" }
28
28
  knownRepositories: ["your-org/your-repo"],
29
29
  },
30
- models: {
30
+ agents: {
31
31
  default: "claude",
32
- // `definitions` is the enabled model set. Built-in keys can use `{}` to
32
+ // `definitions` is the enabled agent set. Built-in keys can use `{}` to
33
33
  // opt into the shipped command/color/usage preset. Add `codex: {}` if you
34
34
  // want both shipped agents, or add a custom entry and tag tasks with
35
35
  // `agent-<name>`.
@@ -99,7 +99,7 @@ export default {
99
99
  // // it into the agent. Chain with `&&` so a failed mint aborts launch.
100
100
  // preLaunch: "SESSION_TOKEN=$(your-mint-command) && export SESSION_TOKEN",
101
101
  // preLaunchEnv: ["SESSION_TOKEN"],
102
- // // Required for this model when `local.runner` resolves to `sdx`.
102
+ // // Required for this agent when `local.runner` resolves to `sdx`.
103
103
  // sandbox: { agent: "claude" },
104
104
  // },
105
105
  //
@@ -110,7 +110,7 @@ export default {
110
110
  // local: { runner: "auto" },
111
111
  //
112
112
  // // Groundcrew does not create or authenticate sdx sandboxes. For an sdx
113
- // // model, create the matching sandbox yourself before first launch:
113
+ // // agent, create the matching sandbox yourself before first launch:
114
114
  // // sbx create --name groundcrew-claude claude ~/dev/groundcrew
115
115
  // // sbx exec -it groundcrew-claude claude auth login
116
116
  // // sbx exec -it groundcrew-claude gh auth login
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clipboard-health/groundcrew",
3
- "version": "4.27.0",
3
+ "version": "4.28.0",
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",
@@ -82,7 +82,7 @@
82
82
  "@tsconfig/node24": "24.0.4",
83
83
  "@tsconfig/strictest": "2.0.8",
84
84
  "@types/node": "25.9.2",
85
- "@typescript/native-preview": "7.0.0-dev.20260604.1",
85
+ "@typescript/native-preview": "7.0.0-dev.20260606.1",
86
86
  "@vitest/coverage-v8": "4.1.8",
87
87
  "cspell": "10.0.1",
88
88
  "dependency-cruiser": "17.4.3",
Binary file
@@ -2,28 +2,25 @@
2
2
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120" role="img" aria-label="groundcrew">
3
3
  <title>groundcrew</title>
4
4
  <!--
5
- Crossed marshaling wands. Handles at bottom (18,108) and (102,108),
6
- cross at (60,50), tips at (88,11) and (32,11).
7
- SMIL animation: wands alternate dimming, 2.4s cycle.
8
- Right wand offset by -1.2s so both open fully opaque.
5
+ Taxiway sign tile: yellow field, inset inscription border, fork arrow.
6
+ One task stream splitting onto parallel worktrees.
7
+ Field #F7C600, ink #111111. Fork stem (22,60) to (48,60), branches to
8
+ (92.2,29) and (92.2,91) with chevron heads. Stroke 11, round caps/joins.
9
+ At 16px (favicon), drop the inscription border and bump the fork stroke
10
+ to 16.
11
+
12
+ Regenerate groundcrew-avatar.png (Slack bot avatar; also fine as the
13
+ emoji upload; Slack scales it down) with the sips commands in the
14
+ README's Development section. The exact command can't live here: it
15
+ needs a double-hyphen flag, which is illegal inside an XML comment.
9
16
  -->
10
- <line x1="18" y1="108" x2="88" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
11
- <animate attributeName="opacity"
12
- values="1;0.38;1;1"
13
- keyTimes="0;0.25;0.5;1"
14
- calcMode="spline"
15
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
16
- dur="2.4s"
17
- repeatCount="indefinite"/>
18
- </line>
19
- <line x1="102" y1="108" x2="32" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
20
- <animate attributeName="opacity"
21
- values="1;0.38;1;1"
22
- keyTimes="0;0.25;0.5;1"
23
- calcMode="spline"
24
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
25
- dur="2.4s"
26
- begin="-1.2s"
27
- repeatCount="indefinite"/>
28
- </line>
17
+ <!-- rounded rectangles as explicit paths: the macOS renderers (sips and
18
+ qlmanage) that cut the PNG avatar mishandle rx on rect -->
19
+ <path d="M24 0 H96 A24 24 0 0 1 120 24 V96 A24 24 0 0 1 96 120 H24 A24 24 0 0 1 0 96 V24 A24 24 0 0 1 24 0 Z" fill="#F7C600"/>
20
+ <path d="M21 9 H99 A12 12 0 0 1 111 21 V99 A12 12 0 0 1 99 111 H21 A12 12 0 0 1 9 99 V21 A12 12 0 0 1 21 9 Z" fill="none" stroke="#111111" stroke-width="6"/>
21
+ <path
22
+ d="M22 60 H48
23
+ M48 60 L92.2 29 M75.3 27.5 L92.2 29 L87.8 45.4
24
+ M48 60 L92.2 91 M75.3 92.5 L92.2 91 L87.8 74.6"
25
+ fill="none" stroke="#111111" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
29
26
  </svg>
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 730 128" width="730" height="128" role="img" aria-label="groundcrew">
3
+ <title>groundcrew</title>
4
+ <style>
5
+ .wordmark {
6
+ font-family: Overpass, "Helvetica Neue", Helvetica, Arial, sans-serif;
7
+ font-size: 68px;
8
+ font-weight: 800;
9
+ }
10
+ </style>
11
+ <!--
12
+ Airport taxiway sign lockup, self-contained on light and dark pages.
13
+ Location panel (yellow-on-black, flush inscription border) names the
14
+ tool; direction panel (black-on-yellow) carries the fork arrow - one
15
+ task stream splitting onto parallel worktrees.
16
+ Field #F7C600, ink #111111. textLength normalizes the wordmark width
17
+ across font fallbacks.
18
+ -->
19
+ <rect width="730" height="128" rx="14" fill="#F7C600"/>
20
+ <path d="M570 0 H14 A14 14 0 0 0 0 14 V114 A14 14 0 0 0 14 128 H570 Z" fill="#111111"/>
21
+ <path d="M568 2 H14 A12 12 0 0 0 2 14 V114 A12 12 0 0 0 14 126 H568 Z" fill="none" stroke="#F7C600" stroke-width="4"/>
22
+ <text class="wordmark" x="285" y="89" text-anchor="middle" textLength="490" lengthAdjust="spacingAndGlyphs" fill="#F7C600">GROUNDCREW</text>
23
+ <g transform="translate(593,4)">
24
+ <path
25
+ d="M22 60 H48
26
+ M48 60 L92.2 29 M75.3 27.5 L92.2 29 L87.8 45.4
27
+ M48 60 L92.2 91 M75.3 92.5 L92.2 91 L87.8 74.6"
28
+ fill="none" stroke="#111111" stroke-width="11" stroke-linecap="round" stroke-linejoin="round"/>
29
+ </g>
30
+ </svg>
Binary file
@@ -1,38 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 680 120" width="680" height="120" role="img" aria-label="groundcrew">
3
- <title>groundcrew</title>
4
- <style>
5
- .wordmark {
6
- font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", "DejaVu Sans Mono", monospace;
7
- font-size: 92px;
8
- font-weight: 700;
9
- letter-spacing: -0.04em;
10
- }
11
- </style>
12
- <!--
13
- Logomark: crossed marshaling wands.
14
- Handles at (18,108) and (102,108), cross at (60,50), tips at (88,11) and (32,11).
15
- SMIL animation: wands alternate dimming, 2.4s cycle.
16
- Right wand offset by -1.2s so both open fully opaque.
17
- -->
18
- <line x1="18" y1="108" x2="88" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
19
- <animate attributeName="opacity"
20
- values="1;0.38;1;1"
21
- keyTimes="0;0.25;0.5;1"
22
- calcMode="spline"
23
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
24
- dur="2.4s"
25
- repeatCount="indefinite"/>
26
- </line>
27
- <line x1="102" y1="108" x2="32" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
28
- <animate attributeName="opacity"
29
- values="1;0.38;1;1"
30
- keyTimes="0;0.25;0.5;1"
31
- calcMode="spline"
32
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
33
- dur="2.4s"
34
- begin="-1.2s"
35
- repeatCount="indefinite"/>
36
- </line>
37
- <text class="wordmark" x="136" y="92" textLength="540" lengthAdjust="spacingAndGlyphs" fill="#e4e4e7">groundcrew</text>
38
- </svg>
@@ -1,38 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 680 120" width="680" height="120" role="img" aria-label="groundcrew">
3
- <title>groundcrew</title>
4
- <style>
5
- .wordmark {
6
- font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, "Liberation Mono", "DejaVu Sans Mono", monospace;
7
- font-size: 92px;
8
- font-weight: 700;
9
- letter-spacing: -0.04em;
10
- }
11
- </style>
12
- <!--
13
- Logomark: crossed marshaling wands.
14
- Handles at (18,108) and (102,108), cross at (60,50), tips at (88,11) and (32,11).
15
- SMIL animation: wands alternate dimming, 2.4s cycle.
16
- Right wand offset by -1.2s so both open fully opaque.
17
- -->
18
- <line x1="18" y1="108" x2="88" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
19
- <animate attributeName="opacity"
20
- values="1;0.38;1;1"
21
- keyTimes="0;0.25;0.5;1"
22
- calcMode="spline"
23
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
24
- dur="2.4s"
25
- repeatCount="indefinite"/>
26
- </line>
27
- <line x1="102" y1="108" x2="32" y2="11" stroke="#FF6D00" stroke-width="20" stroke-linecap="round">
28
- <animate attributeName="opacity"
29
- values="1;0.38;1;1"
30
- keyTimes="0;0.25;0.5;1"
31
- calcMode="spline"
32
- keySplines="0.42 0 0.58 1;0.42 0 0.58 1;0 0 1 1"
33
- dur="2.4s"
34
- begin="-1.2s"
35
- repeatCount="indefinite"/>
36
- </line>
37
- <text class="wordmark" x="136" y="92" textLength="540" lengthAdjust="spacingAndGlyphs" fill="#18181b">groundcrew</text>
38
- </svg>