@delacour/warden

中文文档
0.16.0发布于 2026/11/09MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 4887

React Introduct and Expo的AI代理工具包:每个编码代理都获得自己的iOS模拟器或Android仿真器来驱动,调试,配置和E2E测试应用程序,并配有设备,端口和app构建了租赁的全机器

中文使用文档
文档目录18 节
  1. 安装
  2. 更新
  3. 释放
  4. 使用量
  5. 在 GitHub 动作中安装管理员
  6. 快速新模拟器:黄金图像
  7. 设备健康
  8. 一个新的博览会应用 : warden init , (中文(简体) ), warden dev , (中文(简体) )…
  9. e2e 脚本 : warden run
  10. 蝙蝠侠: warden batch
  11. 受影响的e2e: warden affected 编号 : warden e2e
  12. 基准
  13. App 构建
  14. 驱动设备(代理人)
  15. 克劳德代码
  16. 代码
  17. 发展
  18. 许可证

典狱长

一个用于React Index, Exposition和原生iOS和Android应用程序的AI代理工具包:您的代理驱动器,调试器,配置和E2E在自己的模拟器上测试该应用程序. 警卫租约 iOS 模拟器、Android 模拟器、端口和本地应用程序 全机用于特工,Orca工作树,再生和人类共享一Mac. 一个车主租用的装置或港口从未交给另一个车主.

  • 租赁 生活在一个 sqlite db (~/.warden/warden.db(原始内容存档于2017-06-25)., WAL. 索赔 BEGIN IMMEDIATE,将它们串行于各个过程.
  • 拥有者: 克劳德会议(Stdin, CLAUDE_CODE_SESSION_ID, (中文(简体) ), WARDEN_SESSION_ID),CI (中文(简体) )CI, (中文(简体) ), GITHUB_RUN_ID),或用户外壳(parent pid). Repo和worktree被录制为消息.
  • 活 动: 租借在租借期中存活或心跳在TTL内(默认为30分钟;空) warden claim 由代理获得5分钟并打印出提示,所以只有包装或 warden heartbeat 持有一个设备更长。 在每项索赔中,由Stale租赁收回 warden gcA. 租赁 warden run 编号 : dev 编号 : batch 编号 : e2e 死了三个心跳(90秒)后就停止了.
  • 设备: 管理员自行创建和再利用 warden-<profile>-N 模拟和发射 -read-only 模拟者。 它从不分配、关闭或抹去它没有创建的设备,除非你通过 --adopt。 。 。 .
  • 构建: 博览会指纹 已安装 · 本地缓存 · EAS · 本地建筑. 所有工作树的Repo共享一个缓存.

安装

npm i -g @delacour/warden && warden install    # or: bun add -g @delacour/warden && warden install

warden install 每个检测到的剂(Claude Code / Codex)的接线钩,显示diff并先询问. 钩子呼叫 ~/.local/bin/warden,用于安装与全局软件包的链接,所以 npm i -g @delacour/warden@latest 两者都升级.

一发,没有安装全球:

npx @delacour/warden install     # or: bunx @delacour/warden install

此复制二进制为 ~/.local/bin/warden 并接接钩. 只有这样 warden 在你身边 PATH 若为 ~/.local/bin 已经在上面( MacOS 不默认添加) 。 若为 warden 使用上面的全局安装。 要更新一发安装, 运行 warden update,从 npm 获取,或重运行 npx @delacour/warden@latest install。 。 。 .

Npm 软件包是一个小节点shim+每个平台一个预建的二进制(@delacour/warden-{darwin,linux}-{arm64,x64},作为可选依赖安装). 视窗不支持. 跳过可选依赖的软件包管理器( E)--omit=optional)使相去而无二进制也,所言也.

来源:

bun install
bun run --cwd apps/cli install:global   # local build of this checkout → ~/.local/bin/warden
warden install                           # binary + hooks for every detected agent (Claude Code / Codex); shows diff, asks first
warden install --claude                  # force Claude Code only: skill + SessionEnd hook
warden install --codex                   # force Codex only: hooks in $CODEX_HOME/hooks.json
warden doctor

狱长本身的工作: bun run cli:link 点 ~/.local/bin/warden (没有重建),以及 bun run cli:unlink 把以前的东西放回去.

代理技能,仅供克劳德代码, Codex, Cursor等人通过 skills CLI: 爱丽丝

