Skip to content
Back to skills

Config Skills

ASecurity

Configuration module patterns for LlamaFarm. Covers Pydantic v2 models, JSONSchema generation, YAML processing, and validation.

  • 838 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 20, 2026
ai-agentspythonbashexpresstestingapidatabasesecurity

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 20, 2026

npx -y skills add llama-farm/llamafarm --skill config-skills --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Config Skills?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Config Skills
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/llama-farm-config-skills/badge)](https://www.skillsdirectory.com/skills/llama-farm-config-skills)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: config-skills
description: Configuration module patterns for LlamaFarm. Covers Pydantic v2 models, JSONSchema generation, YAML processing, and validation.
allowed-tools: Read, Grep, Glob
user-invocable: false
---

# Config Skills for LlamaFarm

Specialized patterns and best practices for the LlamaFarm configuration module (`config/`).

## Module Overview

The config module provides YAML/TOML/JSON configuration loading with JSONSchema validation:

| File | Purpose |
|------|---------|
| `datamodel.py` | Generated Pydantic v2 models from JSONSchema |
| `schema.yaml` | Source JSONSchema with `$ref` references |
| `compile_schema.py` | Dereferences `$ref` to create `schema.deref.yaml` |
| `generate_types.py` | Generates Python types via `datamodel-codegen` |
| `validators.py` | Custom validators beyond JSONSchema capabilities |
| `helpers/loader.py` | Config loading, saving, and format detection |
| `helpers/generator.py` | Template-based config generation |

## Links to Shared Skills

This module follows Python conventions from the shared skills:

| Topic | Link | Key Relevance |
|-------|------|---------------|
| Patterns | [python-skills/patterns.md](../python-skills/patterns.md) | Pydantic v2, dataclasses |
| Typing | [python-skills/typing.md](../python-skills/typing.md) | Type hints, constrained types |
| Testing | [python-skills/testing.md](../python-skills/testing.md) | Pytest fixtures, temp files |
| Errors | [python-skills/error-handling.md](../python-skills/error-handling.md) | Custom exceptions |
| Security | [python-skills/security.md](../python-skills/security.md) | Path traversal prevention |

## Framework-Specific Checklists

| Checklist | Description |
|-----------|-------------|
| [pydantic.md](pydantic.md) | Pydantic v2 configuration patterns, nested models, constraints |
| [jsonschema.md](jsonschema.md) | JSONSchema generation, dereferencing, validation |

## Tech Stack

- **Python**: 3.11+
- **Pydantic**: v2 with `ConfigDict`, `Field`, constrained types
- **JSONSchema**: Draft-07 with `$ref` dereferencing via `jsonref`
- **YAML**: `ruamel.yaml` for comment-preserving read/write
- **Code Generation**: `datamodel-codegen` for schema-to-Pydantic

## Key Patterns

### Generated Pydantic Models

The `datamodel.py` file is auto-generated from JSONSchema:

```python
# Generated by datamodel-codegen from schema.deref.yaml
from pydantic import BaseModel, ConfigDict, Field, conint, constr

class Database(BaseModel):
    model_config = ConfigDict(extra="forbid")
    name: constr(pattern=r"^[a-z][a-z0-9_]*$", min_length=1, max_length=50)
    type: Type
    config: dict[str, Any] | None = Field(None, description="Database-specific configuration")
```

### Custom Validators for Cross-Field Constraints

JSONSchema draft-07 cannot express all constraints. Custom validators extend validation:

```python
def validate_llamafarm_config(config_dict: dict[str, Any]) -> None:
    """Validate constraints beyond JSONSchema (uniqueness, references)."""
    # Check for duplicate prompt names
    prompt_names = [p.get("name") for p in config_dict.get("prompts", [])]
    duplicates = [name for name in prompt_names if prompt_names.count(name) > 1]
    if duplicates:
        raise ValueError(f"Duplicate prompt set names: {', '.join(set(duplicates))}")
```

### Comment-Preserving YAML with ruamel.yaml

Configuration files preserve user comments when modified:

```python
from ruamel.yaml import YAML
from ruamel.yaml.comments import CommentedMap

def _get_ruamel_yaml() -> YAML:
    yaml_instance = YAML()
    yaml_instance.preserve_quotes = True
    yaml_instance.indent(mapping=2, sequence=4, offset=2)
    return yaml_instance
```

## Directory Structure

```
config/
├── pyproject.toml       # UV-managed dependencies
├── schema.yaml          # Source JSONSchema with $ref
├── schema.deref.yaml    # Dereferenced schema (generated)
├── datamodel.py         # Pydantic models (generated)
├── compile_schema.py    # Schema compilation script
├── generate_types.py    # Type generation script
├── validators.py        # Custom validation beyond JSONSchema
├── validate_config.py   # CLI validation wrapper
├── __init__.py          # Public API exports
├── helpers/
│   ├── loader.py        # Config loading/saving
│   └── generator.py     # Template-based generation
├── templates/
│   └── default.yaml     # Default config template
└── tests/
    ├── conftest.py      # Shared fixtures
    └── test_*.py        # Test modules
```

## Workflow: Schema Changes

When modifying the configuration schema:

1. **Edit** `schema.yaml` (or referenced schemas like `../rag/schema.yaml`)
2. **Run** `nx run generate-types` to compile and generate types
3. **Update** `validators.py` if new cross-field constraints are needed
4. **Test** with `uv run pytest config/tests/`

## Common Commands

```bash
# Generate types from schema
nx run generate-types

# Validate a config file
uv run python config/validate_config.py path/to/llamafarm.yaml --verbose

# Run tests
uv run pytest config/tests/ -v

# Lint and format
ruff check config/ --fix
ruff format config/
```

Files in this skill

  • SKILL.md5.1 KB
  • jsonschema.md12.6 KB
  • pydantic.md11.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.