tinyhumansai/openhuman · error

[ToolsPanel] Failed to save tool preferences:

Error message

[ToolsPanel] Failed to save tool preferences:

What it means

Saving onboarding tasks with the newly expanded enabledTools list failed in the Tools panel — the setOnboardingTasks call (which carries the Rust tool names the session builder filters on) rejected. Tool preferences are therefore not persisted; the UI's toggle state and the session builder's actual tool set can diverge until a successful re-save.

Source

Thrown at app/src/components/settings/panels/ToolsPanel.tsx:88

        .filter(([, v]) => v)
        .map(([k]) => k);

      // Expand UI toggle IDs to the Rust tool names the session builder filters on.
      const enabledTools = getEnabledRustToolNames(enabledIds);

      await setOnboardingTasks({
        accessibilityPermissionGranted: onboardingTasks?.accessibilityPermissionGranted ?? false,
        localModelConsentGiven: onboardingTasks?.localModelConsentGiven ?? false,
        localModelDownloadStarted: onboardingTasks?.localModelDownloadStarted ?? false,
        enabledTools,
        connectedSources: onboardingTasks?.connectedSources ?? [],
        updatedAtMs: Date.now(),
      });
      setDirty(false);
      setSaveStatus('saved');
      setTimeout(() => setSaveStatus('idle'), 3000);
    } catch (err) {
      console.warn('[ToolsPanel] Failed to save tool preferences:', err);
      setSaveStatus('error');
    } finally {
      setSaving(false);
      setTimeout(() => {
        savingRef.current = false;
      }, 500);
    }
  };

  const body = (
    <>
      <p className="text-content-muted text-sm">{t('settings.tools.chooseCapabilities')}</p>

      <div className="max-h-[420px] overflow-y-auto pr-1 space-y-4">
        {TOOL_CATEGORIES.map(category => {
          const tools = toolsByCategory[category];
          if (tools.length === 0) return null;
          return (

View on GitHub (pinned to 7491200858)

Solutions

  1. Read the warned error to distinguish core RPC transport failure from a validation rejection of the enabledTools list
  2. Confirm the core process and session are healthy, then re-apply and save the tool selection
  3. If getEnabledRustToolNames produced an unknown tool id, compare the UI toggle ids against the Rust tool names the core accepts
  4. Check the core log for the onboarding-tasks write handler's error detail
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at app/src/components/settings/panels/ToolsPanel.tsx:88 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/865ac7d45f3c69b5. Report an issue: GitHub.