Skills / Skills / Learn From Source
All skills

/ skill

learn-from-source

Skills/learn-from-source.md

Extract atomic insights from a Raw/Learnings/ input and write them as connected wiki nodes. Optionally pre-processes via a NotebookLM library.

Open as raw file

Run this skill

Runs with bypassPermissions — local dev only.

learn-from-source

Extract distinct atomic insights from a single source and connect them into the existing wiki graph.

Procedure

0. (Optional) NotebookLM pre-processing

If library_slug is provided AND Phase 2+ is active:

  1. Read the source for any source_url in frontmatter.
  2. If a URL exists and isn't already in the library, invoke notebooklm-add-source to add it. (NotebookLM auto-transcribes & summarizes.)
  3. Optionally, invoke notebooklm-query on library_slug with "What other sources in this library cover similar themes? Return source titles." — use the response to seed outbound <a class="wikilink wikilink-broken" href="#">wikilinks</a> in step 4.
  4. Tag the resulting wiki nodes #source/notebooklm AND #library/{library_slug} in addition to the regular tags.

If library_slug is omitted, or NotebookLM is in Phase 1 (architecture-only), skip step 0 entirely — the synthesis still works.

1. Read the source

  • Open source_path. If it's plain notes, parse as-is. If a transcript, extract claims & frameworks (skip filler).
  • Identify metadata if present in frontmatter (source_url, author, date_consumed).

2. Extract atomic insights

One insight = one wiki node. Don't conflate.

For each distinct insight:

  • 1 sentence claim (what's the insight?)
  • 1–3 sentences of context (why does it matter? when does it apply?)
  • Originating source citation (back-link to the raw file).

Aim for 1–8 insights per source. Fewer is fine; more usually means you're not splitting properly.

3. Resolve to existing nodes (avoid duplication)

For each candidate insight:

  • Search Wiki/Learnings/, Wiki/Concepts/, and Wiki/Notes/ for an existing node covering this idea.
  • If found: update the existing node — append the new source to sources: frontmatter and add a "Consolidated from" line if helpful. Don't create a duplicate.
  • If not found: create a new node at Wiki/Learnings/{slug}.md using the wiki-node template:
    • node_kind: concept
    • tags: [learning, ...] — pick tags from _System/TagTaxonomy.md
    • sources: ["<a class="wikilink wikilink-broken" href="#">Raw/Learnings/{type}/{file}</a>"]
    • links: [...] — outbound wikilinks to relevant brands, projects, concepts, people (see step 4)
    • confidence: medium (default for single-source insights — bump to high after 2+ corroborating sources)

4. Connect to the graph

For each new or updated learning, identify outbound wikilinks:

  • Brand-relevant? Link to <a class="wikilink wikilink-broken" href="#">Brands/{slug}/BrandContext</a> or <a class="wikilink wikilink-broken" href="#">Brands/{slug}/voice-profile</a> etc. Look at Context/Brands.md for the active roster.
  • Project-relevant? Link to <a class="wikilink wikilink-broken" href="#">Departments/Projects/{slug}/_Project</a>.
  • Decision-pending? If the insight is decision-relevant, also surface to Departments/Decisions/ as a follow-up note.
  • Existing concept hub? Link to <a class="wikilink wikilink-broken" href="#">Wiki/Concepts/{topic}</a>.
  • Person-relevant? Link to <a class="wikilink wikilink-broken" href="#">Wiki/People/{slug}</a>.

If 3+ learnings have piled up under the same #topic/X tag and no hub node exists yet, create Wiki/Concepts/{topic}.md as an index of those learnings (the "monthly cluster" practice from Departments/Personal/Development.md).

5. Tag using the canonical taxonomy

  • Pull tags from _System/TagTaxonomy.md. Don't invent tags ad-hoc — that fragments the graph.
  • If a needed tag doesn't exist, propose it (write to a ## Proposed section in TagTaxonomy.md and ask Adam to confirm at next checkpoint).

6. Append Log entry

Via log-operation:

  • agent: invoking agent
  • skill: learn-from-source
  • input: {source_path} ({source_type})
  • output: list of Wiki/Learnings/{slug}.md paths created or updated
  • artifacts: each new/updated wiki node as a <a class="wikilink wikilink-broken" href="#">wikilink</a>
  • notes: count of insights extracted; flag any orphans (a learning without outbound links is suspect — fix in step 4 or note why).

Atomicity rule

One claim per node. If a podcast covers delegation, hiring, and meeting structure → that's three nodes, three slugs, three sets of outbound links. The graph value comes from atomicity.

Failure modes

  • Source is too thin (e.g., a 1-sentence highlight) — don't force 3 insights; create one or none. Quality > quantity.
  • All insights duplicate existing nodes — that's a good outcome. Just update sources / boost confidence on the existing nodes; don't create new ones.
  • Tag drift — if you find yourself writing #leadership and there's already #topic/leadership, normalize to the existing tag and propose the alternate as an alias in TagTaxonomy.md.
  • Orphan after step 4 — a learning that links to nothing is a smell. Either find at least one connection, or note why it's standalone (e.g., a foundational concept that predates other nodes).

Hard rules

  • Never copy long quotations into wiki nodes — paraphrase and cite. Wiki nodes are yours; raw text stays in Raw/Learnings/.
  • Never delete the raw source file after synthesizing — the wiki node back-links to it.
  • Never create a wiki node without at least one tag or one outbound wikilink (orphan prevention).