jackwener/OpenCLI · warning · EmptyResultError

No skills matched "${keyword}".

Error message

No skills matched "${keyword}".

What it means

Thrown as an EmptyResultError when the marketplace search executed in the Trae UI returns zero matching skills. The command typed the keyword into the search input, read the rendered results, and found none.

Source

Thrown at clis/trae-solo/skill.js:142

      inp.dispatchEvent(new Event('input', { bubbles: true }));
    })()`);
        await page.wait(0.7);

        const items = await page.evaluate(`(function() {
      const cards = Array.from(document.querySelectorAll('.marketplace-card-v2')).filter((c) => c.offsetParent);
      return cards.map((c, i) => {
        const logo = c.querySelector('.skill-logo-svg');
        const name = (logo && logo.getAttribute('aria-label')) || '';
        const full = (c.innerText || '').replace(/\\s+/g, ' ').trim();
        let desc = full;
        if (name && desc.startsWith(name)) desc = desc.slice(name.length).trim();
        return { index: i + 1, name: name || full.split(' ')[0], description: desc.slice(0, 200) };
      });
    })()`);
        const limit = Number.isInteger(kwargs.limit) && kwargs.limit > 0 ? kwargs.limit : 50;
        const rows = (items || []).slice(0, limit);
        if (!rows.length) {
            throw new EmptyResultError('trae-solo skill-search', `No skills matched "${keyword}".`);
        }
        return rows.map((r) => ({ Index: r.index, Name: r.name, Description: r.description }));
    },
});

// -------- skill-category --------
cli({
    site: 'trae-solo',
    name: 'skill-category',
    access: 'read',
    description: 'Filter Skills Marketplace by category. Pass --list to see categories.',
    domain: 'localhost',
    strategy: Strategy.UI,
    browser: true,
    args: [
        { name: 'name', positional: true, required: false, help: 'Category name (substring; case-insensitive). Common: All / Developer Tools / Data Analysis / UI Design / Content Creation / Productivity' },
        { name: 'list', type: 'boolean', default: false, help: 'List available categories' },
        { name: 'limit', type: 'int', required: false, default: 100 },

View on GitHub (pinned to 49907e53dc)

Solutions

  1. Retry with a broader/shorter keyword (e.g. 'code' instead of 'code-review-helper').
  2. Add a wait/delay after typing so results render before items are collected.
  3. Verify the marketplace loads in the Trae UI manually — network/login issues will look identical.
  4. If results visibly exist but aren't parsed, update the result-collection selectors in skill.js after a Trae UI update.

Example fix

// before
await skillSearch({ keyword: 'zzzz-no-such-skill' })
// after
await skillSearch({ keyword: 'lint' })
Defensive patterns

Strategy: retry

Validate before calling

// ensure the marketplace search input exists and query is reasonable
const kw = keyword.trim();
if (!kw) throw new Error('empty keyword');
await page.waitForSelector('input[placeholder="Search"]', { timeout: 5000 }).catch(() => {});

Try / catch

try {
  return await skillSearch({ keyword: kw });
} catch (e) {
  if (e instanceof EmptyResultError && /No skills matched/.test(e.message)) {
    await sleep(1500);
    return await skillSearch({ keyword: kw }); // retry once for slow renders
  }
  throw e;
}

Prevention

When it happens

Trigger: Running skill-search with a keyword that matches no marketplace entries; results not yet rendered when page.evaluate collected items; the search input selector failed so the query never ran; Trae marketplace offline or region-restricted.

Common situations: Very niche or misspelled keywords; marketplace index changed and the skill was renamed/removed; slow network so results hadn't loaded; Trae UI update broke the results selector.

Related errors


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