#            Available: ['candidate_generation', 'reasoning_system', ...]"
```

## Best Practices

<Info>
  **Tips for effective prompt customization:**

  1. **List keys first** – Always use `list_prompts()` to see available keys before overriding
  2. **Keep placeholders** – If a prompt has `{variables}`, keep them in your override
  3. **Test incrementally** – Override one prompt at a time to isolate effects
  4. **Use callable for complex logic** – Dict is simpler, but callable is more powerful
  5. **Don't break JSON** – Some prompts expect JSON output; maintain that structure
</Info>

## Full Example

```python
from opik_optimizer import MetaPromptOptimizer
from opik_optimizer.utils.prompt_library import PromptLibrary

def my_customizations(prompts: PromptLibrary) -> None:
    """Customize prompts for a code generation task."""

    # 1. Add coding focus to reasoning
    prompts.set(
        "reasoning_system",
        "You are an expert code prompt engineer.\n\n" + prompts.get("reasoning_system")
    )

    # 2. Enforce Python-specific patterns
    prompts.set(
        "candidate_generation",
        prompts.get("candidate_generation") + """

ADDITIONAL REQUIREMENTS:
- Prompts should encourage well-documented code
- Prefer type hints and docstrings
- Emphasize error handling and edge cases
"""
    )