Skip to main content
skill CX Codex

python-configuration — Claude Code skill: setup and install

This skill moves Python settings into environment variables and validates typed configuration. Use it for secrets and environment-specific behavior.

Install into Claude Code · Plugin marketplace All methods and platforms ↓
/plugin marketplace add wshobson/agents
/plugin install python-development@claude-code-workflows
Open on GitHub

What python-configuration does

The skill helps move URLs, keys, feature flags, and other environment-specific values out of source code. It uses a central settings class with pydantic-settings, loads values from environment variables or .env, and validates required fields when the application starts.

The included patterns cover database settings, Redis, API keys, and dev/staging/prod environments. Local defaults can make development easier, while secrets remain required. Variables use prefixes such as DB_ and REDIS_; the .env file should be added to .gitignore.

Install it when configuration is scattered through a Python project or the same code must run in several environments. A small script with no environment-based settings does not need this skill.

What it helps with

  • move Python settings into environment variables
  • validate required configuration at startup
  • set up typed settings with pydantic-settings
  • separate dev/staging/prod configuration
  • keep secrets out of source code

Example prompts for the agent

  • Set up this project with pydantic-settings and environment variables.
  • Move DATABASE_URL and API_KEY from the code into a typed settings class.
  • Check required settings at startup and add local development defaults.

How to install python-configuration

1Plugin marketplace

/plugin marketplace add wshobson/agents
/plugin install python-development@claude-code-workflows

This installs the whole python-development plugin with all its skills

2Skills CLI (Vercel)

npx skills add wshobson/agents --skill python-configuration -a claude-code

3Manually: put the files in place

~/.claude/skills/python-configuration/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/python-configuration/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

From the same set304

The whole set →
python-pro A subagent for modern Python 3.12+ development, async code, testing, APIs, and performance work. Use it when a project needs deeper Python guidance. CX Codex 11,689installs gitops-workflow This skill guides Kubernetes GitOps setup with ArgoCD or Flux. Use it to deploy from Git and keep cluster state aligned with declarative configuration. CX Codex 11,650installs python-observability A skill that gives your agent Python observability patterns: structured logging, Prometheus metrics, distributed tracing. Useful when production breaks and the logs don't tell you where. CX Codex 11,547installs shellcheck-configuration This skill guides ShellCheck setup and use for shell script analysis. Use it when adding CI/CD linting, fixing warnings, or checking script portability. CX Codex 11,533installs cost-optimization This skill reviews AWS, Azure, GCP, and OCI spending, then guides rightsizing, tagging, pricing choices, and budget controls. CX Codex 11,506installs embedding-strategies This skill helps choose embedding models, tune chunking, and assess quality for semantic search and RAG projects. CX Codex 11,391installs go-concurrency-patterns A Go skill for goroutines, channels, synchronization, and context. Use it when building worker pools or tracking down race conditions. CX Codex 11,270installs billing-automation This skill helps build subscription billing, invoicing, and failed-payment recovery. Use it for SaaS products and services with recurring charges. CX Codex 11,245installs

Similar

Nearby in Backend and APIs

Everything for Backend and APIs →

Questions about python-configuration

How do I install python-configuration in Claude Code?

Run npx skills add wshobson/agents --skill python-configuration -a claude-code. The skill file will be placed at ~/.claude/skills/python-configuration/SKILL.md.

What does python-configuration do?

It covers Python configuration through environment variables and typed pydantic-settings classes. The patterns load values, validate required settings at startup, and keep secrets outside the codebase.

Do I need a .env file to use this skill?

The skill uses .env as a local development option with pydantic-settings. Add the file to .gitignore and keep secrets without default values.

Source text

SKILL.md · MIT
---
name: python-configuration
description: Python configuration management via environment variables and typed settings. Use when externalizing config, setting up pydantic-settings, managing secrets, or implementing environment-specific behavior.
---

# Python Configuration Management

Externalize configuration from code using environment variables and typed settings. Well-managed configuration enables the same code to run in any environment without modification.

## When to Use This Skill

- Setting up a new project's configuration system
- Migrating from hardcoded values to environment variables
- Implementing pydantic-settings for typed configuration
- Managing secrets and sensitive values
- Creating environment-specific settings (dev/staging/prod)
- Validating configuration at application startup

## Core Concepts

### 1. Externalized Configuration

All environment-specific values (URLs, secrets, feature flags) come from environment variables, not code.

### 2. Typed Settings

Parse and validate configuration into typed objects at startup, not scattered throughout code.

### 3. Fail Fast

Validate all required configuration at application boot. Missing config should crash immediately with a clear message.

### 4. Sensible Defaults

Provide reasonable defaults for local development while requiring explicit values for sensitive settings.

## Quick Start

