Replies: 1 comment
-
|
Go for it I would say, but in incremental backwards compatible small steps. Note that I would like to see this in a way that a user can decide how they want to use it. And the way it is currently doing it should be the default for at least 5 minor releases as it switching it would need a lot of lead time here (as that would be backwards incompatible) |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Proposal: First-Class Support for Global Configurations, Extensions, and Presets (~/.specify)
Background & Problem Statement
Currently, Spec Kit manages extensions, presets, integrations, and workflows primarily at the project level (
<project_root>/.specify/). While this guarantees that a cloned repository remains self-contained, it introduces a significant maintenance burden for developers who use the same set of extensions, presets, or workflows across multiple local projects.For example, when using custom-configured integrations, global agent tools, or shared preset profiles, the developer must reinstall or copy these directories into every new project's
.specifyfolder. This results in:specify initcreates project-specific settings that must be re-customized each time.Although Spec Kit already uses
~/.specify/implicitly for discovering catalogs (extension-catalogs.yml,preset-catalogs.yml, etc.), it does not treat the global directory as a first-class installation target or configuration home.Current State Analysis
Based on the codebase audit, here is how
~/.specifybehaves today:extension-catalogs.yml,preset-catalogs.yml,workflow-catalogs.yml, etc.) are resolved with a fallback chain ending at~/.specify/. This provides global discovery of registries.ExtensionManagerandPresetManagerresolve active extensions or presets solely within theproject_root / ".specify" / ...folder.HermesIntegrationalready utilizes a global directory (~/.hermes/skills/) to share agent skills across repositories, while maintaining a marker file in the local project. This shows that a hybrid global-local model is feasible.Proposed Solution Directions
We propose extending Spec Kit to support a first-class global configuration layer under
~/.specify/. The resolution logic should follow a standard layered approach: Environment Variables -> Project Local (.specify/) -> Global User Profile (~/.specify/) -> Built-in Defaults.Here are three potential implementation strategies:
Direction A: Global Directory with Multi-Source Resolution
Introduce global target directories:
~/.specify/extensions/~/.specify/presets/~/.specify/workflows/Key changes:
ExtensionManagerandPresetManagerscan both~/.specify/and local.specify/directories.--globalflag in installation commands:Direction B: Global Preset Profile as Default Templates (Incremental Start)
Focus on simplifying the setup experience by allowing users to define a default profile in
~/.specify/preset.ymlor~/.specify/config.yml.specify init, Spec Kit reads the global user profile to automatically enable their preferred default extensions, templates, and integration options, eliminating manual boilerplate setup.Direction C: Symlink / Reference Model
To keep the project repository clean and self-contained, Spec Kit could support installing extensions globally, and referencing them locally using relative symlinks or configuration pointers (e.g., path references in
.specify/extension-config.yml).~/.specify/) while keeping the git status of the project clear about which extensions are active.Discussion Questions
~/.specifyacceptable for local development?~/.specify/extensions/foo/config.yml, should local projects be able to partially override its settings in.specify/extensions/foo/config.yml?Beta Was this translation helpful? Give feedback.
All reactions