{"record":{"id":"0a3a783ac48af01a","repo":"vercel/ai","slug":"harness-codex-does-not-support-built-in-tool-app","errorCode":null,"errorMessage":"Harness 'codex' does not support built-in tool approval requests; use permissionMode: 'allow-all'.","messagePattern":"Harness 'codex' does not support built-in tool approval requests; use permissionMode: 'allow-all'\\.","errorType":"exception","errorClass":"HarnessCapabilityUnsupportedError","httpStatus":null,"severity":"error","filePath":"packages/harness-codex/src/codex-harness.ts","lineNumber":220,"sourceCode":"    harnessId: 'codex',\n    builtinTools: CODEX_BUILTIN_TOOLS,\n    supportsBuiltinToolApprovals: false,\n    lifecycleStateSchema: codexResumeStateSchema,\n    getBootstrap: getCodexBootstrap,\n    doStart: async startOpts => {\n      const model = settings.model ?? DEFAULT_CODEX_MODEL;\n      if (startOpts.builtinToolFiltering != null) {\n        throw new HarnessCapabilityUnsupportedError({\n          message:\n            \"Harness 'codex' does not support built-in tool filtering controls.\",\n          harnessId: 'codex',\n        });\n      }\n      if (\n        startOpts.permissionMode != null &&\n        startOpts.permissionMode !== 'allow-all'\n      ) {\n        throw new HarnessCapabilityUnsupportedError({\n          message:\n            \"Harness 'codex' does not support built-in tool approval requests; use permissionMode: 'allow-all'.\",\n          harnessId: 'codex',\n        });\n      }\n      const sandboxSession = startOpts.sandboxSession;\n      const toolSafeSandboxSession =\n        getRestrictedSandboxSession(sandboxSession);\n      const sandboxId = 'id' in sandboxSession ? sandboxSession.id : undefined;\n      validateBasicSandboxSettings({\n        sandboxSession,\n        port: settings.port,\n        portEndpoint: settings.portEndpoint,\n      });\n      if (settings.mintBridgeToken != null && sandboxId == null) {\n        throw new HarnessCapabilityUnsupportedError({\n          harnessId: 'codex',\n          message:","sourceCodeStart":202,"sourceCodeEnd":238,"githubUrl":"https://github.com/vercel/ai/blob/69428b1f8b037e4d118fb4853428d5c4e620493c/packages/harness-codex/src/codex-harness.ts#L202-L238","documentation":"The codex harness only supports permissionMode 'allow-all'; it cannot surface built-in tool approval prompts. Any other permissionMode (e.g. 'default', 'ask') passed in start options throws HarnessCapabilityUnsupportedError, directing users to allow-all.","triggerScenarios":"Calling createCodex(...).start({ permissionMode: 'default' }) or any value other than 'allow-all' (or undefined).","commonSituations":"Reusing the same start options across harnesses where other harnesses support approval flows; enabling stricter permissions for production while using codex.","solutions":["Pass permissionMode: 'allow-all' (or omit it if allow-all is the default).","Enforce approvals outside the harness (e.g. review transcripts, sandbox restrictions) since codex cannot ask.","Use a different harness if interactive tool approvals are required."],"exampleFix":"// before\nharness.start({ permissionMode: 'default' });\n// after\nharness.start({ permissionMode: 'allow-all' });","handlingStrategy":"validation","validationCode":"if (startOpts?.permissionMode != null && startOpts.permissionMode !== 'allow-all') {\n  throw new Error('codex harness requires permissionMode: allow-all');\n}","typeGuard":null,"tryCatchPattern":"try {\n  await harness.start(startOpts);\n} catch (e) {\n  if (/does not support built-in tool approval/.test(String(e?.message))) {\n    // retry with permissionMode: 'allow-all'\n  } else throw e;\n}","preventionTips":["Omit permissionMode (or use 'allow-all') for codex","Branch start options per harness when sharing config","Implement approvals outside the harness if needed"],"tags":["harness-codex","unsupported-capability","permissions","start-options"],"backgroundTag":"unsupported-capability","analyzedSha":"69428b1f8b037e4d118fb4853428d5c4e620493c","analyzedAt":"2026-08-30T12:32:21.016Z","schemaVersion":2},"datasetVersion":"2026-08-30T13:17:10.514Z"}