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
- Read the embedded HTTP status: retry with backoff on 429/5xx.
- On 403/401, re-authenticate in the browser and confirm account access.
- On 404, update the CLI — the endpoint path likely changed.
- 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
- Add exponential backoff for 429/5xx statuses.
- Rate-limit your scripts to stay under Manus quotas.
- Confirm account permissions for the endpoints you call.
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
- ${label} returned HTTP ${resp.status}: ${summarizeApiError(p
- HTTP ${result.httpStatus} from /api/organizations
- ${label} returned HTTP ${res.status}
- HTTP_ERROR
- HTTP_ERROR
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/61bcd59aa7fc06ff.
Report an issue: GitHub.