关于 copying-flags-across-projects
该 PostHog 技能指导 Agent 将功能标志从一个项目复制到同一组织内的其他项目。它涵盖依赖项检查、复制选项确认和逐目标结果报告,并自动处理 cohort 映射。
主要功能
- 01查找源功能标志
- 02验证目标项目归属
- 03预览标志配置与依赖
- 04选择禁用、计划和依赖选项
- 05报告各目标复制结果
适用场景
- 01将标志从预发布项目复制到生产项目
- 02在多个项目间复用标志配置
- 03复制包含 cohort 引用的标志
MCP 相关
该技能通过 PostHog MCP 工具查询项目和标志、检查依赖并执行复制。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ posthog/ skills --skill copying-flags-across-projects安装后在 Claude Code 中输入/copying-flags-across-projects确认已加载。
详细介绍
在项目间复制功能标记
此技能将指导你如何在同一个 PostHog 组织内,将功能标记从源项目复制到一个或多个目标项目。
何时使用此技能
- 用户要求“将标记复制到另一个项目”“复制此标记”或“在项目间同步标记”
- 用户想将标记从暂存项目发布到生产项目(或反向操作)
- 用户想在其他工作区中复制标记配置,并保留群组依赖关系
- 用户通过将项目用作环境,来弥补缺少真正环境的问题
此技能不涵盖的内容
- 不支持跨组织复制。此端点要求源项目和目标项目属于同一个组织。
- 批量复制项目中的所有标记。此工具每次只复制一个标记。要批量复制,请遍历标记键;每次调用彼此独立。
- 清理旧的或过时的标记——请改用
cleaning-up-stale-feature-flags技能。
工作流
1. 确定源标记
你需要标记的键和源项目的 ID。
- 如果用户提供了标记键和项目 ID,请直接使用。
- 如果用户提供了标记名称(例如“新的定价标记”),请在源项目中调用
posthog:feature-flag-get-all,查找匹配的标记并读取其key。 - 如果用户只提供了标记,却没有提供项目,请询问该标记所在的项目。不要假定是当前 MCP 项目——从错误的源项目复制是常见的失误。
2. 确定目标项目 ID
目标项目必须与源项目属于同一个组织。调用 posthog:projects-get 列出可用项目,并在执行复制前确认其组织归属。
对于多目标复制,单次调用最多可接受 50 个目标项目 ID。每个目标的成功和失败都会单独报告,因此部分失败不会阻止其余操作。
3. 预览源标记及其依赖项
对源标记调用 posthog:feature-flag-get-definition。然后务必调用 posthog:feature-flags-copy-dependencies-check,并传入 feature_flag_key、from_project 和 target_project_ids,不要尝试先检测依赖项——该调用不会复制任何内容;如果标记没有依赖项,则会返回空结果且没有警告,因此每次复制时都执行此调用成本很低,也绝不会漏掉真实依赖项。
can_copy_dependencies 为 false 并不总是意味着复制会受阻。如果没有可复制的内容,它也会是 false。只有当 warnings 非空时,才报告问题。
复制前,向用户简要说明以下内容:
- 源项目中的标记键、名称和启用状态
- 筛选条件组(发布比例、属性筛选条件、变体拆分)
filters.groups[].properties[]中的任何群组引用——这些引用会在服务器端重新映射,但用户应了解目标项目中是否已有匹配的群组- 标记是否包含加密负载(
has_encrypted_payloads),或是否为远程配置(is_remote_configuration) - 是否存在计划变更(用户可在步骤 4 中选择复制这些变更)
- 依赖项检查的
copied_dependency_keys(复制时将在目标中创建的依赖项)、reused_dependency_keys(目标中已满足的依赖项)以及任何warnings
4. 确认复制选项
一次确认涵盖全部三个选项。默认采用最安全的组合,只有用户明确希望采用其他行为时才询问是否覆盖默认设置:
disable_copied_flag: true— 复制到目标项目的标记处于禁用状态。默认建议采用此设置;在新项目中启用标记应当是经过审慎考虑并确认的操作。copy_schedule: false— 不复制计划变更。默认建议采用此设置;计划通常因项目而异。copy_dependencies: false— 不复制依赖项标记。只有用户批准复制步骤 3 检查报告中的键时,才将其设为true。
如果用户说“原样推送”或“在生产环境中启用”,请将 disable_copied_flag 改为 false。如果用户说“包含发布计划”或“连同计划发布一起”,请将 copy_schedule 改为 true。
5. 执行复制
调用 posthog:feature-flags-copy-flags-create,并提供:
feature_flag_key:源标记的键from_project:源项目 IDtarget_project_ids:已解析的目标项目 ID 列表disable_copied_flag:步骤 4 中的设置(默认true)copy_schedule:步骤 4 中的设置(默认false)copy_dependencies:步骤 4 中的设置(默认false)。即使用户已批准复制依赖项,省略此参数也会静默跳过依赖项复制。
6. 报告各目标的结果
响应包含一个 success 数组(每个复制的标记对应一项)和一个 failed 数组(按目标列出错误)。请同时说明两者:
- 对于每项成功结果:提供目标项目 ID、新标记的 ID,以及该标记在目标项目中的
active状态。 - 对于每项失败结果:提供目标项目 ID 和错误消息。常见原因包括缺少目标团队的编辑权限,或目标项目中已存在不可覆盖的资源标记。
如果有任何目标失败,请询问用户是重试失败的目标、跳过它们,还是先解决根本问题(例如授予访问权限后重试)。
重要说明
- 队列会自动重新映射。 如果源标记引用了队列,端点会在每个目标项目中创建或复用等效队列,并重写标记的筛选条件,使其指向目标项目中的队列 ID。你无需处理此事,但要告知用户正在进行此操作,以便他们了解目标项目中可能出现的新队列。
- 加密载荷会保留。 复制带有加密载荷的远程配置标记时,会保留其加密状态;载荷会使用目标项目的密钥重新加密。
- 复制计划变更时也会重新映射队列。 如果
copy_schedule: true,任何计划中的队列引用都会像实时筛选条件一样重新映射。 - 身份验证要求。 用户的 API 密钥必须包含明确的
feature_flag:write(或feature_flag:*)作用域。仅包含*的密钥会被拒绝——此端点受 INTERNAL 视图集限制,*授权无法满足要求。团队范围的密钥也无法访问此端点;必须使用组织范围或无范围限制的密钥。 - 源项目的编辑权限。 用户必须至少拥有源标记所属团队的编辑级别权限。端点会在复制前通过 PostHog 的访问控制进行验证。
- 目标项目的访问权限。 用户无法查看的目标会从结果中静默移除;用户可以查看但没有编辑权限的目标,则会在
failed数组中显示权限错误。 - 无法撤销。 复制会在目标项目中创建新标记(或覆盖具有相同键的现有标记)。发起复制前务必先向用户确认,尤其是在目标为生产项目时。
示例交互
用户: 将项目 12345 中的
new-checkout标记复制到项目 67890。Agent: 正在查看项目 12345 中的源标记。
(调用
posthog:feature-flag-get-definition)项目 12345 中的
new-checkout标记目前是布尔类型,按 25% 的比例逐步发布,没有队列筛选条件或计划变更。我会将其作为已禁用标记复制到项目 67890,且不复制计划变更——这是更安全的默认设置。确认吗?用户: 确认,但请在目标项目中启用它。
Agent: 明白——正在目标项目中启用。
(调用
posthog:feature-flags-copy-flags-create,并设置disable_copied_flag: false、copy_schedule: false)完成。在项目 67890 中创建了标记 ID 99887(
active: true)。没有失败的目标项目。
可用工具
posthog:feature-flags-copy-flags-create— 执行复制。必填字段:feature_flag_key、from_project、target_project_ids。可选字段:disable_copied_flag、copy_schedule、copy_dependencies。posthog:feature-flags-copy-dependencies-check— 预览复制标记会对其传递标记依赖项产生什么影响。不会复制任何内容。每次复制前都要调用;如果标记没有依赖项,则返回空结果。posthog:feature-flag-get-all— 当用户只提供了易读名称时,按键名或名称在指定项目中查找标记。posthog:feature-flag-get-definition— 获取完整的源标记(筛选条件、变体、队列引用、加密标记),以便在复制前进行预览。posthog:projects-get— 列出当前组织中的项目,用于解析和验证目标项目 ID。