vercel/ai · error · Error

Cline did not create its native skills tool.

Error message

Cline did not create its native skills tool.

What it means

createClineSkillsRuntime builds a tool set from Cline's createNativeTools (with enableSkills: true) and expects a tool literally named 'skills'. If the native tool factory returns no such tool — e.g. the Cline version bundled lacks the skills tool or the factory behavior changed — this plain Error is thrown as an internal invariant failure. It indicates an incompatibility between the harness package and the Cline runtime, not bad user input.

Source

Thrown at packages/harness-cline/src/cline-skills.ts:76

    name: skill.name,
    description: skill.description,
    disabled: false,
  }));

  const tool = createDefaultTools({
    executors: { skills: executor },
    enableReadFiles: false,
    enableSearch: false,
    enableBash: false,
    enableWebFetch: false,
    enableApplyPatch: false,
    enableEditor: false,
    enableSkills: true,
    enableAskQuestion: false,
    enableSubmitAndExit: false,
  }).find(tool => tool.name === 'skills');
  if (tool == null) {
    throw new Error('Cline did not create its native skills tool.');
  }

  return { signature, tool };
}

function projectClineSkills({
  skills,
}: {
  skills: ReadonlyArray<HarnessV1Skill>;
}): ReadonlyArray<ProjectedClineSkill> {
  const names = new Set<string>();
  const ids = new Set<string>();
  return skills
    .map(skill => {
      if (
        !CLINE_SKILL_NAME_PATTERN.test(skill.name) ||
        skill.name === '.' ||
        skill.name === '..'

View on GitHub (pinned to 69428b1f8b)

Solutions

  1. Align the @ai-sdk/harness-cline package version with the installed Cline runtime/extension version (upgrade or pin both).
  2. Remove or empty the skills option on turn calls to avoid creating the skills runtime until versions are compatible.
  3. Inspect the tool list returned by Cline's createNativeTools in your installed version to confirm the 'skills' tool name; if it was renamed, report/patch the harness mapping.

Example fix

// before
await session.prompt({ text, skills: [mySkill] }); // runtime without native skills tool
// after
await session.prompt({ text }); // omit skills, or upgrade the Cline runtime that provides the 'skills' native tool
Defensive patterns

Strategy: try-catch

Validate before calling

// Precheck your Cline runtime exposes the skills tool
import { createNativeTools } from '<cline-runtime>';
const hasSkillsTool = createNativeTools({ enableEditor: false, enableSkills: true, enableAskQuestion: false, enableSubmitAndExit: false })
  .some(t => t.name === 'skills');
if (!hasSkillsTool) skills = undefined; // omit skills option for this turn

Try / catch

try {
  await session.prompt({ text, skills });
} catch (e) {
  if (e instanceof Error && e.message === 'Cline did not create its native skills tool.') {
    await session.prompt({ text }); // retry without skills; also flag runtime/version mismatch
  } else throw e;
}

Prevention

When it happens

Trigger: Starting a Cline turn with skills supplied (turnOpts.skills non-empty), where createNativeTools({ enableSkills: true, ... }) returns a tool list without an entry named 'skills'.

Common situations: Version mismatch: the Cline runtime/extension was updated or downgraded and its native tool names changed; a patched or custom Cline build that omits the skills tool; passing skills on a runtime where skills support was removed.

Related errors


AI-assisted analysis of vercel/ai@69428b1f8b (2026-08-30). Data as JSON: /api/errors/800238c20cd48981. Report an issue: GitHub.