@tablation/crew

中文文档
0.126.11发布于 2026/11/02MITES Module构建来源已验证

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

中文使用文档
文档目录7 节
  1. 提示设置
  2. 一个工作空间必须提供什么
  3. 安装
  4. 命令
  5. 一船多板
  6. 什么住在哪里?
  7. 状态

机组人员

一群无头特工的常设团队从一个 Tablation 板,在你控制的机器上做, 并向董事会汇报。

文档: https://crew.tablation.dev -从…开始 开始. 来源在 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.

除了人物角色,提示集也可以发布 技能 - - - - - - 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 文档的默认值和什么 如果命名不同,工作区必须重写。

安装

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 覆盖位置。

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

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 共发布 240 个版本,首次发布于 2026/10/03;过去 12 个月发布了 240 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.126.11latest2026/11/02今天
0.126.102026/11/021 天前
0.126.92026/11/021 天前
0.126.82026/11/021 天前
0.126.72026/11/021 天前
0.126.62026/11/021 天前

关于 @tablation/crew 的常见问题

@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 和提交记录判断。