Skip to content

Add llms.txt and llms-full.txt#612

Merged
sboldyreva merged 8 commits into
cloudlinux:masterfrom
sboldyreva:claude/eloquent-cannon-uefk0w
Jul 7, 2026
Merged

Add llms.txt and llms-full.txt#612
sboldyreva merged 8 commits into
cloudlinux:masterfrom
sboldyreva:claude/eloquent-cannon-uefk0w

Conversation

@sboldyreva

Copy link
Copy Markdown
Collaborator

No description provided.

claude added 7 commits June 25, 2026 16:42
Publish an llms.txt at the site root (served from .vuepress/public)
following the llmstxt.org format: H1, blockquote summary, and H2 link
sections covering every top-level docs.tuxcare.com product area.

Links are aligned to the actual published routes (from documents.ts /
sidebar.ts) rather than the ticket draft, which referenced several
paths that do not resolve:
- enterprise-support -> enterprise-support-for-almalinux
- kernelcare -> live-patching-services
- kernelcare-iot -> kernelcare-for-iot
- securechain/machine-readable-security-data -> securechain/managing-securechain-repository
- subscription-management -> tuxcare-cln

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
Optional companion to llms.txt: concatenates all 156 documentation
pages into a single file served at the site root, each preceded by its
source URL. Generated from the docs source with cleaning applied —
YAML frontmatter, HTML comments, <script>/<style> blocks and VuePress
custom component tags are stripped, while literal code snippets from
CodeTabs/TableTabs and ALL-CAPS placeholders are preserved. Interactive
content is flattened; the source URL points to the rendered page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
- Add robots.txt at the site root that explicitly allows major AI/LLM
  crawlers and training bots (GPTBot, ClaudeBot, Google-Extended,
  PerplexityBot, CCBot, etc.) and points to the llms.txt index. No
  Sitemap directive since the site does not generate a sitemap.
- Reference llms-full.txt from the llms.txt summary for discoverability.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
The server args path (mcp-docs-server/server.mjs) is relative to the
repo root, so it remains valid after the move. .mcp.json at the root is
the standard location read by Claude Code and other MCP clients.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
Reverts the earlier robots.txt addition per request. Absence means
crawlers are allowed by default (nothing blocked); llms.txt/llms-full.txt
remain in place.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
Adds scripts/generate-llms-full.mjs and runs it before `vuepress build`
via the docs:build script, so llms-full.txt is regenerated from the
current docs on every deploy and copied to the site root by VuePress
(public/ -> dist/). This removes the stale 1 MB snapshot from the repo.

The generator ports the cleaning applied in the original file and also
strips VuePress container markers (:::tip / :::warning / :::), which the
committed snapshot still contained. The curated llms.txt stays
hand-maintained and tracked; only llms-full.txt is git-ignored.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
scripts/check-llms-links.mjs compares the product links in
docs/.vuepress/config-client/documents.ts (the site product-menu source
of truth) against llms.txt and fails if any product is missing, so a
newly added or renamed product can't silently leave llms.txt stale. It
does not require the reverse, so llms.txt keeps its extra SecureChain
subsection and Optional links.

A dedicated .github/workflows/check-llms.yml runs the check on pull
requests (and pushes to master) touching the relevant files. It uses
only Node built-ins — no install step — and is kept separate from the
deploy workflow so it never blocks a production deploy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AJYGjkHmgKthwWLbyWZ8gy
@sboldyreva sboldyreva requested a review from yel-hadd July 6, 2026 22:04
generate-llms-full.mjs stripped <script setup> blocks before salvaging
CodeTabs/TableTabs content, so tabs whose `content:` is a script variable
(the dominant pattern across ELS library/runtime pages — ~93 tabs on 49
pages) emitted nothing. Capture the variable bodies before stripping and
resolve each tab's content — inline literal or variable — under its title.

check-llms-links.mjs: also verify every docs.tuxcare.com page link in
llms.txt resolves to a real README.md on disk, catching typos and links
left stale when a product is renamed or removed in documents.ts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

@yel-hadd yel-hadd left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sboldyreva Took a look and pushed the fixes straight to the branch (209b826) to save a round-trip.

  1. generate-llms-full.mjs was silently dropping CodeTabs content. If a tab's content: pointed at a <script setup> variable, it came out empty, because the script block got stripped before the salvage step ran. That's the common pattern on the ELS library and runtime pages, so it hit ~93 tabs across 49 pages. It now reads the variable bodies first and emits each tab under its own title. On the Angular page, angular-core went from 26 hits to 38, which matches the source.
  2. check-llms-links.mjs now also checks that every docs.tuxcare.com link in llms.txt resolves to a real README on disk. Catches the rename case you flagged and plain typos too, and it does it off the filesystem so there are no network calls in CI.

On your two questions: I'd leave llms.txt hand-curated and llms-full.txt git-ignored. No reason to change either.

Please have a look when you get a chance.

@sboldyreva sboldyreva merged commit bf74736 into cloudlinux:master Jul 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants