{"record":{"id":"0bc271c487cbf509","repo":"remotion-dev/remotion","slug":"the-installer-finished-but-skill-was-not-found-in-the","errorCode":null,"errorMessage":"The installer finished, but ${skill} was not found in the project. Please try again.","messagePattern":"The installer finished, but (.+?) was not found in the project\\. Please try again\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/studio-server/src/preview-server/routes/install-remotion-skill.ts","lineNumber":117,"sourceCode":"\t\t\t\tchild.stderr.on('data', onData);\n\t\t\t\tchild.on('error', reject);\n\t\t\t\tchild.on('close', (code, signal) => {\n\t\t\t\t\tif (code === 0) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t} else {\n\t\t\t\t\t\treject(\n\t\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t\t`Could not ${action} ${skill} (exit code ${code}, signal ${signal}). ${output.trim()}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst info = getRemotionSkillsInfo({remotionRoot});\n\t\t\tconst updatedSkill = info.skills.find(({name}) => name === skill);\n\t\t\tif (action === 'install' && !updatedSkill?.installedInProject) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The installer finished, but ${skill} was not found in the project. Please try again.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\taction === 'remove' &&\n\t\t\t\t(removingGlobally\n\t\t\t\t\t? updatedSkill?.installedGlobally\n\t\t\t\t\t: updatedSkill?.installedInProject)\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`The remover finished, but ${skill} is still installed ${removingGlobally ? 'globally' : 'in the project'}. Please try again.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tRenderInternals.Log.info(\n\t\t\t\t{indent: false, logLevel},\n\t\t\t\tRenderInternals.chalk.gray('╰─ '),","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/remotion-dev/remotion/blob/46a3a6bf13ca367376ff18bbb06dae2e87e0d068/packages/studio-server/src/preview-server/routes/install-remotion-skill.ts#L99-L135","documentation":"After running the package-manager install for a skill, changeRemotionSkill re-reads the skills info and verifies the skill now reports installedInProject === true. If the installer exited successfully but the skill is still not detected in the project, the state is inconsistent, so this error is thrown and the caller is asked to retry.","triggerScenarios":"Calling installRemotionSkillHandler where the install command completes (exit 0) but the subsequent getRemotionSkillsInfo lookup finds no project installation — e.g. the package manager installed to the wrong workspace, the install silently no-op'd, or package.json was not updated.","commonSituations":"Monorepo/hoisting placing the dependency outside the remotionRoot; a package manager (pnpm/yarn workspaces) resolving the package differently than expected; a locked/failed package.json write.","solutions":["Retry the installation once — transient installer failures often resolve","Inspect package.json in the remotionRoot to confirm the dependency was actually added; if not, add it manually and run the package manager install","Check that the package manager resolved to the correct workspace and that node_modules contains the skill","Run the install command manually in the remotionRoot to see the real installer output"],"exampleFix":"// before: trusting the API result blindly\nawait installSkill('@remotion/captions');\n// after: verify and retry\ntry {\n  await installSkill('@remotion/captions');\n} catch {\n  await installSkill('@remotion/captions'); // retry once, or check package.json manually\n}","handlingStrategy":"retry","validationCode":"const info = await getRemotionSkillsInfo();\nif (!info.skills.some((s) => s.name === skill && s.installedInProject)) {\n  // not installed yet — fix environment before calling install\n}","typeGuard":null,"tryCatchPattern":"try {\n  await installSkill(skill);\n} catch (e) {\n  if (e.message.includes('was not found in the project')) {\n    await installSkill(skill); // retry once; then inspect package.json manually\n  }\n}","preventionTips":["Verify package.json in the remotionRoot after installs in monorepos","Run the installer manually once to see its real output","Ensure the package manager resolves dependencies inside the remotionRoot"],"tags":["package-manager","verification","studio"],"backgroundTag":"unexpected-response-shape","analyzedSha":"46a3a6bf13ca367376ff18bbb06dae2e87e0d068","analyzedAt":"2026-09-18T00:12:20.256Z","contentChangedAt":"2026-09-18T00:12:20.256Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}