关于 flag-ramp
flag-ramp 是用于管理 GrowthBook 功能标志规则渐进流量发布的 Skill,支持多步覆盖率调整。步骤可按时间或手动推进,并可设置审批门槛及暂停、回滚等操作。
主要功能
- 01创建多步覆盖率渐进计划
- 02设置定时或手动等待步骤
- 03为步骤添加审批门槛
- 04查看计划状态与健康信号
- 05暂停、推进、回滚或完成计划
适用场景
- 01分阶段提高发布覆盖率
- 02在步骤间等待观察期
- 03推进发布前要求审批
- 04暂停或回滚正在运行的计划
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ growthbook/ skills --skill flag-ramp安装后在 Claude Code 中输入/flag-ramp确认已加载。
详细介绍
flag-ramp
为 GrowthBook 功能标志规则创建和管理多步渐进发布计划。渐进发布计划会随时间逐步提高(或降低)规则的流量覆盖率,并在各步骤之间设置指定的等待时间。步骤可以是手动的(由操作人员推进),也可以由时间控制(经过指定时间后自动推进)。
所有 API 调用均通过捆绑的辅助脚本进行:${CLAUDE_PLUGIN_ROOT}/scripts/gb-call。需在环境中设置 GB_API_KEY,或由 /growthbook:gb-setup 将其写入 ~/.config/growthbook/.env。
渐进发布计划的工作方式
渐进发布计划关联到功能标志上的特定规则。发布后,渐进发布会立即开始运行——除非明确设置 startDate(不常见;大多数团队更倾向于在发布后通过 GrowthBook UI 手动触发渐进发布),否则不会自动延迟。
在每个步骤中,计划都会应用操作——即对规则进行补丁,通常会更改 coverage。步骤结束后:
- 如果步骤设置了
interval(秒),则在该时间段后自动推进。 - 如果
interval为null,则保持当前状态,直到团队成员在 UI 中手动推进。
所有步骤完成后,会应用 endActions(通常将覆盖率设为 1.0)。如果在任何时候回滚渐进发布,则会应用 startActions(恢复渐进发布前的状态)。
渐进发布计划会作为 rampActions 暂存到草稿版本中,并在发布时原子性地执行。
工作流
路径 A — 在现有规则上创建渐进发布计划
1. 确认规则:
gb-call GET /api/v2/features/<flag-id>
显示规则列表。获取用户想要进行渐进发布的 force 或 rollout 规则的 ID。记下当前的 coverage。
2. 与用户一起设计渐进发布步骤:
确认:
- 初始覆盖率(例如,
0.05= 5%) - 步骤递进过程(例如,5% → 25% → 50% → 100%)
- 每个步骤的等待时间:以秒为单位的数值(例如,
86400= 1 天),表示自动推进;或设为null,表示保持当前状态,直到手动推进
等待审批的步骤:在需要人工签核后才能继续渐进发布的步骤中,添加 holdConditions: { "requiresApproval": true }。审批始终是最后一道关卡——如果步骤同时设置了 interval,必须先经过该时长,然后等待明确的审批调用。纯手动关卡(不包含时间条件)为 { "interval": null, "holdConditions": { "requiresApproval": true } }。混合示例:
- 观察一天后要求审批:
{ "interval": 86400, "holdConditions": { "requiresApproval": true } } - 仅要求审批,不设置等待时间:
{ "interval": null, "holdConditions": { "requiresApproval": true } }
间隔结束后,如何通过 API 提交审批,请参阅路径 D。
startActions 应与规则的当前覆盖率(在第 1 步中记录)一致——这是回滚时渐进发布恢复到的状态。
3. 构建渐进发布计划载荷:
{
"startActions": [
{ "targetType": "feature-rule", "targetId": "<rule-id>", "patch": { "coverage": 0 } }
],
"steps": [
{
"interval": 86400,
"actions": [{ "targetType": "feature-rule", "targetId": "<rule-id>", "patch": { "coverage": 0.1 } }]
},
{
"interval": 86400,
"holdConditions": { "requiresApproval": true },
"actions": [{ "targetType": "feature-rule", "targetId": "<rule-id>", "patch": { "coverage": 0.5 } }]
}
],
"endActions": [
{ "targetType": "feature-rule", "targetId": "<rule-id>", "patch": { "coverage": 1.0 } }
]
}
startActions = 渐进发布开始时应用并在回滚时恢复的状态。将其设为渐进发布开始前规则的当前覆盖率——新规则通常为 0。
endActions = 所有步骤完成后的最终状态(通常为 100% 覆盖率)。
要为渐进发布添加护栏指标监控,请添加 monitoringConfig 块,并在每个步骤中设置 "monitored": true——参见 flag-monitoring。
除非用户明确要求,否则请省略 startDate 和 cutoffDate——参见护栏。
4. 通过草稿将渐进发布计划关联到规则:
echo '<payload>' \
| gb-call PUT /api/v2/features/<flag-id>/revisions/new/rules/<rule-id>/ramp-schedule -
记录返回的 version。渐进发布计划会作为 rampAction 暂存到草稿中,并在草稿发布后生效。
5. 移交给 flag-publish。
路径 B — 一步创建新规则和渐进发布计划
同时创建规则和渐进发布计划时,先获取可用的 hashAttribute 候选项(rollout 规则必需):
gb-call GET '/api/v1/attributes?projectId=<flag-project-id>'
根据功能标志的 valueType(从获取功能标志时记录)验证规则的 value。然后发送:
echo '{
"rule": {
"type": "rollout",
"value": "<on-value>",
"coverage": 0.05,
"hashAttribute": "<hash-attr-id>",
"enabled": true,
"allEnvironments": false,
"environments": ["<env-id>"]
},
"rampSchedule": {
"steps": [
{
"interval": 86400,
"actions": [{ "targetType": "feature-rule", "targetId": "new", "patch": { "coverage": 0.05 } }]
},
{
"interval": 86400,
"actions": [{ "targetType": "feature-rule", "targetId": "new", "patch": { "coverage": 0.25 } }]
},
{
"interval": 86400,
"actions": [{ "targetType": "feature-rule", "targetId": "new", "patch": { "coverage": 1.0 } }]
}
],
"startActions": [{ "targetType": "feature-rule", "targetId": "new", "patch": { "coverage": 0.0 } }],
"endActions": [{ "targetType": "feature-rule", "targetId": "new", "patch": { "coverage": 1.0 } }]
}
}' | gb-call POST /api/v2/features/<flag-id>/revisions/new/rules -
在渐进发布操作中使用 "targetId": "new" 作为占位符——服务器会在创建时将其替换为实际规则 ID。
路径 C — 从规则中移除渐进发布计划
gb-call DELETE /api/v2/features/<flag-id>/revisions/new/rules/<rule-id>/ramp-schedule
这会在草稿中暂存一个 detach 渐进发布操作。草稿发布后,线上计划将被移除。规则的覆盖率将保持为该计划最后设置的值。
路径 D — 管理线上渐进发布(发布后)
采取任何操作之前,建议用户打开功能页面,全面了解渐进发布进度——UI 会显示计划状态、步骤时间线和指标健康状况,而 API 仅返回原始值:
# macOS:
open <host>/features/<flag-id>
# Linux:
xdg-open <host>/features/<flag-id>
之后,如需通过 API 管理:从功能标记的规则中获取渐进发布计划 ID(规则上的 rampScheduleId 字段),或查询该 ID:
gb-call GET '/api/v1/ramp-schedules?featureId=<flag-id>'
# or more precisely:
gb-call GET '/api/v1/ramp-schedules?ruleId=<rule-id>'
检查状态:
gb-call GET /api/v1/ramp-schedules/<rs-id>/status
返回:当前步骤索引、decision("advance" / "hold" / "rollback" / "waiting")、健康信号,以及该步骤是否正在等待批准。
启动渐进发布(如果尚未自动启动):
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/start
批准等待批准的步骤(间隔时间已过后):
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/approve-step
如果间隔时间尚未结束或仍有其他暂停条件,将返回 400——请先轮询 /status,仅在该步骤等待批准时才批准。
推进到下一步(忽略所有暂停条件——用于 CI 流水线或强制覆盖):
echo '{}' | gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/advance -
# Force past an unsatisfied approval gate (requires canBypassApprovalChecks permission):
echo '{"force":true}' | gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/advance -
暂停 / 恢复:
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/pause
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/resume
回滚(恢复 startActions 状态,并标记为 rolled-back):
echo '{"reason":"<description>"}' | gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/rollback -
立即完成(跳过剩余步骤,应用 endActions):
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/complete
回滚后重新启动:
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/restart
# then start again:
gb-call POST /api/v1/ramp-schedules/<rs-id>/actions/start
紧急停用开关(比回滚更快):通过 flag-toggle 禁用功能标记环境——无需渐进发布计划 ID,即可立即停用所有规则。
注意事项
- 贯穿使用草稿版本。 如果本次会话中之前的写入技能已提供版本号,请明确使用该版本号,而不是
new。从头开始时则使用new。 - 渐进发布计划仅适用于
force和rollout规则。 不适用于experiment-ref或safe-rollout规则。 startActions必须与规则渐进发布前的覆盖率一致。 在第 1 步记录该值,并将其用作回滚状态。除非渐进发布前规则的覆盖率为 0,否则不要将其默认设为 0。- 间隔为
null的步骤会一直暂停,直到在 UI 中手动推进。 适用于需要人工把关的检查点。设置了间隔的步骤会自动推进。 startDate为可选项——如果省略,渐进发布会在发布后立即启动。只有用户明确需要延迟启动时才询问此项;大多数团队倾向于在确认发布成功后手动触发。cutoffDate是较少使用的安全措施。 仅在用户询问时提及——到达该期限时,它会自动回滚渐进发布。默认不要包含此项。- 步骤中的覆盖率补丁必须在 0–1 范围内。 服务端会在发布时验证这一点。
- 检查目标环境是否已启用。 如果功能标记在目标环境中已禁用,渐进发布将不起作用——请提醒用户,并先转到 flag-toggle。
- 对于受监控的渐进发布(护栏指标、自动回滚信号),请使用 flag-monitoring。
- 渐进发布操作会暂存在草稿中。 发布前不会发生任何变化。如果草稿被丢弃,就不会创建渐进发布计划。
- 每条规则只能有一个渐进发布计划。 添加新计划会替换已有计划。
使用的端点
草稿(发布前):
GET /api/v2/features/:id— 获取标志和当前规则PUT /api/v2/features/:id/revisions/new/rules/:ruleId/ramp-schedule— 在草稿中暂存渐进发布计划DELETE /api/v2/features/:id/revisions/new/rules/:ruleId/ramp-schedule— 在草稿中暂存渐进发布计划解绑POST /api/v2/features/:id/revisions/new/rules— 创建带有内联rampSchedule的规则
实时渐进发布管理:
GET /api/v1/ramp-schedules— 列出(featureId、ruleId、status筛选条件)GET /api/v1/ramp-schedules/:id/status— 实时健康状况和决策POST /api/v1/ramp-schedules/:id/actions/startPOST /api/v1/ramp-schedules/:id/actions/pausePOST /api/v1/ramp-schedules/:id/actions/resumePOST /api/v1/ramp-schedules/:id/actions/advance(正文:可选{ force: true })POST /api/v1/ramp-schedules/:id/actions/approve-stepPOST /api/v1/ramp-schedules/:id/actions/rollback(正文:{ reason: string })POST /api/v1/ramp-schedules/:id/actions/restartPOST /api/v1/ramp-schedules/:id/actions/complete
交接
flag-monitoring— 为渐进发布添加护栏指标和自动化监控信号flag-targeting— 在关联渐进发布计划前设置规则的定向条件flag-toggle— 如果需要立即停止渐进发布,可使用紧急熔断开关flag-publish— 发布草稿并激活渐进发布