jackwener/OpenCLI · error · CommandExecutionError

Manus ${label} failed (HTTP ${value.__httpError}): ${message

Error message

Manus ${label} failed (HTTP ${value.__httpError}): ${message}

What it means

CommandExecutionError thrown by requireObject() when the payload has __httpError (a non-2xx HTTP status captured in-page) and an error message could be extracted. It wraps the HTTP status and server-provided message into one actionable string.

Source

Thrown at clis/manus/_utils.js:68

function extractErrorMessage(payload) {
    if (!payload || typeof payload !== 'object') return '';
    const candidates = [
        payload.message,
        payload.error,
        payload.errorMessage,
        payload.details,
    ];
    return candidates.find((value) => typeof value === 'string' && value.trim())?.trim() || '';
}

export function requireObject(payload, label) {
    const value = unwrapEvaluateResult(payload);
    if (value?.__authRequired) {
        throw new AuthRequiredError(MANUS_DOMAIN, value.message || 'Authentication required — please sign in to Manus in the browser');
    }
    if (value?.__httpError) {
        const message = extractErrorMessage(value);
        throw new CommandExecutionError(message ? `Manus ${label} failed (HTTP ${value.__httpError}): ${message}` : `Manus ${label} failed (HTTP ${value.__httpError})`);
    }
    if (value?.__error) {
        throw new CommandExecutionError(`Manus ${label} failed: ${value.message || value.__error}`);
    }
    if (!value || typeof value !== 'object' || Array.isArray(value)) {
        throw new CommandExecutionError(`Manus ${label} returned a malformed API payload`);
    }
    return value;
}

export function requireArray(value, label) {
    if (!Array.isArray(value)) {
        throw new CommandExecutionError(`Manus ${label} returned a malformed API payload`);
    }
    return value;
}

export function requireString(value, label) {

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Read the embedded HTTP status: retry with backoff on 429/5xx.
  2. On 403/401, re-authenticate in the browser and confirm account access.
  3. On 404, update the CLI — the endpoint path likely changed.
  4. Reduce request frequency if repeatedly rate limited.

Example fix

// client retry pattern
try {
  const sessions = await manusSessions();
} catch (e) {
  if (/HTTP 429|HTTP 5\d\d/.test(e.message)) await sleep(2000);
  else throw e;
}
Defensive patterns

Strategy: retry

Type guard

function isHttpFailure(v) { return v != null && typeof v === 'object' && typeof v.__httpError === 'number'; }

Try / catch

try {
  const data = await manusData();
} catch (e) {
  const m = /HTTP (\d{3})/.exec(e.message);
  if (m && (m[1] === '429' || m[1][0] === '5')) {
    await new Promise(r => setTimeout(r, 2000));
    return retry();
  }
  throw e;
}

Prevention

When it happens

Trigger: In-page fetch to a Manus API endpoint returns 4xx/5xx with a parseable error body; e.g. 403 for forbidden resources, 429 rate limiting, 500 server errors, 404 wrong endpoint after API changes.

Common situations: Hitting rate limits from rapid repeated calls, requesting resources the account lacks permission for, Manus API path changes producing 404s, transient 5xx during incidents.

Understand the failure class

Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.

Related errors


AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29). Data as JSON: /api/errors/61bcd59aa7fc06ff. Report an issue: GitHub.