# @tablation/crew 中文文档

规范地址：https://npmcn.com/package/%40tablation/crew/

版本：0\.126\.11
npm 元数据更新时间：2026-11-02T14:46:28.925Z
中文译文更新时间：2026-11-02T15:37:25.683Z
软件包许可：MIT

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40tablation/crew
原文对照：https://npmcn.com/package/%40tablation/crew/?lang=original
项目主页：https://github.com/rightdesign/crew#readme
源码仓库：https://github.com/rightdesign/crew

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.5 MB，36 个文件
- 模块格式：ES Module
- TypeScript 类型：未声明
- Node.js 要求：\>=22
- 运行依赖：5 个
- 首次发布：2026-10-03T13:43:24.313Z
- 最新版本发布：2026-11-02T14:46:28.012Z
- 已发布版本数：240（近 12 个月 240 个）

## 中文简介

一个由无头特工组成的常设团队，在你控制的机器上从制表板上挑选工作，并向你报告。

## 安装

```sh
npm install @tablation/crew
```

也可以使用：`pnpm add @tablation/crew`、`yarn add @tablation/crew`、`bun add @tablation/crew`

## README

# 机组人员

一群无头特工的常设团队从一个 [Tablation](https://tablation.com/) 板，在你控制的机器上做， 并向董事会汇报。

**文档: [https://crew.tablation.dev](https://crew.tablation.dev/)** -从…开始 [开始](https://crew.tablation.dev/getting-started)． 来源在 `docs/`.

每一个 **座位** 是董事会成员桌子上的一排，碰巧是一个机器人， 用简短的(`prompts/<promptSet>/`（参见下面的“提示集”）和一个切片 在队列中。一个座位在那张桌子上被命名，并回答了那个名字，在 队列文摘，并在评论中写在票上。全体船员 知道一次运行——什么要构建，什么被阻塞，什么已经发送 表数据，并且它所采取的每一步都可以作为状态更改或 对票发表评论。没有隐藏状态，没有队列，只有单板。

每个探员都有一份名单，上面写着：还有谁在船上， 每一行叫什么，是哪一行 **持有** -使用的人 这艘船，还有他们的互动环节。分配的票证 每个座位都不能进候机室，不管它是什么位置，所以我 某人接管了某物而不与其他船员争抢。

今天的船员有四个投票席位，如下所述 `default` 提示设置（此回购附带的三车道开发/设计/QA策略）-见 下面的“提示集”用于其他人，并用于编写自己的提示集)：

| 座位 | 拥有 | 短暂的 |
| --- | --- | --- |
| **dev** | 批准的门票，不需要设计工作 | `prompts/default/personas/lane-dev.md` |
| **设计** | 已获批准的船票 _需要设计_ | `prompts/default/personas/lane-design.md` |
| **质量保证** | 一切都在 `fixed` 或者 `qa`不管是谁造的 | `prompts/default/personas/lane-qa.md` |
| **分类** | 机票被分配到分诊座位 | `prompts/default/personas/lane-triage.md` |

第五个角色， **一对**,骑 `crew agents sync` 除了这四个 不是轮询的：它是一个实时的、交互式的会话(一个IDE 会话（而不是计划运行）在接触跟踪器时使用。它已经 没有机组座位，也从来没有被投票循环分配过票。 `crew agents prompt pair` 打印其当前角色文本（工作区管理员的） Live编辑（如果有的话），否则为本地默认) `SessionStart` 钩子在开始时提供给会话。

构建通道的共享策略（工作树，每个工作树有一个无状态调用） 周期，即开发/设计/QA交接) `Crew Lane Agent` 技巧, 这个 **dev**， **设计** 和 **质量保证** 摘要包括一个 `{{skill: Crew Lane Agent}}` 在他们的第一条线上做记号。特工队继续前进 标记;在组装运行时展开包含，从 如果管理员编辑了工作区的Agent Skills行，则为本地的 `skills/*.md` 文件。因此，一个管理员编辑一个lane自己的句子不再分叉 共享策略。标记是 `{{skill:`，之后完全匹配的技能名称 修剪, `}}`，在其自己的行或内嵌。这是故意不做的 `[[table:key]]` 记录链接：角色和技能不是工作区的行 表格。一个不知名的名字拒绝跑步；一种技能，包括自身（或技能） 循环)展开一次，并在运行中留下一个警告 总结;嵌套上限为3层，包含200 KB的文本。 `crew agents sync` 警告标记命名预设没有的技能 船。 **分类** 和 **一对** 是独立的(`SELF_CONTAINED_ROLES` 在 `src/config.ts`)：既不削减工作树，也不构建或将任何东西交给QA，所以 这项政策只会错误地描述他们。在此更改之前，预设可能会分叉 还是船 `personas/common.md`它一直被固定在大楼的前面 三角裤。提示符上写的是规则，而不是历史；背后的事件 每条规则都保留在里面 [`docs/prompt-rationale.md`](https://npmcn.com/package/%40tablation/crew/docs/prompt-rationale.md).

除了人物角色，提示集也可以发布 **技能** - - - - - - `prompts/<promptSet>/skills/*.md`，每一个YAML frontmatter (`name`， `description`)加上降价提示正文。技能不是座位，它不是 轮询而不是连接到每次运行的提示符中，只是同步到 工作空间的 `Agent Skills` 表，以便任何会话都可以通过名称获取它 需求。 `crew agents sync [route]` 将角色和技能结合在一起 Run -这里的“代理”指的是所有代理类型的资源团队，而不仅仅是 Agents表； `crew skills sync [route]` 是相同的create/update/ 发散同步仅限于技能，因为你只碰过 `skills/`. `crew connect` 运行相同的同步（然后是座位密钥mint） 结束为管理键，因此新的工作区不需要第二个命令；一个成员 Key链接座位到现有的行，并被告知管理员必须运行它一次。 `--no-agents-sync` 跳过它，然后 `--json` 增加了 `agents_synced` 和 `seat_key` stdout上的事件。示例用法-通过Epic调用Pair会话 `grill_link` 查找 `Grill-Me` 技能通过制表MCP工具 `agent_skills_controller_get_skill` 并遵循它。 `prompts/default/skills/ grill-me.md` 是一个发货的例子；其余的是建筑通道。” 情景程序(`Worktree Setup`， `Running the Suite`， `Question and Investigation Tickets`， `Filing a Ticket`， `Ticket Attachments`， `Workspace Change Authorization`， `Design Pass`)， lane策略在步骤中对其进行命名 这需要每一个-每次运行都保持规则和最小的内联和 仅在应用时获取完整过程，因此开发运行永远不会 开罚单从来不付罚单的费用。 `test/prompts.test.ts` 检查角色名称的每个技能是否在相同的预设中发布。

每个周期运行一个角色，哪个角色持有最紧急的可操作票据 （`src/priority.ts` 决定，并且同一模块对代理的摘要进行排序 手，所以两者永远不会有分歧)。无论何时，QA的地位都高于构建角色 它有东西要检查。如果获胜的角色被证明什么都没有，它就可以 其实是这样的，这个循环会落到亚军而不是空转。

合并和部署是 **不** 一个特工的工作。代理阶段结束后，a 释放阶段获取远程拥有的任何东西，压缩合并每个经过验证的qa 分支，更新版本，编写变更日志并运行repo的部署 钩。无头会话永远不会被授予推送到生产环境的许可。

不能合并的分支是 **交回**，而不是跳过。释放 将其倒带，将基础合并到其自己的工作树中的分支中，然后返回 这张通往开发通道的票上的冲突还留在原地看——所以 解析它的座位是具有票的上下文的座位，QA检查 分辨率和其他变化一样。仅仅是陈旧的分支合并了 在这一点上很干净，没有人被吵醒。第二次冲突 停在 `needs_info` 而不是循环。

## 提示设置

上面的座位和他们的简报是政策，而不是机制——一个关于 _如何_ 一个特定的工作空间喜欢工作，而不是工作人员本身 能做什么。 `prompts/` 将其中不止一个作为完整的，准备运行的 政策:

| 目录 | 策略 |
| --- | --- |
| `prompts/default/` | 三车道-开发，设计（门控） _需要设计_ 国旗),质量保证。 |
| `prompts/dev-qa/` | 两条通道——开发人员构建一切，QA检查。没有设计门。 |

一条路线选择了一条 `promptSet:` 在 `crew.yaml` (见 `crew.example.yaml`) -在这个回购自己的名称下解析 `prompts/`，默认为 `default` 当省略。不同的路线 同一艘船可以运行不同的提示集，因为哪个工作流是一个工作空间 “想要”是关于工作空间的事实，而不是关于运行它的机器。

