Added

  • Python SDK:
    • Claude Desktop Agent — Run Claude Desktop as a Band agent: band-mcp --scope agent handles platform operations, and band-room-view keeps one room’s transcript open and synced while Desktop is running.
    • Env-Driven Logging & OpenTelemetry — Configure the SDK’s logging entirely from environment variables, with output ready to plug into an OpenTelemetry collector.

Changed

  • Band MCP:
    • Breaking: BAND_API_KEY No Longer Acceptedband-mcp no longer accepts a single unscoped BAND_API_KEY. Set BAND_USER_KEY (human scope) and/or BAND_AGENT_KEY (agent scope) explicitly — there is no unscoped credential or prefix-inference fallback any more. Legacy thnv_-prefixed keys are also no longer accepted; rotate to a band_u_/band_a_ key before upgrading. This only affects band-mcp’s own credential resolution — the band-sdk library’s BAND_API_KEY (agent runtime configuration) is unaffected.

Fixed

  • Python SDK:
    • ACP Tool Event Format — ACP tool calls and results are now recorded in the SDK’s structured event format instead of plain text, so anything reading event history sees typed data instead of prose.
    • Codex Reasoning/Plan Placeholders — Codex agents no longer post the literal text (reasoning) or (plan) to a room when a reasoning or plan step has no summary.
    • Claude SDK Silent Failures — A Claude SDK turn that fails (for example, an expired login) or finishes without a reply now posts a room error instead of completing silently.
    • Strands + OpenAI Rehydration — Fixed a 400 error when a Strands agent on an OpenAI-compatible model rehydrates history containing a tool call immediately followed by plain text.
    • Copilot CLI (ACP) Reliability — The Copilot CLI (ACP) adapter now sees room participant and contact updates, uses consistent tool names in narration, supports the memory capability, and no longer races itself when two rooms start at once.
    • Parlant Tool Descriptions — Parlant tool descriptions are now sourced the same way as every other adapter’s, fixing stale wording that no longer matched the platform’s tool names.
    • CrewAI and Pydantic AI Tool Descriptions — Tool descriptions for the CrewAI and Pydantic AI adapters now match every other adapter’s; CrewAI’s band_send_event requires an explicit message_type instead of silently defaulting to "thought", and band_lookup_peers’s page/page_size reject values below 1 again.
    • Participant Descriptions in the Roster — An agent’s automatically-injected room roster now includes each participant’s description, so agents can route by role without an extra tool call.
    • OneShotInvoker History & Roster — The one-shot invocation path now reads a room’s full history instead of stopping after the first page, and sends the participant roster on every call.
    • agent-client-protocol Compatibility — Fixed an import failure when agent-client-protocol resolves to 0.11.0 or newer.
    • Parlant + Pydantic AI Install Conflict — Installing the parlant extra together with pydantic-ai (or parlant alone, in some cases) no longer corrupts a shared import path; they now install into separate environments.
    • LocalMCPServer Docker Callback Binding — Fixed a DNS-rebinding-protection bug that rejected host.docker.internal callers with a 421 even when the embedded MCP server was explicitly bound to 0.0.0.0 for that documented Docker callback case.