Documentation Guide for Agent Rules Kit
May 13, 2025 · View on GitHub
This document provides guidelines for creating and improving documentation in Agent Rules Kit, focusing on a maintainable and coherent structure that facilitates both automatic generation and use of rules.
Documentation Structure
1. Global Rules
Global rules are located in templates/global/ and apply to all projects regardless of framework:
templates/global/
├── best-practices.md # General best practices
├── code-standards.md # Universal code standards
├── file-guard.md # Guide for safe file operations
└── log-process.md # Process documentation
2. Framework-Specific Rules
Each framework has its own documentation organized as follows:
templates/stacks/<framework>/
├── base/ # Fundamental concepts independent of version
├── architectures/ # Architecture-specific rules
│ ├── standard/
│ ├── ddd/
│ └── hexagonal/
└── v<version>/ # Version-specific implementations
Configuration in kit-config.json
The kit-config.json file is fundamental for defining how rules are applied:
{
"laravel": {
"default_architecture": "standard",
"version_ranges": {
"10": {
"name": "Laravel 10-11",
"range_name": "v10-11"
}
},
"pattern_rules": {
"<root>/app/Models/**/*.php": [
"stacks/laravel/base/best-practices.md",
"stacks/laravel/v10-11/model-casting.md"
]
},
"architectures": {
"standard": {
"name": "Standard Laravel (MVC with Repositories)",
"pattern_rules": {
"<root>/app/Models/**/*.php": [
"stacks/laravel/architectures/standard/models.md"
]
}
}
}
}
}
Main Elements
- default_architecture: The default architecture for the stack
- version_ranges: Mapping of versions to ranges with descriptive names
- pattern_rules: Assignment of rules to file patterns
- architectures: Configuration of specific architectures
Frontmatter for Rules
Each rule file can include frontmatter configuration:
---
globs: <root>/app/**/*.php,<root>/routes/**/*.php
alwaysApply: true
---
# Example Rule
Rule content...
Header Configuration (Frontmatter)
It is critical that each documentation file includes proper configuration in its header to determine which files it will apply to. There are two recommended approaches:
-
Universal Application - Using
always: true:--- title: Best Practices description: Best practices guide tags: [Framework, Best Practices] always: true ---This approach makes the rule apply to all files in the stack regardless of their type or location. Ideal for fundamental rules such as naming conventions or best practices.
-
Specific Application - Using
globs:--- title: Version X Features description: Specific features of version X tags: [Framework, Version X] globs: <root>/src/**/*.js,<root>/config/*.js ---This approach specifies exact glob patterns to determine which files the rule applies to. This allows precise granularity and is ideal for component or feature-specific rules.
Glob Patterns - Important Considerations
When defining glob patterns in frontmatter, it's important to consider these limitations:
-
Don't use braces with alternatives and commas: The system interprets commas within
{...}as separators of complete patterns, not as alternatives within the same pattern. For example:Incorrect (don't use):
globs: <root>/src/**/*.{md,mdx},<root>/astro.config.{js,mjs,ts}Correct (use separate patterns):
globs: <root>/src/**/*.md,<root>/src/**/*.mdx,<root>/astro.config.js,<root>/astro.config.mjs,<root>/astro.config.ts -
Alternative for similar files: If you need to include many similar extensions, consider using a more general pattern:
globs: <root>/src/**/*.*But keep in mind that this could include unwanted files.
IMPORTANT: For stacks like Astro, Vue, or React, it is recommended to define application rules directly in the documents using
always: trueor specificglobs, instead of relying on patterns inkit-config.json. This provides greater flexibility and clarity.
Template Variables
Use template variables to make your documentation dynamic:
| Variable | Description | Example |
|---|---|---|
{projectPath} | Path to the project | /path/to/app |
{detectedVersion} | Detected version | 10 |
{versionRange} | Compatible version range | v10-11 |
{stack} | Technology stack | laravel |
{architecture} | Selected architecture | standard |
Example:
# Guide for {stack} {versionRange}
This documentation applies to projects using {stack} version {detectedVersion}.
Documentation Best Practices
Consistent Structure
Each rule file should follow this structure:
- Title: Clear name indicating the purpose
- Brief Description: Concise explanation of the concept
- Guidelines: Specific instructions
- Examples: Code exemplifying the correct implementation
- Version Notes: Information about compatibility (if applicable)
Separation of Concepts and Implementation
- In
base/: Document concepts without specific implementation details - In
v<version>/: Provide concrete implementations with real code - In
architectures/: Detail specific architectural patterns
Use of Examples
Examples should be:
- Concise but complete
- Executable without modification
- Representative of real use cases
- With explanatory comments
// Good example: Laravel model implementation
class User extends Model
{
// Use type properties
protected $casts = [
'email_verified_at' => 'datetime',
'is_active' => 'boolean',
];
// Use relationships with return type
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
Documentation Update Process
- Identify Gaps: Review existing documentation and detect gaps
- Update kit-config.json: Add new patterns or version ranges if necessary
- Create/Update Rules: Edit .md files following the established structure
- Test Generation: Run
npx agent-rules-kit --debugto verify - Request Review: Ask for feedback before integrating major changes
Example of New Documentation Development
1. Identify Need
Let's say we want to add documentation for repository patterns in Laravel.
2. File Structure
templates/stacks/laravel/
├── base/
│ └── repository-pattern-concept.md # Repository concepts
├── architectures/
│ └── standard/
│ └── repository-implementation.md # Specific implementation
└── v10-11/
└── repository-example.md # Concrete example for v10-11
3. Update kit-config.json
"pattern_rules": {
"<root>/app/Repositories/**/*.php": [
"stacks/laravel/base/repository-pattern-concept.md",
"stacks/laravel/architectures/standard/repository-implementation.md",
"stacks/laravel/v10-11/repository-example.md"
]
}
4. Create the Rule Files
Consistent structure in each file with concepts, guidelines, and examples.
Best Practices for Rule Generation
- Keep Documentation in English: According to project policies
- Be Concise: Avoid excessively long documentation
- Update with Each Version: Review rules when there are new framework versions
- Provide Context: Explain why a practice is recommended
- Document Common Pitfalls: Help avoid frequent errors
- Maintain Visual Consistency: Use consistent formats throughout the documentation
Using Generation Scripts
For complex projects, consider creating scripts that generate documentation:
const fs = require('fs-extra');
const path = require('path');
// Example: generate documentation for multiple versions
async function generateVersionDocs(framework, versions, template) {
for (const version of versions) {
const targetDir = path.join(
'templates/stacks',
framework,
`v${version}`
);
await fs.ensureDir(targetDir);
const content = fs
.readFileSync(template, 'utf8')
.replace('{version}', version);
await fs.writeFile(path.join(targetDir, 'implementation.md'), content);
}
}
// Usage
generateVersionDocs(
'laravel',
['8', '9', '10', '11'],
'templates/base-template.md'
);
Conclusion
Effective documentation is essential for Agent Rules Kit to fulfill its mission of guiding AI agents. By following these guidelines, you will contribute to maintaining a coherent system of rules that evolves with the technologies it supports.