{
  "openapi": "3.1.0",
  "info": {
    "title": "looprig.com content API",
    "version": "1.0.0",
    "summary": "The read-only content surface of looprig.com.",
    "description": "Every page and artifact on looprig.com is a static, read-only GET. There is no\nauthentication, no write operation, and no account: this document exists so an agent\ncan discover the machine-readable representations of the site and call them directly.\n\nContent negotiation: any page path also serves `text/markdown` when the request asks\nfor it (`Accept: text/markdown`), and every response carries `Vary: Accept,\nAccept-Encoding`. Documentation pages additionally publish a permanent `.md` twin.\n\nErrors: 4xx and 5xx responses use one JSON envelope with a stable machine-readable\ncode, a human message, a retryable flag, and a documentation link.\n\nVersioning: this surface is version 1, reported on every response as `API-Version: 1`.\nA breaking change ships as version 2 at the same paths, negotiated with an\n`API-Version` request header; version 1 keeps working. Before anything is withdrawn,\naffected responses carry `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers\nnaming the date, and the change is announced in the journal at /blog at least 90 days\nahead. Paths fixed by their own specifications - /llms.txt, /sitemap.xml, /robots.txt -\nare never versioned in the path, because those specifications define where they live.\n\nlooprig itself is a set of Go modules you run yourself. The HTTP session API that a\nprocess serves when it embeds github.com/looprig/harness/pkg/serve is a different\ncontract, documented under /docs/guides/harness, and is not served from this origin.",
    "x-api-version": "1",
    "license": {
      "name": "Apache License 2.0",
      "identifier": "Apache-2.0"
    },
    "contact": {
      "name": "looprig",
      "email": "crew@looprig.com",
      "url": "https://looprig.com/contact"
    },
    "termsOfService": "https://looprig.com/privacy"
  },
  "servers": [
    {
      "url": "https://looprig.com",
      "description": "Production"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "agent",
      "description": "Artifacts published for machine consumption."
    },
    {
      "name": "content",
      "description": "Human pages, each with a Markdown representation."
    },
    {
      "name": "discovery",
      "description": "Indexes that enumerate what the site publishes."
    }
  ],
  "paths": {
    "/llms.txt": {
      "get": {
        "operationId": "getAgentIndex",
        "summary": "The compact agent index",
        "description": "The llms.txt routing index: what looprig is for, when to reach for it, when not to, the developer resources, and links into the Markdown documentation corpus. Fetch this first; it is small and it tells you which pages are worth loading.",
        "tags": [
          "agent"
        ],
        "responses": {
          "200": {
            "description": "The compact agent index",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/llms.json": {
      "get": {
        "operationId": "getAgentIndexJson",
        "summary": "The agent index, typed",
        "description": "The same routing information as /llms.txt in a typed JSON document: what looprig is for, the jobs it fits, the jobs it does not, the published resources, and the conventions of this origin. Use it when you would rather branch on fields than parse prose.",
        "tags": [
          "agent"
        ],
        "responses": {
          "200": {
            "description": "The typed agent index.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentIndex"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "operationId": "getFullCorpus",
        "summary": "The complete documentation corpus",
        "description": "Every published documentation page concatenated into one Markdown artifact. Prefer /llms.txt and load individual pages progressively; this exists for tools that cannot fetch pages one at a time.",
        "tags": [
          "agent"
        ],
        "responses": {
          "200": {
            "description": "The complete documentation corpus",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApiDocument",
        "summary": "This document",
        "description": "The OpenAPI 3.1 description of the looprig.com content API, served as JSON so a client can generate tool definitions from it without scraping the site.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "This document",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemap",
        "summary": "Every indexable URL",
        "description": "A sitemaps.org 0.9 urlset listing every indexable URL on the site, with a lastmod date for the pages whose modification date is known. Use it to enumerate the site instead of following links.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "Every indexable URL",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/rss.xml": {
      "get": {
        "operationId": "getJournalFeed",
        "summary": "The journal feed",
        "description": "An RSS 2.0 feed of the engineering journal, newest first, with the title, description, publication date, and canonical link of each entry.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "The journal feed",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "application/rss+xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/docs/search.json": {
      "get": {
        "operationId": "getSearchIndex",
        "summary": "The documentation search index",
        "description": "The full search index for the published documentation: one entry per page with its title, description, headings, referenced packages and symbols, human URL, raw Markdown URL, and body text. Filter it locally rather than crawling the corpus.",
        "tags": [
          "discovery"
        ],
        "responses": {
          "200": {
            "description": "The search index.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchIndex"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/docs/{page}": {
      "get": {
        "operationId": "getDocumentationPage",
        "summary": "A documentation page",
        "description": "One published documentation page. Send `Accept: text/markdown` for the prose without the site chrome, which is the same text served at the `.md` twin of this path.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "description": "The documentation path, without an extension, for example `guides/harness`.",
            "schema": {
              "type": "string",
              "examples": [
                "guides/harness"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Send `text/markdown` to receive the Markdown representation of the page, or `text/html` (or nothing) for the rendered page. Quality values are honoured; a request that accepts neither is answered with 406.",
            "schema": {
              "type": "string",
              "examples": [
                "text/markdown",
                "text/markdown, text/html;q=0.8"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, in the representation the client asked for.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "406": {
            "description": "The client accepts neither HTML nor Markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/docs/{page}.md": {
      "get": {
        "operationId": "getDocumentationMarkdown",
        "summary": "The Markdown twin of a documentation page",
        "description": "The raw Markdown representation of a documentation page: a heading, the page description, the human URL, the owning packages, and the body, with links rewritten to keep an agent inside the Markdown corpus.",
        "tags": [
          "agent"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "description": "The documentation path, without an extension, for example `guides/harness`.",
            "schema": {
              "type": "string",
              "examples": [
                "guides/harness"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The Markdown page.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              },
              "Link": {
                "description": "A link to the agent index, with `rel=\"index\"`.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such documentation page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/blog/{entry}": {
      "get": {
        "operationId": "getJournalEntry",
        "summary": "A journal entry",
        "description": "One engineering journal entry. The Markdown representation carries the prose without the surrounding page furniture.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "entry",
            "in": "path",
            "required": true,
            "description": "The journal entry slug, for example `why-a-rig`.",
            "schema": {
              "type": "string",
              "examples": [
                "why-a-rig"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Send `text/markdown` to receive the Markdown representation of the page, or `text/html` (or nothing) for the rendered page. Quality values are honoured; a request that accepts neither is answered with 406.",
            "schema": {
              "type": "string",
              "examples": [
                "text/markdown",
                "text/markdown, text/html;q=0.8"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, in the representation the client asked for.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "406": {
            "description": "The client accepts neither HTML nor Markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/{page}": {
      "get": {
        "operationId": "getSitePage",
        "summary": "A standing site page",
        "description": "One of the standing pages: the home page (`/`), `about`, `contact`, `privacy`, `developers`, `mission`, `roadmap`, `docs`, or `blog`. Each serves Markdown on request.",
        "tags": [
          "content"
        ],
        "parameters": [
          {
            "name": "page",
            "in": "path",
            "required": true,
            "description": "The page path, for example `about`. Use an empty value for the home page.",
            "schema": {
              "type": "string",
              "examples": [
                "about"
              ]
            }
          },
          {
            "name": "Accept",
            "in": "header",
            "required": false,
            "description": "Send `text/markdown` to receive the Markdown representation of the page, or `text/html` (or nothing) for the rendered page. Quality values are honoured; a request that accepts neither is answered with 406.",
            "schema": {
              "type": "string",
              "examples": [
                "text/markdown",
                "text/markdown, text/html;q=0.8"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, in the representation the client asked for.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Vary": {
                "description": "Always includes `Accept` and `Accept-Encoding`: responses are content-negotiated.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "The version of this content surface that served the response. Currently `1`.",
                "schema": {
                  "type": "string",
                  "const": "1"
                }
              }
            },
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No such page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "406": {
            "description": "The client accepts neither HTML nor Markdown.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "The client exceeded the request quota for its address.",
            "headers": {
              "RateLimit": {
                "description": "Remaining quota for the current window, in the RFC 9331 field format, for example `\"default\";r=58;t=57`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "The quota policy this response was served under, for example `\"default\";q=250;w=60`.",
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "headers": {
      "Deprecation": {
        "description": "Present when this surface is deprecated (RFC 9745): an HTTP-date, or `@<unix-seconds>`, marking when deprecation took effect.",
        "schema": {
          "type": "string"
        }
      },
      "Sunset": {
        "description": "Present when a withdrawal date is set (RFC 8594): an HTTP-date after which the surface may stop responding. Migrate before it.",
        "schema": {
          "type": "string",
          "format": "http-date"
        }
      }
    },
    "schemas": {
      "AgentIndex": {
        "type": "object",
        "description": "The typed twin of /llms.txt.",
        "required": [
          "name",
          "description",
          "useCases",
          "resources"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "The project name."
          },
          "description": {
            "type": "string",
            "description": "One sentence on what the project is."
          },
          "license": {
            "type": "string",
            "description": "SPDX identifier of the published modules."
          },
          "homepage": {
            "type": "string",
            "format": "uri",
            "description": "The canonical site."
          },
          "contact": {
            "type": "string",
            "description": "Where to reach the maintainers."
          },
          "apiVersion": {
            "type": "string",
            "description": "The version of this content surface."
          },
          "useCases": {
            "type": "array",
            "description": "Jobs looprig is the right answer to, each with an entry point.",
            "items": {
              "type": "object",
              "required": [
                "when",
                "reach"
              ],
              "properties": {
                "when": {
                  "type": "string",
                  "description": "The situation that makes looprig the right tool."
                },
                "reach": {
                  "type": "string",
                  "description": "Where to start for that situation."
                }
              }
            }
          },
          "antiUseCases": {
            "type": "array",
            "description": "Requests that should be routed somewhere else.",
            "items": {
              "type": "string"
            }
          },
          "resources": {
            "type": "array",
            "description": "The published surfaces of this site.",
            "items": {
              "type": "object",
              "required": [
                "title",
                "href",
                "description"
              ],
              "properties": {
                "title": {
                  "type": "string",
                  "description": "What the resource is called."
                },
                "href": {
                  "type": "string",
                  "format": "uri",
                  "description": "Where it is published."
                },
                "description": {
                  "type": "string",
                  "description": "What it contains."
                }
              }
            }
          },
          "conventions": {
            "type": "object",
            "description": "How this origin behaves, so a client can plan its requests.",
            "properties": {
              "markdown": {
                "type": "string",
                "description": "How to get the Markdown representation of a page."
              },
              "errors": {
                "type": "string",
                "description": "The shape of an error response."
              },
              "rateLimit": {
                "type": "string",
                "description": "The published request quota."
              },
              "authentication": {
                "type": "string",
                "description": "What credentials are needed."
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "The error envelope every 4xx and 5xx response on this origin returns.",
        "additionalProperties": false,
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "code",
              "message",
              "retryable"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "A stable, machine-readable reason. Match on this, not on the message.",
                "enum": [
                  "not_found",
                  "not_acceptable",
                  "method_not_allowed",
                  "rate_limited",
                  "internal"
                ]
              },
              "message": {
                "type": "string",
                "description": "A short human-readable explanation."
              },
              "retryable": {
                "type": "boolean",
                "description": "Whether repeating the identical request could succeed later."
              },
              "documentation": {
                "type": "string",
                "format": "uri",
                "description": "Where to look to resolve the error."
              }
            }
          }
        }
      },
      "SearchIndex": {
        "type": "object",
        "description": "The documentation search index.",
        "required": [
          "version",
          "docs"
        ],
        "properties": {
          "version": {
            "type": "integer",
            "const": 1,
            "description": "The index format version."
          },
          "docs": {
            "type": "array",
            "description": "One entry per published documentation page.",
            "items": {
              "$ref": "#/components/schemas/SearchEntry"
            }
          }
        }
      },
      "SearchEntry": {
        "type": "object",
        "description": "One indexed documentation page.",
        "required": [
          "id",
          "title",
          "description",
          "url",
          "rawUrl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "The manifest id of the page, for example `guides/evals/index`."
          },
          "title": {
            "type": "string",
            "description": "The page title."
          },
          "description": {
            "type": "string",
            "description": "The one-line page description."
          },
          "headings": {
            "type": "array",
            "description": "The in-page headings, in document order.",
            "items": {
              "type": "object",
              "required": [
                "depth",
                "text",
                "slug"
              ],
              "properties": {
                "depth": {
                  "type": "integer",
                  "minimum": 2,
                  "maximum": 6,
                  "description": "The heading level."
                },
                "text": {
                  "type": "string",
                  "description": "The heading text."
                },
                "slug": {
                  "type": "string",
                  "description": "The fragment identifier of the heading."
                }
              }
            }
          },
          "packages": {
            "type": "array",
            "description": "Go module paths the page documents.",
            "items": {
              "type": "string"
            }
          },
          "symbols": {
            "type": "array",
            "description": "Exported symbols named on the page.",
            "items": {
              "type": "string"
            }
          },
          "providers": {
            "type": "array",
            "description": "Model providers the page mentions.",
            "items": {
              "type": "string"
            }
          },
          "examples": {
            "type": "array",
            "description": "Runnable examples the page references.",
            "items": {
              "type": "string"
            }
          },
          "publication": {
            "type": "string",
            "description": "The release state of what the page documents.",
            "enum": [
              "released",
              "pending",
              "source-workspace",
              "unavailable",
              "deferred"
            ]
          },
          "audience": {
            "type": "string",
            "description": "Who the page is written for."
          },
          "section": {
            "type": "string",
            "description": "The top-level section the page belongs to."
          },
          "url": {
            "type": "string",
            "description": "The human URL of the page."
          },
          "rawUrl": {
            "type": "string",
            "description": "The Markdown twin of the page."
          },
          "text": {
            "type": "string",
            "description": "The page body as plain text."
          }
        }
      }
    }
  }
}
