openspec/changes/simplify-skill-installation/proposal.md
Users have complained that there are too many skills/commands (currently 10) and new users feel overwhelmed. We want to simplify the default experience while preserving power-user capabilities and backwards compatibility.
The goal: get users to an "aha moment" in under a minute.
0:00 $ openspec init
✓ Done. Run /opsx:propose "your idea"
0:15 /opsx:propose "add user authentication"
0:45 Agent creates proposal.md, design.md, tasks.md
"Whoa, it planned the whole thing for me" ← AHA
1:00 /opsx:apply
Additionally, users have different preferences for how workflows are delivered (skills vs commands vs both), but this should be a power-user configuration, not something new users think about.
Init auto-detects tools and asks for confirmation:
$ openspec init
Detected tools:
[x] Claude Code
[x] Cursor
[ ] Windsurf
Press Enter to confirm, or Space to toggle
Setting up OpenSpec...
✓ Done
Start your first change:
/opsx:propose "add dark mode"
No prompts for profile or delivery. Defaults are:
Power users can customize via openspec config profile.
Init scans for existing tool directories (.claude/, .cursor/, etc.):
Current behavior confuses users:
New behavior:
Profiles define which workflows to install:
propose, explore, apply, archive (4 workflows)The propose workflow is new - it combines new + ff into a single command that creates a change and generates all artifacts.
/opsx:propose should naturally onboard users by explaining what it's doing:
I'll create a change with 3 artifacts:
- proposal.md (what & why)
- design.md (how)
- tasks.md (implementation steps)
When ready to implement, run /opsx:apply
This teaches as it goes - no separate onboarding needed for most users.
Delivery controls how workflows are installed:
Stored in existing global config (~/.config/openspec/config.json). Not prompted during init.
# Profile configuration (interactive picker for delivery + workflows)
openspec config profile # interactive picker
openspec config profile core # preset shortcut (core workflows, preserves delivery)
The interactive picker allows users to configure both delivery method and workflow selection in one place:
$ openspec config profile
Delivery: [skills] [commands] [both]
^^^^^^
Workflows: (space to toggle, enter to save)
[x] propose
[x] explore
[x] apply
[x] archive
[ ] new
[ ] ff
[ ] continue
[ ] verify
[ ] sync
[ ] bulk-archive
[ ] onboard
Existing users keep their current setup. When openspec update runs on a project with existing workflows and no profile in global config, it performs a one-time migration:
profile: "custom", delivery: "both", workflows: [<detected>] to global configAfter migration, subsequent init and update commands respect the migrated config.
Key behaviors:
propose added automatically)init (re-init) and update trigger migration on existing projects if no profile is setopenspec init on a new project (no existing workflows) uses global config, defaulting to coreinit with a custom profile applies the configured workflows directly (no profile confirmation prompt)init validates --profile values (core or custom) and errors on invalid inputpropose and suggests openspec config profile core to opt incore profile via openspec config profile coreskills removes command files, switching to commands removes skill filesinit applies delivery cleanup on existing projects (removes files that no longer match delivery)update treats profile/delivery drift as update-required even when template versions are already currentupdate treats command-only installs as configured toolsprofiles: Workflow profiles (core, custom), delivery preferences, global config storage, interactive pickerpropose-workflow: Combined workflow that creates change + generates all artifactscli-init: Smart defaults with tool auto-detection, profile-based skill/command generationcli-update: Profile support, delivery changes, one-time migration for existing userssrc/core/templates/workflows/propose.ts - New propose workflow templatesrc/core/profiles.ts - Profile definitions and logicsrc/core/available-tools.ts - Detect what AI tools user has from directoriessrc/core/init.ts - Smart defaults, auto-detection, tool confirmationsrc/core/config.ts - Add profile and delivery typessrc/core/global-config.ts - Add profile, delivery, workflows fields to schemasrc/core/shared/skill-generation.ts - Filter by profile, respect deliverysrc/core/shared/tool-detection.ts - Update SKILL_NAMES and COMMAND_IDS to include proposesrc/commands/config.ts - Add profile subcommand with interactive pickersrc/core/update.ts - Add profile/delivery support, file deletion for delivery changessrc/prompts/searchable-multi-select.ts - Fix keybindings (space/enter)// ~/.config/openspec/config.json (extends existing)
{
"telemetry": { ... }, // existing
"featureFlags": { ... }, // existing
"profile": "core", // NEW: core | custom
"delivery": "both", // NEW: both | skills | commands
"workflows": ["propose", ...] // NEW: only if profile: custom
}
| Profile | Workflows | Description |
|---|---|---|
| core | propose, explore, apply, archive | Streamlined flow for most users (default) |
| custom | user-defined | Pick exactly what you need via openspec config profile |