Files
2025-11-30 08:58:28 +08:00

4.1 KiB

description
description
Find similar books in your library based on genre, author, or themes

You are helping the user find books similar to one they specify.

Task

When the user asks to find books with similar "vibes" or similar to a specific book:

  1. Ask them what book they want to find similar books to (if not already specified)
  2. Use the analyze-goodreads-export skill to search for that book in their library
  3. Find similar books based on:
    • Same author
    • Books on the same custom shelves (genre indicators)
    • Similar series (if applicable)
    • Similar page count
    • Similar ratings

Implementation

Write a Python script using goodreads_lib:

#!/usr/bin/env python3
import sys
sys.path.insert(0, '__SKILL_DIR__/scripts')
from goodreads_lib import GoodreadsLibrary

lib = GoodreadsLibrary()

# Get the reference book (user should specify)
search_term = "BOOK_TITLE"  # Replace with user's input

# Find the book
matches = [b for b in lib.books if search_term.lower() in b.title.lower()]

if not matches:
    print(f"Could not find '{search_term}' in your library")
    sys.exit(1)

ref_book = matches[0]

print(f"\n# BOOKS SIMILAR TO: {ref_book.title}\n")

# Find similar books
similar = []

# 1. Same author
if ref_book.author:
    same_author = [b for b in lib.books
                   if b.author == ref_book.author
                   and b.book_id != ref_book.book_id
                   and not b.is_read]
    if same_author:
        print(f"## 📚 More by {ref_book.author}\n")
        for book in same_author[:3]:
            pages = f"{book.num_pages} pages" if book.num_pages else "? pages"
            rating = f"{book.average_rating:.2f}/5" if book.average_rating else "N/A"
            print(f"- **{book.title}** | {pages} | ⭐ {rating}")
        print()

# 2. Same shelves (genre indicators)
if ref_book.bookshelves:
    shelves = ref_book.bookshelves.split(',')
    for shelf in shelves[:2]:  # Check first 2 shelves
        shelf = shelf.strip()
        if shelf:
            same_shelf = [b for b in lib.books
                         if shelf in b.bookshelves
                         and b.book_id != ref_book.book_id
                         and not b.is_read]
            if same_shelf:
                print(f"## 🏷️ Similar (from '{shelf}' shelf)\n")
                for book in same_shelf[:3]:
                    pages = f"{book.num_pages} pages" if book.num_pages else "? pages"
                    rating = f"{book.average_rating:.2f}/5" if book.average_rating else "N/A"
                    print(f"- **{book.title}** by {book.author} | {pages} | ⭐ {rating}")
                print()

# 3. Similar series (if in a series)
if ref_book.series:
    series_books = lib.get_series_books(ref_book.series)
    unread_in_series = [b for b in series_books if not b.is_read]
    if unread_in_series:
        print(f"## 📖 More in {ref_book.series}\n")
        for book in unread_in_series[:3]:
            idx = f"#{book.series_index}" if book.series_index else ""
            pages = f"{book.num_pages} pages" if book.num_pages else "? pages"
            rating = f"{book.average_rating:.2f}/5" if book.average_rating else "N/A"
            print(f"- **{book.title}** {idx} | {pages} | ⭐ {rating}")
        print()

Output Format

# BOOKS SIMILAR TO: Reference Book Title

## 📚 More by Author Name

- **Book Title** | XXX pages | ⭐ X.XX/5
- **Book Title** | XXX pages | ⭐ X.XX/5

## 🏷️ Similar (from 'genre' shelf)

- **Book Title** by Author | XXX pages | ⭐ X.XX/5
- **Book Title** by Author | XXX pages | ⭐ X.XX/5

## 📖 More in Series Name

- **Book Title** #X | XXX pages | ⭐ X.XX/5

Important Notes

  • Ask the user which book they want to find similar books to
  • Search is case-insensitive for the title
  • Prioritize unread books in results
  • Custom shelves can indicate genres (e.g., "mental-health", "favorites")
  • Limit results to 3 per category for readability
  • Handle missing data gracefully
  • Use the Bash tool to run your Python script
  • Replace __SKILL_DIR__ with the actual skill directory path
  • Replace BOOK_TITLE with the user's search term