Przejdź do głównej treści
LokeeLokee

Zestaw promptów

Prompty, które zamienią twoją książkę w skarbiec Lokee

Sześć promptów uruchamianych po kolei, dla Claude Code, Codex lub innego agenta do programowania. Powstały z uogólnienia tych, którymi autor zamienił całą powieść w skarbiec, i działają dla każdej książki w każdym języku.

Najpierw przeczytaj poradnik krok po kroku →

Jak ich używać

Zastąp symbole zastępcze w nawiasach klamrowych, a potem wklej każdy prompt do agenta otwartego w folderze roboczym. Uruchamiaj je po kolei i każdy zaczynaj w nowej sesji, żeby agent pracował na plikach, a nie na pamięci. Ekstrakcja i opisy mogą działać w kilku sesjach naraz.

Agent pisze wszystko, co widzi czytelnik, w języku twojej książki. Nazwy plików, nazwy pól i przykłady JSON zostają po angielsku w każdej wersji językowej, bo czyta je Lokee.

Symbole zastępcze

{BOOK_TITLE}
Tytuł twojej książki.
{SOURCE_FOLDER}
Folder z rękopisem. Agent tylko go czyta.
{WORK_FOLDER}
Nowy folder, w którym agent trzyma pliki rozdziałów i wyniki pośrednie.
{VAULT_FOLDER}
Nowy, pusty folder na gotowy skarbiec.
{GROUP_ID}
Identyfikator grupy z chapters.md, na przykład g01.
{CHAPTERS}
Pliki rozdziałów tej grupy, na przykład 01–06.
{DOSSIER_NUMBER}
Numer pliku dossier, na przykład 1.

Prompt 1

Przygotuj książkę

Raz, na początku. Zatwierdzasz grupy rozdziałów i typy encji, zanim cokolwiek zostanie wyekstrahowane.

Pomagasz mi zamienić moją książkę „{BOOK_TITLE}” w skarbiec Lokee — uporządkowaną bazę jej postaci, miejsc, relacji i wydarzeń. Rękopis jest w {SOURCE_FOLDER}. Pracuj wyłącznie w {WORK_FOLDER}; niczego nie zmieniaj w {SOURCE_FOLDER}.

Krok 1 — pliki rozdziałów. Przekonwertuj rękopis na Markdown, jeden plik na rozdział: {WORK_FOLDER}/book/NN-krotki-tytul.md, gdzie NN to dwucyfrowa kolejność lektury (01, 02, …). Pierwsza linia każdego pliku to „# ” i tytuł rozdziału dokładnie jak w książce. Przepisz tekst słowo w słowo: bez streszczeń, poprawek i parafraz. Prolog, epilog, aneksy i słowniczek dostają własne pliki.

Krok 2 — grupy. Zapisz {WORK_FOLDER}/chapters.md: wszystkie pliki rozdziałów z liczbą słów, a potem podział na grupy po mniej więcej 15 000–25 000 słów (identyfikatory g01, g02, …). Każdą grupę wyekstrahuje osobny agent.

Krok 3 — specyfikacja ekstrakcji. Przeczytaj szybko całą książkę i zapisz {WORK_FOLDER}/SPEC.md — instrukcję, której będzie przestrzegał każdy agent ekstrakcji. Musi zawierać:
- Język książki. Cała wyekstrahowana treść jest pisana w tym języku, a nazwy własne dokładnie tak jak w książce.
- Typy encji jako dokładne napisy. Zacznij od tych i dopasuj je do książki, w jej języku: Postać, Miejsce, Organizacja, Przedmiot, Istota lub gatunek, Magia lub technologia, Wydarzenie, Pojęcie. Usuń typy, których książka nie potrzebuje; dodaj te, których potrzebuje (na przykład Przepowiednia albo Statek).
- Nazwy atrybutów dla każdego typu: krótkie nazwy snake_case w języku książki — dla postaci na przykład: rola, wiek, wygląd, charakter, moce, status; dla miejsca: rodzaj, region, wygląd. Atrybuty wypełnia się tylko tym, co mówi tekst.
- Kanoniczne klucze dla głównej obsady i każdego powracającego miejsca, grupy i przedmiotu: kanoniczna nazwa małymi literami ASCII w kebab-case, bez znaków diakrytycznych (na przykład mira-vale). Jedna encja ma jeden klucz; inne nazwy i pisownie trafiają do aliases.
- Poniższe typy relacji. Używaj tych nazw, a nową nazwę snake_case proponuj tylko wtedy, gdy żadna nie pasuje. Każda linia to „typ ↔ odwrotność”; typ w parze z samym sobą czyta się tak samo w obie strony. Każdą relację zapisuj raz, od strony, która wykonuje czynność (source robi to wobec target), nigdy w obu kierunkach pary. Dla rodziny zachowaj nazwy parent_of, child_of, sibling_of, spouse_of, ancestor_of i descendant_of, żeby Lokee narysowało drzewo genealogiczne.
parent_of ↔ child_of
grandparent_of ↔ grandchild_of
ancestor_of ↔ descendant_of
sibling_of ↔ sibling_of
spouse_of ↔ spouse_of
kin_of ↔ kin_of
friend_of ↔ friend_of
ally_of ↔ ally_of
enemy_of ↔ enemy_of
rival_of ↔ rival_of
companion_of ↔ companion_of
loves ↔ loved_by
betrayed ↔ betrayed_by
mentor_of ↔ student_of
serves ↔ served_by
leader_of ↔ led_by
member_of ↔ has_member
rules ↔ ruled_by
owns ↔ owned_by
part_of ↔ has_part
created ↔ created_by
located_in ↔ contains
lives_in ↔ home_of
born_in ↔ birthplace_of
imprisoned_in ↔ prison_of
visited ↔ visited_by
hunts ↔ hunted_by
captured ↔ captured_by
attacked ↔ attacked_by
saved ↔ saved_by
killed ↔ killed_by
participated_in ↔ had_participant
belongs_to_race ↔ race_of
uses ↔ used_by
knows ↔ knows
- Format wyniku: każda grupa zapisuje jeden plik JSON, {WORK_FOLDER}/extract/<id grupy>.json, dokładnie w tym kształcie (wartości to tylko przykład):
{
  "group": "g01",
  "chapters": [
    "01-the-lamplighter",
    "02-the-toll-house"
  ],
  "entities": [
    {
      "key": "mira-vale",
      "name": "Mira Vale",
      "type": "Character",
      "aliases": [
        "the Lamplighter"
      ],
      "attributes": {
        "role": "lamplighter",
        "appearance": "grey braid, burn scars on both hands"
      },
      "facts": [
        "Has walked the Lantern Road for thirty years (01)."
      ],
      "quotes": [
        {
          "text": "Mira Vale had walked the Lantern Road for thirty years.",
          "category": "appearance",
          "chapter": "01-the-lamplighter"
        }
      ],
      "states": [
        {
          "milestone": "Chapter 1",
          "note": "takes Tobin as her apprentice"
        }
      ]
    }
  ],
  "relationships": [
    {
      "source": "mira-vale",
      "type": "mentor_of",
      "target": "tobin",
      "evidence": "she told Tobin, her new apprentice",
      "chapter": "01-the-lamplighter",
      "note": ""
    }
  ],
  "events": [
    {
      "title": "Mira takes Tobin as her apprentice",
      "chapter": "01-the-lamplighter",
      "order": 1,
      "description": "Two to four sentences.",
      "participants": [
        "mira-vale",
        "tobin"
      ],
      "places": [
        "lantern-road"
      ],
      "spoiler": false
    }
  ]
}
- Te zasady: quotes[].text i relationships[].evidence są kopiowane znak w znak z pliku rozdziału, bo zostaną odnalezione dokładnym wyszukiwaniem — cytaty do 200 znaków, dowody do 120. Kategoria cytatu to jedna z: appearance, personality, relationship, event, worldbuilding, dialogue, clue, custom. Każda istotna encja dostaje 1–4 cytaty, a każda postać, której wygląd jest opisany — cytat appearance. Fakty to krótkie zdania zakończone numerem rozdziału w nawiasie, np. (07): wyczerpujące dla głównych postaci, 1–3 dla pobocznych. Wydarzenia to główne punkty fabuły każdego rozdziału po kolei (order = pozycja w rozdziale), 3–10 na rozdział, ze spoiler: true dla zwrotów akcji. Niepewność zaznaczaj słowami („prawdopodobnie”, „nie podano wprost”). Ekstrahuj tylko z przydzielonych rozdziałów.

Na koniec pokaż mi grupy i wybrane typy encji i zaczekaj na moją zgodę.

Prompt 2

Wyekstrahuj grupę rozdziałów

Raz na każdą grupę rozdziałów — równolegle, jedna sesja lub podagent na grupę.

Przeczytaj {WORK_FOLDER}/SPEC.md i stosuj się do niego dokładnie. Twoja grupa to {GROUP_ID}: rozdziały {CHAPTERS} w {WORK_FOLDER}/book/.

Przeczytaj każdy przydzielony rozdział w całości, linijka po linijce. Wyekstrahuj wszystko, co ma nazwę — postacie (także osoby tylko wspomniane, jak przodkowie czy władcy), miejsca, organizacje i grupy, przedmioty, istoty i gatunki, magię lub technologię, nazwane wydarzenia, pojęcia i terminy — a także ważne postacie bez imienia („stary przewoźnik”). Gdy encja ma kanoniczny klucz w SPEC.md, używaj go. Jeśli nie masz pewności, czy dwie nazwy to ta sama encja, użyj jednego klucza, a drugą nazwę wpisz do aliases.

Zapisz jeden plik, {WORK_FOLDER}/extract/{GROUP_ID}.json — UTF-8, poprawny JSON, bez komentarzy — i sprawdź, czy się parsuje. Potem odpowiedz podsumowaniem w pięciu linijkach: liczba encji, relacji i wydarzeń oraz wątpliwości co do nazw.

Prompt 3

Scal w dossier

Raz, gdy każda grupa ma już swój plik.

