refactor: 合并 claude-marketplace,重构目录结构为单一仓库

- 重命名 plugins/ → skills/,个人插件迁移到 skills-personal/(gitignore)
- 更新 generate-marketplace.py 支持 config 读取和 skills-personal 扫描
- 新增 claude-config.yaml(技能启用/禁用 + MCP 配置)
- 新增 init.sh(交互式 MCP 初始化,支持 stdio/SSE 模式)
- 新增 CLAUDE.md 项目说明
- 重写 README.md 反映新结构
- 删除过时脚本:PUSH.sh、generate-marketplace.sh、convert-skills.sh

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 11:11:59 +10:30
parent f7f5428812
commit 99881e268a
191 changed files with 1131 additions and 492 deletions

View File

@@ -0,0 +1,636 @@
{
"name": "coolbuy-claude-plugins",
"owner": {
"name": "Donglin Lai (qiudl)",
"email": "qiudl@zhiyuncai.com"
},
"metadata": {
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
"version": "1.0.0",
"pluginRoot": "./skills"
},
"plugins": [
{
"name": "agent-swarm-plugin",
"source": "./skills/agent-swarm-plugin",
"description": "Multi-agent orchestration using OpenAI Swarm patterns. Coordinate specialized agents for complex development workflows with handoffs and context sharing.",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "ai-proj-plugin",
"source": "./skills/ai-proj-plugin",
"description": "AI project management via REST API. Works out of the box!",
"version": "2.0.1",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "biz-contract-plugin",
"source": "./skills/biz-contract-plugin",
"description": "商务合同撰写。支持多种合同类型:软件订阅合同、软件定制开发合同、物流合同、销售服务合同、贸易合同等。当用户提到合同、协议、签约、合作协议相关任务时自动激活。",
"version": "1.0.0",
"category": "business",
"keywords": [
"business",
"planning",
"contracts"
],
"strict": false
},
{
"name": "biz-ops-plugin",
"source": "./skills/biz-ops-plugin",
"description": "商务运营技能。支持商业计划书(BP)撰写和商务合同起草。当用户提到商业计划书、BP、融资计划、商业模式、合同、协议、签约等相关任务时自动激活。",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "biz-plan-plugin",
"source": "./skills/biz-plan-plugin",
"description": "Plugin for biz-plan",
"version": "1.0.0",
"category": "business",
"keywords": [
"business",
"planning",
"contracts"
],
"strict": false
},
{
"name": "coolbuy-legacy-plugin",
"source": "./skills/coolbuy-legacy-plugin",
"description": "酷采2.0团购管理系统测试与维护。用于酷采2.0系统的功能测试、问题排查、需求验证和对比测试。",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "coolbuy-paas-plugin",
"source": "./skills/coolbuy-paas-plugin",
"description": "酷采3.0 SaaS 租户端开发与测试。用于商品管理、订单管理等业务模块开发以及酷采2.0系统对比测试。",
"version": "1.3.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "coolbuy-platform-plugin",
"source": "./skills/coolbuy-platform-plugin",
"description": "Coolbuy SaaS 平台管理端开发与部署。用于平台端前后端开发、租户管理、部署发布、翻译检查等任务。",
"version": "1.0.9",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "data-excel-plugin",
"source": "./skills/data-excel-plugin",
"description": "Plugin for data-excel",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "dev-arch-plugin",
"source": "./skills/dev-arch-plugin",
"description": "Plugin for dev-arch",
"version": "1.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "dev-coding-plugin",
"source": "./skills/dev-coding-plugin",
"description": "Plugin for dev-coding",
"version": "1.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "dev-plugin",
"source": "./skills/dev-plugin",
"description": "Plugin for dev",
"version": "1.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "dev-test-plugin",
"source": "./skills/dev-test-plugin",
"description": "软件测试技能。用于单元测试、集成测试、E2E测试、测试用例设计。支持 Go、Vue、React、iOS、Android 等多平台测试。",
"version": "2.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "dotfiles-plugin",
"source": "./skills/dotfiles-plugin",
"description": "macOS 新机快速部署。用于 dotfiles 配置管理、install.sh 脚本维护、Claude Code 插件配置、MCP Server 配置。当用户提到新机部署、dotfiles、环境配置相关任务时自动激活。",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "doubao-voice-plugin",
"source": "./skills/doubao-voice-plugin",
"description": "Doubao (豆包) Voice API integration for TTS and ASR",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "enjoysa-deploy-plugin",
"source": "./skills/enjoysa-deploy-plugin",
"description": "EnjoySA 项目部署到新加坡服务器",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "enjoysa-plugin",
"source": "./skills/enjoysa-plugin",
"description": "Plugin for enjoysa",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "executing-plans-plugin",
"source": "./skills/executing-plans-plugin",
"description": "Plugin for executing-plans",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "feishu-bitable-plugin",
"source": "./skills/feishu-bitable-plugin",
"description": "飞书多维表格操作。用于记录增删改查、批量操作、筛选排序、数据同步。当需要操作飞书多维表格时使用。",
"version": "1.0.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "feishu-docx-plugin",
"source": "./skills/feishu-docx-plugin",
"description": "飞书云文档操作。用于创建、编辑云文档,插入内容块,会议纪要生成。当需要操作飞书云文档时使用。",
"version": "1.0.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "feishu-plugin",
"source": "./skills/feishu-plugin",
"description": "飞书多维表格快捷操作。通过自然语言实现多维表格的增删改查、数据同步、批量操作等功能。当用户提到飞书、多维表格、Bitable、飞书表格相关任务时自动激活。",
"version": "1.1.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "finance-plugin",
"source": "./skills/finance-plugin",
"description": "Plugin for finance",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "finishing-a-development-branch-plugin",
"source": "./skills/finishing-a-development-branch-plugin",
"description": "Plugin for finishing-a-development-branch",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "frontend-design-plugin",
"source": "./skills/frontend-design-plugin",
"description": "Plugin for frontend-design",
"version": "1.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "gitea-plugin",
"source": "./skills/gitea-plugin",
"description": "Gitea 代码托管与 CI/CD 管理。用于 Gitea Actions workflow 管理、Runner 管理、PR 操作、仓库配置。",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "openclaw-ops-plugin",
"source": "./skills/openclaw-ops-plugin",
"description": "Plugin for openclaw-ops",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "openclaw-plugin",
"source": "./skills/openclaw-plugin",
"description": "OpenClaw (龙虾) - Remote AI compute orchestration system. Dispatches requirements to Claude Code instances on remote machines, monitors execution, and aggregates results.",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "ops-servers-plugin",
"source": "./skills/ops-servers-plugin",
"description": "Plugin for ops-servers",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "ops-tools-plugin",
"source": "./skills/ops-tools-plugin",
"description": "Plugin for ops-tools",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "pull-request-plugin",
"source": "./skills/pull-request-plugin",
"description": "Plugin for pr",
"version": "1.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "read-session-plugin",
"source": "./skills/read-session-plugin",
"description": "Plugin for read-session",
"version": "1.0.0",
"category": "workflow",
"keywords": [
"session",
"workflow",
"productivity"
],
"strict": false
},
{
"name": "reload-session-plugin",
"source": "./skills/reload-session-plugin",
"description": "Plugin for reload-session",
"version": "1.0.0",
"category": "workflow",
"keywords": [
"session",
"workflow",
"productivity"
],
"strict": false
},
{
"name": "req-commands-plugin",
"source": "./skills/req-commands-plugin",
"description": "需求命令详细参考。含撰写命令new/draft/edit/check/split/history/compare和流程命令submit/review/phase/next/deploy/done。",
"version": "2.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "req-deploy-plugin",
"source": "./skills/req-deploy-plugin",
"description": "Plugin for req-deploy",
"version": "1.0.0",
"category": "devops",
"keywords": [
"devops",
"deployment",
"operations"
],
"strict": false
},
{
"name": "req-dev-plugin",
"source": "./skills/req-dev-plugin",
"description": "Plugin for req-dev",
"version": "1.0.0",
"category": "development",
"keywords": [
"development",
"coding",
"workflow"
],
"strict": false
},
{
"name": "req-plugin",
"source": "./skills/req-plugin",
"description": "需求工作流管理入口。用于 /req 命令使用、需求生命周期管理、需求撰写(含草稿门禁)。",
"version": "2.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "req-prd-plugin",
"source": "./skills/req-prd-plugin",
"description": "Plugin for req-prd",
"version": "1.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "req-review-plugin",
"source": "./skills/req-review-plugin",
"description": "PRD 评审方法论。用于需求评审、PRD 文档审查、评审意见编写。当执行 /req review 或需要评审 PRD 文档时使用。",
"version": "1.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "req-test-gate-plugin",
"source": "./skills/req-test-gate-plugin",
"description": "测试与质量门禁制度。覆盖需求级测试(Gates 1-5含前后端联调+视觉验证)、部署级验证(Deploy Gates)、持续回归(Regression)。",
"version": "1.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "req-workflow-plugin",
"source": "./skills/req-workflow-plugin",
"description": "需求完整工作流。用于从创建到归档的完整流程、Hook 自动同步、测试环境流程。当需要了解需求完整生命周期或同步策略时使用。",
"version": "1.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "requirement-plugin",
"source": "./skills/requirement-plugin",
"description": "[已废弃] 需求撰写功能已合并到 req-plugin。请使用 /req 命令。",
"version": "2.0.0",
"category": "productivity",
"keywords": [
"project-management",
"tasks",
"requirements"
],
"strict": false
},
{
"name": "save-session-plugin",
"source": "./skills/save-session-plugin",
"description": "Plugin for save-session",
"version": "1.0.0",
"category": "workflow",
"keywords": [
"session",
"workflow",
"productivity"
],
"strict": false
},
{
"name": "search-sessions-plugin",
"source": "./skills/search-sessions-plugin",
"description": "Plugin for search-sessions",
"version": "1.0.0",
"category": "workflow",
"keywords": [
"session",
"workflow",
"productivity"
],
"strict": false
},
{
"name": "session-plugin",
"source": "./skills/session-plugin",
"description": "Manage Claude Code sessions — save, reload, read, and search saved conversations. Triggers on /session commands or when user mentions saving session, reloading session, finding previous conversations, or continuing previous work.",
"version": "1.0.0",
"category": "workflow",
"keywords": [
"session",
"workflow",
"productivity"
],
"strict": false
},
{
"name": "siyuan-plugin",
"source": "./skills/siyuan-plugin",
"description": "Plugin for siyuan",
"version": "1.0.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "siyuan-to-feishu-plugin",
"source": "./skills/siyuan-to-feishu-plugin",
"description": "将思源笔记导出为 PDF 并发送到飞书群。当用户提到发送笔记、导出PDF发飞书、/siyuan send、分享到飞书相关任务时自动激活。",
"version": "1.0.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "skill-manager-plugin",
"source": "./skills/skill-manager-plugin",
"description": "|",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
},
{
"name": "wecom-plugin",
"source": "./skills/wecom-plugin",
"description": "企业微信集成。通过自然语言发送消息、管理群机器人、操作审批流程、管理通讯录。当用户提到企业微信、微信工作、群机器人、企业号、wecom相关任务时自动激活。",
"version": "1.0.0",
"category": "integration",
"keywords": [
"integration",
"automation",
"productivity"
],
"strict": false
},
{
"name": "qiudl-personal-plugin",
"source": "./skills-personal/qiudl-personal-plugin",
"description": "Plugin for qiudl-personal",
"version": "1.0.0",
"category": "utility",
"keywords": [
"utility",
"tools"
],
"strict": false
}
]
}

24
.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
# Personal skills (not version controlled)
skills-personal/
# Environment and secrets
.env
.env.*
*.token
*.key
*.pem
# MCP generated config
.mcp.json
# OS files
.DS_Store
Thumbs.db
# Python
__pycache__/
*.pyc
*.pyo
# Node
node_modules/

64
CLAUDE.md Normal file
View File

@@ -0,0 +1,64 @@
# ai-proj-helper
Claude Code 技能市场 + MCP 配置管理工具。
## 快速开始
```bash
./init.sh
```
交互式配置 MCP 连接和生成 marketplace.json。支持命令行参数
```bash
./init.sh --mode stdio --env prod --token YOUR_TOKEN
```
## 目录结构
```
ai-proj-helper/
├── skills/ # 公共技能Git 版本控制)
│ ├── ai-proj-plugin/
│ │ ├── .claude-plugin/plugin.json
│ │ └── skills/SKILL.md
│ └── ...
├── skills-personal/ # 个人技能(.gitignore 排除)
│ └── qiudl-personal-plugin/
├── claude-config.yaml # 技能启用/禁用 + MCP 配置
├── init.sh # MCP + marketplace 初始化
├── sync-skills.sh # 从 ~/.claude/skills/ 同步技能
└── generate-marketplace.py # marketplace.json 生成器
```
## 添加新技能
1.`skills/` 下创建 `<name>-plugin/` 目录
2. 创建 `.claude-plugin/plugin.json``skills/SKILL.md`
3. 运行 `python3 generate-marketplace.py` 重新生成 marketplace.json
## 禁用技能
编辑 `claude-config.yaml`
```yaml
skills:
disabled:
- "dotfiles-plugin"
- "biz-ops-plugin"
```
重新运行 `./init.sh``python3 generate-marketplace.py`
## MCP 环境
| 环境 | API 地址 |
|------|----------|
| dev | http://localhost:8080/api/v1 |
| staging | https://ai-staging.pipexerp.com/api/v1 |
| prod | https://ai.pipexerp.com/api/v1 |
## 个人技能
`skills-personal/` 目录不被 Git 跟踪,用于存放个人配置和工具。
个人技能同样会被 `generate-marketplace.py` 扫描并加入 marketplace.json。

16
PUSH.sh
View File

@@ -1,16 +0,0 @@
#!/bin/bash
echo "🚀 Pushing to Gitea..."
echo ""
echo "Make sure you've created the repository on Gitea:"
echo "https://gitea.pipexerp.com/huangjun/claude-marketplace"
echo ""
read -p "Press Enter to continue..."
git push -u origin main
echo ""
echo "✅ Done! Your marketplace is now live at:"
echo "https://gitea.pipexerp.com/huangjun/claude-marketplace"
echo ""
echo "Test it with:"
echo "/plugin marketplace add git@gitea.pipexerp.com:huangjun/claude-marketplace.git"

251
README.md
View File

@@ -1,179 +1,130 @@
# Claude Code Plugin Marketplace # ai-proj-helper
Custom Claude Code plugins for development workflows, DevOps, and business operations. Claude Code 技能市场 + MCP 配置管理工具。整合公共技能、个人技能、MCP 服务器配置于一体。
## 🚀 Quick Start > **从 claude-marketplace 迁移?** 本仓库是 claude-marketplace 的超集,已包含所有原有插件。直接使用本仓库即可,无需额外迁移。
### Add the Marketplace ## 快速开始
```bash ```bash
/plugin marketplace add git@gitea.pipexerp.com:huangjun/claude-marketplace.git # 1. 克隆仓库
git clone https://gitea.pipexerp.com/pipexerp/ai-proj-helper.git
cd ai-proj-helper
# 2. 运行初始化(交互式配置 MCP + 生成 marketplace
./init.sh
# 3. 添加技能市场
/plugin marketplace add /path/to/ai-proj-helper
``` ```
Or using HTTPS (requires credential configuration): 也可以使用命令行参数跳过交互:
```bash
/plugin marketplace add https://gitea.pipexerp.com/huangjun/claude-marketplace.git
```
### Install Plugins
```bash ```bash
# Install specific plugin ./init.sh --mode stdio --env prod --token YOUR_TOKEN
/plugin install ai-proj-plugin@coolbuy-claude-plugins
# List all available plugins
/plugin marketplace list coolbuy-claude-plugins
``` ```
## 📦 Available Plugins (40 Total) ## 目录结构
### 🚀 Development & Coding ```
- **ai-proj-plugin** - AI project management with MCP integration ai-proj-helper/
- **dev-plugin** - General development workflows ├── .claude-plugin/marketplace.json # 自动生成
- **dev-arch-plugin** - Software architecture and design ├── claude-config.yaml # 技能启用/禁用 + MCP 配置
- **dev-coding-plugin** - Coding standards and best practices ├── init.sh # MCP + marketplace 初始化
- **dev-test-plugin** - Testing workflows and automation ├── sync-skills.sh # 同步本地技能
- **frontend-design-plugin** - Frontend design and UI/UX ├── generate-marketplace.py # marketplace 生成器
├── skills/ # 公共技能 (48 个Git 版本控制)
### 🔧 DevOps & Operations │ ├── ai-proj-plugin/
- **ops-tools-plugin** - DevOps tools for deployment and monitoring │ ├── dev-coding-plugin/
- **ops-servers-plugin** - Server management and SSH operations │ ├── feishu-plugin/
- **enjoysa-deploy-plugin** - Enjoysa deployment automation │ └── ...
- **req-deploy-plugin** - Requirement deployment workflows └── skills-personal/ # 个人技能 (.gitignore 排除)
└── qiudl-personal-plugin/
### 📋 Project & Requirements Management
- **req-plugin** - Requirement management workflows
- **req-dev-plugin** - Requirement development processes
- **req-prd-plugin** - PRD (Product Requirements Document) creation
- **req-commands-plugin** - Detailed command reference for /req
- **req-review-plugin** - PRD review methodology
- **req-workflow-plugin** - Complete requirement lifecycle workflow
- **requirement-plugin** - General requirement handling
- **executing-plans-plugin** - Plan execution and tracking
### 💼 Business Operations
- **biz-plan-plugin** - Business planning and proposals
- **biz-contract-plugin** - Contract drafting and management
- **finance-plugin** - Financial operations and reporting
### 🔗 Integrations
- **feishu-plugin** - Feishu/Lark integration (documents, spreadsheets)
- **feishu-bitable-plugin** - Feishu Bitable (multi-dimensional tables)
- **feishu-docx-plugin** - Feishu cloud documents
- **wecom-plugin** - WeChat Work integration
- **siyuan-plugin** - SiYuan note-taking integration
- **data-excel-plugin** - Excel data processing
- **doubao-voice-plugin** - Doubao Voice API (TTS, ASR, dialogue)
### 🏢 Project-Specific
- **coolbuy-legacy-plugin** - Coolbuy legacy system workflows
- **coolbuy-paas-plugin** - Coolbuy PaaS platform operations
- **coolbuy-platform-plugin** - Coolbuy platform development
- **enjoysa-plugin** - Enjoysa project workflows
### 🔄 Session Management
- **save-session-plugin** - Save Claude Code sessions
- **reload-session-plugin** - Reload saved sessions
- **read-session-plugin** - Read session data
- **search-sessions-plugin** - Search through sessions
### 🛠️ Utilities
- **pr-plugin** - Pull request creation and management
- **finishing-a-development-branch-plugin** - Branch finishing workflows
- **skill-manager-plugin** - Skill management utilities
- **qiudl-personal-plugin** - Personal productivity tools
## 📖 Usage Examples
### AI Project Management
```bash
/ai-proj-plugin:create-task "Implement user authentication"
/ai-proj-plugin:start-timer
``` ```
### DevOps Operations ## 可用技能 (48 公共)
```bash
/ops-tools-plugin:deploy production ### 开发
/ops-servers-plugin:check-status
ai-proj, dev, dev-arch, dev-coding, dev-test, frontend-design, agent-swarm
### DevOps
ops-tools, ops-servers, enjoysa-deploy, req-deploy
### 需求管理
req, req-commands, req-dev, req-prd, req-review, req-test-gate, req-workflow, requirement, executing-plans
### 业务
biz-plan, biz-contract, biz-ops, finance
### 集成
feishu, feishu-bitable, feishu-docx, wecom, siyuan, siyuan-to-feishu, data-excel, doubao-voice
### 项目
coolbuy-legacy, coolbuy-paas, coolbuy-platform, enjoysa, openclaw, openclaw-ops
### 会话管理
save-session, reload-session, read-session, search-sessions, session
### 工具
pull-request, finishing-a-development-branch, skill-manager, dotfiles, gitea
## 配置管理
### claude-config.yaml
```yaml
version: "1.0"
mcp:
mode: stdio # stdio | sse
env: prod # dev | staging | prod
skills:
disabled: [] # 禁用的技能列表
personal_dir: "skills-personal"
``` ```
### Development Workflow ### 禁用技能
```bash
/dev-coding-plugin:start-feature "user-profile" 编辑 `claude-config.yaml` 添加要禁用的技能:
/finishing-a-development-branch-plugin:create-pr
```yaml
skills:
disabled:
- "dotfiles-plugin"
- "biz-ops-plugin"
``` ```
### Business Operations 然后重新运行 `./init.sh``python3 generate-marketplace.py`
```bash
/biz-contract-plugin:draft "Software Subscription Agreement"
/biz-plan-plugin:create-proposal
```
## 🔐 Private Repository Access ## 同步本地技能
For background auto-updates, set authentication token: `~/.claude/skills/` 中的技能同步到仓库:
```bash ```bash
# Add to ~/.zshrc or ~/.bashrc ./sync-skills.sh
export GITEA_TOKEN="your-gitea-token"
``` ```
## 📝 Plugin Naming Convention ## MCP 环境
All plugins use namespaced commands to avoid conflicts: | 环境 | API 地址 | 用途 |
- Format: `/plugin-name:command-name` |------|----------|------|
- Example: `/ai-proj-plugin:create-task` | dev | http://localhost:8080 | 本地开发 |
| staging | https://ai-staging.pipexerp.com | 测试环境 |
| prod | https://ai.pipexerp.com | 生产环境 |
## 🔄 Updates ## 作者
Update the marketplace and plugins: **Donglin Lai (qiudl)** - qiudl@zhiyuncai.com
```bash ## 仓库
# Update marketplace catalog
/plugin marketplace update coolbuy-claude-plugins
# Update specific plugin https://gitea.pipexerp.com/pipexerp/ai-proj-helper
/plugin update ai-proj-plugin@coolbuy-claude-plugins
# Update all plugins from this marketplace
/plugin update-all
```
## 🏗️ Plugin Structure
Each plugin follows the official Claude Code plugin structure:
```
plugin-name-plugin/
├── .claude-plugin/
│ └── plugin.json # Plugin metadata
├── skills/
│ └── SKILL.md # Agent skills
└── [scripts, configs, etc.]
```
## 📚 Documentation
- [Official Claude Code Plugin Docs](https://code.claude.com/docs/en/plugins)
- [Plugin Marketplace Guide](https://code.claude.com/docs/en/plugin-marketplaces)
## 👤 Author
**Donglin Lai (qiudl)**
- Email: qiudl@zhiyuncai.com
- Organization: PipeX ERP
## 📄 License
Individual plugins may have their own licenses. Please check each plugin's documentation.
## 🤝 Contributing
To add or update plugins:
1. Clone this repository
2. Add/modify plugins in the `plugins/` directory
3. Regenerate `marketplace.json` using the provided scripts
4. Submit changes
---
**Repository**: git@gitea.pipexerp.com:huangjun/claude-marketplace.git

13
claude-config.yaml Normal file
View File

@@ -0,0 +1,13 @@
version: "1.0"
mcp:
mode: stdio # stdio | sse
env: prod # dev | staging | prod
# Token 不存储在此文件,由 init.sh 引导配置
skills:
disabled: []
# disabled:
# - "dotfiles-plugin"
# - "biz-ops-plugin"
personal_dir: "skills-personal"

View File

@@ -1,82 +0,0 @@
#!/bin/bash
# Convert dotfiles custom skills to official Claude Code plugins
SOURCE_DIR="/Users/junhuang/coolbuy/new-ai-proj/dotfiles/claude-skills"
TARGET_DIR="/Users/junhuang/coolbuy/claude-marketplace/plugins"
echo "Converting skills to plugins..."
# Loop through each skill directory
for skill_dir in "$SOURCE_DIR"/*; do
# Skip non-directories and special files
if [ ! -d "$skill_dir" ] || [ "$(basename "$skill_dir")" = ".git" ]; then
continue
fi
skill_name=$(basename "$skill_dir")
plugin_name="${skill_name}-plugin"
plugin_dir="$TARGET_DIR/$plugin_name"
echo "Processing: $skill_name -> $plugin_name"
# Create plugin directory structure
mkdir -p "$plugin_dir/.claude-plugin"
mkdir -p "$plugin_dir/skills"
# Copy SKILL.md if exists
if [ -f "$skill_dir/SKILL.md" ]; then
cp "$skill_dir/SKILL.md" "$plugin_dir/skills/"
fi
# Copy skill.yaml if exists (for reference)
if [ -f "$skill_dir/skill.yaml" ]; then
cp "$skill_dir/skill.yaml" "$plugin_dir/.skill.yaml.original"
fi
# Copy any Python scripts or other files
find "$skill_dir" -type f \( -name "*.py" -o -name "*.sh" -o -name "*.js" -o -name "*.json" -o -name "*.md" \) -not -name "SKILL.md" -not -name "skill.yaml" -exec cp {} "$plugin_dir/" \;
# Copy subdirectories (like scripts/)
for subdir in "$skill_dir"/*; do
if [ -d "$subdir" ]; then
subdir_name=$(basename "$subdir")
cp -r "$subdir" "$plugin_dir/"
fi
done
# Read version from skill.yaml if exists, otherwise use 1.0.0
version="1.0.0"
if [ -f "$skill_dir/skill.yaml" ]; then
yaml_version=$(grep "^version:" "$skill_dir/skill.yaml" | sed 's/version: *//' | tr -d '"' | tr -d "'")
if [ ! -z "$yaml_version" ]; then
version="$yaml_version"
fi
fi
# Read description from skill.yaml
description="Plugin for $skill_name"
if [ -f "$skill_dir/skill.yaml" ]; then
yaml_desc=$(grep "^description:" "$skill_dir/skill.yaml" | sed 's/description: *//' | tr -d '"')
if [ ! -z "$yaml_desc" ]; then
description="$yaml_desc"
fi
fi
# Create plugin.json
cat > "$plugin_dir/.claude-plugin/plugin.json" << EOF
{
"name": "$plugin_name",
"description": "$description",
"version": "$version",
"author": {
"name": "qiudl"
}
}
EOF
echo " ✓ Created $plugin_name"
done
echo ""
echo "Conversion complete! Created $(ls -1 "$TARGET_DIR" | wc -l) plugins."

View File

@@ -1,14 +1,57 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import json import json
import os
from pathlib import Path from pathlib import Path
try:
import yaml
HAS_YAML = True
except ImportError:
HAS_YAML = False
# Paths # Paths
script_dir = Path(__file__).parent.resolve() script_dir = Path(__file__).parent.resolve()
plugins_dir = script_dir / "plugins" skills_dir = script_dir / "skills"
personal_dir = script_dir / "skills-personal"
config_file = script_dir / "claude-config.yaml"
marketplace_file = script_dir / ".claude-plugin" / "marketplace.json" marketplace_file = script_dir / ".claude-plugin" / "marketplace.json"
def load_config():
"""Load claude-config.yaml and return disabled list + personal_dir."""
disabled = []
personal = "skills-personal"
if config_file.exists() and HAS_YAML:
with open(config_file) as f:
cfg = yaml.safe_load(f) or {}
skills_cfg = cfg.get("skills", {})
disabled = skills_cfg.get("disabled", []) or []
personal = skills_cfg.get("personal_dir", personal)
elif config_file.exists():
# Fallback: parse disabled list without PyYAML
in_disabled = False
with open(config_file) as f:
for line in f:
stripped = line.strip()
if stripped.startswith("disabled:"):
rest = stripped[len("disabled:"):].strip()
if rest == "[]":
break
in_disabled = True
continue
if in_disabled:
if stripped.startswith("- "):
val = stripped[2:].strip().strip('"').strip("'")
disabled.append(val)
elif stripped and not stripped.startswith("#"):
break
if stripped.startswith("personal_dir:"):
personal = stripped.split(":", 1)[1].strip().strip('"').strip("'")
return disabled, personal
# Category mapping # Category mapping
def get_category_and_keywords(plugin_name): def get_category_and_keywords(plugin_name):
if any(x in plugin_name for x in ['dev-', 'coding', 'frontend']): if any(x in plugin_name for x in ['dev-', 'coding', 'frontend']):
@@ -26,31 +69,61 @@ def get_category_and_keywords(plugin_name):
else: else:
return "utility", ["utility", "tools"] return "utility", ["utility", "tools"]
# Collect plugins
def scan_plugins(directory, source_prefix, disabled):
"""Scan a directory for plugins, excluding disabled ones."""
plugins = []
if not directory.is_dir():
return plugins
for plugin_dir in sorted(directory.glob("*-plugin")):
if not plugin_dir.is_dir():
continue
plugin_name = plugin_dir.name
if plugin_name in disabled:
print(f"{plugin_name} (disabled)")
continue
manifest_path = plugin_dir / ".claude-plugin" / "plugin.json"
if not manifest_path.exists():
continue
with open(manifest_path) as f:
manifest = json.load(f)
category, keywords = get_category_and_keywords(plugin_name)
plugins.append({
"name": plugin_name,
"source": f"{source_prefix}/{plugin_name}",
"description": manifest.get("description", f"Plugin for {plugin_name}"),
"version": manifest.get("version", "1.0.0"),
"category": category,
"keywords": keywords,
"strict": False
})
return plugins
# Load config
disabled_skills, personal_dir_name = load_config()
personal_skills_dir = script_dir / personal_dir_name
# Collect plugins from skills/ and skills-personal/
plugins = [] plugins = []
for plugin_dir in sorted(plugins_dir.glob("*-plugin")): print("Scanning skills/ ...")
if not plugin_dir.is_dir(): plugins.extend(scan_plugins(skills_dir, "./skills", disabled_skills))
continue print(f" Found {len(plugins)} public plugins")
manifest_path = plugin_dir / ".claude-plugin" / "plugin.json" personal_count = 0
if not manifest_path.exists(): if personal_skills_dir.is_dir():
continue print(f"Scanning {personal_dir_name}/ ...")
personal_plugins = scan_plugins(personal_skills_dir, f"./{personal_dir_name}", disabled_skills)
with open(manifest_path) as f: personal_count = len(personal_plugins)
manifest = json.load(f) plugins.extend(personal_plugins)
print(f" Found {personal_count} personal plugins")
plugin_name = plugin_dir.name
category, keywords = get_category_and_keywords(plugin_name)
plugins.append({
"name": plugin_name,
"source": f"./plugins/{plugin_name}",
"description": manifest.get("description", f"Plugin for {plugin_name}"),
"version": manifest.get("version", "1.0.0"),
"category": category,
"keywords": keywords,
"strict": False
})
# Create marketplace # Create marketplace
marketplace = { marketplace = {
@@ -62,13 +135,16 @@ marketplace = {
"metadata": { "metadata": {
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations", "description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
"version": "1.0.0", "version": "1.0.0",
"pluginRoot": "./plugins" "pluginRoot": "./skills"
}, },
"plugins": plugins "plugins": plugins
} }
# Ensure output directory exists
marketplace_file.parent.mkdir(parents=True, exist_ok=True)
# Write marketplace.json # Write marketplace.json
with open(marketplace_file, 'w') as f: with open(marketplace_file, 'w') as f:
json.dump(marketplace, f, indent=2, ensure_ascii=False) json.dump(marketplace, f, indent=2, ensure_ascii=False)
print(f"✓ Generated marketplace.json with {len(plugins)} plugins") print(f"\n✓ Generated marketplace.json with {len(plugins)} plugins ({personal_count} personal)")

View File

@@ -1,102 +0,0 @@
#!/bin/bash
# Generate marketplace.json from converted plugins
TARGET_DIR="/Users/junhuang/coolbuy/claude-marketplace/plugins"
MARKETPLACE_FILE="/Users/junhuang/coolbuy/claude-marketplace/.claude-plugin/marketplace.json"
echo "Generating marketplace.json..."
# Start JSON
cat > "$MARKETPLACE_FILE" << 'EOF'
{
"name": "coolbuy-claude-plugins",
"owner": {
"name": "Donglin Lai (qiudl)",
"email": "qiudl@zhiyuncai.com"
},
"metadata": {
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
"version": "1.0.0",
"pluginRoot": "./plugins"
},
"plugins": [
EOF
# Loop through each plugin and extract info
first=true
for plugin_dir in "$TARGET_DIR"/*-plugin; do
if [ ! -d "$plugin_dir" ]; then
continue
fi
plugin_name=$(basename "$plugin_dir")
manifest="$plugin_dir/.claude-plugin/plugin.json"
if [ ! -f "$manifest" ]; then
continue
fi
# Extract info from plugin.json using grep and sed
description=$(grep '"description"' "$manifest" | head -1 | sed 's/.*"description": *"\([^"]*\)".*/\1/')
version=$(grep '"version"' "$manifest" | head -1 | sed 's/.*"version": *"\([^"]*\)".*/\1/')
# Determine category based on plugin name
category="utility"
keywords=""
case "$plugin_name" in
*dev-*|*coding*|*frontend*)
category="development"
keywords='["development", "coding", "workflow"]'
;;
*ops-*|*deploy*|*server*)
category="devops"
keywords='["devops", "deployment", "operations"]'
;;
*ai-proj*|*req*)
category="productivity"
keywords='["project-management", "tasks", "requirements"]'
;;
*feishu*|*wecom*|*siyuan*)
category="integration"
keywords='["integration", "automation", "productivity"]'
;;
*biz-*)
category="business"
keywords='["business", "planning", "contracts"]'
;;
*session*)
category="workflow"
keywords='["session", "workflow", "productivity"]'
;;
esac
# Add comma if not first entry
if [ "$first" = true ]; then
first=false
else
echo "," >> "$MARKETPLACE_FILE"
fi
# Write plugin entry
cat >> "$MARKETPLACE_FILE" << ENTRY
{
"name": "$plugin_name",
"source": "$plugin_name",
"description": "$description",
"version": "$version",
"category": "$category",
"keywords": $keywords,
"strict": false
}ENTRY
done
# Close JSON
cat >> "$MARKETPLACE_FILE" << 'EOF'
]
}
EOF
echo "✓ Generated marketplace.json with $(grep -c '"name"' "$MARKETPLACE_FILE" | awk '{print $1-1}') plugins"

189
init.sh Executable file
View File

@@ -0,0 +1,189 @@
#!/bin/bash
# ai-proj-helper 初始化脚本
# 配置 MCP 服务器 + 生成 marketplace.json
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
MCP_CONFIG="$HOME/.claude/.mcp.json"
MCP_BRIDGE_DIR="$HOME/coding/qiudl/new-ai-proj/mcp-task-bridge"
CONFIG_FILE="$SCRIPT_DIR/claude-config.yaml"
# Default values
MODE=""
ENV=""
TOKEN=""
# ── Parse command line arguments ──────────────────────────────────────
while [[ $# -gt 0 ]]; do
case $1 in
--mode) MODE="$2"; shift 2 ;;
--env) ENV="$2"; shift 2 ;;
--token) TOKEN="$2"; shift 2 ;;
-h|--help)
echo "Usage: ./init.sh [--mode stdio|sse] [--env dev|staging|prod] [--token PAT_TOKEN]"
echo ""
echo "Options:"
echo " --mode MCP connection mode: stdio (local) or sse (remote)"
echo " --env Environment: dev, staging, or prod"
echo " --token Personal Access Token for ai-proj API"
echo ""
echo "Without arguments, runs in interactive mode."
exit 0
;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
# ── Read config defaults ─────────────────────────────────────────────
read_config_value() {
local key="$1"
local default="$2"
if [ -f "$CONFIG_FILE" ]; then
local val
val=$(grep "^ ${key}:" "$CONFIG_FILE" 2>/dev/null | head -1 | sed 's/^[^:]*: *//' | sed 's/ *#.*//' | tr -d '"' | tr -d "'")
if [ -n "$val" ]; then
echo "$val"
return
fi
fi
echo "$default"
}
CONFIG_MODE=$(read_config_value "mode" "stdio")
CONFIG_ENV=$(read_config_value "env" "prod")
# ── Interactive mode selection ────────────────────────────────────────
if [ -z "$MODE" ]; then
echo "┌─────────────────────────────────────┐"
echo "│ ai-proj-helper 初始化 │"
echo "└─────────────────────────────────────┘"
echo ""
echo "MCP 连接模式:"
echo " 1) stdio - 本地进程 (需要 mcp-task-bridge)"
echo " 2) sse - 远程 SSE 连接"
echo ""
read -p "选择模式 [1/2] (default: $([ "$CONFIG_MODE" = "sse" ] && echo "2" || echo "1")): " mode_choice
case "$mode_choice" in
2|sse) MODE="sse" ;;
*) MODE="stdio" ;;
esac
fi
# ── Interactive environment selection ─────────────────────────────────
if [ -z "$ENV" ]; then
echo ""
echo "环境:"
echo " 1) dev - http://localhost:8080"
echo " 2) staging - https://ai-staging.pipexerp.com"
echo " 3) prod - https://ai.pipexerp.com"
echo ""
default_num=3
[ "$CONFIG_ENV" = "dev" ] && default_num=1
[ "$CONFIG_ENV" = "staging" ] && default_num=2
read -p "选择环境 [1/2/3] (default: $default_num): " env_choice
case "$env_choice" in
1|dev) ENV="dev" ;;
2|staging) ENV="staging" ;;
*) ENV="prod" ;;
esac
fi
# ── Resolve API base URL ─────────────────────────────────────────────
case "$ENV" in
dev) API_BASE="http://localhost:8080/api/v1" ;;
staging) API_BASE="https://ai-staging.pipexerp.com/api/v1" ;;
prod) API_BASE="https://ai.pipexerp.com/api/v1" ;;
esac
# ── Token input ───────────────────────────────────────────────────────
if [ -z "$TOKEN" ]; then
echo ""
echo "请输入 AI-Proj Personal Access Token (PAT):"
echo " 获取方式: 登录 AI-Proj → 设置 → API Tokens → 创建"
echo ""
read -sp "Token: " TOKEN
echo ""
fi
if [ -z "$TOKEN" ]; then
echo "❌ Token 不能为空"
exit 1
fi
echo ""
echo "配置信息:"
echo " 模式: $MODE"
echo " 环境: $ENV ($API_BASE)"
echo ""
# ── stdio mode: ensure mcp-task-bridge ────────────────────────────────
if [ "$MODE" = "stdio" ]; then
if [ ! -d "$MCP_BRIDGE_DIR" ]; then
echo "📦 mcp-task-bridge 未找到,正在克隆..."
git clone https://gitea.pipexerp.com/pipexerp/mcp-task-bridge.git "$MCP_BRIDGE_DIR"
fi
if [ ! -f "$MCP_BRIDGE_DIR/dist/index.js" ]; then
echo "🔨 构建 mcp-task-bridge..."
cd "$MCP_BRIDGE_DIR"
npm install
npm run build
cd "$SCRIPT_DIR"
fi
BRIDGE_ENTRY="$MCP_BRIDGE_DIR/dist/index.js"
# Generate .mcp.json for stdio mode
mkdir -p "$(dirname "$MCP_CONFIG")"
cat > "$MCP_CONFIG" << EOF
{
"mcpServers": {
"ai-proj": {
"command": "node",
"args": ["$BRIDGE_ENTRY"],
"env": {
"NODE_ENV": "production",
"TASK_API_BASE": "$API_BASE",
"TASK_API_TOKEN": "$TOKEN",
"MCP_SERVER_NAME": "ai-proj"
}
}
}
}
EOF
echo "✅ 已生成 $MCP_CONFIG (stdio 模式)"
elif [ "$MODE" = "sse" ]; then
# Generate .mcp.json for SSE mode
SSE_URL="${API_BASE%/api/v1}/mcp/sse"
mkdir -p "$(dirname "$MCP_CONFIG")"
cat > "$MCP_CONFIG" << EOF
{
"mcpServers": {
"ai-proj": {
"type": "sse",
"url": "$SSE_URL",
"headers": {
"Authorization": "Bearer $TOKEN"
}
}
}
}
EOF
echo "✅ 已生成 $MCP_CONFIG (SSE 模式)"
fi
# ── Generate marketplace.json ─────────────────────────────────────────
echo ""
echo "🔄 生成 marketplace.json..."
cd "$SCRIPT_DIR"
python3 generate-marketplace.py
echo ""
echo "┌─────────────────────────────────────┐"
echo "│ ✅ 初始化完成! │"
echo "└─────────────────────────────────────┘"
echo ""
echo "下次启动 Claude Code 即可使用 MCP 工具。"
echo "如需更新技能配置,编辑 claude-config.yaml 后重新运行 ./init.sh"

View File

@@ -1,8 +0,0 @@
{
"name": "qiudl-personal-plugin",
"description": "Plugin for qiudl-personal",
"version": "1.0.0",
"author": {
"name": "qiudl"
}
}

View File

@@ -1,106 +0,0 @@
# 邱栋梁个人配置 Skill
## cn-dev 远程开发机
| 配置项 | 值 |
|--------|-----|
| 别名 | cn-dev |
| Tailscale IP | 100.92.148.46 |
| SSH 用户 | johnqiu |
| 主机名 | Yanmeis-MacBook-Pro.local |
| SSH 密钥 | ~/.ssh/id_ed25519_cn_dev |
| 设备类型 | MacBook Pro (Apple Silicon) |
| 系统 | macOS (Darwin 25.1.0) |
### SSH 快捷连接
```bash
ssh cn-dev # 直接连接
ssh cn-dev "command" # 远程执行命令
```
### 项目路径
| 项目 | 路径 |
|------|------|
| new-ai-proj | /Users/johnqiu/workspace/new-ai-proj |
| AI-Proj-iOS | /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS |
### 已连接设备
| 设备 | 型号 | UDID | 状态 |
|------|------|------|------|
| JohnQiu's iPhone | iPhone 17 Pro | 00008150-001E64800AD2401C | 已连接 |
---
## au-dev 本机 (Mac mini)
| 配置项 | 值 |
|--------|-----|
| 主机名 | DONGLIN's Mac mini |
| Tailscale IP | 100.114.124.68 |
| 位置 | 澳大利亚 |
### 项目路径
| 项目 | 路径 |
|------|------|
| new-ai-proj | /Users/donglinlai/coding/qiudl/new-ai-proj |
---
## iOS 部署流程
### 方式 1: 通过 cn-dev 部署到 iPhone
```bash
# 1. 同步代码
ssh cn-dev "cd /Users/johnqiu/workspace/new-ai-proj && git pull"
# 2. 打开 Xcode
ssh cn-dev "open /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS/AI-Proj-iOS.xcodeproj"
# 3. 在 Xcode 中选择 iPhone 设备,按 Cmd+R 运行
```
### 方式 2: 命令行构建安装
```bash
# 构建并安装 (需要 iPhone 信任并解锁)
ssh cn-dev "cd /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS && \
xcodebuild -project AI-Proj-iOS.xcodeproj \
-scheme 'AI-Proj-iOS' \
-destination 'id=00008150-001E64800AD2401C' \
-configuration Debug \
build"
```
### 常见问题
**DDI 服务不可用 (ddiServicesAvailable: false)**
需要在 iPhone 上:
1. 解锁 iPhone
2. 如有弹窗,点击「信任此电脑」
3. 输入 iPhone 密码确认
**检查设备状态**
```bash
ssh cn-dev "xcrun devicectl list devices"
```
---
## 凭据
| 服务 | 账号 | 密码 | 备注 |
|------|------|------|------|
| AI-Proj | qiudl | Admin@2026~ | 管理员账号 |
| AI-Proj | lvkai | Lvkai@123 | 测试账号 |
---
**创建时间**: 2026-01-31 17:45:00 ACDT
**最后更新**: 2026-01-31 17:55:00 ACDT

Some files were not shown because too many files have changed in this diff Show More