Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Search and access book metadata via the Open Library API
.claude/skills/brycewang-stanford-open-library-api/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 112% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 61% | 0% |
| case-22 | ✓→✓ | = Same ✓ | 80% | 0% |
| case-23 | ✓→✓ | = Same ✓ | 230% | 0% |
Open Library (by the Internet Archive) catalogs every book ever published — 40M+ editions, 20M+ unique works. The API provides book search, ISBN/OCLC lookup, cover images, and reading access for 2M+ borrowable ebooks. Particularly useful for monograph discovery, edition tracking, and bibliographic verification. Free, no authentication required.
bash# Full-text search curl "https://openlibrary.org/search.json?q=machine+learning&limit=20" # Search by title curl "https://openlibrary.org/search.json?title=deep+learning&limit=10" # Search by author curl "https://openlibrary.org/search.json?author=goodfellow&title=deep+learning" # Filter by subject curl "https://openlibrary.org/search.json?q=statistics&subject=data+analysis" # Filter by publication year curl "https://openlibrary.org/search.json?q=artificial+intelligence&first_publish_year=2020" # Sort by edition count curl "https://openlibrary.org/search.json?q=calculus&sort=editions"
bash# Get work (canonical book entity) curl "https://openlibrary.org/works/OL45804W.json" # Get edition curl "https://openlibrary.org/books/OL7353617M.json" # Get by ISBN curl "https://openlibrary.org/isbn/9780262035613.json" # Bibliographic data via Books API curl "https://openlibrary.org/api/books?bibkeys=ISBN:9780262035613&format=json&jscmd=data"
bash# By ISBN (S/M/L sizes) https://covers.openlibrary.org/b/isbn/9780262035613-M.jpg # By OLID https://covers.openlibrary.org/b/olid/OL7353617M-L.jpg
bash# Get author curl "https://openlibrary.org/authors/OL34184A.json" # Search authors curl "https://openlibrary.org/search/authors.json?q=hinton" # Author's works curl "https://openlibrary.org/authors/OL34184A/works.json?limit=20"
| Parameter | Description | Example | |-----------|-------------|---------| | q | General search | q=neural+networks | | title | Title search | title=deep+learning | | author | Author search | author=bengio | | subject | Subject filter | subject=computer+science | | isbn | ISBN lookup | isbn=9780262035613 | | first_publish_year | Publication year | first_publish_year=2020 | | limit | Results (max 100) | limit=50 | | offset | Pagination | offset=50 | | sort | Sort order | new, editions, old | | fields | Return fields | key,title,author_name |
json{ "numFound": 1250, "docs": [ { "key": "/works/OL45804W", "title": "Deep Learning", "author_name": ["Ian Goodfellow", "Yoshua Bengio", "Aaron Courville"], "first_publish_year": 2016, "isbn": ["9780262035613"], "publisher": ["MIT Press"], "subject": ["Machine learning", "Neural networks"], "edition_count": 8, "cover_i": 8739161, "ebook_access": "borrowable" } ] }
pythonimport requests BASE_URL = "https://openlibrary.org" def search_books(query: str, limit: int = 20, subject: str = None) -> list: """Search Open Library for books.""" params = {"q": query, "limit": limit} if subject: params["subject"] = subject resp = requests.get(f"{BASE_URL}/search.json", params=params) resp.raise_for_status() data = resp.json() results = [] for doc in data.get("docs", []): results.append({ "key": doc.get("key"), "title": doc.get("title"), "authors": doc.get("author_name", []), "year": doc.get("first_publish_year"), "publisher": doc.get("publisher", [None])[0], "isbn": doc.get("isbn", [None])[0], "editions": doc.get("edition_count", 0), "subjects": doc.get("subject", [])[:5], "ebook": doc.get("ebook_access"), }) return results def get_by_isbn(isbn: str) -> dict: """Look up a book by ISBN.""" resp = requests.get( f"{BASE_URL}/api/books", params={ "bibkeys": f"ISBN:{isbn}", "format": "json", "jscmd": "data", }, ) resp.raise_for_status() data = resp.json() return data.get(f"ISBN:{isbn}", {}) def get_author_works(author_key: str, limit: int = 20) -> list: """Get works by an author.""" resp = requests.get( f"{BASE_URL}/authors/{author_key}/works.json", params={"limit": limit}, ) resp.raise_for_status() return resp.json().get("entries", []) # Example: search CS textbooks books = search_books("algorithms data structures", subject="computer science") for b in books[:5]: print(f"[{b['year']}] {b['title']} — {', '.join(b['authors'][:2])}") print(f" Publisher: {b['publisher']} | Editions: {b['editions']}") # Example: ISBN lookup info = get_by_isbn("9780262035613") print(f"Title: {info.get('title')}") print(f"URL: {info.get('url')}")
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | pass→pass | 10,161 | 8,837 | -13% | 1 | 1 | 0% | 1,913 | 3,444 | +80% | 0 | 0 | — |
case-23 | pass→pass | 5,216 | 5,889 | +13% | 1 | 1 | 0% | 795 | 2,620 | +230% | 0 | 0 | — |
case-01 | fail→pass | 7,266 | 12,481 | +72% | 1 | 1 | 0% | 1,594 | 3,384 | +112% | 0 | 0 | — |
case-02 | fail→pass | 10,760 | 9,035 | -16% | 1 | 1 | 0% | 1,866 | 3,419 | +83% | 0 | 0 | — |
case-03 | fail→pass | 8,327 | 6,882 | -17% | 1 | 1 | 0% | 1,711 | 2,750 | +61% | 0 | 0 | — |
case-04 | pass→pass | 3,131 | 4,263 | +36% | 1 | 1 | 0% | 455 | 2,365 | +420% | 0 | 0 | — |
case-05 | pass→pass | 3,447 | 3,058 | -11% | 1 | 1 | 0% | 713 | 2,172 | +205% | 0 | 0 | — |
case-06 | pass→pass | 5,486 | 2,941 | -46% | 1 | 1 | 0% | 821 | 2,237 | +172% | 0 | 0 | — |
case-07 | pass→pass | 3,111 | 2,024 | -35% | 1 | 1 | 0% | 547 | 2,077 | +280% | 0 | 0 | — |
case-08 | pass→pass | 7,588 | 4,622 | -39% | 1 | 1 | 0% | 1,406 | 2,423 | +72% | 0 | 0 | — |
case-09 | pass→pass | 4,755 | 2,325 | -51% | 1 | 1 | 0% | 861 | 2,093 | +143% | 0 | 0 | — |
case-10 | pass→pass | 4,397 | 2,579 | -41% | 1 | 1 | 0% | 745 | 2,033 | +173% | 0 | 0 | — |
case-11 | pass→pass | 5,894 | 4,209 | -29% | 1 | 1 | 0% | 878 | 2,340 | +167% | 0 | 0 | — |
case-12 | pass→pass | 5,639 | 3,914 | -31% | 1 | 1 | 0% | 1,102 | 2,215 | +101% | 0 | 0 | — |
case-13 | pass→pass | 16,479 | 7,894 | -52% | 1 | 1 | 0% | 2,087 | 3,383 | +62% | 0 | 0 | — |
case-14 | pass→pass | 8,896 | 6,264 | -30% | 1 | 1 | 0% | 1,425 | 2,804 | +97% | 0 | 0 | — |
case-15 | pass→pass | 3,766 | 3,160 | -16% | 1 | 1 | 0% | 800 | 2,136 | +167% | 0 | 0 | — |
case-16 | pass→pass | 8,348 | 3,942 | -53% | 1 | 1 | 0% | 1,181 | 2,269 | +92% | 0 | 0 | — |
case-17 | pass→pass | 3,557 | 2,402 | -32% | 1 | 1 | 0% | 593 | 2,144 | +262% | 0 | 0 | — |
case-18 | pass→pass | 3,290 | 2,497 | -24% | 1 | 1 | 0% | 622 | 2,174 | +250% | 0 | 0 | — |
case-19 | pass→pass | 3,223 | 2,638 | -18% | 1 | 1 | 0% | 373 | 2,161 | +479% | 0 | 0 | — |
case-20 | pass→pass | 8,336 | 3,377 | -59% | 1 | 1 | 0% | 1,139 | 2,151 | +89% | 0 | 0 | — |
case-21 | pass→pass | 8,264 | 4,804 | -42% | 1 | 1 | 0% | 1,310 | 2,682 | +105% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +13 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.