From f8b623e4e854f04ef43f443e814ee8c432b13ff7 Mon Sep 17 00:00:00 2001 From: Michael Baudino Date: Mon, 15 Jun 2026 18:18:57 +0200 Subject: [PATCH 1/2] Generate skills compatible with Claude Code Claude Code expect skill files in a sub-directory name `SKILL.md` uppercase as [stated in the documentation](https://code.claude.com/docs/en/skills). We currently generate them as `skill.md` lowercase which makes Claude Code to ignore them. --- code_review_graph/skills.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code_review_graph/skills.py b/code_review_graph/skills.py index 8f72daf0..f7697d6a 100644 --- a/code_review_graph/skills.py +++ b/code_review_graph/skills.py @@ -526,11 +526,11 @@ def generate_skills(repo_root: Path, skills_dir: Path | None = None) -> Path: skills_dir.mkdir(parents=True, exist_ok=True) for filename, skill in _SKILLS.items(): - # Claude Code expects skills at .claude/skills//skill.md + # Claude Code expects skills at .claude/skills//SKILL.md skill_name = filename.removesuffix(".md") skill_subdir = skills_dir / skill_name skill_subdir.mkdir(parents=True, exist_ok=True) - path = skill_subdir / "skill.md" + path = skill_subdir / "SKILL.md" content = ( "---\n" f"name: {skill['name']}\n" From 6ce5293bcb304755ed799f7cab863817d7878af6 Mon Sep 17 00:00:00 2001 From: Michael Baudino Date: Mon, 15 Jun 2026 18:20:49 +0200 Subject: [PATCH 2/2] Make tests use uppercase `SKILL.md` --- tests/test_skills.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_skills.py b/tests/test_skills.py index 2914ca79..168436cd 100644 --- a/tests/test_skills.py +++ b/tests/test_skills.py @@ -60,12 +60,12 @@ def test_creates_four_skill_subdirs(self, tmp_path): "review-changes", ] for d in skills_dir.iterdir(): - assert (d / "skill.md").is_file() + assert (d / "SKILL.md").is_file() def test_skill_files_have_frontmatter(self, tmp_path): skills_dir = generate_skills(tmp_path) for subdir in skills_dir.iterdir(): - path = subdir / "skill.md" + path = subdir / "SKILL.md" content = path.read_text() assert content.startswith("---\n") assert "name:" in content @@ -87,7 +87,7 @@ def test_skill_content_includes_get_minimal_context(self, tmp_path): """Every skill template must reference get_minimal_context.""" skills_dir = generate_skills(tmp_path) for subdir in skills_dir.iterdir(): - content = (subdir / "skill.md").read_text() + content = (subdir / "SKILL.md").read_text() assert "get_minimal_context" in content, ( f"{subdir.name} missing get_minimal_context reference" ) @@ -96,7 +96,7 @@ def test_skill_content_includes_detail_level(self, tmp_path): """Every skill template must reference detail_level.""" skills_dir = generate_skills(tmp_path) for subdir in skills_dir.iterdir(): - content = (subdir / "skill.md").read_text() + content = (subdir / "SKILL.md").read_text() assert "detail_level" in content, ( f"{subdir.name} missing detail_level reference" )