{"record":{"id":"c79b11c4be396deb","repo":"vercel/ai","slug":"harness-input-harness-harnessid-does-not-supp","errorCode":null,"errorMessage":"Harness '${input.harness.harnessId}' does not support built-in tool filtering controls.","messagePattern":"Harness '(.+?)' does not support built-in tool filtering controls\\.","errorType":"exception","errorClass":"HarnessCapabilityUnsupportedError","httpStatus":null,"severity":"error","filePath":"packages/harness/src/agent/internal/tool-filtering.ts","lineNumber":68,"sourceCode":"\n  const builtinToolFiltering =\n    disabledBuiltinToolNames.length > 0\n      ? activeTools != null\n        ? {\n            mode: 'allow' as const,\n            toolNames: builtinToolNames.filter(name =>\n              activeTools.includes(name),\n            ),\n          }\n        : { mode: 'deny' as const, toolNames: disabledBuiltinToolNames }\n      : undefined;\n\n  if (\n    builtinToolFiltering != null &&\n    input.harness.supportsBuiltinToolFiltering !== true &&\n    input.harness.supportsBuiltinToolApprovals !== true\n  ) {\n    throw new HarnessCapabilityUnsupportedError({\n      message: `Harness '${input.harness.harnessId}' does not support built-in tool filtering controls.`,\n      harnessId: input.harness.harnessId,\n    });\n  }\n\n  return {\n    activeUserTools: filterToolSet({\n      tools: input.userTools,\n      toolNames: activeUserToolNames,\n    }),\n    ...(builtinToolFiltering != null ? { builtinToolFiltering } : {}),\n  };\n}\n\nfunction dedupeToolNames(input: {\n  toolNames: ReadonlyArray<string> | undefined;\n}): ReadonlyArray<string> | undefined {\n  return input.toolNames == null","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/harness/src/agent/internal/tool-filtering.ts#L50-L86","documentation":"Built-in tool filtering (activeTools/inactiveTools affecting the harness's built-in tools) is an optional capability. If you supply builtin tool filtering settings for a harness whose harnessId reports neither supportsBuiltinToolFiltering nor supportsBuiltinToolApprovals, a HarnessCapabilityUnsupportedError is thrown.","triggerScenarios":"Configuring builtin tool filtering for a harness like one that only exposes agent-level tools; passing builtinToolFiltering while the harness adapter's supportsBuiltinToolFiltering/supportsBuiltinToolApprovals flags are not true.","commonSituations":"Copying tool-filtering config between different harnesses (e.g. from Claude Code to a minimal harness); using an older harness adapter that predates the capability flags.","solutions":["Check harness.supportsBuiltinToolFiltering before passing builtin tool filtering options.","Restrict filtering to user-defined tools, or drop the builtinToolFiltering setting for this harness.","Upgrade the harness package to a version whose adapter supports builtin tool filtering."],"exampleFix":"// before\nnew HarnessAgent({ harness: minimalHarness, builtinToolFiltering: { inactiveTools: ['shell'] } });\n// after\nif (minimalHarness.supportsBuiltinToolFiltering) {\n  new HarnessAgent({ harness: minimalHarness, builtinToolFiltering: { inactiveTools: ['shell'] } });\n}","handlingStrategy":"type-guard","validationCode":"if (cfg.builtinToolFiltering && !harness.supportsBuiltinToolFiltering && !harness.supportsBuiltinToolApprovals) { delete cfg.builtinToolFiltering; }","typeGuard":"function supportsBuiltinFiltering(h: Harness): h is Harness & { supportsBuiltinToolFiltering: true } { return h.supportsBuiltinToolFiltering === true || h.supportsBuiltinToolApprovals === true; }","tryCatchPattern":"try { createAgent({ harness, builtinToolFiltering }); } catch (e) { if (e instanceof HarnessCapabilityUnsupportedError) { createAgent({ harness }); } else throw e; }","preventionTips":["Check capability flags before enabling harness-specific features","Keep per-harness config profiles instead of one shared config","Upgrade harness adapters when you need builtin filtering"],"tags":["capability","tools","harness","configuration"],"backgroundTag":"capability-unsupported","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}