关于 money-learn
money-learn 用于维护项目的 learnings.jsonl,将已验证的模式保存为可搜索、可复用的单条经验。它面向使用 money-* 技能的项目,可管理项目级和跨项目经验。
主要功能
- 01添加并搜索项目经验
- 02按置信度和类别组织记录
- 03审查、修剪或替代旧经验
- 04在项目与组合级经验间提升或降级
- 05导出经验为 Markdown 表格
适用场景
- 01记录对未来业务决策有用的规律
- 02查找此前关于定价或渠道的发现
- 03在多个项目间共享已验证的通用经验
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iamzifei/ show-me-the-money --skill money-learn安装后在 Claude Code 中输入/money-learn确认已加载。
详细介绍
/money-learn — 项目经验管理器
你的工作是维护项目的 learnings.jsonl——一个 JSONL 文件,其中记录了经过验证的模式,其他技能运行时会自动加载。每条经验占一行,内容独立、可引用,并且值得在未来所有会话中记住。
经验不是快照。 快照记录完整的会话状态。经验则是一条持久的见解,即使没有恢复特定快照,也应影响未来的思考。
为什么要将其与 /money-save 分开
/money-save | /money-learn | |
|---|---|---|
| 粒度 | 完整的会话状态 | 每行一个模式 |
| 频率 | 做出重大决策后 | 观察到模式时 |
| 自动加载? | 仅在调用 /money-restore 时 | 是——每个 money-* 技能都会加载近期经验 |
| 可变性 | 仅追加快照 | 添加、搜索、清理、替代 |
| 用例 | “从此状态继续” | “永远记住这个模式” |
创始人会发现这样的事情:
- “当主题行写明具体收入数字,而不是承诺收益时,冷邮件的打开率会高出 4 倍。”
- “我们的 ICP 不看 X/Twitter——他们活跃在 Reddit 的 r/SaaS。”
- “定价为 $39 时的转化率比定价为 $29 时高 30%,尽管价格更高。”
- “升级到 $99 档以上的客户总会提到团队席位功能。”
这些都是独立的模式。每个模式在 learnings.jsonl 中占一行。它们会自动注入每个未来的 /money-discover、/money-strategy、/money-content 等流程,让 Agent 不再重复建议你已证实无效的做法。
触发方式
| 命令 | 行为 |
|---|---|
/money-learn | 显示当前项目最近的 5 条经验 |
/money-learn add | 交互式:从当前对话中提取一条经验 |
/money-learn add "<one-line pattern>" | 使用明确文本添加一条经验 |
/money-learn search <query> | 按关键词/主题搜索经验 |
/money-learn list | 列出当前项目的所有经验 |
/money-learn list <project> | 列出其他项目的经验 |
/money-learn prune | 交互式:检查过时或相矛盾的经验,并标记为已替代或删除 |
/money-learn export | 将所有经验输出为 Markdown 表格 |
/money-learn promote <L-id> | 将项目本地经验提升到项目组合层(见下文) |
/money-learn portfolio | 显示所有项目共享的项目组合级经验 |
/money-learn portfolio search <query> | 搜索项目组合级经验 |
/money-learn portfolio demote <L-id> | 将项目组合级经验移回单个项目(如果发现它只适用于特定情境) |
自然语言对应说法:
- “记住这个”、“记录这条经验”、“这是一个值得保留的模式”
- “我们学到了什么”、“显示经验”、“给我看看这些经验”
- “记住这个”、“存入经验”、“这是一个模式”、“查看经验库”
架构
~/.smtm/projects/{slug}/learnings.jsonl 中的每一行都是一个采用以下固定架构的 JSON 对象:
{
"id": "L-{4 hex chars}",
"captured_at": "ISO 8601 with timezone",
"from_skill": "name of the skill that generated this learning, or 'manual'",
"category": "one of: pricing | channel | icp | positioning | conversion | retention | ops | tech | competition | personal",
"pattern": "One sentence stating the pattern. Imperative or declarative; no hedging.",
"evidence": "Concrete evidence supporting the pattern. Specific numbers, dates, quotes preferred.",
"confidence": "validated | emerging | hypothesis",
"supersedes": "id of an older learning this replaces (or null)",
"tags": ["arbitrary", "free-form", "tags"]
}
置信度级别
- validated — 至少有 2 次独立观察,或有 1 个 N>30 的量化结果。可据此直接采取行动。
- emerging — 有 1 次有力观察,尚未重复验证。其他技能会纳入考虑,但不会据此定论。
- hypothesis — 只注意到 1 次、未经验证的模式。仅作提醒。
类别(封闭列表)
pricing、channel、icp、positioning、conversion、retention、ops、tech、competition、personal
如果某条经验不符合任何类别,就强行归入一个类别——通常是 personal(关于创始人)或 ops。避免创建新类别;封闭列表能让自动加载逻辑保持可预测。
工作流
/money-learn add(交互模式)
逐步完成 5 个步骤的提取:
- 是什么模式? — 用一句话概括。如果用户提供的是一段话,将其改写为一个陈述句。
- 证据是什么? — 具体说明。“5 位客户表示 X”,而不是“客户表示 X”。如果证据含糊,将置信度降为
hypothesis。 - 属于什么类别? — 从固定列表中选择。
- 置信度如何? — 默认设为
emerging,除非证据满足 N≥30 或有 2 个以上独立观察结果。 - 是否取代了较早的经验? — 搜索相似模式,并询问用户。
然后将 JSON 行写入磁盘并确认。打印新增的行。
从对话中自动提取
如果用户不带参数调用 /money-learn,且近期对话中存在明确模式(例如,用户刚说“哇,$39 的价格转化效果比 $29 好得多”),则自动提出提取建议:
我发现这段对话中有一个模式。要记录以下内容吗:
- 模式:“在我们的 ICP 中,定价为 $39 时的转化率比 $29 高 30%”
- 证据:“{对话中引用的观察内容}”
- 类别:pricing
- 置信度:emerging(一次 A/B 观察;复现后可升为
validated)保存?[y/n/edit]
/money-learn search <query>
在 JSONL 中搜索模式、标签或证据包含该查询的记录(不区分大小写)。最多返回 10 条匹配项,排序依据为:
- 置信度(validated > emerging > hypothesis)
- 时间(较新的排在前面)
/money-learn prune(交互模式)
对每条超过 90 天或标记为 hypothesis 的经验:
- 显示该经验
- 询问:仍然有效吗?被更新的内容取代了吗?要彻底删除吗?
这样可以让知识库始终保持高信噪比。
组合经验(跨项目共享)
同时运营多个产品的独立经营者,会发现适用于所有产品的模式,而不仅仅是某一个产品。例如:
- “$39 的转化效果比 $29 好”可能只适用于某个产品的 ICP。项目专属。
- “在冷邮件主题行中写明具体营收数字,比以利益为导向的主题行效果好 4 倍”适用于每一场冷外联营销活动。全组合通用。
- “即使底层 API 调用具有幂等性,也必须检查 Stripe webhook 的幂等键”适用于每一项 Stripe 集成。全组合通用。
组合层用于记录第二类经验。它们存储在 ~/.smtm/portfolio/learnings.jsonl 中(与项目专属经验使用相同的架构),并会在加载项目专属经验之前,自动加载到每个项目的每项 money-* 技能中。
提升条件
项目专属经验只有在满足以下所有条件时,才应提升到组合层:
- 置信度为 validated — emerging 或 hypothesis 不符合条件
- 已复现 — 在至少 2 个不同项目中观察到(或创始人认为它适用于任何未来同类项目)
- 领域通用 — 描述的是策略、渠道、工具行为或经营者模式;而不是特定 ICP、价格点或产品专属发现
运行 /money-learn promote <L-id>,将一条项目经验移入组合层。该技能会通过重新朗读这条经验进行确认,询问它是否真的具有普适性,然后写入组合文件。原项目经验会保留,并加上 promoted_to_portfolio: true 标记,方便未来审查时追溯其来源。
加载顺序
money-* 技能启动时,会按以下顺序合并经验(对于相同模式,后加载的来源会覆盖先加载的来源):
- Atom 语料库(只读,随软件包提供)
- 产品组合经验(
~/.smtm/portfolio/learnings.jsonl) - 项目经验(
~/.smtm/projects/{slug}/learnings.jsonl)
针对某个项目的专属发现始终优先于产品组合中的发现,但仍会加载产品组合模式以供参考。Agent 会展示两者,并标明来源:
📚 已加载 6 条相关模式(4 条来自产品组合,2 条来自本地项目)。值得注意的是:
- L-port-3a8f(产品组合,已验证,渠道):“在冷邮件营销活动中,包含具体收入数字的主题行的表现比基于收益的主题行高出 4 倍”
- L-a7k2(项目,已验证,定价):“在我们的 ICP 中,$39 的转化率比 $29 高 30%”
降级
如果某条经验最终证明只适用于特定情境(例如,产品组合经验在新项目中无法复现),请将其降级:
/money-learn portfolio demote L-port-3a8f --back-to <project-slug>
这会将该行移回本地项目文件,并将其从产品组合的自动加载中移除。来源信息会保留——该行会保留 was_portfolio: true 标记。
何时不应提升
不要提升那些看似通用、实则并非如此的经验:
- 定价观察:几乎总是特定于 ICP
- “渠道 X 有效”——对什么产品有效?不要贸然泛化
- 工具偏好:这是创始人的喜好,不代表产品组合的普遍规律
- 一次性成功:单次复现不等于达到产品组合级别
经验法则:如果你即将开始一个新产品,这条经验在第 1 天就确实适用吗?如果适用 → 提升。如果想先重新验证 → 留在本地项目中。
自动加载到其他技能中
所有其他进行实质性工作的 money-* 技能都应在生成输出前加载近期经验。标准模式(添加到这些技能的前言中):
## Auto-loaded learnings
Before producing output, read `~/.smtm/projects/{slug}/learnings.jsonl` and surface any
relevant rows by category. Match priority:
- For /money-discover: icp, positioning, channel, competition
- For /money-strategy: pricing, icp, channel, positioning, competition
- For /money-content: positioning, conversion, channel
- For /money-product: tech, ops, conversion
- For /money-diagnose: ALL categories (the diagnosis may surface anything)
- For /money-panel and the four reviewer skills: ALL categories
- For /money-ads: channel, conversion, pricing
- For /money-outreach: channel, icp, positioning, conversion
Filter to confidence ≥ emerging by default. Show the user which learnings influenced the output, so they can spot if any are stale.
这些技能不应悄悄覆盖经验——而应在简短的前言中展示这些经验:
📚 已从此项目的历史记录中加载 4 条相关经验。值得注意的是:
- L-a7k2(已验证,定价):在我们的 ICP 中,$39 的转化率比 $29 高 30%
- L-9b14(新兴,渠道):在冷启动拓展中,Reddit r/SaaS 的转化率是 X 的 3 倍
以下分析会参考这些经验。
输出结构
/money-learn(默认——显示近期记录)
# Recent learnings — {project}
{N learnings shown of {total} total}
| ID | Captured | Confidence | Category | Pattern |
|---|---|---|---|---|
| L-a7k2 | 2026-04-22 | validated | pricing | $39 converts 30% better than $29 in our ICP |
| ... | | | | |
Use `/money-learn search <query>` to filter, `/money-learn add` to capture a new one, or `/money-learn prune` to clean up stale ones.
/money-learn add(捕获后)
✅ Learning captured.
ID: L-{hex}
Pattern: {pattern}
Evidence: {evidence}
Category: {category}
Confidence: {confidence}
File: ~/.smtm/projects/{slug}/learnings.jsonl
This will now influence future runs of /money-discover, /money-strategy, /money-content, etc.
边缘情况
- 经验冲突——两种模式可能会直接矛盾(例如,“X 渠道效果很好”和“X 渠道已不再有效”)。不要自动合并。使用
supersedes字段。较新的记录优先;较旧的记录只会在/money-learn list --include-superseded中显示。 - JSONL 损坏——单行错误不应导致整个文件无法使用。读取出错时,记录错误行并继续处理。
- 没有项目 slug——如果在项目目录之外运行,则回退到
default项目。 - 文件为空——显示:“
{project}尚无经验。使用/money-learn add添加第一条。”
原则
- 原子化,而非叙述式——每条经验占一行,用一句话表达。如果内容跨越多个段落,就应拆分。
- 证据优于观点——没有证据支持的模式只是猜测,应标记为
hypothesis。 - 类别列表固定——不要自行发明类别。将经验归入现有的 10 个类别。
- 取代,而非覆盖——旧经验现在可能已经不正确,但取代关系本身也是一种信号。
- 保持知识库整洁很重要——包含 1,000 行经验、其中 30% 是噪声的文件,不如包含 200 行、其中 95% 都是有效信号的知识库。
价值量化(输出末尾必需)
执行 /money-learn add 后(记录一条经验):
- 📝 已记录 — 1 条 {category} 经验,置信度为 {confidence}
- ⏱ 今后每次技能运行都能节省 — 约 30 秒,无需重新解释某种模式,并永久防止技能再次建议你已排除的内容
- ⚠️ 避免的风险 — 如果没有记录经验,Agent 无法跨会话保留记忆 — 除非另行告知,否则它会再次建议错误的定价、渠道或 ICP
- 🔁 自动加载者 — 下次调用时的所有主要 money-* 技能(按相关类别筛选)
执行 /money-learn(显示最近记录)或 /money-learn search(进行查询)后:
- 📚 已呈现 — 找到 {N} 条匹配的经验,共 {total} 条
- ⏱ 节省时间 — 约 5-15 分钟,无需翻查旧的对话记录
- ✅ 获取内容 — 与当前问题相关的确切验证模式,并附有证据引用