{"record":{"id":"c4520d6437abc40c","repo":"paperclipai/paperclip","slug":"paperclip-runner-currently-supports-codex-only-wit","errorCode":null,"errorMessage":"Paperclip Runner currently supports Codex only with codexPermissionMode set to never. Select Full auto (never ask) before saving.","messagePattern":"Paperclip Runner currently supports Codex only with codexPermissionMode set to never\\. Select Full auto \\(never ask\\) before saving\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/adapters/codex-local/src/ui/build-config.ts","lineNumber":168,"sourceCode":"    300,\n    300,\n    \"AWS AgentCore timeoutSeconds\",\n  );\n  const lifecycleCandidate = v.paperclipRunnerLifecycleMode ?? schemaValues.lifecycleMode;\n  const lifecycleMode = lifecycleCandidate === \"warm\" ? \"warm\" : \"per_turn\";\n  const configuredIdleTimeoutMs =\n    v.paperclipRunnerIdleTimeoutMs ?? schemaValues.idleTimeoutMs;\n  const idleTimeoutMs = resolvePaperclipRunnerIdleTimeoutMs(\n    configuredIdleTimeoutMs,\n  );\n  const configuredCodexPermissionMode =\n    v.adapterSchemaValues?.codexPermissionMode ?? v.codexPermissionMode;\n  if (\n    provider === \"codex\"\n    && configuredCodexPermissionMode !== undefined\n    && configuredCodexPermissionMode !== \"never\"\n  ) {\n    throw new Error(\n      \"Paperclip Runner currently supports Codex only with codexPermissionMode set to never. Select Full auto (never ask) before saving.\",\n    );\n  }\n  for (const normalizedKey of [\n    \"provider\",\n    \"model\",\n    \"acpxAgent\",\n    \"codexPermissionMode\",\n    \"opencodePermissionMode\",\n    \"acpxPermissionMode\",\n    \"managedProfileId\",\n    \"managedAgentsRetentionAcknowledged\",\n    \"maxSessionListCostUsd\",\n    \"anthropicAgentId\",\n    \"agentVersion\",\n    \"anthropicEnvironmentId\",\n    \"agentCoreProfileId\",\n    \"agentCoreRetentionAcknowledged\",","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/paperclipai/paperclip/blob/01ad8584922b5d85292b1723cae71fa0d9b07a19/packages/adapters/codex-local/src/ui/build-config.ts#L150-L186","documentation":"buildPaperclipRunnerConfig() validates adapter configuration before saving a company/adapter config. Paperclip Runner only supports the Codex adapter with codexPermissionMode 'never' (Full auto, never ask); any other explicitly configured mode is rejected at config-build time. The error tells the user to change the permission mode in the UI before saving.","triggerScenarios":"Building a Paperclip Runner config with provider 'codex' and codexPermissionMode set to anything other than 'never' (e.g. 'on-request', 'on-failure', 'untrusted'), whether typed by hand in config JSON or selected in the UI form.","commonSituations":"User picked a non-'never' permission mode in the adapter settings form; config copied from a Codex CLI setup that used a different permission mode; older saved config with a now-unsupported mode being re-validated on upgrade.","solutions":["Set codexPermissionMode to \"never\" (Full auto / never ask) in the adapter settings, then save again.","If editing config directly, remove the codexPermissionMode key so the default ('never') applies.","If you need interactive permission prompts, use a different runner/adapter that supports them instead of the Paperclip Runner Codex path."],"exampleFix":"// before\n{ \"provider\": \"codex\", \"model\": \"gpt-5\", \"codexPermissionMode\": \"on-request\" }\n// after\n{ \"provider\": \"codex\", \"model\": \"gpt-5\", \"codexPermissionMode\": \"never\" }","handlingStrategy":"validation","validationCode":"function validateCodexRunnerConfig(cfg: { provider: string; codexPermissionMode?: string }): string | null {\n  if (cfg.provider === \"codex\" && cfg.codexPermissionMode !== undefined && cfg.codexPermissionMode !== \"never\") {\n    return `codexPermissionMode must be \"never\" for Paperclip Runner, got \"${cfg.codexPermissionMode}\"`;\n  }\n  return null;\n}","typeGuard":null,"tryCatchPattern":"try {\n  const runnerConfig = buildPaperclipRunnerConfig(values);\n  saveAdapterConfig(runnerConfig);\n} catch (err) {\n  if (err instanceof Error && err.message.includes(\"codexPermissionMode\")) {\n    showUiToast(\"Switch Codex permission mode to Full auto (never ask) before saving.\");\n    return;\n  }\n  throw err;\n}","preventionTips":["In UI forms, restrict the Codex permission-mode selector to \"never\" (or omit the field) for Paperclip Runner.","Validate codexPermissionMode client-side before submitting adapter settings.","Never copy codexPermissionMode from standalone Codex CLI configs into Paperclip runner config.","On upgrade, audit saved configs for non-'never' Codex modes and normalize them."],"tags":["configuration","codex","validation","runner"],"backgroundTag":"invalid-config-value","analyzedSha":"01ad8584922b5d85292b1723cae71fa0d9b07a19","analyzedAt":"2026-09-10T03:14:50.855Z","contentChangedAt":"2026-09-10T03:14:50.855Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}