tinyhumansai/openhuman · error

[DaemonLifecycle] Max reconnection attempts reached

Error message

[DaemonLifecycle] Max reconnection attempts reached

What it means

The daemon lifecycle hook's retry budget is exhausted: connectionAttempts reached MAX_RECONNECTION_ATTEMPTS, so scheduleRetry stops scheduling further exponential-backoff retries. The daemon remains disconnected and no automatic recovery will occur — the UI continues to show the disconnected state until the user manually restarts (or the app remounts the hook, resetting attempts).

Source

Thrown at app/src/hooks/useDaemonLifecycle.ts:108

        console.error('[DaemonLifecycle] Auto-start error:', error);
        incrementConnectionAttempts(uid);
      } finally {
        setIsRecovering(uid, false);
      }
    }
  }, []);

  // Retry connection with exponential backoff
  const scheduleRetry = useCallback(() => {
    const { connectionAttempts, status, isRecovering } = latestLifecycleRef.current;

    if (!isTauri() || !isMountedRef.current || isRecovering) {
      return;
    }

    // Don't retry if we've exceeded max attempts
    if (connectionAttempts >= MAX_RECONNECTION_ATTEMPTS) {
      console.warn('[DaemonLifecycle] Max reconnection attempts reached');
      return;
    }

    // Don't retry if daemon is already running or starting
    if (status === 'running' || status === 'starting') {
      return;
    }

    const retryDelay = calculateRetryDelay(connectionAttempts + 1);
    console.log(
      `[DaemonLifecycle] Scheduling retry attempt ${connectionAttempts + 1} in ${retryDelay}ms`
    );

    // Clear existing timeout
    if (retryTimeoutRef.current) {
      clearTimeout(retryTimeoutRef.current);
    }

View on GitHub (pinned to 7491200858)

Solutions

  1. Use the UI's manual restart/connect action for the daemon
  2. Check why every retry failed — core/daemon logs at the retry timestamps carry the underlying errors
  3. Resolve the root cause (port conflict, crashed service, permissions) before restarting, or the budget exhausts again
  4. Restarting the app resets connection attempts and re-runs auto-start
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at app/src/hooks/useDaemonLifecycle.ts:108 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/ef6be0b1b825ef5a. Report an issue: GitHub.