@@ -640,15 +640,21 @@ def _register_skills(
640640 continue
641641
642642 # Derive the short command name (e.g. "specify" from "speckit.specify")
643- short_name = cmd_name
644- if short_name .startswith ("speckit." ):
645- short_name = short_name [len ("speckit." ):]
646- short_name = short_name .replace ("." , "-" )
643+ raw_short_name = cmd_name
644+ if raw_short_name .startswith ("speckit." ):
645+ raw_short_name = raw_short_name [len ("speckit." ):]
646+ short_name = raw_short_name .replace ("." , "-" )
647647 skill_name = f"speckit-{ short_name } "
648-
649- # Only overwrite if the skill already exists (i.e. --ai-skills was used)
650- skill_subdir = skills_dir / skill_name
651- if not skill_subdir .exists ():
648+ legacy_skill_name = f"speckit.{ raw_short_name } "
649+
650+ # Only overwrite existing skills (i.e. --ai-skills was used).
651+ # If both modern and legacy directories exist, update both.
652+ target_skill_names : List [str ] = []
653+ if (skills_dir / skill_name ).exists ():
654+ target_skill_names .append (skill_name )
655+ if legacy_skill_name != skill_name and (skills_dir / legacy_skill_name ).exists ():
656+ target_skill_names .append (legacy_skill_name )
657+ if not target_skill_names :
652658 continue
653659
654660 # Parse the command file
@@ -673,27 +679,28 @@ def _register_skills(
673679 original_desc or f"Spec-kit workflow command: { short_name } " ,
674680 )
675681
676- frontmatter_data = {
677- "name" : skill_name ,
678- "description" : enhanced_desc ,
679- "compatibility" : "Requires spec-kit project structure with .specify/ directory" ,
680- "metadata" : {
681- "author" : "github-spec-kit" ,
682- "source" : f"preset:{ manifest .id } " ,
683- },
684- }
685- frontmatter_text = yaml .safe_dump (frontmatter_data , sort_keys = False ).strip ()
686- skill_content = (
687- f"---\n "
688- f"{ frontmatter_text } \n "
689- f"---\n \n "
690- f"# Speckit { short_name .title ()} Skill\n \n "
691- f"{ body } \n "
692- )
682+ for target_skill_name in target_skill_names :
683+ frontmatter_data = {
684+ "name" : target_skill_name ,
685+ "description" : enhanced_desc ,
686+ "compatibility" : "Requires spec-kit project structure with .specify/ directory" ,
687+ "metadata" : {
688+ "author" : "github-spec-kit" ,
689+ "source" : f"preset:{ manifest .id } " ,
690+ },
691+ }
692+ frontmatter_text = yaml .safe_dump (frontmatter_data , sort_keys = False ).strip ()
693+ skill_content = (
694+ f"---\n "
695+ f"{ frontmatter_text } \n "
696+ f"---\n \n "
697+ f"# Speckit { short_name .title ()} Skill\n \n "
698+ f"{ body } \n "
699+ )
693700
694- skill_file = skill_subdir / "SKILL.md"
695- skill_file .write_text (skill_content , encoding = "utf-8" )
696- written .append (skill_name )
701+ skill_file = skills_dir / target_skill_name / "SKILL.md"
702+ skill_file .write_text (skill_content , encoding = "utf-8" )
703+ written .append (target_skill_name )
697704
698705 return written
699706
0 commit comments