knihovnik

Osobní knowledge base s compound effect — ukládání článků, YT videí, knih, insights a poznámek. Inbox buffer, auto-linking mezi zdroji, evolving concept pages. Data na Google Drive, sync mezi počítači.

Knihovník — Personal Knowledge Base v2.0

Filozofie

Inspirováno Knowledge OS Blueprint. Klíčová idea: compound effect — každý nový zdroj nejen přidává, ale i obohacuje existující znalosti přes auto-linking a concept pages.

Kdy použít

  • Uživatel chce uložit článek, video, zdroj, insight nebo poznámku
  • Trigger fráze: "/knihovnik", "ulož článek", "ulož zdroj", "hodím to do inboxu", "hledej v knihovníku", "moje zdroje"

Datová struktura

KNIHOVNIK_DIR/
├── data/
│   ├── sources.json     # hlavní DB všech zdrojů + connections
│   └── tags.json        # vocabulary s aliasy
├── inbox/               # rychlé zachycení (nezpracované)
├── content/
│   ├── articles/        # externí články
│   ├── videos/          # YT videa s přepisem
│   ├── books/           # výpisky z knih
│   ├── insights/        # vlastní pozorování (1 myšlenka = 1 soubor)
│   ├── concepts/        # evolving wiki stránky (compound)
│   └── my-notes/        # delší vlastní texty, sbírky
└── zdroje/              # raw zdroje (HTML, PDF, ENEX)

KNIHOVNIK_DIR = /Users/josefmech/Library/CloudStorage/[email protected]/Můj disk/1_vibe/ja/knihovnik

Typy záznamů

TypSložkaÚčelPříklad
articlearticles/Externí článekDeník N komentář
videovideos/YT video s přepisemLex Fridman podcast
bookbooks/Výpisky z knihyAlchymie
insightinsights/Vlastní myšlenka, jedna ucelená realizace"Zákazy ničí důvěru"
conceptconcepts/Evolving wiki stránka, syntéza více zdrojů"Děti a sociální sítě"
notemy-notes/Delší vlastní text, sbírkaCitáty
fragmentinbox/Nezpracovaný zachycený obsahSurová URL

Příkazy

/knihovnik save <url-nebo-text> — Uložení s plným zpracováním

  1. Načti sources.json a tags.json
  2. Zkontroluj duplicitu (URL/title)
  3. Detekuj typ (article/video/book) nebo se zeptej
  4. Extrahuj obsah:
    • Articles: WebFetch (pokud paywall, zkontroluj zdroje/ jestli tam není stažený HTML)
    • YouTube: viz "YouTube videa — přepis"
    • Books: očekává citaci od uživatele
  5. Auto-link — viz "Auto-linking workflow"
  6. Compound check — viz "Concept pages workflow"
  7. Vytvoř content soubor (frontmatter + obsah)
  8. Navrhni štítky (preferuj existující z tags.json)
  9. Zobraz uživateli návrh — titulek, autor, štítky, propojené zdroje, návrh concept page (pokud relevantní)
  10. Po schválení ulož vše

/knihovnik inbox <text-nebo-url> — Rychlé zachycení

Pro situace kdy nemáš čas to zpracovat. Jen to hodím tam.

  1. Vytvoř soubor v inbox/YYYY-MM-DD-HHMMSS-slug.md s minimální strukturou:
    ---
    captured: "2026-04-07 14:30"
    raw: "https://..."
    ---
    
    <volný text/poznámka uživatele>
    
  2. Žádné tagy, žádné zpracování, žádný entry v sources.json
  3. Potvrď: "Uloženo do inboxu (X položek čeká na zpracování)"

/knihovnik process — Zpracování inboxu

Projde všechny soubory v inbox/, jeden po druhém:

  1. Pro každý fragment zobraz jeho obsah uživateli
  2. Navrhni typ + štítky + auto-links
  3. Po schválení spusť workflow /knihovnik save (s předvyplněnými hodnotami)
  4. Smaž zpracovaný fragment z inboxu
  5. Po dokončení zobraz souhrn: "Zpracováno N položek, X zbývá v inboxu"

/knihovnik insight <text> — Vlastní pozorování

