llms.txt connector¶
Index the llms-full.txt of a list of websites, a single markdown file, or the pages an llms.txt index links to.
In Claude Code, /passageway-add-source from the plugin installs this connector and writes its settings for you.
A passageway connector that indexes the llms-full.txt of a list of websites, a single markdown file such as a SKILL.md, or the pages an llms.txt index links to. Most documentation sites publish one of these for language models, and this connector makes them searchable without crawling.
What it does¶
- Each top-level heading is one item. A
llms-full.txtthat concatenates a whole site becomes one item per page, with the sections below each heading as passages. Its id is the file's address plus the heading (https://docs.example.org/llms-full.txt#install), and its version is a hash of the text, so an edit re-indexes only that page. A#inside a code block is not a heading, and front matter at the top of a file is not indexed. - A front matter block with a
url:key starts a page, wherever it is in the file. Somellms-full.txtfiles (the VitePress llms plugin writes them) open every page with---,url: /howto/install.mdand---. Each such page is one item that runs to the next block, however many headings it has. Its hit links to the page itself (https://docs.example.org/howto/install, the.mddropped), its title is the page's first heading (else the last part of the path), and itspathis the host and the folders of the page, so apath:filter works. Its id is the file's address plus theurl:value. A file without such blocks is split by heading, as above. - A site address reads its
llms-full.txt.https://docs.example.orgis read ashttps://docs.example.org/llms-full.txt. - A file address is read as it is:
https://docs.example.org/llms-full.txt,https://getpassageway.com/SKILL.md, any markdown or text file. - An
llms.txtindex is followed. Every link in it that stays on the same host is fetched and indexed as a file of its own. Links to other hosts are not followed. - Any failure fails the whole listing. A page that returns an error, or a server that is down, stops the sync with a message that names it, so a half-read site never deletes what was indexed before.
Install¶
Add the connector to the environment that runs passageway (see Install):
uv tool install --python 3.14 "passageway[llmstxt]"
An example¶
A file https://docs.example.org/llms-full.txt:
# Install
Run the installer.
## Linux
Use the package manager.
becomes the item:
{
"title": "Install",
"sections": [
{
"heading": null,
"text": "Run the installer."
},
{
"heading": "Linux",
"text": "Use the package manager."
}
]
}
and is configured as:
[[connector]]
name = "docs"
command = ["/path/to/python", "-m", "passageway_connector_llmstxt"]
env = { URLS = "https://docs.example.org|https://getpassageway.com/SKILL.md" }
For a site whose llms-full.txt opens every page with a url: front matter block, and whose release notes should rank below its how-to pages:
[[connector]]
name = "docs"
command = ["/path/to/python", "-m", "passageway_connector_llmstxt"]
env = { URLS = "https://docs.example.org", WEIGHTS = "changelog=0.5" }
Settings¶
All settings are strings in the connector's env.
| Setting | Meaning | Default |
|---|---|---|
URLS |
Required. Site addresses, file addresses and llms.txt addresses, separated by \|. |
|
MAX_BYTES |
The largest file that is read, in bytes. A larger one fails the sync. | 20000000 |
WEIGHTS |
Lowers or raises the weight of the pages whose path starts with a prefix: changelog=0.5,archive/=0.3 (comma-separated prefix=weight, the weight above 0, the first match wins). Release notes repeat the vocabulary of how-to pages and push them down the results; a weight below 1 ranks them lower. The path is the page's address without the host. |
all pages 1.0 |
MAX_PAGES |
The most pages followed from one llms.txt index. The rest are skipped with a warning. |
500 |
Requests carry the user agent passageway-connector-llmstxt, follow redirects and verify HTTPS against the operating system's trust store.