mcpField
M
money-learn

money-learn

github.com/iamzifeiAgent 工作流1.1k45 次安装8 周前更新
代码仓库

关于 money-learn

money-learn 用于维护项目的 learnings.jsonl,将已验证的模式保存为可搜索、可复用的单条经验。它面向使用 money-* 技能的项目,可管理项目级和跨项目经验。

主要功能

  1. 01添加并搜索项目经验
  2. 02按置信度和类别组织记录
  3. 03审查、修剪或替代旧经验
  4. 04在项目与组合级经验间提升或降级
  5. 05导出经验为 Markdown 表格

适用场景

  1. 01记录对未来业务决策有用的规律
  2. 02查找此前关于定价或渠道的发现
  3. 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 个步骤的提取:

  1. 是什么模式? — 用一句话概括。如果用户提供的是一段话,将其改写为一个陈述句。
  2. 证据是什么? — 具体说明。“5 位客户表示 X”,而不是“客户表示 X”。如果证据含糊,将置信度降为 hypothesis。
  3. 属于什么类别? — 从固定列表中选择。
  4. 置信度如何? — 默认设为 emerging,除非证据满足 N≥30 或有 2 个以上独立观察结果。
  5. 是否取代了较早的经验? — 搜索相似模式,并询问用户。

然后将 JSON 行写入磁盘并确认。打印新增的行。

从对话中自动提取

如果用户不带参数调用 /money-learn,且近期对话中存在明确模式(例如,用户刚说“哇,$39 的价格转化效果比 $29 好得多”),则自动提出提取建议:

我发现这段对话中有一个模式。要记录以下内容吗:

  • 模式:“在我们的 ICP 中,定价为 $39 时的转化率比 $29 高 30%”
  • 证据:“{对话中引用的观察内容}”
  • 类别:pricing
  • 置信度:emerging(一次 A/B 观察;复现后可升为 validated)

保存?[y/n/edit]

/money-learn search <query>

在 JSONL 中搜索模式、标签或证据包含该查询的记录(不区分大小写)。最多返回 10 条匹配项,排序依据为:

  1. 置信度(validated > emerging > hypothesis)
  2. 时间(较新的排在前面)
/money-learn prune(交互模式)

对每条超过 90 天或标记为 hypothesis 的经验:

  • 显示该经验
  • 询问:仍然有效吗?被更新的内容取代了吗?要彻底删除吗?

这样可以让知识库始终保持高信噪比。


组合经验(跨项目共享)

同时运营多个产品的独立经营者,会发现适用于所有产品的模式,而不仅仅是某一个产品。例如:

  • “$39 的转化效果比 $29 好”可能只适用于某个产品的 ICP。项目专属。
  • “在冷邮件主题行中写明具体营收数字,比以利益为导向的主题行效果好 4 倍”适用于每一场冷外联营销活动。全组合通用。
  • “即使底层 API 调用具有幂等性,也必须检查 Stripe webhook 的幂等键”适用于每一项 Stripe 集成。全组合通用。

组合层用于记录第二类经验。它们存储在 ~/.smtm/portfolio/learnings.jsonl 中(与项目专属经验使用相同的架构),并会在加载项目专属经验之前,自动加载到每个项目的每项 money-* 技能中。

提升条件

项目专属经验只有在满足以下所有条件时,才应提升到组合层:

  1. 置信度为 validated — emerging 或 hypothesis 不符合条件
  2. 已复现 — 在至少 2 个不同项目中观察到(或创始人认为它适用于任何未来同类项目)
  3. 领域通用 — 描述的是策略、渠道、工具行为或经营者模式;而不是特定 ICP、价格点或产品专属发现

运行 /money-learn promote <L-id>,将一条项目经验移入组合层。该技能会通过重新朗读这条经验进行确认,询问它是否真的具有普适性,然后写入组合文件。原项目经验会保留,并加上 promoted_to_portfolio: true 标记,方便未来审查时追溯其来源。

加载顺序

money-* 技能启动时,会按以下顺序合并经验(对于相同模式,后加载的来源会覆盖先加载的来源):

  1. Atom 语料库(只读,随软件包提供)
  2. 产品组合经验(~/.smtm/portfolio/learnings.jsonl)
  3. 项目经验(~/.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 分钟,无需翻查旧的对话记录
  • ✅ 获取内容 — 与当前问题相关的确切验证模式,并附有证据引用

评论

支持 Markdown