典狱长
一个用于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 install | npm 注册 : @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 注册.
释放
- 目标
develop一个改变什么@delacour/warden舰只增加一个变换器:bun changeset选择@delacour/warden,选择补丁 / 小/ 主,写出一行摘要.@delacour/warden-e2e紧跟在锁上 只有医生和内部的公关不需要. - 每一次推动
develop打开或更新“ QQ core( 释放): vX. Y. Z ” PR, 标题为它将要传送的版本 。 它撞倒了版本,写着CHANGELOG.md并消耗更改. - 合并公关.
promote.yml快速前进main并按下标签v<version>没有人推动main或手持标签. main是文件网站部署的 标签运行.github/workflows/release.yml,用于检查标签是否匹配版本,运行类型检查/检查/测试,构建warden-{darwin,linux}-{arm64,x64}加号checksums.txt并出版"GitHub"发行.- 相同的工作流程阶段是 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 继续运行: 对话重新开始, 工作通常继续, 新会话用它的下一个重取 simwarden 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。 。 。 .