--- name: book-list description: Manage a personal reading list stored in MongoDB. Use this skill whenever the user wants to add a book, query their reading list, update book status, or manage tags. version: 1.0.0 --- # Book List Manage a personal reading list stored in MongoDB. Books are stored in the `lists.books` collection with standardized fields. ## Database - **Database:** `lists` - **Collection:** `books` ## Book Schema Each book document should have these fields: ```json { "title": "Book Title", "author": "Author Name", "genre": "fiction|nonfiction", "status": "to_read|reading|completed|dropped", "summary": "Concise description of the book (from jacket/blurb/Goodreads)", "tags": ["tag1", "tag2", "tag3"] } ``` ### Field Details - **title** (required): Full book title - **author** (required): Author name - **genre** (required): Either `fiction` or `nonfiction` - **status** (required): One of `to_read`, `reading`, `completed`, `dropped` - **summary** (required): Concise description, typically from the book jacket, blurb, or Goodreads description. 1-3 sentences. - **tags** (recommended): Array of relevant tags. See Tag Suggestions below. ## Tag Suggestions When adding a book, suggest 5-10 relevant tags based on the book's content. Categories to consider: - **Genre-specific:** e.g., `science-fiction`, `mystery`, `memoir`, `philosophy` - **Themes:** e.g., `suffering`, `transformation`, `mindfulness`, `redemption` - **Religious/Spiritual tradition:** e.g., `buddhism`, `christianity`, `vietnamese-zen`, `mysticism` - **Author** (for frequently-read authors): e.g., `thich-nhat-hanh`, `dostoevsky`, `tolkien` - **Movement/Period:** e.g., `existentialism`, `stoicism`, `modern-classic` - **Topics:** e.g., `meditation`, `ethics`, `psychology`, `history` **Tag formatting:** lowercase, hyphen-separated, no special characters. Examples: `vietnamese-zen` (not `Vietnamese Zen`), `science-fiction` (not `sci-fi`). ## Dependencies This skill depends on the **mongodb** skill for all database operations. Reference that skill for: - Connection details and credentials - How to run Python scripts with `uv run --with pymongo` - Code patterns for inserting, updating, querying, and deleting documents Always use the mongodb skill's patterns when interacting with the database. ## Operations ### Add a Book When the user wants to add a book: 1. If the user provides only the title, search for the book online to get: author, genre, and a summary 2. Ask the user for status (default: `to_read`) if not specified 3. Generate 5-10 relevant tags based on the book's content and author 4. Show the user the tags you've suggested and ask if they want to add, remove, or modify any 5. Insert the document into `lists.books` collection 6. Confirm insertion and show the book's MongoDB document ID Example insertion: ```python from pymongo import MongoClient client = MongoClient("mongodb://root:3wwfoUjyk2E2zWELXFlLuHqfw1ALlOp4pb2H5Vq3TImbMIHL2h1u8Jej2mjzCPl@docdb.connorrhodes.com:35563") db = client["lists"] books = db["books"] book = { "title": "No Mud, No Lotus: The Art of Transforming Suffering", "author": "Thich Nhat Hanh", "genre": "nonfiction", "status": "to_read", "summary": "The secret to happiness is to acknowledge and transform suffering, not to run away from it.", "tags": ["buddhism", "mindfulness", "suffering", "transformation", "spirituality", "meditation", "vietnamese-zen", "thich-nhat-hanh"] } result = books.insert_one(book) print(f"Inserted: {result.inserted_id}") client.close() ``` ### Query Books Common queries: ```python # Get all books for book in books.find(): print(f"{book['title']} - {book['status']}") # Get books by status for book in books.find({"status": "to_read"}): print(book['title']) # Search by tag for book in books.find({"tags": "buddhism"}): print(book['title']) # Get books by author for book in books.find({"author": "Thich Nhat Hanh"}): print(book['title']) ``` ### Update Book Status ```python books.update_one( {"title": "Book Title"}, {"$set": {"status": "reading"}} ) ``` ### Update Tags ```python books.update_one( {"title": "Book Title"}, {"$set": {"tags": ["new", "tag", "list"]}} ) ``` ### Delete a Book ```python books.delete_one({"title": "Book Title"}) ``` ## Guidelines - Always show suggested tags before inserting — let the user confirm or modify - Keep summaries concise (1-3 sentences) — copy from jacket/Goodreads rather than writing your own - Use lowercase, hyphen-separated tags - When querying, use `.limit()` if results might be large - Always close the MongoDB client after operations - Clean up temporary Python scripts after running ## Triggers - "add this to my book list" - "add [book title] to my books" - "what's on my reading list" - "show me my to-read books" - "mark [book] as reading/completed" - "update my book list" - "add tags to [book]"