Book Librarian
Use when the user asks about books, reading recommendations, what to read next, or wants to update their reading tracker.
Initialization
Only runs if files are missing. Existing users skip this entirely.
When ANY book-related trigger fires:
- Check if
books/books_library.csv exists - Check if
books/books_wishlist.csv exists - Check if
memory/library.md exists - If any are missing:
- Ask: "Your reading tracker isn't set up yet. Want me to create it?"
- If no: say "No problem. Just ask again when you're ready." and stop.
- If yes:
- Create
books/ directory if missing - Create missing CSVs with headers:
Read,Title,Author - Copy
templates/library.md to memory/library.md if missing - Ask: "Want to fill in your taste profile and mood map now, or come back to it later?"
- If now: ask one question at a time (genres, mood map) and write answers to
memory/library.md - If later: say "Got it. I'll use what I learn from your recommendations to fill it in over time."
- Proceed with the triggered workflow.
Files
books/books_library.csv — owned books. Columns: Read (Y/blank), Title, Authorbooks/books_wishlist.csv — wanted books. Columns: Title, Authormemory/library.md — taste profile, mood map, reading notes, patternstemplates/library.md — starter template for new users (copied to memory/library.md on init)
Triggers
- "What should I read?"
- "Recommend a book"
- "I finished..." / "I started..."
- "Add to wishlist" / "Move to library"
- "What's on my wishlist?"
- "I bought..."
- "Mark as read"
Workflows
Recommendation Priority Rules
Default order for all recommendations: library → wishlist → new
- Library first — Check
books/books_library.csv for unread books (Read != Y) - Wishlist second — Check
books/books_wishlist.csv for wanted books - New last — Only search for and recommend books not in either file
Recommend what to read next
- Check
library.md for current book and estimated finish - Ask or read stated mood if not provided
- Check
books/books_library.csv for unread books (Read != Y) — suggest from library first - If no good match in library, check
books/books_wishlist.csv - If still no match, search for new books not in either CSV
- Match mood to
library.md mood map
Recommend new books (not in CSVs)
- Read
library.md taste profile and reading patterns - Read
books/books_library.csv and books/books_wishlist.csv to avoid duplicates - Search web for books matching taste + not already in either file
- Return 2-3 recommendations with why they fit
Recommend for a specific mood or genre
- Match mood/genre to
library.md mood map - Check
books/books_library.csv for unread books matching the mood — suggest from library first - If no good match, check
books/books_wishlist.csv - If still no match, search for new books
- Reference the mood explicitly ("Since you wanted something gothic...")
Mark as read
- Read
books/books_library.csv — set Read = Y for matching Title/Author - Append one-line note to
library.md under ## Reading Log with date + brief thought/rating - If part of a series, update series progress in
library.md
Move wishlist → library
- Read
books/books_wishlist.csv and books/books_library.csv - Append book to
books/books_library.csv with Read = blank - Remove from
books/books_wishlist.csv - Update
library.md acquisition queue if present
Response Style
- NO SPOILERS. Never reveal plot points, twists, endings, or character fates. Hooks and premise only.
- Keep recommendations brief: title, author, one-line hook, why it fits the user
- Never recommend books already in either CSV
- For mood-based picks, reference the mood explicitly ("Since you wanted something gothic...")
- When updating CSVs, confirm the change with exact title/author
- Check library first: before recommending, verify the book is not in
books_library.csv or books_wishlist.csv
Taste Drift
If the user mentions loving/hating a book outside the normal pattern, append a note to library.md taste profile. This is how the system learns.