warden skill show | pbcopy                 # raw SKILL.md to paste by hand
warden skill show --file references/ui.md  # print one file of the skill folder
warden skill install                       # bunx skills add ~/.warden/skill --skill warden -g (this binary's copy)
warden skill install --from github         # bunx skills add delacournz/warden --skill warden -g (updatable via `skills update`)
warden skill install --project -a claude-code -y   # into the current project, one agent, no prompts

技能是一个文件夹, skills/warden/ (单位:千美元)SKILL.md + 键 references/{ui,specs,suites,troubleshooting}.md),嵌入于二进制. npx 当 bunx 无法使用; --dry-run 打印命令.

对于源建和一发安装, ~/.local/bin 必须是在 PATH设置 WARDEN_HOME 要覆盖 ~/.warden。 。 。 .

更新

warden update 对於典狱官,确是一件善事warden version 显示 :

构建warden update
备忘: 从源头运行( n)bun apps/cli/src/cli.ts update(中文(简体) )编译 a local 此复选的二进制 ~/.local/bin/warden
当地: 从一次结账中编译从结账中重建--release 切换为释放)
释放: 从 GitHub 下载gh release view 新来的? 下载 warden-<os>-<arch> □ 核查sha256 □ 自我检查 □ 互换到位。 如果无法达到 GitHub 释放( 否) gh,没有 repo 访问,它回到npm
释放: 复制者为 npx编号 :bunx @delacour/warden installnpm 注册 : @delacour/warden/latest 新来的? 下载 @delacour/warden-<os>-<arch> · 核查 sha512 dist.integrity · 进行自我检查 · 进行互换
无数字 : @delacour/warden 由 npm / bun / pnpm / npx / bunx 组成 打印软件包管理器的升级命令(例如:. npm i -g @delacour/warden@latest, (中文(简体) ), npx @delacour/warden@latest install叶子 node_modules 单独一人; --to <path> 仍然安装独立的释放二进制

二进制是在相同的路径上进行原子交换,所以下一个 warden 在您当前外壳中运行新版本。 没有新的外壳或 source 需要;如果 PATH 决定 warden 别的地方,更新提醒你。 旗帜 : --check (仅报告), --release (安装最新的 GitHub 发布;同时向它切换一个dev/局部建筑), --force, (中文(简体) ), --to <path>, (中文(简体) ), --json。释放来自公众 delacournz/warden 重传通过 gh设置 WARDEN_RELEASE_REPO 使用另一个还原,以及 WARDEN_NPM_REGISTRY 以使用另一个 npm 注册.

释放

  1. 目标 develop一个改变什么 @delacour/warden 舰只增加一个变换器: bun changeset选择 @delacour/warden,选择补丁 / 小/ 主,写出一行摘要. @delacour/warden-e2e 紧跟在锁上 只有医生和内部的公关不需要.
  2. 每一次推动 develop 打开或更新“ QQ core( 释放): vX. Y. Z ” PR, 标题为它将要传送的版本 。 它撞倒了版本,写着 CHANGELOG.md 并消耗更改.
  3. 合并公关. promote.yml 快速前进 main 并按下标签 v<version>没有人推动 main 或手持标签.
  4. main 是文件网站部署的 标签运行 .github/workflows/release.yml,用于检查标签是否匹配版本,运行类型检查/检查/测试,构建 warden-{darwin,linux}-{arm64,x64} 加号 checksums.txt 并出版"GitHub"发行.
  5. 相同的工作流程阶段是 npm 软件包(bun run --cwd apps/cli build:npm → apps/cli/dist/npm/并出版 @delacour/warden-<os>-<arch>,则 @delacour/warden,则 @delacour/warden-e2e,通过 npm 信任的出版(OIDC,没有符号)公开访问和出处. npm 上的版本被跳过, 因此重运行完成部分发布 .

永不编辑 version 手边. bun run release <version> 是 CI 下架时的断层镜: 它绕过更改器和版本 PR .

使用量

warden claim ios --json                          # lease 1 sim (reuse → boot → create), booted + ready
warden claim android --profile pixel-10 --count 2
warden claim ios --count 2 --wait 10m --ttl 1h --label e2e
warden claim ios --priority high --no-wait       # WARDEN_CAPACITY=on + host full → queue by priority (default --wait 30m); --no-wait fails fast
warden capacity [--json]                         # host budget (RAM + perf cores), usage, what binds, whether limits are enforced (off by default)
warden queue [--json]                            # claims waiting for a boot slot: position, priority, age
warden release --mine [--label x] [--shutdown]   # or <leaseId…> | --udid X | --session S; --label = only --mine leases with that label; --shutdown = warden-created or self-booted sims
warden release <leaseId> --bad [reason]          # release + quarantine the device (claims skip it); clear: warden sim unquarantine <udid>
warden sim slim <udid> [--restore] [--except <ids>] # iOS sims warden creates are slim by default (--no-slim / WARDEN_SLIM=0 opts out); a plain `warden claim` no longer restores, --restore does
warden sim profiles | warden sim measure [udid]     # slim categories for --except; a sim's real memory (also: warden devices --mem)
warden ls                                        # leases: resource, state, owner, repo/worktree, age, heartbeat
warden clone <udid|name> [--name x]              # duplicate a shut-down sim into the pool (seconds, no first boot)
warden golden ensure|ls|prune [--all]            # golden iOS images / Android snapshots new devices start from
warden arrange                                   # tile warden simulator windows in name order (macOS; also runs after iOS claims)
warden telemetry [status|enable|disable]         # anonymous usage telemetry: on by default, commands + flag names only; off with WARDEN_TELEMETRY_DISABLED=1 / DO_NOT_TRACK=1
warden doctor [--json]                           # check home, db, device tools, helper, install method, hooks, stale leases
warden devices [ios|android]                     # every sim/emulator (booted or not) + AVDs, warden-owned?, leased by (alias: list)
warden sims [--max-size 40G]                     # disk audit: every sim + runtime, size, owner, lease, what can go
warden sims prune [--dry-run|--yes]              # delete idle/orphaned/broken warden sims (+ LRU over --max-size)
warden sims delete [udids...|--suggested] [-y]   # multi-select → confirm → delete sims; stale/dead/duplicate ones pre-ticked (--dry-run)
warden check --udid <udid>                       # exit 2 if another owner holds it
warden heartbeat --mine
warden gc [--idle 20m]                           # reclaim stale leases, shut down idle warden devices

warden port claim --from 8091 --span 20 --json
warden port release --mine

在 GitHub 动作中安装管理员

Npm 软件包对 CI 不要求: 发布工作流程附加每个平台一个已编译的单文件二进制(warden-darwin-arm64 ...,还有 checksums.txt)到每个 GitHub 发布时,在此回放中一个复合动作安装正确的一个:

- uses: delacournz/warden/.github/actions/install-warden@main
  # with:
  #   version: v0.1.0   # optional pin; token defaults to github.token

token (它驱动器) gh)默认工作流程本身 github.token,这就足够了,因为repo是公开的,所以不需要PAT和动作访问设置. 行动验证了Sha256,并显示 warden 打开 PATH。一个裸体的剧本也会起作用: gh release download --repo delacournz/warden --pattern warden-darwin-arm64 --pattern checksums.txt。 。 。 .

干净的 macOS 跑车不需要前置状态: --profile 以权利要求创建(从首次使用时所构建的金色图像上克隆出来,约一至二分;缓存) ~/Library/Developer/CoreSimulator/Devices 在运行之间保持它) 倒回 simctl create。运行者必须安装 iOS 运行时间 .

