{"record":{"id":"a8386df81b51392d","repo":"Fission-AI/OpenSpec","slug":"workset-tool-required","errorCode":"workset_tool_required","errorMessage":"Workset '${name}' has no saved tool.","messagePattern":"Workset '(.+?)' has no saved tool\\.","errorType":"exception","errorClass":"StoreError","httpStatus":null,"severity":"error","filePath":"src/commands/workset.ts","lineNumber":422,"sourceCode":"      const table = readOpenerTable();\n\n      const toolId = options.tool ?? prepared.workset.tool;\n      let opener: OpenerDefinition;\n      if (toolId !== undefined) {\n        const found = findOpener(table, toolId);\n        if (found === null) {\n          throw toolUnknownError(toolId, table);\n        }\n        if (!isOpenerEnabled(found)) {\n          throw worksetCliOpenerDisabledError(found, name);\n        }\n        if (!isOpenerCommandAvailable(found.command)) {\n          throw toolUnavailableError(found, table, name);\n        }\n        opener = found;\n      } else {\n        if (!isInteractive()) {\n          throw new StoreError(\n            `Workset '${name}' has no saved tool.`,\n            'workset_tool_required',\n            {\n              target: 'workset.tool',\n              fix: `openspec workset open ${name} --tool <id>`,\n            }\n          );\n        }\n\n        // The prompt offers only available openers, so the selection\n        // needs no second scan.\n        const available = listOpenerChoices(table).filter(\n          (choice) => choice.available\n        );\n        if (available.length === 0) {\n          throw noToolInstalledError(table, name);\n        }\n        const selectedId = await promptToolFromChoices(available);","sourceCodeStart":404,"sourceCodeEnd":440,"githubUrl":"https://github.com/Fission-AI/OpenSpec/blob/6926ccb18afa4ff621112813e9968334576ee11a/src/commands/workset.ts#L404-L440","documentation":"Error \"Workset '${name}' has no saved tool.\" thrown in Fission-AI/OpenSpec.","triggerScenarios":"Thrown at src/commands/workset.ts:422 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6926ccb18afa4ff621112813e9968334576ee11a","analyzedAt":"2026-08-25T12:29:45.729Z","schemaVersion":2},"datasetVersion":"2026-08-25T16:17:27.014Z"}