From a0ee36129601165acc06c6cb6b2b0c0ebfaced4b Mon Sep 17 00:00:00 2001 From: Mike Date: Tue, 23 Dec 2025 15:52:29 -0500 Subject: [PATCH] feat: expose session_id in ClaudeAgentOptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add session_id field to ClaudeAgentOptions that maps to the CLI's --session-id flag, allowing server-side applications to control the session file name for deterministic session file paths. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../_internal/transport/subprocess_cli.py | 3 +++ src/claude_agent_sdk/types.py | 1 + tests/test_transport.py | 11 +++++++++++ 3 files changed, 15 insertions(+) diff --git a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py index a4882db1..f7eeb99c 100644 --- a/src/claude_agent_sdk/_internal/transport/subprocess_cli.py +++ b/src/claude_agent_sdk/_internal/transport/subprocess_cli.py @@ -233,6 +233,9 @@ def _build_command(self) -> list[str]: if self._options.resume: cmd.extend(["--resume", self._options.resume]) + if self._options.session_id: + cmd.extend(["--session-id", self._options.session_id]) + # Handle settings and sandbox: merge sandbox into settings if both are provided settings_value = self._build_settings_value() if settings_value: diff --git a/src/claude_agent_sdk/types.py b/src/claude_agent_sdk/types.py index 9c09345f..5de77139 100644 --- a/src/claude_agent_sdk/types.py +++ b/src/claude_agent_sdk/types.py @@ -622,6 +622,7 @@ class ClaudeAgentOptions: system_prompt: str | SystemPromptPreset | None = None mcp_servers: dict[str, McpServerConfig] | str | Path = field(default_factory=dict) permission_mode: PermissionMode | None = None + session_id: str | None = None continue_conversation: bool = False resume: str | None = None max_turns: int | None = None diff --git a/tests/test_transport.py b/tests/test_transport.py index fe9b6b22..369bb75c 100644 --- a/tests/test_transport.py +++ b/tests/test_transport.py @@ -193,6 +193,17 @@ def test_session_continuation(self): assert "--resume" in cmd assert "session-123" in cmd + def test_build_command_with_session_id(self): + """Test building CLI command with session_id option.""" + transport = SubprocessCLITransport( + prompt="test", + options=make_options(session_id="my-session-uuid"), + ) + + cmd = transport._build_command() + assert "--session-id" in cmd + assert "my-session-uuid" in cmd + def test_connect_close(self): """Test connect and close lifecycle."""