.agents/skills/yaml-config/SKILL.md
Governs the configuration.yaml file that serves as the single source of truth for all validation rules in the Skill System Foundry. Triggers when adding, modifying, or reviewing validation rules, limits, patterns, or reserved words. Also triggers when working with constants.py, yaml_parser.py, or any code that reads from configuration.yaml. Use this skill when asked to add a new validation check, change a limit or threshold, update reserved word lists, add SPDX license identifiers, modify regex patterns, or troubleshoot why a validation rule is not working as expected. Activates on mentions of configuration, validation rules, constants, thresholds, or pattern definitions.
npx skillsauth add milanhorvatovic/skill-system-foundry yaml-configInstall 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.
Governs the configuration.yaml file — the single source of truth for all validation rules, limits, patterns, and policy constants in the Skill System Foundry.
Every validation check in the codebase reads its parameters from this file. Rules are never hardcoded in Python. constants.py loads the YAML at startup and exposes values as module-level constants that the rest of the codebase imports.
configuration.yaml ← rules defined here (single source of truth)
↓
constants.py ← loads YAML, exposes as Python constants
↓
validation.py, references.py, bundling.py, ... ← import from constants
↓
validate_skill.py, audit_skill_system.py, ... ← entry points use lib
Changing a rule means editing one line in configuration.yaml. The change cascades automatically through constants.py into every script that references it.
The YAML is organized into top-level sections separated by comment headers:
# ============================================================
# Section Name
# ============================================================
section_key:
sub_key:
field: value
Current sections and their purposes:
| Section | Purpose |
|---|---|
| skill | All skill validation: name, description, body, compatibility, frontmatter keys, allowed-tools, metadata, license, directories |
| codex_config | Codex agents/openai.yaml schema validation |
| dependency_direction | Patterns detecting upward dependency violations |
| role_composition | Role minimum skill count and reference patterns |
| bundle | Bundle packaging: depth limits, description limits, targets, exclude patterns |
Place the rule in the correct section. Follow existing conventions:
max_length: 64, min_skills: 2_pattern: format_pattern: ^[a-z0-9]...$reserved_words, known_tools, exclude_patternsAdd an inline comment explaining non-obvious values:
# Upper bound on tool count — skills requesting too many tools
# likely need to be split. Increase if justified.
max_tools: 20
Import and assign in the appropriate section of constants.py:
# --- New Section (if needed) ---
_new = _config["new_section"]
NEW_CONSTANT = int(_new["some_value"])
Follow existing patterns:
_skill, _dep, _bundleint(...) for integersre.compile(...) for patternsfrozenset(...) for immutable setsdel at the end of the moduleImport from lib.constants:
from lib.constants import NEW_CONSTANT, LEVEL_FAIL
Never import from configuration.yaml directly — always go through constants.py.
Write tests in the corresponding tests/test_*.py file that verify the rule works at boundaries: at the limit, one over, and well over.
The repository uses a custom stdlib-only YAML parser (yaml_parser.py), not PyYAML. It supports a subset of YAML:
Supported:
- item)- key: value)>, >-) and literal (|, |-) block scalars# comment after a space)Not supported:
{key: value}, [item1, item2])&anchor, *alias)--- separators)Important: All scalar values are returned as strings. Numeric values must be explicitly converted in constants.py with int() or float(). Boolean values are strings "true" / "false".
Regex patterns with (?i) flags and backslash sequences (\b, \d) are preserved as-is — the parser performs no escape processing.
Use section headers with = separators to group related rules:
# ============================================================
# Section Name
# ============================================================
Use inline comments sparingly — only to explain why a value was chosen, not what it is:
# Good — explains the "why"
max_reference_depth: 25 # Prevents runaway traversal
# Bad — restates the key name
max_reference_depth: 25 # Maximum reference depth
snake_case (not kebab-case or camelCase)_patternmax_ or min_allow_implicit_invocation not disable_explicit_only:, #, {, })"*.pyc")- prefix, indented under the parent keyWhen adding validation rules, use the three-tier error level system:
[spec] — Agent Skills specification requirement (typically LEVEL_FAIL)[platform: X] — platform-specific restriction (typically LEVEL_WARN)[foundry] — foundry convention/recommendation (typically LEVEL_INFO or LEVEL_WARN)configuration.yamlint() in constants.py — the parser returns all scalars as strings[a, b, c]) that the custom parser does not supportdel at the end of constants.pyre moduleconfiguration.yaml but not exposing it in constants.pytools
Greets a recipient through one of two registered tones — formal or casual — by dispatching to a dedicated capability. Activates when the conversation asks for a tone-specific welcome or a switch between formal and casual greetings; use when comparing the two styles. Demonstrates the router pattern in the Skill System Foundry — a thin SKILL.md entry point routing to capability files, with allowed-tools declared in frontmatter so capability shell fences pass validation.
testing
Greets a single recipient with a friendly welcome message rendered in a formal or casual tone. Activates when the conversation asks to say hello or welcome someone; use when a minimal standalone skill is needed. Demonstrates the smallest valid standalone skill in the Skill System Foundry — required name and description frontmatter plus an optional metadata block — and how its layout passes validation.
testing
Designs and evolves AI-agnostic skill systems. Triggers on skill/capability creation, role definition, or router migration; use when auditing consistency or improving token efficiency.
testing
Validates a skill directory against the Agent Skills specification (agentskills.io/specification). Checks file reference consistency, frontmatter compliance, progressive disclosure, and structural correctness. Triggers when asked to validate a skill against the spec, check skill references, verify spec compliance, audit a skill's structure, or confirm a skill is ready for distribution. Also triggers on phrases like "is this skill valid," "check spec compliance," "validate file references," "verify the skill structure," or "does this skill follow the spec." Use this skill to catch structural issues, broken references, and spec violations in any skill directory.