stablyai/orca · critical

[verify-skills-cli-runtime] skills list omitted ${topic}

Error message

[verify-skills-cli-runtime] skills list omitted ${topic}

What it means

Thrown by verifySkillsCliRuntime() when the skills list --json output does not include an expected topic ('orca-cli' or 'computer-use'). The script iterates a hardcoded list of required topics and checks topicNames.has(topic). This verifies that the built CLI advertises the topics the runtime expects to be present.

Source

Thrown at config/scripts/verify-skills-cli-runtime.cjs:184

function parseJson(label, output) {
  try {
    return JSON.parse(output)
  } catch {
    throw new Error(`[verify-skills-cli-runtime] ${label} emitted invalid JSON:\n${output}`)
  }
}

function verifySkillsCliRuntime(outDir, artifactRoot = dirname(outDir), options = {}) {
  const absoluteOutDir = resolve(outDir)
  const closure = collectRuntimeClosure(absoluteOutDir, resolve(artifactRoot))
  if (options.executeCommands === false) {
    return { closureFiles: closure.length, commands: 0 }
  }
  const list = parseJson('skills list', runCli(absoluteOutDir, ['skills', 'list', '--json']))
  const topicNames = new Set(list.topics?.map((topic) => topic.name))
  for (const topic of ['orca-cli', 'computer-use']) {
    if (!topicNames.has(topic)) {
      throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
    }
    const guide = runCli(absoluteOutDir, ['skills', 'get', topic])
    if (!guide.includes(`name: ${topic}`)) {
      throw new Error(`[verify-skills-cli-runtime] skills get ${topic} returned the wrong guide`)
    }
  }

  const install = parseJson(
    'skills install --dry-run',
    runCli(absoluteOutDir, [
      'skills',
      'install',
      '--skill',
      'orca-cli',
      '--agent',
      'codex',
      '--dry-run',
      '--json'

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Run skills list --json and inspect the topics array — confirm the name field shape and whether the expected topics appear under a different name.
  2. If a topic was intentionally renamed, update the hardcoded array ['orca-cli', 'computer-use'] in verifySkillsCliRuntime.
  3. If a topic is missing from the build, check the skills bundling/packaging step that copies topic manifests into outDir.
  4. Verify the topics array is populated and not an empty/undefined value due to a list() implementation change.

Example fix

// before: required topic renamed but verifier not updated
for (const topic of ['orca-cli', 'computer-use']) {
  if (!topicNames.has(topic)) {
    throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
  }
}

// after: align verifier with renamed topic
for (const topic of ['orca', 'computer-use']) {
  if (!topicNames.has(topic)) {
    throw new Error(`[verify-skills-cli-runtime] skills list omitted ${topic}`)
  }
}
Defensive patterns

Strategy: validation

Validate before calling

const REQUIRED_TOPICS = ['orca-cli', 'computer-use']
function validateTopics(list) {
  const names = new Set((list.topics ?? []).map((t) => t.name))
  const missing = REQUIRED_TOPICS.filter((t) => !names.has(t))
  if (missing.length > 0) {
    throw new Error(`Missing required topics: ${missing.join(', ')}. Found: ${[...names].join(', ')}`)
  }
}

Type guard

function isTopicList(value) {
  return value !== null && typeof value === 'object' &&
    Array.isArray(value.topics) &&
    value.topics.every((t) => typeof t?.name === 'string')
}

Try / catch

try {
  const list = parseJson('skills list', runCli(outDir, ['skills', 'list', '--json']))
  if (!isTopicList(list)) {
    throw new Error('skills list returned unexpected schema')
  }
  validateTopics(list)
} catch (err) {
  console.error('Topic validation failed:', err.message)
  throw err
}

Prevention

When it happens

Trigger: skills list returns valid JSON with a topics array, but none of the objects have name === 'orca-cli' or name === 'computer-use'. Caused by a topic being renamed, removed, filtered out, or the topics array being absent/empty in the list response.

Common situations: A topic was renamed in the skills registry (e.g. 'orca-cli' → 'orca'); a conditional registration that skips topics in a minimal build; a packaging step that omits topic manifests from the outDir; a schema change where the name field moved or was nested differently.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/c073fff8b34aa82f. Report an issue: GitHub.