-
Notifications
You must be signed in to change notification settings - Fork 42
135 lines (113 loc) · 4.41 KB
/
continuous-learning.yml
File metadata and controls
135 lines (113 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
name: Continuous Learning - Extract Skills
on:
# Manual trigger
workflow_dispatch:
inputs:
output_format:
description: 'Output format for skills'
required: true
default: 'github-issues'
type: choice
options:
- github-issues
- skill-files
- both
# Automatic on new releases
release:
types: [published]
# Weekly analysis on Sundays at midnight UTC
schedule:
- cron: '0 0 * * 0'
jobs:
extract-skills:
runs-on: ubuntu-latest
permissions:
contents: write
issues: write
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
- name: Install uv
uses: astral-sh/setup-uv@v7
- name: Install AgentReady
run: |
uv venv
uv pip install -e .
- name: Run self-assessment
run: |
uv run agentready assess . --output-dir .agentready
- name: Extract learnings
id: learn
run: |
uv run agentready learn . --output-format json > .skills-proposals/discovered-skills.json
echo "skill_count=$(jq '.skill_count' .skills-proposals/discovered-skills.json)" >> "$GITHUB_OUTPUT"
- name: Generate skill proposals
if: steps.learn.outputs.skill_count > 0
run: |
uv run agentready learn . --output-format all --output-dir .skills-proposals
- name: Create GitHub issues for each skill
if: (inputs.output_format == 'github-issues' || inputs.output_format == 'both') && steps.learn.outputs.skill_count > 0
env:
GH_TOKEN: ${{ github.token }}
run: |
for skill_file in .skills-proposals/skill-*.md; do
if [ -f "$skill_file" ]; then
# Extract skill name from filename
skill_name=$(basename "$skill_file" .md | sed 's/^skill-//' | sed 's/-/ /g')
# Create issue with skill proposal
gh issue create \
--title "Skill Proposal: ${skill_name}" \
--label "skill-proposal,enhancement,ai-agent" \
--body-file "$skill_file"
echo "Created issue for: $skill_name"
fi
done
- name: Create PR with skill files
if: (inputs.output_format == 'skill-files' || inputs.output_format == 'both') && steps.learn.outputs.skill_count > 0
run: |
# Configure git
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
# Create new branch
BRANCH_NAME="skills/auto-$(date +%Y%m%d-%H%M%S)"
git checkout -b "$BRANCH_NAME"
# Copy SKILL.md files to .claude/skills
mkdir -p .claude/skills
for skill_dir in .skills-proposals/*/; do
if [ -d "$skill_dir" ] && [ -f "${skill_dir}SKILL.md" ]; then
skill_id=$(basename "$skill_dir")
mkdir -p ".claude/skills/$skill_id"
cp "${skill_dir}SKILL.md" ".claude/skills/$skill_id/"
echo "Copied skill: $skill_id"
fi
done
# Commit and push
git add .claude/skills
git commit -m "feat: add discovered skills from continuous learning" \
-m "" \
-m "Automatically extracted skills from latest assessment." \
-m "" \
-m "🤖 Generated with Claude Code" \
-m "Co-Authored-By: Claude <noreply@anthropic.com>"
git push origin "$BRANCH_NAME"
# Create PR
gh pr create \
--title "Add discovered skills from continuous learning" \
--body "Automatically discovered new Claude Code skills from AgentReady assessment. Review and merge to make available."
- name: Upload skill proposals as artifacts
if: steps.learn.outputs.skill_count > 0
uses: actions/upload-artifact@v5
with:
name: skill-proposals-${{ github.run_number }}
path: .skills-proposals/
retention-days: 90
- name: Summary
if: steps.learn.outputs.skill_count > 0
run: |
echo "✅ Discovered ${{ steps.learn.outputs.skill_count }} skills with confidence ≥70%"
echo "📁 Artifacts uploaded for review"