Manage Kataven with Claude Code — voice AI from the terminal
Use Anthropic’s Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.
Claude Code is Anthropic’s terminal coding agent. Because it has a shell, the cleanest way to manage Kataven is to install the Python SDK and let Claude write & run the calls itself. No MCP server required for this path.If you want to drive Kataven from chat-only Claude (Desktop, mobile, web), see Manage with Claude Desktop — that uses MCP.
Open hub.kataven.ai/settings → API Keys tab → Create API key.Suggested name: claude-code-local. Pick an expiry (90 days is a good default for a workstation key). Click Create and copy the sk_live_… token — it only displays once.
Add it to your ~/.zshrc / ~/.bashrc so every Claude Code session picks it up. The SDK reads KATAVEN_API_KEY automatically — Claude doesn’t need to know the value.
sk_live_ keys self-identify the account in their prefix, so KATAVEN_ACCOUNT_ID is not required. Only set it if you’re testing with a Zitadel JWT.
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.
Claude reads the Python SDK overview, writes a script, runs it, and reports back. You can ask follow-ups in plain English.
“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, but pause it immediately so I can review before going live.”
“Take the prompt from agent front-desk-v1 and clone it into a new agent 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.”
Claude Code can spawn processes (python -c "…", write & run files). Anything the SDK can do, Claude can do directly. MCP is only useful when the AI tool can’t spawn processes — Claude Desktop, ChatGPT Desktop, etc. See Manage with Claude Desktop for that flow.
We strongly recommend running Claude Code with the 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. Claude Code’s --dangerously-skip-permissions flag skips this gate — only enable it on a disposable account.For long-running automation where you don’t want to approve each call, either:
401 Unauthorized — KATAVEN_API_KEY isn’t visible to the shell Claude Code is using. Run echo $KATAVEN_API_KEY from inside Claude Code before retrying.403 Forbidden on POST /api/v1/api-keys or similar — sk_live_ keys can’t manage other keys, mint integrations, or set cost caps. Those routes require a Hub UI session. See Authentication § Mint, list, revoke API keys.429 Too Many Requests / “cost cap exceeded” — your account hit a per-tenant outbound cap. View limits at hub.kataven.ai/settings → Limits tab.Claude pauses and asks before each call — that’s the default; toggle in your Claude Code settings if you want broader auto-approve.
Python SDK reference — what Claude is reading when it figures out what’s possible.
Your first agent — the same end-to-end flow if you want to do it yourself.
{"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-claude-code","slug":"/guides/manage-with-claude-code","pageMetadata":{"title":"Manage Kataven with Claude Code — voice AI from the terminal","sidebarTitle":"Manage with Claude Code","description":"Use Anthropic's Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.","keywords":["claude code","claude code kataven","claude code voice ai","anthropic claude code","voice agent automation","ai voice agent cli"],"href":"/guides/manage-with-claude-code"},"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 Anthropic’s Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\"\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://www.anthropic.com/claude-code`,children:`Claude Code`}),` is Anthropic’s terminal coding agent. Because it has a shell, the cleanest way to manage Kataven is to install the Python SDK and let Claude write \u0026 run 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 Claude (Desktop, mobile, web), see `,_jsx(_components.a,{href:`/guides/manage-with-claude-desktop`,children:`Manage with Claude Desktop`}),` — 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:[`Open `,_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:`claude-code-local`}),`. Pick an expiry (90 days is a good default for a workstation key). Click `,_jsx(_components.strong,{children:`Create`}),` and `,_jsxs(_components.strong,{children:[`copy the `,_jsx(_components.code,{children:`sk_live_…`}),` token`]}),` — it only displays 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`,_jsx(_components.p,{children:`(SDK targets Python 3.10+. The MCP server isn’t needed for Claude Code.)`}),`\n`,_jsx(Heading,{level:`2`,id:`3-set-the-env-var-claude-code-will-inherit`,children:`3. Set the env var Claude Code 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 your `,_jsx(_components.code,{children:`~/.zshrc`}),` / `,_jsx(_components.code,{children:`~/.bashrc`}),` so every Claude Code session picks it up. The SDK reads `,_jsx(_components.code,{children:`KATAVEN_API_KEY`}),` automatically — Claude doesn’t need to know the value.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`sk_live_`}),` keys self-identify the account in their prefix, so `,_jsx(_components.code,{children:`KATAVEN_ACCOUNT_ID`}),` is `,_jsx(_components.strong,{children:`not`}),` required. Only set it if you’re testing with a Zitadel JWT.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`4-launch-claude-code-and-ask`,children:`4. Launch Claude Code 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:`claude`})}),`\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:[`Claude reads the `,_jsx(_components.a,{href:`/sdks/python/overview`,children:`Python SDK overview`}),`, writes a script, runs it, and reports back. You can ask follow-ups in plain English.`]}),`\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, but 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 a new agent `,_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-claude-did`,children:`Verify what Claude did`}),`\n`,_jsx(_components.p,{children:`After Claude runs, sanity-check in the dashboard. Each link below opens the exact page where the change is visible:`}),`\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 created/edited`}),_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:`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`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Phone numbers wired up`}),_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 conversation (after a test call)`}),_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 metrics`}),_jsx(_components.td,{children:_jsx(_components.a,{href:`https://hub.kataven.ai/campaigns`,children:`hub.kataven.ai/campaigns`})})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`why-no-mcp-for-claude-code`,children:`Why no MCP for Claude Code?`}),`\n`,_jsxs(_components.p,{children:[`Claude Code can spawn processes (`,_jsx(_components.code,{children:`python -c \"…\"`}),`, write \u0026 run files). Anything the SDK can do, Claude can do directly. MCP is only useful when the AI tool `,_jsx(_components.strong,{children:`can’t`}),` spawn processes — Claude Desktop, ChatGPT Desktop, etc. See `,_jsx(_components.a,{href:`/guides/manage-with-claude-desktop`,children:`Manage with Claude Desktop`}),` for that flow.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sandbox-/-approval-mode`,children:`Sandbox / approval mode`}),`\n`,_jsxs(_components.p,{children:[`We strongly recommend running Claude Code with the 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. Claude Code’s `,_jsx(_components.code,{children:`--dangerously-skip-permissions`}),` flag skips this gate — only enable it on a disposable account.`]}),`\n`,_jsx(_components.p,{children:`For long-running automation where you don’t want to approve each call, either:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Mint a `,_jsx(_components.a,{href:`/authentication#mint-list-revoke-api-keys`,children:`scoped key`}),` for the specific account, OR`]}),`\n`,_jsxs(_components.li,{children:[`Use the `,_jsx(_components.a,{href:`/guides/manage-with-claude-desktop`,children:`MCP path`}),` with read-only tools surfaced and write tools omitted.`]}),`\n`]}),`\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 visible to the shell Claude Code is using. Run `,_jsx(_components.code,{children:`echo $KATAVEN_API_KEY`}),` from inside Claude Code before retrying.`]}),`\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 similar — `,_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. See `,_jsx(_components.a,{href:`/authentication`,children:`Authentication § Mint, list, revoke API keys`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`429 Too Many Requests`}),` / “cost cap exceeded”`]}),` — your account hit a per-tenant outbound cap. View limits at `,_jsx(_components.a,{href:`https://hub.kataven.ai/settings`,children:`hub.kataven.ai/settings`}),` → `,_jsx(_components.strong,{children:`Limits`}),` tab.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Claude pauses and asks before each call`}),` — that’s the default; toggle in your Claude Code settings if you want broader auto-approve.`]}),`\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-claude-desktop`,children:`Manage with Claude Desktop`}),` — the MCP path for chat-only Claude.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/sdks/python/overview`,children:`Python SDK reference`}),` — what Claude is reading when it figures out what’s possible.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/your-first-agent`,children:`Your first agent`}),` — the same end-to-end flow if you want to do it yourself.`]}),`\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 Claude Code — voice AI from the terminal","sidebarTitle":"Manage with Claude Code","description":"Use Anthropic's Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.","keywords":["claude code","claude code kataven","claude code voice ai","anthropic claude code","voice agent automation","ai voice agent cli"],"href":"/guides/manage-with-claude-code"}}},"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 Claude Code will inherit","slug":"3-set-the-env-var-claude-code-will-inherit","depth":2,"children":[]},{"title":"4. Launch Claude Code and ask","slug":"4-launch-claude-code-and-ask","depth":2,"children":[]},{"title":"Prompts that work well","slug":"prompts-that-work-well","depth":2,"children":[]},{"title":"Verify what Claude did","slug":"verify-what-claude-did","depth":2,"children":[]},{"title":"Why no MCP for Claude Code?","slug":"why-no-mcp-for-claude-code","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 Claude Code — voice AI from the terminal - Kataven","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-08T16:36:29.543Z","originalFileLocation":"guides/manage-with-claude-code.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 Anthropic\u0026#x27;s Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\">\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 Claude Code — voice AI from the terminal - Kataven\">\u003cmeta data-mint-head property=\"og:description\" content=\"Use Anthropic\u0026#x27;s Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\">\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-claude-code\">\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+Claude+Code+%E2%80%94+voice+AI+from+the+terminal\u0026amp;description=Use+Anthropic%27s+Claude+Code+CLI+to+create+voice+agents%2C+configure+phone+numbers%2C+and+run+outbound+campaigns.+Claude+writes+the+Python%3B+you+watch+it+run.\u0026amp;theme=0ed538260c0fcf374bac1c4c\u0026amp;signature=f306d79c69310107a9e8a5a65a8ea0519452522cfdf1c1c68a8dd3ca10f644ab\">\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 Claude Code — voice AI from the terminal - Kataven\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Use Anthropic\u0026#x27;s Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\">\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+Claude+Code+%E2%80%94+voice+AI+from+the+terminal\u0026amp;description=Use+Anthropic%27s+Claude+Code+CLI+to+create+voice+agents%2C+configure+phone+numbers%2C+and+run+outbound+campaigns.+Claude+writes+the+Python%3B+you+watch+it+run.\u0026amp;theme=0ed538260c0fcf374bac1c4c\u0026amp;signature=f306d79c69310107a9e8a5a65a8ea0519452522cfdf1c1c68a8dd3ca10f644ab\">\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-claude-code\">\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-claude-code.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-claude-code#webpage\",\"url\":\"https://docs.kataven.ai/guides/manage-with-claude-code\",\"name\":\"Manage Kataven with Claude Code — voice AI from the terminal\",\"description\":\"Use Anthropic's Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\",\"dateModified\":\"2026-05-08T16:36:29.543Z\",\"isPartOf\":{\"@id\":\"https://docs.kataven.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kataven.ai/guides/manage-with-claude-code#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kataven.ai/guides/manage-with-claude-code#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 Claude Code — voice AI from the terminal\",\"item\":\"https://docs.kataven.ai/guides/manage-with-claude-code\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kataven.ai/guides/manage-with-claude-code#article\",\"headline\":\"Manage Kataven with Claude Code — voice AI from the terminal\",\"name\":\"Manage Kataven with Claude Code — voice AI from the terminal\",\"description\":\"Use Anthropic's Claude Code CLI to create voice agents, configure phone numbers, and run outbound campaigns. Claude writes the Python; you watch it run.\",\"url\":\"https://docs.kataven.ai/guides/manage-with-claude-code\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kataven.ai/guides/manage-with-claude-code#webpage\"},\"dateModified\":\"2026-05-08T16:36:29.543Z\",\"keywords\":\"claude code, claude code kataven, claude code voice ai, anthropic claude code, voice agent automation, ai voice agent cli\",\"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","description":"Drive your Kataven account from Claude Code, Claude Desktop, ChatGPT, Codex, Cursor, or any other AI tool. Pick the right integration path — SDK or MCP — for your tool, then jump to the focused guide.","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","description":"Wire the Kataven MCP server into Claude Desktop or Cursor and let Claude manage voice agents, run campaigns, and place test calls — all from chat.","href":"/guides/manage-with-claude-desktop"},{"title":"Manage Kataven with ChatGPT — MCP integration + OpenAI Agents SDK","sidebarTitle":"Manage with ChatGPT","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","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 Claude Code — voice AI from the terminal - Kataven","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":[],"chunks":[]}