用途
prompt-mirror 是一个只读取本机会话历史的提示词教练。它把你在 Copilot 中亲手输入的消息与体量更大的智能体、autopilot 和定时任务流量分开,评估你指挥智能体的方式,并返回三条具体建议,每条都以你自己的消息作为“before”。它可能起草指令或技能修改,但从不应用;应用由 steer-once 负责。
主要能力
- 从 ~/.copilot/session-state/<id>/events.jsonl(高置信度,带来源标记与投递模式)和 ~/.copilot/session-store.db(SQLite,中等置信度,用于补全事件文件已不存在的会话)中抽取数据。
- 依据来源信号区分用户输入与机器流量:无 source 为候选手动消息;agent-<id> 为跨会话消息;autopilot / isAutopilotContinuation 为自动续跑;system 为定时唤醒;顶层 agentId 为发给子智能体的提示;全大写请求或“Continue from where you left off.”等为模板或恢复消息;delivery 记录消息在空闲、轮中或排队时发送。
- 评分维度包括:输入长度中位数/p90、中途引导比例、状态询问率、重复纠正、启动指令缺少完成条件、缺少停止条件、无度量的卡死(循环征兆)、分发比例、同一提示反复输入(自动化候选)、智能体让步(“你说得对……”)频率、每条输入对应的机器消息数。
- 生成 report.md(评分卡、三条建议及 before/after、草拟 diff、与上次的趋势对比)与 suggestions.json(建议、指标、基线、日期)。
- 下次运行时加载上次 suggestions.json,报告各指标变化;只有变化超过前 4 周周间波动才视为真实变化,否则标注“在噪声范围内”。
使用方式
- 设定参数(窗口、范围、语气、输出),用一行向用户复述。
- 运行内置标准库脚本抽取: python3 <this-skill-dir>/scripts/mine_sessions.py --since 30d [--repo owner/name] [--redact-terms ~/.config/prompt-mirror/terms.txt] 生成 stats.json、messages.jsonl、messages.csv(脱敏文本、标记、纠正分类)。使用 --no-text 仅输出数字。
- 评分前做抽取合理性检查:手动消息量与会话数是否可信;重度用户 machine_per_typed 通常远大于 1。若允许读取样本,随机读 20 条脱敏消息,若读起来像智能体简报或报告则收紧过滤并重跑。绝不对未过滤历史评分。
- 从 stats.json 构建评分卡(若存在上次运行则对比)。
- 对每个要引用的指标,至少打开 5 条被标记消息剔除误报,报告手工核对后的数字并说明已核对。
- 按频率×成本排序选出三条建议,每条包含:信号及数字、before(受引用规则限制)、after(改写或去掉该消息所需的简报字段/技能)、对应的杠杆技能(如状态轮询→progress-contract;缺完成/停止条件→brief;卡死两次无度量→find-the-loop;同类纠正≥3 会话→steer-once;每日同提示→automate-it)、下次应变化的指标。
- 可选为最高频重复纠正草拟指令或技能文本作为 diff,但不写入任何指令、技能或配置文件;可提供 steer-once 来落地。
- 保存 report.md 与 suggestions.json 并在聊天中展示报告。
隐私规则(不可协商的默认值,也均可调节)
- 抽取在本地;分析经你配置的模型服务。脚本读写权限为 0700/0600,写入内容不上传;但被评分读取的脱敏样本会像聊天一样发往模型服务。读取消息文本前先问一次:“读取脱敏样本(会发往你的模型服务),还是只用数字?”仅数字即 --no-text,跳过样本读取与前后引用。
- 绝不把历史粘贴进 issue、PR、gist、云端智能体或自动化。
- 每条建议最多一条引用,最多 25 词,脱敏,且只来自“before”一侧。
- 绝不引用被标记为激烈或敏感的消息(脏话、HR、绩效评估、薪酬、健康、法律),只用聚合计数。
- 展示前脱敏:密钥与令牌、邮箱、URL、主目录路径、@handle、UUID 与长十六进制,以及 --redact-terms 文件中的所有人名、代号、内部主机。会话 ID 仅显示 8 字符前缀,且不进入任何分享内容。
- 任何离开本机的内容(如 steer-once PR)先向用户原样展示将发布的精确文本。
适用场景
- 按需:“我是怎么提示的”“教练我”“我总在纠正什么”“自我复盘”。
- 每周在自己机器上作为本地会话自动化运行。
- 在一次运行中你多次输入“还是坏的”“状态?”“为什么停了”之后。
- 不适合评估他人、给队友排名,或从云自动化运行;云端运行器无法也不应读取本机会话状态。
参数
窗口默认 30 天;范围默认为全部本机会话,可用 --repo 子串限定;脱敏默认严格加用户词表;引用默认每条建议≤1 条、≤25 词;发送给模型的文本默认先询问、可选仅数字或脱敏样本;语气默认直接具体不说教;输出默认报告加草拟 diff;对比仅限自身趋势;节奏按需;保留最近 8 次运行,也可报告后删除(rm -rf ~/.copilot/prompt-mirror)。
限制与说明
- 分类器是正则表达式,指标需人工核对,否则可能误报。
- 脚本依赖 ~/.copilot 数据;若格式漂移,需检查少量事件的键名(不打印内容)并更新过滤规则后再评分。
- 会话存储需启发式清理:剥离注入的系统块、丢弃信封与模板、丢弃长第三人称简报、丢弃 /tmp 或 /var/folders 下的会话;60+ 字符且开头在 4+ 会话重复的输入若来源不确定通常应丢弃,但明显是用户每日输入时应保留为自动化候选。
- 工具自身反馈环:下次运行报告上次建议中指标变化超过噪声的比例;若两次运行低于三分之一,说明建议过于泛化,需更多依据用户重复短语与循环征兆。
背景
该套件源于一名重度用户约 9.5k 条输入、约 1.8k 个会话的挖掘:分离手动消息与机器流量是第一步也最难,一个月内每条输入约产生 21 条机器消息;启动指令中位 18 词,仅 6% 写明完成条件,停止条件仅 14%;随着自主性提高,状态与 ETA 询问从约 2% 升至 13%,40% 消息落在轮中;智能体卡住时有效动作是“建立反馈回路”(23 次显式救援)而非更多指令。