自动化与脚本
使用 Clerk CLI 管理 Clerk 资源时,优先用…
当需要管理 Clerk 用户/组织/会话、模拟登录、本地 webhook 测试、部署验证、实例配置、环境密钥或调用 Clerk API 时,按本经验安全执行 clerk 命令。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
使用 Clerk CLI 管理 Cler特定
解决思路
- 只要任务涉及 Clerk 资源,优先用 `clerk` 二进制,不要手写 `curl`;它自动处理认证、密钥解析、app/instance 定位和格式化。
- 以 `clerk latest` 为目标;若 `clerk --version` 与最新可用 CLI 不一致,用 `clerk update` 刷新,或用 `bunx clerk@latest` 等包运行器调用最新版。二进制始终是事实来源,任何本经验声称的内容都用 `clerk <command> --help` 验证。
- 在用户主机 shell 上执行,而不是沙箱;Clerk CLI 依赖 OS 凭据库、家目录 Clerk 状态、仓库链接元数据、本地 `.env*` 文件、出站网络、浏览器和 localhost OAuth 回调。
- 在 agent mode 中,CLI 会在 host-sensitive 库边界做一次 best-effort 警告检查;看到 "Host-only Clerk state or system capabilities may be unavailable in agent mode..." 警告时视为权威,任何 auth/link/env/config/API/browser/OAuth 回调失败在主机重跑前都不可信。
- 优先在用户主机 shell 运行:`clerk doctor`、`clerk whoami`、`clerk auth login`、`clerk link`、`clerk env pull`、`clerk apps ...`、`clerk config ...`、`clerk api ...`。
- 若命令误在沙箱中运行并报 `Not logged in`、`auth_required`、`not linked`、缺少 env、keychain/file 权限错误或网络失败,不要把结果当权威;在采取行动或告知用户前先在主机重跑。
- 运行任何 `clerk` 命令前先确定要调用哪个二进制,并在本会话固定:`command -v clerk >/dev/null 2>&1 && clerk --version`。
- 若第 7 步输出 `latest` 或可信版本,本会话余下使用裸 `clerk`。
- 否则按项目 lockfile 对应的 runner 回退:bun (`bun.lock*`) 用 `bunx clerk@latest`,npm (`package-lock.json`) 用 `npx -y clerk@latest`,pnpm (`pnpm-lock.yaml`) 用 `pnpm dlx clerk@latest`,yarn >= 2 (`yarn.lock`) 用 `yarn dlx clerk@latest`。
- Yarn Classic (v1) 没有 `dlx`,视为无 preferred runner,回退到 PATH 上列表中的第一个 runner。
- npm 包名是 `clerk`,不是 `@clerk/cli`;不要把 `npm install -g clerk` 当首要安装方式。若全局 CLI 过期或行为不同,升级全局安装或回退到上面的 `latest` runner 形式。
- 会话开始、运行任何其他 Clerk 命令前,验证 CLI 已认证、已链接且健康:`clerk --version`,然后 `clerk doctor --json`。
- 总是先运行 `clerk doctor --json`;它提前捕获常见设置失败(未登录、项目未链接、缺少密钥、CLI 版本过期),避免后续命令报令人困惑的错误;在 agent mode 还包含 `Host execution` 检查,警告 Clerk 主机端配置/凭据目录不可写,这是当前调用可能在沙箱中的典型信号。
- 解析 `clerk doctor --json` 的每条结果:`name`、`status` (`pass`/`warn`/`fail`)、`message`、可选 `detail`、可选 `remedy`(如何修)、可选 `fix`(可自动修复问题的标签);据此行动或展示给用户。
- 若 `Host execution` 警告,在信任同一次沙箱运行中的 auth/link/env/API 失败前先在主机重跑;之后任何命令开始异常时重跑 `clerk doctor --json`。
- 若 `clerk --version` 报告的 CLI 比本经验覆盖的更新,先相信 `clerk <command> --help` 并刷新技能包;`--accountless` 和 accountless JSON keys 从 CLI 3.3+ 开始提供,旧 CLI 用 `--keyless` 别名或升级。
- `clerk init` 不要求 `clerk auth login`:在支持 accountless 的框架上,无 `--app` 的未认证 bootstrap,或无 `--app`/现有项目链接的未认证 agent 运行,会铸造未认领的 accountless app 和临时开发密钥,无需账号、浏览器或标志;已登出的人类在现有项目中重跑会走登录流程,`--accountless` 强制临时密钥路径。
- accountless 路径下大多数 instance 命令仅凭该密钥即可工作。
- accountless 路径跟随本地 `sk_` key(包括 `sk_live_`,无论是否认领),所以当目标真实 app 时必须传 `--app <id>`。
- `clerk open` 返回等同于凭据的 claim URL,绝不能粘贴到日志或 PR。
- 需要账号的命令和完整规则见 `references/auth.md#accountless-operating-without-an-account`。
- 理解分层:Session/project 层用 `auth login`、`link`、`unlink`、`whoami`、`env pull`、`doctor` 做认证、把仓库链接到 Clerk app、拉取 env keys。
- Instance config 层用 `config pull`、`config schema`、`config patch`、`config put` 管理某个 instance 的配置(social providers、session lifetimes 等)。
- Backend API(默认)用 `clerk api <path>` 管理运行时数据:users、orgs、sessions、invitations、JWT templates、webhooks。
- Platform API(`--platform`)用 `clerk api --platform <path>` 管理账号级:applications、instances、billing。
- Frontend API(`--fapi`)用 `clerk api --fapi <path>` 访问 instance 的公开客户端 API(clerk-js 调用的 API)。
- 用 `clerk link` 把项目链接到 application;链接后多数命令会从仓库 git remote 自动解析目标 app 和 dev instance;要指定其他目标,传 `--app <id>` 和/或 `--instance dev|prod|<instance_id>`;完整解析顺序见 `references/auth.md`。
- 不要记忆 endpoint,动态发现:`clerk api ls` 列出所有 Backend API endpoint;`clerk api ls users` 按关键词过滤(匹配 path、summary、tag、operationId);`clerk api ls --platform apps` 列出 Platform API endpoint。
- 在 `clerk api <path>` 前先用 `clerk api ls <keyword>`;若看不到预期 endpoint,它很可能未暴露。
- `clerk api` 做带认证 HTTP 调用:自动解析 key、根据 body 自动识别 method、支持 stdin、可用 `--dry-run` 预览 mutation。
- GET 示例:`clerk api /users` 列出 users;`clerk api /users/user_abc123` 获取单个;`clerk api /users?limit=5&order_by=-created_at` 行内 query params。
- Mutation 示例:`clerk api /users -d '{"email_address":["a@b.co"]}'`(有 body 自动 POST);`clerk api /users/user_abc123 -X PATCH -d '{"first_name":"A"}'`;`clerk api /users/user_abc123 -X DELETE`。
- Body 来自文件或 stdin:`clerk api /users --file payload.json`;`cat payload.json | clerk api /users`。
- 始终先预览 mutation:`clerk api /users/user_abc123 -X DELETE --dry-run`;再重跑不带 `--dry-run`,确认后加 `--yes`。
- 指定 app/instance:`clerk api /users --app app_abc123 --instance prod`。
- 调试时包含 response headers:`clerk api /users --include`。
- Platform API:`clerk api /v1/platform/applications --platform`。
- Frontend API:`clerk api --fapi /environment`;它未认证;`--fapi` 和 `--platform` 不能组合,`--secret-key` 会被忽略。
- 人类模式无参数 `clerk api` 进入交互式请求构建器;agent 模式无参数打印用法并退出 `0`;脚本中始终显式传 endpoint(或 `ls`)。
- instance config 优先用专用 `clerk config ...` 命令,而不是 raw Platform API `/config` 路径;它们比 raw endpoint 更干净地处理 dry-run、diffing 和确认。
- 任何 mutation 在真跑前先 `--dry-run`,然后不带 `--dry-run` 重跑(确定时加 `--yes`);agent 模式绕过交互确认,`--dry-run` 是唯一安全网。
- JSON body 必须是合法 JSON;CLI 会验证并拒绝畸形 payload。
- Endpoint path 可带或不带 `/v1/` 前缀;Backend API 调用两者都行,CLI 会归一化。
- 具体模式(列出/过滤 users、创建 org、impersonation sessions 等)见 `references/recipes.md`。
- 对可能很大的输出(`users list`、`apps list`、`config pull`、大多数 `clerk api` GET 可能数 KB 到 MB),不要直接读入上下文;先保存到文件,再用 `jq` 只查需要的内容。
- 保存示例:`clerk users list --json --limit 250 > /tmp/users.json`;`clerk apps list --json > /tmp/apps.json`;`clerk api /users/user_abc123 > /tmp/user.json`。
- 用 `jq` 检查:`jq '.data | length' /tmp/users.json` 看当前页大小;`jq '.hasMore' /tmp/users.json` 看是否还有页;`jq '.data[0] | keys' /tmp/users.json` 发现 user shape;`jq '.data[] | {id, email_addresses}' /tmp/users.json` 投影少量字段;`jq '[.data[] | select(.banned)] | length' /tmp/users.json` 不读行做聚合。
- 没有 `jq` 时回退 Python 或 Node,流式读取文件而不整体打印:`python3 -c 'import json; d=json.load(open("/tmp/users.json")); print(len(d["data"]), d["hasMore"])'`;`node -e 'const d=require("/tmp/users.json"); console.log(d.data.length, d.hasMore)'`。
- 只有真正需要看原始结构做一次性调试时才 `cat`/`head` 文件;翻页时把每页写到自己的文件(如 `page-${offset}.json`),让各页可独立检查。
- `clerk init`:把 Clerk 脚手架进项目;未认证 bootstrap 且无 `--app`,或未认证 agent 运行且无 `--app` 或现有链接时,默认写入临时开发密钥,无需登录;`--starter` 只支持 Next.js、React Router、Astro、Nuxt、TanStack Start、React、Vue、JavaScript 的 bootstrap;`--accountless` 搭配 `--app`/`--login`,以及 `--template`/`--fresh` 搭配 `--login`,在脚手架前就是 usage error;`--template`/`--fresh` 在运行解析到真实 app 时(包括仅登录时)只在策略解析后报错,因此 starter 运行会留下已脚手架项目;关键 flags:`--framework`、`--pm`、`--name`(搭配 `--starter`)、`--app`、`--starter`、`--accountless`、`--login`、`--template`、`--fresh`、`-y`、`--no-skills`。
- `clerk auth login`:OAuth 浏览器登录并存 token;bootstrap 或 accountless instance config 不需要;agent 模式若已登录则 no-op;无存储会话时仍打开浏览器并绑定 localhost 回调,所以不是无人值守;headless 流程优先 `CLERK_PLATFORM_API_KEY`;别名 `signup`、`signin`、`sign-in`;顶层快捷方式 `clerk login`。
- `clerk auth logout`:清除存储凭据;别名 `signout`、`sign-out`;顶层快捷方式 `clerk logout`。
- `clerk whoami`:打印登录邮箱。
- `clerk link` / `clerk unlink`:把本仓库链接到 Clerk app 或移除链接;`unlink` 在 agent 模式要求 `--yes`;细节见 `--help`。
- `clerk env pull`:把 publishable + secret keys 写入框架 env 文件(合并而不是覆盖);解析顺序 `.env.development.local` → 框架首选文件 → `.env.local`;用 `--file` 覆盖。
- `clerk config {pull,schema}`:获取 instance config JSON 或其 JSON Schema。
- `clerk config patch`:对 instance config 做部分更新(PATCH);传 `--destructive` 才真正删除 patch 涉及的子资源,否则重置为默认;flags:`--app`、`--instance`、`--file`、`--json`、`--dry-run`、`--yes`、`--destructive`。
- `clerk config put`:对 instance config 做全量替换(PUT);传 `--destructive` 才真正删除被移除的子资源,否则重置为默认;flags:`--app`、`--instance`、`--file`、`--json`、`--dry-run`、`--yes`、`--destructive`。
- `clerk apps {list,create}`:列出或创建 Clerk applications;agent 模式默认 JSON;细节见 `--help`。
- `clerk users`(无子命令):人类模式交互式选择 users 动作;agent 模式打印动作列表并退出 `2`;agent 始终传显式子命令;flags:`--app`、`--instance`、`--secret-key`。
- `clerk users list`:通过精选 BAPI flags 列出 users;JSON 输出(管道或 agent 模式默认)为 `{data, hasMore}`,调用方可翻页而不用 `/users/count`;`--limit` 默认 100(最大 250);flags:`--limit`、`--offset`、`--query`、`--email-address`、`--phone-number`、`--username`、`--user-id`、`--external-id`、`--order-by`、`--json`、`--app`、`--instance`、`--secret-key`。
- `clerk users create`:从精选 flags 或 raw BAPI body 创建 user;任何模式都没有确认提示,会立即写入;`--yes` 被接受但无效;`--dry-run` 是唯一安全网,先预览;flags:`--email`、`--phone`、`--username`、`--password`、`--first-name`、`--last-name`、`--external-id`、`-d, --data`、`--file`、`--dry-run`、`--yes`、`--json`。
- `clerk users open [user-id]`:打开 user 的 dashboard 页面;agent 模式要求 `user-id` 并打印 JSON descriptor,而不是启动浏览器;细节见 `--help`。
- `clerk impersonate [user]`:为调试以 user 身份登录:创建短期 actor token 并打印 sign-in URL;别名 `clerk imp`;要求 `clerk auth login`(没有 `--secret-key`-only 绕过);每个 token 标记 `cli:<email>` 以便审计;`[user]` 接受 `user_...` ID、精确 email 或模糊搜索词;在生产上会绕过用户 MFA 且可能计入 impersonation 配额,先与用户确认;flags:`--print`、`--open`、`--yes`、`--expires-in <seconds>`(默认 3600)、`--actor <context>`、`--app`、`--instance`。
- `clerk impersonate revoke <actor-token-id>`:撤销待处理的 actor token;token `id` 只在创建时打印(Backend API 没有 actor-token list endpoint),所以当时就捕获;flags:`--app`、`--instance`。
- `clerk open [subpath]`:在浏览器打开已链接 app 的 dashboard;agent 模式打印 JSON descriptor 而不是打开;细节见 `--help`。
- `clerk deploy`:人类模式生产部署向导;agent 模式发出只读 JSON handoff 并告诉 agent 是让人类运行向导、等待 provisioning、完成 OAuth,还是什么都不做;flags:`--mode agent`、`--mode human`、`--verbose`。
- `clerk deploy status`:只读部署验证;触发 DNS 检查,报告聚合 domain 和 OAuth 就绪状态,仅当完成时退出 `0`;agent 模式默认快速检查一次,传 `--wait` 持续等待;flags:`--mode agent`、`--wait`、`--verbose`。
- `clerk webhooks listen`:第一方本地 webhook tunnel(类似 `stripe listen`):打开 Svix relay inbox URL,并把每次投递转发到本地 handler;无需 auth、无需 linked project、无需 Clerk API;完整流程见 `references/recipes.md#webhooks-local-testing`;flags:`--forward-to <url>`(必填)、`--token <c_token>`、`-H, --header <k:v>`(可重复)、`--json`(NDJSON)。
- `clerk webhooks token`:铸造 relay token(`c_` + 10 个 base62 字符)以在多台机器间固定稳定的 `listen` inbox URL:`clerk webhooks listen --token "$(clerk webhooks token)" --forward-to ...`;flag:`--json`。
- `clerk webhooks verify`:离线验证 webhook signature(纯本地 HMAC,无需 auth):从保存的 `listen` event line(`--delivery @event.json`)或四个原始值;`--secret <whsec>` 必填;flags:`--secret <whsec>`、`--delivery @file`、`--payload @file`、`--id`、`--timestamp`、`--signature`、`--json`。
- `clerk enable orgs` / `clerk disable orgs`:切换 instance 上的 Organizations;org 功能、组件和 API 用法见 `clerk-orgs` 技能;flags:`--force-selection`、`--auto-create`、`--max-members <n>`、`--domains`、`--dry-run`、`--yes`、`--app`、`--instance`。
- `clerk enable billing` / `clerk disable billing`:为 users 和/或 orgs 切换 billing(默认两者);plans、pricing components、entitlements 见 `clerk-billing` 技能;flags:`--for <orgs|users>`、`--dry-run`、`--yes`、`--no-skills`(仅 enable)、`--app`、`--instance`。
- `clerk doctor`:健康检查(CLI 版本、登录、链接、env、config、completion;agent 模式加 host-execution probe);flags:`--json`、`--spotlight`、`--verbose`、`--fix`。
- `clerk api [path]`:对 Backend/Platform API 做认证 HTTP;flags:`-X`、`-d`、`--file`、`--dry-run`、`--yes`、`--include`、`--app`、`--secret-key`、`--instance`、`--platform`。
- `clerk api ls [filter]`:从内置 OpenAPI catalog 发现 endpoint;细节见 `--help`。
- `clerk completion [shell]`:打印 shell completion 脚本(`bash`、`zsh`、`fish`、`powershell`)。
- `clerk update`:更新 CLI 到最新版本;flags:`--channel`、`-y`、`--all`。
- `clerk <command> --help` 是 flags 的事实来源;本表只是提示不是规范;运行不熟悉的命令或 flag 组合前,每会话先跑一次 `clerk <command> --help`;每个命令还在源码定义 `setExamples([...])`,`--help` 会渲染可复制粘贴 Examples block,很少需要猜语法。
- CLI 在 stdout 不是 TTY,或设置 `--mode agent` / `CLERK_MODE=agent` 时自动检测 agent mode。
- agent mode 下交互式提示禁用:通常显示 picker 的命令(`link` 无 `--app`、`unlink` 无 `--yes`、`users` 无子命令)要么自动解析,要么退出 usage error;无参数 `clerk api` 打印用法并退出 0,显式传 endpoint(或 `ls`);脚本调用始终传显式 flags(`--app`、`--yes`)。
- agent mode 下 host-sensitive 操作每次调用发一次沙箱警告;若出现,在主机重跑同一命令后再信任结果。
- 若你的 harness 不明显表现为 agent mode,强制它:`--mode agent` 或 `CLERK_MODE=agent`,以确定性地获得 CLI 的非交互行为和沙箱警告路径。
- agent mode 下 `link` 支持确定性流程:`clerk link --app <id>` 直接链接;没有 `--app` 时 CLI 先尝试基于 key 的静默 autolink;若不能无歧义确定 app,则退出并让你传 `--app`。
- agent mode 下 `init` 不需要登录——不要先登录:未认证 agent 运行铸造未认领 accountless app 和临时 dev keys;`--app <id>` 或预先 link 则目标真实 app;`--accountless` 强制临时密钥路径,优先于 session 和现有 link;`--keyless` 仍是 deprecated 兼容别名;框架不支持临时 key 且无 app target 时打印手动指引并干净退出;flag 互斥见命令表。
- `--fresh` 是破坏性的:替换临时 app,并无提示覆盖 env keys 和 `.clerk/keyless.json` breadcrumb,孤立上一个 app 和其 users;绝不要只为重跑 `init` 而传它。
- agent mode 下 `unlink` 要求 `--yes`;它以 `isAgent() && !options.yes` 为门槛,没有就退出 usage error;这是例外不是模式。
- 只有 `unlink` 实际要求 `--yes`;其他确认门槛写成 `isHuman() && !options.yes`,所以 agent mode 直接跳过:mutation 无提示执行且无错误;传 `--yes` 无害但什么也不改变;不要把它当安全门槛,`--dry-run` 才是真的。
- agent mode 下 `impersonate` 要求 `[user]` positional;若搜索词匹配多个 user,退出 `2` 并列出候选 user IDs——用具体 `user_...` ID 重试;输出是 JSON object(`{url, id, userId, actor, ...}`);把 `url` 展示给用户并捕获 `id`——这是记录 revoke handle 的唯一机会。
- `webhooks listen` 是长期运行命令;放到后台运行;agent 模式(或 `--json`)发出 NDJSON:一行 `ready`(`{type:"ready", relay_url, forward_to}`),然后每次投递一行 `event`;每个 event line 可喂给 `clerk webhooks verify --delivery`。
- agent mode 下 `doctor --fix` 被忽略;解析 `doctor --json` 输出的 `remedy` 字段并自行处理。
- `apps list` 和 `apps create` 在管道时默认 JSON。
- `users` 像 `apps` 一样在管道时默认 JSON;`clerk users list` 和 `clerk users create` 在 agent mode 输出 JSON;裸 `clerk users`(无子命令)在 agent mode 是 usage error——显式传 `list`、`create` 或 `open`;`clerk users open` 在 agent mode 要求 `user-id` positional 并打印 JSON descriptor,而不是启动浏览器。
- `deploy` 有 agent handoff 加验证门槛:agent mode 下裸 `clerk deploy` 只读并发出 JSON handoff;它从不驱动交互式向导;不要告诉 Claude 或其他 agent 运行 `! clerk deploy`,因为向导需要交互式 stdin 提示;需要时请人类在新终端窗口运行 `clerk deploy`,然后运行 `clerk deploy status --mode agent` 验证完成;见 `references/agent-mode.md#deploy-handoff-and-verification`。
- `--input-json <json|@file|->` 可在任何命令上把 JSON 展开为 flags(如 `clerk init --input-json '{"framework":"next","yes":true}'`);stdin 需要显式 `-` marker(`echo '{"yes":true}' | clerk init --input-json -`);裸管道 stdin 不会自动检测,所以 shell 循环和自读命令(`cat body.json | clerk api …`)不受影响;把 `--input-json` 放在 leaf subcommand 之后;完整规则见 `references/agent-mode.md#passing-options-as-json---input-json`。
- 输出格式:`--json` 用于 `apps list` 和 `doctor`;`clerk api` 的响应 body 是原始 API JSON,可自由 pipe 到 `jq`。
- 退出码:`0` 成功,`1` 运行时错误,`2` usage/validation error;`doctor` 任一检查失败返回 `1`。
- 错误格式:用户可见错误向 stderr 打印单行并设置非零退出码;调试时用 `--verbose` 看 stack traces。
- 安全规则:先发现再行动——`clerk api <path>` 前先 `clerk api ls <keyword>`。
- 安全规则:预览 mutation——每个 `config patch`、`config put`、`api -X POST/PATCH/PUT/DELETE` 都加 `--dry-run`。
- 安全规则:生产中显式指定目标——传 `--instance prod` 而不是依赖默认,生产 mutation 前与用户确认。
- 安全规则:绝不提交 secrets——`env pull` 写入 `.env.local`(应被 gitignore);不要把 secret keys 粘贴到代码或聊天。
- 安全规则:用 `doctor --json` 诊断,先别假定 CLI 坏了。
适用边界 · 注意事项
- 不要在沙箱或缺少主机凭据/家目录/网络/浏览器的环境中信任 auth、link、env、API 失败结果;应先在用户主机 shell 重跑。
- 不要在未与用户确认时对生产执行 mutation、impersonate、config destructive 操作,或用 `--fresh` 重跑 init。
- 不要在没有安装或无法运行 `clerk` CLI、无法访问 Clerk 服务时使用;若版本与技能覆盖不一致,先用 `--help` 验证或升级 CLI。