* feat(cli): add openspec config command for global configuration management
Implements the `openspec config` command with subcommands:
- `path`: Show config file location
- `list [--json]`: Show all current settings
- `get <key>`: Get a specific value (raw output for scripting)
- `set <key> <value> [--string]`: Set a value with auto type coercion
- `unset <key>`: Remove a key (revert to default)
- `reset --all [-y]`: Reset configuration to defaults
- `edit`: Open config in $EDITOR/$VISUAL
Key features:
- Dot notation for nested key access (e.g., featureFlags.someFlag)
- Auto type coercion (true/false → boolean, numbers → number)
- --string flag to force string storage
- Zod schema validation with unknown field passthrough
- Reserved --scope flag for future project-local config
- Windows-compatible editor spawning with proper path quoting
- Shell completion registry integration
* test(config): add additional unit tests for validation and coercion
- Add tests for unknown fields with various types
- Add test to verify error message path for featureFlags
- Add test for number values rejection in featureFlags
- Add config set simulation tests to verify full coerce → set → validate flow
* fix(config): avoid shell parsing in config edit to handle paths with spaces
Use spawn with shell: false and pass configPath as an argument instead
of building a shell command string. This correctly handles spaces in
both the EDITOR path and config file path on all platforms.
* chore(openspec): archive add-config-command and create cli-config spec
Move completed change to archive and apply spec deltas to create
the cli-config specification documenting the config command interface.
* Validate config keys on set
* feat(core): implement global config directory with XDG support
Add new global-config module following XDG Base Directory Specification with platform-specific fallbacks (Unix: ~/.config/openspec, Windows: %APPDATA%/openspec). Includes config loading with defaults, config saving with directory creation, and full test coverage. Archive add-global-config-dir change.
* docs(spec): add Purpose section to global-config spec
Replace placeholder text with a concise description of what the spec governs, its scope, and high-level objectives.
Update the cli-completion spec to match the actual implementation:
- Change `completion zsh` to `completion generate [shell]` command structure
- Update uninstall behavior to reflect confirmation prompt cancels entire operation
- Change "not installed" uninstall exit code from 0 to 1
- Update shell detection error message to match implementation
- Replace Purpose placeholder with actual description
* shell completions for zsh
* after code review changes
* expose only postinstall.js script
* Replace _openspec "$@" with compdef in zsh-generator.ts to prevent execution during load
* Update test/commands/completion.test.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* - Fix dispatcher to use $words instead of $line for subcommand routing
- Add __complete endpoint with tab-separated output for safe parsing
- Replace brittle awk parsing with __complete in completion helpers
- Add uninstall confirmation prompt with --yes flag to skip
- Prefer $ZSH env var for Oh My Zsh detection before dir check
- Add fpath verification guidance for OMZ installations
- Update cli-completion spec to document generate subcommand
* improve shell detection and installation handling
- Return structured result from detectShell() with shell and detected name
- Detect already-installed completions and skip reinstall
- Add update detection with automatic backup of previous version
- Add debug logging to silent catch blocks for diagnostics
- Quote fpath directories to handle paths with spaces
- Verify Oh My Zsh fpath configuration and add to .zshrc if needed
- Show helpful error for detected but unsupported shells
- Update all tests for new detection API
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Tabish Bidiwale <30385142+TabishB@users.noreply.github.com>
Add prominent restart instruction in success message to inform users
they need to restart their IDE/coding tool for slash commands to appear.
Applies to all tools when slash commands are created or refreshed.
Also updates cli-init spec to document the restart instruction requirement.
* feat(roocode): Added RooCode tool support and related configurations
Added RooCode tool integration, including:
- Added RooCode configurator class
- Registered RooCode to the tool registry
- Implemented RooCode template files
- Added RooCode slash command support
- Updated README documentation
- Added related test cases
* Removed RooCode related configurations from the project. This includes deleting the RooCode configurator, its template, and associated tests.
Merged and archived four concurrent changes that modified the same specs:
- add-cline-support: Added Cline AI tool configuration
- add-crush-support: Added Crush AI tool configuration
- add-factory-slash-commands: Added Factory Droid slash commands
- add-archive-command-arguments: Added archive command argument support
Changes to cli-init/spec.md:
- Added Cline and CodeBuddy Code configuration scenarios
- Added slash command scenarios for CodeBuddy Code, Cline, Crush, Factory Droid
Changes to cli-update/spec.md:
- Added update scenarios for CodeBuddy Code, Cline, Crush, Factory Droid
- Added Archive Command Argument Support requirement
- Modified OpenCode scenario to support $ARGUMENTS placeholder
This required manual intervention to prevent data loss from OpenSpec's
requirement-level replacement during archiving. The archive operations
initially overwrote scenarios from earlier changes, requiring restoration
of all missing content to preserve complete spec state.
All four changes successfully archived to openspec/changes/archive/.
The diff command added unnecessary complexity and duplicated functionality
already available through the show command. Users can now use:
- `openspec show <change>` for structured change viewing
- `openspec show <change> --json --deltas-only` for delta-only views
- Standard git diff or other tools for file comparisons
This change:
- Removes ~227 lines of code and the jest-diff dependency
- Simplifies the CLI interface
- Reduces maintenance burden
- Aligns with verb-first command structure
- Update openspec-conventions spec with delta-based approach
- Add Header-Based Requirement Identification for programmatic matching
- Define ADDED/MODIFIED/REMOVED/RENAMED sections format
- Document standard output symbols (+ ~ - →)
- Update openspec/README.md with delta conventions and examples
- Update init command template to use delta format
- Mark completed tasks in adopt-delta-based-changes/tasks.md
This implements the first part of the delta-based changes proposal,
updating all documentation and conventions to support the new format.
The update command now only updates existing AI tool configuration
files instead of forcing CLAUDE.md creation. This allows team members
to use different AI tools without conflicts.
- Modified update.ts to check for existing files before updating
- Added comprehensive tests for the new behavior
- Updated spec and documentation to reflect team-friendly approach
- Created project README documenting the behavior
- Add Specification Format section to openspec-conventions with:
- Requirement headers for consistent structure
- Scenario headers with bold WHEN/THEN/AND keywords
- Format flexibility for different content types
- Update all CLI command specs to use structured format:
- cli-init: Convert all behavioral sections
- cli-list: Apply structured format throughout
- cli-update: Restructure requirements and edge cases
- cli-diff: Update all behavior sections
- cli-archive: Convert complex behaviors to scenarios
- Update openspec-conventions spec itself to follow its own format
- Mark all tasks as completed