Openclaw-skills goodreads
git clone https://github.com/phuc-nt/openclaw-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/phuc-nt/openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/goodreads" ~/.claude/skills/phuc-nt-openclaw-skills-goodreads && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/phuc-nt/openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/goodreads" ~/.openclaw/skills/phuc-nt-openclaw-skills-goodreads && rm -rf "$T"
goodreads/SKILL.mdGoodreads Skill
Full read + write access to Goodreads via RSS feeds and Playwright browser automation.
Scripts
# Read-only (RSS + scraping, no login required) R=scripts/goodreads-rss.py # Write (Playwright browser automation, requires one-time login) W=scripts/goodreads-write.sh
Setup
See
references/SETUP.md for installation and first-time login instructions.
Quick start:
# Install dependencies pip install playwright playwright-stealth playwright install chromium # Login to Goodreads (one-time, opens browser) ./scripts/goodreads-write.sh login
User Configuration
Replace
<USER_ID> with your Goodreads user ID in all commands below.
How to find your user ID: Go to your Goodreads profile page. The URL will be like:
— the number is your user ID.goodreads.com/user/show/12345678-yourname
For write commands with RSS verification, set:
export GOODREADS_USER_ID="<YOUR_USER_ID>"
Read Commands
1. View shelf
python3 $R shelf <USER_ID> --shelf <shelf> [--limit N] [--sort <sort>]
| Meaning |
|---|---|
| Currently reading |
| Already read |
| Want to read |
| Custom shelf |
| Meaning |
|---|---|
| Date finished (default for ) |
| Date added to shelf |
| Personal rating |
| Book title |
| Author name |
| Average Goodreads rating |
Examples:
python3 $R shelf <USER_ID> --shelf currently-reading python3 $R shelf <USER_ID> --shelf read --limit 20 --sort date_read python3 $R shelf <USER_ID> --shelf to-read --limit 50 python3 $R shelf <USER_ID> --shelf read --limit 200 --sort rating
Fields returned: title, author, book_id, isbn, user_rating (0–5), average_rating, date_read, date_added, review, shelves, description (300 chars), published, book_url
2. Recent activity
python3 $R activity <USER_ID> [--limit N]
Returns: books added, marked read, reviews written...
3. Search books
python3 $R search "<query>" [--limit N]
python3 $R search "Jared Diamond" --limit 10 python3 $R search "atomic habits" --limit 5
Returns: book_id, title, author, book_url
4. Book details
python3 $R book <book_id>
Returns: title, author, average_rating, rating_count, review_count, description, isbn, published, genres, image_url
5. Book reviews
python3 $R reviews <book_id> [--limit N]
⚠️ Reviews are rendered via React — available count may be limited.
Write Commands
Requires one-time login. Run
first. Session persists for weeks/months.$W login
1. Check login status
$W status
2. Rate a book
$W rate <book_id> <stars>
Stars: 1–5 (integer)
$W rate 40121378 5 # Rate Atomic Habits 5 stars
3. Change shelf
$W shelf <book_id> <shelf_name>
| Display | Notes |
|---|---|---|
| Want to Read | |
| Currently Reading | |
| Read |
Output includes
"verified": true/false — RSS auto-confirms after action.
$W shelf 186190 read # Move to "Read" $W shelf 186190 currently-reading # Move to "Currently Reading"
4. Start reading
$W start <book_id>
Shortcut for
shelf <book_id> currently-reading. RSS verified.
5. Finish reading
$W finish <book_id>
Shortcut for
shelf <book_id> read. RSS verified.
6. Edit (dates, review, rating)
$W edit <book_id> [--start-date YYYY-MM-DD] [--end-date YYYY-MM-DD] [--stars N] [--review "text"]
Uses the
/review/edit/ page — can edit everything in one command.
⚠️ Book must be shelved first (use
or$W shelf).$W start
Examples:
$W edit 186190 --start-date 2025-01-15 --end-date 2025-02-20 $W edit 186190 --stars 4 $W edit 186190 --review "Great book, highly recommend." $W edit 186190 --start-date 2025-03-01 --end-date 2025-03-08 --stars 4 --review "Updated review"
7. Write/Update review
$W review <book_id> "<text>"
8. Update reading progress
$W progress <book_id> <page_or_percent>
⚠️ Book must be on
shelf.currently-reading
$W progress 13618551 150 # Reading page 150
Sample Workflows
"What am I currently reading?"
python3 $R shelf <USER_ID> --shelf currently-reading
"Find books about Japanese history"
python3 $R search "Japanese history" --limit 10 # → get book_id → python3 $R book <id> for details
"I just finished Forrest Gump, rate 4 stars, read from 3/1 to 3/8"
$W finish 186190 $W edit 186190 --stars 4 --start-date 2025-03-01 --end-date 2025-03-08
"Start reading Atomic Habits"
$W start 40121378
Output Format
All commands return JSON:
{ "success": true, "action": "edit", "book_id": "186190", "changes": ["start_date=2025-03-01", "end_date=2025-03-08", "stars=4"], "message": "Updated: start_date=2025-03-01, end_date=2025-03-08, stars=4" }
Limitations
| Feature | Status |
|---|---|
| Read shelf | ✅ RSS, max 200 books/request |
| Activity feed | ✅ RSS |
| Search books | ✅ Scraping |
| Book details | ✅ Scraping + JSON-LD |
| Reviews | ⚠️ Limited scraping |
| Rate (1-5 stars) | ✅ |
| Change shelf (+ RSS verify) | ✅ |
| Start/Finish reading | ✅ |
| Write/edit review | ✅ |
| Edit reading dates | ✅ |
| Update progress | ✅ (requires currently-reading) |
| Session persistence | ✅ (stealth, weeks/months) |
| Remove from shelf | ❌ Not supported |
| Custom shelves (write) | ❌ Only 3 main shelves |
Note: Goodreads may change its UI → scripts may break. If errors occur, check selectors. Anti-bot: Uses
+playwright-stealth.--disable-blink-features=AutomationControlled