Install AI skills, subagents, and hooks like npm packages - across Cursor, Claude, and Copilot.
Stop copy-pasting AI workflows between repos. Install them like packages.
A CLI to discover, install, apply and sync reusable AI capabilities from GitHub, npm, and registries - using a simple declarative spec.
Think: npm (distribution) + Terraform (setup) for AI dev environments
AI Stack Kit doesn’t just install modules — it stays aligned with the open-source ecosystem.
- Skill browser auto-rebuilt from upstream sources
aistack catalog refreshpulls newly discovered modules into your spec- No manual tracking of repos
Your AI stack evolves as open-source evolves.
npm install -g ai-stack-kit
aistack init
aistack search react
aistack add react-ui-expert
aistack syncYour AI capabilities are now installed and configured in your IDE.
- Skills are installed into your project or user scope
- Subagents are generated and configured per client
- Prompts are derived automatically from the same source
- Hooks run as part of lifecycle (if configured)
Everything is generated from the same spec — no duplication.
- Auto-detects your AI client (Cursor, Claude, Copilot)
- Installs and configures everything in the right place
- No manual wiring per tool
AI capabilities are scattered across GitHub repos, npm packages, and community lists.
There’s no standard way to:
- discover them
- install them
- keep them in sync across tools
AI Stack Kit introduces a spec-driven approach:
sources.config.yaml→ where to fetch fromspec.yaml→ what your project uses- CLI + adapters → resolve and apply across tools
search → add → sync
- “install AI capabilities like npm packages” → instantly understandable
- removes heavy phrasing early
- auto-sync is now top section, not buried
- auto-detection highlighted clearly
- no long paragraphs upfront
- tight, scannable sections
- spec → sync → generated outputs is crystal clear
AI Stack Kit lets you:
- 📦 Assemble AI capabilities (skills, subagents, and hooks) in
spec.yaml—portable, versioned modules you can sync and apply as reusable intelligence. - 🔄 Pull modules from GitHub, npm, registries, or local paths using
sources.config.yaml. - 🎯 Apply the same portable manifests through client adapters (Cursor, Copilot / VS Code settings, Claude, …)—output paths follow
client.type, not copy-paste sprawl. - 🔒 Version and lock dependencies like you would with package managers.
- 🚀 Share a single
spec.yamlacross machines and teammates. - 🌐 Browse the Skill browser (listings sync from upstream via
templates/sources.config.yaml— see Why this exists) and usecatalog refreshto append new upstream names intomodules:without rewriting your whole file.
npm install -g ai-stack-kit
aistack init
aistack syncUSER_GUIDE.md — install (npm vs GitHub Packages), upgrading the CLI, GITHUB_TOKEN for search, Skill browser, sources.config.yaml defaults, annotated spec.yaml, full command list, env vars, workflows, troubleshooting.
- Developers using AI tools like Cursor, Claude, or Copilot
- Teams that want consistent AI setups across projects
- Builders creating reusable AI skills, agents, or workflows
- One-off prompt usage
- Simple ChatGPT workflows
- Non-technical users
AI Stack Kit is designed for teams and developers managing reusable AI capabilities.
┌─────────────────────────────────────────┐
│ CLI Layer │
│ (init, install, apply, sync) │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ Core Engine │
│ (orchestration, resolution) │
└──┬───────┬─────────┬──────────┬────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌─────┐ ┌─────┐ ┌─────┐ ┌─────────┐
│Src │ │Reg │ │Adp │ │ Storage │
│ │ │ │ │ │ │ │
└─────┘ └─────┘ └─────┘ └─────────┘
- SkillSource: Fetch skills from GitHub, npm, registries, or local files
- RegistryProvider: Query and publish to skill registries
- IDEAdapter: Apply skills to different IDEs (Cursor, VSCode, etc.)
- ✅ Pluggable: Easy to add new sources, registries, and IDEs
- ✅ Loose Coupling: Modules communicate via interfaces
- ✅ Single Responsibility: Each module has one clear purpose
- ✅ Testable: Clear boundaries enable mocking and isolation
ai-stack-kit/
├── src/
│ ├── cli/ # CLI commands (including catalog refresh)
│ ├── pipeline/ # spec load, apply
│ ├── sources/ # GitHub, npm, registry, local
│ ├── registry/ # Dynamic catalogs from sources.config.yaml
│ ├── client-adapters/ # Cursor, Copilot, Claude outputs
│ └── types/
├── web/ # Skill browser (Vite + React; static `dist/` for Pages)
├── scripts/
│ └── build-catalog.mjs # Builds web/public/catalog.json for the browser
├── templates/
│ ├── spec.yaml
│ └── sources.config.yaml # Default catalogs (also used by CI for Pages)
├── .github/workflows/ # CI (e.g. Skill browser deploy)
├── config/
└── ...
Fetch skills from multiple sources:
- GitHub: Public/private repos
- npm: npm packages
- Registry: Custom registries (like npm registry)
- Local: File system paths
- Semantic versioning (^1.0.0, ~2.1.0, latest)
- Lock files for reproducibility
- Dependency resolution
- Conflict detection
spec.yaml → client.type (cursor, copilot, claude) plus optional client.installScope: project (default) writes under the repo; user writes under your home directory for global tooling.
Skills — each resolved skill becomes a folder with SKILL.md (and any bundled paths preserved). There is no separate filename convention beyond normal skill packaging.
| Scope | Cursor | Copilot | Claude |
|---|---|---|---|
Personal / global (installScope: user) |
~/.cursor/skills/ |
~/.copilot/skills/ |
~/.claude/skills/ |
| Repo / project (default) | .cursor/skills/ |
.github/skills/ |
.claude/skills/ |
Subagents — generated agent files:
| Scope | Cursor | Copilot | Claude |
|---|---|---|---|
| Personal / global | ~/.cursor/agents/*.md |
~/.copilot/agents/*.agent.md |
~/.claude/agents/*.md |
| Repo / project | .cursor/agents/*.md |
.github/agents/*.agent.md |
.claude/agents/*.md |
The *.agent.md pattern (basename: ., -, _, a-z, A-Z, 0-9 only before the suffix) is GitHub Copilot only. Cursor and Claude emit ordinary *.md agents.
Prompt sets — same payload as skills (no extra fetch) — Prompt files are not downloaded on their own. After each skill is resolved and fetched once, the normalizer derives prompts from that same in-memory payload (e.g. SKILL.md → instruction prompt; skill.json / manifest description → optional short system summary when present). aistack sync / apply then emits those files next to the skill trees and agents; agents carry promptIds wired by each adapter.
| Scope | Cursor | Copilot | Claude |
|---|---|---|---|
| Repo / project (default) | .cursor/prompts/*.md |
aistack.copilot.promptSnippets in project .vscode/settings.json (id → body) |
.claude/prompts/*.md, .claude/system-bundle.aistack.md, .claude/README.aistack.md |
Global (installScope: user) |
~/.cursor/prompts/*.md |
same promptSnippets merge at project root (tree outputs still target ~/.copilot/) |
~/.claude/prompts/*.md (+ Claude bundle/readme under ~/.claude/) |
Copilot + VS Code: .vscode/settings.json is still merged under the aistack key at the project root (e.g. promptSnippets), even when skill/agent trees target ~/.copilot/ via installScope: user.
Run commands at different stages:
preInstall/postInstallpreApply/postApplypreSync/postSync
- Content-addressable cache (like Git)
- Checksum verification
- Offline mode support
- Hosted UI: filters and copy-paste CLI commands (live demo).
aistack catalog refresh: compare configured catalogs withspec.yamland append missing modules undermodules:using a YAML-safe merge (new rows default toenabled: false; backs upspec.yamlfirst).
aistack init
aistack validate
export GITHUB_TOKEN=ghp_… # recommended when searching GitHub-backed catalogs
aistack search <query>
aistack skill add [name] # or: aistack add [name]
aistack catalog refresh --write
aistack syncFor the full command list — skill / subagent / hook, catalog refresh flags, install / apply, registry, and maintenance — see Command reference in USER_GUIDE.md.
-
ARCHITECTURE.md: Single architecture reference — diagrams, dependency rules, actual repository layout, interface shapes, pipeline flows, configuration examples, extension points, CLI reference, and ops concerns (performance, security, errors).
-
CONTRIBUTING.md: How to contribute—including extending the default catalog (
templates/sources.config.yaml) for the CLI and Skill browser. -
USER_GUIDE.md: Install paths,
spec.yamlexample, full CLI reference, env vars, workflows, troubleshooting.
- templates/spec.yaml: Template spec file
- config/schema.json: JSON schema for validation
- config/default.yaml: Default configuration
-
src/types/: TypeScript type definitions
skill.ts: Skill typesspec.ts: Spec file typesconfig.ts: CLI config typesregistry.ts: Registry types
-
src/sources/base/: SkillSource interface
-
src/registry/base/: RegistryProvider interface
-
src/adapters/base/: IDEAdapter interface
- Node.js >= 18
- TypeScript >= 5.0
# Clone repository
git clone https://github.com/deb-adarsh/ai-stack-kit.git
cd ai-stack-kit
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Run CLI locally
npm link
aistack --help
# Skill browser: TS build + catalog JSON + Vite dev
npm run dev:web
# Static web/dist (+ catalog) for hosting / parity with CI
npm run build:web- Create
src/sources/gitlab/gitlab-source.ts - Implement
SkillSourceinterface - Register in source factory
- Add to schema:
config/schema.json
Example:
import { BaseSkillSource } from '../base/skill-source';
export class GitLabSource extends BaseSkillSource {
constructor(name: string) {
super(name, 'gitlab');
}
canHandle(ref: SkillReference): boolean {
return ref.source.startsWith('gitlab:');
}
async resolve(ref: SkillReference): Promise<SkillMetadata> {
// Fetch from GitLab API
}
// ... implement other methods
}- Create
src/adapters/intellij/intellij-adapter.ts - Implement
IDEAdapterinterface - Register in adapter factory
- Add detection logic
Example:
import { BaseIDEAdapter } from '../base/ide-adapter';
export class IntelliJAdapter extends BaseIDEAdapter {
constructor() {
super('intellij', ['skills', 'settings']);
}
async detect(): Promise<IDEDetectionResult> {
// Detect IntelliJ installation
}
async applySkill(skill: SkillContent): Promise<ApplyResult> {
// Transform and write to IntelliJ format
}
// ... implement other methods
}| Feature | AI Stack Kit | npm | Terraform | kubectl |
|---|---|---|---|---|
| Declarative Config | ✅ | ❌ | ✅ | ✅ |
| Version Locking | ✅ | ✅ | ✅ | ❌ |
| Multiple Sources | ✅ | ❌ | ||
| IDE Agnostic | ✅ | ❌ | N/A | N/A |
| Dependency Resolution | ✅ | ✅ | ✅ | ❌ |
| Lifecycle Hooks | ✅ | ✅ | ✅ | ❌ |
Snapshot of what’s in the repo today and what might come next—adjust as the project evolves.
| Area | Status |
|---|---|
| CLI | Shipped: init, search, typed skill / subagent / hook, add, sync, catalog refresh, validation, etc. Some commands are still placeholders (e.g. update, clean, registry login / publish). |
spec.yaml |
Load + Zod validation, apply pipeline, modules merge (skills + modules). |
| Sources | GitHub fetch/install + npm packages; dynamic catalogs from sources.config.yaml (GitHub tree + npm tree providers). |
| Discovery | Composite registry, hybrid search, catalog refresh for additive spec merges. |
| IDE outputs | Cursor, Copilot (VS Code settings path), Claude client adapters in the apply pipeline—not a full generic “VS Code extension marketplace” story. |
| Skill browser | Static web app + catalog.json build + GitHub Pages deploy (weekly cron + pushes). |
| Hosted registry product | No dedicated public registry server or npm-like publish flow yet—discovery is aggregate-from-upstreams plus local spec. |
Possible next steps (community-driven, not commitments): richer VS Code story, real registry/auth, watch mode, polish placeholders, tests/CI depth—track via Issues and CONTRIBUTING.md.
Contributions are welcome! Please see CONTRIBUTING.md for details.
Licensed under the Apache License 2.0. See LICENSE.
- 📖 Documentation: USER_GUIDE.md · ARCHITECTURE.md
- 🐛 Issues: GitHub Issues
- ✉️ Maintainer: debadarsh7@gmail.com
Inspired by:
- npm: Registry abstraction and versioning
- Terraform: Declarative infrastructure
- kubectl: CLI user experience
- Cursor: IDE extensibility
Built with ❤️ for developers who want portable, reproducible IDE configurations.