name: Claude Agent SDK (Python) slug: claude-sdk-python category: agent-framework language: python logo: /logos/claude-sdk-python.svg description: >- CopilotKit integration with Claude Agent SDK (Python). Supports the full range of CopilotKit features including generative UI, shared state, human-in-the-loop, sub-agents, and streaming. partner_docs: null repo: https://github.com/CopilotKit/CopilotKit/tree/main/showcase/integrations/claude-sdk-python copilotkit_version: 2.0.0 deployed: true docs_mode: generated sort_order: 70 generative_ui: - constrained-explicit - a2ui-fixed-schema - a2ui-dynamic-schema interaction_modalities: - sidebar - embedded - chat not_supported_features: # QUARANTINED pending a @copilotkit/react-core release. gen-ui-interrupt / # interrupt-headless fail turn-2 on a useInterrupt/useHeadlessInterrupt # RESUME-PATH hook bug in @copilotkit/react-core/v2: backend resumes + streams # (HTTP 200) but the frontend never appends the confirmation assistant bubble, # so the harness DOM settle-check times out. Fix is a published-package change # (out of scope here); honestly marked not-supported (skipped-incapable, not # green, not red) rather than a regression. Demos remain wired below. - gen-ui-interrupt - interrupt-headless features: - beautiful-chat - cli-start - agentic-chat - prebuilt-sidebar - prebuilt-popup - chat-slots - chat-customization-css - headless-simple - headless-complete - reasoning-custom - reasoning-default - frontend-tools - frontend-tools-async - gen-ui-tool-based - hitl-in-chat - hitl-in-app - declarative-gen-ui - a2ui-fixed-schema - mcp-apps - gen-ui-agent - tool-rendering-default-catchall - tool-rendering-custom-catchall - tool-rendering - tool-rendering-reasoning-chain - shared-state-read - shared-state-read-write - shared-state-streaming - readonly-state-agent-context - subagents - multimodal - auth - declarative-hashbrown - declarative-json-render - open-gen-ui - open-gen-ui-advanced - voice - agent-config interrupt_pattern: promise-based agent_config_pattern: shared-state a2ui_pattern: schema-loading auth_pattern: runtime-onrequest demos: - id: cli-start name: CLI Start Command description: Copy-paste command to clone the canonical starter tags: - chat-ui command: "npx copilotkit@latest init --framework claude-sdk-python" - id: agentic-chat name: Agentic Chat description: Natural conversation with frontend tool execution tags: - chat-ui route: /demos/agentic-chat animated_preview_url: - id: tool-rendering name: Tool Rendering description: Backend agent tools rendered as UI components tags: - agent-capabilities route: /demos/tool-rendering animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/tool-rendering/page.tsx - src/app/api/copilotkit/route.ts - id: gen-ui-agent name: Agentic Generative UI description: Long-running agent tasks with generated UI tags: - generative-ui route: /demos/gen-ui-agent animated_preview_url: - id: shared-state-streaming name: State Streaming description: Per-token state delta streaming from agent to UI tags: - agent-state route: /demos/shared-state-streaming animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/shared-state-streaming/page.tsx - src/app/api/copilotkit/route.ts - id: shared-state-read-write name: Shared State (Read + Write) description: Bidirectional agent state — UI writes preferences, agent writes notes back tags: - agent-state route: /demos/shared-state-read-write animated_preview_url: highlight: - src/agents/shared_state_read_write_agent.py - src/app/demos/shared-state-read-write/page.tsx - src/app/demos/shared-state-read-write/preferences-card.tsx - src/app/demos/shared-state-read-write/notes-card.tsx - src/app/api/copilotkit/route.ts - id: shared-state-read name: Shared State (Read) description: Agent reads frontend-provided state as context tags: - agent-state route: /demos/shared-state-read animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/shared-state-read/page.tsx - src/app/demos/shared-state-read/recipe-card.tsx - src/app/api/copilotkit/route.ts - id: subagents name: Sub-Agents description: Multiple agents with visible task delegation tags: - multi-agent route: /demos/subagents animated_preview_url: highlight: - src/agents/subagents_agent.py - src/app/demos/subagents/page.tsx - src/app/demos/subagents/delegation-log.tsx - src/app/api/copilotkit/route.ts - id: prebuilt-sidebar name: "Pre-Built: Sidebar" description: Docked sidebar chat via tags: - chat-ui route: /demos/prebuilt-sidebar animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/prebuilt-sidebar/page.tsx - src/app/api/copilotkit/route.ts - id: prebuilt-popup name: "Pre-Built: Popup" description: Floating popup chat via tags: - chat-ui route: /demos/prebuilt-popup animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/prebuilt-popup/page.tsx - src/app/api/copilotkit/route.ts - id: chat-slots name: Chat Customization (Slots) description: Customize CopilotChat via its slot system tags: - chat-ui route: /demos/chat-slots animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/chat-slots/page.tsx - src/app/demos/chat-slots/slot-wrappers.tsx - src/app/api/copilotkit/route.ts - id: chat-customization-css name: Chat Customization (CSS) description: Default CopilotChat re-themed via CopilotKitCSSProperties tags: - chat-ui route: /demos/chat-customization-css animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/chat-customization-css/page.tsx - src/app/demos/chat-customization-css/theme.css - src/app/api/copilotkit/route.ts - id: headless-simple name: Headless Chat (Simple) description: Minimal custom chat surface built on useAgent tags: - chat-ui route: /demos/headless-simple animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/headless-simple/page.tsx - src/app/api/copilotkit/route.ts - id: headless-complete name: Headless Chat (Complete) description: Full chat implementation built from scratch on useAgent tags: - chat-ui route: /demos/headless-complete animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/headless-complete/page.tsx - src/app/demos/headless-complete/chat/message-list.tsx - src/app/demos/headless-complete/hooks/use-tool-renderers.tsx - src/app/api/copilotkit/route.ts - id: frontend-tools name: Frontend Tools (In-App Actions) description: Agent invokes client-side handlers registered with useFrontendTool tags: - interactivity route: /demos/frontend-tools animated_preview_url: highlight: - src/agents/frontend_tools.py - src/app/demos/frontend-tools/page.tsx - src/app/api/copilotkit/route.ts - id: frontend-tools-async name: Frontend Tools (Async) description: useFrontendTool with an async handler — agent awaits a client-side async operation (simulated notes DB query) and uses the returned result tags: - interactivity route: /demos/frontend-tools-async animated_preview_url: highlight: - src/agents/frontend_tools_async.py - src/app/demos/frontend-tools-async/page.tsx - src/app/demos/frontend-tools-async/notes-card.tsx - src/app/api/copilotkit/route.ts - id: hitl-in-app name: In-App Human in the Loop (Frontend Tools + async HITL) description: Agent requests approval via useFrontendTool with an async handler; the approval UI pops up as an app-level modal OUTSIDE the chat, and a completion callback resolves the pending tool Promise with the user's decision tags: - interactivity route: /demos/hitl-in-app animated_preview_url: highlight: - src/agents/hitl_in_app.py - src/app/demos/hitl-in-app/page.tsx - src/app/demos/hitl-in-app/approval-dialog.tsx - src/app/api/copilotkit/route.ts - id: readonly-state-agent-context name: Readonly State (Agent Context) description: Frontend provides read-only context to the agent via useAgentContext tags: - agent-state route: /demos/readonly-state-agent-context animated_preview_url: highlight: - src/agents/readonly_state_agent_context.py - src/app/demos/readonly-state-agent-context/page.tsx - src/app/api/copilotkit/route.ts - id: tool-rendering-default-catchall name: Tool Rendering (Default Catch-all) description: Out-of-the-box tool rendering — backend defines the tools; the frontend adds zero custom renderers and relies on CopilotKit's built-in default UI tags: - generative-ui route: /demos/tool-rendering-default-catchall animated_preview_url: highlight: - src/app/demos/tool-rendering-default-catchall/page.tsx - src/agents/agent.py - src/app/api/copilotkit/route.ts - id: tool-rendering-custom-catchall name: Tool Rendering (Custom Catch-all) description: Single branded wildcard renderer via useDefaultRenderTool — the same app-designed card paints every tool call tags: - generative-ui route: /demos/tool-rendering-custom-catchall animated_preview_url: highlight: - src/app/demos/tool-rendering-custom-catchall/page.tsx - src/app/demos/tool-rendering-custom-catchall/custom-catchall-renderer.tsx - src/agents/agent.py - src/app/api/copilotkit/route.ts - id: open-gen-ui name: Fully Open-Ended Generative UI description: Agent generates UI from an arbitrary component library tags: - generative-ui route: /demos/open-gen-ui animated_preview_url: highlight: - src/agents/open_gen_ui_agent.py - src/app/demos/open-gen-ui/page.tsx - src/app/api/copilotkit-ogui/route.ts - id: open-gen-ui-advanced name: "Open-Ended Gen UI (Advanced: with frontend function calling)" description: Agent-authored UI that can invoke frontend sandbox functions from inside the iframe tags: - generative-ui route: /demos/open-gen-ui-advanced animated_preview_url: highlight: - src/agents/open_gen_ui_advanced_agent.py - src/app/demos/open-gen-ui-advanced/page.tsx - src/app/demos/open-gen-ui-advanced/sandbox-functions.ts - src/app/demos/open-gen-ui-advanced/suggestions.ts - src/app/api/copilotkit-ogui/route.ts - id: declarative-json-render name: "Declarative UI: json-render" description: Declarative generative UI via @json-render/react — Claude emits a flat element-tree spec the renderer consumes tags: - generative-ui route: /demos/declarative-json-render animated_preview_url: highlight: - src/agents/byoc_json_render_agent.py - src/app/demos/declarative-json-render/page.tsx - src/app/demos/declarative-json-render/json-render-renderer.tsx - src/app/demos/declarative-json-render/registry.tsx - src/app/demos/declarative-json-render/catalog.ts - src/app/api/copilotkit-declarative-json-render/route.ts - id: declarative-hashbrown name: "Declarative UI: Hashbrown" description: Declarative streaming UI via @hashbrownai/react useJsonParser — Claude emits a catalog-constrained UI envelope tags: - generative-ui route: /demos/declarative-hashbrown animated_preview_url: highlight: - src/agents/byoc_hashbrown_agent.py - src/app/demos/declarative-hashbrown/page.tsx - src/app/demos/declarative-hashbrown/hashbrown-renderer.tsx - src/app/api/copilotkit-declarative-hashbrown/route.ts - id: multimodal name: Multimodal Attachments description: Image + PDF attachments routed through Claude's native vision + pypdf text flattening tags: - interactivity route: /demos/multimodal animated_preview_url: highlight: - src/agents/multimodal_agent.py - src/app/demos/multimodal/page.tsx - src/app/demos/multimodal/sample-attachment-buttons.tsx - src/app/api/copilotkit-multimodal/route.ts - id: voice name: Voice Input description: Audio transcription wired on a per-demo runtime with a guarded OpenAI Whisper service that maps missing keys to 401 tags: - chat-ui route: /demos/voice animated_preview_url: highlight: - src/app/demos/voice/page.tsx - src/app/demos/voice/sample-audio-button.tsx - src/app/api/copilotkit-voice/[[...slug]]/route.ts - id: agent-config name: Agent Config Object description: Forwarded props (tone / expertise / responseLength) flow from the provider into the agent's system prompt via `forwardedProps.config.configurable.properties` tags: - agent-capabilities route: /demos/agent-config animated_preview_url: highlight: - src/agents/agent_config_agent.py - src/app/demos/agent-config/page.tsx - src/app/demos/agent-config/config-card.tsx - src/app/demos/agent-config/use-agent-config.ts - src/app/api/copilotkit-agent-config/route.ts - id: reasoning-custom name: Agentic Chat (Reasoning) description: Visible reasoning / thinking chain rendered via a custom messageView slot tags: - chat-ui route: /demos/reasoning-custom animated_preview_url: highlight: - src/agents/reasoning_agent.py - src/app/demos/reasoning-custom/page.tsx - src/app/demos/reasoning-custom/reasoning-block.tsx - src/app/api/copilotkit/route.ts - id: reasoning-default name: Reasoning (Default Render) description: Reasoning rendered via CopilotKit's built-in collapsible card with zero custom config tags: - chat-ui route: /demos/reasoning-default animated_preview_url: highlight: - src/agents/reasoning_agent.py - src/app/demos/reasoning-default/page.tsx - src/app/api/copilotkit/route.ts - id: tool-rendering-reasoning-chain name: Tool Rendering (Reasoning Chain) description: Sequential tool calls combined with visible reasoning steps tags: - generative-ui route: /demos/tool-rendering-reasoning-chain animated_preview_url: highlight: - src/agents/tool_rendering_reasoning_chain_agent.py - src/app/demos/tool-rendering-reasoning-chain/page.tsx - src/app/demos/tool-rendering-reasoning-chain/weather-card.tsx - src/app/demos/tool-rendering-reasoning-chain/flight-list-card.tsx - src/app/demos/tool-rendering-reasoning-chain/custom-catchall-renderer.tsx - src/app/demos/tool-rendering-reasoning-chain/reasoning-block.tsx - src/app/api/copilotkit/route.ts - id: auth name: Authentication description: Framework-native request auth via the V2 runtime's `onRequest` hook; missing bearer token returns 401 tags: - agent-capabilities route: /demos/auth animated_preview_url: highlight: - src/app/demos/auth/page.tsx - src/app/demos/auth/auth-banner.tsx - src/app/demos/auth/use-demo-auth.ts - src/app/demos/auth/demo-token.ts - src/app/api/copilotkit-auth/[[...slug]]/route.ts - id: mcp-apps name: MCP Apps description: MCP server-driven UI via activity renderers — the agent calls a tool on a remote MCP server (Excalidraw) and the runtime middleware renders the returned UI resource as a sandboxed iframe inline in the chat tags: - generative-ui route: /demos/mcp-apps animated_preview_url: highlight: - src/agents/mcp_apps_agent.py - src/app/demos/mcp-apps/page.tsx - src/app/api/copilotkit-mcp-apps/route.ts - id: beautiful-chat name: Beautiful Chat description: Polished brand-themed chat surface over the Claude Agent SDK backend with seeded suggestion pills and a glanceable decorative side panel — pure frontend dressing, no extra runtime config tags: - chat-ui route: /demos/beautiful-chat animated_preview_url: highlight: - src/app/demos/beautiful-chat/page.tsx - src/app/api/copilotkit/route.ts - id: gen-ui-tool-based name: Tool-Based Generative UI description: Agent uses tools to trigger UI generation (haiku generator via useFrontendTool + useRenderTool) tags: - generative-ui route: /demos/gen-ui-tool-based animated_preview_url: highlight: - src/agents/agent.py - src/app/demos/gen-ui-tool-based/page.tsx - src/app/api/copilotkit/route.ts - id: hitl-in-chat name: In-Chat HITL (useHumanInTheLoop — ergonomic API) description: Interactive approval/decision surface rendered inline in the chat via the high-level `useHumanInTheLoop` hook tags: - interactivity route: /demos/hitl-in-chat animated_preview_url: highlight: - src/agents/hitl_in_chat_agent.py - src/app/demos/hitl-in-chat/page.tsx - src/app/demos/hitl-in-chat/time-picker-card.tsx - src/app/api/copilotkit/route.ts - id: gen-ui-interrupt name: In-Chat HITL (useInterrupt — low-level primitive) description: Interactive time-picker component rendered inline in the chat via useFrontendTool with an async handler — the Promise resolves only when the user picks a slot or cancels tags: - generative-ui route: /demos/gen-ui-interrupt animated_preview_url: highlight: - src/agents/interrupt_agent.py - src/app/demos/gen-ui-interrupt/page.tsx - src/app/demos/gen-ui-interrupt/_components/time-picker-card.tsx - src/app/api/copilotkit/route.ts - id: interrupt-headless name: Headless Interrupt (testing) description: Resolve interrupts from a plain button grid — no chat, no useInterrupt render prop; the time-picker popup appears in the app surface outside the chat tags: - interactivity route: /demos/interrupt-headless animated_preview_url: highlight: - src/agents/interrupt_agent.py - src/app/demos/interrupt-headless/page.tsx - src/app/api/copilotkit/route.ts - id: declarative-gen-ui name: Declarative Generative UI (A2UI) description: Canonical A2UI BYOC — custom catalog (Card/StatusBadge/Metric/InfoRow/PrimaryButton/PieChart/BarChart) wired via a2ui.catalog on the provider; backend agent owns the `generate_a2ui` tool with injectA2UITool false tags: - generative-ui route: /demos/declarative-gen-ui animated_preview_url: highlight: - src/agents/a2ui_dynamic.py - src/app/demos/declarative-gen-ui/page.tsx - src/app/demos/declarative-gen-ui/a2ui/catalog.ts - src/app/demos/declarative-gen-ui/a2ui/definitions.ts - src/app/demos/declarative-gen-ui/a2ui/renderers.tsx - src/app/api/copilotkit-declarative-gen-ui/route.ts - id: a2ui-fixed-schema name: Declarative Generative UI (A2UI — Fixed Schema) description: A2UI rendering against a known client-side schema; the backend ships flight_schema.json and only streams data via display_flight tags: - generative-ui route: /demos/a2ui-fixed-schema animated_preview_url: highlight: - src/agents/a2ui_fixed.py - src/agents/a2ui_schemas/flight_schema.json - src/app/demos/a2ui-fixed-schema/page.tsx - src/app/demos/a2ui-fixed-schema/a2ui/catalog.ts - src/app/api/copilotkit-a2ui-fixed-schema/route.ts