diff --git a/cookbooks/codex-coding/codex_agent.py b/cookbooks/codex-coding/codex_agent.py
index aa3aaa418..ce489cb94 100644
--- a/cookbooks/codex-coding/codex_agent.py
+++ b/cookbooks/codex-coding/codex_agent.py
@@ -37,6 +37,7 @@
"gpt-5.1",
"gpt-5.3-codex",
"gpt-5.4",
+ "gpt-5.6",
}
PROMPT_TEMPLATE = """You are a skilled software developer. Complete the following task:
diff --git a/docs/changelog.mdx b/docs/changelog.mdx
index 04625fbca..7105e9a4d 100644
--- a/docs/changelog.mdx
+++ b/docs/changelog.mdx
@@ -3,6 +3,17 @@ title: "Changelog"
description: "Product updates and release notes for the HUD SDK and platform, covering new features, CLI commands, integrations, and UI changes by release date."
---
+
+## GPT-5.6 Support
+
+- **GPT-5.6 family** — `gpt-5.6` (Sol), `gpt-5.6-terra`, and `gpt-5.6-luna` are available through the
+ HUD gateway and `create_agent`. `OpenAIAgent` now defaults to `gpt-5.6`.
+- **Reasoning controls** — GPT-5.6 reasoning passes through `OpenAIConfig.reasoning` unchanged: effort
+ levels `none` through `xhigh` and `max`, and `mode` (`standard` or `pro`).
+- **OpenAI SDK floor** — the SDK now requires `openai>=2.45.0` (Responses API function-call outputs use
+ the current content-item types).
+
+
## Models, Tasksets, Templates & Sharing
diff --git a/docs/v6/reference/agents.mdx b/docs/v6/reference/agents.mdx
index 1f32b2961..28339d989 100644
--- a/docs/v6/reference/agents.mdx
+++ b/docs/v6/reference/agents.mdx
@@ -56,7 +56,7 @@ agent = ClaudeAgent(ClaudeConfig(model="claude-sonnet-4-5", max_steps=30))
| Agent | Config | Default model |
|-------|--------|---------------|
| `ClaudeAgent` | `ClaudeConfig` | `claude-sonnet-4-6` |
-| `OpenAIAgent` | `OpenAIConfig` | `gpt-5.5` |
+| `OpenAIAgent` | `OpenAIConfig` | `gpt-5.6` |
| `GeminiAgent` | `GeminiConfig` | `gemini-3-pro-preview` |
| `OpenAIChatAgent` | `OpenAIChatConfig` | `gpt-5.4-mini` |
| `ClaudeSDKAgent` | `ClaudeSDKConfig` | `claude-sonnet-4-6` |
diff --git a/hud/agents/openai/tools/base.py b/hud/agents/openai/tools/base.py
index 734c0a6cb..9f7c912a6 100644
--- a/hud/agents/openai/tools/base.py
+++ b/hud/agents/openai/tools/base.py
@@ -12,7 +12,6 @@
ResponseInputFileContentParam,
ResponseInputImageContentParam,
ResponseInputTextContentParam,
- ResponseInputTextParam,
)
from openai.types.responses.response_input_param import FunctionCallOutput, ResponseInputItemParam
@@ -76,7 +75,7 @@ def format_openai_result(call: MCPToolCall, result: MCPToolResult) -> ResponseIn
logger.warning("Unknown content block type: %s", type(block))
if not output_items:
- output_items.append(ResponseInputTextParam(type="input_text", text=""))
+ output_items.append(ResponseInputTextContentParam(type="input_text", text=""))
return cast(
"ResponseInputItemParam",
diff --git a/hud/agents/tests/test_openai_agent.py b/hud/agents/tests/test_openai_agent.py
index b7dd88297..e3d9e4503 100644
--- a/hud/agents/tests/test_openai_agent.py
+++ b/hud/agents/tests/test_openai_agent.py
@@ -11,7 +11,9 @@
from openai.types.responses import ResponseOutputText
from hud.agents.openai.agent import OpenAIAgent, OpenAIRunState
+from hud.agents.openai.tools.base import format_openai_result
from hud.agents.types import OpenAIConfig
+from hud.types import MCPToolCall, MCPToolResult
class FakeResponses:
@@ -39,6 +41,17 @@ def test_format_message_shapes_user_text() -> None:
assert msg["role"] == "user"
+def test_format_openai_result_empty_output_emits_one_text_item() -> None:
+ # The Responses API rejects a function_call_output with an empty output
+ # list, so a contentless tool result must still produce one input_text item.
+ call = MCPToolCall(id="call_1", name="noop")
+ formatted = cast("dict[str, Any]", format_openai_result(call, MCPToolResult(content=[])))
+
+ assert formatted["type"] == "function_call_output"
+ assert formatted["call_id"] == "call_1"
+ assert formatted["output"] == [{"type": "input_text", "text": ""}]
+
+
def _api_response(
id: str, output: list[Any], usage: Any = None, incomplete_details: Any = None
) -> Any:
diff --git a/hud/agents/types.py b/hud/agents/types.py
index 8bafff7e9..81c566d79 100644
--- a/hud/agents/types.py
+++ b/hud/agents/types.py
@@ -103,7 +103,7 @@ class OpenAIConfig(AgentConfig):
"""Configuration for OpenAIAgent."""
model_name: str = "OpenAI"
- model: str = Field(default="gpt-5.5", validation_alias=_model_alias)
+ model: str = Field(default="gpt-5.6", validation_alias=_model_alias)
max_output_tokens: int | None = None
temperature: float | None = None
reasoning: Any = None # openai Reasoning
diff --git a/hud/cli/eval.py b/hud/cli/eval.py
index 0a071b53b..f0d05c56e 100644
--- a/hud/cli/eval.py
+++ b/hud/cli/eval.py
@@ -119,6 +119,7 @@ class AgentPreset:
_AGENT_PRESETS: list[AgentPreset] = [
AgentPreset("Claude Sonnet 4.6", AgentType.CLAUDE, "claude-sonnet-4-6"),
AgentPreset("Claude Opus 4.8", AgentType.CLAUDE, "claude-opus-4-8"),
+ AgentPreset("GPT-5.6", AgentType.OPENAI, "gpt-5.6"),
AgentPreset("GPT-5.5", AgentType.OPENAI, "gpt-5.5"),
AgentPreset("Gemini 3.1 Pro (Preview)", AgentType.GEMINI, "gemini-3.1-pro-preview"),
AgentPreset(
@@ -176,7 +177,7 @@ class AgentPreset:
# use_computer_beta = true
[openai]
-# model = "gpt-5.5"
+# model = "gpt-5.6"
# temperature = 0.7
# max_output_tokens = 4096
diff --git a/hud/eval/tests/test_rollout.py b/hud/eval/tests/test_rollout.py
index 3473d5a1c..4995a9505 100644
--- a/hud/eval/tests/test_rollout.py
+++ b/hud/eval/tests/test_rollout.py
@@ -249,7 +249,9 @@ async def start_child():
try:
with pytest.raises(RuntimeError, match="startup boom"):
- async with SubprocessRuntime(env_file, ready_timeout=2.0)(Task(env="leaky", id="noop")):
+ async with SubprocessRuntime(env_file, ready_timeout=30.0)(
+ Task(env="leaky", id="noop")
+ ):
pass
pid = int(pid_file.read_text())
assert await _wait_for_pid_inactive(pid)
diff --git a/hud/tests/test_version.py b/hud/tests/test_version.py
index 13019b107..c569e4d2a 100644
--- a/hud/tests/test_version.py
+++ b/hud/tests/test_version.py
@@ -1,8 +1,10 @@
from __future__ import annotations
+from importlib.metadata import version
+
def test_import():
"""Test that the package can be imported."""
import hud
- assert hud.__version__ == "0.6.9"
+ assert hud.__version__ == version("hud")
diff --git a/pyproject.toml b/pyproject.toml
index 527b7436c..a194b1974 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -18,7 +18,7 @@ dependencies = [
"mcp>=1.24.0,<2.0",
"fastmcp==3.0.2",
# For all inference agents
- "openai==2.44.0",
+ "openai>=2.45.0",
"anthropic>=0.78.0",
"google-genai",
# CLI dependencies