概述
Flashduty CLI(flashduty)是一款命令行工具,可在终端中完成故障生命周期管理、值班查询、状态页发布、通知模板调试等操作,适用于运维脚本、本地排障以及与 AI 编程代理协同工作。
工具开源在 flashcatcloud/flashduty-cli,支持 macOS、Linux 和 Windows。
安装
- macOS / Linux
- Windows (PowerShell)
- 手动下载
/usr/local/bin,可通过环境变量 FLASHDUTY_INSTALL_DIR 自定义。安装选项
认证
登录
凭证解析顺序
CLI 按以下优先级查找 APP Key(高优先级在前):--app-key命令行参数(脚本场景使用)FLASHDUTY_APP_KEY环境变量- 配置文件
~/.flashduty/config.yaml(由flashduty login写入)
配置文件
存储在~/.flashduty/config.yaml,权限为 0600:
配置命令
全局参数
所有子命令均支持以下参数:命令清单
incident — 故障生命周期
incident list 常用过滤参数:
时间格式示例:
5m、1h、24h、168h、2026-04-01、2026-04-01 10:00:00、1712000000。
工作项与跟进项(work-item-*)
incident work-item-* 管理挂靠在故障或复盘上的工作项,--item-type 区分两种类型:action(故障行动项,挂靠进行中的故障)与 follow_up(复盘跟进项,必须绑定复盘 ID)。
work-item-create 关键参数:--item-type(必填,action 或 follow_up)、--title(必填,最多 512 字符)、--idempotency-key(必填幂等键,最多 128 字符)、--post-mortem-id(follow_up 必填,action 禁止)、--assignee-ids(初始负责人)。更新类操作(update/complete/convert/delete/assignees-reset)均需传 --version(乐观锁,必须与当前存储版本一致)。
复盘报告(post-mortem-*)
复盘命令位于incident 命令组下(没有独立的 post-mortem 顶层命令组):
post-mortem-template-list、post-mortem-template-info <template-id>、post-mortem-template-upsert(缺省 --template-id 时为创建,创建时 --team-id 必填)、post-mortem-template-delete <template-id>(不可逆)。
评论类型(comment-type-*)
change — 变更记录
--channel、--since、--until、--type、--limit、--page。
member — 成员查询
member list 支持 --query(姓名/邮箱关键字搜索)、--role-id、--page、--limit、--orderby、--asc。
member info-reset 通过 --member-id、--member-name、--email、--phone 或 --ref-id 之一定位成员,要修改的字段经 --data '{"updates":{...}}' 传入(必填);--from api 在账户关闭成员邀请时,可将更新后的邮箱/手机号直接标记为已验证。
member invite 的成员列表经 --data '{"members":[...]}' 传入;当账户关闭成员邀请且指定 --from api 时,成员会直接以启用状态创建(邮箱/手机号标记为已验证),不再发送邀请邮件。
team — 团队管理
team list 支持 --query(团队名称子串匹配)、--page、--limit、--orderby(created_at/updated_at/team_name)、--asc、--person-id(按成员 ID 过滤所属团队)。
team info 支持通过 --ref-id、--team-name 或 --team-id 指定团队(三选一);同时提供多个字段时,按 --ref-id > --team-name > --team-id 的优先级取用。
team upsert 创建或更新团队:
--team-name(必填,1–39 字符)--team-id(填写则为更新,否则创建)--description(最多 500 字符)--person-ids(成员 ID 列表;会完整替换现有成员名单,更新前请先用team info确认当前成员)--emails(按邮箱匹配并加入已存在的成员;不匹配任何现有成员的邮箱会被静默忽略,不会发送邀请)--phones(按手机号匹配并加入已存在的成员;不匹配的号码会被静默忽略,非 E.164 格式的号码按--country-code解析)--country-code(对非 E.164 格式的--phones号码应用默认国家码)--ref-id(外部系统引用 ID)
team upsert 的 --emails / --phones 只匹配并附加现有成员,不会发送任何邀请。需要邀请新成员加入组织时,请使用 flashduty member invite。team delete 支持通过 --team-id、--team-name 或 --ref-id 指定团队,操作不可逆。
channel — 协作空间查询
--name。
channel escalate-rule-list — 分派策略查询
分派策略现已并入channel 命令组,通过位置参数传入协作空间 ID:
escalate-rule-create、escalate-rule-update、escalate-rule-delete(均在 channel 命令组下,--channel-id 为必填)。
channel 静默/抑制/丢弃规则 — 降噪规则管理
协作空间级降噪规则通过channel 命令组管理,规则语义与配置项参见降噪管理。三组命令(silence-rule-* 静默、inhibit-rule-* 抑制、unsubscribe-rule-* 丢弃)形态相同,各含 list/create/update/enable/disable/delete 六个动作:
inhibit-rule-* 与 unsubscribe-rule-* 用法相同;inhibit-rule-create 需 --equals(源与目标告警的配对标签键)。silence / inhibit 均可加 --is-directly-discard 让被抑制的告警直接丢弃而非合并。注意 *-rule-create 与 *-rule-list 的 channel-id 是位置参数,*-rule-update/delete/enable/disable 使用 --channel-id 标志;--rule-id 为 MongoDB ObjectID 字符串。
field — 自定义字段查询
--name。
status-page — 状态页管理
从 Atlassian Statuspage 迁移
迁移任务为异步执行,需通过migration-status 轮询进度:
change-delete、change-info、change-list、change-timeline-delete、change-timeline-update、change-update、component-upsert、component-delete、section-upsert、section-delete、info、subscriber-list、subscriber-import、subscriber-export、template-list、template-upsert、template-delete。
rum — RUM 应用与会话回放
用于管理 RUM 应用和导出会话回放数据。应用命令覆盖详情、批量读取、列表、Webhook 测试,以及创建、更新、删除。application-list 常用参数:
application-create / application-update 的核心字段:
application-webhook-test 会返回 ok、status_code 和 message,可用于验证 RUM 告警 Webhook 是否真正收到了平台发出的测试事件。会话回放
session-replay-metadata 的 --ts 可填写会话开始时间的 Unix 毫秒时间戳,用于区分不同时间窗口中复用的会话 ID。
session-replay-segments 常用参数:
错误摄入规则(error-ingestion-rules-*)
错误摄入规则按过滤条件筛除或改写应用上报的错误事件:--description 最长 512 字符;create/list/history-list/history-revert 以位置参数接收 application-id,update/enable/disable/delete 通过 --application-id 与 --rule-id 标志指定目标。
预设严重级别规则(issue-preset-severity-rules-*)
预设严重级别规则为匹配条件的错误预设等级,用于 issue 分级:资源信息(resource-info)
oncall — On-call 许可证
fixed 表示固定分配,temporary 表示当前临时许可证窗口内生效。
template — 通知模板
dingtalk、dingtalk_app、feishu、feishu_app、wecom、wecom_app、slack、slack_app、telegram、teams_app、email、sms、zoom。
session — AI SRE 会话
用于巡查 AI SRE(以及其他 Flashduty 智能体)的会话:session list 列出调用者可见的会话,session export 将单个会话的完整事件流式导出,便于离线分析。
session list 常用参数:
服务端
/safari/session/list 单页上限为 100 条,超出 --limit 时 CLI 会自动向服务端翻页拉取,无需手动分页。API 本身没有时间窗口过滤,--since 是在拉取后于客户端按会话的 updated_at 进行过滤的。session export 将会话事件以换行分隔 JSON(NDJSON)流式写入标准输出:第一行始终是 session_meta 信封,其后每行是一个事件(user_message、llm_call、tool_call、subagent_dispatch、final_answer、agent_text、error)。导出内容可能很大,建议重定向到文件而非直接打印到终端:
monit-agent — 主机/数据库在线诊断
通过 flashmonit 代理对目标主机或数据源执行在线诊断,无需登录目标机器。catalog 和 invoke 均需要 --target-locator(内网 IP、主机名或数据源名称)。--target-kind 可选(host、mysql、redis 等),不填时由代理自动推断。
invoke 通过 --data 指定要运行的工具列表,最多 8 个并发:
--data -):
monit-query — 监控数据源查询
直接探测监控后端数据源,无需经过告警规则层。data 子命令支持 9 种数据源类型(Prometheus、VictoriaLogs、Loki、MySQL、SLS、Elasticsearch、PostgreSQL、Oracle、ClickHouse);diagnose 支持 prometheus(指标趋势)、victorialogs、loki(日志模式);已弃用的 rows 支持 prometheus、victorialogs、loki、mysql。
diagnose 常用参数:
data 常用参数:
data 返回稳定的 query_result.v1 结构化结果:format 固定为 query_result.v1,result.kind 为 frames(类型化表格/时序帧)、records(字段灵活的记录,可含嵌套 JSON 或 null)或 samples(带完整标签集的即时样本)三者之一,不再把结果强制压平为旧版行结构。
rows 常用参数:--ds-type、--ds-name(均必填)、--expr(查询表达式,必填)、--args KEY=VALUE(可重复)。rows 已弃用,请改用 monit-query data。rows 原始模式(loki / victorialogs)可通过 --args <ds-type>.start=<t> 与 --args <ds-type>.end=<t> 指定时间窗口,取值格式与 diagnose 的 --time-start/--time-end 相同(相对时长、now、日期/RFC3339、Unix 秒或毫秒),CLI 会统一归一化为数据源要求的 Unix 秒。
monit — 监控规则表达式预览
如果你想在保存规则前直接验证某条数据源表达式,可以使用preview-sync 走一条同步预览请求,拿到原始结果。
monit servicemap — 服务拓扑(Beta)
monit servicemap-* 命令族访问服务拓扑(ServiceMap)能力,页面操作见服务拓扑。
summary 与 topology 的锚点主机经 --data '{"anchor":{...}}' 传入;topology 常用 --depth(遍历深度,1–3,默认 1)、--max-nodes(默认 100,上限 500)、--max-edges(默认 200,上限 1000)。
alert — 告警与告警事件查询
list 命令常用过滤参数:--severity(Critical,Warning,Info)、--channel(逗号分隔协作空间 ID)、--integration(逗号分隔的集成 ID)、--since/--until、--limit(最大 100)、--page。alert-event list 另有 --integration-type,按逗号分隔的插件键过滤(如 AliCloud,Prometheus)——注意它取插件键而非集成 ID,按集成 ID 过滤请使用 --integration。
automation — AI SRE 自动化规则
automation 命令组管理 AI SRE 的自动化规则——创建、查询、更新、删除、运行历史与触发,页面操作见自动化。
create 常用参数:
update 可改字段:--name、--prompt/--prompt-file、--schedule/--at/--weekday/--cron-expr、--enable/--disable、--enable-schedule/--disable-schedule、--enable-http-post-trigger/--disable-http-post-trigger、--rotate-http-post-token、--environment-kind/--environment-id。个人 / 团队作用域创建后不可变更,update 不提供改作用域的参数。
runs 支持 --status(queued/running/retrying/succeeded/partial/failed/skipped/abandoned)、--trigger-kind(schedule/debug/http_post)、--since/--until、--page、--limit。fire 用触发器的 Token 鉴权(--token,或环境变量 FLASHDUTY_AUTOMATION_TRIGGER_TOKEN),--text 传本次运行的上下文,--data 传完整 JSON 请求体(内联 JSON 或 - 读 stdin)。
全量命令覆盖
除上述精选命令外,CLI 现已通过 spec 驱动的代码生成实现对 Flashduty OpenAPI 的全量覆盖。当前 OpenAPI 含 337 个 API 操作,CLI 为其中 336 个操作生成对应命令(session-read-export 以手工实现的 session export / safari session-export 命令提供),并按资源组织为顶层命令组。除 On-call 域(incident、incident-trigger-subscription、change、channel、field、status-page、template 等)外,还覆盖了:
- AI SRE(
safari):a2a-agents、automations、knowledge、mcp-servers、sessions、skills 等 - 告警与降噪:alert、alert-event、enrichment(alert-rules、rule-sets)、route
- On-call 与日程:calendar、schedule
- 平台管理:account、member、person、team、role(roles-permissions)、audit(audit-logs)
- 监控与 RUM:monit、rum、sourcemap
- 集成与 Webhook:datasource(IM 集成)、webhook(integrations)
flashduty safari a2a-agent-get、flashduty safari session-list),其入参与返回字段直接映射到对应 API。鼓励用 flashduty <资源> --help 逐层探索:
--start-time / --end-time)与精选命令一样支持人性化的时间格式:相对时长(7d、24h,表示从当前往前推)、+7d(从当前往后推,即未来时间)、now、日期或日期时间(如 2026-05-01、2026-05-01 10:00:00)、Unix 秒级时间戳。此外,--since 和 --until 分别是 --start-time 和 --end-time 的别名,可互换使用;若两种写法同时传入且取值不同,CLI 会报冲突错误。
knowledge — AI SRE 知识库
safari knowledge-* 命令族管理 AI SRE 的知识包(Knowledge Pack)——账户或团队作用域下的版本化文件树(DUTY.md 加运行手册、FAQ、服务清单等),会话开始时会被加载进每个 AI SRE 沙箱。知识包的完整功能模型(DUTY.md 结构、@引用、账户/团队作用域、文件约束)参见 管理知识。
knowledge-file-put 的 --content-b64 必须是合法 UTF-8 文本的 Base64 编码,--content-type 省略时按文件扩展名推断。knowledge-file-delete 默认在文件仍被其他知识文件引用时阻止删除;加 --force 可强制执行,此时引用方会以警告形式返回。
工具命令
flashduty update 会下载并执行平台安装脚本,将当前二进制替换为最新版本。--check 仅打印可用版本号,不修改本地文件。在终端中执行其他命令后,若检测到有新版本可用,CLI 会在 stderr 自动输出更新提示横幅。输出格式
通过--output-format 选择输出形态(--json 是 --output-format json 的别名),便于在不同场景下消费:
- 表格(默认)
- JSON(--json / --output-format json)
- TOON(--output-format toon)
- 完整表格(--no-trunc)
人类可读,列对齐,长字段截断显示。
结构化输出的字段投影
以下命令在json 或 toon 输出时支持 --fields。用逗号分隔顶层响应字段;未知字段会直接报错,表格输出会忽略此参数。
例如,只导出故障编号、标题和处理进度:
incident list、incident similar、alert-event list)超过上限时,CLI 会在保留字段名的前提下截短过长的字符串,并以 ... 标记;若非字符串字段本身已超过上限,命令会提示减少字段或结果数。
incident detail 的投影超限行为不同:详情是单个对象,截断后的值与本身就很短的真实值无法区分,静默截短会返回错误数据,因此投影超过 8 KiB 时命令直接失败,错误信息会点名最大的字段(最多 3 个,含各自字节数)。此时请减少 --fields 中的字段,或直接省略 --fields 获取不受投影上限约束的完整详情。
未指定 --fields 而使用默认紧凑投影时,CLI 会在 stderr 打印一行提示,说明当前投影使用的字段、以及可通过 --fields 选择其他字段。该提示只写 stderr、不改写 stdout,管道给 jq 等工具时输出保持不变。
Agent Skills
Flashduty CLI 内置一个名为flashduty 的 Agent Skill,可让 Claude Code、Cursor、Codex、Gemini CLI、Windsurf 等 AI 编程代理通过 CLI 操作 Flashduty。
一键安装到当前机器上检测到的所有代理:
SKILL.md 承载认证、全局参数、安全规则等共享约定,并按领域索引参考卡——故障、告警、变更、值班与排班、协作空间与分派、状态页、洞察、监控、RUM 与 sourcemap、自动化、通知模板、成员与团队等。代理执行任务前先读取对应领域的参考卡,即可获得该领域的全部命令、参数与工作流,无需 --help 试探。
常见用法
在告警通知中追加 CLI 链接
在告警通知中追加 CLI 链接
通过
flashduty incident get <id> 在终端中快速查看故障详情,可将命令片段嵌入到通知模板里供值班同学一键复制。批量认领或关闭故障
批量认领或关闭故障
将故障数据导出到 BI 工具
将故障数据导出到 BI 工具
jq 处理或导入数据仓库。在 CI/CD 中验证通知模板
在 CI/CD 中验证通知模板