Skip to content

Commit e0874c4

Browse files
clevin95claude
andcommitted
Flatten skill names to include full path (generated_<category>_<skill>)
Claude Code discovers skills one level deep under .claude/skills/, so the previous nested structure (.generated/<category>/<skill>/SKILL.md) was not being picked up. Flatten to .generated/generated_<category>_<skill>/SKILL.md so all skills are direct children of .generated/ and load correctly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 8a5e13c commit e0874c4

4 files changed

Lines changed: 11 additions & 10 deletions

File tree

sync_ai_rules/generators/skills_generator.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"""
33
Skills Generator - generates Claude Code skills from .cursor/rules/.
44
Each rule becomes a separate SKILL.md file in .claude/skills/.generated/,
5-
mirroring the folder structure of .cursor/rules/.
5+
with a flat name encoding the full path: generated_<category>_<skill-name>.
66
"""
77

88
import logging
@@ -52,13 +52,14 @@ def generate_files(
5252

5353
for category_rules in rules.values():
5454
for rule in category_rules:
55-
# Mirror the source folder structure:
56-
# .cursor/rules/arch/my-rule.mdc → .generated/arch/my-rule/SKILL.md
55+
# Flatten full path into skill name:
56+
# .cursor/rules/arch/my-rule.mdc → .generated/generated_arch_my-rule/SKILL.md
57+
# .cursor/rules/my-rule.mdc → .generated/generated_my-rule/SKILL.md
5758
rel_path = _strip_source_prefix(rule.relative_path)
58-
skill_name = os.path.splitext(os.path.basename(rel_path))[0]
59-
skill_dir = os.path.join(
60-
skills_root, os.path.dirname(rel_path), skill_name
61-
) if os.path.dirname(rel_path) else os.path.join(skills_root, skill_name)
59+
path_parts = rel_path.replace(os.sep, "/").split("/")
60+
path_parts[-1] = os.path.splitext(path_parts[-1])[0]
61+
skill_name = "generated_" + "_".join(path_parts)
62+
skill_dir = os.path.join(skills_root, skill_name)
6263
skill_file = os.path.join(skill_dir, "SKILL.md")
6364

6465
try:

test/after/.claude/skills/.generated/architecture/architecture-rule/SKILL.md renamed to test/after/.claude/skills/.generated/generated_architecture_architecture-rule/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: architecture-rule
2+
name: generated_architecture_architecture-rule
33
description: Architecture rule description
44
---
55

test/after/.claude/skills/.generated/rule/SKILL.md renamed to test/after/.claude/skills/.generated/generated_rule/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: rule
2+
name: generated_rule
33
description: Rule description
44
---
55

test/after/.claude/skills/.generated/testing/testing-rule/SKILL.md renamed to test/after/.claude/skills/.generated/generated_testing_testing-rule/SKILL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: testing-rule
2+
name: generated_testing_testing-rule
33
description: Testing rule description
44
---
55

0 commit comments

Comments
 (0)