快速新模拟器:黄金图像

全新的模拟器的首个启动器(Applelogo + Progress bar)需要1–10分,其中约80%是一次性的数据迁移. 显著的e2e测量(SAL-GOLDEN):

假设时间
新鲜创建 + 第一个启动146至239 s (中文(简体) )
复制一个固定的金色+靴子3.7 s + 11.9 s (中文(简体) )
3个平行发射的克隆~20 s 时

所以当 warden claim ios 需要一个 新设 池子设备,它 simctl clone从一个 金色图像这是一次启动的模拟警报器,等待数据传输完成(DMLastMigrationResults,从 bootstatus -b 它的CPU已经解决,然后关闭。 金色是先用后用 Xcode 构建 + 运行时间 + 运行时间 构建 + 设备类型 + 食谱,所以 Xcode 或运行时间的升级只是构建了一个新的 ()warden golden prune 删除旧的). 克伦斯是APFS复制-写作(每个~30 MB). 如果克隆失败,典狱长会回到 simctl create设置 WARDEN_GOLDEN=0 关闭克隆.

  • warden golden ensure [--profile iphone-17]:先建后建,故先取主张而后不取.
  • 一个必须造出金色指纹的说法 building golden for <profile> … prewarm with: warden golden ensure --profile <profile> 首先,在斯特德尔.
  • warden clone <udid|name> [--name x]: 复制任意 关闭 sim,例如你用手设置的, 进入典狱长的游泳池。 典狱长拒绝发射源 而不是关闭它.
  • 黄金从不分配,收养,由 gc 或计算在池中,以及 warden devices 标签 golden。 。 。 .
  • 已经存在的池子设备总是首先被再用;第二只靴子需要~6.5 s.

