Repository navigation
fix: warn when global Claude skills shadow project Remotion skills - #12025
Conversation
There was a problem hiding this comment.
ℹ️ No critical issues — one consistency nit inline.
Reviewed changes
- Studio startup warning (
packages/cli/src/studio.ts): onremotion studio, compares the project and global.claude/skillsdirectories and warns for every entry in the canonicalremotionSkillNameslist that exists in both. - create-video warning (
packages/create-video/src/init.ts): after installing skills, scans the project.claude/skillsdirectory and warns for entries that also exist globally.
Both checks correctly target .claude/skills for the Claude Code shadowing described in #11809, and the "project !== global" guard avoids a self-shadow warning when the project root is the home directory.
deepseek-v4.1-flash | 𝕏
| .readdirSync(projectSkills) | ||
| .filter( | ||
| (name) => | ||
| name.startsWith('remotion-') && |
There was a problem hiding this comment.
The two new checks use different rules for what counts as a Remotion skill: studio.ts filters on the canonical remotionSkillNames list, while this one accepts any directory whose name starts with remotion-. A user-authored project skill such as remotion-ads that happens to exist globally would be reported as "the global Remotion skill", and the two entry points can disagree on the same project. Matching on remotionSkillNames here too (or a shared local constant, since create-video can't pull in @remotion/studio-server) would keep the detection in sync.
There was a problem hiding this comment.
I updated Studio in 1be37a8 to use the same remotion- scan as create-video, so the two paths now agree. I kept custom names in scope because a global skill with the same name will still shadow the project's copy.
|
Hi @samohovets, could you review this when you have time? I fixed the Studio and create-video mismatch raised in the review, and CI is green. |
@JonnyBurger can you review this please |
samohovets
left a comment
There was a problem hiding this comment.
Thanks, this matches #11809. Some notes:
- Read the global dir from
CLAUDE_CONFIG_DIRwhen it's set. Claude Code loads personal skills from there instead of~/.claude. - Wrap the check in try/catch. If
.claude/skillsis a file,readdirSyncthrows and Studio won't start. - Maybe skip the warning when both
SKILL.mdfiles have the sameversion:. Otherwise people who keep their global skills current see it on every Studio start. - The message says global skills load "before" project skills, which sounds like both load. The global copy wins and the project copy is ignored. It's also worth mentioning
~/.agents/skills, becausenpx skills add -ginstalls there and only symlinks into~/.claude/skills.
…ip same-version skills, clarify warning

Summary
Claude Code prefers personal skills over project skills when the names match. A global
remotion-best-practicesinstalled long ago silently replaces the version-matched copy that a new project ships with. The project copy never appears in the skill list.This PR warns about that in two places:
The check:
Example warning:
Fixes #11809.
Evidence
The issue reproduces with Claude Code 2.1.312. A project had
.claude/skills -> ../.agents/skills, and a global skill with the same name had a different marker. Claude listed and invoked only the global copy.With
CLAUDE_CONFIG_DIRset, Claude reads personal skills from$CLAUDE_CONFIG_DIR/skillsand ignores~/.claude/skills.version:CLAUDE_CONFIG_DIRwithout the skillCLAUDE_CONFIG_DIRwith the skill.claude/skillsis a fileskillsis a filecreate-videointeractive flow with an old globalremotion-best-practices@remotion/cliandcreate-videobuild and lint.detect-outdated-remotion-skills.test.tspasses.Merge Danger
Door: Two-way. The change only adds warnings and does not modify project or global files.
Blast Radius: CLI output for
remotion studioandcreate-video. The warning appears only when a global Claude Code skill replaces a projectremotion-*skill with a different or missing version.