* feat: Add OpenAI Codex support without restructuring (#41) Add Codex compatibility through a .codex/skills/ symlink layer that preserves the existing domain-based folder structure while enabling Codex discovery. Changes: - Add .codex/skills/ directory with 43 symlinks to actual skill folders - Add .codex/skills-index.json manifest for tooling - Add scripts/sync-codex-skills.py to generate/update symlinks - Add scripts/codex-install.sh for Unix installation - Add scripts/codex-install.bat for Windows installation - Add .github/workflows/sync-codex-skills.yml for CI automation - Update INSTALLATION.md with Codex installation section - Update README.md with Codex in supported agents This enables Codex users to install skills via: - npx ai-agent-skills install alirezarezvani/claude-skills --agent codex - ./scripts/codex-install.sh Zero impact on existing Claude Code plugin infrastructure. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: Improve Codex installation documentation visibility - Add Codex to Table of Contents in INSTALLATION.md - Add dedicated Quick Start section for Codex in INSTALLATION.md - Add "How to Use with OpenAI Codex" section in README.md - Add Codex as Method 2 in Quick Install section - Update Table of Contents to include Codex section Makes Codex installation instructions more discoverable for users. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: Update .gitignore to prevent binary and archive commits - Add global __pycache__/ pattern - Add *.py[cod] for Python compiled files - Add *.zip, *.tar.gz, *.rar for archives - Consolidate .env patterns - Remove redundant entries Prevents accidental commits of binary files and Python cache. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Resolve YAML lint errors in sync-codex-skills.yml - Add document start marker (---) - Replace Python heredoc with single-line command to avoid YAML parser confusion Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
83 lines
2.4 KiB
YAML
83 lines
2.4 KiB
YAML
---
|
|
name: Sync Codex Skills Symlinks
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- '**/SKILL.md'
|
|
- 'scripts/sync-codex-skills.py'
|
|
branches:
|
|
- main
|
|
- dev
|
|
workflow_dispatch:
|
|
inputs:
|
|
dry_run:
|
|
description: 'Dry run (no changes)'
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
|
|
jobs:
|
|
sync:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.11'
|
|
|
|
- name: Sync Codex skills symlinks
|
|
env:
|
|
DRY_RUN: ${{ github.event.inputs.dry_run }}
|
|
run: |
|
|
if [ "$DRY_RUN" == "true" ]; then
|
|
python scripts/sync-codex-skills.py --verbose --dry-run
|
|
else
|
|
python scripts/sync-codex-skills.py --verbose --validate
|
|
fi
|
|
|
|
- name: Check for changes
|
|
id: check_changes
|
|
run: |
|
|
if git diff --quiet .codex/; then
|
|
echo "has_changes=false" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "has_changes=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
- name: Commit changes
|
|
if: steps.check_changes.outputs.has_changes == 'true' && github.event.inputs.dry_run != 'true'
|
|
uses: stefanzweifel/git-auto-commit-action@v5
|
|
with:
|
|
commit_message: "chore: sync codex skills symlinks [automated]"
|
|
file_pattern: ".codex/*"
|
|
commit_user_name: "github-actions[bot]"
|
|
commit_user_email: "github-actions[bot]@users.noreply.github.com"
|
|
|
|
- name: Summary
|
|
run: |
|
|
echo "## Codex Skills Sync Summary" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
if [ -f ".codex/skills-index.json" ]; then
|
|
TOTAL=$(python3 -c "import json; print(json.load(open('.codex/skills-index.json'))['total_skills'])")
|
|
echo "**Total Skills:** $TOTAL" >> $GITHUB_STEP_SUMMARY
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
|
echo "### Categories" >> $GITHUB_STEP_SUMMARY
|
|
python3 -c "
|
|
import json
|
|
data = json.load(open('.codex/skills-index.json'))
|
|
for cat, info in data['categories'].items():
|
|
print(f'- **{cat}**: {info[\"count\"]} skills')
|
|
" >> $GITHUB_STEP_SUMMARY
|
|
else
|
|
echo "No skills index found." >> $GITHUB_STEP_SUMMARY
|
|
fi
|