Editions and the Production Path
Editions and the Production Path
webAgent is one codebase that can ship as different editions — a curated
build for production, a full build for development, or any custom fork — without
maintaining separate branches. This works because every capability is a
self-describing, drop-in plugin the app discovers at runtime and gates by edition.
The three editions
- full (default) — every feature in the codebase, regardless of maturity.
- production — only features marked
stable(plus anything explicitly promoted). - forks — any custom mix (e.g. stable + a couple of named betas).
The active edition is chosen by the WEBAGENT_EDITION environment variable
(falling back to full). Edition definitions live in app/features/editions.json.
How it fits together
- Every capability declares a the-feature-header (
FEATURE = {...}) with a
maturity status (stable / beta / experimental).
- The app scans the plugin folders into a single the-feature-catalog-and-discovery.
- edition-gating-and-packaging uses each feature's status to decide what the
active edition loads — and can cut a code-absent production artifact.
Why this exists
The app ships many capabilities of varying maturity (integrations, encryption
methods, payment processors, …). Editions let a **production release contain or
load only tested features**, while development keeps everything — and promoting a
feature is a one-word change to its status.
Key rules
- New capabilities are drop-in files, never core edits — see
core-vs-plugins-structure-philosophy.
- Gating is fail-open (an unrecognised feature is never hidden) and a
no-op for full (zero behavior change by default).
See also: adding-a-plugin, ability-bundled-skills.
Canonical engineering doc: docs/claude/production-editions.md.