**写自己的** 预期的路径一旦发货预设没有 Fit：复制预设目录(`cp -r prompts/default ~/my-crew-policy`)， 编辑它的散文，并指出 `promptSet` 在副本(`~/my-crew-policy` 或者一个 （相对路径）-不需要这个repo的分支。提示集是一个完整的， 一个独立的叉子 `personas/lane-<role>.md` 每个座位 （以及建筑概要中包含的共享策略技能），再加上其他任何技能 `skills/*.md` 它想要的，不是与另一个不同 一个;每个人物角色文件都被视为普通的散文(`{{skill: Name}}` 包括扩大 ，并将其连接在 每次运行的花名册/环境部分和队列摘要之前 （`src/agent.ts`的 `assemblePrompt`)，因此没有模板层来 学习。保持散文的通用性： `test/prompts.test.ts` 预设失败 命名路径、命令、id、票证引用或日期。 `prompts/dev-qa/` 是否有一个有效的修剪车道的例子 `default` 干净，包括未使用的 `lane-design.md` 存根每 预置今天仍然需要-见下一段为什么。

一个电流限制： **角色集本身是固定的** - - - - - - `src/config.ts`的 `RoleName` （`dev`， `design`， `qa`， `triage`， `pair`) -所以即使是一个提示集 没有实际意义的投票席位(`dev-qa`的 `design`)还需要一个 `lane-<role>.md` 把它们一一归档， `pair` 包括,或者 `crew agents sync` 和 `planAgentRun` 扔出去找它。 `prompts/dev-qa/ lane-design.md` 处理这个问题的方法是写一份简短的声明：“什么都不做， 你不应该有人手”——在你自己的投票席位上复制这种模式 政策不使用(`pair` 是从来没有轮询过的，所以它自己的简要只是需要吗 存在，而不是自我否定)。把座椅设置为策略定义的，所以 提示集可以直接添加或删除角色，这是一个较大的更改 提示集已经完成了，还没有完成。

## 一个工作空间必须提供什么

船员们从黑板上读出它的意思，而不是从它自己的来源。状态, 优先级顺序，以及哪个列扮演哪个角色 **per-workspace 事实**因为一艘船可以连接到几块各自制造的木板上 不同的选择。 `docs/CONTRACT.md` 文档的默认值和什么 如果命名不同，工作区必须重写。

## 安装

```sh
git clone <this repo> crew
cd crew
cp crew.example.yaml ~/.config/crew/crew.yaml
chmod 600 ~/.config/crew/crew.yaml     # it holds an API key
$EDITOR ~/.config/crew/crew.yaml
bin/crew doctor                        # read-only preflight
```

配置存在于 `~/.config/crew/` 而不是在结帐：它描述 这个 **机**，因此重新安装或更换结帐不会丢失它。 `crew` 看起来在 `$CREW_CONFIG`,然后 `$XDG_CONFIG_HOME/crew`,然后 `~/.config/crew/crew.yaml`，然后才在收银台旁边。

`crew connect` 将工作空间/项目的id解析到状态树中 不用手动查找。 `doctor` 然后检查配置 现实：结账，PATH上的工具，代理二进制文件，回购的钩子， 董事会是否会回答。没有写入，唤醒代理或部署，直到 一条路线有 `enabled: true`.

项目结束后， `crew connect` 打印功能检查表 对于已登录的成员(写Crew和Ships表，创建Repos行， Mint代理密钥，同步角色和技能)： `ok`，或者 `missing — ask a workspace admin for <capability>`． 与 `--json` 是1 `capabilities` 标准输出上的事件。 Connect继续进行任何允许的事情；miss存储在路由中 已解决状态和 `crew doctor` 重复它们，直到重新连接找到授权 在的地方。

辅助工作区的地址为 `<primary>:<slug>`： `crew connect paradium:issues` (或 `paradium:issues/<project>`，或者 `--workspace-id paradium:issues`)连接到它，路由，钥匙链 条目、座位密钥名称和repos目录都逐字携带该段 （`paradium:issues/issues`， `~/Crew/paradium:issues/<repo>`）. 仪显示 该目录中的冒号作为斜杠； `--dir` 覆盖位置。

然后把它作为一个真正的服务来安装：

```sh
bin/crew install           # writes and loads this platform's own units
bin/crew install --dry-run # see what it would do first
bin/crew uninstall         # unload and remove them
```

`install` 写三个独立的单位- `run`， `release` 和 `passengers` -并在每个主机上选择机制本身：在macOS上启动，a systemd **用户** Linux上的unit(返回到crontab行，其中 `systemctl` 是不可用的)，或者是Windows上的错误（尚未构建）。它总是 使用绝对解释器路径(`process.execPath`)和每个单位的点数 拥有自己的日志 _不同的_ 比船员自己的文件-指向一个文件 是真的，每句台词都翻了一遍。

