docs/SELECTIVE-INSTALL-DESIGN.md
This document defines the user-facing selective-install design for ECC.
It complements
docs/SELECTIVE-INSTALL-ARCHITECTURE.md, which focuses on internal runtime
architecture and code boundaries.
This document answers the product and operator questions first:
Today ECC still feels like a large payload installer even though the repo now has first-pass manifest and lifecycle support.
Users need a simpler mental model:
The selective-install system should make ECC feel composable instead of all-or-nothing.
In the current substrate, user-facing components are still an alias layer over coarser internal install modules. That means include/exclude is already useful at the module-selection level, but some file-level boundaries remain imperfect until the underlying module graph is split more finely.
ecc-install typescript
style during rollout.A user should be able to get a useful ECC install with one command:
ecc install --target claude --profile core
The default experience should not assume the user wants every skill family and every framework.
The user should think in terms of:
The user should not have to know raw internal repo paths.
Every install path should support dry-run planning:
ecc install --target cursor --profile developer --with lang:typescript --with framework:nextjs --dry-run
The plan should clearly show:
Teams should be able to commit a project-level install config and use:
ecc install --config ecc-install.json
That allows deterministic installs across contributors and CI.
The current manifest already uses install modules and profiles. The user-facing design should keep that internal structure, but present it as four main component families.
Near-term implementation note: some user-facing component IDs still resolve to shared internal modules, especially in the language/framework layer. The catalog improves UX immediately while preserving a clean path toward finer module granularity in later phases.
These are the default ECC building blocks:
Examples of current internal modules:
rules-coreagents-corecommands-corehooks-runtimeplatform-configsworkflow-qualityLanguage packs group rules, guidance, and workflows for a language ecosystem.
Examples:
lang:typescriptlang:pythonlang:golang:javalang:rustEach language pack should resolve to one or more internal modules plus target-specific assets.
Framework packs sit above language packs and pull in framework-specific rules, skills, and optional setup.
Examples:
framework:reactframework:nextjsframework:djangoframework:springbootframework:laravelFramework packs should depend on the correct language pack or baseline primitives where appropriate.
Capability packs are cross-cutting ECC feature bundles.
Examples:
capability:securitycapability:researchcapability:orchestrationcapability:mediacapability:contentThese should map onto the current module families already being introduced in the manifests.
Profiles remain the fastest on-ramp.
Recommended user-facing profiles:
core
minimal baseline, safe default for most users trying ECCdeveloper
best default for active software engineering worksecurity
baseline plus security-heavy guidanceresearch
baseline plus research/content/investigation toolsfull
everything classified and currently supportedProfiles should be composable with additional --with and --without flags.
Example:
ecc install --target claude --profile developer --with lang:typescript --with framework:nextjs --without capability:orchestration
ecc install
ecc plan
ecc list-installed
ecc doctor
ecc repair
ecc uninstall
ecc catalog
Recommended shape:
ecc install [--target <target>] [--profile <name>] [--with <component>]... [--without <component>]... [--config <path>] [--dry-run] [--json]
Examples:
ecc install --target claude --profile core
ecc install --target cursor --profile developer --with lang:typescript --with framework:nextjs
ecc install --target antigravity --with capability:security --with lang:python
ecc install --config ecc-install.json
Recommended shape:
ecc plan [same selection flags as install]
Purpose:
Recommended shape:
ecc catalog profiles
ecc catalog components
ecc catalog components --family language
ecc catalog show framework:nextjs
Purpose:
These legacy flows should still work during migration:
ecc-install typescript
ecc-install --target cursor typescript
ecc typescript
Internally these should normalize into the new request model and write install-state the same way as modern installs.
Recommended default:
ecc-install.jsonOptional future support:
.ecc/install.json{
"$schema": "./schemas/ecc-install-config.schema.json",
"version": 1,
"target": "cursor",
"profile": "developer",
"include": [
"lang:typescript",
"lang:python",
"framework:nextjs",
"capability:security"
],
"exclude": [
"capability:media"
],
"options": {
"hooksProfile": "standard",
"mcpCatalog": "baseline",
"includeExamples": false
}
}
target
selected harness target such as claude, cursor, or antigravityprofile
baseline profile to start frominclude
additional components to addexclude
components to subtract from the profile resultoptions
target/runtime tuning flags that do not change component identityThis keeps the behavior predictable and easy to explain.
The user-facing flow should be:
include componentsexclude componentsThe important UX property is that the exact same flow powers:
installplanrepairuninstallThe commands differ in action, not in how ECC understands the selected install.
Selective install should preserve the same conceptual component graph across all targets, while letting target adapters decide how content lands.
Best fit for:
Best fit for:
Best fit for:
Should remain additive targets rather than special forks of the installer.
The selective-install design should make these just new adapters plus new target-specific mapping rules, not new installer architectures.
This design is feasible because the repo already has:
ecc CLI surfaceThe missing work is not conceptual invention. The missing work is productizing the current substrate into a cleaner user-facing component model.
ecc-install.json config file parsingThe current manifests do not yet expose a true user-facing lang:* /
framework:* / capability:* taxonomy. That should be introduced as a
presentation layer on top of the existing modules, not as a second installer
engine.
Recommended approach:
install-modules.json as the internal resolution catalogThat avoids breaking the current selective-install substrate while improving UX.
include / excludecatalogThe next implementation move should not be "rewrite the installer."
It should be:
include / exclude selection and catalog discoveryThat is the shortest path from the current ECC codebase to a real selective install experience that feels like ECC 2.0 instead of a large legacy installer.