From 925c3f7d0076dd8897b5ffbcd509a6b1935db788 Mon Sep 17 00:00:00 2001 From: Andrew Barnes Date: Sun, 8 Mar 2026 11:35:50 -0400 Subject: [PATCH] fix: accept dict as options in query() and ClaudeSDKClient Passing a plain dict as options raises AttributeError because the code accesses dataclass attributes on it. Coerce dicts to ClaudeAgentOptions via **unpacking so both entry points accept the same input shapes. Fixes #446 --- src/claude_agent_sdk/client.py | 4 +++- src/claude_agent_sdk/query.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/claude_agent_sdk/client.py b/src/claude_agent_sdk/client.py index fc7b6754..7af8f47a 100644 --- a/src/claude_agent_sdk/client.py +++ b/src/claude_agent_sdk/client.py @@ -61,12 +61,14 @@ class ClaudeSDKClient: def __init__( self, - options: ClaudeAgentOptions | None = None, + options: ClaudeAgentOptions | dict[str, Any] | None = None, transport: Transport | None = None, ): """Initialize Claude SDK client.""" if options is None: options = ClaudeAgentOptions() + elif isinstance(options, dict): + options = ClaudeAgentOptions(**options) self.options = options self._custom_transport = transport self._transport: Transport | None = None diff --git a/src/claude_agent_sdk/query.py b/src/claude_agent_sdk/query.py index 98ed0c1c..b7923a7c 100644 --- a/src/claude_agent_sdk/query.py +++ b/src/claude_agent_sdk/query.py @@ -12,7 +12,7 @@ async def query( *, prompt: str | AsyncIterable[dict[str, Any]], - options: ClaudeAgentOptions | None = None, + options: ClaudeAgentOptions | dict[str, Any] | None = None, transport: Transport | None = None, ) -> AsyncIterator[Message]: """ @@ -115,6 +115,8 @@ class MyCustomTransport(Transport): """ if options is None: options = ClaudeAgentOptions() + elif isinstance(options, dict): + options = ClaudeAgentOptions(**options) os.environ["CLAUDE_CODE_ENTRYPOINT"] = "sdk-py"