{"id":33372031,"url":"https://github.com/mensfeld/craftdesk","last_synced_at":"2025-11-22T21:01:14.163Z","repository":{"id":324935841,"uuid":"1099141155","full_name":"mensfeld/craftdesk","owner":"mensfeld","description":"Package manager for Claude Code skills and agents and other AI related resources","archived":false,"fork":false,"pushed_at":"2025-11-18T17:10:16.000Z","size":103,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-18T18:21:36.960Z","etag":null,"topics":["agents","anthropic","claude","claude-code","claude-plugins","claude-skills","cli","developer-tools","llm","package-manager","skills"],"latest_commit_sha":null,"homepage":"http://craftdesk.ai/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mensfeld.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-18T16:09:18.000Z","updated_at":"2025-11-18T18:17:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mensfeld/craftdesk","commit_stats":null,"previous_names":["mensfeld/craftdesk-cli"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/mensfeld/craftdesk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mensfeld%2Fcraftdesk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mensfeld%2Fcraftdesk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mensfeld%2Fcraftdesk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mensfeld%2Fcraftdesk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mensfeld","download_url":"https://codeload.github.com/mensfeld/craftdesk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mensfeld%2Fcraftdesk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285859618,"owners_count":27243729,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-22T02:00:05.934Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","anthropic","claude","claude-code","claude-plugins","claude-skills","cli","developer-tools","llm","package-manager","skills"],"created_at":"2025-11-22T21:00:42.459Z","updated_at":"2025-11-22T21:01:14.157Z","avatar_url":"https://github.com/mensfeld.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# CraftDesk CLI\n\n\u003e **Dependency management for AI capabilities** - Install, manage, and version control your Claude Code skills, agents, commands, hooks, and plugins.\n\nThe command-line interface for managing your Coding AI capabilities. Similar to npm for JavaScript or bundler for Ruby, CraftDesk CLI provides a complete package management solution for AI-powered development tools.\n\n[![npm version](https://img.shields.io/npm/v/craftdesk.svg)](https://www.npmjs.com/package/craftdesk)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n---\n\n## What is CraftDesk?\n\nCraftDesk is a package manager for AI capabilities used in Claude Code and other AI development environments. It allows you to:\n\n- **Install AI skills, agents, commands, hooks, and plugins** from git repositories\n- **Lock versions** for reproducible environments across teams\n- **Manage dependencies** with automatic transitive resolution\n- **Support monorepos** with subdirectory extraction\n- **Auto-convert GitHub URLs** - paste any GitHub URL (tree/blob)\n- **Direct file references** - install single files from repositories\n\nThink of it as:\n- **npm** for Node.js → **CraftDesk** for AI capabilities\n- **Bundler** for Ruby → **CraftDesk** for Claude tools\n- **Cargo** for Rust → **CraftDesk** for AI agents\n\n\u003e **Note:** A self-hosted registry server is currently under development and will be available soon, enabling private registries and centralized craft distribution.\n\n---\n\n## Quick Start\n\n### Install CraftDesk\n\n```bash\nnpm install -g craftdesk\n```\n\nVerify installation:\n```bash\ncraftdesk --version\n# 0.3.0\n```\n\n**Requirements:** Node.js \u003e= 18.0.0, Git, npm or yarn\n\n### 1. Initialize a New Project\n\n```bash\nmkdir my-ai-project\ncd my-ai-project\ncraftdesk init\n```\n\nThis creates a `craftdesk.json` file:\n```json\n{\n  \"name\": \"my-ai-project\",\n  \"version\": \"1.0.0\",\n  \"type\": \"skill\",\n  \"dependencies\": {}\n}\n```\n\n### 2. Add Dependencies\n\n```bash\n# Add a single skill file from GitHub (auto-converts web URLs)\ncraftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md\n\n# Add from git repository\ncraftdesk add git+https://github.com/aviflombaum/rspec-rails-agents.git\n\n# Add from monorepo subdirectory\ncraftdesk add https://github.com/technicalpickles/pickled-claude-plugins/tree/main/plugins/working-in-monorepos/skills/working-in-monorepos\n\n# Add with explicit type\ncraftdesk add https://github.com/aviflombaum/rspec-rails-agents/blob/main/rspec-dry-agent.md --type agent\n```\n\n### 3. Install Everything\n\n```bash\ncraftdesk install\n```\n\nThis installs all dependencies to `.claude/` directory and creates `craftdesk.lock`.\n\n### 4. View Installed Crafts\n\n```bash\ncraftdesk list\n```\n\nOutput:\n```\nmy-ai-project@1.0.0\n\nInstalled crafts:\n  • my-skill@main (skill)\n  • custom-agent@main (agent)\n\nTotal: 2 crafts installed\n```\n\n---\n\n## Table of Contents\n\n- [What is CraftDesk?](#what-is-craftdesk)\n- [Quick Start](#quick-start)\n- [Core Concepts](#core-concepts)\n- [Command Reference](#command-reference)\n- [Dependency Sources](#dependency-sources)\n- [Monorepo Support](#monorepo-support)\n- [craftdesk.json Reference](#craftdeskjson-reference)\n- [craftdesk.lock](#craftdesklock)\n- [CI/CD Integration](#cicd-integration)\n- [Troubleshooting](#troubleshooting)\n- [Development](#development)\n\n---\n\n## Core Concepts\n\n### Crafts\n\nA **craft** is any AI capability:\n- **Skill** - Knowledge domain (e.g., ruby-on-rails, postgres-expert)\n- **Agent** - Autonomous task executor (e.g., code-reviewer, test-runner)\n- **Command** - Slash command (e.g., /deploy, /analyze)\n- **Hook** - Event handler (e.g., pre-commit, post-install)\n- **Plugin** - Extended functionality or tool integration (e.g., mcp-server, custom-tools)\n\n### Manifest File: craftdesk.json\n\nDeclares your project's dependencies:\n```json\n{\n  \"name\": \"my-project\",\n  \"version\": \"1.0.0\",\n  \"dependencies\": {\n    \"my-skill\": {\n      \"git\": \"https://github.com/user/skill.git\",\n      \"branch\": \"main\"\n    }\n  }\n}\n```\n\n### Lockfile: craftdesk.lock\n\nRecords exact versions installed (like package-lock.json or Gemfile.lock):\n```json\n{\n  \"version\": \"1.0.0\",\n  \"lockfileVersion\": 1,\n  \"crafts\": {\n    \"my-skill\": {\n      \"version\": \"main\",\n      \"resolved\": \"https://github.com/user/skill.git\",\n      \"integrity\": \"a1b2c3d4e5f6...\",\n      \"type\": \"skill\",\n      \"git\": \"https://github.com/user/skill.git\",\n      \"branch\": \"main\",\n      \"commit\": \"a1b2c3d4e5f6789012345678901234567890abcd\"\n    }\n  }\n}\n```\n\n**Always commit this file to version control!**\n\n### Install Directory\n\nBy default, crafts install to `.claude/` in your project:\n```\n.claude/\n├── skills/\n│   ├── ruby-on-rails/\n│   └── postgres-expert/\n├── agents/\n│   └── code-reviewer/\n├── commands/\n│   └── deploy/\n├── hooks/\n│   └── pre-commit/\n└── plugins/\n    └── mcp-server/\n```\n\n---\n\n## Command Reference\n\n### `craftdesk init [options]`\n\nInitialize a new craftdesk.json file.\n\n**Options:**\n- `-y, --yes` - Skip prompts and use defaults\n- `-n, --name \u003cname\u003e` - Project name (default: directory name)\n- `-v, --version \u003cversion\u003e` - Project version (default: \"1.0.0\")\n- `-t, --type \u003ctype\u003e` - Project type: skill, agent, command, hook, or plugin (default: \"skill\")\n- `-d, --description \u003cdesc\u003e` - Project description\n- `-a, --author \u003cauthor\u003e` - Author name\n- `-l, --license \u003clicense\u003e` - License (default: \"MIT\")\n\n**Examples:**\n```bash\n# Interactive initialization\ncraftdesk init\n\n# Quick init with defaults\ncraftdesk init -y\n\n# Specify options\ncraftdesk init --name my-skill --type skill --author \"Your Name\"\n```\n\n---\n\n### `craftdesk install [options]`\n\nInstall all dependencies from craftdesk.json.\n\n**Options:**\n- `--no-lockfile` - Ignore craftdesk.lock and re-resolve dependencies\n- `--production` - Skip devDependencies\n\n**Examples:**\n```bash\n# Install all dependencies\ncraftdesk install\n\n# Or use the alias\ncraftdesk i\n\n# Production install (skip dev dependencies)\ncraftdesk install --production\n\n# Force re-resolve (ignore lockfile)\ncraftdesk install --no-lockfile\n```\n\n**What it does:**\n1. Reads craftdesk.json\n2. Uses craftdesk.lock if present (ensures reproducibility)\n3. Resolves dependencies (registry + git sources)\n4. Installs to .claude/ directory\n5. Updates/creates craftdesk.lock\n\n---\n\n### `craftdesk add \u003ccraft\u003e [options]`\n\nAdd a new dependency and install it immediately.\n\n**Options:**\n- `-D, --save-dev` - Save as devDependency\n- `-O, --save-optional` - Save as optionalDependency\n- `-E, --save-exact` - Save exact version (no ^ or ~)\n- `-t, --type \u003ctype\u003e` - Specify craft type (skill, agent, command, hook, plugin)\n\n**Examples:**\n\n```bash\n# GitHub web URLs (auto-converted)\ncraftdesk add https://github.com/user/repo/blob/main/skill.md\ncraftdesk add https://github.com/user/repo/tree/main/skills/auth\n\n# With explicit type\ncraftdesk add https://github.com/user/repo/blob/main/agent.md --type agent\n\n# Git dependencies (manual format)\ncraftdesk add git+https://github.com/user/repo.git\ncraftdesk add git+https://github.com/user/repo.git#develop\ncraftdesk add git+https://github.com/user/repo.git#v2.0.0\n\n# Direct file reference\ncraftdesk add git+https://github.com/user/repo.git#main#file:skill.md\n\n# Subdirectory (monorepo)\ncraftdesk add git+https://github.com/company/monorepo.git#main#path:skills/auth\n```\n\n---\n\n### `craftdesk remove \u003ccraft\u003e`\n\nRemove a dependency from craftdesk.json and the filesystem.\n\n**Examples:**\n```bash\ncraftdesk remove my-skill\ncraftdesk remove my-agent\n```\n\n---\n\n### `craftdesk list [options]`\n\nList installed crafts.\n\n**Options:**\n- `--tree` - Show dependency tree\n- `--depth \u003cn\u003e` - Limit tree depth\n- `--json` - Output as JSON\n\n**Examples:**\n```bash\n# Simple list\ncraftdesk list\n\n# Show dependency tree\ncraftdesk list --tree\n\n# Limit tree depth\ncraftdesk list --tree --depth 2\n\n# JSON output (for scripts)\ncraftdesk list --json\n```\n\n**Example output:**\n```\nmy-project@1.0.0\n\nInstalled crafts:\n  • my-skill@main (skill)\n  • code-reviewer@v2.0.1 (agent)\n  • postgres-expert@main (skill)\n\nTotal: 3 crafts installed\n```\n\n---\n\n### Global Options\n\nAvailable for all commands:\n\n- `-v, --version` - Output the version number\n- `-d, --debug` - Enable debug output\n- `-h, --help` - Display help\n\n**Examples:**\n```bash\ncraftdesk --version\ncraftdesk --help\ncraftdesk init --help\n```\n\n---\n\n## Dependency Sources\n\nCraftDesk currently supports Git dependencies. Registry support is under development.\n\n### 1. GitHub URLs (Easiest)\n\nSimply paste any GitHub URL - it auto-converts to the correct format:\n\n```bash\n# Directory in monorepo\ncraftdesk add https://github.com/user/repo/tree/main/skills/auth\n\n# Single file\ncraftdesk add https://github.com/user/repo/blob/main/agent.md\n\n# Entire repository\ncraftdesk add https://github.com/user/repo\n```\n\n### 2. Git Dependencies\n\nFrom git repositories:\n\n```json\n{\n  \"dependencies\": {\n    \"custom-agent\": {\n      \"git\": \"https://github.com/user/agent-repo.git\",\n      \"branch\": \"develop\"\n    },\n    \"stable-skill\": {\n      \"git\": \"https://github.com/org/skills.git\",\n      \"tag\": \"v2.1.0\"\n    },\n    \"specific-commit\": {\n      \"git\": \"https://github.com/user/repo.git\",\n      \"commit\": \"a1b2c3d4\"\n    }\n  }\n}\n```\n\n**Git options:**\n- `git` - Repository URL (required)\n- `branch` - Branch name (default: main/master)\n- `tag` - Git tag\n- `commit` - Specific commit hash\n- `path` - Subdirectory within repo (for monorepos)\n- `file` - Direct file path (for single-file crafts)\n\n### 3. Registry Dependencies (Coming Soon)\n\n\u003e **Note:** Registry support is currently under development. A self-hosted registry server will be available soon.\n\nFuture registry format:\n\n```json\n{\n  \"dependencies\": {\n    \"ruby-on-rails\": \"^7.0.0\",\n    \"@company/internal-skill\": \"^2.0.0\"\n  }\n}\n```\n\n---\n\n## Monorepo Support\n\nInstall multiple crafts from the same git repository using subdirectory paths:\n\n```json\n{\n  \"dependencies\": {\n    \"auth-handler\": {\n      \"git\": \"https://github.com/company/ai-crafts-monorepo.git\",\n      \"tag\": \"v3.2.0\",\n      \"path\": \"skills/auth\"\n    },\n    \"data-processor\": {\n      \"git\": \"https://github.com/company/ai-crafts-monorepo.git\",\n      \"tag\": \"v3.2.0\",\n      \"path\": \"agents/processor\"\n    },\n    \"report-generator\": {\n      \"git\": \"https://github.com/company/ai-crafts-monorepo.git\",\n      \"tag\": \"v3.2.0\",\n      \"path\": \"skills/reporting\"\n    }\n  }\n}\n```\n\n**Benefits:**\n- Single git repository for multiple crafts\n- Version them together with git tags\n- Each craft installs independently\n- Efficient cloning (repo cached during resolution)\n\n**Monorepo structure example:**\n```\nai-crafts-monorepo/\n├── skills/\n│   ├── auth/\n│   │   ├── craftdesk.json\n│   │   └── SKILL.md\n│   └── reporting/\n│       ├── craftdesk.json\n│       └── SKILL.md\n├── agents/\n│   └── processor/\n│       ├── craftdesk.json\n│       └── AGENT.md\n└── commands/\n    └── deploy/\n        ├── craftdesk.json\n        └── COMMAND.md\n```\n\n---\n\n## craftdesk.json Reference\n\nComplete specification of the craftdesk.json format:\n\n```json\n{\n  // Required fields\n  \"name\": \"my-project\",\n  \"version\": \"1.0.0\",\n\n  // Optional metadata\n  \"type\": \"skill\",\n  \"description\": \"My awesome AI project\",\n  \"author\": \"Your Name \u003cyou@example.com\u003e\",\n  \"license\": \"MIT\",\n  \"homepage\": \"https://example.com\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/user/repo.git\"\n  },\n  \"keywords\": [\"ai\", \"claude\", \"automation\"],\n\n  // Dependencies\n  \"dependencies\": {\n    \"my-skill\": {\n      \"git\": \"https://github.com/user/repo.git\",\n      \"branch\": \"main\"\n    },\n    \"auth-handler\": {\n      \"git\": \"https://github.com/company/monorepo.git\",\n      \"tag\": \"v3.2.0\",\n      \"path\": \"skills/auth\"\n    },\n    \"my-agent\": {\n      \"git\": \"https://github.com/user/agents.git\",\n      \"branch\": \"main\",\n      \"file\": \"agent.md\"\n    }\n  },\n\n  \"devDependencies\": {\n    \"test-runner\": {\n      \"git\": \"https://github.com/org/test-tools.git\",\n      \"branch\": \"main\"\n    }\n  }\n}\n```\n\n### Field Descriptions\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | string | Yes | Craft name (lowercase, no spaces) |\n| `version` | string | Yes | Semantic version (e.g., \"1.0.0\") |\n| `type` | string | No | Craft type: skill, agent, command, hook, plugin |\n| `description` | string | No | Short description |\n| `author` | string | No | Author name and email |\n| `license` | string | No | License identifier (e.g., \"MIT\") |\n| `dependencies` | object | No | Production dependencies |\n| `devDependencies` | object | No | Development dependencies |\n\n---\n\n## craftdesk.lock\n\nThe lockfile ensures reproducible installations across different machines and times.\n\n### What's in the Lockfile?\n\n```json\n{\n  \"version\": \"1.0.0\",\n  \"lockfileVersion\": 1,\n  \"generatedAt\": \"2025-11-18T10:30:00.000Z\",\n  \"crafts\": {\n    \"my-skill\": {\n      \"version\": \"main\",\n      \"resolved\": \"https://github.com/user/skill.git\",\n      \"integrity\": \"a1b2c3d4e5f6789012345678901234567890abcd\",\n      \"type\": \"skill\",\n      \"author\": \"git\",\n      \"git\": \"https://github.com/user/skill.git\",\n      \"branch\": \"main\",\n      \"commit\": \"a1b2c3d4e5f6789012345678901234567890abcd\",\n      \"dependencies\": {}\n    },\n    \"custom-agent\": {\n      \"version\": \"v2.0.0\",\n      \"resolved\": \"https://github.com/user/agent.git\",\n      \"integrity\": \"b2c3d4e5f6789012345678901234567890abcdef\",\n      \"type\": \"agent\",\n      \"git\": \"https://github.com/user/agent.git\",\n      \"tag\": \"v2.0.0\",\n      \"commit\": \"b2c3d4e5f6789012345678901234567890abcdef\",\n      \"dependencies\": {}\n    }\n  }\n}\n```\n\n### Best Practices\n\n✅ **DO:**\n- Commit craftdesk.lock to version control\n- Let the CLI manage it (don't edit manually)\n- Use it for reproducible builds in CI/CD\n\n❌ **DON'T:**\n- Ignore craftdesk.lock in .gitignore\n- Edit it manually\n- Delete it without `--no-lockfile` flag\n\n---\n\n## CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: Deploy\non: [push]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v3\n        with:\n          node-version: '18'\n\n      - name: Install CraftDesk CLI\n        run: npm install -g craftdesk\n\n      - name: Install AI capabilities\n        run: craftdesk install --production\n\n      - name: Deploy\n        run: ./deploy.sh\n```\n\n### GitLab CI\n\n```yaml\ndeploy:\n  image: node:18\n  script:\n    - npm install -g craftdesk\n    - craftdesk install --production\n    - ./deploy.sh\n  only:\n    - main\n```\n\n### Docker\n\n```dockerfile\nFROM node:18\n\n# Install CraftDesk CLI\nRUN npm install -g craftdesk\n\n# Copy project files\nWORKDIR /app\nCOPY craftdesk.json craftdesk.lock ./\n\n# Install AI capabilities\nRUN craftdesk install --production\n\n# Copy rest of application\nCOPY . .\n\nCMD [\"node\", \"app.js\"]\n```\n\n---\n\n## Troubleshooting\n\n### Common Issues\n\n#### `No craftdesk.json found`\n\nMake sure you're in a directory with a craftdesk.json file, or run `craftdesk init` first.\n\n#### `Failed to resolve dependencies`\n\n- Check internet connection\n- Verify git repository URLs are accessible\n- For private repos, ensure SSH keys or access tokens are configured\n- Try `craftdesk install --no-lockfile` to re-resolve\n\n#### `Git clone failed`\n\n- Verify git is installed: `git --version`\n- Check git repository URL is accessible\n- For private repos, ensure SSH keys or tokens are configured\n\n#### `Permission denied`\n\n- For global install: `sudo npm install -g craftdesk`\n- Or use npx: `npx craftdesk install`\n\n#### `Dependency conflicts`\n\nCurrently uses last-write-wins. Future versions will have interactive conflict resolution.\n\n### Debug Mode\n\nEnable verbose logging:\n\n```bash\ncraftdesk --debug install\n```\n\n### Getting Help\n\n```bash\n# General help\ncraftdesk --help\n\n# Command-specific help\ncraftdesk init --help\ncraftdesk add --help\ncraftdesk install --help\n```\n\n---\n\n## Development\n\n### Building from Source\n\n```bash\ngit clone https://github.com/mensfeld/craftdesk.git\ncd craftdesk\nnpm install\nnpm run build\nnpm link\n```\n\n### Project Structure\n\n```\ncraftdesk/\n├── src/\n│   ├── commands/       # CLI commands\n│   ├── services/       # Core services\n│   ├── types/          # TypeScript types\n│   └── utils/          # Utilities\n├── dist/               # Compiled JavaScript\n├── bin/                # Executable entry point\n├── examples/           # Example craftdesk.json files\n└── docs/               # Documentation\n```\n\n### Running Tests\n\n```bash\nnpm test\n```\n\n### Publishing\n\n```bash\nnpm version patch\nnpm publish\n```\n\n---\n\n## License\n\nMIT\n\n---\n\n## Links\n\n- **Repository**: [https://github.com/mensfeld/craftdesk](https://github.com/mensfeld/craftdesk)\n- **Issues**: [https://github.com/mensfeld/craftdesk/issues](https://github.com/mensfeld/craftdesk/issues)\n- **Registry** (Coming Soon): Self-hosted registry server under development\n\n---\n\n## Roadmap\n\n- ✅ Git dependency support\n- ✅ GitHub URL auto-conversion\n- ✅ Direct file references\n- ✅ Monorepo support\n- ✅ Lockfile-based version control\n- 🚧 Self-hosted registry server (in development)\n- 🚧 Private registry authentication\n- 🚧 Dependency conflict resolution\n- 🚧 Semantic versioning for registry packages\n\n---\n\nMade for the AI development community\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmensfeld%2Fcraftdesk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmensfeld%2Fcraftdesk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmensfeld%2Fcraftdesk/lists"}