Theme System
June 20, 2026 · View on GitHub
Themes control all user-facing vocabulary — terms, role names, and
recurring phrases. They NEVER control tools, delegation, or goals.
Themes live in themes/*.yaml.
Theme Resolution
- Read
bridge-config.yamlfieldtheme:(default:professional) - Load
themes/{theme}.yaml— if missing, fall back tothemes/professional.yaml - If theme has
meta.extends: deep-merge parent first, then override - Fill missing keys from
themes/_schema.yamldefaults - Apply vocabulary to all Claude output for this session
Built-in Themes
| Theme | Locale | Description |
|---|---|---|
professional | en | Neutral, business-friendly (default) |
professional-de | de | German translation, extends professional |
# bridge-config.yaml
theme: professional # professional | professional-de | {custom}
Full vocabulary: see themes/professional.yaml.
Custom Themes
Copy themes/_template.yaml to themes/{your-name}.yaml. Override only
the keys you need — everything else inherits from the parent via
extends.
Use cases: company vocabulary, industry jargon (SRE, consulting, agency), locale translations, fun themes. A custom theme needs 10-20 lines of YAML.
Authoring checklist
- Choose a parent via
meta.extends(usuallyprofessional) - Override only keys that differ — leave the rest inherited
- Validate required fields:
schema_version,meta.name,meta.display_name(CI checks these) - Drop in
themes/{name}.yaml, settheme: {name}inbridge-config.yaml, restart Claude Code
Schema reference
themes/_schema.yaml— full key list with defaultsthemes/_template.yaml— ready-to-fill starter