{"record":{"id":"7e84ebdd485b0c7b","repo":"mastra-ai/mastra","slug":"no-workspace-with-skills-configured","errorCode":null,"errorMessage":"No workspace with skills configured","messagePattern":"No workspace with skills configured","errorType":"http","errorClass":"HTTPException","httpStatus":404,"severity":"error","filePath":"packages/server/src/server/handlers/workspace.ts","lineNumber":965,"sourceCode":"  queryParamSchema: skillDisambiguationQuerySchema,\n  responseSchema: getSkillResponseSchema,\n  summary: 'Get skill details',\n  description: 'Returns the full details of a specific skill including instructions and file lists',\n  tags: ['Workspace', 'Skills'],\n  handler: async ({ mastra, skillName, path, workspaceId, requestContext }) => {\n    try {\n      requireWorkspaceV1Support();\n\n      if (!skillName) {\n        throw new HTTPException(400, { message: 'Skill name is required' });\n      }\n\n      // Use the optional ?path= query param for disambiguation, otherwise fall back to name\n      const identifier = path ? decodeURIComponent(path) : skillName;\n\n      const skills = await getSkillsById(mastra, workspaceId);\n      if (!skills) {\n        throw new HTTPException(404, { message: 'No workspace with skills configured' });\n      }\n\n      // Refresh skills with request context (handles dynamic skill resolvers)\n      await skills.maybeRefresh({ requestContext });\n\n      const skill = await skills.get(identifier);\n      if (!skill) {\n        throw new HTTPException(404, { message: `Skill \"${identifier}\" not found` });\n      }\n\n      return {\n        name: skill.name,\n        description: skill.description,\n        license: skill.license,\n        compatibility: skill.compatibility,\n        metadata: skill.metadata,\n        path: skill.path,\n        instructions: skill.instructions,","sourceCodeStart":947,"sourceCodeEnd":983,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/server/src/server/handlers/workspace.ts#L947-L983","documentation":"The get-skill-details route (GET /workspaces/:workspaceId/skills/:skillName) throws this 404 when the resolved workspace has no skills capability — getSkillsById(mastra, workspaceId) returns undefined because the workspace is not configured with skills (or no workspace exists). Skill lookup requires a workspace with a skills provider.","triggerScenarios":"Calling GET /workspaces/:id/skills/:skillName against a workspace without skills configured; a workspaceId that has no workspace at all; server deployment lacking skills config (e.g. no skills glob/directory set).","commonSituations":"Environment drift: skills configured locally but not in the deployed Mastra instance; wrong workspaceId; Mastra version where workspace skills support is absent/disabled; calling skill routes on a filesystem-only workspace.","solutions":["Configure skills on the target workspace (skills glob/directory or resolver) in the Mastra config.","Confirm the workspaceId is correct and that GET /workspaces/:id/skills reports isSkillsConfigured: true.","Deploy the same workspace/skills configuration used in the environment where it worked.","If no workspace exists under that ID, fix the workspaceId first."],"exampleFix":"// before\ncreateWorkspace({ filesystem: fs }); // no skills configured\n// after\ncreateWorkspace({ filesystem: fs, skills: { globs: ['.agents/skills/*/SKILL.md'] } });","handlingStrategy":"fallback","validationCode":"// Probe whether skills are configured for this workspace\nconst probe = await fetch(`/api/workspaces/${wsId}/skills`).then(r => r.json());\nif (!probe.isSkillsConfigured) {\n  throw new Error(`Workspace ${wsId} has no skills configured`);\n}","typeGuard":"function skillsConfigured(p: { isSkillsConfigured?: boolean }): p is { isSkillsConfigured: true } {\n  return p.isSkillsConfigured === true;\n}","tryCatchPattern":"try {\n  const skill = await getSkill(wsId, name);\n} catch (e) {\n  if (isHTTPException(e, 404) && e.message === 'No workspace with skills configured') {\n    // degrade: hide skills UI or prompt admin to configure skills\n  } else throw e;\n}","preventionTips":["Gate skills features on isSkillsConfigured from the list endpoint","Match workspace config across dev/staging/prod environments","Verify workspaceId correctness before skill calls","Fail fast at startup if required skills config is absent"],"tags":["http-404","skills","workspace","configuration"],"backgroundTag":"feature-not-configured","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}