Skip to content

[Bug]: llmstxt-to-skill creates skills with incorrect names for documentation sites #4

@pgesiak

Description

@pgesiak

Problem

The llmstxt-to-skill plugin uses domain names as skill names without indicating the skill contains documentation.

Example:

  • Input: https://docs.openclaw.ai/llms.txt
  • Expected: openclaw-docs
  • Actual: openclaw

Impact

1. Misleading Names
Users can't distinguish between:

  • Skills with domain expertise/operational knowledge
  • Skills with reference documentation

2. Ambiguity
Skill name "openclaw" could mean:

  • OpenClaw service integration
  • OpenClaw-specific commands
  • Operational knowledge

But actually contains:

  • Downloaded documentation files
  • Static reference materials

3. Naming Inconsistency
Documentation skills should follow clear patterns:

  • openclaw-docs - Obviously documentation
  • react-docs - Clear reference material
  • openclaw - Ambiguous
  • react - Conflicts with project name

Root Cause

Current logic:

https://docs.openclaw.ai/llms.txt
    ↓ Parse domain
docs.openclaw.ai
    ↓ Extract name
openclaw
    ↓ Use as skill name
"openclaw"  ❌

Should be:

https://docs.openclaw.ai/llms.txt
    ↓ Parse domain
docs.openclaw.ai
    ↓ Detect "docs" subdomain
Documentation site: true
    ↓ Extract name + suffix
"openclaw-docs"  ✅

Proposed Solution

Option 1: Auto-detect Documentation Sites (Recommended)

Automatically append -docs suffix when detecting:

Detection criteria:

  • Subdomain: docs, documentation, developer, dev-docs
  • Domain: docs., .readthedocs.io, .github.io/docs
  • Path: /docs/, /documentation/, /reference/

Examples:

https://docs.openclaw.ai/llms.txt        → openclaw-docs
https://docs.stripe.com/llms.txt         → stripe-docs
https://developer.github.com/llms.txt    → github-docs
https://react.dev/llms.txt               → react-docs
https://python.readthedocs.io/llms.txt   → python-docs

Implementation pseudocode:

function generateSkillName(llmsTxtUrl: string): string {
  const url = new URL(llmsTxtUrl);
  const hostname = url.hostname;
  const pathname = url.pathname;

  // Extract base name
  const baseName = extractBaseName(hostname); // "openclaw" from "docs.openclaw.ai"

  // Check if this is a documentation site
  const isDocsSite =
    // Subdomain patterns
    hostname.startsWith('docs.') ||
    hostname.startsWith('documentation.') ||
    hostname.startsWith('developer.') ||
    hostname.startsWith('dev-docs.') ||
    // Domain patterns
    hostname.includes('.readthedocs.io') ||
    hostname.includes('.github.io') ||
    // Path patterns
    pathname.includes('/docs/') ||
    pathname.includes('/documentation/') ||
    pathname.includes('/reference/');

  return isDocsSite ? `${baseName}-docs` : baseName;
}

Option 2: Prompt User
During creation, suggest -docs suffix with explanation.

Option 3: Always Add Suffix
All llms.txt files are documentation by definition, so always add -docs.

Test Cases

Input URL Expected Name Notes
https://docs.openclaw.ai/llms.txt openclaw-docs Standard docs subdomain
https://docs.stripe.com/llms.txt stripe-docs Standard docs subdomain
https://developer.github.com/llms.txt github-docs Developer portal
https://react.dev/docs/llms.txt react-docs Path contains /docs/
https://python.readthedocs.io/llms.txt python-docs ReadTheDocs pattern

Workaround (Current)

# After skill creation
mv .claude/skills/openclaw .claude/skills/openclaw-docs

# Update references
find .claude/skills/openclaw-docs -type f -exec sed -i '' 's/openclaw/openclaw-docs/g' {} +

Environment

  • Plugin: llmstxt v1.0.0
  • Discovered: 2026-02-01
  • Real-world case: OpenClaw docs skill

Recommendation

Implement Option 1 (auto-detect) - most accurate, no user friction, extensible.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingplugin:llmstxtllmstxt pluginpriority:mediumMedium prioritystaletriageNeeds initial review and categorization

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions