Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent
Use OpenAI’s Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.
Codex CLI is OpenAI’s terminal coding agent. Like Claude Code, it has a shell — so the cleanest way to manage Kataven is to install the Python SDK and let Codex write the calls itself. No MCP server required for this path.If you want to drive Kataven from chat-only ChatGPT (Desktop or Web), see Manage with ChatGPT — that uses MCP.
List all my agents and tell me which ones are pinned to a phone number. Then create a new “Sales SDR” agent with a friendly tone and attach the general-faqs playbook.
Codex reads the Python SDK overview, writes the script, runs it, and reports back.
“Show me every agent and its current model. If any are still on gpt-3.5, upgrade them to gpt-4o-mini.”
“I just uploaded a CSV of leads at ~/leads.csv. Create an outbound campaign called ‘Spring Q2 push’ targeting them. Pause it immediately so I can review before going live.”
“Take the prompt from agent front-desk-v1 and clone it into front-desk-v2-experimental. Don’t attach any tools yet.”
“Place a test call from my main number to my cell using the Front Desk agent, then show me the live transcript link.”
Codex can spawn processes (python -c "…", write & run files). Anything the SDK can do, Codex can do directly. MCP is only useful when the AI tool cannot spawn processes — Claude Desktop, ChatGPT Desktop, n8n nodes, etc.
We strongly recommend running Codex with default approval prompts on for write operations. Reads (agents.list, campaigns.list) are safe to auto-approve; mutations (agents.create, campaigns.start, calls.originate) should require a click. Codex’s --full-auto mode will happily place outbound calls without asking — only enable it on a disposable account.
401 Unauthorized — KATAVEN_API_KEY isn’t set in the shell Codex is using. Run echo $KATAVEN_API_KEY from inside Codex before retrying.“Account not found” — you’re using a Zitadel JWT instead of an sk_live_ key, and KATAVEN_ACCOUNT_ID isn’t set. Easier path: mint an sk_live_ key (step 1).403 Forbidden on POST /api/v1/api-keys or admin endpoints — sk_live_ keys can’t manage other keys, mint integrations, or set cost caps. Those routes require a Hub UI session.429 Too Many Requests — per-tenant cost cap exceeded. View limits at hub.kataven.ai/settings → Limits tab.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kataven","colors":{"primary":"#2563EB","light":"#60A5FA","dark":"#1E40AF"},"logo":{"light":"https://mintcdn.com/katavenai/2uMycxhxIwk_F2eE/images/logo.png?fit=max\u0026auto=format\u0026n=2uMycxhxIwk_F2eE\u0026q=85\u0026s=6cf130449ec06609915faad2826a4c60","dark":"https://mintcdn.com/katavenai/2uMycxhxIwk_F2eE/images/logo-dark.png?fit=max\u0026auto=format\u0026n=2uMycxhxIwk_F2eE\u0026q=85\u0026s=7425881c08adee79bcc1e99cdbdf111c"},"favicon":"https://mintcdn.com/katavenai/2uMycxhxIwk_F2eE/images/favicon.png?fit=max\u0026auto=format\u0026n=2uMycxhxIwk_F2eE\u0026q=85\u0026s=dd648daf26b271ad7b55508d49d97e41","api":{"openapi":"api-spec/openapi.yaml"},"navbar":{"links":[{"href":"https://hub.kataven.ai","label":"Dashboard"}],"primary":{"type":"button","label":"Get an API key","href":"https://hub.kataven.ai/settings"}},"footer":{"socials":{"website":"https://kataven.ai"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"katavenai","hasAudioNarration":false,"actualSubdomain":"katavenai","customDomains":["docs.kataven.ai"],"gitSource":{"type":"github","owner":"kataven-ai","repo":"kataven-docs","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21ddfc374568b70af6c6d6","collectionId":"9d29626f-a39f-45ed-912d-f8362a80503c","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a21ddfc374568b70af6c6d6:success","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API Reference","count":89},{"language":"default","tag":"Resources","count":88},{"language":"default","tag":"Documentation","count":38},{"language":"default","tag":"Resource reference","count":26},{"language":"default","tag":"MCP Server","count":18},{"language":"default","tag":"Python SDK","count":15},{"language":"default","tag":"Node SDK","count":14},{"language":"default","tag":"Agents","count":12},{"language":"default","tag":"Clients","count":12},{"language":"default","tag":"Campaigns","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"guides/manage-with-codex","slug":"/guides/manage-with-codex","pageMetadata":{"title":"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent","sidebarTitle":"Manage with Codex","description":"Use OpenAI's Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.","keywords":["codex cli","codex kataven","openai codex voice","codex voice agent","codex python sdk","terminal ai agent"],"href":"/guides/manage-with-codex"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Use OpenAI’s Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,blockquote:`blockquote`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Note,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://github.com/openai/codex`,children:`Codex CLI`}),` is OpenAI’s terminal coding agent. Like Claude Code, it has a shell — so the cleanest way to manage Kataven is to install the Python SDK and let Codex write the calls itself. `,_jsx(_components.strong,{children:`No MCP server required for this path.`})]}),`\n`,_jsxs(_components.p,{children:[`If you want to drive Kataven from chat-only ChatGPT (Desktop or Web), see `,_jsx(_components.a,{href:`/guides/manage-with-chatgpt`,children:`Manage with ChatGPT`}),` — that uses MCP.`]}),`\n`,_jsx(Heading,{level:`2`,id:`1-mint-an-api-key`,children:`1. Mint an API key`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`https://hub.kataven.ai/settings`,children:`hub.kataven.ai/settings`}),` → `,_jsx(_components.strong,{children:`API Keys`}),` tab → `,_jsx(_components.strong,{children:`Create API key`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Suggested name: `,_jsx(_components.code,{children:`codex-local`}),`. Copy the `,_jsx(_components.code,{children:`sk_live_…`}),` value — it shows once.`]}),`\n`,_jsx(Heading,{level:`2`,id:`2-install-the-sdk`,children:`2. Install the SDK`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`pip`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` install`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` kataven`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Node also works (`,_jsx(_components.code,{children:`npm install @kataven/server`}),`) if you’d rather Codex write TypeScript.`]}),`\n`,_jsx(Heading,{level:`2`,id:`3-set-the-env-var-codex-will-inherit`,children:`3. Set the env var Codex will inherit`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` KATAVEN_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sk_live_acme_...\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Add it to `,_jsx(_components.code,{children:`~/.zshrc`}),` / `,_jsx(_components.code,{children:`~/.bashrc`}),` so every Codex session has it. The SDK reads the env var automatically — Codex doesn’t need to know the value.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`KATAVEN_ACCOUNT_ID`}),` is `,_jsx(_components.strong,{children:`not`}),` required when `,_jsx(_components.code,{children:`KATAVEN_API_KEY`}),` starts with `,_jsx(_components.code,{children:`sk_live_`}),` — the account is in the prefix.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`4-launch-codex-and-ask`,children:`4. Launch Codex and ask`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`codex`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Then type:`}),`\n`,_jsxs(_components.blockquote,{children:[`\n`,_jsxs(_components.p,{children:[`List all my agents and tell me which ones are pinned to a phone number. Then create a new “Sales SDR” agent with a friendly tone and attach the `,_jsx(_components.code,{children:`general-faqs`}),` playbook.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Codex reads the `,_jsx(_components.a,{href:`/sdks/python/overview`,children:`Python SDK overview`}),`, writes the script, runs it, and reports back.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prompts-that-work-well`,children:`Prompts that work well`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[`“Show me every agent and its current model. If any are still on `,_jsx(_components.code,{children:`gpt-3.5`}),`, upgrade them to `,_jsx(_components.code,{children:`gpt-4o-mini`}),`.”`]})}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[`“I just uploaded a CSV of leads at `,_jsx(_components.code,{children:`~/leads.csv`}),`. Create an outbound campaign called ‘Spring Q2 push’ targeting them. Pause it immediately so I can review before going live.”`]})}),`\n`,_jsx(_components.li,{children:_jsxs(_components.em,{children:[`“Take the prompt from agent `,_jsx(_components.code,{children:`front-desk-v1`}),` and clone it into `,_jsx(_components.code,{children:`front-desk-v2-experimental`}),`. Don’t attach any tools yet.”`]})}),`\n`,_jsx(_components.li,{children:_jsx(_components.em,{children:`“Place a test call from my main number to my cell using the Front Desk agent, then show me the live transcript link.”`})}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`verify-what-codex-did`,children:`Verify what Codex did`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`What changed`}),_jsx(_components.th,{children:`Check it at`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Agents`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/agents`,children:`hub.kataven.ai/agents`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Prompts, playbooks, FAQs`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/knowledge`,children:`hub.kataven.ai/knowledge`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Phone numbers`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/phone-numbers`,children:`hub.kataven.ai/phone-numbers`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Live or recent calls`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/conversations`,children:`hub.kataven.ai/conversations`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Campaign progress`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/campaigns`,children:`hub.kataven.ai/campaigns`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Tools, integrations`}),_jsxs(_components.td,{children:[_jsx(_components.a,{href:`https://hub.kataven.ai/tools`,children:`hub.kataven.ai/tools`}),`, `,_jsx(_components.a,{href:`https://hub.kataven.ai/store`,children:`hub.kataven.ai/store`})]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`why-no-mcp-for-codex`,children:`Why no MCP for Codex?`}),`\n`,_jsxs(_components.p,{children:[`Codex can spawn processes (`,_jsx(_components.code,{children:`python -c \"…\"`}),`, write \u0026 run files). Anything the SDK can do, Codex can do directly. MCP is only useful when the AI tool `,_jsx(_components.strong,{children:`cannot`}),` spawn processes — Claude Desktop, ChatGPT Desktop, n8n nodes, etc.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sandbox-/-approval-mode`,children:`Sandbox / approval mode`}),`\n`,_jsxs(_components.p,{children:[`We strongly recommend running Codex with default approval prompts on for write operations. Reads (`,_jsx(_components.code,{children:`agents.list`}),`, `,_jsx(_components.code,{children:`campaigns.list`}),`) are safe to auto-approve; mutations (`,_jsx(_components.code,{children:`agents.create`}),`, `,_jsx(_components.code,{children:`campaigns.start`}),`, `,_jsx(_components.code,{children:`calls.originate`}),`) should require a click. Codex’s `,_jsx(_components.code,{children:`--full-auto`}),` mode will happily place outbound calls without asking — only enable it on a disposable account.`]}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`401 Unauthorized`})}),` — `,_jsx(_components.code,{children:`KATAVEN_API_KEY`}),` isn’t set in the shell Codex is using. Run `,_jsx(_components.code,{children:`echo $KATAVEN_API_KEY`}),` from inside Codex before retrying.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`“Account not found”`}),` — you’re using a Zitadel JWT instead of an `,_jsx(_components.code,{children:`sk_live_`}),` key, and `,_jsx(_components.code,{children:`KATAVEN_ACCOUNT_ID`}),` isn’t set. Easier path: mint an `,_jsx(_components.code,{children:`sk_live_`}),` key (step 1).`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`403 Forbidden`})}),` on `,_jsx(_components.code,{children:`POST /api/v1/api-keys`}),` or admin endpoints — `,_jsx(_components.code,{children:`sk_live_`}),` keys can’t manage other keys, mint integrations, or set cost caps. Those routes require a Hub UI session.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`429 Too Many Requests`})}),` — per-tenant cost cap exceeded. View limits at `,_jsx(_components.a,{href:`https://hub.kataven.ai/settings`,children:`hub.kataven.ai/settings`}),` → `,_jsx(_components.strong,{children:`Limits`}),` tab.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what’s-next`,children:`What’s next`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/manage-with-chatgpt`,children:`Manage with ChatGPT`}),` — the MCP path for chat-only ChatGPT.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/manage-with-claude-code`,children:`Manage with Claude Code`}),` — the same flow with Anthropic’s terminal agent.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdks/python/overview`,children:`Python SDK reference`}),` — what Codex reads when it figures out what’s possible.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent","sidebarTitle":"Manage with Codex","description":"Use OpenAI's Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.","keywords":["codex cli","codex kataven","openai codex voice","codex voice agent","codex python sdk","terminal ai agent"],"href":"/guides/manage-with-codex"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"1. Mint an API key","slug":"1-mint-an-api-key","depth":2,"children":[]},{"title":"2. Install the SDK","slug":"2-install-the-sdk","depth":2,"children":[]},{"title":"3. Set the env var Codex will inherit","slug":"3-set-the-env-var-codex-will-inherit","depth":2,"children":[]},{"title":"4. Launch Codex and ask","slug":"4-launch-codex-and-ask","depth":2,"children":[]},{"title":"Prompts that work well","slug":"prompts-that-work-well","depth":2,"children":[]},{"title":"Verify what Codex did","slug":"verify-what-codex-did","depth":2,"children":[]},{"title":"Why no MCP for Codex?","slug":"why-no-mcp-for-codex","depth":2,"children":[]},{"title":"Sandbox / approval mode","slug":"sandbox-/-approval-mode","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"What’s next","slug":"what’s-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"katavenai","siteName":"Kataven","title":"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent - Kataven","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-08T16:36:29.539Z","originalFileLocation":"guides/manage-with-codex.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Use OpenAI\u0026#x27;s Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kataven\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Manage Kataven with Codex CLI — voice AI from OpenAI\u0026#x27;s terminal agent - Kataven\">\u003cmeta data-mint-head property=\"og:description\" content=\"Use OpenAI\u0026#x27;s Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kataven\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kataven.ai/guides/manage-with-codex\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://katavenai.mintlify.app/_mintlify/api/og/v2?division=Manage+with+AI\u0026amp;title=Manage+Kataven+with+Codex+CLI+%E2%80%94+voice+AI+from+OpenAI%27s+terminal+agent\u0026amp;description=Use+OpenAI%27s+Codex+CLI+to+build+voice+agents%2C+run+outbound+campaigns%2C+and+manage+telephony.+Install+the+Python+SDK+and+let+Codex+write+the+code+itself+%E2%80%94+no+MCP+\u0026amp;theme=0ed538260c0fcf374bac1c4c\u0026amp;signature=738609ef15820acfda866df8b1972368c86974745f36e5345f9463065305c3b0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Manage Kataven with Codex CLI — voice AI from OpenAI\u0026#x27;s terminal agent - Kataven\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Use OpenAI\u0026#x27;s Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://katavenai.mintlify.app/_mintlify/api/og/v2?division=Manage+with+AI\u0026amp;title=Manage+Kataven+with+Codex+CLI+%E2%80%94+voice+AI+from+OpenAI%27s+terminal+agent\u0026amp;description=Use+OpenAI%27s+Codex+CLI+to+build+voice+agents%2C+run+outbound+campaigns%2C+and+manage+telephony.+Install+the+Python+SDK+and+let+Codex+write+the+code+itself+%E2%80%94+no+MCP+\u0026amp;theme=0ed538260c0fcf374bac1c4c\u0026amp;signature=738609ef15820acfda866df8b1972368c86974745f36e5345f9463065305c3b0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/katavenai/ctclNJiEvSssQ8vf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kataven\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kataven.ai/guides/manage-with-codex\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/manage-with-codex.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kataven.ai/#organization\",\"name\":\"Kataven\",\"url\":\"https://docs.kataven.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/katavenai/2uMycxhxIwk_F2eE/images/logo.png?fit=max\u0026auto=format\u0026n=2uMycxhxIwk_F2eE\u0026q=85\u0026s=6cf130449ec06609915faad2826a4c60\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kataven.ai#website\",\"name\":\"Kataven\",\"url\":\"https://docs.kataven.ai\",\"publisher\":{\"@id\":\"https://docs.kataven.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kataven.ai/guides/manage-with-codex#webpage\",\"url\":\"https://docs.kataven.ai/guides/manage-with-codex\",\"name\":\"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent\",\"description\":\"Use OpenAI's Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\",\"dateModified\":\"2026-05-08T16:36:29.539Z\",\"isPartOf\":{\"@id\":\"https://docs.kataven.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kataven.ai/guides/manage-with-codex#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kataven.ai/guides/manage-with-codex#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Manage with AI\",\"item\":\"https://docs.kataven.ai/guides/ai-agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent\",\"item\":\"https://docs.kataven.ai/guides/manage-with-codex\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kataven.ai/guides/manage-with-codex#article\",\"headline\":\"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent\",\"name\":\"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent\",\"description\":\"Use OpenAI's Codex CLI to build voice agents, run outbound campaigns, and manage telephony. Install the Python SDK and let Codex write the code itself — no MCP needed.\",\"url\":\"https://docs.kataven.ai/guides/manage-with-codex\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kataven.ai/guides/manage-with-codex#webpage\"},\"dateModified\":\"2026-05-08T16:36:29.539Z\",\"keywords\":\"codex cli, codex kataven, openai codex voice, codex voice agent, codex python sdk, terminal ai agent\",\"publisher\":{\"@id\":\"https://docs.kataven.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kataven.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kataven\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kataven","nav":{"global":null,"anchors":[{"anchor":"Documentation","icon":"book-open","groups":[{"group":"Get Started","pages":[{"title":"Kataven docs — voice \u0026 chat AI agents you can deploy in minutes","sidebarTitle":"Introduction","href":"/introduction"},{"title":"Quickstart — list your Kataven agents in 5 lines of code","sidebarTitle":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"}]},{"group":"Concepts","pages":[{"title":"Agents","href":"/concepts/agents"},{"title":"Tools","href":"/concepts/tools"},{"title":"Playbooks \u0026 FAQs","href":"/concepts/playbooks-and-faqs"},{"title":"Telephony","href":"/concepts/telephony"},{"title":"Campaigns","href":"/concepts/campaigns"},{"title":"Embeddable widget","href":"/concepts/widget"},{"title":"Multi-tenancy","href":"/concepts/multi-tenancy"},{"title":"Rate limits","href":"/concepts/rate-limits"}]},{"group":"Guides","pages":[{"title":"Build your first AI voice agent — 10-minute tutorial","sidebarTitle":"Your first agent","href":"/guides/your-first-agent"},{"title":"Inbound calls — wire a phone number to an AI agent","sidebarTitle":"Inbound calls","href":"/guides/inbound-calls"},{"title":"Outbound calls — place AI voice calls programmatically","sidebarTitle":"Outbound calls","href":"/guides/outbound-call"},{"title":"Add a voice AI agent to your website — Kataven widget","sidebarTitle":"Add to your website","href":"/guides/embed-widget"}]},{"group":"Manage with AI","pages":[{"title":"Manage Kataven with AI — Claude, ChatGPT, Codex, Cursor","sidebarTitle":"Overview","href":"/guides/ai-agents"},{"title":"Manage Kataven with Claude Code — voice AI from the terminal","sidebarTitle":"Manage with Claude Code","href":"/guides/manage-with-claude-code"},{"title":"Manage Kataven with Claude Desktop — MCP integration","sidebarTitle":"Manage with Claude Desktop","href":"/guides/manage-with-claude-desktop"},{"title":"Manage Kataven with ChatGPT — MCP integration + OpenAI Agents SDK","sidebarTitle":"Manage with ChatGPT","description":"Drive Kataven from ChatGPT Desktop via MCP, or programmatically via the OpenAI Agents SDK. Build voice agents, run campaigns, and place calls from chat.","href":"/guides/manage-with-chatgpt"},{"title":"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent","sidebarTitle":"Manage with Codex","href":"/guides/manage-with-codex"}]},{"group":"MCP Server","pages":[{"title":"Kataven MCP server — manage voice AI agents from any AI app, no code","sidebarTitle":"Overview","description":"Install one piece of software and let Claude, ChatGPT, Cursor, Windsurf, Zed, VS Code, JetBrains, Warp, Goose, n8n, or Raycast run your Kataven account by chat. No API calls, no scripts.","href":"/sdks/mcp/overview"},{"title":"Install the Kataven MCP server — pip, API key, universal config","sidebarTitle":"Install","href":"/sdks/mcp/install"},{"group":"Clients","pages":[{"title":"Connect Kataven MCP to Claude Desktop","sidebarTitle":"Claude Desktop","href":"/sdks/mcp/clients/claude-desktop"},{"title":"Connect Kataven MCP to Cursor","sidebarTitle":"Cursor","href":"/sdks/mcp/clients/cursor"},{"title":"Connect Kataven MCP to Windsurf (Codeium)","sidebarTitle":"Windsurf","href":"/sdks/mcp/clients/windsurf"},{"title":"Connect Kataven MCP to Zed","sidebarTitle":"Zed","href":"/sdks/mcp/clients/zed"},{"title":"Connect Kataven MCP to VS Code (GitHub Copilot agent mode)","sidebarTitle":"VS Code","href":"/sdks/mcp/clients/vs-code"},{"title":"Connect Kataven MCP to JetBrains AI Assistant","sidebarTitle":"JetBrains","href":"/sdks/mcp/clients/jetbrains"},{"title":"Connect Kataven MCP to Warp Terminal","sidebarTitle":"Warp Terminal","href":"/sdks/mcp/clients/warp"},{"title":"Connect Kataven MCP to Goose","sidebarTitle":"Goose","href":"/sdks/mcp/clients/goose"},{"title":"Connect Kataven MCP to Raycast AI","sidebarTitle":"Raycast","href":"/sdks/mcp/clients/raycast"},{"title":"Connect Kataven MCP to ChatGPT (Desktop, web, mobile)","sidebarTitle":"ChatGPT","href":"/sdks/mcp/clients/chatgpt"},{"title":"Connect Kataven MCP to Claude.ai (web)","sidebarTitle":"Claude.ai (web)","href":"/sdks/mcp/clients/claude-web"},{"title":"Connect Kataven MCP to n8n","sidebarTitle":"n8n","href":"/sdks/mcp/clients/n8n"}]},{"title":"Expose Kataven MCP via a tunnel — for ChatGPT, Claude.ai web, n8n","sidebarTitle":"Tunneling","href":"/sdks/mcp/tunneling"},{"title":"Use the Kataven MCP server programmatically — Agents SDK, LangGraph, Agno","sidebarTitle":"Programmatic","href":"/sdks/mcp/programmatic"},{"title":"Kataven MCP — security, key scoping, blast radius","sidebarTitle":"Security","href":"/sdks/mcp/security"},{"title":"Kataven MCP — troubleshooting","sidebarTitle":"Troubleshooting","href":"/sdks/mcp/troubleshooting"}]}]},{"anchor":"API Reference","icon":"rectangle-terminal","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"anchor":"Python SDK","icon":"python","pages":[{"title":"Python SDK","href":"/sdks/python/overview"}]},{"anchor":"Node SDK","icon":"node-js","pages":[{"title":"Node SDK","href":"/sdks/node/overview"}]}]},"title":"Manage Kataven with Codex CLI — voice AI from OpenAI's terminal agent - Kataven","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}