```python
from pydantic_settings import BaseSettings
from pydantic import Field

class Settings(BaseSettings):
    database_url: str = Field(alias="DATABASE_URL")
    api_key: str = Field(alias="API_KEY")
    debug: bool = Field(default=False, alias="DEBUG")

settings = Settings()  # Loads from environment
```

## Fundamental Patterns

### Pattern 1: Typed Settings with Pydantic

Create a central settings class that loads and validates all configuration.

```python
from pydantic_settings import BaseSettings
from pydantic import Field, PostgresDsn, ValidationError
import sys

class Settings(BaseSettings):
    """Application configuration loaded from environment variables."""

    # Database
    db_host: str = Field(alias="DB_HOST")
    db_port: int = Field(default=5432, alias="DB_PORT")
    db_name: str = Field(alias="DB_NAME")
    db_user: str = Field(alias="DB_USER")
    db_password: str = Field(alias="DB_PASSWORD")

    # Redis
    redis_url: str = Field(default="redis://localhost:6379", alias="REDIS_URL")

    # API Keys
    api_secret_key: str = Field(alias="API_SECRET_KEY")

    # Feature flags
    enable_new_feature: bool = Field(default=False, alias="ENABLE_NEW_FEATURE")

    model_config = {
        "env_file": ".env",
        "env_file_encoding": "utf-8",
    }

# Create singleton instance at module load
try:
    settings = Settings()
except ValidationError as e:
    print(f"Configuration error:\n{e}")
    sys.exit(1)
```

Import `settings` throughout your application:

```python
from myapp.config import settings

def get_database_connection():
    return connect(
        host=settings.db_host,
        port=settings.db_port,
        database=settings.db_name,
    )
```

### Pattern 2: Fail Fast on Missing Configuration

Required settings should crash the application immediately with a clear error.

```python
from pydantic_settings import BaseSettings
from pydantic import Field, ValidationError
import sys

class Settings(BaseSettings):
    # Required - no default means it must be set
    api_key: str = Field(alias="API_KEY")
    database_url: str = Field(alias="DATABASE_URL")

    # Optional with defaults
    log_level: str = Field(default="INFO", alias="LOG_LEVEL")

try:
    settings = Settings()
except ValidationError as e:
    print("=" * 60)
    print("CONFIGURATION ERROR")
    print("=" * 60)
    for error in e.errors():
        field = error["loc"][0]
        print(f"  - {field}: {error['msg']}")
    print("\nPlease set the required environment variables.")
    sys.exit(1)
```

A clear error at startup is better than a cryptic `None` failure mid-request.

### Pattern 3: Local Development Defaults

Provide sensible defaults for local development while requiring explicit values for secrets.

```python
class Settings(BaseSettings):
    # Has local default, but prod will override
    db_host: str = Field(default="localhost", alias="DB_HOST")
    db_port: int = Field(default=5432, alias="DB_PORT")

    # Always required - no default for secrets
    db_password: str = Field(alias="DB_PASSWORD")
    api_secret_key: str = Field(alias="API_SECRET_KEY")

    # Development convenience
    debug: bool = Field(default=False, alias="DEBUG")

    model_config = {"env_file": ".env"}
```

Create a `.env` file for local development (never commit this):

```bash
# .env (add to .gitignore)
DB_PASSWORD=local_dev_password
API_SECRET_KEY=dev-secret-key
DEBUG=true
```

### Pattern 4: Namespaced Environment Variables

Prefix related variables for clarity and easy debugging.

```bash
# Database configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=myapp
DB_USER=admin
DB_PASSWORD=secret

# Redis configuration
REDIS_URL=redis://localhost:6379
REDIS_MAX_CONNECTIONS=10

# Authentication
AUTH_SECRET_KEY=your-secret-key
AUTH_TOKEN_EXPIRY_SECONDS=3600
AUTH_ALGORITHM=HS256

# Feature flags
FEATURE_NEW_CHECKOUT=true
FEATURE_BETA_UI=false
```

Makes `env | grep DB_` useful for debugging.

## Detailed worked examples and patterns

Detailed sections (starting with `## Advanced Patterns`) live in `references/details.md`. Read that file when the navigation summary above is insufficient.

## Best Practices Summary

1. **Never hardcode config** - All environment-specific values from env vars
2. **Use typed settings** - Pydantic-settings with validation
3. **Fail fast** - Crash on missing required config at startup
4. **Provide dev defaults** - Make local development easy
5. **Never commit secrets** - Use `.env` files (gitignored) or secret managers
6. **Namespace variables** - `DB_HOST`, `REDIS_URL` for clarity
7. **Import settings singleton** - Don't call `os.getenv()` throughout code
8. **Document all variables** - README should list required env vars
9. **Validate early** - Check config correctness at boot time
10. **Use secrets_dir** - Support mounted secrets in containers

© Seth Hobson · MIT · wshobson/agents

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor