| name | llms-txt-manager |
| description | Comprehensive system for managing llms.txt and my-blog.json files across the project. Handles creation, updating, and synchronization of AI-readable content catalogs. Automatically detects when working with llms.txt files, my-blog.json files, or updating blog content. Includes utilities for fetching latest content from query-index.json and organizing by last modified dates. Keywords include llms.txt, my-blog.json, blog catalog, content index, query-index.json, AI content discovery, update llms, update blog, content synchronization. |
llms.txt Manager Skill
Purpose
Manage llms.txt and my-blog.json files across the project, ensuring AI systems have comprehensive, up-to-date content catalogs. Automates synchronization between blog content (query-index.json) and llms.txt files.
When to Use
This skill activates when:
- Creating or editing llms.txt files
- Creating or editing my-blog.json files
- User mentions updating blog catalogs
- User wants to synchronize content indexes
- Working with query-index.json data
- Creating folder-specific content indexes
Core Concepts
File Structure
llms.txt - AI-readable content catalog
- Location: Root or folder-specific (e.g.,
blogs/ddt/integrations/llms.txt) - Purpose: Comprehensive list of content for AI systems
- Format: Markdown with metadata and categorized links
- Source: URLs from my-blog.json, text/descriptions from existing llms.txt
my-blog.json - Structured blog data
- Location: Same directory as llms.txt
- Purpose: Machine-readable catalog of blog posts
- Format: JSON with categories, posts, metadata
- Source: query-index.json filtered by folder context
query-index.json - Master content index
- Location: https://allabout.network/query-index.json
- Purpose: Single source of truth for all site content
- Contains: All pages with URLs, titles, descriptions, lastModified dates
- Updated: Automatically by the site
Folder Context
When llms.txt is in a subfolder (e.g., blogs/ddt/integrations/):
- The final folder name indicates intent/scope
- my-blog.json should exist in same folder
- Content should be filtered to relevant posts only
- Example:
/integrations/folder focuses on EDS integration tutorials
Update Logic
lastModified Date Comparison:
- Check lastModified date in llms.txt metadata
- Fetch query-index.json
- Filter entries with lastModified > llms.txt date
- Add only new/updated content
File Templates
llms.txt Template
# [Project/Section Title]
[Brief description of what this content covers]
**Last updated:** [Month Year]
**Authors:** [Author Names]
## [Category Name]
### [Subcategory Name]
- [Title](URL): Description
- [Title](URL): Description
## Version Information
**Version:** [version] (Updated: [date])
**Comprehensive catalog:** [count] posts across [n] categories
**Categories:** [List with counts]
my-blog.json Template
{
"metadata": {
"last-updated": "YYYY-MM-DD",
"scope": "folder-name-or-site-wide"
},
"mostVisited": [
{
"title": "Popular Post Title",
"url": "/path/to/post",
"description": "Post description"
}
],
"categoryMap": [
{
"id": "category-id",
"name": "Display Name",
"count": 0,
"description": "Category description"
}
],
"categories": [
{
"id": "category-id",
"name": "Display Name",
"posts": [
{
"title": "Post Title",
"url": "/path/to/post",
"description": "Post description",
"lastModified": "YYYY-MM-DD"
}
]
}
]
}
IMPORTANT: Do NOT include a latestPosts array in my-blog.json files. The view-myblog block automatically generates it from the 3 most recent posts. Including it manually requires maintenance and defeats the purpose of auto-generation.
Key Concepts
Workflows
Creating New llms.txt
Automatic Creation: The sync script now automatically creates llms.txt files if they don't exist:
Detects Missing Files
- Finds all my-blog.json files
- Checks for paired llms.txt in same directory
- Creates missing files automatically
Builds Complete Structure
- Creates header with title, description, authors
- Builds organized sections from my-blog.json categories
- Uses folder name for context (e.g., "ai" → "Ai Resources")
Populates Content
- Fetches from query-index.json
- Filters by folder context if applicable
- Formats posts with titles, URLs, descriptions
- Updates metadata to current date
Manual Creation: If you need to manually create one:
Determine Scope
- Root llms.txt: Site-wide catalog
- Folder llms.txt: Section-specific (use folder name for context)
Check for my-blog.json
- Look in same directory as llms.txt
- If missing, create one first
- Filter query-index.json by folder path if folder-specific
Structure Content
- Use folder name to determine focus (e.g.,
/integrations/= EDS integrations) - Organize with subsections for better scannability
- Include all relevant posts from my-blog.json
- Add descriptive text for context
- Use folder name to determine focus (e.g.,
Add Metadata
- Version number
- Last updated date
- Category counts
- Access guidelines (optional)
Updating Existing llms.txt
Read Current File
- Extract last-updated date from metadata
- Note current structure and organization
Fetch New Content
- Load query-index.json
- Filter by lastModified > current date
- Filter by folder context if applicable
Merge New Posts
- Add new posts to organized sections
- Update version number and date
- Maintain text patterns and formatting
Update my-blog.json
- Add new posts to appropriate categories
- Update metadata.last-updated
- Increment category counts
Creating my-blog.json from query-index.json
Automatic Creation: The sync script now automatically creates my-blog.json files if they don't exist:
Detects Missing Files
- Finds all llms.txt files
- Checks for paired my-blog.json in same directory
- Creates missing files automatically
Initializes Structure
- Creates empty categoryMap with all 6 standard categories
- Sets metadata with scope (folder name or 'site-wide')
- Sets last-updated to 2020-01-01 (extreme past, will populate on next update)
Populates Content
- Fetches from query-index.json
- Filters by folder context if applicable
- Categorizes posts automatically
- Updates metadata to current date
Manual Creation: If you need to manually create one:
Fetch Data
curl https://allabout.network/query-index.jsonFilter by Context
- Root my-blog.json: All content
- Folder my-blog.json: Filter by path prefix
Categorize Posts
- Group by topic/category
- Count posts per category
- Create categoryMap
Structure Output
- metadata section with date and scope
- categoryMap with counts
- categories with full post arrays
Command Usage
/update-llms
Finds all llms.txt files in the project and updates them with new content:
/update-llms
Or use the script directly:
node scripts/sync-blog-content.js --target=llms
Process:
- Find all existing llms.txt files:
**/*llms.txt - Find all my-blog.json files without paired llms.txt
- For each file (existing or new):
- If new: Create complete structure from my-blog.json
- If existing: Read last-updated date from metadata
- Determine folder context (site-wide or folder-specific)
- Fetch query-index.json from production
- Filter by context (folder path matching)
- Filter new posts (lastModified > last-updated)
- Add new posts to organized sections (if any)
- Update version date and metadata
/update-my-blog
Finds all my-blog.json files and updates them with latest content:
/update-my-blog
Process:
- Find all my-blog.json files:
**/*my-blog.json - For each file:
- Read current content and last-updated
- Determine folder context
- Fetch query-index.json
- Filter by context and date
- Update categories and counts
- Update metadata
Best Practices
Content Organization
✅ Use subsections - Break large categories into logical groups ✅ Consistent formatting - Use same pattern throughout ✅ Rich descriptions - Include full descriptions from source ✅ Clear hierarchy - Main section → Subsection → Posts ✅ Cross-references - Link between related llms.txt files
URL Management
✅ Source of truth: my-blog.json for URLs ✅ Text source: Existing llms.txt for descriptions/formatting ✅ New content: query-index.json for latest posts ✅ Relative URLs: Use relative paths in my-blog.json ✅ Absolute URLs: Use full URLs in llms.txt
Date Handling
✅ ISO format: YYYY-MM-DD for dates ✅ Comparison: Filter by lastModified > last-updated ✅ Display format: "Month Year" in llms.txt header ✅ Update always: Change date when content changes
Folder Context
✅ Use folder name: Final path segment indicates scope ✅ Filter appropriately: Only relevant content for folder llms.txt ✅ Paired files: Keep my-blog.json with llms.txt ✅ Independent updates: Each folder maintains own files
Examples
Example 1: Root llms.txt
Location: /llms.txt
Scope: Entire site
my-blog.json: /my-blog.json (all content)
Categories: All site categories
Example 2: Integrations llms.txt
Location: /blogs/ddt/integrations/llms.txt
Scope: EDS integration tutorials only
my-blog.json: /blogs/ddt/integrations/my-blog.json
Categories: Filtered to integration-related posts
Example 3: AI Topics llms.txt
Location: /blogs/ddt/ai/llms.txt
Scope: AI/LLM content only
my-blog.json: /blogs/ddt/ai/my-blog.json
Categories: Filtered to AI-related posts
Troubleshooting
my-blog.json Missing
Solution: Create it from query-index.json filtered by folder context
Dates Not Comparing
Solution: Ensure ISO format (YYYY-MM-DD) and proper parsing
Wrong Content Scope
Solution: Check folder context and filter query-index.json properly
Duplicate Entries Within Categories
Solution: Deduplicate by URL before adding to categories
Related Files
.claude/commands/update-llms.md- Slash command for updating llms.txt.claude/commands/update-my-blog.md- Slash command for updating my-blog.jsonscripts/sync-blog-content.js- Utility script for bulk updates (no dependencies)
Version
Skill Version: 1.0 Last Updated: November 2025 Line Count: < 500 ✅