Scal pliki ekstrakcji {WORK_FOLDER}/extract/*.json dla „{BOOK_TITLE}”. Możesz napisać i uruchomić mały skrypt; nie edytuj plików ekstrakcji ręcznie.

1. Znajdź klucze, które oznaczają tę samą encję — warianty pisowni, przydomek użyty jako klucz, liczbę pojedynczą i mnogą — i zapisz je w {WORK_FOLDER}/merge.json jako wariant klucza → klucz kanoniczny:
{
  "lamp-road": "lantern-road",
  "mira": "mira-vale"
}
Pokaż mi tę listę, zanim ją zastosujesz.
2. Scal każdy klucz kanoniczny: zostaw jedną nazwę i najbardziej szczegółowy typ; połącz aliases (bez duplikatów i bez samej nazwy), atrybuty (różne wartości złącz przez „; ”), fakty, cytaty, stany i rozdziały, w których encja występuje. Końce relacji i uczestników wydarzeń przepisz na klucze kanoniczne.
3. Zapisz dossier do kroku opisów: {WORK_FOLDER}/dossiers/dossier-1.json, dossier-2.json i tak dalej, po około 40–60 encji, z głównymi postaciami rozłożonymi między pliki:
{
  "mira-vale": {
    "name": "Mira Vale",
    "type": "Character",
    "aliases": [
      "the Lamplighter"
    ],
    "attributes": {
      "role": "lamplighter"
    },
    "facts": [
      "Has walked the Lantern Road for thirty years (01)."
    ],
    "chapters": [
      "01-the-lamplighter"
    ],
    "relationships": [
      "mentor_of tobin"
    ]
  }
}

Podaj liczbę encji w każdym typie, scalone klucze oraz relacje i wydarzenia, które wskazują klucze nienależące do żadnej encji.

Prompt 4

Napisz opisy

Raz na każde dossier, jeśli chcesz — równolegle. Opcjonalnie: bez tego kroku opisy są listami faktów.

Napisz encyklopedyczne opisy encji z „{BOOK_TITLE}”. Twoje dane wejściowe to {WORK_FOLDER}/dossiers/dossier-{DOSSIER_NUMBER}.json. Fakty kończą się numerem rozdziału, np. (05); pliki rozdziałów są w {WORK_FOLDER}/book/ — otwieraj je, żeby sprawdzić wszystko, co niejasne lub sprzeczne, zwłaszcza przy głównych postaciach.

Zapisz {WORK_FOLDER}/descriptions/desc-{DOSSIER_NUMBER}.json z jednym opisem w Markdownie dla każdego klucza z twojego dossier:
{
  "mira-vale": "Mira Vale is the lamplighter of the Lantern Road (Chapter 1).\n\n## Appearance\n…"
}

Styl — artykuł jak z wiki, w języku książki:
- Zacznij od jednego zwykłego zdania wprowadzającego: kto to lub co to jest.
- Główne encje (8 i więcej faktów): 2–5 krótkich sekcji z pasującymi nagłówkami ## (na przykład Wygląd, Moce, Historia, Relacje), łącznie 150–450 słów.
- Średnie encje (3–7 faktów): jeden lub dwa akapity, 60–150 słów.
- Poboczne encje (1–2 fakty): od jednego do trzech zdań.
- Terminy ze słowniczka: najpierw definicja, potem kontekst.
- Odwołania do rozdziałów w nawiasie na końcu zdań, na przykład (Rozdział 4).
- Tylko to, co potwierdzają dossier i tekst. Niepewność zaznaczaj słowami. Zdanie zdradzające ważny zwrot akcji zacznij od **Spoiler:**.

Sprawdź, czy plik parsuje się jako JSON, a potem odpowiedz jedną linijką: liczba napisanych opisów.

Prompt 5

Zbuduj skarbiec

Raz; uruchom ponownie przy każdej zmianie danych wejściowych. Opisuje format skarbca na tyle dokładnie, żeby agent mógł go zapisać.

Zbuduj skarbiec Lokee dla „{BOOK_TITLE}” z plików w {WORK_FOLDER}, w pustym folderze {VAULT_FOLDER}. Napisz i uruchom do tego skrypt (Python lub Node.js); nie wpisuj plików skarbca ręcznie.

Dane wejściowe: pliki rozdziałów {WORK_FOLDER}/book/*.md, pliki ekstrakcji {WORK_FOLDER}/extract/*.json, {WORK_FOLDER}/merge.json oraz opisy {WORK_FOLDER}/descriptions/*.json. Gdy encja nie ma opisu, użyj jej faktów jako listy punktowanej.

Zasady ogólne:
- Każdy identyfikator to UUID. Niech identyfikatory będą deterministyczne — uuid v5 z jednej stałej przestrzeni nazw i stabilnej nazwy, np. „entity/mira-vale” albo „event/03/2” (w Pythonie: uuid.uuid5) — tak, żeby ponowne uruchomienie dało te same identyfikatory.
- Znaczniki czasu to napisy ISO-8601 w UTC, np. „2026-01-15T12:00:00.000Z”. Użyj jednego znacznika dla całego budowania.
- Pliki są w UTF-8, to poprawny JSON bez komentarzy. Nazwy pól, nazwy plików i podane tu stałe wartości zostają dokładnie tak, jak są zapisane, po angielsku. Wszystko, co widzi czytelnik — nazwy, etykiety, opisy, tytuły — jest w języku książki.

Układ folderów (nazwy dokładnie jak poniżej; <…> to identyfikator):
.cache/
project.json
entities/<entityId>/<entityId>.json
source-documents/<docId>/<book file>.md
source-documents/<docId>/manifest.json
manuscript/manifest.json
manuscript/containers/<leafId>.md
story-events/<eventId>/<eventId>.json
notes/<noteId>/<noteId>.json

project.json — sam skarbiec. Wymagane: id, version (zawsze 1), name, createdAt, updatedAt, entityTypes, relationshipTypes. Typ encji ma id, name i fieldTemplates (każdy: id, name, type "string", required false), a opcjonalnie color (kolor hex) i shape (circle, square, diamond lub triangle). Typ relacji ma id, name (klucz snake_case) i label (widoczny dla czytelnika, w języku książki). W parze takiej jak mentor_of i student_of reciprocalTypeId każdej strony to id drugiej; typ symetryczny, np. friend_of, wskazuje sam siebie. Uwzględnij tylko używane typy relacji i ich odwrotności. Przydatne pola opcjonalne: language (tylko "en" lub "pl" — dla innych języków pomiń), entityPresentation "wiki" (opisy czytane jak artykuły), catalogueFolders (ścieżki folderów widoczne w panelu bocznym, np. "Postacie"). Nie dodawaj innych pól.
{
  "id": "0b1e7c52-6a0d-5f2e-9c41-2d7a8e3f5b10",
  "version": 1,
  "name": "The Lantern Road",
  "createdAt": "2026-01-15T12:00:00.000Z",
  "updatedAt": "2026-01-15T12:00:00.000Z",
  "language": "en",
  "entityPresentation": "wiki",
  "catalogueFolders": [
    "Characters",
    "Places"
  ],
  "entityTypes": [
    {
      "id": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e01",
      "name": "Character",
      "color": "#e0915a",
      "shape": "circle",
      "fieldTemplates": [
        {
          "id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f01",
          "name": "role",
          "type": "string",
          "required": false
        },
        {
          "id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f02",
          "name": "appearance",
          "type": "string",
          "required": false
        }
      ]
    },
    {
      "id": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e02",
      "name": "Place",
      "color": "#4f9d8a",
      "shape": "square",
      "fieldTemplates": [
        {
          "id": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f03",
          "name": "region",
          "type": "string",
          "required": false
        }
      ]
    }
  ],
  "relationshipTypes": [
    {
      "id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01",
      "name": "mentor_of",
      "label": "Mentor of",
      "reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02"
    },
    {
      "id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02",
      "name": "student_of",
      "label": "Student of",
      "reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01"
    },
    {
      "id": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a03",
      "name": "friend_of",
      "label": "Friend of",
      "reciprocalTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a03"
    }
  ]
}

Encje — entities/<id>/<id>.json, jeden plik na encję. Wymagane: id, version 1, entityTypeId, name, tags ([] wystarczy), attributes, description (Markdown; "" gdy pusty), relationships, citations, aiExtracted true, aiVerified false, deletedAt null, createdAt, updatedAt. Opcjonalne: aliases, cataloguePath (jeden z catalogueFolders), quotes, states. Atrybut to {fieldId, name, value: {type: "string", value}}, gdzie fieldId to id szablonu pola o tej nazwie w typie encji; jeśli go brakuje, dodaj szablon do typu.
{
  "id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01",
  "version": 1,
  "entityTypeId": "1c2d3e4f-5a6b-5c7d-8e9f-0a1b2c3d4e01",
  "name": "Mira Vale",
  "tags": [],
  "cataloguePath": "Characters",
  "aliases": [
    "the Lamplighter"
  ],
  "attributes": [
    {
      "fieldId": "2d3e4f5a-6b7c-5d8e-9f0a-1b2c3d4e5f01",
      "name": "role",
      "value": {
        "type": "string",
        "value": "lamplighter; Tobin's mentor"
      }
    }
  ],
  "description": "Mira Vale is the lamplighter of the Lantern Road, which she has walked for thirty years (Chapter 1).",
  "relationships": [
    {
      "id": "5a6b7c8d-9e0f-5a1b-8c3d-4e5f6a7b8c01",
      "relationshipTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a01",
      "targetEntityId": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b02",
      "direction": "outgoing",
      "createdAt": "2026-01-15T12:00:00.000Z"
    }
  ],
  "citations": [
    {
      "id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d01",
      "sourceDocumentId": "7c8d9e0f-1a2b-5c3d-8e5f-6a7b8c9d0e01",
      "passage": "Mira Vale had walked the Lantern Road for thirty years.",
      "startOffset": 30,
      "endOffset": 85
    }
  ],
  "quotes": [
    {
      "id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d02",
      "text": "The road remembers who lights it.",
      "category": "dialogue",
      "sourceDocumentTitle": "The Lantern Road",
      "sourceChapter": "Chapter 1: The Lamplighter",
      "pinned": false,
      "createdAt": "2026-01-15T12:00:00.000Z",
      "updatedAt": "2026-01-15T12:00:00.000Z"
    }
  ],
  "states": [
    {
      "id": "6b7c8d9e-0f1a-5b2c-9d4e-5f6a7b8c9d03",
      "milestone": "Chapter 1",
      "note": "takes Tobin as her apprentice",
      "createdAt": "2026-01-15T12:00:00.000Z"
    }
  ],
  "aiExtracted": true,
  "aiVerified": false,
  "deletedAt": null,
  "createdAt": "2026-01-15T12:00:00.000Z",
  "updatedAt": "2026-01-15T12:00:00.000Z"
}

Relacje są zapisane na obu encjach, z tym samym id relacji. Encja źródłowa dostaje direction "outgoing", id typu relacji i targetEntityId = cel. Encja docelowa dostaje direction "incoming", targetEntityId = źródło i id typu odwrotnego (to samo id dla typu symetrycznego) — tak wygląda strona Tobina z przykładu powyżej:
[
  {
    "id": "5a6b7c8d-9e0f-5a1b-8c3d-4e5f6a7b8c01",
    "relationshipTypeId": "3e4f5a6b-7c8d-5e9f-8a1b-2c3d4e5f6a02",
    "targetEntityId": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01",
    "direction": "incoming",
    "createdAt": "2026-01-15T12:00:00.000Z"
  }
]
Najpierw każdą relację zapisaną od strony odwrotnej obróć na stronę kanoniczną, potem zachowaj każdą relację raz (dla typu symetrycznego A–B i B–A to to samo). Pomiń relacje, których końce to nieznane klucze albo ta sama encja.

Cytowania łączą encję z tekstem książki: {id, sourceDocumentId, passage, startOffset, endOffset}, gdzie passage to dokładnie tekst źródła od startOffset do endOffset (pozycje znaków w dokumencie źródłowym opisanym niżej). Znajdź w tekście źródła każdy wyekstrahowany cytat — oraz dowód każdej relacji, cytowany na encji źródłowej: najpierw dokładne dopasowanie, potem tolerujące różnice w białych znakach i myślnikach, szukając najpierw w rozdziale cytatu, potem w całej książce. Cytaty, których nie da się znaleźć, pomiń i policz. Cytaty trafiają też do quotes: {id, text, category, sourceDocumentTitle, sourceChapter, pinned, createdAt, updatedAt}; przypnij pierwszy cytat appearance. Stany to {id, milestone, note, createdAt}.

Dokument źródłowy — potrzebny do cytowań: source-documents/<docId>/ zawiera całą książkę jako jeden plik Markdown (rozdziały po kolei, każdy zaczyna się od „# ” i tytułu) oraz manifest.json z id, originalFilename, importedAt, fileSize (bajty, UTF-8), mimeType "text/markdown" i chapterCount.
{
  "id": "7c8d9e0f-1a2b-5c3d-8e5f-6a7b8c9d0e01",
  "originalFilename": "The Lantern Road.md",
  "importedAt": "2026-01-15T12:00:00.000Z",
  "fileSize": 192,
  "mimeType": "text/markdown",
  "chapterCount": 1
}

Rękopis — książka w edytorze Lokee: manuscript/manifest.json to {version 1, updatedAt, statusLabels, root}. Węzeł w root to kontener {id, kind "container", label, titleCache, children} albo liść {id, kind "leaf", label, titleCache}; kontenerów użyj dla tomów lub części, a jednego liścia na rozdział. Każdy liść ma plik manuscript/containers/<leafId>.md, bezpośrednio w containers/, niezależnie od głębokości w drzewie: front matter YAML z id, title, status (jeden ze statusLabels), wordCount, linkedEntities [] i updatedAt, każda wartość zapisana jako wartość JSON (napisy w cudzysłowach, żeby daty zostały tekstem), a potem tekst rozdziału bez linii z tytułem.
{
  "version": 1,
  "updatedAt": "2026-01-15T12:00:00.000Z",
  "statusLabels": [
    "draft",
    "revised",
    "final",
    "archived"
  ],
  "root": [
    {
      "id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f01",
      "kind": "container",
      "label": "Book",
      "titleCache": "The Lantern Road",
      "children": [
        {
          "id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02",
          "kind": "leaf",
          "label": "Chapter",
          "titleCache": "Chapter 1: The Lamplighter"
        }
      ]
    }
  ]
}
---
id: "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
title: "Chapter 1: The Lamplighter"
status: "final"
wordCount: 26
linkedEntities: []
updatedAt: "2026-01-15T12:00:00.000Z"
---
Mira Vale had walked the Lantern Road for thirty years.

“Hold the lamp higher,” she told Tobin, her new apprentice. “The road remembers who lights it.”


Wydarzenia — plan wydarzeń: jedno wydarzenie główne na rozdział (parentId null, order = pozycja rozdziału, link {kind "chapter", id: id liścia}), a pod nim punkty fabuły rozdziału (parentId = id wydarzenia głównego, order = pozycja w rozdziale, linki do rozdziału oraz do uczestniczących encji i miejsc). Wymagane: id, parentId, order, title, description (Markdown), links (kind to "entity", "chapter" lub "note"), causalLinks [], aiExtracted true, aiVerified false, deletedAt null, createdAt, updatedAt. Spoilery oznacz na początku opisu.
[
  {
    "id": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a01",
    "parentId": null,
    "order": 0,
    "title": "Chapter 1: The Lamplighter",
    "description": "",
    "links": [
      {
        "kind": "chapter",
        "id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
      }
    ],
    "causalLinks": [],
    "aiExtracted": true,
    "aiVerified": false,
    "deletedAt": null,
    "createdAt": "2026-01-15T12:00:00.000Z",
    "updatedAt": "2026-01-15T12:00:00.000Z"
  },
  {
    "id": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a02",
    "parentId": "9e0f1a2b-3c4d-5e5f-8a7b-8c9d0e1f2a01",
    "order": 0,
    "title": "Mira takes Tobin as her apprentice",
    "description": "On the Lantern Road, Mira teaches Tobin to hold the lamp high.",
    "links": [
      {
        "kind": "chapter",
        "id": "8d9e0f1a-2b3c-5d4e-9f6a-7b8c9d0e1f02"
      },
      {
        "kind": "entity",
        "id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b01"
      },
      {
        "kind": "entity",
        "id": "4f5a6b7c-8d9e-5f0a-9b2c-3d4e5f6a7b02"
      }
    ],
    "causalLinks": [],
    "aiExtracted": true,
    "aiVerified": false,
    "deletedAt": null,
    "createdAt": "2026-01-15T12:00:00.000Z",
    "updatedAt": "2026-01-15T12:00:00.000Z"
  }
]

Notatki: notes/<id>/<id>.json to {id, title, body (Markdown), tags, links, deletedAt null, createdAt, updatedAt}. Napisz jedną notatkę o tym, że skarbiec wygenerował agent AI z tekstu książki i nie jest zweryfikowany, i wypisz zauważone w książce problemy z ciągłością (sprzeczności w imionach, wieku, datach, opisach).
{
  "id": "a0f1a2b3-4c5d-5e6f-9a8b-9c0d1e2f3a01",
  "title": "About this vault",
  "body": "Generated by an AI agent from the text of *The Lantern Road*. Everything extracted is unverified until reviewed.\n\n## Continuity notes\n- None found yet.",
  "tags": [
    "meta"
  ],
  "links": [],
  "deletedAt": null,
  "createdAt": "2026-01-15T12:00:00.000Z",
  "updatedAt": "2026-01-15T12:00:00.000Z"
}

Na koniec utwórz pusty folder {VAULT_FOLDER}/.cache, a obok folderu skarbca zapisz zip do importu: pliki z {VAULT_FOLDER} z project.json w katalogu głównym archiwum (nie w podfolderze), pliki wydarzeń z parentId null przed pozostałymi i bez folderu .cache.

Wypisz: encje w każdym typie, relacje, cytowania, nieodnalezione cytaty, wydarzenia, rozdziały rękopisu oraz ścieżki folderu i zipa.

Prompt 6

Sprawdź skarbiec

Raz, zanim otworzysz skarbiec w Lokee.

Sprawdź skarbiec Lokee w {VAULT_FOLDER}, zanim go otworzę. Napisz i uruchom skrypt; niczego nie zmieniaj bez mojej zgody.

- Każdy plik JSON się parsuje. project.json ma id, version, name, createdAt, updatedAt, entityTypes i relationshipTypes i nie ma innych pól niż te wymienione w prompcie budowania.
- entityTypeId każdej encji, fieldId każdego atrybutu i relationshipTypeId każdej relacji istnieją w project.json, a każdy reciprocalTypeId wskazuje istniejący typ.
- Każde id relacji występuje dokładnie dwa razy: raz jako "outgoing" na źródle i raz jako "incoming" na celu, a każda strona wskazuje drugą encję.
- sourceDocumentId każdego cytowania ma folder w source-documents/, a jego passage jest równy tekstowi źródła między startOffset a endOffset.
- Każdy liść z manuscript/manifest.json ma swój plik .md i każdy plik .md jest w manifeście. Wartości front matter są w cudzysłowach.
- parentId każdego wydarzenia to null albo id istniejącego wydarzenia; każdy link do encji lub rozdziału wskazuje coś, co istnieje.
- Folder {VAULT_FOLDER}/.cache istnieje; zip ma project.json w katalogu głównym i nie zawiera folderu .cache.
- Sprawdź wyrywkowo pięć encji z książką: nazwę, jeden cytat i jedną relację.

Wypisz każdy problem razem z plikiem, w którym występuje, a potem zaproponuj poprawki — w skrypcie budującym, nie w wygenerowanych plikach.

Skarbiec gotowy?

Otwórz folder w aplikacji desktopowej przyciskiem Otwórz skarbiec, a potem przejrzyj to, co wyekstrahował agent — wszystko zaczyna jako niezweryfikowane.