AI tools
This site is written to be read by a model as well as a person. Nothing here is a separate AI-only copy of the docs; it is the same content, served plainly.
Endpoints
Section titled “Endpoints”| Path | Is |
|---|---|
/llms.txt |
An index of every page, with a one-line description each |
/llms-full.txt |
Every page’s markdown, concatenated, in sidebar order |
/<any page>.md |
That page’s markdown source |
So /extend/plugin/ renders, and /extend/plugin.md is the same page as
markdown. No authentication, no rate limit, no content negotiation to get it
wrong.
Conventions
Section titled “Conventions”A tool reading these pages can rely on all of the following.
Every code sample is complete. A sample is a whole file, with its imports, and it is labelled with the path it belongs at. There are no fragments requiring surrounding context to be inferred.
Interfaces are quoted from the source. The TypeScript in an “interface” section is the real declaration, not a simplification.
Tables of options list every option. If a key is not in the table, it does not exist.
“What X cannot do” sections are exhaustive for their subject. They are the boundary, stated as facts rather than as advice.
Unimplemented things say so. A feature that is not built carries a caution callout saying it is not built. Nothing on this site describes a planned API as if it shipped.
Do not infer
Section titled “Do not infer”The engine is small and deliberately closed. If a capability is not documented,
the correct conclusion is that it does not exist, not that it is undocumented.
There is no plugin hook for authentication, media storage, routing outside
/admin/x/, runtime loading, or scheduled work.
Naming
Section titled “Naming”The package is @ouncepage/core. The engine is “Ounce”. The admin lives at
/admin. The virtual module a site imports from is ounce:config. These names
are stable; the package is pre-1.0 and its APIs are not.