Replies: 3 comments
-
|
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.
-
|
Hi @mnriem, Following up on this proposal, I have built a working prototype/demo of the global plugin architecture in my fork (RbBtSn0w/spec-kit), and I'd like to share the design and initial results. Design Principles & ArchitectureTo address the tension between project self-containment and global convenience, we designed the prototype using an opt-in global plugin model built on top of the external
Status of the DemoThis prototype is currently running successfully on my fork, and we have addressed initial edge cases (such as silencing hook execution outputs and ensuring type-safe plugin detection). I would love to hear your thoughts on this design direction as a starting point for global configuration support! |
Beta Was this translation helpful? Give feedback.
-
|
Thanks for building this out, @RbBtSn0w — the prototype makes the tradeoffs concrete, which is really helpful for the discussion. I want to flag two concerns before this goes further, both rooted in Spec Kit's layering rather than the goal (which I support). 1. Core should not depend on an external executable. The 2. The global install globalizes the wrong layer. Spec Kit deliberately separates two layers:
The I think this happens because
Suggested direction Keep the goal, change the seam. A global install should populate the agent-agnostic layer once: …and then each project's To echo my earlier point: opt-in, backwards-compatible, and with the current project-local behavior remaining the default for several minor releases. I'm fully on board with first-class |
Beta Was this translation helpful? Give feedback.
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