`run` 是一个 **持续的服务**： `crew daemon`的长时间循环 当有工作时，链条会立即循环，当没有工作时，链条就会退出 (launchd `KeepAlive`/ systemd `Restart=on-failure` 如果它崩溃了，重新启动它)。 安装它会启动它，就像安装其他服务一样。 `bin/crew daemon start|stop|status|restart` 控制相同的服务 直接-无需完全重新安装即可使用-除了在纯crontab上 回退，它不能监督持久进程，因此保留旧进程 one-shot-per-fire `crew run` 代替。 `release` 和 `passengers` 呆在 他们自己的固定计时器/crontab行，每次射击一次，一如既往 每次的第一次运行发生在一个间隔之后 `install`，每一种火都是一个 很少的API调用——只有当廉价的检查找到时，才会启动完整的代理会话 值得为之醒来的东西。

守护进程也会更新自己：在空闲时（不会在周期中），它会进行检查 自己安装的文件(`src`/`dist`/`bin`，或者二进制本身 编译后的安装)自启动以来已更改，如果是这样，则干净地退出 同样的崩溃恢复重启，然后重新启动它 现在在磁盘上。 `crew daemon restart` 立即强制执行此操作，以获得手册 `git pull && crew daemon restart` 而不是等待下一个空闲的滴答。

`launchd/com.tablation.crew.plist` 只是作为什么参考 `install` 生成-手工编辑和直接加载它仍然工作，但是 `crew install`/`crew uninstall` 是现在支持的路径。

## 命令

```
crew poll [route]              decide a cycle and report it; writes nothing
crew run [route] [--role R]    run the winning role's session, then release
crew daemon [route]                run the persistent supervisor loop in the foreground
crew daemon start|stop|status      control the installed `run` service directly
crew daemon restart                stop then start it (force-picks-up an update)
crew release [route]           merge what QA verified, version it, ship it
crew merge [route]             merge verified branches and stop
crew deploy [route]            release now, even with nothing new to merge
crew watch [route]             live view of what the crew is doing
crew status [route]            paused/running state, led by what the operator owes (needs_info assigned to them, needs_planning, ships needing attention)
crew doctor [route] [--fix]    preflight; --fix enables clean routes, offers crew install
crew selftest [route] [--toolchain NAME] [--json]   launch each toolchain as a run would and prove it reaches the tracker
crew sample-ticket [route] [--remove] [--dry-run] [--json]   file one ticket on a throwaway repo that walks the dev, QA and release loop
crew ports [route]             which checkout owns which ports, and what is up
crew reap [route]              kill servers left behind by removed worktrees
crew drop [route] NNN          remove a merged ticket's worktree and branch
crew worktree [route] NNN      cut (or refresh) this run's worktree for a ticket from the remote; prints its path
crew sync [route]              fast-forward the checkout and its worktrees from the remote
crew pause|resume [route] [R|release]  pause everything, one role, or releases only (passengers keep running)
crew log [route]               tail the log
crew inbox [--member NAME]    your tickets across every workspace
crew connect WS[/PROJECT]     resolve a workspace/project's ids into the state tree
crew repos add [ROUTE] [NAME] [PATH]  attach a local checkout to a route in crew.yaml, creating its Repos row if missing (--dry-run previews)
crew repos list ROUTE         the checkouts a route has, and the tracker Repos row each matches
crew repos check [PATH]        validate a checkout's .crew.yaml (parse, release readiness, hook syntax) without attaching it (--route ROUTE, --strict, --json)
crew repos hooks [ROUTE] NAME  suggest test/build hooks for a checkout (--write route|repo [--replace] writes them, --clear route removes them, --recipes, --hook KEY=CMD, --agent, --json)
crew install [--replace]     write and load this platform's scheduler unit (macOS: clears a crew installed from another path)
crew uninstall [--all]        unload and remove it (--all: every crew launchd unit, whichever path it came from)
```

每一个能改变某些事情的命令都需要 `--dry-run`.

## 一船多板

一艘船同时连接到几个工作区，并对它们的队列进行排序 一个板上的P0比另一个板上的P2更重要。该船已被识别 由 `ship.name` 在每个板的船舶表中匹配一行；一名船员是 通过电子邮件识别，因此同一个人在不同的工作空间都能被识别出来。

