different-ai/openwork · error
OpenWork server unavailable. Connect to remove skills.
Error message
OpenWork server unavailable. Connect to remove skills.
What it means
For skill removal on a remote workspace with no OpenWork server target or client, the store refuses: remote skills live on the server, so a local delete would silently fail to remove them. It throws directing the user to connect to the OpenWork server first.
Source
Thrown at apps/app/src/react-app/domains/settings/state/extensions-store.ts:700
const isLocalWorkspace = options.workspaceType() === "local";
const root = options.selectedWorkspaceRoot().trim();
const { openworkSnapshot, openworkClient, openworkWorkspaceId, hasOpenworkTarget } =
await resolveWorkspaceServerTarget();
const canUseOpenworkServer =
hasOpenworkTarget &&
openworkSnapshot.openworkServerCapabilities?.skills?.write !== false;
if (canUseOpenworkServer && openworkClient && openworkWorkspaceId) {
await openworkClient.deleteSkill(openworkWorkspaceId, name);
return;
}
if (hasOpenworkTarget) {
throw new Error("OpenWork server cannot remove skills for this workspace.");
}
if (isRemoteWorkspace) {
throw new Error("OpenWork server unavailable. Connect to remove skills.");
}
if (!isDesktopRuntime()) {
throw new Error(t("skills.desktop_required"));
}
if (!isLocalWorkspace || !root) {
throw new Error(t("skills.pick_workspace_first"));
}
const result = (await uninstallSkillCommand(root, name)) as { ok: boolean; stderr?: string; stdout?: string };
if (!result.ok) {
throw new Error(result.stderr || result.stdout || t("skills.uninstall_failed"));
}
};
const slugifyConfigObjectName = (title: string, fallback: string) => {
const slug = slugifyOpencodeSkillName(title || fallback);View on GitHub (pinned to 2b7df46e8a)
Solutions
- Connect to the OpenWork server (sign in) and retry the skill removal.
- Check network/VPN connectivity to the server hosting the remote workspace.
- Verify the workspace's server configuration in .opencode/openwork.json is correct.
- If the server was decommissioned, re-point the workspace to the new server before managing skills.
Example fix
// before
if (isRemoteWorkspace) {
throw new Error("OpenWork server unavailable. Connect to remove skills.");
}
// after
if (isRemoteWorkspace) {
const connected = await promptServerConnection();
if (!connected) throw new Error("OpenWork server unavailable. Connect to remove skills.");
return removeSkill(name); // retry with server client available
} Defensive patterns
Strategy: try-catch
Validate before calling
if (isRemoteWorkspace && !canUseOpenworkServer) {
// prompt 'connect to server' before allowing any skill management
return;
} Try / catch
try {
await removeSkill(name);
} catch (err) {
if (err.message.includes("Connect to remove skills")) openServerConnectDialog();
else throw err;
} Prevention
- Require an active server connection before showing remote skill lists with delete affordances
- Verify the workspace's openwork.json target configuration on workspace open
- Detect offline state and disable destructive remote actions with an explanatory tooltip
When it happens
Trigger: Attempting to remove a skill while connected to a remote workspace where canUseOpenworkServer is false and hasOpenworkTarget is false — i.e. no usable server client for the remote workspace.
Common situations: Disconnected/signed-out session while browsing a remote workspace; server URL misconfigured; VPN/network down; workspace migrated and old target removed from config.
Related errors
- OpenWork server unavailable. Connect to manage imported clou
- OpenWork server unavailable. Connect to manage imported clou
- OpenWork server cannot remove skills for this workspace.
- ${message}
- OpenWork server is unavailable. Start or reconnect the serve
AI-assisted analysis of different-ai/openwork@2b7df46e8a (2026-09-01).
Data as JSON: /api/errors/45a4d8a2e5bbf515.
Report an issue: GitHub.