客户增长实验准备包
一个小工作室或门店想拉客户增长,第一反应通常是「投点广告试试」或者「发一批消息」。真正卡住的地方不是想法,而是没人把「到底想改变什么、拿什么当基线、什么时候算失败」写清楚:目标随手写,基线靠感觉,预算没上限,跑完也说不清算没算成功。问题不是没做实验,而是每个实验从来没有被按明示事实过一遍。
本技能做这件事:读一份 JSON,输出可以逐条核对的实验准备板——每个实验的结论、实验卡、缺失事实、指标口径、预算上限、起止窗口、责任人、停止条件、外发草稿与「不会外发」清单,还有明确的不可外发 / 不可投放声明。脚本只读一个本地 JSON,不联网、不写文件、不投放、不联系客户、不花钱、不写 CRM。
输入与澄清
字段表、判定顺序与安全边界见 @references/guide.md(同目录 references/sample.json 是常规样例,references/sample-blocked.json 是缺失、硬矛盾、拒绝与注入的样例,两者输出分布固定)。
最少确认:as_of(必须带时区偏移)与 experiments[]。
必须问清的关键点:
as_of不能省。没有它就无法判断窗口是否已经结束,工具会停在INPUT_INCOMPLETE,而不是猜一个当前时间。- 没有基线就不推算。
baseline缺失记NO_BASELINE、给了但不是数值记INVALID_BASELINE,两种情况都停在证据不足;工具绝不替你补一个基线。 - 目标不高于基线是硬矛盾。
target与baseline都能解析且target <= baseline时判BLOCKED(TARGET_NOT_ABOVE_BASELINE)——这不是实验,是一个需要人工先改的数字。 - 没有同意依据就不生成外发动作。
outreach_required为true但consent_basis为空时,该实验只进do_not_outreach,永远不会出现在outreach_plan里;consent_basis只登记你给出的依据文本,工具不核实其真实性。 - 草稿永远是草稿。
outreach_plan中的记录状态恒为DRAFT_NOT_SENT,工具不发送、不投放、不建广告、不导名单到任何平台。 - 币种不换算。
budgets_by_currency按币种分别列示;有金额但没有币种时记UNKNOWN_BUDGET_CURRENCY,该金额不进入任何合计。缺失金额一律保持未知,不按 0 计算。 - 窗口必须带偏移。
start_at/end_at不带时区偏移(如2026-10-10 09:00)视为格式无效,记INVALID_WINDOW;end <= start记INVALID_EXPERIMENT_WINDOW并判BLOCKED。 - 渠道取值固定。
channel必须来自固定词表(content/email/sms/paid_ads/social/referral/in_store/phone/event/other,大小写不敏感);写了表外的值记INVALID_CHANNEL。 - 窗口结束只是事实。
end_at早于as_of记WINDOW_IN_PAST并进ACTION_NEEDED,工具不判定实验成功或失败。 - 只给文件名,不要给路径或链接。
evidence_refs只接受单一文件名;含路径或链接的引用会被拒绝,输出里只保留安全化后的文件名,原引用不会回显。 - 不要填登录凭据。输入里出现密码、令牌一类字段或真实凭据形态的字符串会被整体拒绝,且不回显该内容。
执行
- 按 @references/guide.md 的字段表整理输入 JSON。第一次使用建议先用 @references/sample.json 跑一遍,确认输出结构后再换成自己的实验清单。
- 用 Python 3.9+ 执行本包脚本(无第三方依赖、不联网):
python3 "<skill-directory>/scripts/run.py" "<input.json>",Windows 可用py -3。 - 先看顶层
status:REJECTED表示输入疑似含凭据(已拒绝且未回显);INPUT_INCOMPLETE表示缺as_of或没有实验;BLOCKED表示存在硬矛盾实验;GAPS_FOUND表示存在待补齐或证据不足的实验;READY表示全部实验都可开始。 - 看每个实验的
state:READY/ACTION_NEEDED/INSUFFICIENT_EVIDENCE/BLOCKED。 - 按
ready_board决定今天就能开始哪几个;experiment_cards是每个实验的执行卡(目标、受众、钩子、指标口径、基线→目标、预算上限、窗口、停止条件)。 - 按
action_needed_board在开始前补齐:NO_STOP_CONDITIONS先定什么时候停,NO_CONSENT_BASIS先补同意依据,WINDOW_IN_PAST先决定复盘还是重开。 - 按
insufficient_board与missing_facts逐条追问;不要自行填数。 - 按
blocked_board处理硬矛盾:改目标、改基线或改窗口,工具不会替你选一个。 - 按
clarification_questions的Q-01顺序原样发给对应责任人确认。 - 用
human_confirm_items明确哪些决定必须由人工做(是否做、是否算成功、是否花钱、是否外发),本工具不下判断。
运行约束
- 只读:只读取用户提供的那一个 JSON;不打开链接、不调用外部服务、不写文件、不访问任何广告平台、CRM、名单或店铺后台。
- 不外发:不发送消息、不投放、不建广告、不导名单、不邀请、不收款、不修改任何原始材料;
outreach_plan恒为草稿。 - 不花钱:不绑定广告账号、不下单、不改预算;
budget_cap只作为输入事实登记。 - 只推导不发明:结论只由输入中的明示事实推导;不虚构基线、目标、指标口径、预算、责任人、同意依据或实验结果。
- 基线门禁:
baseline缺失或不可解析一律停在证据不足,永不按 0 或按感觉补齐。 - 硬矛盾门禁:
target <= baseline、窗口倒置、负数预算、表外渠道都判BLOCKED,必须先人工修正。 - 同意门禁:
outreach_required为true但没有consent_basis时不产生任何外发动作,只进do_not_outreach。 - 币种门禁:金额按币种分别列示,不换算、不跨币种合计;有金额无币种时该金额保持未知。
- 确定性:实验按编号、看板按编号、问题按编号、状态汇总按
EXPERIMENT_STATES全部显式固定,同一输入输出逐字节一致。 - 文件名门禁:
evidence_refs只接受单一文件名;含路径、链接或盘符的引用被拒绝,且只输出安全化文件名,原引用在任何字段都不出现。 - 提示注入逐字段检测、位置精确、低误报:覆盖备注、钩子等自由文本,命中时只加标记并在
injection_flagged中给出精确路径(如experiments[1]/notes);检测要求「动作词 + 目标词」同句共现。 - 不可信文本先转义再入简报,命中即隐藏:
markdown_summary中所有自由文本走同一转义处理(去控制字符、折叠空白、对 Markdown 元字符加反斜杠);命中注入的值改用固定占位「已隐藏疑似提示注入文本」。 - 隐私门禁:字段名命中
password、token、api_key一类凭据名,或字符串值具备真实凭据形态,直接拒绝处理且不回显该内容。 - 免责:输出是增长实验的人工准备材料,不是增长预测、投放建议、财务结论或效果承诺;是否做、是否花钱、是否外发与是否算成功由经营者人工决定。