设备健康

  • 在启动(或重用)iOS sim后, warden claim 探测到: simctl spawn <udid> launchctl print system 必须在5秒内回答,而SpringBoard必须运行。 一个失败的图像被隔离(和关闭),另一个被声称,最多2次重复,然后是一个明显的错误。 失败的外国设备仅被跳过 。 Android还没有探测器.
  • warden release <id> --bad [reason] 用手隔离释放的警报器. warden devices 显示 quarantined 编号 : slim。 。 。 . warden sim unquarantine <udid|serial> 释出.
  • warden app ensure 当设备上的应用程序不再匹配缓存构建(iOS: CFBundleVersion,可执行大小和 main.jsbundle 大小).

一个新的博览会应用 : warden init, (中文(简体) ), warden dev, (中文(简体) ), warden e2e

warden init --bundle-id com.example.app   # bundle id → app.json, warden.config.ts, e2e/smoke.e2e.ts
warden dev                                # lease a sim, build / reuse the dev client, own Metro port, open the app
warden e2e --count 3                      # the e2e/ specs on the dev client, spread over 3 leased sims
  • warden dev [platform] 默认为 iOS. 每跑一次都会租赁自己的地铁港(8081:100)),因此不同工作树上的特工相并而行. 在租赁任何东西之前,它检查 捆绑的ID和 expo-dev-client 并打印修复.
  • 默认的本地 iOS 构建本身准备了新的检出 : expo prebuild 何时 ios/Podfile 失踪了, pod install 当Pods 丢失或同步不同步,那么 expo run:ios组合 build.ios 以书面运行.
  • 没有 e2e 套房在配置中, warden e2e 运行 *.e2e.ts 下划线 e2e/ 与 @delacour/warden-e2e (一个) bun test 每个设备的流程)超过2个模拟器,在dev客户端上和一个地铁管理员开始. warden init 写出套房以便您编辑它。 它为要安装的软件包命名( E)expo-dev-client, (中文(简体) ), @delacour/warden-e2e@<warden version>)并安装无.

e2e 脚本 : warden run

warden run ios --count 2 --port 8091:20 --port 3208:20 [--app] -- bun run e2e

warden run 操作命令 WARDEN_UDIDS, (中文(简体) ), WARDEN_UDID_<i>, (中文(简体) ), WARDEN_LEASE_IDS, (中文(简体) ), WARDEN_PORTS 财务报告和审定财务报表 WARDEN_PORT_<i> 设置。 它每30秒心跳一次,转发SIGINT/SIGTERM,在出站时释放出所有内容并传递出站代码. 与 --app,它首先确保dev构建安装在每个设备上(WARDEN_APP_PATH 编号 : WARDEN_APP_HASH) (中文(简体) ).

蝙蝠侠: warden batch

ls specs | warden batch ios --count 5 --max 5 --port 8091:20 --serve "bun run metro" --serve-ready tcp:8091 --jobs-from - --retry 1 -- bun run e2e:spec {job} --device {udid}

warden batch 要求 N 设备并运行一个任务队列, 每个设备有一个工人: {job}, (中文(简体) ), {udid}, (中文(简体) ), {worker} 财务报告和审定财务报表 {seq} 替换到命令中, 命令也得到 WARDEN_UDID, (中文(简体) ), WARDEN_WORKER, (中文(简体) ), WARDEN_JOB 财务报告和审定财务报表 WARDEN_JOB_SEQ。 。 。 . --serve 开始长寿进程( Metro) 先等待 --serve-ready. 实时网格跟踪每个设备,以及 --record <dir> (iOS)捕获每个模拟器,网格和a batch.json 时间表scripts/demo/compose.ts 把它们打入一个视频 只有在每份工作都通过时,才有0出口.

