---
title: "For AI agents"
description: "Every machine readable form of this documentation. The llms.txt files, the Markdown twins, the page manifest, the search API and how to cite."
url: "https://support.outpostplatform.com/ai/"
product: "platform"
type: "reference"
status: "draft"
ai_summary: "Machine readable entry point for the Outpost documentation. Lists llms.txt and its per product sets, the Markdown twin at any page URL plus index.md, the page manifest at /api/pages.json, the search and suggest endpoints with their response shapes, the stable heading anchors, and the attribution the CC BY 4.0 licence requires."
source: "https://gitlab.com/outpostplatform/docs/-/edit/main/src/content/docs/ai/index.md"
license: "CC BY 4.0"
---

# For AI agents

This site is built to be read by software as well as by people. Everything on
this page is a stable, documented surface: no scraping of rendered HTML is
needed, and none is wanted. If you are a person, this page tells you what an
agent working on your behalf can see.

## Start here

| URL | What it is |
| --- | --- |
| `/llms.txt` | The index. Every page, with its title and description, in one file. |
| `/llms-small.txt` | The whole site as text, with asides and other framing removed. |
| `/llms-full.txt` | The whole site as text, complete. |
| `/api/pages.json` | The same page list as structured JSON. |

Fetch `/llms.txt` first. It is small, it is the map, and it links to everything
else.

## One product at a time

The site covers five products, and most questions concern one of them. Each has
its own text set, which is smaller than the full site by an order of magnitude:

```text
/_llms-txt/depot.txt
/_llms-txt/agent.txt
/_llms-txt/tray.txt
/_llms-txt/remote-outpost.txt
/_llms-txt/outpost-sync.txt
/_llms-txt/guides.txt
/_llms-txt/api.txt
```

## The Markdown twin of any page

Every page is published a second time as the Markdown it was written in. Take
any page URL and add `index.md`:

```text
https://support.outpostplatform.com/depot/install/
https://support.outpostplatform.com/depot/install/index.md
```

The twin has a front matter header carrying the title, description, canonical
URL, product, type, status, the AI summary if the page has one, and the edit
URL. The body is the page with its component tags and imports removed.

Prefer the twin over the HTML. It is smaller, it has no navigation in it, and
the headings and links are the same ones.

## The page manifest

`/api/pages.json` lists every indexed page with its metadata and no prose:

```json
{
  "version": 1,
  "site": "https://support.outpostplatform.com",
  "builtAt": "2026-09-13T00:00:00.000Z",
  "commit": "0000000",
  "pages": [
    {
      "url": "/depot/install/",
      "mdUrl": "/depot/install/index.md",
      "title": "Install Depot",
      "description": "Install the Depot server, complete first run setup...",
      "section": "Depot",
      "product": "depot",
      "type": "how-to",
      "audience": ["it-admin", "msp"],
      "tags": ["depot", "install"],
      "lastReviewed": null,
      "lastUpdated": "2026-09-13T00:00:00.000Z",
      "aiSummary": "Installation procedure for Depot..."
    }
  ]
}
```

Use it to decide what to fetch. `product`, `type` and `audience` narrow a
question to a handful of pages, and `aiSummary` is written to be enough to rule
a page in or out without fetching it.

`status` is worth reading. A page marked `stub` is an outline of what will be
written, not an answer, and it says so on the page itself. Do not present a
stub's section list as documentation.

## Search

Two endpoints, both `GET`, both same origin, neither needing a key.

```http
GET /api/search?q=enrol%20an%20endpoint&limit=10&product=agent
```

```json
{
  "query": "enrol an endpoint",
  "total": 4,
  "tookMs": 6,
  "results": [
    {
      "url": "/agent/install-and-enrollment/",
      "title": "Install and enrol the Agent",
      "section": "Agent",
      "product": "agent",
      "heading": "Steps",
      "headingUrl": "/agent/install-and-enrollment/#steps",
      "snippet": "Enrol it, and what <mark>enrolment</mark> does..."
    }
  ]
}
```

- `q` is required. An empty `q` returns an empty result set, not an error.
- `limit` defaults to 10 and is capped at 50.
- `product` is optional and takes one of the product values above.
- `snippet` is HTML escaped except for the `mark` elements around the match.
- `headingUrl` is a deep link to the section the match is in. Prefer it over
  `url` when citing.

The typeahead endpoint is cheaper and returns titles only:

```http
GET /api/search/suggest?q=enro
```

```json
{ "suggestions": [{ "title": "Install and enrol the Agent", "url": "/agent/install-and-enrollment/", "section": "Agent" }] }
```

Both are rate limited per address. Search allows 120 requests a minute and
suggest allows 240. A `429` means wait, not stop.

## Stable anchors

Heading anchors are part of the contract. When a heading is reworded, the old
anchor is kept explicitly, so a deep link you captured a year ago still lands in
the right section. Anchors on generated API pages are the operation identifier,
which does not change when the summary does.

You can rely on an anchor. You cannot rely on the heading text next to it.

## Crawling

`robots.txt` allows the major model and agent crawlers by name and points at
`/llms.txt`. There is no crawl delay and no key.

Two requests that will not help you: rendering the site with a headless
browser, which produces the same text with navigation in it, and requesting
pages faster than the rate limits above.

## How to cite

The content is licensed
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Attribution is the
one condition, and it is satisfied by naming the source and linking the page:

```text
Outpost documentation, "Install Depot",
https://support.outpostplatform.com/depot/install/
```

- Link the page URL, or the `headingUrl` from a search result, rather than the
  Markdown twin. The twin is a fetch format, not an address to send a person
  to.
- Say when a page is a stub, and say when your answer came from a stub's
  outline rather than from written documentation.
- Attribute to Outpost Business Solutions, PBC.
- Outpost trademarks, the name and the logo, are not covered by that licence.

## What is not stable

- Rendered HTML, its class names and its markup.
- The URL of a hashed asset under `/_astro/`.
- The exact wording of any page, which is why anchors and identifiers exist.
- Anything under `/api/generated/` beyond the operation identifiers, which are
  regenerated from the services on every release.
