id = "openspec" name = "OpenSpec" homepage = "https://openspec.dev/" description = "Spec-driven development (SDD) for AI coding assistants." executables = ["openspec"] [dotfiles] # OpenSpec's official CLI settings reference states that machine-level settings # live at ~/.config/openspec/config.json on macOS/Linux and # %APPDATA%/openspec/config.json on Windows, with XDG_CONFIG_HOME honored. # Project-local openspec/ specs and changes are intentionally not included. # https://openspec.dev/docs/configuration/config-json paths = [ "[configHome]/openspec/config.json", "%APPDATA%/openspec/config.json", ] secret = [] [commands] format = 1 label = "OpenSpec" description = "Initialize OpenSpec in a project or refresh its instruction files. Stores, worksets and workflow commands are outside these forms." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false } [[commands.subcommand]] path = ["init"] label = "Initialize OpenSpec" [[commands.subcommand.source]] id = "docs" kind = "manual" url = "https://github.com/Fission-AI/OpenSpec/blob/main/docs/cli.md" evidence = """ openspec init [path] [options] | `--tools ` | Configure AI tools non-interactively. Use `all`, `none`, or comma-separated list | | `--language ` | Write artifacts in this language when creating a new config | | `--force` | Auto-cleanup legacy files without prompting | | `--profile ` | Override global profile for this init run (`core` or `custom`) | | `path` | No | Target directory (default: current directory) | """ [[commands.subcommand.field]] id = "path" label = "Target directory" type = "path" position = 0 path = { kind = "directory", role = "output" } sources = ["docs"] [[commands.subcommand.field]] id = "tools" label = "AI tools" description = "all, none, or a comma-separated list." type = "string" option = ["--tools"] suggestions = [{ value = "all", label = "All" }, { value = "none", label = "None" }, { value = "claude,cursor", label = "Claude and Cursor" }] sources = ["docs"] [[commands.subcommand.field]] id = "language" label = "Artifact language" type = "string" option = ["--language"] sources = ["docs"] [[commands.subcommand.field]] id = "profile" label = "Profile" type = "enum" option = ["--profile"] choices = [{ value = "core", label = "Core" }, { value = "custom", label = "Custom" }] sources = ["docs"] [[commands.subcommand.field]] id = "force" label = "Clean up legacy files without prompting" type = "boolean" option = ["--force"] effect = "delete" sources = ["docs"] [[commands.subcommand.task]] id = "init" label = "Initialize" fields = ["path", "tools", "profile"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["path", "tools", "profile"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["language", "force"] [[commands.subcommand]] path = ["update"] label = "Update instruction files" [[commands.subcommand.source]] id = "docs" kind = "manual" url = "https://github.com/Fission-AI/OpenSpec/blob/main/docs/cli.md" evidence = """ openspec update [path] [options] | `--force` | Force update even when files are up to date | | `--dry-run` | Report what the update would change and write nothing | | `--json` | With `--dry-run`, print the planned changes as JSON | | `path` | No | Target directory (default: current directory) | """ [[commands.subcommand.field]] id = "path" label = "Target directory" type = "path" position = 0 path = { kind = "directory", role = "output" } sources = ["docs"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["--dry-run"] sources = ["docs"] [[commands.subcommand.field]] id = "json" label = "JSON output (with dry run)" type = "boolean" option = ["--json"] sources = ["docs"] [[commands.subcommand.field]] id = "force" label = "Force update" type = "boolean" option = ["--force"] sources = ["docs"] [[commands.subcommand.task]] id = "preview" label = "Preview update" set = { dry_run = [true] } lock = ["dry_run"] fields = ["path", "dry_run", "json"] required = [] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["path", "dry_run", "json", "force"]