Machine-readable docs
llms.txt, every page as Markdown, and capabilities.json: the files tools and language models read.
These docs also come in forms that programs read without parsing HTML: an index and a full copy for language models,
every page as Markdown, and capabilities.json, which describes Harthelm in one JSON file. They are built together
with the pages, from the same release, and every address in them is absolute.
| Path | What |
|---|---|
/llms.txt | The index: what the docs cover, then every page with its description, linked to its Markdown. |
/llms-full.txt | Every page as Markdown, in one file. |
/<page>.md | One page as Markdown. |
/capabilities.json | Harthelm in one JSON file: the release, where releases come from, the features, the hart commands and the references. |
/openapi.json | The OpenAPI document of the REST API. |
/schemas/harthelm.schema.json | The JSON Schema of harthelm.yml. |
llms.txt and llms-full.txt
/llms.txt follows the llms.txt convention: a title, a summary of what the docs cover, then a section for each part
of the sidebar with every page's description and a link to its Markdown. The release notes are under Optional, the
section a tool may skip. Read it first, then fetch the pages you need:
curl https://docs.harthelm.dev/llms.txt/llms-full.txt holds every page in one file, in the order of the sidebar, each with its title, description and
address. It is large; take it when a tool wants all of the docs at once:
curl -O https://docs.harthelm.dev/llms-full.txtEvery page as Markdown
Append .md to a page's address, without its trailing slash. The Markdown of
https://docs.harthelm.dev/getting-started/quickstart/ is:
curl https://docs.harthelm.dev/getting-started/quickstart.mdThe first page of a section also answers with /index.md appended (/reference.md and /reference/index.md are the
same page), and /index.md is /llms.txt.
Or ask for the page's own address with Accept: text/markdown:
curl -H 'Accept: text/markdown' https://docs.harthelm.dev/getting-started/quickstart/The site answers with Markdown when the Accept header lists text/markdown before text/html; browsers list
text/html first and get the page. The answer's type is text/markdown; charset=utf-8, it says Vary: Accept, and
like every Markdown copy it carries X-Robots-Tag: noindex, so search engines keep to the pages.
A page in Markdown starts with its title, its description, its address and the release it describes, then its text. Links to other pages are absolute. The operations of the REST API list their method and path, parameters, request body and responses.
capabilities.json
/capabilities.json describes Harthelm in one file: the release these docs describe, where its images, chart and
files come from, the features with their pages, the hart commands, and the addresses of the OpenAPI document, the
harthelm.yml schema, the chart values and the release notes. A tool that lands on any page finds it in the page's
head, as <link rel="alternate" type="application/json">, and in /llms.txt.
curl -s https://docs.harthelm.dev/capabilities.json | jq .productThe two documents it links are published next to it:
/openapi.jsonis the OpenAPI document of the release's REST API. Its server ishttps://console.example.com/api/v1; use your console's address. Every installation also serves its own at/api/v1/openapi.yaml./schemas/harthelm.schema.jsonis the JSON Schema ofharthelm.yml. Every installation also serves it, without credentials, at/api/v1/schemas/harthelm.json.
Stability
schemaVersion changes only when a field is removed or changes meaning. New fields can appear at any time: read the
fields you know and ignore the others. A field that does not apply is null, never left out.
Fields
Every address is absolute.
| Field | Type | What |
|---|---|---|
schemaVersion | number | The version of this shape: 1. |
generatedAt | string | The day the file was built, YYYY-MM-DD. |
product.name | string | Harthelm. |
product.summary | string | What Harthelm is, in one sentence. |
product.version | string | The release these docs describe, for example 1.6.0. |
product.ref | string | Its tag, for example v1.6.0. |
product.commit | string | The commit of the release. |
product.committedAt | string or null | When that commit was made, ISO 8601. |
product.stable | boolean | true when the docs describe a release, which the published docs always do. |
product.released | string or null | The release day from the release notes, YYYY-MM-DD. |
product.apiVersion | string | The version of the REST API, info.version of the OpenAPI document. |
docs.home | string | The docs home page. |
docs.llmsTxt | string | /llms.txt. |
docs.llmsFullTxt | string | /llms-full.txt. |
docs.markdown.urlPattern | string | The address of a page's Markdown; {page} is the page's path without the slashes around it, for example getting-started/quickstart. |
docs.markdown.accept | string | The type that asks a page's own address for its Markdown: text/markdown. |
docs.markdown.example | string | The Markdown address of one page. |
docs.sitemap | string | The sitemap. |
docs.capabilitiesPage | string | This page. |
releaseChannel | object or null | Where the release comes from; null before 1.6.0, the first release published there. |
releaseChannel.registry.host | string | registry.harthelm.dev, the OCI registry with the images and the chart. |
releaseChannel.registry.images | string | How the images are named: registry.harthelm.dev/harthelm/<image>:<tag>. Harthelm's own images are tagged with the release, for example 1.6.0; the managed services and the operators keep their vendor's own tag (the list). |
releaseChannel.registry.chart | string | The chart: oci://registry.harthelm.dev/harthelm/charts/harthelm. |
releaseChannel.registry.access | string | How to get in: a login with your licence id and registry token. |
releaseChannel.files.host | string | get.harthelm.dev, the release files. |
releaseChannel.files.release | string or null | The folder of this release's files. |
releaseChannel.files.sources | string | The folder of the source bundles. |
releaseChannel.files.access | string | Public HTTPS, no login. |
releaseChannel.signingKey | string or null | The public key that signs the release's images and chart; null for a release without one. |
releaseChannel.guide | string | Get Harthelm. |
features[].id | string | The page's slug, for example workspaces. |
features[].title | string | The page's title. |
features[].summary | string | The page's description. |
features[].kind | string | concept or guide. |
features[].group | string or null | The guide's group in the sidebar, for example Workspaces; null for a concept. |
features[].url | string | The page. |
features[].markdown | string | The page as Markdown. |
cli.name | string | hart. |
cli.reference | string | The hart reference. |
cli.install | string | Install hart. |
cli.commands[].name | string | A top-level command, for example hart ws. |
cli.commands[].group | string or null | Its group in hart --help, for example Workspaces. |
cli.commands[].summary | string | What it does, in the words of hart --help. |
cli.commands[].url | string | Its page in the reference. |
cli.commands[].subcommands | list of strings | Its subcommands, for example hart ws create; empty for a command without any. |
references.openapi.document | string | /openapi.json. |
references.openapi.openapi | string | The OpenAPI version of that document, for example 3.1.0. |
references.openapi.apiVersion | string | The version of the REST API. |
references.openapi.page | string | The REST API reference. |
references.openapi.installationPath | string | Where an installation's console serves the document, from the document's own server and route: /api/v1/openapi.yaml. |
references.harthelmYml.schema | string | /schemas/harthelm.schema.json. |
references.harthelmYml.id | string or null | The schema's $id. |
references.harthelmYml.page | string | The harthelm.yml reference. |
references.harthelmYml.installationPath | string | Where an installation's console serves the schema, from the OpenAPI document's server and route: /api/v1/schemas/harthelm.json. |
references.chartValues.page | string | The chart values. |
references.chartValues.chart | string or null | The chart in the registry; null before 1.6.0. |
references.releaseNotes.index | string | The release notes. |
references.releaseNotes.current | string or null | The release notes of this release. |
features lists the concepts and then the guides, in the order of the sidebar; cli.commands lists the commands in
the order of hart --help.
Example
The file for Harthelm 1.6.0, shortened to two of its features and one of its commands. /capabilities.json itself
always describes the release these docs describe, so its release, dates and lists can differ from this one:
{
"schemaVersion": 1,
"generatedAt": "2026-10-21",
"product": {
"name": "Harthelm",
"summary": "Cloud workspaces and hosting for your team, on your own Kubernetes.",
"version": "1.6.0",
"ref": "v1.6.0",
"commit": "273bdc8b21bf03340bec6007b1dffdfd38d5cf08",
"committedAt": "2026-10-20T13:37:46+02:00",
"stable": true,
"released": "2026-10-20",
"apiVersion": "0.12.0"
},
"docs": {
"home": "https://docs.harthelm.dev/",
"llmsTxt": "https://docs.harthelm.dev/llms.txt",
"llmsFullTxt": "https://docs.harthelm.dev/llms-full.txt",
"markdown": {
"urlPattern": "https://docs.harthelm.dev/{page}.md",
"accept": "text/markdown",
"example": "https://docs.harthelm.dev/getting-started/quickstart.md"
},
"sitemap": "https://docs.harthelm.dev/sitemap.xml",
"capabilitiesPage": "https://docs.harthelm.dev/reference/machine-readable/"
},
"releaseChannel": {
"registry": {
"host": "registry.harthelm.dev",
"images": "registry.harthelm.dev/harthelm/<image>:<tag>",
"chart": "oci://registry.harthelm.dev/harthelm/charts/harthelm",
"access": "a login with your licence id and registry token"
},
"files": {
"host": "get.harthelm.dev",
"release": "https://get.harthelm.dev/releases/1.6.0/",
"sources": "https://get.harthelm.dev/sources/",
"access": "public HTTPS, no login"
},
"signingKey": "https://docs.harthelm.dev/cosign.pub",
"guide": "https://docs.harthelm.dev/self-hosting/install/get-harthelm/"
},
"features": [
{
"id": "workspaces",
"title": "Workspaces",
"summary": "A workspace: your code on its own volume, the IDE, terminals, plans and visibility.",
"kind": "concept",
"group": null,
"url": "https://docs.harthelm.dev/concepts/workspaces/",
"markdown": "https://docs.harthelm.dev/concepts/workspaces.md"
},
{
"id": "start-from-a-repository",
"title": "Start from a repository",
"summary": "Connect a Git account and create a workspace from a repository and branch.",
"kind": "guide",
"group": "Workspaces",
"url": "https://docs.harthelm.dev/guides/start-from-a-repository/",
"markdown": "https://docs.harthelm.dev/guides/start-from-a-repository.md"
}
],
"cli": {
"name": "hart",
"reference": "https://docs.harthelm.dev/reference/hart/",
"install": "https://docs.harthelm.dev/getting-started/install-hart/",
"commands": [
{
"name": "hart ws",
"group": "Workspaces",
"summary": "List, create, open, wake and delete workspaces",
"url": "https://docs.harthelm.dev/reference/hart/ws/",
"subcommands": [
"hart ws create",
"hart ws delete",
"hart ws list",
"hart ws open",
"hart ws purge",
"hart ws wake"
]
}
]
},
"references": {
"openapi": {
"document": "https://docs.harthelm.dev/openapi.json",
"openapi": "3.1.0",
"apiVersion": "0.12.0",
"page": "https://docs.harthelm.dev/reference/api/",
"installationPath": "/api/v1/openapi.yaml"
},
"harthelmYml": {
"schema": "https://docs.harthelm.dev/schemas/harthelm.schema.json",
"id": "urn:harthelm:schema:harthelm-v1",
"page": "https://docs.harthelm.dev/reference/harthelm-yml/",
"installationPath": "/api/v1/schemas/harthelm.json"
},
"chartValues": {
"page": "https://docs.harthelm.dev/reference/chart-values/",
"chart": "oci://registry.harthelm.dev/harthelm/charts/harthelm"
},
"releaseNotes": {
"index": "https://docs.harthelm.dev/releases/",
"current": "https://docs.harthelm.dev/releases/v1-6-0/"
}
}
}