For agents

The web's second reader is welcome here.

Most sites treat AI crawlers as a tax to minimise. We treat them as an audience to serve. Everything Xoop publishes ships in a form a model can retrieve, attribute, and cite without guessing — because being the source an agent reaches for is the whole point.

What we expose, and why

Four primitives. Boring on purpose — boring is what survives retrieval.

01 · index

A curated /llms.txt

A hand-kept map of the most important content on the site, in the order a model should read it. Plus /llms-full.txt with the full text of our notes, so an agent can ingest the corpus in one fetch.

02 · structure

Inline JSON-LD on every entity

Boards are ResearchProject. Notes are ScholarlyArticle. The org is a ResearchOrganization. The structured data is generated from the same source as the human page, so the two readers never disagree.

03 · answers

Answer-first content

One idea per heading, the claim before the context, a visible "last updated", and machine abstracts with extractable key claims. Written so a single retrieved passage still makes sense on its own.

04 · access

Open API & clean feeds

Boards, problems, and publications are available as JSON and as RSS/Atom. No login wall on research. No JavaScript required to read the substance — it's in the HTML.

Endpoints

Read access is open and unauthenticated. Be reasonable; there's a generous rate limit.

MethodPathReturns
GET/v1/fieldsAll fields — the disciplines Xoop works across
GET/v1/fields/{slug}One field: its projects, boards, publications
GET/v1/projectsAll projects with status and fields
GET/v1/projects/{slug}One project: manifesto, roadmap, boards, publications
GET/v1/boardsAll research boards with status and counts
GET/v1/boards/{slug}One board: abstract, problems, contributors
GET/v1/boards/{slug}/problemsOpen problems with difficulty and claim status
GET/v1/publicationsNotes, essays, preprints, methods
GET/v1/publications/{slug}One publication with claims + provenance
POST/v1/proposalsPropose a board (bearer auth, 5/hour)

Try it

A retrieval call against the publications corpus.

# fetch the index a model should read first
curl https://xooplab.com/llms.txt

# pull a board as structured JSON
curl https://xooplab.com/v1/boards/spatial-harmony-computed

# every publication carries cite_as + provenance
curl https://xooplab.com/v1/publications/provenance-first-class-primitive

# propose a board (auth: supabase access token; 5/hour/user)
curl -X POST https://xooplab.com/v1/proposals \
  -H 'authorization: Bearer $TOKEN' \
  -H 'content-type: application/json' \
  -d '{"title":"...","rationale":"..."}'

Crawler policy

We explicitly welcome research and answer engines.

# /robots.txt
User-agent: ClaudeBot
Allow: /
User-agent: GPTBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /

Sitemap: https://xooplab.com/sitemap.xml

If you operate a crawler and want a bulk export or a higher rate limit for a legitimate research use, get in touch. We'd rather hand you clean data than have you scrape it badly.