保存一个批次 warden.config.ts 并运行它的名称:

export default defineConfig({
  batches: {
    "salient-e2e": {
      project: "salient", platform: "ios", count: 5, max: 5, profile: "iphone-17",
      ports: ["8091:20"], app: true, retry: 1,
      env: { E2E_SESSION_FILE: "e2e-artifacts/batch/session.json" },
      serve: "bun scripts/e2e/run-ios.ts --session", serveReady: "file:e2e-artifacts/batch/session.json", serveTimeout: "20m",
      jobsFrom: { command: "bun scripts/e2e/select-specs.ts --list --offline" },
      cmd: ["bun", "scripts/e2e/run-ios.ts", "--attach", "{job}", "--device", "{udid}"]
    }
  }
});
warden batch salient-e2e                        # the preset as-is
warden batch salient-e2e --count 2 -- bun e2e {job}   # passed flags and -- <cmd> override it

您通过的旗帜覆盖了预设( 命令默认值不会) . --jobs 编号 : --jobs-from 替换其工作来源,以及 -- <cmd> 替换 cmd与 project、服务、工作以及 jobsFrom.command 运行在项目的根,相对预设的路径解析 app 安装工程的构建。 无 project,预设的cwd是配置文件的目录. CLI 路径解决您的 cwd. env 被添加到服务和工作环境. label 默认预设名称,也适用于港口租赁。 工作数量少于 count 每个任务都有一个装置.

受影响的e2e: warden affected 编号 : warden e2e

warden affected mobile --base origin/main --explain   # which specs this branch needs, and why
warden e2e mobile --base origin/main --count 2        # run them on leased devices; exit 1 if a required one fails

一个 e2e.<suite> 内 warden.config.ts 将 spec 文件映射到他们驱动的屏幕上(entries)和花花样(paths) (中文(简体) ). 典狱长将 git diff 与合并基数对齐, 用 TypeScript 解析器( tsconfig) 来行走每个光谱的导入图 paths,工作空间软件包,每个平台 .ios 编号 : .android 文件,仅输入字型已丢弃),并仅运行已更改文件到达的光谱,其中 runAll globs (锁文件, 本地 dirs) 选择一切 . warden e2e 运行它们像 warden batch,每个 passes 时间和写作 e2e-report.json见 受影响的 e2e 指南。 。 。 .

开发客户套件 metro: {}数字 : warden e2e <suite> 然后租出一个端口,在项目根开始自己的地铁,等待该端口被证明服务于此检查(另一个工作树的地铁在它上失败了运行而不是被附着),预发了捆绑和输出 WARDEN_METRO_URL 编号 : WARDEN_PORT 切入到光谱进程. devices: [{ profile, count, env, default }] 同时运行多条设备腿( name--devices all),每个设备的 spec进程运行在它共享的 specs ()isolate: "spec" 运行一个光谱,并且 jobTimeoutMs (默认每 spec 10 分) 杀死一个挂起的 spec 进程 .

光谱是 *.e2e.ts 以 @delacour/warden-e2e (单位:千美元)bun add -d @delacour/warden-e2e,与典狱长相同),运行于 bun test --preload @delacour/warden-e2e/preload (或 a 个) bunfig.toml 前加载 : test("…", async ({ app, device, screen }) => { await expect(screen.getByTestId("x")).toBeVisible(); })。 。 。 . warden e2e 租赁设备,安装构件和装置 WARDEN_UDID 编号 : WARDEN_BUNDLE_ID 编号 : WARDEN_LAUNCH_ARGS 和朋友, 并判断每个谱 从谱 results.jsonl· ; spec: { bundleId, launchArgs, timeout, actionTimeout, assertionTimeout } 套房的曲调, warmDrivers: false (或 --no-warm)跳过iOS帮助预热. 一个测试失败的叶子 failure.png, (中文(简体) ), screen-at-failure.txt 财务报告和审定财务报表 trace.jsonl 下级 <batchDir>/e2e/<worker>-<seq>/。见文件指南 写入规格 (单位:千美元)e2e/specs) (中文(简体) ).

基准

packages/e2e-bench 通过典狱长、大师、Detox和退休的Argent、代理和测试员,经营同样的8个测试套房。 军队在一个租赁设备上,写出Markdown + HTML报告(套装和每测试时间、冷启动、资源、残留).

