money-learn

Installation
SKILL.md

/money-learn — Project Learnings Manager

Your job is to maintain a project's learnings.jsonl — a JSONL file of validated patterns that other skills auto-load when they run. Each learning is one row, atomic, citable, and worth remembering across all future sessions.

Learnings are NOT snapshots. A snapshot captures full session state. A learning is a single, durable insight that should influence future thinking even when no specific snapshot is being restored.


Why this exists separately from /money-save

/money-save /money-learn
Granularity Full session state One pattern per row
Frequency After a major decision Whenever a pattern is observed
Auto-loaded? Only when /money-restore is called Yes — every money-* skill loads recent learnings
Mutability Append-only snapshots Add, search, prune, supersede
Use case "Resume from this state" "Remember this pattern always"

A founder discovers things like:

  • "Cold email open rates are 4x higher when the subject is a specific revenue number, not a benefit promise."
  • "Our ICP doesn't read X/Twitter — they live in Reddit r/SaaS."
  • "Pricing at $39 converts 30% better than $29 even though it's higher."
  • "Customers who upgrade past the $99 tier always cite the team-seat feature."

These are atomic patterns. Each gets one row in learnings.jsonl. They're auto-injected into every future /money-discover, /money-strategy, /money-content, etc., so the agent stops re-suggesting things you've already invalidated.


Triggers

Command Behavior
/money-learn Show recent 5 learnings for current project
/money-learn add Interactive: extract a learning from current conversation
/money-learn add "<one-line pattern>" Add a learning with explicit text
/money-learn search <query> Search learnings by keyword/topic
/money-learn list List all learnings for current project
/money-learn list <project> List learnings for another project
/money-learn prune Interactive: review old/contradicted learnings, mark as superseded or remove
/money-learn export Output all learnings as a markdown table

Natural-language equivalents:

  • "Remember this", "Log this learning", "This is a pattern worth keeping"
  • "What have we learned", "Show learnings", "Show me the learnings"
  • "记住这个", "存入经验", "这是一个模式", "查看经验库"

Schema

Each line in ~/.smtm/projects/{slug}/learnings.jsonl is one JSON object with this fixed schema:

{
  "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"]
}

Confidence levels

  • validated — At least 2 independent observations or 1 quantitative result with N>30. Acts on this freely.
  • emerging — One strong observation, not yet replicated. Other skills consider it but don't lock in.
  • hypothesis — Pattern noticed once, untested. Surfaced for awareness only.

Categories (closed list)

pricing, channel, icp, positioning, conversion, retention, ops, tech, competition, personal

If a learning doesn't fit any category, force a fit — usually it's personal (about the founder) or ops. Avoid creating new categories; the closed list keeps the auto-load logic predictable.


Workflow

/money-learn add (interactive mode)

Walk through a 5-step extraction:

  1. What pattern? — One sentence. If the user gives a paragraph, paraphrase to one declarative sentence.
  2. What's the evidence? — Specific. "5 customers said X" not "customers say X". If evidence is vague, reduce confidence to hypothesis.
  3. What category? — Pick from the closed list.
  4. Confidence? — Default to emerging unless evidence is N≥30 or 2+ independent observations.
  5. Does this supersede an older learning? — Search for similar patterns, ask the user.

Then write the JSON line to disk and confirm. Print the row that was added.

Auto-extraction from conversation

If the user invokes /money-learn without arguments and there's a clear pattern in the recent conversation (e.g., they just said "wow, the $39 price converts way better than $29"), auto-propose the extraction:

I noticed a pattern in this conversation. Want to log:

  • Pattern: "Pricing at $39 converts 30% better than $29 in our ICP"
  • Evidence: "{quoted observation from conversation}"
  • Category: pricing
  • Confidence: emerging (one A/B observation; would be validated after replication)

Save? [y/n/edit]

/money-learn search <query>

Grep the JSONL for pattern + tags + evidence containing the query (case-insensitive). Return up to 10 matches sorted by:

  1. Confidence (validated > emerging > hypothesis)
  2. Recency (newer first)

/money-learn prune (interactive)

For each learning older than 90 days OR marked hypothesis:

  • Show the learning
  • Ask: still valid? superseded by something newer? delete entirely?

This is how the library stays signal-dense.


Auto-loading into other skills

Every other money-* skill that does substantive work should load recent learnings before generating output. The standard pattern (added to those skills' preambles):

## 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.

The skills should not silently override learnings — they surface them in a small preamble:

📚 Loaded 4 relevant learnings from this project's history. Notably:

  • L-a7k2 (validated, pricing): $39 converts 30% better than $29 in our ICP
  • L-9b14 (emerging, channel): Reddit r/SaaS converts 3x better than X for cold outreach

These will inform the analysis below.


Output structures

/money-learn (default — show recent)

# 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 (after capture)

✅ 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.

Edge cases

  • Conflicting learnings — Two patterns may directly contradict (e.g., "X channel works great" and "X channel is dead"). Don't auto-merge. Use supersedes field. The newer one wins; the older one is shown only on /money-learn list --include-superseded.
  • JSONL corruption — One bad line shouldn't break the whole file. On read errors, log the bad line and continue.
  • No project slug — If running outside a project directory, fall back to default project.
  • Empty file — Show: "No learnings yet for {project}. Add the first one with /money-learn add."

Principles

  • Atomic, not narrative — Each learning is one row, one sentence. If it spans multiple paragraphs, it should be split.
  • Evidence over opinion — Patterns without evidence are guesses, mark as hypothesis.
  • Closed category list — Don't invent categories. Force-fit to the existing 10.
  • Supersede, don't overwrite — Old learnings may be wrong now but the supersession itself is signal.
  • Library hygiene matters — A 1,000-row learnings file with 30% noise is worse than a 200-row library with 95% signal.

Value Quantification (Required at End of Output)

After /money-learn add (capturing one learning):

📝 Captured 1 {category} learning at {confidence} confidence
Saves you each future skill run ~30 seconds of re-explaining a pattern + permanent prevention of skill suggesting something you already ruled out
⚠️ Risk avoided The agent has no memory across sessions without learnings — it will re-suggest the wrong pricing, wrong channel, wrong ICP unless told otherwise
🔁 Auto-loaded by All major money-* skills on next invocation (filtered by relevant category)

After /money-learn (showing recent) or /money-learn search (querying):

📚 Surfaced {N} matching learnings from {total} total
Time saved ~5-15 minutes of digging through old conversation transcripts
What you got The exact validated patterns relevant to your current question, with evidence citations
Related skills

More from iamzifei/show-me-the-money

Installs
2
GitHub Stars
375
First Seen
4 days ago