A unified configuration system for AI agents across multiple providers (Devin, Windsurf, Claude, etc.). This tool provides a single source of truth for AI agent settings, skills, MCP servers, and rules.
- Unified Configuration: Single config file for all AI providers
- XDG-Compliant: Follows Linux/macOS/Windows directory standards
- Migration Support: Automatically migrates existing provider configs
- Project-Local: Per-project configuration with
.ai/directory - Shared Resources: MCP servers and skills shared across providers
- Provider Overrides: Provider-specific settings when needed
curl -fsSL https://raw.githubusercontent.com/DevArtsLab/universal-ai-config/main/install.sh | bashThis will:
- Download and install the package
- Set up the
ai-configcommand - Detect and migrate existing configurations
- Initialize the unified config structure
# Clone the repository
git clone https://github.com/DevArtsLab/universal-ai-config.git
cd universal-ai-config
# Install via pip
pip install -e .Initialize a fresh configuration:
ai-config initInitialize for a project:
cd your-project
ai-config init-projectMigrate from existing provider configurations:
ai-config migrateMigrate project-specific configs:
cd your-project
ai-config migrate --project~/.agents/ # All agent data in one place
├── config/
│ ├── config.json # Unified config (all providers read this)
│ ├── mcp-config.json # MCP servers
│ └── AGENTS.md # Shared rules
├── skills/ # Shared skills
│ └── example-skill/
├── data/ # Long-term memory, datasets, plugins
│ ├── memory/
│ └── plugins/
├── state/ # Logs, history, active sessions
│ ├── logs/
│ └── history/
└── cache/ # Model caches, isolated environments
├── models/
└── venv/
.ai/ # In repository root
├── config.json # Shared team settings
├── config.local.json # Personal overrides (gitignored)
├── skills/ # Project-specific skills
├── mcp-config.json # Project MCP servers
├── mcp-config.local.json # Project MCP overrides (gitignored)
└── AGENTS.md # Project rules
{
"shared": {
"permissions": {
"allow": ["Read(**)", "Exec(git)"],
"deny": ["Exec(sudo)"],
"ask": ["Write(**/.env*)"]
}
},
"providers": {
"devin": {
"permissions": {
"allow": ["Read(**)", "Exec(git)", "Exec(npm)"]
}
}
},
"skills": {
"enabled": [],
"paths": ["~/.agents/skills/", ".ai/skills/"]
}
}MCP servers are kept in a separate file:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"]
}
}
}Initialize new configuration structure.
ai-config init # Initialize new config
ai-config init --fresh # Remove existing and start freshMigrate existing provider configurations.
ai-config migrate # Migrate all detected providers
ai-config migrate devin # Migrate specific provider
ai-config migrate --project # Migrate project configsValidate configuration setup.
ai-config validateShow current configuration status.
ai-config statusInitialize .ai/ directory in current project.
ai-config init-projectGet configuration for a specific provider.
ai-config get-config devinSet configuration value for a provider.
ai-config set-config devin model your-model-name
ai-config set-config devin theme_mode darkEach AI provider should read from the unified configuration:
from universal_ai_config import UnifiedConfig, AgentEnv
# Initialize
env = AgentEnv()
config = UnifiedConfig(env)
# Get provider-specific config
devin_config = config.get_provider_config("devin")
# Get merged config (user + project)
merged_config = config.get_merged_config(cwd=Path.cwd())The tool automatically detects and migrates from:
- Devin CLI:
~/.config/devin/config.json,.devin/config.json - Windsurf:
~/.windsurf/config.json,.windsurf/config.json - Claude:
~/.config/claude/config.json,.claude/config.json
Legacy configs are backed up with .backup extension.
- Linux: XDG Base Directory Specification
- macOS: XDG paths with
~/.configfallback - Windows:
%APPDATA%and%LOCALAPPDATA%paths
-
Secrets Management: Never store API keys in config files. Use system keyrings or environment variables.
-
Project Config: Use
.ai/config.jsonfor team settings and.ai/config.local.jsonfor personal overrides. -
Shared Resources: Put common MCP servers and skills in user config; project-specific ones in
.ai/. -
Validation: Always run
ai-config validateafter making changes.
git clone https://github.com/DevArtsLab/universal-ai-config.git
cd universal-ai-config
pip install -e ".[dev]"pytestblack universal_ai_config/mypy universal_ai_config/MIT License - see LICENSE file for details.
Contributions welcome! Please read our contributing guidelines before submitting PRs.
- GitHub Issues: https://github.com/DevArtsLab/universal-ai-config/issues
- Documentation: https://github.com/DevArtsLab/universal-ai-config/wiki