最新iOS运行于EAS(2026-10-25,典狱长0.3.1):典狱长运行于86.30 s,1.56×快于Argent,1.06×快于代理设备,1.54×快于测试器. 陆军,每步中位数为85米相对321至481米相对. 完整的桌子和每件文物: 典狱长.co.nz/docs/e2e/bench/比较。 。 。 .

bun run bench doctor && bun run bench run --platform ios --runs 3

见 软件包/e2e-bench/README.md 公平规则和说明,以及 文件/基准/基准 已公布结果.

App 构建

warden app fingerprint ios
warden app ensure ios --udid <udid> --json   # { appPath, hash, source: installed|cache|eas|build, installed }
warden builds ls | prune --max-size 20G | import <App.app> --hash <h>

可选 warden.config.ts 在还原根( r)bun add -d @delacour/warden 用于自动补全; warden.config.json 还在工作:

import { defineConfig } from "@delacour/warden/config";

export default defineConfig({
  projects: [{
    name: "salient",
    root: "apps/salient/app",
    bundleId: { ios: "com.example.salient", android: "com.example.salient" },
    fingerprint: { command: "bun run --silent fingerprint:{platform}" },
    eas: { profile: "development-simulator", workflow: ".eas/workflows/dev-build.yml", trigger: false },
    build: { ios: "bunx expo run:ios --no-install --no-bundler" }
  }]
});

由于没有配置, 典狱长从中检测单个工程 app.json 编号 : app.config.* (通过) --bundle-id 用于动态配置。 它按此顺序解决: 已经安装在这个散列上 ~/.warden/builds/<projectKey>/<platform>/<hash> • 遗产缓存build:list --fingerprint-hash,然后下载;在飞行中等待构建;只有在 trigger 根据指纹核实的当地建筑。 一个建筑锁阻止了两个特工两次下载或建造相同的散列.