Pro jednu ucelenou myšlenku/realizaci.

  1. Vytvoř soubor v content/insights/YYYY-MM-DD-slug.md:
    ---
    id: "2026-04-07-001"
    type: insight
    title: "Krátký výstižný titulek"
    date: "2026-04-07"
    tags: ["#tag1", "#tag2"]
    is_mine: true
    links: []
    ---
    
    # Titulek
    
    ## Pozorování
    <hlavní myšlenka>
    
    ## Kontext
    <co k tomu vedlo>
    
    ## Co z toho plyne
    <důsledek, akce>
    
  2. Auto-link na související zdroje (viz workflow)
  3. Compound check na concepts

/knihovnik note <text> — Vlastní delší poznámka / sbírka

Pro delší texty, sbírky, blogposty (jako sbírka citátů). Stejné jako insight, ale jde do content/my-notes/.

/knihovnik book <název> — Výpisky z knihy

  1. Vytvoř soubor v content/books/YYYY-MM-DD-slug.md
  2. Citace knihy (autor, vydavatel, rok)
  3. is_mine: false
  4. Uživatel doplní výpisky a poznámky
  5. Navrhni štítky + auto-link

/knihovnik concept <téma> — Vytvoření / aktualizace concept page

Manuální vytvoření concept page (jinak skill navrhne auto).

  1. Najdi všechny zdroje v sources.json související s tématem (přes tagy + fulltext)
  2. Pokud jsou < 3, varuj uživatele ("málo signálu pro concept page")
  3. Syntetizuj obsah z nalezených zdrojů
  4. Vytvoř content/concepts/topic-slug.md:
    ---
    id: "concept-001"
    type: concept
    title: "Téma"
    tags: ["#tag1", "#tag2"]
    sources:
      - "content/articles/2026-04-02-xyz.md"
      - "content/insights/2026-04-03-abc.md"
    related:
      - "content/concepts/jine-tema.md"
    last_updated: "2026-04-07"
    ---
    
    # Téma
    
    ## Klíčové myšlenky
    <syntéza ze všech sources>
    
    ## Vlastní pohled
    <co si o tom myslím>
    
    ## Sources
    - [Titul 1](path) — co přináší
    - [Titul 2](path) — co přináší
    
  5. Aktualizuj sources.json (přidej concept jako entry s linky na sources)

