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.