This directory owns docs authoring, published link rules, and docs i18n policy.
- Maintainers author
/clawhub/**pages in openclaw/clawhub.scripts/docs-sync-publish.mjsreplaces the entire publishdocs/clawhub/tree from that source. Do not keep authored copies here. - This repo therefore holds no
/clawhub/**page sources, even thoughdocs/docs.jsonlists them in the navigation. Both link-audit modes accept those declared routes without a ClawHub checkout; undeclared routes still fail. - Keep OpenClaw-specific skill and plugin guidance in the owning OpenClaw docs, such as
docs/cli/skills.mdanddocs/cli/plugins.md. That guidance covers installation, update, verification, removal, and release trust. Standalone ClawHub CLI and publishing reference belongs upstream. - For links into
/clawhub/**, plainpnpm docs:check-linksdoes not check fragments. To verify anchors, runpnpm docs:check-links:anchorswithOPENCLAW_DOCS_SYNC_CLAWHUB_REPOpointing to the actual ClawHub source checkout. Without that source, fragments into declared mirrored routes are reported as unverified. - Approved release docs can own a marked
CHANGELOG/<version>.mdmirror. When changing those sources, regenerate that complete flat Markdown file in the same PR withpnpm changelog:from-docs, preserving the marker's ordered source list and the frozenCHANGELOG/records/<version>.md.pnpm changelog:checkverifies marked mirrors; it does not convert untouched historical releases. Theopenclaw-changelog-updateskill owns the commands and separate post-release publication sequence. - Generated
CHANGELOG/**artifacts retain the exact migrated or mirrored bytes. Like the root changelog, they are excluded from generic formatting; use the owning generator andpnpm changelog:checkinstead.
- The publish pipeline pushes docs to
https://docs.openclaw.aifrom theopenclaw/docsmirror. - Internal doc links in
docs/**/*.mdmust stay root-relative with no.mdor.mdxsuffix (example:[Config](/gateway/configuration)). - Section cross-references should use anchors on root-relative paths (example:
[Hooks](/gateway/config-hooks#hooks)). - Anchor IDs come from the shared publishing parser in
scripts/lib/docs-markdown.mjs. Verify them withpnpm docs:check-links:anchors, not Mintlify's independent checker. Published heading IDs stay stable. Compatibility aliases never replace an existing target. - Use an explicit
<a id="stable-section-name" />for a durable section link when heading wording may change. Keep existing named anchors when reorganizing content. - README and other GitHub-rendered docs should keep absolute docs URLs so links work outside the docs site.
- Docs content must stay generic: no personal device names, hostnames, or local paths. Use placeholders like
user@gateway-hostand~/path/to/skills. - For tokens, API keys, and credential snippets, follow Secret Placeholder Conventions. Keep example values obviously fake so secret scanners stay quiet.
- When
node-version.mjs,package.jsonengines, the Bun minimum insrc/infra/runtime-guard.ts, or the SQLite floors insrc/infra/sqlite-runtime-version.tschange, update the supported-versions and history tables indocs/install/node-compatibility.mdanddocs/install/bun-compatibility.md. - For docs, UI copy, and picker lists, order services and providers alphabetically. The one exception is a section that explicitly describes runtime order or auto-detection order.
- Keep bundled plugin naming consistent with the repo-wide plugin terminology rules in the root
AGENTS.md. - CI verifies JSON5 and JSON config fences that look like whole
openclaw.jsondocuments against the schema.pnpm docs:check-config-examplesruns that verification. Deliberately partial or legacy snippets opt out withvalidate=falsein the fence info string. - Generated docs, never hand-edit:
docs/plugins/reference/**,docs/plugins/reference.md, anddocs/plugins/plugin-inventory.mdcome frompnpm plugins:inventory:gen.docs/maturity/**comes frompnpm maturity:render. - Publishing and packaging generate the public and packaged docs map from
pnpm docs:list --headings. Keep only the small source stub atdocs/docs_map.md. Never commit the expanded heading mirror.
- Long-lived private operator docs belong in a private operator repo outside this one.
- Repo-local internal scratch/mirror docs may live under ignored
docs/internal/. - Never add
docs/internal/**pages todocs/docs.jsonnavigation or link them from public docs. scripts/docs-sync-publish.mjsexcludes and prunesdocs/internal/**from the publicopenclaw/docspublish repo if a page is force-added later.- Internal docs may mention repo paths, private app names, 1Password item names, and runbooks, but never include secret values.
taxonomy.yamlandqa/maturity-scores.yamlare the source inputs.- Generated maturity docs under
docs/maturity/are projections. Do not hand-edit their score, LTS, taxonomy, QA profile, or evidence tables. scripts/qa/render-maturity-docs.tsowns generation. Usepnpm maturity:renderto refresh committed docs andpnpm maturity:checkto verify them..github/workflows/maturity-scorecard.ymlrenders artifact previews and can open generated-doc PRs..github/workflows/openclaw-release-checks.ymldispatches it for release QA.- Keep deterministic
qa-evidence.json.scorecarddata in GitHub Actions artifacts unless a maintainer explicitly asks for a sanitized committed projection. - Human overrides must change source state in a PR and explain the reason plus public or redacted evidence.
- Foreign-language docs are not maintained in this repo. The generated publish output lives in the separate
openclaw/docsrepo (often cloned locally as../openclaw-docs). - Do not add or edit localized docs under
docs/<locale>/**here. - Treat OpenClaw-owned English docs in this repo plus glossary files as the source of truth. ClawHub English sources follow Source Ownership above.
- Pipeline: update English docs here, update
docs/.i18n/glossary.<locale>.jsonas needed, then let the publish-repo sync andscripts/docs-i18nrun inopenclaw/docs. - Before rerunning
scripts/docs-i18n, add glossary entries for new technical terms, page titles, and short nav labels. Add an entry for each term that must stay in English or use a fixed translation. pnpm docs:check-i18n-glossaryis the guard for changed English doc titles and short internal doc labels.- Translation memory lives in generated
docs/.i18n/*.tm.jsonlfiles in the publish repo. - See
docs/.i18n/README.md.