/knihovnik search <dotaz> — Hledání

  1. Načti sources.json
  2. Hledej v:
    • Titulcích a autorech
    • Štítcích (pokud začíná #)
    • Content souborech (Grep)
    • Concept pages (priorita — koncepty obsahují syntézu)
  3. Zobraz tabulku: ID | Typ | Titulek | Štítky | Datum
  4. Pokud dotaz odpovídá nějaké concept page, ukaž ji jako první

/knihovnik list [#tag] [typ] — Výpis zdrojů

Filtruj dle štítku/typu, seřaď od nejnovějšího.

/knihovnik tags — Výpis štítků

Zobraz štítky s počtem zdrojů, varuj na aliasy.

/knihovnik open <id> — Detail zdroje

Zobraz frontmatter + obsah + propojené zdroje (links).

/knihovnik connections <id> — Graf vazeb

Zobraz:

  • Přímé linky daného zdroje
  • Concept pages, ke kterým patří
  • Sourozence (zdroje s podobnými tagy)

/knihovnik edit <id> — Editace zdroje

Najdi, zobraz, uprav dle pokynů uživatele, aktualizuj content + sources.json.

/knihovnik bundle <téma> — Sbalí téma do jednoho .md

Pro export do NotebookLM, přípravu blogpostu, nebo jen pro souhrn co všechno k tématu mám.

  1. Najdi všechny zdroje v sources.json související s tématem (přes tagy + fulltext + concept page)
  2. Zobraz uživateli seznam nalezených zdrojů, nech ho přidat/odebrat
  3. Vygeneruj content/bundles/YYYY-MM-DD-tema-slug.md:
    ---
    bundle_topic: "Téma"
    generated: "2026-04-07"
    sources_count: 8
    tags: ["#tag1", "#tag2"]
    ---
    
    # Bundle: Téma
    
    > Vygenerováno z N zdrojů Knihovníka pro NotebookLM / blogpost / přípravu.
    
    ## Concept page (pokud existuje)
    <plný obsah concept page>
    
    ---
    
    ## Zdroj 1: <titulek>
    **Autor:** ... | **Datum:** ... | **Typ:** article
    **Tagy:** #tag1 #tag2
    **Shrnutí:** ...
    
    <plný obsah content souboru>
    
    ---
    
    ## Zdroj 2: ...
    
  4. Zobraz uživateli cestu + počet zdrojů + délku v slovech
  5. Tip pro NotebookLM: "Soubor můžeš nahrát na notebooklm.google.com → Generate podcast"

/knihovnik health — Kontrola zdraví KB

Zkontroluj:

  1. Sirotci — zdroje bez links
  2. Tagy mimo vocabulary — tagy v sources.json které nejsou v tags.json
  3. Stale concepts — concept pages starší 30 dní s novými zdroji k tématu
  4. Concept candidates — tagy s 3+ zdroji bez concept page
  5. Duplicitní URL

Vrať report s návrhy na opravu.

Auto-linking workflow

Při ukládání nového zdroje skill automaticky najde 2-3 nejvíc související existující zdroje:

  1. Tag overlap — najdi zdroje sdílející 2+ tagy s novým
  2. Title similarity — fulltext hledání klíčových slov z titulku v ostatních
  3. Author/source match — stejný autor nebo stejný zdroj (Deník N, atd.)
  4. Topic match — pokud má nový zdroj concept page, propoj na ni

Vyber top 2-3 a:

  • Přidej je do links: [] v novém content souboru
  • Bidirectional update — přidej nový zdroj do links: [] těch existujících (v jejich content souborech i v sources.json)
  • Ukaž uživateli, co se propojilo

Concept pages workflow (compound effect)

Při každém save příkazu:

  1. Existuje concept page k tématu? (matchnu přes tagy)
    • ANO → aktualizuj ji:
      • Přidej novou data point/citát do obsahu
      • Přidej cestu do sources: array
      • Bumpni last_updated:
      • Pokud update odhalí novou vazbu na jinou concept page, přidej do related:
    • NE → zkontroluj jestli existuje 3+ zdrojů ke stejnému tématu (po přidání tohoto)
      • Pokud ANO → navrhni uživateli vytvořit concept page
      • Pokud NE → nic, jen ulož

Příklad compound update:

Nový článek "AI v marketingu" →
- Vytvoří entry v library/
- Updates concepts/ai-marketing.md (přidá data)
- Updates concepts/marketing-trends.md (cross-reference)

Práh 3 = dostatečný signál pro syntézu bez předčasné abstrakce.

YouTube videa — přepis

Při /knihovnik save <youtube-url> se automaticky stáhne audio a přepíše přes lokální Whisper.

Prerekvizity

  • yt-dlp (nainstalováno přes brew)
  • whisper (lokální, model large-v3)
  • ffprobe / ffmpeg

Workflow

  1. Stáhni metadata z YouTube:

    yt-dlp --print title --print channel --print upload_date --print description --skip-download "<url>"
    
  2. Stáhni audio do dočasné složky:

    yt-dlp -x --audio-format mp3 --audio-quality 0 -o "/tmp/knihovnik-yt-%(id)s.%(ext)s" "<url>"
    
  3. Zjisti délku nahrávky:

    ffprobe -v error -show_entries format=duration -of csv=p=0 "/tmp/knihovnik-yt-VIDEOID.mp3"
    
    • Pokud > 60 minut, upozorni uživatele
  4. Přepiš přes Whisper:

    whisper "/tmp/knihovnik-yt-VIDEOID.mp3" --model large-v3 --language cs --output_format txt --output_dir /tmp
    
  5. Vyčisti přepis (stejná pravidla jako /whspr skill) — odstraň hezitační zvuky, opakování, rozděl do odstavců s mezititulky

  6. Ulož content soubor do content/videos/YYYY-MM-DD-slug.md

  7. Smaž dočasné soubory z /tmp

  8. Navrhni štítky + auto-link + compound check

Poznámky

  • Dlouhá videa (60+ min) — Whisper přes run_in_background
  • Pokud yt-dlp selže, informuj uživatele

Pravidla pro štítky

  • Lowercase, bez diakritiky: #e-commerce, #leadership
  • Krátké, max 2 slova spojená pomlčkou
  • Preferuj existující štítky z tags.json
  • Formát v tags.json:
    {
      "name": "#leadership",
      "description": "Vedení lidí, management",
      "aliases": ["#management", "#vedeni"],
      "category": "byznys",
      "count": 5
    }
    

Alias resolution (povinné při každém save)

Když Curator navrhne nebo dostane od uživatele štítek:

  1. Přesný match — je v tags.json jako name? → použij ho
  2. Alias match — je v některém aliases poli? → přepiš na canonical name a informuj uživatele:

    "Štítek #management je alias na #leadership, používám #leadership"

  3. Žádný match — nový štítek:
    • Zkontroluj jestli to není zjevný překlad/synonymum existujícího (např. #startup → mohl by být alias na #podnikani)
    • Pokud ano, navrhni uživateli přidat jako alias místo nového tagu
    • Pokud ne, přidej do tags.json s description, category, count: 1

Health alert na tagy

Při /knihovnik health zkontroluj:

  • Tagy v sources.json které nejsou v tags.json (neregistrované)
  • Tagy které jsou v aliases ale stále se používají v sources (mělo by se přepsat)
  • Tagy s count: 0 (nevyužité, kandidát na smazání)

Pravidla pro citace

  • Cizí obsah (is_mine: false): vždy Autor — [Název](URL) (datum)
  • V content souboru cizí text jako blockquote (>)
  • Vlastní poznámky normálním textem
  • Nikdy nemíchat bez jasného oddělení

Formát sources.json záznamu

{
  "id": "2026-04-07-001",
  "type": "article",
  "title": "Název",
  "url": "https://...",
  "author": "Jméno",
  "date_saved": "2026-04-07",
  "date_published": "2024-01-15",
  "tags": ["#tag1", "#tag2"],
  "is_mine": false,
  "content_file": "content/articles/2026-04-07-nazev.md",
  "summary": "Krátké shrnutí 2-3 věty.",
  "links": ["2026-04-02-003", "concept-deti-online"]
}

Session Harvest

Trigger: Když uživatel řekne „hotovo / done / shrň session / co jsme vlastně udělali" — nebo na konci podstatné konverzace.

Skill vyhodnotí:

  1. Vytvořila session novou znalost?

    • Nová analýza, rámec, rozhodnutí, syntéza, srovnání?
    • Odpověď na netriviální otázku, kterou stojí za to uchovat?
    • Skipni triviální session (bug fixy, formátování, krátké Q&A)
  2. Pokud ANO, navrhni uložení jako:

    • Concept page (concepts/) — pokud session prohloubila pochopení tématu, ke kterému už něco máme
    • Insight (insights/) — pokud session odhalila novou realizaci
    • Decision — pokud padlo důležité rozhodnutí (uložíme jako insight s tagem #decision)
  3. Návrh formuluj krátce:

    „Tato session přinesla X. Uložit jako [concept/insight]?"

  4. Po schválení: spusť /knihovnik insight nebo /knihovnik concept workflow

  5. Max 1 návrh za session — nenuť uživatele.

Wikilinks v content tělech

V markdownu uvnitř content souborů používej Obsidian-friendly syntax:

Tahle myšlenka navazuje na [[2026-04-02-001|Alchymii]] a [[2026-04-02-002|Navala]].

Související koncept: [[concept-podnikatelsky-mindset]]

Pravidla:

  • [[id]] — link na zdroj/concept podle ID
  • [[id|alias]] — link s vlastním textem
  • Concept pages používají slug: [[concept-podnikatelsky-mindset]]
  • Při exportu / čtení tyhle linky fungují jak v Obsidianu, tak je skill umí resolvovat

Důležité

  • Vždy přečti sources.json a tags.json PŘED zápisem
  • ID: YYYY-MM-DD-NNN (datum + pořadí)
  • Slug: lowercase, bez diakritiky, max 5 slov
  • Bidirectional links — když A linkuje B, B musí linkovat A
  • Po každé operaci potvrď uživateli co se stalo + co se propojilo
  • Při save vždy NAVRHNI a nech schválit
  • Compound effect je core — každý save by měl ideálně updatnout aspoň 1 existující entry (link) nebo concept page