jackwener/OpenCLI · warning · EmptyResultError

No skills found.

Error message

No skills found.

What it means

The `manus skills` command successfully reached the ListSkills API and parsed it, but after collecting both user-added and system skills the resulting rows array was empty, so it throws this EmptyResultError. The API responded fine; it simply reported zero skills. The CLI throws instead of printing an empty table so callers can distinguish 'no data' from success.

Source

Thrown at clis/manus/skills.js:56

                Description: (s.description || '—').slice(0, 80),
                Source: 'user',
            });
        }

        const systemSkills = Object.prototype.hasOwnProperty.call(data, 'systemSkills')
            ? requireArray(data.systemSkills, 'system skills')
            : (Object.prototype.hasOwnProperty.call(data, 'skills') ? requireArray(data.skills, 'system skills') : []);
        for (const [index, s] of systemSkills.entries()) {
            rows.push({
                ID: requireString(s?.id || s?.uid, `system skill ${index + 1}`),
                Name: requireString(s?.name, `system skill ${index + 1}`),
                Description: (s.description || '—').slice(0, 80),
                Source: 'system',
            });
        }

        if (!rows.length) {
            throw new EmptyResultError('manus skills', 'No skills found.');
        }

        return rows;
    },
});

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Add a skill in the Manus UI (or confirm skills exist there), then rerun `manus skills`.
  2. Confirm the browser profile is logged into the account that actually owns the skills.
  3. Retry later if Manus normally shows skills in the web UI but the CLI returns none — could be a transient backend issue.
  4. If empty output is expected, catch EmptyResultError in your wrapper and treat it as a normal zero-skills result.

Example fix

// wrapper handling an expected empty skill list
// before
const skills = await run('manus skills');
// after
try {
  const skills = await run('manus skills');
} catch (e) {
  if (e instanceof EmptyResultError) return [];
  throw e;
}
Defensive patterns

Strategy: try-catch

Try / catch

try {
  const rows = await run('manus skills');
} catch (e) {
  if (e instanceof EmptyResultError) {
    console.log('Account has no skills (user or system).');
    process.exitCode = 0;
  } else throw e;
}

Prevention

When it happens

Trigger: The authenticated Manus account has no user-added skills AND the API returned empty arrays for systemSkills/skills — e.g. a brand-new account, a payload where both keys exist but are [], or the system skill list endpoint returning empty for the region/account tier.

Common situations: Newly created Manus account with no custom skills; account on a tier where system skills aren't provisioned; transient Manus backend issue returning empty lists for an established account that does have skills.

Understand the failure class

Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.

Related errors


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