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.
- 🔄 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
| 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 |
npm install -g dotagent
# or
pnpm add -g dotagent# 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# 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# Auto-detect format
dotagent convert .github/copilot-instructions.md
# Specify format explicitly
dotagent convert my-rules.md -f cursor| 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 |
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 errorsAnd 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 endpointsNested 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 componentsDotAgent 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
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
<!-- .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| 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 |
# Export including private rules
dotagent export --include-private
# Import but skip private rules
dotagent import . --skip-privateWhen 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.mdimport {
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')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
}parseAgentMarkdown(markdown: string): RuleBlock[]- Parse HTML-directive formatparseFenceEncodedMarkdown(markdown: string): RuleBlock[]- Parse fence-encoded format
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
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
# Install dependencies
pnpm install
# Build
pnpm build
# Run tests
pnpm test
# Development mode
pnpm devMIT
Contributions are welcome! Please feel free to submit a Pull Request.
- 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