Skip to content

feat: Multimodal Studio — unified image/video/character generation layer #4

feat: Multimodal Studio — unified image/video/character generation layer

feat: Multimodal Studio — unified image/video/character generation layer #4

Workflow file for this run

name: Agent Alignment Check
on:
pull_request:
paths:
- '.claude/agents/**'
- '.claude/skills/**'
- '.claude/commands/**'
jobs:
alignment-check:
name: Validate Agent Alignment
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v44
with:
files: |
.claude/agents/**/*.md
.claude/skills/**/*.md
.claude/commands/**/*.md
- name: Validate YAML frontmatter
if: steps.changed-files.outputs.any_changed == 'true'
run: |
echo "🔍 Validating YAML frontmatter in changed files..."
has_errors=false
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
echo "Checking: $file"
# Skip README and CLAUDE.md files
if [[ "$file" == *"README.md" ]] || [[ "$file" == *"CLAUDE.md" ]]; then
echo " ⏭️ Skipping (not an agent/skill definition)"
continue
fi
# Check if file has YAML frontmatter
if ! head -1 "$file" | grep -q "^---$"; then
echo " ❌ Missing YAML frontmatter"
has_errors=true
continue
fi
# Extract frontmatter
frontmatter=$(sed -n '/^---$/,/^---$/p' "$file" | sed '1d;$d')
# Check for required fields in agents
if [[ "$file" == *"/agents/"* ]]; then
if ! echo "$frontmatter" | grep -q "^name:"; then
echo " ❌ Missing 'name' field"
has_errors=true
fi
if ! echo "$frontmatter" | grep -q "^description:"; then
echo " ❌ Missing 'description' field"
has_errors=true
fi
if ! echo "$frontmatter" | grep -q "^capabilities:"; then
echo " ❌ Missing 'capabilities' field"
has_errors=true
fi
if ! echo "$frontmatter" | grep -q "^priority:"; then
echo " ❌ Missing 'priority' field"
has_errors=true
fi
fi
if [ "$has_errors" = false ]; then
echo " ✅ Valid"
fi
done
if [ "$has_errors" = true ]; then
echo ""
echo "❌ Some files have invalid frontmatter. See above for details."
echo "📚 Reference: docs/AGENT_CONTRIBUTION_GUIDE.md"
exit 1
fi
echo ""
echo "✅ All changed files have valid frontmatter"
- name: Check for banned language patterns
if: steps.changed-files.outputs.any_changed == 'true'
run: |
echo "🔍 Checking for Frank DNA violations..."
# Patterns that suggest AI slop or misalignment
banned_patterns=(
"soul-aligned"
"consciousness evolution"
"overwhelmed to empowered"
"humble excellence"
"hustle harder"
"transformative journey"
"spiritual awakening"
"unlock your potential"
"game-changing"
"paradigm shift"
)
has_violations=false
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
for pattern in "${banned_patterns[@]}"; do
if grep -qi "$pattern" "$file" 2>/dev/null; then
echo "⚠️ Found '$pattern' in $file"
has_violations=true
fi
done
done
if [ "$has_violations" = true ]; then
echo ""
echo "⚠️ Found potentially misaligned language."
echo "📚 Review the Frank DNA: .claude/FRANK_DNA.md"
echo "💡 Use direct, technical, practical language instead."
# Warning only, not blocking
else
echo "✅ No banned language patterns found"
fi
- name: Validate skill-rules.json references
run: |
echo "🔍 Validating skill-rules.json references..."
if [ -f ".claude/skill-rules.json" ]; then
# Extract skill names from rules
skills=$(jq -r '.activation_rules[].skill' .claude/skill-rules.json 2>/dev/null || echo "")
missing_skills=""
for skill in $skills; do
if [ ! -d ".claude/skills/$skill" ]; then
missing_skills="$missing_skills $skill"
fi
done
if [ -n "$missing_skills" ]; then
echo "⚠️ skill-rules.json references missing skills:$missing_skills"
else
echo "✅ All skill references are valid"
fi
else
echo "⏭️ No skill-rules.json found"
fi
- name: Summary
run: |
echo ""
echo "📋 Alignment Check Complete"
echo "─────────────────────────────"
echo "All agents must align with the Frank DNA:"
echo " • Direct, technical, warm, playful voice"
echo " • Helps people build their own systems"
echo " • Practical value over philosophy"
echo " • Shows don't tells"
echo ""
echo "📚 Resources:"
echo " • Frank DNA: .claude/FRANK_DNA.md"
echo " • Decision Framework: .claude/DECISION_FRAMEWORK.md"
echo " • Agent Guide: docs/AGENT_CONTRIBUTION_GUIDE.md"