Dotagent
#dotagent
Multi-file AI agent configuration manager with .agent directory support. Maintain a single source of truth for AI coding assistant rules across Claude Code, VS Code Copilot, Cursor, Cline, Windsurf, Zed, Amazon Q Developer, and more.
#Features
- 🔄 Import rules from any supported IDE/tool format
- 📝 Convert to a unified
.agent/directory structure - 🚀 Export back to all supported formats
- 📁 Nested folders support for better organization
- 🛠️ CLI tool for easy automation
- 📦 TypeScript API for programmatic use
- 🎨 Color-coded output for better readability
- 👁️ Dry-run mode to preview operations without changes
- 💡 Smart error messages with actionable hints
#Supported Formats
| Tool/IDE | Rule File | Format | Slug |
|---|---|---|---|
| Agent (dotagent) | .agent/**/*.md |
Markdown with YAML frontmatter | agent |
| Claude Code | CLAUDE.md |
Plain Markdown | claude |
| VS Code (Copilot) | .github/copilot-instructions.md |
Plain Markdown | copilot |
| Cursor | .cursor/**/*.mdc, .cursor/**/*.md |
Markdown with YAML frontmatter | cursor |
| Cline | .clinerules or .clinerules/*.md |
Plain Markdown | cline |
| Windsurf | .windsurfrules |
Plain Markdown | windsurf |
| Zed | .rules |
Plain Markdown | zed |
| OpenAI Codex | AGENTS.md |
Plain Markdown | codex |
| OpenCode | AGENTS.md |
Plain Markdown | opencode |
| Aider | CONVENTIONS.md |
Plain Markdown | aider |
| Gemini | GEMINI.md |
Plain Markdown | gemini |
| Qodo | best_practices.md |
Plain Markdown | qodo |
| Amazon Q Developer | .amazonq/rules/*.md |
Plain Markdown | amazonq |
| JetBrains Junie | .junie/guidelines.md |
Plain Markdown | junie |
| Roo Code | .roo/rules/*.md |
Markdown with YAML frontmatter | roo |
#Installation
npm install -g dotagent # or pnpm add -g dotagent
#CLI Usage
#Import all rules from a repository
# Import from current directory (creates .agent/ directory) dotagent import . # Import from specific path dotagent import /path/to/repo # Preview without making changes dotagent import . --dry-run
#Export .agent/ directory to formats
# Interactive export (shows menu to select format) dotagent export # Export to specific format (non-interactive) dotagent export --format copilot # Export to multiple formats (non-interactive) dotagent export --formats copilot,claude,cursor # Export all formats at once dotagent export --formats all # Export from specific directory dotagent export /path/to/repo --format copilot # Include private rules in export dotagent export --include-private --format copilot # Auto-update gitignore (skip prompt) dotagent export --format copilot --gitignore # Skip gitignore prompt (useful for CI/CD) dotagent export --format copilot --no-gitignore # Preview without making changes dotagent export --dry-run
#Convert a specific file
# Auto-detect format dotagent convert .github/copilot-instructions.md # Specify format explicitly dotagent convert my-rules.md -f cursor
#CLI Flags Reference
| Flag | Short | Description |
|---|---|---|
--help |
-h |
Show help message |
--format |
-f |
Export to single format (copilot|cursor|cline|windsurf|zed|codex|aider|claude|gemini|qodo|junie|roo|opencode) |
--formats |
Export to multiple formats (comma-separated list) | |
--output |
-o |
Output directory path |
--overwrite |
-w |
Overwrite existing files |
--dry-run |
-d |
Preview operations without making changes |
--include-private |
Include private rules in export | |
--skip-private |
Skip private rules during import | |
--gitignore |
Auto-update gitignore (skip prompt) | |
--no-gitignore |
Skip gitignore update prompt |
#Unified Format
The .agent/ directory contains .md files (Markdown with YAML frontmatter) to organize rules, supporting nested folders:
--- id: core-style title: Core Style Guidelines alwaysApply: true priority: high --- ## Core Style Guidelines 1. Use **Bazel** for Java builds 2. JavaScript: double quotes, tabs for indentation 3. All async functions must handle errors
And another file .agent/api-safety.md:
--- id: api-safety title: API Safety Rules scope: src/api/** manual: true --- ## API Safety Rules - Never log PII - Validate all inputs with zod - Rate limit all endpoints
Nested folders are supported - for example .agent/frontend/components.md:
--- id: frontend/components title: Component Guidelines scope: src/components/** --- ## Component Guidelines - Use functional components with hooks - Follow atomic design principles - Include unit tests for all components
#Private Rules
DotAgent supports private/local rules that are automatically excluded from exports and version control. This is useful for:
- Personal preferences that shouldn't be shared with the team
- Client-specific requirements
- Temporary experimental rules
- Sensitive information or internal processes
#Naming Convention
Private rules are identified by:
- Filename suffix:
*.local.md(e.g.,api-keys.local.md) - Directory: Files in
/private/subdirectories - Frontmatter:
private: truein YAML frontmatter
#Examples
<!-- .agent/team-rules.md (PUBLIC) --> --- id: team-rules --- # Team Standards Shared team guidelines
<!-- .agent/my-preferences.local.md (PRIVATE) --> --- id: my-preferences --- # My Personal Preferences These won't be exported
<!-- .agent/private/client-specific.md (PRIVATE) --> --- id: client-rules --- # Client-Specific Rules Confidential requirements
#Private Rules in Other Formats
| Format | Public File | Private File |
|---|---|---|
| Copilot | .github/copilot-instructions.md |
.github/copilot-instructions.local.md |
| Cursor | .cursor/rules/*.mdc |
.cursor/rules/*.local.mdc |
| Cline | .clinerules |
.clinerules.local |
| Windsurf | .windsurfrules |
.windsurfrules.local |
| Zed | .rules |
.rules.local |
| Claude | CLAUDE.md |
CLAUDE.local.md |
| OpenCode | AGENTS.md |
AGENTS.local.md |
| Gemini | GEMINI.md |
GEMINI.local.md |
| Junie | .junie/guidelines.md |
.junie/guidelines.local.md |
| Roo Code | .roo/rules/*.md |
.roo/rules/*.local.md |
#CLI Options
# Export including private rules dotagent export --include-private # Import but skip private rules dotagent import . --skip-private
#Automatic .gitignore
When you run dotagent export, it automatically updates your .gitignore with patterns for private files:
# Added by dotagent: ignore private AI rule files .agent/**/*.local.md .agent/private/** .github/copilot-instructions.local.md .cursor/rules/**/*.local.mdc .cursor/rules-private/** .clinerules.local .clinerules/private/** .windsurfrules.local .rules.local AGENTS.local.md CONVENTIONS.local.md CLAUDE.local.md GEMINI.local.md .junie/guidelines.local.md .roo/rules/*.local.md
#Programmatic Usage
import { importAll, importAgent, exportToAgent, exportAll } from 'dotagent' // Import all rules from a repository const { results, errors } = await importAll('/path/to/repo') // Import from .agent directory const { rules } = await importAgent('/path/to/repo/.agent') // Export to .agent directory await exportToAgent(rules, '/path/to/repo') // Export to all formats exportAll(rules, '/path/to/repo')
#API Reference
#Types
interface RuleBlock { metadata: RuleMetadata content: string position?: Position } interface RuleMetadata { id: string alwaysApply?: boolean scope?: string | string[] triggers?: string[] manual?: boolean priority?: 'high' | 'medium' | 'low' description?: string [key: string]: unknown }
#Parser Functions
parseAgentMarkdown(markdown: string): RuleBlock[]- Parse HTML-directive formatparseFenceEncodedMarkdown(markdown: string): RuleBlock[]- Parse fence-encoded format
#Import Functions
importAll(repoPath: string): Promise<ImportResults>- Auto-detect and import all formatsimportCopilot(filePath: string): ImportResult- Import VS Code Copilot formatimportCursor(rulesDir: string): ImportResult- Import Cursor MDC filesimportCline(rulesPath: string): ImportResult- Import Cline rulesimportWindsurf(filePath: string): ImportResult- Import Windsurf rulesimportZed(filePath: string): ImportResult- Import Zed rulesimportCodex(filePath: string): ImportResult- Import OpenAI Codex formatimportOpenCode(filePath: string): ImportResult- Import OpenCode formatimportGemini(filePath: string): ImportResult- Import Gemini CLI formatimportQodo(filePath: string): ImportResult- Import Qodo best practicesimportAmazonQ(rulesDir: string): ImportResult- Import Amazon Q Developer rulesimportJunie(filePath: string): ImportResult- Import JetBrains Junie guidelinesimportRoo(rulesDir: string): ImportResult- Import Roo Code rules
#Export Functions
toAgentMarkdown(rules: RuleBlock[]): string- Convert to unified formatexportAll(rules: RuleBlock[], repoPath: string): void- Export to all formatsexportToCopilot(rules: RuleBlock[], outputPath: string): voidexportToCursor(rules: RuleBlock[], outputDir: string): voidexportToCline(rules: RuleBlock[], outputPath: string): voidexportToWindsurf(rules: RuleBlock[], outputPath: string): voidexportToZed(rules: RuleBlock[], outputPath: string): voidexportToCodex(rules: RuleBlock[], outputPath: string): voidexportToOpenCode(rules: RuleBlock[], outputPath: string): voidexportToAmazonQ(rules: RuleBlock[], outputDir: string): voidexportToGemini(rules: RuleBlock[], outputPath: string): voidexportToQodo(rules: RuleBlock[], outputPath: string): voidexportToJunie(rules: RuleBlock[], outputPath: string): voidexportToRoo(rules: RuleBlock[], outputDir: string): void
#Development
# Install dependencies pnpm install # Build pnpm build # Run tests pnpm test # Development mode pnpm dev
#License
MIT
#Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
#Roadmap
- Support for more IDE formats
- Web-based converter UI
- GitHub Action for automatic sync
- Support for team rule templates
- Validation and linting of rules
- Rule inheritance and composition