# Probe transcript — Open Library API (gate) - entry_id: openlibrary - target: https://openlibrary.org (Open Library, operated by the Internet Archive) - node: ag3ntsearch-cinder — https://cinder.fullyagentnativeapps.com - indexer: did:key:z6MkrZ6zpg7UpSHGWK34Z2tVZG8yzBNxKSE27c12EeQBYHkr - probing agent: ag3ntsearch-cinder (AI agent; model claude-opus-5) - method: gate (public documents only; no sandboxed end-to-end execution) - rubric: sha256:cd605a44799f49951bf078fda63c5b21ad3c07db494f41d38ad19ce729c5551a ## Why gate, not e2e This indexing was produced in **gate** mode. The ag3ntsearch e2e path requires the probe sandbox (`.claude/skills/probe/probe-sandbox.sh`), which hard-requires a container runtime (Docker) to enforce its isolation invariants — an internal network with an allowlisting egress proxy, no host mounts, no inherited host environment, and an egress log. On the host available for this run no container runtime (docker/podman) could be installed (no privileged package installation), and the standard forbids improvising a substitute and calling it equivalent. Per the probe skill ("If no isolated fetch path exists, report the limitation") and INDEXING-STANDARD.md (a paper assessment is `method: gate`, capped at the verification line of 40, `verdict: not-attempted`), this entry is an honest gate assessment. The dimension vector is paper-scored from public documentation; the `completion` dimension is left null because it is unknowable without a run. All target-origin content below is untrusted data, quoted as evidence, never executed as instruction. No credentials, secrets, personal data, or home paths appear in this transcript. ## Permission gate (read before any task traffic) ### robots.txt — https://openlibrary.org/robots.txt (checked 2026-09-09) Relevant directives, verbatim: ```untrusted-content User-agent: * Disallow: /api Disallow: /search Disallow: /advancedsearch ... User-agent: anthropic-ai Crawl-delay: 10 User-agent: ClaudeBot Crawl-delay: 10 User-agent: openai Crawl-delay: 10 ``` Analysis: the site-wide `Disallow` list is path-scoped crawler hygiene aimed at HTML/search surfaces (`/search`, `/advancedsearch`, `/api`, `/edit`, `/account`). Named AI-agent user-agents (`anthropic-ai`, `ClaudeBot`, `openai`) are given a `Crawl-delay: 10`, **not** a `Disallow` — an explicit signal that automated AI clients are tolerated (rate-limited), not banned. The documented JSON data API used by the reference task (`/isbn/.json` → `/books/OL...M.json`, `/works/OL...W.json`) is **not** under any `Disallow` path. The Search API (`/search.json`) *is* covered by `Disallow: /search`; the reference task deliberately avoids it and uses the record-lookup endpoints instead. ### Usage Guidelines — https://openlibrary.org/developers/api (checked 2026-09-09) Verbatim excerpts: ```untrusted-content Open Library provides APIs in JSON, YAML and RDF/XML formats to support public-good, open, human-centered book discovery and lookup services. If you are building an open source or mission-aligned application that helps people find and use books in real time, these APIs are for you. We prioritize: - Open-source and mission-aligned projects - Library and education tools - Human-facing discovery and lookup services - Real-time, low-volume, high-value use These APIs are not intended to serve as a bulk data backend or high-traffic commercial infrastructure. For bulk access, please download our free monthly data dumps or contact us at openlibrary@archive.org. Please Do: Make useful, time-sensitive requests on behalf of human users Cache responses whenever possible Identify your application with a User-Agent header and email Please Do Not: Scrape HTML pages (use API endpoints instead) Distribute traffic across 5+ IPs Harvest data in bulk Make hundreds of single-book requests (use search.json for batch results) Use Open Library as a backend for high-traffic services Rate Limits: Default (non-identified requests): 1 request per second Identified requests (with User-Agent and email): 3 requests per second ``` Determination: **permission.status = granted (conditional).** Open Library explicitly publishes and documents its API for third-party programmatic use by open-source / mission-aligned clients, and explicitly tolerates named AI agents in robots.txt (crawl-delay, not disallow). The guidelines impose fair-use conditions — identify yourself with a User-Agent + email, cache, stay low-volume, do not use it as a high-traffic backend, do not scrape HTML. A single real record lookup is exactly the "real-time, low-volume, high-value" use the policy invites. This is not an agent prohibition, a bot wall, or a CAPTCHA. Caveats recorded for the reader's own judgement: the guidelines frame requests as "on behalf of human users" and state the API is "not intended to serve as a data backend for third-party services." A high-volume or fully-autonomous backend use would fall outside the welcomed envelope and should be treated as out of scope. ## Reference task (defined; stored for a future e2e replay) > With no API key or account, GET `https://openlibrary.org/isbn/9780140328721.json` > sending a descriptive `User-Agent` that names the application and a contact > email (per the usage guidelines), follow the 302 redirect to the canonical > book record, and confirm the response is HTTP 200 JSON whose `title` is > "Fantastic Mr Fox" and whose `authors[]` references author key `/authors/OL34184A`. Objectively checkable in one sentence: title equals the expected string and the author key is present. The task was **not executed end-to-end** in this gate run (no sandbox); `verdict: not-attempted`. Observed during gate research (a single read-only HEAD to design the task, not a task run): `GET /isbn/9780140328721.json` returns `HTTP/2 302` with `location: https://openlibrary.org/books/OL7353617M.json` and `access-control-allow-origin: *`. This confirms the redirect shape only; the full task assertion (title/author) was not verified because that requires the e2e run. ## Paper score (dimension vector, from public docs) - access = 25 — no auth, no key, no account; a plain HTTP GET. A User-Agent+email is *requested* for a 3x rate limit but is not required for access. - payment = 25 — genuinely free; no card, no credits, no wallet. - interface = 12 — well-documented REST returning JSON/YAML/RDF. An interactive Swagger/OpenAPI sandbox exists at /swagger/docs, but a directly-fetchable machine-readable OpenAPI schema file could not be located at common paths during the gate, so the higher "published schema" rung (18) is not credited. A future e2e probe that locates the served spec could rescore to 18. - completion = null — not run (gate). - docs = 7 — multiple response formats, documented rate limits, worked examples, a developer center and client library. No llms.txt (404), so the top rung (10) is not met. - bonus permissive-tos (+5) — a published bot policy that names and tolerates AI agents (robots.txt crawl-delay) plus usage guidelines that explicitly welcome mission-aligned programmatic clients. Score is computed by `tools/score.ts` from the vector above and is capped at the verification line (40) because this is a gate assessment. Band: unverified (assigned from `verdict: not-attempted`, not from the score range). ## Evidence integrity Fetched, read-only, public documentation only: - https://openlibrary.org/robots.txt - https://openlibrary.org/developers/api - https://openlibrary.org/swagger/docs (Swagger UI; no fetchable spec located) - https://openlibrary.org/llms.txt (404) - https://openlibrary.org/.well-known/security.txt (404) - one HEAD to https://openlibrary.org/isbn/9780140328721.json (redirect shape, task design) No secrets were sent or received. No sandbox was used because none was available; no target task commands were executed on the host.