warden install 电线钩入它侦测到的每一个毒剂: Claude Code(~/.claude 或者说 claude (关于PATH)和代码x($CODEX_HOME 编号 : ~/.codex 或者说 codex 在路径. --claude 编号 : --codex 强制一(或两者兼有),而不论检测结果如何。 每个代理配置变化都显示 diff 并先询问(--yes 跳过, --dry-run 仅指印,非TTY --yes 跳过). 合并是一能之道,并保持所有其他的配置.

驱动设备(代理人)

声称,然后明确通过设备: warden claim ios --json 使用返回的 udid (Android: the serial) 每通电话。 光线代理索赔持续约5分钟,没有东西可以刷新;只有 warden dev 编号 : run 编号 : batch 编号 : e2e 或明示 warden heartbeat <leaseId> 保持一个设备更长。 勘探,跑 warden dev ios --json 在背景中( 请求并持有一个设备 + 一个地铁端口, 启动一个经过验证的地铁来服务此检查, 打开dev客户端) 并瞄准 udid 从它的第一条出线。 潜水员从不打电话 release --mine: 使用 release <leaseId>,或向 --label x 财务报告和审定财务报表 release --mine --label x。查看并驱动设备 warden ui,用于同一驱动器的 CLI 代理 : warden ui open <bundleId> --udid <udid> → snapshot -i (屏幕为 @eN 页:1 press @e3 --settle 编号 : fill id=email "…" 编号 : scroll down --until text=Done → wait id=todos-screen 编号 : is 编号 : get → close --release它检查每一次呼叫的租约(外国或失踪一次的2次离境); --claim 租赁设备)和 --json 打印一个 {ok, …} 文档。 选择器 : id=… label=… text=… role=… value=… editable=… nth=…。指南:应用程序/文件 agents/ui。 。 。 .

要创建 e2e 光谱,请在 warden ui record start <id> 财务报告和审定财务报表 warden ui record stop数字 : record note|undo|status|cancel 把它塑造成, stop 写入 e2e/<id>.e2e.ts 并运行一次在同一设备上(--no-verify 跳过; --helper <module#fn> 写入可重复使用的函数. snapshot -i 没有测试ID的标记元素 [no-id]· ; fill --secure 读取 WARDEN_UI_SECRET_<NAME>。指南:应用程序/文件 guides/author-specs。 。 。 .

克劳德代码

warden install --claude 添加:

  • (单位:千美元) 结束会话 钩子 关闭会话模拟 并释放其租借物,故一切事务无一例外。 惟有狱卒被创造,或课会自发地被关闭, 一个已经运行的图像 当代理把它捡起来, 比如你自己的模拟器。 应用程序一,发布但留在。 打开 /clear (理由 clear) sims 继续运行: 对话重新开始, 工作通常继续, 新会话用它的下一个重取 sim warden claim租赁一个仍然运行 warden e2e 编号 : batch 编号 : run 编号 : dev 持仓人也保留;其租赁被解除的跑道停止,并说是这样.
  • 未结束的会话 (死亡或终端关闭):他们的租约在TTL(30分;光线代理索赔5分)之后停止. warden gc 然后关闭那些sims 根据同样的规则, 但仅仅10+分钟后 租约停止运行, 从来没有 当一个非Apple应用程序运行在sim。 gc 最多每10分钟在背景中自动运行,由 claim编号 :run (单位:千美元)WARDEN_AUTO_GC=0 关了它,以及按要求.
  • 技能文件夹( e)SKILL.md + 键 references/)),上演 $WARDEN_HOME/skill/warden/ 并安装了动词技能CLI(bunx skills add <dir> --skill warden -g -a claude-code -y, (中文(简体) ), npx 倒计时; --dry-run 打印命令,将其放在 ~/.agents/skills/warden 和符号链接 ~/.claude/skills/warden。没有包或节点,此步骤将被跳过;使用 warden skill show直接写下规则 ~/.claude/rules/warden.md所剩无几 ~/.claude/rules/agent-device.md 或者说 argent.md 报告已退休的设置,但从未删除.

它也会移除 PreToolUse 安装旧式设备租赁钩(warden hook pretool 保持不动,所以一个旧的配置 继续工作.

代码

warden install --codex 将会话尾端勾钩合并到 $CODEX_HOME/hooks.json (默认) ~/.codex/hooks.json; 已声明的钩子 config.toml [[hooks.*]] 表格计数为已安装)。 代码钩子使用克洛德的格式和stdin JSON,所以 warden hook session-end 两种代理人的服务不变:

{
  "hooks": {
    "SessionEnd": [{ "hooks": [{ "type": "command", "command": "$HOME/.local/bin/warden hook session-end", "timeout": 3 }] }]
  }
}
  • 代码 跳过新钩或已更改的钩子,直到您信任它们为止: 运行 /hooks 安装后在 Codex 中一次.
  • 3 s 的编码封顶接尾钩, 并总是发出理由 other,所以请 /clear 保持-sims-running例外从不适用。 任何无法及时完成的勾勾都由 warden gc 租约一旦失效.
  • 对于Codex中的技能,使用 warden skill install。 。 。 .

发展

bun run test        # turbo: core + cli (incl. cross-process race tests)
bun run typecheck
bun run check       # biome

见 一般事务人员(其他职等) 计划 文档/计划/wdn-warden-cli.md。 。 。 .

许可证

麻省理工学院

版本与发布记录

@delacour/warden 共发布 19 个版本,首次发布于 2026/10/19;过去 12 个月发布了 19 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.16.0latest2026/11/092 天前
0.15.02026/11/093 天前
0.14.02026/11/065 天前
0.13.02026/11/065 天前
0.12.12026/11/065 天前
0.12.02026/11/066 天前

关于 @delacour/warden 的常见问题

@delacour/warden 是什么?

React Introduct and Expo的AI代理工具包:每个编码代理都获得自己的iOS模拟器或Android仿真器来驱动,调试,配置和E2E测试应用程序,并配有设备,端口和app构建了租赁的全机器

如何安装 @delacour/warden?

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

@delacour/warden 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@delacour/warden 支持 ESM 还是 CommonJS?

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

@delacour/warden 需要什么版本的 Node.js?

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

@delacour/warden 可以商用吗?

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

@delacour/warden 的下载量有多少?

根据 npm 官方下载统计,@delacour/warden 在 2026/10/12 – 2026/11/10 这 30 天内被下载 4,887 次,日均约 163 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@delacour/warden 还在维护吗?

最新版本 0.16.0 发布于 2026/11/09(2 天前);至今共发布 19 个版本,其中过去 12 个月发布了 19 个;首次发布于 2026/10/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。