moai-adk-main/src/moai_adk/templates/.claude/skills/moai-project-config-manager/SKILL.md
Complete config.json CRUD operations with validation, merge strategy, and error recovery. Use for project initialization, setting updates, and configuration management with intelligent backup and recovery.
npx skillsauth add ajbcoding/claude-skill-eval moai-project-config-managerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Project Configuration Management Specialist
Primary Agent: alfred
Secondary Agents: none
Version: 4.0.0
Keywords: project, config, manager, validation, crud
Core Purpose: Centralized management of all MoAI project configuration operations with robust validation and intelligent backup strategies.
Key Capabilities:
Quick Usage:
# Interactive configuration update
Skill("moai-project-config-manager")
# Programmatic update
updates = {"language": {"conversation_language": "en"}}
Skill("moai-project-config-manager", action="update", changes=updates)
# Validation check
result = Skill("moai-project-config-manager", action="validate")
Configuration Structure:
{
"language": {
"conversation_language": "en|ko|ja|zh",
"conversation_language_name": "English|한국어|日本語|中文",
"agent_prompt_language": "english|localized"
},
"user": {
"nickname": "string (max 20 chars)"
},
"github": {
"auto_delete_branches": "boolean",
"spec_git_workflow": "feature_branch|develop_direct|per_spec"
},
"report_generation": {
"enabled": "boolean",
"auto_create": "boolean",
"user_choice": "Enable|Minimal|Disable"
},
"stack": {
"selected_domains": ["frontend", "backend", "data", "devops", "security"]
}
}
Essential Operations:
1. Load Configuration:
def load_config():
"""Load configuration with error handling"""
try:
with open(".moai/config/config.json", "r") as f:
return json.load(f)
except FileNotFoundError:
return create_default_config()
except json.JSONDecodeError as e:
raise ConfigError(f"Invalid JSON in config file: {e}")
2. Update Configuration:
def update_config(updates):
"""Update configuration with merge strategy"""
config = load_config()
# Create backup
backup_path = create_backup()
# Merge changes
new_config = merge_config(config, updates)
# Validate and save
validate_config(new_config)
save_config_safely(new_config)
return new_config
3. Validation Rules:
def validate_config(config):
"""Validate configuration structure and values"""
errors = []
# Language validation
valid_languages = ["en", "ko", "ja", "zh"]
if config.get("language", {}).get("conversation_language") not in valid_languages:
errors.append("Invalid conversation language")
# Nickname validation
nickname = config.get("user", {}).get("nickname", "")
if len(nickname) > 20:
errors.append("Nickname exceeds 20 characters")
# GitHub workflow validation
valid_workflows = ["feature_branch", "develop_direct", "per_spec"]
if config.get("github", {}).get("spec_git_workflow") not in valid_workflows:
errors.append("Invalid SPEC git workflow")
return errors
4. Interactive Update Workflow:
# Phase 1: Display current settings
display_current_config()
# Phase 2: Select sections to modify
selected_sections = ask_user_selections([
"🌍 Language & Agent Prompt Language",
"👤 Nickname",
"🔧 GitHub Settings",
"📊 Report Generation",
"🎯 Project Domains"
])
# Phase 3: Collect new values
updates = collect_updates_for_sections(selected_sections)
# Phase 4: Merge and save
update_config(updates)
Advanced Configuration Patterns:
1. Configuration Templates:
CONFIG_TEMPLATES = {
"frontend_focus": {
"stack": {"selected_domains": ["frontend", "security"]},
"github": {"spec_git_workflow": "feature_branch"}
},
"full_stack": {
"stack": {"selected_domains": ["frontend", "backend", "devops"]},
"github": {"spec_git_workflow": "develop_direct"}
},
"data_science": {
"stack": {"selected_domains": ["data", "backend"]},
"report_generation": {"enabled": True, "auto_create": True}
}
}
2. Configuration Migration:
def migrate_config(from_version, to_version):
"""Migrate configuration between versions"""
config = load_config()
if from_version < "4.0.0" and to_version >= "4.0.0":
# Add new report_generation section
if "report_generation" not in config:
config["report_generation"] = {
"enabled": True,
"auto_create": False,
"user_choice": "Minimal"
}
return config
3. Configuration Profiles:
def save_profile(name, config_subset):
"""Save configuration profile for reuse"""
profile_path = f".moai/config/profiles/{name}.json"
os.makedirs(os.path.dirname(profile_path), exist_ok=True)
with open(profile_path, "w") as f:
json.dump(config_subset, f, indent=2)
def load_profile(name):
"""Load and apply configuration profile"""
profile_path = f".moai/config/profiles/{name}.json"
with open(profile_path, "r") as f:
profile_config = json.load(f)
return update_config(profile_config)
4. Configuration Validation with Context:
def validate_with_context(config, project_context):
"""Validate configuration with project context"""
errors = validate_config(config)
# Context-aware validation
if project_context.get("has_github", False):
if not config.get("github", {}).get("auto_delete_branches"):
errors.append("GitHub projects should enable auto-delete branches")
if "frontend" in config.get("stack", {}).get("selected_domains", []):
if config.get("report_generation", {}).get("user_choice") == "Disable":
errors.append("Frontend projects benefit from report generation")
return errors
5. Performance Optimization:
def optimize_config_for_performance(config):
"""Optimize configuration for better performance"""
optimized = copy.deepcopy(config)
# Enable minimal reports for better performance
if optimized.get("report_generation", {}).get("user_choice") == "Enable":
optimized["report_generation"]["user_choice"] = "Minimal"
# Optimize workflow selection
if optimized.get("github", {}).get("spec_git_workflow") == "per_spec":
optimized["github"]["spec_git_workflow"] = "feature_branch"
return optimized
Integration Points:
With Alfred Commands:
/alfred:0-project - Project initialization and configuration setup/alfred:1-plan - Access configuration for planning decisions/alfred:2-run - Use configuration during execution/alfred:3-sync - Update configuration based on project changesWith Other Skills:
moai-alfred-ask-user-questions - Interactive setting collectionmoai-skill-factory - Skill configuration managementError Handling Reference:
Common Error Types:
class ConfigError(Exception):
"""Configuration management errors"""
pass
class ValidationError(ConfigError):
"""Configuration validation errors"""
pass
class BackupError(ConfigError):
"""Backup operation errors"""
pass
class RestoreError(ConfigError):
"""Restore operation errors"""
pass
File Structure:
.moai/
├── config/
│ ├── config.json # Main configuration
│ ├── backup.*.json # Automatic backups
│ └── profiles/ # Configuration profiles
│ ├── frontend.json
│ └── fullstack.json
└── logs/
└── config-changes.log # Configuration change log
Best Practices:
v4.0.0 (2025-11-13)
v3.0.0 (2025-11-12)
v2.0.0 (2025-11-05)
v1.0.0 (2025-10-15)
Generated with: MoAI-ADK Skill Factory v4.0
Last Updated: 2025-11-13
Maintained by: Primary Agent (alfred)
Optimization: 63% size reduction while preserving all functionality
content-media
Download YouTube video transcripts when user provides a YouTube URL or asks to download/get/fetch a transcript from YouTube. Also use when user wants to transcribe or get captions/subtitles from a YouTube video.
development
Transform learning content (like YouTube transcripts, articles, tutorials) into actionable implementation plans using the Ship-Learn-Next framework. Use when user wants to turn advice, lessons, or educational content into concrete action steps, reps, or a learning quest.
tools
Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc. There are 10 pre-set themes with colors/fonts that you can apply to any artifact that has been creating, or can generate a new theme on-the-fly.
tools
Replace with description of the skill and when Claude should use it.