From 795f1846f7557be9a2e326d299b225616ce29eb6 Mon Sep 17 00:00:00 2001 From: Alireza Rezvani <5697919+alirezarezvani@users.noreply.github.com> Date: Wed, 11 Mar 2026 17:29:48 +0100 Subject: [PATCH 1/2] feat: multi-tool skill conversion (Cursor, Aider, Windsurf, etc.) (#326) (#327) * feat: add multi-tool conversion scripts (7 tools) - convert.sh: converts 156 skills to Antigravity, Cursor, Aider, Kilo Code, Windsurf, OpenCode, Augment formats - install.sh: installs converted skills to each tool's expected location - Pure bash/awk, no external deps, macOS + Linux compatible - Per-tool README with install/verify/update docs - integrations/ added to .gitignore (generated output) * docs: add multi-tool conversion to README - New section documenting Cursor, Aider, Kilo Code, Windsurf, OpenCode, Augment support - Install commands for each tool - Link to integrations/ for per-tool docs - Quick start: convert.sh + install.sh workflow --------- Co-authored-by: Leo --- .gitignore | 4 +- README.md | 40 +++ scripts/convert.sh | 593 +++++++++++++++++++++++++++++++++++++++++++++ scripts/install.sh | 275 +++++++++++++++++++++ 4 files changed, 911 insertions(+), 1 deletion(-) create mode 100755 scripts/convert.sh create mode 100755 scripts/install.sh diff --git a/.gitignore b/.gitignore index e5b1c02..cc8e47a 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,6 @@ archive/ # MkDocs build output site/ -.playwright-mcp/ \ No newline at end of file +.playwright-mcp/ +# Generated integration files (regenerate with ./scripts/convert.sh) +integrations/ diff --git a/README.md b/README.md index a99fbd3..c101023 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,46 @@ git clone https://github.com/alirezarezvani/claude-skills.git --- +## Multi-Tool Support (New) + +**Convert all 156 skills to 7 AI coding tools** with a single script: + +| Tool | Format | Install | +|------|--------|---------| +| **Cursor** | `.mdc` rules | `./scripts/install.sh --tool cursor --target .` | +| **Aider** | `CONVENTIONS.md` | `./scripts/install.sh --tool aider --target .` | +| **Kilo Code** | `.kilocode/rules/` | `./scripts/install.sh --tool kilocode --target .` | +| **Windsurf** | `.windsurf/skills/` | `./scripts/install.sh --tool windsurf --target .` | +| **OpenCode** | `.opencode/skills/` | `./scripts/install.sh --tool opencode --target .` | +| **Augment** | `.augment/rules/` | `./scripts/install.sh --tool augment --target .` | +| **Antigravity** | `~/.gemini/antigravity/skills/` | `./scripts/install.sh --tool antigravity` | + +**How it works:** + +```bash +# 1. Convert all skills to all tools (takes ~15 seconds) +./scripts/convert.sh --tool all + +# 2. Install into your project (with confirmation) +./scripts/install.sh --tool cursor --target /path/to/project + +# Or use --force to skip confirmation: +./scripts/install.sh --tool aider --target . --force + +# 3. Verify +find .cursor/rules -name "*.mdc" | wc -l # Should show 156 +``` + +**Each tool gets:** +- ✅ All 156 skills converted to native format +- ✅ Per-tool README with install/verify/update steps +- ✅ Support for scripts, references, templates where applicable +- ✅ Zero manual conversion work + +See [integrations/](integrations/) for tool-specific documentation and pre-generated outputs. + +--- + ## Skills Overview **177 skills across 9 domains:** diff --git a/scripts/convert.sh b/scripts/convert.sh new file mode 100755 index 0000000..eff95ea --- /dev/null +++ b/scripts/convert.sh @@ -0,0 +1,593 @@ +#!/usr/bin/env bash +# Usage: +# ./scripts/convert.sh [--tool ] [--out ] [--help] +# +# Tools: antigravity, cursor, aider, kilocode, windsurf, opencode, augment, all +# Default: all + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +TOOL="all" +OUT_BASE="${REPO_ROOT}/integrations" +TODAY="$(date +%F)" + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +BLUE='\033[0;34m' +NC='\033[0m' + +ok() { + echo -e "${GREEN}[OK]${NC} $*" +} + +warn() { + echo -e "${YELLOW}[!!]${NC} $*" +} + +err() { + echo -e "${RED}[ERR]${NC} $*" >&2 +} + +info() { + echo -e "${BLUE}[*]${NC} $*" +} + +usage() { + cat <<'USAGE' +Usage: + ./scripts/convert.sh [--tool ] [--out ] [--help] + +Tools: + antigravity, cursor, aider, kilocode, windsurf, opencode, augment, all + +Defaults: + --tool all + --out /integrations +USAGE +} + +is_valid_tool() { + case "$1" in + antigravity|cursor|aider|kilocode|windsurf|opencode|augment|all) return 0 ;; + *) return 1 ;; + esac +} + +yaml_unquote() { + local value="$1" + value="${value#\"}" + value="${value%\"}" + value="${value#\'}" + value="${value%\'}" + printf '%s' "$value" +} + +yaml_quote() { + local value="$1" + value="${value//\\/\\\\}" + value="${value//\"/\\\"}" + printf '"%s"' "$value" +} + +init_count_vars() { + converted_antigravity=0 + converted_cursor=0 + converted_aider=0 + converted_kilocode=0 + converted_windsurf=0 + converted_opencode=0 + converted_augment=0 + + skipped_antigravity=0 + skipped_cursor=0 + skipped_aider=0 + skipped_kilocode=0 + skipped_windsurf=0 + skipped_opencode=0 + skipped_augment=0 +} + +inc_converted() { + local t="$1" + case "$t" in + antigravity) converted_antigravity=$((converted_antigravity + 1)) ;; + cursor) converted_cursor=$((converted_cursor + 1)) ;; + aider) converted_aider=$((converted_aider + 1)) ;; + kilocode) converted_kilocode=$((converted_kilocode + 1)) ;; + windsurf) converted_windsurf=$((converted_windsurf + 1)) ;; + opencode) converted_opencode=$((converted_opencode + 1)) ;; + augment) converted_augment=$((converted_augment + 1)) ;; + esac +} + +inc_skipped() { + local t="$1" + case "$t" in + antigravity) skipped_antigravity=$((skipped_antigravity + 1)) ;; + cursor) skipped_cursor=$((skipped_cursor + 1)) ;; + aider) skipped_aider=$((skipped_aider + 1)) ;; + kilocode) skipped_kilocode=$((skipped_kilocode + 1)) ;; + windsurf) skipped_windsurf=$((skipped_windsurf + 1)) ;; + opencode) skipped_opencode=$((skipped_opencode + 1)) ;; + augment) skipped_augment=$((skipped_augment + 1)) ;; + esac +} + +get_converted() { + local t="$1" + case "$t" in + antigravity) echo "$converted_antigravity" ;; + cursor) echo "$converted_cursor" ;; + aider) echo "$converted_aider" ;; + kilocode) echo "$converted_kilocode" ;; + windsurf) echo "$converted_windsurf" ;; + opencode) echo "$converted_opencode" ;; + augment) echo "$converted_augment" ;; + esac +} + +get_skipped() { + local t="$1" + case "$t" in + antigravity) echo "$skipped_antigravity" ;; + cursor) echo "$skipped_cursor" ;; + aider) echo "$skipped_aider" ;; + kilocode) echo "$skipped_kilocode" ;; + windsurf) echo "$skipped_windsurf" ;; + opencode) echo "$skipped_opencode" ;; + augment) echo "$skipped_augment" ;; + esac +} + +# Prints frontmatter fields as: namedescription +extract_frontmatter() { + local file="$1" + awk ' + BEGIN { + in_fm = 0 + name = "" + desc = "" + in_desc_block = 0 + } + + function ltrim(s) { + sub(/^[[:space:]]+/, "", s) + return s + } + + function rtrim(s) { + sub(/[[:space:]]+$/, "", s) + return s + } + + function trim(s) { + return rtrim(ltrim(s)) + } + + function dequote(s, first, last) { + s = trim(s) + first = substr(s, 1, 1) + last = substr(s, length(s), 1) + if ((first == "\"" && last == "\"") || (first == "\047" && last == "\047")) { + s = substr(s, 2, length(s) - 2) + if (first == "\"") { + gsub(/\\\\/, "\\", s) + gsub(/\\"/, "\"", s) + } else { + gsub(/\047\047/, "\047", s) + } + } + return s + } + + function append_desc(chunk) { + chunk = trim(chunk) + if (chunk == "") return + if (desc == "") { + desc = chunk + } else { + desc = desc " " chunk + } + } + + NR == 1 { + if ($0 == "---") { + in_fm = 1 + next + } + next + } + + in_fm == 1 { + if ($0 == "---") { + in_fm = 0 + next + } + + if (in_desc_block == 1) { + if ($0 ~ /^[[:space:]]+/ || $0 == "") { + line = $0 + sub(/^[[:space:]]+/, "", line) + append_desc(line) + next + } + in_desc_block = 0 + } + + if ($0 ~ /^name:[[:space:]]*/) { + line = $0 + sub(/^name:[[:space:]]*/, "", line) + name = dequote(line) + next + } + + if ($0 ~ /^description:[[:space:]]*/) { + line = $0 + sub(/^description:[[:space:]]*/, "", line) + line = trim(line) + + if (line ~ /^>[+-]?$/ || line ~ /^\|[+-]?$/) { + in_desc_block = 1 + next + } + + desc = dequote(line) + next + } + + next + } + + END { + printf "%s\t%s\n", trim(name), trim(desc) + } + ' "$file" +} + +extract_body() { + local file="$1" + awk ' + BEGIN { in_fm = 0 } + + NR == 1 { + if ($0 == "---") { + in_fm = 1 + next + } + print + next + } + + in_fm == 1 { + if ($0 == "---") { + in_fm = 0 + next + } + next + } + + { print } + ' "$file" +} + +copy_supporting_dirs() { + local src_dir="$1" + local dst_dir="$2" + local d + for d in scripts references templates; do + if [[ -d "${src_dir}/${d}" ]]; then + cp -R "${src_dir}/${d}" "${dst_dir}/${d}" + fi + done +} + +append_aider_skill() { + local name="$1" + local description="$2" + local body_file="$3" + + { + echo "---" + echo + echo "## ${name}" + echo "> ${description}" + echo + cat "$body_file" + echo + } >> "${AIDER_FILE}" +} + +tool_title() { + case "$1" in + antigravity) echo "Antigravity" ;; + cursor) echo "Cursor" ;; + aider) echo "Aider" ;; + kilocode) echo "Kilo Code" ;; + windsurf) echo "Windsurf" ;; + opencode) echo "OpenCode" ;; + augment) echo "Augment" ;; + esac +} + +write_tool_readme() { + local tool="$1" + local count="$2" + local out_dir="${OUT_BASE}/${tool}" + + local format_line="" + local manual_install="" + local script_install="./scripts/install.sh --tool ${tool}" + local verify_step="" + local update_step="" + + case "$tool" in + antigravity) + format_line='Directory skill bundles: `SKILL.md` with Antigravity frontmatter (`risk`, `source`, `date_added`) plus copied `scripts/`, `references/`, `templates/` when present.' + manual_install='Copy each folder from `integrations/antigravity//` to `~/.gemini/antigravity/skills//`.' + verify_step='Run `find ~/.gemini/antigravity/skills -name "SKILL.md" | wc -l` and confirm the count, then check your Gemini/Antigravity skill list.' + update_step='Re-run `./scripts/convert.sh --tool antigravity` and then reinstall with `./scripts/install.sh --tool antigravity`.' + ;; + cursor) + format_line='Flat Cursor rules: `rules/.mdc` with Cursor-compatible frontmatter (`description`, `globs`, `alwaysApply`).' + manual_install='Copy `integrations/cursor/rules/*.mdc` into your project `.cursor/rules/` directory.' + verify_step='Open Cursor rules panel or run `find .cursor/rules -name "*.mdc" | wc -l` in your project.' + update_step='Re-run `./scripts/convert.sh --tool cursor` and then reinstall with `./scripts/install.sh --tool cursor --target `.' + ;; + aider) + format_line='Single conventions file: `CONVENTIONS.md` concatenating all skills with separators and per-skill sections.' + manual_install='Copy `integrations/aider/CONVENTIONS.md` into your project root.' + verify_step='Run `aider --read CONVENTIONS.md` and confirm sections load (search for `## ` entries).' + update_step='Re-run `./scripts/convert.sh --tool aider` and reinstall with `./scripts/install.sh --tool aider --target `.' + ;; + kilocode) + format_line='Flat markdown rules: `rules/.md` with a title/description header and no frontmatter.' + manual_install='Copy `integrations/kilocode/rules/*.md` into your project `.kilocode/rules/` directory.' + verify_step='Run `find .kilocode/rules -name "*.md" | wc -l` in your project and confirm expected count.' + update_step='Re-run `./scripts/convert.sh --tool kilocode` and reinstall with `./scripts/install.sh --tool kilocode --target `.' + ;; + windsurf) + format_line='Directory skill bundles: `skills//SKILL.md` using Windsurf-compatible SKILL frontmatter (`name`, `description`) plus copied support folders.' + manual_install='Copy each folder from `integrations/windsurf/skills//` to `.windsurf/skills//` in your project.' + verify_step='Run `find .windsurf/skills -name "SKILL.md" | wc -l` and verify skills are listed in Windsurf.' + update_step='Re-run `./scripts/convert.sh --tool windsurf` and reinstall with `./scripts/install.sh --tool windsurf --target `.' + ;; + opencode) + format_line='Directory skill bundles: `skills//SKILL.md` with `compatibility: opencode` plus copied support folders.' + manual_install='Copy each folder from `integrations/opencode/skills//` to `.opencode/skills//` in your project.' + verify_step='Run `find .opencode/skills -name "SKILL.md" | wc -l` and confirm OpenCode shows installed skills.' + update_step='Re-run `./scripts/convert.sh --tool opencode` and reinstall with `./scripts/install.sh --tool opencode --target `.' + ;; + augment) + format_line='Flat Augment rules: `rules/.md` with Augment frontmatter (`type: auto`, `description`).' + manual_install='Copy `integrations/augment/rules/*.md` into your project `.augment/rules/` directory.' + verify_step='Run `find .augment/rules -name "*.md" | wc -l` and check rules appear in Augment.' + update_step='Re-run `./scripts/convert.sh --tool augment` and reinstall with `./scripts/install.sh --tool augment --target `.' + ;; + esac + + { + printf '# %s Integration\n\n' "$(tool_title "$tool")" + printf '![%s](https://img.shields.io/badge/Integration-%s-0A66C2)\n\n' "$tool" "$tool" + printf 'This directory contains converted Claude Skills for **%s**.\n\n' "$(tool_title "$tool")" + printf '## Included Skills\n\n' + printf -- '- **%s** skills generated from this repository.\n\n' "$count" + printf '## Format\n\n' + printf '%s\n\n' "$format_line" + printf '## Install\n\n' + printf '### Manual\n\n' + printf '%s\n\n' "$manual_install" + printf '### Script\n\n' + printf '```bash\n' + printf 'git clone https://github.com/alirezarezvani/claude-skills.git\n' + printf 'cd claude-skills\n' + printf '%s\n' "$script_install" + printf '```\n\n' + printf '## Verify\n\n' + printf '%s\n\n' "$verify_step" + printf '## Update\n\n' + printf '%s\n\n' "$update_step" + printf '## Source Repository\n\n' + printf -- '- https://github.com/alirezarezvani/claude-skills\n' + } > "${out_dir}/README.md" +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --tool) + TOOL="${2:-}" + shift 2 + ;; + --out) + OUT_BASE="${2:-}" + shift 2 + ;; + --help|-h) + usage + exit 0 + ;; + *) + err "Unknown argument: $1" + usage + exit 1 + ;; + esac +done + +if ! is_valid_tool "$TOOL"; then + err "Invalid --tool value: ${TOOL}" + usage + exit 1 +fi + +TOOLS="antigravity cursor aider kilocode windsurf opencode augment" +if [[ "$TOOL" != "all" ]]; then + TOOLS="$TOOL" +fi + +SKILLS_TMP="$(mktemp)" +( + cd "$REPO_ROOT" + find . -mindepth 3 -maxdepth 3 -type f -name 'SKILL.md' -not -path './.git/*' | sort +) > "$SKILLS_TMP" + +TOTAL_CANDIDATES="$(wc -l < "$SKILLS_TMP" | tr -d ' ')" +if [[ "$TOTAL_CANDIDATES" -eq 0 ]]; then + err "No skills found matching */*/SKILL.md" + rm -f "$SKILLS_TMP" + exit 1 +fi + +info "Found ${TOTAL_CANDIDATES} candidate skills" + +for t in $TOOLS; do + rm -rf "${OUT_BASE}/${t}" + mkdir -p "${OUT_BASE}/${t}" + if [[ "$t" == "cursor" || "$t" == "kilocode" || "$t" == "augment" ]]; then + mkdir -p "${OUT_BASE}/${t}/rules" + fi + if [[ "$t" == "windsurf" || "$t" == "opencode" ]]; then + mkdir -p "${OUT_BASE}/${t}/skills" + fi + if [[ "$t" == "aider" ]]; then + AIDER_FILE="${OUT_BASE}/aider/CONVENTIONS.md" + { + echo "# Claude Skills — Aider Conventions" + echo "> Auto-generated from claude-skills. Do not edit manually." + echo "> Generated: ${TODAY}" + echo + } > "$AIDER_FILE" + fi + ok "Prepared output directory: ${OUT_BASE}/${t}" +done + +init_count_vars + +while IFS= read -r rel_path; do + src="${REPO_ROOT}/${rel_path#./}" + src_dir="$(dirname "$src")" + + meta="$(extract_frontmatter "$src")" + name="${meta%%$'\t'*}" + description="${meta#*$'\t'}" + + name="$(yaml_unquote "$name")" + description="$(yaml_unquote "$description")" + + if [[ -z "$name" || -z "$description" ]]; then + for t in $TOOLS; do + inc_skipped "$t" + done + warn "Skipping invalid frontmatter: ${rel_path}" + continue + fi + + body_tmp="$(mktemp)" + extract_body "$src" > "$body_tmp" + + for t in $TOOLS; do + case "$t" in + antigravity) + out_dir="${OUT_BASE}/antigravity/${name}" + mkdir -p "$out_dir" + { + echo "---" + echo "name: $(yaml_quote "$name")" + echo "description: $(yaml_quote "$description")" + echo "risk: low" + echo "source: community" + echo "date_added: '${TODAY}'" + echo "---" + cat "$body_tmp" + } > "${out_dir}/SKILL.md" + copy_supporting_dirs "$src_dir" "$out_dir" + ;; + cursor) + out_file="${OUT_BASE}/cursor/rules/${name}.mdc" + { + echo "---" + echo "description: $(yaml_quote "$description")" + echo "globs:" + echo "alwaysApply: false" + echo "---" + cat "$body_tmp" + } > "$out_file" + ;; + aider) + append_aider_skill "$name" "$description" "$body_tmp" + ;; + kilocode) + out_file="${OUT_BASE}/kilocode/rules/${name}.md" + { + echo "# ${name}" + echo "> ${description}" + echo + cat "$body_tmp" + } > "$out_file" + ;; + windsurf) + out_dir="${OUT_BASE}/windsurf/skills/${name}" + mkdir -p "$out_dir" + { + echo "---" + echo "name: $(yaml_quote "$name")" + echo "description: $(yaml_quote "$description")" + echo "---" + cat "$body_tmp" + } > "${out_dir}/SKILL.md" + copy_supporting_dirs "$src_dir" "$out_dir" + ;; + opencode) + out_dir="${OUT_BASE}/opencode/skills/${name}" + mkdir -p "$out_dir" + { + echo "---" + echo "name: $(yaml_quote "$name")" + echo "description: $(yaml_quote "$description")" + echo "compatibility: opencode" + echo "---" + cat "$body_tmp" + } > "${out_dir}/SKILL.md" + copy_supporting_dirs "$src_dir" "$out_dir" + ;; + augment) + out_file="${OUT_BASE}/augment/rules/${name}.md" + { + echo "---" + echo "type: auto" + echo "description: $(yaml_quote "$description")" + echo "---" + cat "$body_tmp" + } > "$out_file" + ;; + *) + err "Unhandled tool: ${t}" + rm -f "$body_tmp" "$SKILLS_TMP" + exit 1 + ;; + esac + + inc_converted "$t" + done + + rm -f "$body_tmp" + ok "Converted ${name} (${rel_path})" +done < "$SKILLS_TMP" + +rm -f "$SKILLS_TMP" + +for t in $TOOLS; do + write_tool_readme "$t" "$(get_converted "$t")" +done + +echo +info "Conversion summary" +for t in $TOOLS; do + echo " ${t}: $(get_converted "$t") converted, $(get_skipped "$t") skipped" +done + +echo +ok "Done" diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..f15bcf9 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,275 @@ +#!/usr/bin/env bash +# Usage: +# ./scripts/install.sh --tool [--target ] [--force] [--help] +# +# Installs converted skills into the appropriate location. +# --target overrides the default install path. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +TOOL="" +TARGET="" +FORCE=false + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +ok() { + echo -e "${GREEN}[OK]${NC} $*" +} + +warn() { + echo -e "${YELLOW}[!!]${NC} $*" +} + +err() { + echo -e "${RED}[ERR]${NC} $*" >&2 +} + +usage() { + cat <<'USAGE' +Usage: + ./scripts/install.sh --tool [--target ] [--force] [--help] + +Tools: + antigravity, cursor, aider, kilocode, windsurf, opencode, augment + +Examples: + ./scripts/install.sh --tool cursor --target /path/to/project + ./scripts/install.sh --tool antigravity + ./scripts/install.sh --tool aider --force +USAGE +} + +is_valid_tool() { + case "$1" in + antigravity|cursor|aider|kilocode|windsurf|opencode|augment) return 0 ;; + *) return 1 ;; + esac +} + +confirm_overwrite() { + local prompt="$1" + + if $FORCE; then + return 0 + fi + + printf "%s [y/N]: " "$prompt" + read -r reply + case "$reply" in + y|Y|yes|YES) return 0 ;; + *) return 1 ;; + esac +} + +safe_copy_dir_contents() { + local src_dir="$1" + local dst_dir="$2" + + mkdir -p "$dst_dir" + cp -R "${src_dir}/." "$dst_dir/" +} + +install_antigravity() { + local src_root="${REPO_ROOT}/integrations/antigravity" + local dst_root + + if [[ -n "$TARGET" ]]; then + dst_root="$TARGET" + else + dst_root="${HOME}/.gemini/antigravity/skills" + fi + + if [[ ! -d "$src_root" ]]; then + err "Missing source directory: $src_root" + err "Run ./scripts/convert.sh --tool antigravity first." + exit 1 + fi + + mkdir -p "$dst_root" + + local count=0 + local skill_dir + for skill_dir in "$src_root"/*; do + if [[ ! -d "$skill_dir" ]]; then + continue + fi + if [[ "$(basename "$skill_dir")" == "README.md" ]]; then + continue + fi + + local skill_name + skill_name="$(basename "$skill_dir")" + local dst_skill="${dst_root}/${skill_name}" + + if [[ -e "$dst_skill" ]]; then + if ! confirm_overwrite "Overwrite existing ${dst_skill}?"; then + warn "Skipped ${dst_skill}" + continue + fi + rm -rf "$dst_skill" + fi + + cp -R "$skill_dir" "$dst_skill" + count=$((count + 1)) + done + + ok "Installed ${count} skill directories to ${dst_root}" +} + +install_flat_rules_tool() { + local tool="$1" + local subdir="$2" + local ext="$3" + + local src_dir="${REPO_ROOT}/integrations/${tool}/rules" + local base_target="${TARGET:-$PWD}" + local dst_dir="${base_target}/${subdir}" + + if [[ ! -d "$src_dir" ]]; then + err "Missing source directory: $src_dir" + err "Run ./scripts/convert.sh --tool ${tool} first." + exit 1 + fi + + if [[ -d "$dst_dir" ]] && [[ "$(find "$dst_dir" -maxdepth 1 -type f -name "*${ext}" | wc -l | tr -d ' ')" -gt 0 ]]; then + if ! confirm_overwrite "${dst_dir} already contains ${ext} files. Overwrite contents?"; then + warn "Install cancelled for ${tool}" + return + fi + rm -rf "$dst_dir" + fi + + mkdir -p "$dst_dir" + cp -R "${src_dir}/." "$dst_dir/" + + local count + count="$(find "$dst_dir" -maxdepth 1 -type f -name "*${ext}" | wc -l | tr -d ' ')" + ok "Installed ${count} files to ${dst_dir}" +} + +install_aider() { + local src_file="${REPO_ROOT}/integrations/aider/CONVENTIONS.md" + local base_target="${TARGET:-$PWD}" + local dst_file="${base_target}/CONVENTIONS.md" + + if [[ ! -f "$src_file" ]]; then + err "Missing source file: $src_file" + err "Run ./scripts/convert.sh --tool aider first." + exit 1 + fi + + mkdir -p "$base_target" + + if [[ -f "$dst_file" ]]; then + if ! confirm_overwrite "Overwrite existing ${dst_file}?"; then + warn "Skipped ${dst_file}" + return + fi + fi + + cp "$src_file" "$dst_file" + ok "Installed ${dst_file}" +} + +install_skill_bundle_tool() { + local tool="$1" + local src_dir="${REPO_ROOT}/integrations/${tool}/skills" + local base_target="${TARGET:-$PWD}" + local dst_dir="${base_target}/.${tool}/skills" + + if [[ ! -d "$src_dir" ]]; then + err "Missing source directory: $src_dir" + err "Run ./scripts/convert.sh --tool ${tool} first." + exit 1 + fi + + if [[ -d "$dst_dir" ]] && [[ "$(find "$dst_dir" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')" -gt 0 ]]; then + if ! confirm_overwrite "${dst_dir} already contains skills. Overwrite contents?"; then + warn "Install cancelled for ${tool}" + return + fi + rm -rf "$dst_dir" + fi + + mkdir -p "$dst_dir" + cp -R "${src_dir}/." "$dst_dir/" + + local count + count="$(find "$dst_dir" -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')" + ok "Installed ${count} skill directories to ${dst_dir}" +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --tool) + TOOL="${2:-}" + shift 2 + ;; + --target) + TARGET="${2:-}" + shift 2 + ;; + --force) + FORCE=true + shift + ;; + --help|-h) + usage + exit 0 + ;; + *) + err "Unknown argument: $1" + usage + exit 1 + ;; + esac +done + +if [[ -z "$TOOL" ]]; then + err "--tool is required" + usage + exit 1 +fi + +if ! is_valid_tool "$TOOL"; then + err "Invalid --tool value: ${TOOL}" + usage + exit 1 +fi + +case "$TOOL" in + antigravity) + install_antigravity + ;; + cursor) + install_flat_rules_tool "cursor" ".cursor/rules" ".mdc" + ;; + aider) + install_aider + ;; + kilocode) + install_flat_rules_tool "kilocode" ".kilocode/rules" ".md" + ;; + windsurf) + install_skill_bundle_tool "windsurf" + ;; + opencode) + install_skill_bundle_tool "opencode" + ;; + augment) + install_flat_rules_tool "augment" ".augment/rules" ".md" + ;; + *) + err "Unhandled tool: ${TOOL}" + exit 1 + ;; +esac + +ok "Installation complete for ${TOOL}" From 5df8928bc8e70de20731b87ffd612dc2a02cc8fd Mon Sep 17 00:00:00 2001 From: Alireza Rezvani <5697919+alirezarezvani@users.noreply.github.com> Date: Wed, 11 Mar 2026 18:09:06 +0100 Subject: [PATCH 2/2] feat: multi-tool skill conversion (Cursor, Aider, Windsurf, etc.) (#326) (#327) (#329) (#330) --- README.md | 10 +- docs/getting-started.md | 73 +++++ docs/index.md | 5 +- docs/integrations.md | 607 ++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 3 +- 5 files changed, 691 insertions(+), 7 deletions(-) create mode 100644 docs/integrations.md diff --git a/README.md b/README.md index c101023..acf616b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # Claude Code Skills & Plugins -**177 production-ready skills and plugins for Claude Code, OpenAI Codex, Gemini CLI, and OpenClaw** — reusable expertise bundles that transform AI coding agents into specialized professionals across engineering, product, marketing, compliance, and more. +**177 production-ready skills and plugins for 11 AI coding tools** — reusable expertise bundles that transform AI coding agents into specialized professionals across engineering, product, marketing, compliance, and more. + +**Works with:** Claude Code · OpenAI Codex · Gemini CLI · OpenClaw · Cursor · Aider · Windsurf · Kilo Code · OpenCode · Augment · Antigravity [![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge)](https://opensource.org/licenses/MIT) [![Skills](https://img.shields.io/badge/Skills-177-brightgreen?style=for-the-badge)](#skills-overview) @@ -17,7 +19,7 @@ Skills are modular instruction packages (plugins) that give AI coding agents domain expertise they don't have out of the box. Each skill includes a `SKILL.md` (instructions + workflows), Python CLI tools, and reference documentation — everything the agent needs to perform like a specialist. -**One repo, four platforms:** Works natively as Claude Code plugins, OpenAI Codex CLI and agents, Gemini CLI skills, and OpenClaw skills. All 254 Python tools are stdlib-only and verified working. +**One repo, eleven platforms:** Works natively with Claude Code, OpenAI Codex, Gemini CLI, OpenClaw, Cursor, Aider, Windsurf, Kilo Code, OpenCode, Augment, and Antigravity. All 254 Python tools are stdlib-only and verified working. --- @@ -268,8 +270,8 @@ python3 product-team/landing-page-generator/scripts/landing_page_scaffolder.py c **How do I install Claude Code plugins?** Add the marketplace with `/plugin marketplace add alirezarezvani/claude-skills`, then install any skill bundle with `/plugin install @claude-code-skills`. -**Do these skills work with OpenAI Codex?** -Yes. Skills work natively with Claude Code, OpenAI Codex, Gemini CLI, and OpenClaw. See Quick Install above. +**Do these skills work with OpenAI Codex / Cursor / Windsurf / Aider?** +Yes. Skills work natively with 11 tools: Claude Code, OpenAI Codex, Gemini CLI, OpenClaw, Cursor, Aider, Windsurf, Kilo Code, OpenCode, Augment, and Antigravity. Run `./scripts/convert.sh --tool all` to convert for all tools, then install with `./scripts/install.sh --tool `. See [Multi-Tool Integrations](https://alirezarezvani.github.io/claude-skills/integrations/) for details. **Will updating break my installation?** No. We follow semantic versioning and maintain backward compatibility within patch releases. Existing script arguments, plugin source paths, and SKILL.md structures are never changed in patch versions. See the [CHANGELOG](CHANGELOG.md) for details on each release. diff --git a/docs/getting-started.md b/docs/getting-started.md index 302e66d..1b6532d 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -57,6 +57,69 @@ Choose your platform and follow the steps: bash <(curl -s https://raw.githubusercontent.com/alirezarezvani/claude-skills/main/scripts/openclaw-install.sh) ``` +=== "Cursor" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool cursor + ./scripts/install.sh --tool cursor --target /path/to/project + ``` + +=== "Aider" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool aider + ./scripts/install.sh --tool aider --target /path/to/project + ``` + +=== "Windsurf" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool windsurf + ./scripts/install.sh --tool windsurf --target /path/to/project + ``` + +=== "Kilo Code" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool kilocode + ./scripts/install.sh --tool kilocode --target /path/to/project + ``` + +=== "OpenCode" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool opencode + ./scripts/install.sh --tool opencode --target /path/to/project + ``` + +=== "Augment" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool augment + ./scripts/install.sh --tool augment --target /path/to/project + ``` + +=== "Antigravity" + + ```bash + git clone https://github.com/alirezarezvani/claude-skills.git + cd claude-skills + ./scripts/convert.sh --tool antigravity + ./scripts/install.sh --tool antigravity + ``` + === "Manual" ```bash @@ -64,6 +127,13 @@ Choose your platform and follow the steps: # Copy any skill folder to ~/.claude/skills/ ``` +!!! tip "All 7 tools at once" + Convert for every supported tool in one command: + ```bash + ./scripts/convert.sh --tool all + ``` + See the [Multi-Tool Integrations](integrations.md) page for detailed per-tool documentation. +
## Available Bundles @@ -182,3 +252,6 @@ See the [Skills & Agents Factory](https://github.com/alirezarezvani/claude-code- ??? question "Does this work with Gemini CLI?" Yes. Run `./scripts/gemini-install.sh` to set up skills for Gemini CLI. A sync script (`scripts/sync-gemini-skills.py`) generates the skills index automatically. + +??? question "Does this work with Cursor, Windsurf, Aider, or other tools?" + Yes. All 156 skills can be converted to native formats for Cursor, Aider, Kilo Code, Windsurf, OpenCode, Augment, and Antigravity. Run `./scripts/convert.sh --tool all` and then install with `./scripts/install.sh --tool `. See [Multi-Tool Integrations](integrations.md) for details. diff --git a/docs/index.md b/docs/index.md index b9f52a9..cfad8f8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -17,7 +17,7 @@ hide: 177 production-ready skills that transform AI coding agents into specialized professionals. { .hero-subtitle } -**Claude Code** | **OpenAI Codex** | **Gemini CLI** | **OpenClaw** +**Claude Code** | **OpenAI Codex** | **Gemini CLI** | **OpenClaw** | **Cursor** | **Aider** | **Windsurf** | **Kilo Code** | **OpenCode** | **Augment** | **Antigravity** { .hero-platforms } [Get Started](getting-started.md){ .md-button .md-button--primary } @@ -173,7 +173,7 @@ hide: --- - Works natively with Claude Code, OpenAI Codex, and OpenClaw — same skills, any agent. + Works natively with 11 tools: Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Aider, Windsurf, Kilo Code, OpenCode, Augment, and Antigravity. - :material-check-decagram:{ .lg .middle } **Production-grade** @@ -196,4 +196,5 @@ hide: ``` [Full Install Guide](getting-started.md){ .md-button .md-button--primary } +[Multi-Tool Setup](integrations.md){ .md-button } [View on GitHub :fontawesome-brands-github:](https://github.com/alirezarezvani/claude-skills){ .md-button } diff --git a/docs/integrations.md b/docs/integrations.md new file mode 100644 index 0000000..9c7a9ce --- /dev/null +++ b/docs/integrations.md @@ -0,0 +1,607 @@ +--- +title: Multi-Tool Integrations +description: "Use Claude Code Skills with Cursor, Aider, Kilo Code, Windsurf, OpenCode, Augment, and Antigravity. Convert and install all 156 skills in seconds." +--- + +# Multi-Tool Integrations + +All 156 skills in this repository can be converted to work natively with **7 AI coding tools** beyond Claude Code, Codex, and Gemini CLI. The conversion preserves skill instructions, workflows, and supporting files — adapting only the format each tool expects. + +
+ +- :material-cursor-default-click:{ .lg .middle } **Cursor** + + --- + + `.mdc` rule files in `.cursor/rules/` + + [:octicons-arrow-right-24: Jump to Cursor](#cursor) + +- :material-code-braces:{ .lg .middle } **Aider** + + --- + + Single `CONVENTIONS.md` file + + [:octicons-arrow-right-24: Jump to Aider](#aider) + +- :material-alpha-k-box:{ .lg .middle } **Kilo Code** + + --- + + Markdown rules in `.kilocode/rules/` + + [:octicons-arrow-right-24: Jump to Kilo Code](#kilo-code) + +- :material-surfing:{ .lg .middle } **Windsurf** + + --- + + `SKILL.md` bundles in `.windsurf/skills/` + + [:octicons-arrow-right-24: Jump to Windsurf](#windsurf) + +- :material-console:{ .lg .middle } **OpenCode** + + --- + + `SKILL.md` bundles in `.opencode/skills/` + + [:octicons-arrow-right-24: Jump to OpenCode](#opencode) + +- :material-auto-fix:{ .lg .middle } **Augment** + + --- + + Rule files in `.augment/rules/` + + [:octicons-arrow-right-24: Jump to Augment](#augment) + +- :material-google:{ .lg .middle } **Antigravity** + + --- + + `SKILL.md` bundles in `~/.gemini/antigravity/skills/` + + [:octicons-arrow-right-24: Jump to Antigravity](#antigravity) + +
+ +
+ +## Quick Start + +### 1. Convert + +```bash +git clone https://github.com/alirezarezvani/claude-skills.git +cd claude-skills + +# Convert all skills for all tools (~15 seconds) +./scripts/convert.sh --tool all + +# Or convert for a specific tool only +./scripts/convert.sh --tool cursor +``` + +### 2. Install + +```bash +# Install into your project directory +./scripts/install.sh --tool cursor --target /path/to/project + +# Or install globally (Antigravity) +./scripts/install.sh --tool antigravity + +# Skip confirmation prompts +./scripts/install.sh --tool aider --target . --force +``` + +### 3. Verify + +Each tool section below includes a verification step to confirm skills are loaded. + +!!! tip "Regenerate after updates" + When you pull new skills from the repository, re-run `./scripts/convert.sh` and `./scripts/install.sh` to update your local installation. + +
+ +## How Conversion Works + +The converter reads each skill's `SKILL.md` frontmatter (`name` and `description`) and markdown body, then outputs the format each tool expects: + +| Source | Target | What Changes | +|--------|--------|--------------| +| YAML frontmatter | Tool-specific frontmatter | Field names/values adapted per tool | +| Markdown body | Passed through | Instructions preserved as-is | +| `scripts/` dir | Copied (where supported) | Antigravity, Windsurf, OpenCode | +| `references/` dir | Copied (where supported) | Antigravity, Windsurf, OpenCode | +| `templates/` dir | Copied (where supported) | Antigravity, Windsurf, OpenCode | + +Tools that use flat files (Cursor, Aider, Kilo Code, Augment) get the SKILL.md body only — supporting directories are not copied since those tools don't support subdirectories per rule. + +
+ +## Cursor + +[Cursor](https://cursor.com) uses `.mdc` rule files in `.cursor/rules/` with frontmatter for description, glob patterns, and auto-apply settings. + +### Format + +Each skill becomes a single `.mdc` file: + +```yaml +--- +description: "What this skill does and when to activate it" +globs: +alwaysApply: false +--- + +# Skill instructions here... +``` + +- **`alwaysApply: false`** — skills are available on-demand, not always loaded +- **`globs:`** — empty by default; add file patterns to auto-activate for specific files (e.g., `*.test.ts`) + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool cursor + ./scripts/install.sh --tool cursor --target /path/to/project + ``` + +=== "Manual" + + ```bash + mkdir -p /path/to/project/.cursor/rules + cp integrations/cursor/rules/*.mdc /path/to/project/.cursor/rules/ + ``` + +### Verify + +```bash +find .cursor/rules -name "*.mdc" | wc -l +# Expected: 156 +``` + +Open the Cursor rules panel to see all available skills listed. + +### Customization + +After installation, you can: + +- Set `alwaysApply: true` on skills you want active in every conversation +- Add `globs: "*.py"` to auto-activate Python-related skills for `.py` files +- Remove skills you don't need to keep your rules panel clean + +
+ +## Aider + +[Aider](https://aider.chat) reads a `CONVENTIONS.md` file from your project root. All skills are concatenated into this single file with section headers. + +### Format + +```markdown +# Claude Skills — Aider Conventions +> Auto-generated from claude-skills. Do not edit manually. +> Generated: 2026-03-11 + +--- + +## copywriting +> When the user wants to write, rewrite, or improve marketing copy... + +# Copywriting + +You are an expert conversion copywriter... + +--- + +## senior-architect +> Deep expertise in system architecture... + +# Senior Architect +... +``` + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool aider + ./scripts/install.sh --tool aider --target /path/to/project + ``` + +=== "Manual" + + ```bash + cp integrations/aider/CONVENTIONS.md /path/to/project/ + ``` + +### Usage + +```bash +# Aider automatically reads CONVENTIONS.md from the project root +aider + +# Or explicitly point to it +aider --read CONVENTIONS.md +``` + +### Verify + +```bash +wc -l CONVENTIONS.md +# Expected: ~41,000 lines (all 156 skills) + +grep -c "^## " CONVENTIONS.md +# Expected: 156 (one section per skill) +``` + +!!! note "Large file" + The combined `CONVENTIONS.md` is ~41K lines. Aider handles this well, but if you prefer a smaller file, you can edit it to keep only the skills relevant to your project. + +
+ +## Kilo Code + +[Kilo Code](https://kilo.ai) reads plain markdown rules from `.kilocode/rules/`. No special frontmatter required. + +### Format + +Each skill becomes a clean markdown file: + +```markdown +# copywriting +> When the user wants to write, rewrite, or improve marketing copy... + +# Copywriting + +You are an expert conversion copywriter... +``` + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool kilocode + ./scripts/install.sh --tool kilocode --target /path/to/project + ``` + +=== "Manual" + + ```bash + mkdir -p /path/to/project/.kilocode/rules + cp integrations/kilocode/rules/*.md /path/to/project/.kilocode/rules/ + ``` + +### Verify + +```bash +find .kilocode/rules -name "*.md" | wc -l +# Expected: 156 +``` + +Open Kilo Code's rules panel (click the ⚖ icon) to see all rules loaded. + +### Mode-Specific Rules + +Kilo Code supports mode-specific rules. To assign skills to specific modes: + +```bash +# Move architecture skills to "architect" mode +mkdir -p .kilocode/rules-architect/ +mv .kilocode/rules/senior-architect.md .kilocode/rules-architect/ +mv .kilocode/rules/database-designer.md .kilocode/rules-architect/ +``` + +
+ +## Windsurf + +[Windsurf](https://windsurf.com) uses the same `SKILL.md` format as Claude Code — skills convert with minimal changes. + +### Format + +Each skill becomes a directory with `SKILL.md` plus optional supporting files: + +``` +.windsurf/skills/copywriting/ +├── SKILL.md # Instructions with name/description frontmatter +├── scripts/ # Python tools (if present in source) +├── references/ # Domain knowledge (if present) +└── templates/ # Code templates (if present) +``` + +```yaml +--- +name: "copywriting" +description: "When the user wants to write, rewrite, or improve marketing copy..." +--- + +# Copywriting +... +``` + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool windsurf + ./scripts/install.sh --tool windsurf --target /path/to/project + ``` + +=== "Manual" + + ```bash + cp -R integrations/windsurf/skills/* /path/to/project/.windsurf/skills/ + ``` + +### Verify + +```bash +find .windsurf/skills -name "SKILL.md" | wc -l +# Expected: 156 +``` + +Skills appear automatically in Windsurf's skill list. You can also invoke them with `@skill-name`. + +### Progressive Disclosure + +Windsurf uses progressive disclosure — only the skill name and description are shown by default. The full `SKILL.md` content loads only when Windsurf decides the skill is relevant to your request, keeping your context window lean. + +
+ +## OpenCode + +[OpenCode](https://opencode.ai) supports skills in `.opencode/skills/` with `SKILL.md` files. It also reads Claude Code's `.claude/skills/` as a fallback. + +### Format + +Each skill becomes a directory with `SKILL.md`: + +```yaml +--- +name: "copywriting" +description: "When the user wants to write, rewrite, or improve marketing copy..." +compatibility: opencode +--- + +# Copywriting +... +``` + +The `compatibility: opencode` field is added to help OpenCode identify these as native skills. + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool opencode + ./scripts/install.sh --tool opencode --target /path/to/project + ``` + +=== "Manual" + + ```bash + cp -R integrations/opencode/skills/* /path/to/project/.opencode/skills/ + ``` + +=== "Global" + + ```bash + # Install globally for all projects + cp -R integrations/opencode/skills/* ~/.config/opencode/skills/ + ``` + +### Verify + +```bash +find .opencode/skills -name "SKILL.md" | wc -l +# Expected: 156 +``` + +### Claude Code Compatibility + +OpenCode also reads `.claude/skills/` directories. If you already have skills installed for Claude Code, OpenCode will discover them automatically — no conversion needed. + +To disable this fallback: + +```bash +export OPENCODE_DISABLE_CLAUDE_CODE_SKILLS=1 +``` + +
+ +## Augment + +[Augment](https://augmentcode.com) reads rule files from `.augment/rules/` with frontmatter specifying activation type. + +### Format + +Each skill becomes a markdown rule file: + +```yaml +--- +type: auto +description: "When the user wants to write, rewrite, or improve marketing copy..." +--- + +# Copywriting +... +``` + +- **`type: auto`** — Augment automatically activates the rule when it matches your request +- Other types: `always` (always loaded), `manual` (user-invoked only) + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool augment + ./scripts/install.sh --tool augment --target /path/to/project + ``` + +=== "Manual" + + ```bash + mkdir -p /path/to/project/.augment/rules + cp integrations/augment/rules/*.md /path/to/project/.augment/rules/ + ``` + +### Verify + +```bash +find .augment/rules -name "*.md" | wc -l +# Expected: 156 +``` + +### Customization + +Change `type: auto` to `type: always` for skills you want loaded in every conversation: + +```bash +# Make coding standards always active +sed -i 's/type: auto/type: always/' .augment/rules/senior-architect.md +``` + +
+ +## Antigravity + +[Antigravity](https://idx.google.com/) (Google) uses `SKILL.md` files in `~/.gemini/antigravity/skills/` with additional metadata fields. + +### Format + +```yaml +--- +name: "copywriting" +description: "When the user wants to write, rewrite, or improve marketing copy..." +risk: low +source: community +date_added: '2026-03-11' +--- + +# Copywriting +... +``` + +Additional fields: + +- **`risk: low`** — all skills are instruction-only, no dangerous operations +- **`source: community`** — identifies these as community-contributed skills +- **`date_added`** — conversion date for tracking freshness + +### Install + +=== "Script" + + ```bash + ./scripts/convert.sh --tool antigravity + ./scripts/install.sh --tool antigravity + # Installs to ~/.gemini/antigravity/skills/ by default + ``` + +=== "Manual" + + ```bash + cp -R integrations/antigravity/* ~/.gemini/antigravity/skills/ + ``` + +### Verify + +```bash +find ~/.gemini/antigravity/skills -name "SKILL.md" | wc -l +# Expected: 156 +``` + +
+ +## Script Reference + +### convert.sh + +``` +Usage: + ./scripts/convert.sh [--tool ] [--out ] [--help] + +Tools: + antigravity, cursor, aider, kilocode, windsurf, opencode, augment, all + +Options: + --tool Convert for a specific tool (default: all) + --out Output directory (default: integrations/) + --help Show usage +``` + +**Examples:** + +```bash +# Convert all skills for all tools +./scripts/convert.sh + +# Convert only for Cursor +./scripts/convert.sh --tool cursor + +# Custom output directory +./scripts/convert.sh --tool windsurf --out /tmp/my-skills +``` + +### install.sh + +``` +Usage: + ./scripts/install.sh --tool [--target ] [--force] [--help] + +Options: + --tool Required. Which tool to install for. + --target Project directory (default: current dir, except antigravity) + --force Skip overwrite confirmation + --help Show usage +``` + +**Default install locations:** + +| Tool | Default Target | +|------|---------------| +| Antigravity | `~/.gemini/antigravity/skills/` | +| Cursor | `/.cursor/rules/` | +| Aider | `/CONVENTIONS.md` | +| Kilo Code | `/.kilocode/rules/` | +| Windsurf | `/.windsurf/skills/` | +| OpenCode | `/.opencode/skills/` | +| Augment | `/.augment/rules/` | + +
+ +## Troubleshooting + +??? question "I get 'No skills found' when running convert.sh" + Make sure you're running the script from the repository root where the skill directories are located. + +??? question "Some skills show garbled descriptions" + This can happen with skills using complex YAML multi-line descriptions. Re-run `convert.sh` — the parser handles folded (`>`) and literal (`|`) YAML scalars. + +??? question "Can I use skills from multiple tools at once?" + Yes! You can install skills for Cursor and Windsurf in the same project — they use different directories and won't conflict. + +??? question "How do I update when new skills are added?" + ```bash + git pull origin main + ./scripts/convert.sh --tool all + ./scripts/install.sh --tool --target . --force + ``` + +??? question "Can I convert only specific skills?" + Not yet via CLI flags, but you can run `convert.sh` and then copy only the skills you want from `integrations//`. + +??? question "Do supporting files (scripts, references) work in all tools?" + Only tools that support subdirectories per skill (Antigravity, Windsurf, OpenCode) get the full bundle. Flat-file tools (Cursor, Aider, Kilo Code, Augment) get the SKILL.md content only. diff --git a/mkdocs.yml b/mkdocs.yml index ea0451e..2181f73 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,6 @@ site_name: Claude Code Skills & Plugins site_url: https://alirezarezvani.github.io/claude-skills/ -site_description: "177 production-ready skills, 16 agents, and 17 commands for Claude Code, OpenAI Codex, Gemini CLI, and OpenClaw. Reusable expertise for engineering, product, marketing, compliance, and more." +site_description: "177 production-ready skills for Claude Code, Codex, Gemini CLI, OpenClaw, Cursor, Aider, Windsurf, Kilo Code, OpenCode, Augment, and Antigravity. Reusable expertise for engineering, product, marketing, compliance, and more." site_author: Alireza Rezvani repo_url: https://github.com/alirezarezvani/claude-skills repo_name: alirezarezvani/claude-skills @@ -115,6 +115,7 @@ markdown_extensions: nav: - Home: index.md - Getting Started: getting-started.md + - Multi-Tool Integrations: integrations.md - Skills: - Overview: skills/index.md - Engineering - Core: