[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81455":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":38,"readmeContent":39,"aiSummary":40,"trendingCount":16,"starSnapshotCount":16,"syncStatus":41,"lastSyncTime":42,"discoverSource":43},81455,"groundcrew","ClipboardHealth\u002Fgroundcrew","ClipboardHealth","Dispatch your task backlog to local, interactive AI coding agents. One git worktree per task, sandboxed by default.","",null,"TypeScript",41,5,32,1,0,4,7,9,12,54.73,"MIT License",false,"main",[26,27,28,29,30,31,32,33,34,35,36,37],"ai-agents","automation","claude","cli","codex","coding-agents","developer-tools","git-worktree","linear","orchestrator","tmux","typescript","2026-06-12 04:01:33","\u003Cp align=\"center\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\".\u002Fstatic\u002Fgroundcrew-wordmark-dark.svg\">\n    \u003Cimg alt=\"groundcrew\" src=\".\u002Fstatic\u002Fgroundcrew-wordmark-light.svg\" height=\"96\">\n  \u003C\u002Fpicture>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  Dispatch your ticket backlog to AI coding agents. One git worktree per ticket, sandboxed by default.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@clipboard-health\u002Fgroundcrew\">\u003Cimg alt=\"npm\" src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002F@clipboard-health\u002Fgroundcrew?style=flat-square&label=npm&color=77d94e&labelColor=18181b\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@clipboard-health\u002Fgroundcrew\">\u003Cimg alt=\"downloads\" src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fdw\u002F@clipboard-health\u002Fgroundcrew?style=flat-square&label=downloads&color=18181b&labelColor=18181b\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FClipboardHealth\u002Fgroundcrew\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg alt=\"ci\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002FClipboardHealth\u002Fgroundcrew\u002Fci.yml?style=flat-square&label=ci&color=77d94e&labelColor=18181b\">\u003C\u002Fa>\n  \u003Ca href=\".\u002FLICENSE\">\u003Cimg alt=\"license\" src=\"https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fl\u002F@clipboard-health\u002Fgroundcrew?style=flat-square&label=license&color=18181b&labelColor=18181b\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg alt=\"Groundcrew picking up tickets and running coding agents in parallel\" src=\".\u002Fstatic\u002Fdemo.gif\" width=\"800\">\n\u003C\u002Fp>\n\nGroundcrew watches assigned tickets, creates isolated worktrees, launches agent CLIs in dedicated terminals, and leaves each ticket's work on its own PR-ready branch. For the backstory, read _[Tickets to pull requests while you sleep](https:\u002F\u002Fwww.clipboardworks.com\u002Fresources\u002Fblog\u002Ftickets-to-pull-requests-while-you-sleep)_.\n\n## Why\n\n- **One worktree per ticket.** Agents work in parallel without stepping on each other.\n- **Pluggable ticket sources.** Linear by default; Jira and local files via [ticket sources](.\u002Fdocs\u002Fticket-sources.md).\n- **Local-first isolation.** Safehouse, Docker Sandboxes, or an explicit `none` escape hatch.\n- **Multi-agent routing.** Ships with `claude` and `codex`; bring your own CLI in config.\n\n## Prerequisites\n\n`crew doctor` checks all of these, so you can install as you go.\n\n- **Node >= 24:** [nvm](https:\u002F\u002Fgithub.com\u002Fnvm-sh\u002Fnvm): `nvm install 24`.\n- **git:** e.g., `brew install git`, `apt install git`.\n- **A terminal multiplexer:** [tmux](https:\u002F\u002Fgithub.com\u002Ftmux\u002Ftmux\u002Fwiki\u002FInstalling) (cross-platform) or [cmux](https:\u002F\u002Fcmux.com\u002F) (macOS).\n- **An agent CLI:** [Claude Code](https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fquickstart) and\u002For [Codex](https:\u002F\u002Fdevelopers.openai.com\u002Fcodex\u002Fquickstart?setup=cli).\n- **A sandbox runner:** [Docker Sandboxes](https:\u002F\u002Fdocs.docker.com\u002Fsandboxes\u002F) (cross-platform) or [Safehouse](https:\u002F\u002Fagent-safehouse.dev\u002F) on macOS. Skip only with `--runner none`.\n\n## Quickstart\n\n```bash\n# 1. Install groundcrew.\nnpm install -g @clipboard-health\u002Fgroundcrew\n\n# 2. Scaffold a global config. Agents are sandboxed by default\n#    (Safehouse\u002FDocker Sandboxes); add --runner none to run unsandboxed on the host.\ncrew init --global --project-dir ~\u002Fdev --repo OWNER\u002FREPO --model claude\n\n# 3. Run the clone commands printed by `crew init`.\n\n# 4. Using Linear? Export your API key. (Jira and other trackers: see Ticket Pickup.)\nexport GROUNDCREW_LINEAR_API_KEY=\"lin_api_...\"\n\n# 5. Verify setup, then dispatch.\ncrew doctor\ncrew run --watch\n```\n\n`crew init --global` writes config to `${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fgroundcrew\u002F`. Pass `--repo` more than once for multiple repos. If you only have one CLI installed, pass `--model claude` (or `--model codex`) so Groundcrew disables the other model and `doctor` won't flag it as missing.\n\n## Ticket Pickup\n\n**Not on Linear?** Use Jira or local files via [ticket sources](.\u002Fdocs\u002Fticket-sources.md).\n\nLinear works out of the box: assign tickets to yourself and add an `agent-*` label.\n\n- `agent-claude`, `agent-codex`, or `agent-\u003Cname>` routes to that model.\n- `agent-any` routes to the enabled model with the most available capacity.\n- Tickets without an `agent-*` label are ignored by `crew run`; dispatch one manually with `crew start \u003CTICKET>`.\n\nGroundcrew scans `workspace.knownRepositories` to infer which repo a ticket belongs to.\n\nA ticket blocked by non-terminal blockers is skipped until those blockers are done.\n\n## Commands\n\n```bash\ncrew init [--global | --local] [--force] [--dry-run]     # create a crew.config.ts\n          [--project-dir \u003Cdir>] [--repo \u003Crepo>]...\n          [--runner \u003Cauto|safehouse|sdx|none>] [--model \u003Cclaude|codex>]\ncrew doctor                                              # check setup\ncrew status [\u003CTICKET>]                                   # inspect current state or one ticket\ncrew run                                                 # one-shot orchestration\ncrew run --watch                                         # poll forever\ncrew start \u003CTICKET>                                      # provision + launch one ticket now\ncrew stop \u003CTICKET> [--reason \u003Ctext>]                     # stop workspace, keep worktree\ncrew resume \u003CTICKET>                                     # reopen a paused ticket\ncrew cleanup \u003CTICKET>                                    # tear down every worktree for a ticket\ncrew upgrade [\u003Cversion>]                                 # reinstall crew globally through npm\n```\n\nSee [command details](.\u002Fdocs\u002Fcommands.md) for status output, doctor behavior, and the stop\u002Fresume workflow.\n\n## Configuration\n\nTwo keys are required; everything else has a default.\n\n```ts\nimport type { Config } from \"@clipboard-health\u002Fgroundcrew\";\n\nexport default {\n  workspace: {\n    projectDir: \"~\u002Fdev\",\n    knownRepositories: [\"OWNER\u002FREPO\"],\n  },\n  local: {\n    runner: \"auto\",\n  },\n  models: {\n    default: \"claude\",\n    definitions: {\n      codex: { disabled: true },\n    },\n  },\n} satisfies Config;\n```\n\nThere is no `linear` config block. Groundcrew reads `GROUNDCREW_LINEAR_API_KEY` first, then falls back to `LINEAR_API_KEY`.\n\n## Reference\n\n- [Configuration](.\u002Fdocs\u002Fconfiguration.md): discovery order, repo layout, full config table, prompt customization.\n- [Runners](.\u002Fdocs\u002Frunners.md): Safehouse, Docker Sandboxes, and the `none` escape hatch.\n- [Credentials](.\u002Fdocs\u002Fcredentials.md): Linear API keys, 1Password, build secrets, and `preLaunch`.\n- [Setup hooks](.\u002Fdocs\u002Fsetup-hooks.md): `.groundcrew\u002Fsetup.sh --deps-only` for per-repo dependency setup.\n- [Ticket sources](.\u002Fdocs\u002Fticket-sources.md): custom shell\u002FJira\u002Flocal-plan adapters.\n- [Troubleshooting](.\u002Fdocs\u002Ftroubleshooting.md): common operational pitfalls and fixes.\n\n## Development\n\nClone the repo and run the CLI from TypeScript source:\n\n```bash\ncd ~\u002Fdev\u002Fc\u002Fgroundcrew\nnode --run crew -- doctor\n\n# With 1Password for GROUNDCREW_LINEAR_API_KEY:\nnode --run crew:op -- run --watch\n```\n\nBoth forms discover config through cosmiconfig. Source edits in `src\u002F**` are picked up on the next invocation. Requires Node >= 24.\n\n## License\n\n[MIT](.\u002FLICENSE)\n","Groundcrew 是一个用于将 Linear 任务分派给 AI 编码代理的工具，每个任务使用独立的 Git 工作树，并默认进行沙箱隔离。其核心功能包括为每个任务创建单独的工作树以支持并行处理、可插拔的任务源（默认支持 Linear，也兼容 Jira 和本地文件）、本地优先的安全隔离策略（如 Safehouse 或 Docker 沙箱），以及多代理路由能力，预装了 Claude 和 Codex 两种编码代理。该工具特别适合于需要自动化处理代码开发任务、提高开发者效率及保证工作环境安全性的场景中使用。",2,"2026-06-11 04:05:09","CREATED_QUERY"]