Skip to content

Python: [Feature]: Add missing Claude Agent SDK options (plugins, setting_sources, thinking, effort) #4423

@droideronline

Description

@droideronline

Description

The ClaudeAgentOptions in agent_framework_claude is missing several options that the upstream Claude Agent SDK (claude-agent-sdk) already supports. These are clean passthrough options that don't conflict with any Agent Framework abstractions — they simply aren't exposed yet.

Missing options that make sense to add

Option Purpose
plugins Load Claude Code plugins programmatically via SdkPluginConfig. Lets users extend Claude with custom commands and capabilities.
setting_sources Control which .claude settings files are loaded ("user", "project", "local"). Important for controlling Claude behavior across environments.
thinking Modern extended thinking configuration (ThinkingConfigAdaptive, ThinkingConfigEnabled, ThinkingConfigDisabled). Supersedes the already-exposed max_thinking_tokens.
effort Control thinking depth ("low", "medium", "high", "max"). Simple config for cost/quality tradeoffs.

Why these and not others?

The SDK has additional options (continue_conversation, resume, fork_session, include_partial_messages) that were intentionally not included because:

  • Session management (continue_conversation, resume, fork_session) is handled by the Agent Framework's AgentSession abstraction — exposing SDK-level session controls would bypass and conflict with it.
  • include_partial_messages is already hardcoded to True internally for streaming support.

How it works

All four options are clean passthroughs. The existing _prepare_client_options method already forwards all default_options keys to the SDK's ClaudeAgentOptions dataclass via a generic loop, so no additional wiring is needed — just declaring the fields in the Agent Framework's ClaudeAgentOptions TypedDict is sufficient.

Code Sample

from agent_framework_claude import ClaudeAgent

async with ClaudeAgent(
    instructions="You are a helpful assistant.",
    default_options={
        "plugins": [{"type": "local", "path": "/path/to/my-plugin"}],
        "setting_sources": ["project"],
        "thinking": {"type": "adaptive"},
        "effort": "high",
    },
) as agent:
    response = await agent.run("Hello!")

Language/SDK

Python

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions