diff --git a/.github/workflows/pr-issue-auto-close.yml b/.github/workflows/pr-issue-auto-close.yml index 1477c70..d57f5ce 100644 --- a/.github/workflows/pr-issue-auto-close.yml +++ b/.github/workflows/pr-issue-auto-close.yml @@ -121,15 +121,7 @@ jobs: owner: context.repo.owner, repo: context.repo.repo, issue_number: parseInt(issueNumber), - body: `Completed via PR #${prNumber} - -PR: ${prTitle} -URL: ${prUrl} -Merged by: ${merger} - -This issue has been resolved and the changes have been merged into main. - -Automatically closed via PR merge automation` + body: `Completed via PR #${prNumber}\n\nPR: ${prTitle}\nURL: ${prUrl}\nMerged by: ${merger}\n\nThis issue has been resolved and the changes have been merged into main.\n\nAutomatically closed via PR merge automation` }); // Close the issue diff --git a/.github/workflows/smart-sync.yml b/.github/workflows/smart-sync.yml index 3998b50..4ca3df8 100644 --- a/.github/workflows/smart-sync.yml +++ b/.github/workflows/smart-sync.yml @@ -4,12 +4,10 @@ name: Smart Bidirectional Sync 'on': issues: types: [labeled, closed, reopened] - projects_v2_item: - types: [edited] # Prevent sync loops with debouncing concurrency: - group: smart-sync-${{ github.event.issue.number || github.event.projects_v2_item.node_id }} + group: smart-sync-${{ github.event.issue.number }} cancel-in-progress: true # Cancel pending runs (debouncing effect) jobs: @@ -59,12 +57,6 @@ jobs: echo "⏭️ Skipping: Not a status change or state change" fi - elif [ "${{ github.event_name }}" = "projects_v2_item" ]; then - # Project event → sync to issue - echo "direction=project-to-issue" >> $GITHUB_OUTPUT - echo "should_sync=true" >> $GITHUB_OUTPUT - echo "✅ Will sync: Project Board → Issue" - else echo "should_sync=false" >> $GITHUB_OUTPUT echo "⚠️ Unknown event type" @@ -147,9 +139,10 @@ jobs: - name: Sync Issue to Project Board env: GH_TOKEN: ${{ secrets.PROJECTS_TOKEN }} + ISSUE_TITLE: ${{ github.event.issue.title }} run: | echo "# Issue → Project Board Sync" - echo "**Issue**: #${{ github.event.issue.number }} \"${{ github.event.issue.title }}\"" + echo "**Issue**: #${{ github.event.issue.number }} \"$ISSUE_TITLE\"" echo "**State**: ${{ github.event.issue.state }}" echo "**Action**: ${{ github.event.action }}" @@ -288,6 +281,7 @@ jobs: - name: Sync Project Board to Issue env: GH_TOKEN: ${{ secrets.PROJECTS_TOKEN }} + ISSUE_TITLE: ${{ github.event.issue.title }} run: | echo "# Project Board → Issue Sync" echo "**Project Item**: ${{ github.event.projects_v2_item.node_id }}" diff --git a/README.md b/README.md index b9b57fe..726795a 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,39 @@ cd claude-skills **See:** [How to Use with OpenAI Codex](#-how-to-use-with-openai-codex) for detailed guide. + +--- + +### Method 3: OpenClaw Installation + +For [OpenClaw](https://openclaw.ai) users — skills use the same `SKILL.md` format, so all 66 skills work out of the box. + +```bash +# Clone the repo +git clone https://github.com/alirezarezvani/claude-skills.git +cd claude-skills + +# Run the OpenClaw installer (symlinks all skills into ~/.openclaw/workspace/skills/) +./scripts/openclaw-install.sh + +# Restart the gateway to pick up new skills +openclaw gateway restart +``` + +Or preview first with `--dry-run`: + +```bash +./scripts/openclaw-install.sh --dry-run +``` + +**Benefits:** +- ✅ All 66 skills instantly available in OpenClaw +- ✅ Live-linked — `git pull` updates skills automatically +- ✅ No manual copying needed +- ✅ Skills appear in `/skills list` immediately after gateway restart + +> **Also available on [clawhub.com](https://clawhub.com)** — search for `alirezarezvani` to install individual skills via the ClawHub CLI (`openclaw skill install `). + --- ### Method 3: Universal Installer (Works across all agents) diff --git a/scripts/openclaw-install.sh b/scripts/openclaw-install.sh new file mode 100755 index 0000000..8e0854a --- /dev/null +++ b/scripts/openclaw-install.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +# Install claude-skills into OpenClaw's workspace skills directory +# Usage: ./scripts/openclaw-install.sh [--dry-run] + +set -euo pipefail + +SKILLS_DIR="${HOME}/.openclaw/workspace/skills" +REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)" +DRY_RUN=false + +[[ "${1:-}" == "--dry-run" ]] && DRY_RUN=true + +# Find all SKILL.md files and install each skill +installed=0 +skipped=0 + +while IFS= read -r skill_md; do + skill_dir="$(dirname "$skill_md")" + skill_name="$(basename "$skill_dir")" + target="${SKILLS_DIR}/${skill_name}" + + if [[ -e "$target" ]]; then + skipped=$((skipped + 1)) + continue + fi + + if $DRY_RUN; then + echo " [dry-run] would install: $skill_name" + else + mkdir -p "$SKILLS_DIR" + ln -sf "$skill_dir" "$target" + echo " ✅ installed: $skill_name" + fi + installed=$((installed + 1)) +done < <(find "$REPO_DIR" -name "SKILL.md" -not -path "*/.git/*") + +if $DRY_RUN; then + echo "" + echo "Dry run complete. Would install $installed skill(s). ($skipped already exist)" +else + echo "" + echo "Done. Installed $installed skill(s). ($skipped already existed)" + echo "Restart OpenClaw (openclaw gateway restart) to pick up new skills." +fi