一个发展领域跨越 **几个存储库**，所以checkout是a 车票的财产，而不是航线的财产： `repos:` 对象中的每个名称进行映射 将board的Repos表放到这台机器上的一个目录中。甚至命名一个回购 这是一个封闭的列表-几艘船可以划分一个多回购区域 在他们之间工作，任何没有被命名的东西都是另一艘船的， 标志着 `NO CHECKOUT` 在摘要中而不是留白（留白会读） 如“work it here”，这是错误的目录)。

离开 `repos:` Out的意思正好相反：这艘船在服务 _一切_ 董事会的Repos表列出，每个结账默认为 `<reposBasePath>/<workspace>/<repoName>` - - - - - - `reposBasePath` 是 `~/Crew` 除非 `ship:` 或route-level `reposBasePath:` 否则说。回购 在它的派生路径中还不存在它会自动克隆到那里 当票据第一次真正需要它时（从Repos表自己的） `remote` 列, `owner/repo` 通过SSH) -不是预先上 `crew connect`， 它只发现名字和远程，自己从不获取任何东西。

## 什么住在哪里？

```
bin/crew          the entry point
src/              the implementation (Node, run directly via type stripping)
test/             its tests, including a fake board for integration runs
                  (the suite must pass with no crew.yaml, as on CI: a CLI-level test sets
                  CREW_CONFIG to a missing file instead of relying on the machine's own)
prompts/          prompt sets — prompts/<name>/personas/lane-<role>.md
                  + prompts/<name>/skills/*.md
docs/             CONTRACT.md, REPO_SPEC.md, MIGRATION.md
launchd/          timer templates (edit the paths before installing)
crew.example.yaml copy to ~/.config/crew/crew.yaml
```

机组人员没有id，没有绝对路径，没有项目命令，也没有设备 的名字。任何特定于 **机** 属于 `crew.yaml`;任何东西 特定于 **存储库** 属于该存储库自己的 `.crew.yaml` （`docs/REPO_SPEC.md`)，声明它的平台、钩子、分支命名、 版本控制和发布模式：

| 钩 | 要求 | 它的用途是什么 |
| --- | --- | --- |
| `test` | 是 | 在发布之前运行套件 |
| `build` | 是 | 构建它 |
| `deploy` | 当 `release.mode: local` | 船这 |
| `setup` | 否 | 准备一个新的工作树 |
| `ports` | 否 | 打印此结帐的端口分配 |
| `version` | 否 | 打印当前版本 |
| `bump` | 否 | 制作并打印下一个 |
| `merged` | 否 | 问铁匠铺是否有树枝落地 |
| `released` | 否 | 确认提交是活动的（sha，或确切的版本） |

机组人员没有自己的命令：他们运行的一切都是为了测试，建造， 版本或发布存储库来自该存储库自己的文件。

一个钩子是异常，存在于 `crew.yaml` 而不是: `notify`，也就是 递给一个关卡(`ok` / `warn` / `fail`)，标题和细节行 释放船只或被封锁。应该在哪里 _所示_ -桌面 通知、状态小部件、webhook、推送——都是关于机器的事实 看视频的人，而不是代码。定义none和释放状态 直接到日志。

回购是自己的 `.crew.yaml` 胜过任何重复的 `crew.yaml`, `crew doctor` 将复制报告为漂移。客户端仍然可以进行配置 回购没有 `.crew.yaml` 它自己的。

## 状态

在macOS上运行，驱动这个项目自己的板。分诊是一种 **座位**，不是。 第二个过程-只有一个计时器要安装，而不是两个。

替换的bash实现已被删除。它的行为在哪里？ 某些东西的唯一规范-优先级矩阵，QA摘要， 船员标签，它是作为固定装置被捕获的 `test/fixtures/` 首先， 测试仍然使端口保持原来的功能。

突出：Linux没有端到端进行过练习，API密钥在 `crew.yaml` 明文，直到设备代码流和钥匙链存储的土地。

## 常见问题

### @tablation/crew 是什么？

一个由无头特工组成的常设团队，在你控制的机器上从制表板上挑选工作，并向你报告。

### 如何安装 @tablation/crew？

在项目目录运行 npm install @tablation/crew，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 crew，可以用 npx crew 直接运行。

### @tablation/crew 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/tablation\_\_crew 是否存在。

### @tablation/crew 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @tablation/crew 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @tablation/crew 可以商用吗？

@tablation/crew 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @tablation/crew 还在维护吗？

最新版本 0\.126\.11 发布于 2026/11/02（今天）；至今共发布 240 个版本，其中过去 12 个月发布了 240 个；首次发布于 2026/10/03。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

