Project Configuration Structure
Project Configuration Structure¶
Project configuration is stored in .prodigy/config.yml within your project repository. These settings override global configuration for this specific project and are typically committed to version control (except for secrets).
Location¶
- File:
.prodigy/config.yml(in project root) - Created: Manually or via
prodigy init - Format: YAML
- Version Control: Committed to git (recommended, except for secrets)
Fields¶
name (required)¶
Type: String Default: None (required field)
Project identifier used in logs, events, and UI.
description¶
Type: String (optional) Default: None
Human-readable project description.
version¶
Type: String (optional) Default: None
Project version (semantic versioning recommended).
spec_dir¶
Type: Path (optional)
Default: specs
Directory containing Prodigy specification files.
claude_api_key¶
Type: String (optional) Default: None (inherits from global config or environment)
Project-specific Claude API key. Overrides global config and is overridden by environment variable.
Security Warning: Do NOT commit API keys to version control. Use environment variables or .prodigy/config.local.yml (gitignored) instead.
auto_commit¶
Type: Boolean (optional)
Default: Inherits from global config (default: true)
Whether to automatically commit changes after successful command execution.
variables¶
Type: Object (optional)
Default: {}
Project-specific variables available in workflows and commands.
variables:
deploy_branch: production
test_timeout: 300
feature_flags:
new_ui: true
beta_features: false
These variables can be referenced in workflows using ${variable_name} syntax.
Note: For workflow-level environment variables (with secrets, profiles, and step-level overrides), use the env: block in workflow files instead. See Environment Variables for details.
storage¶
Type: Object (optional) Default: Inherits from global config
Project-specific storage configuration. See Storage Configuration for details.
Complete Example¶
# .prodigy/config.yml
name: prodigy
description: "Workflow orchestration tool for Claude Code"
version: "0.1.0"
spec_dir: specs
auto_commit: true
variables:
default_branch: master
test_suite: full
timeout_seconds: 600
Secrets Management¶
For sensitive values like API keys, use one of these approaches:
Option 1: Environment Variables (Recommended)¶
Option 2: Local Config File (Not Committed)¶
Create .prodigy/config.local.yml and add it to .gitignore:
Option 3: Secret Management Service¶
Use a secret management service (AWS Secrets Manager, HashiCorp Vault, etc.) and retrieve the key at runtime via environment variables.
Relationship to Global Config¶
Project config overrides global config on a per-field basis:
- Fields specified in project config replace global config values
- Fields NOT specified in project config inherit global config values
- See Configuration Precedence Rules
Example:
# .prodigy/config.yml (project)
name: my-project
log_level: debug # Override global
# auto_commit and max_concurrent_specs inherited from global
Result: Project uses log_level: debug but inherits auto_commit: true and max_concurrent_specs: 1 from global config.
Project Variables in Workflows¶
Variables defined in project config are available in workflows:
# .prodigy/config.yml
name: my-project
variables:
environment: staging
api_url: https://staging.api.example.com
# .prodigy/workflow.yml
commands:
- name: deploy
args: ["${environment}"]
options:
api_url: "${api_url}"
Creating Project Config¶
Initialize a new project:
cd my-project
mkdir -p .prodigy
cat > .prodigy/config.yml << 'EOF'
name: my-project
auto_commit: true
EOF
Or use the init command (if available):