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

- Skill: `jmech-pepa/knihovnik` (Agent Skill)
- Install (CLI): `npx skillmds@latest add jmech-pepa/knihovnik`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jmech-pepa/knihovnik/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: jmech-pepa (https://skillmd.com/u/jmech-pepa)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/jmech-pepa/knihovnik

---


# 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

**Zdroj pravdy jsou frontmattery content souborů.** `sources.json` je derivovaný index pro rychlé hledání — kdykoli ho lze přestavět přes `/knihovnik reindex`. Důvod: data žijí na Google Drive se sync mezi počítači; konflikt syncu (soubory `* (1).json`) může index rozbít, ale content soubory přežijí a index se z nich obnoví.

```
KNIHOVNIK_DIR/
├── data/
│   ├── sources.json     # derivovaný index všech zdrojů + connections (rebuild: /knihovnik reindex)
│   └── 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)
```

Kde `KNIHOVNIK_DIR` je tvoje knowledge base složka — nastav si ji v lokálním `CLAUDE.md` projektu, např.:

```
KNIHOVNIK_DIR=$HOME/Documents/knihovnik
```

Doporučuju ji umístit na cloud (Google Drive, iCloud, Dropbox), ať máš data sync mezi počítači.

## Typy záznamů

| Typ | Složka | Účel | Příklad |
|---|---|---|---|
| `article` | `articles/` | Externí článek | Komentář z novin |
| `video` | `videos/` | YT video s přepisem | Podcast |
| `book` | `books/` | Výpisky z knihy | Non-fiction titul |
| `insight` | `insights/` | Vlastní myšlenka, jedna ucelená realizace | "Zákazy ničí důvěru" |
| `concept` | `concepts/` | Evolving wiki stránka, syntéza více zdrojů | "Děti a sociální sítě" |
| `note` | `my-notes/` | Delší vlastní text, sbírka | Citáty |
| `fragment` | `inbox/` | Nezpracovaný zachycený obsah | Surová 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:
   ```markdown
   ---
   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`:
   ```markdown
   ---
   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`:
   ```markdown
   ---
   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`:
   ```markdown
   ---
   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**
6. **Drift indexu** — content soubory na disku, které nejsou v sources.json (a naopak entry bez souboru) → doporuč `/knihovnik reindex`
7. **Drive konflikty** — soubory `* (1).md`, `* (1).json`, `*conflict*` kdekoli v KNIHOVNIK_DIR → vypiš je a navrhni řešení (porovnat, sloučit, smazat)

Vrať report s návrhy na opravu.

### `/knihovnik reindex` — Přestavba indexu z content souborů

Když je `sources.json` rozbitý, po Drive konfliktu, nebo při driftu (health check 6):

1. Projdi všechny `.md` v `content/**` a přečti frontmattery (id, type, title, tags, links, …)
2. Postav nový `sources.json` čistě z nich — frontmatter je zdroj pravdy
3. `summary` pole: převezmi ze starého sources.json podle id (pokud existuje), jinak vygeneruj z obsahu
4. Zkontroluj bidirectional linky (A→B vyžaduje B→A) — chybějící doplň do frontmatterů
5. Starý sources.json ulož jako `data/sources.json.bak` (jeden backup, přepisuj)
6. Report: počet zdrojů, opravených linků, rozdílů proti starému indexu

## 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
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:
   ```bash
   yt-dlp --print title --print channel --print upload_date --print description --skip-download "<url>"
   ```

2. **Stáhni audio** do dočasné složky:
   ```bash
   yt-dlp -x --audio-format mp3 --audio-quality 0 -o "/tmp/knihovnik-yt-%(id)s.%(ext)s" "<url>"
   ```

3. **Zjisti délku** nahrávky:
   ```bash
   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**:
   ```bash
   whisper "/tmp/knihovnik-yt-VIDEOID.mp3" --model large-v3 --language cs --output_format txt --output_dir /tmp
   ```
   - Pro anglická videa použij `--language en`
   - Jazyk detekuj z názvu/popisu videa, nebo se zeptej uživatele

5. **Vyčisti přepis**:
   - Odstraň hezitační zvuky (ehm, ééé, hmm)
   - Odstraň opakování a nedokončené věty
   - Rozděl do odstavců s mezititulky
   - Zachovej autentický jazyk mluvčího
   - NEpřidávej nic co řečník neřekl

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`:
  ```json
  {
    "name": "#leadership",
    "description": "Vedení lidí, management",
    "aliases": ["#management", "#vedeni"],
    "category": "byznys",
    "count": 5
  }
  ```

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

Když skill 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

```json
{
  "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:

```markdown
Tahle myšlenka navazuje na [[2026-04-02-001|Jinou poznámku]] a [[2026-04-02-002|Další]].

Související koncept: [[concept-nazev]]
```

**Pravidla:**
- `[[id]]` — link na zdroj/concept podle ID
- `[[id|alias]]` — link s vlastním textem
- Concept pages používají slug: `[[concept-nazev]]`
- 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

## Changelog
- **2026-07-02** — Frontmattery content souborů prohlášeny za zdroj pravdy, `sources.json` je derivovaný index. Nový příkaz `/knihovnik reindex` (rebuild po Drive konfliktu/driftu), health check rozšířen o drift indexu a Drive konflikt soubory. YouTube přepis odkázán na `/whspr` (konec duplikace whisper parametrů).

