---
title: llms.txt
description: A single file containing all your documentation in plain text for AI consumption
type: conceptual
summary: A single endpoint that returns all documentation as plain Markdown text following the llms.txt standard.
url: /docs/llms-txt
source: apps/template/content/docs/llms-txt.mdx
related:
  - /docs/agent-readiness
  - /docs/md
  - /docs/ask-ai
  - /docs/proxy
---

# llms.txt

Geistdocs implements the [llms.txt standard](https://llmstxt.org/), a convention for exposing documentation as one AI-readable text file. Language models and coding agents can use `/llms.txt` to retrieve broad documentation context.

  Help me verify this Geistdocs site's AI-readable docs. Check `/llms.txt` and a few `.mdx` page URLs, then explain whether an AI assistant can retrieve the full documentation context.

## What it is

The `/llms.txt` endpoint returns all configured documentation pages as Markdown in a single response. Each page is separated by blank lines so AI tools can parse the complete documentation set. When agent product metadata includes a category, audience, or use case, Geistdocs prepends a `When to use` section. It uses `agent.product.name` when set and otherwise uses the site title. Page-level Markdown also links agents to `/agents.md` for declared integration discovery.

### Access

```
https://yourdomain.com/llms.txt
```

Returns all documentation pages concatenated together as Markdown.

## How it works

The package route helper:

1. Reads product guidance from the source bundle's Geistdocs config.
2. Fetches pages from one or more source bundles.
3. Processes each page to extract clean Markdown.
4. Combines the guidance and pages into a single response.
5. Returns the response as `text/markdown`.

Pages are joined with double newlines (`\n\n`) for clear separation.

## Use cases

This feature enables:

- **AI Training** - Provide your docs as context for AI assistants
- **Search Indexing** - Feed your entire documentation to search systems
- **Content Analysis** - Analyze patterns and content across all docs
- **Bulk Processing** - Process all documentation at once
- **LLM Context** - Give language models complete documentation context

## Configure sources

Generated projects use one documentation source:

```ts title="app/[lang]/llms.txt/route.ts"
import { createLlmsRoute } from "@vercel/geistdocs/routes/llms";
import { geistdocsSource } from "@/lib/geistdocs/source";

export const { GET } = createLlmsRoute({
  source: geistdocsSource,
});
```

Sites with multiple content sections or versions can pass `sources`:

```ts title="app/[lang]/llms.txt/route.ts"
export const { GET } = createLlmsRoute({
  sources: [docsSource, cookbookSource],
});
```

Use `filterPage` to exclude pages from `/llms.txt`, such as internal or preview-only docs:

```ts title="app/[lang]/llms.txt/route.ts"
export const { GET } = createLlmsRoute({
  source: geistdocsSource,
  filterPage: (page) => !page.url.includes("/internal"),
});
```

`filterPage` receives the page plus its language and source. Use the same synchronous filter function for every public aggregate route so `/llms.txt`, `sitemap.md`, local search, Mixedbread search export, and Ask AI expose the same cacheable page set. Pass that function as `canViewPage` to `createDocsMarkdownRoute`. Request-specific HTML access belongs in `createDocsPage({ canViewPage })`; do not personalize public indexes.

## The llms.txt standard

The llms.txt standard is a simple convention that makes documentation more accessible to AI tools. It's similar in spirit to `robots.txt` but designed for language models instead of search crawlers.

Learn more at [llmstxt.org](https://llmstxt.org/)
