SDKs
  • bma-executor-sdk 1.5.1 (Go, TypeScript, Python). Go: a user’s image reaches a local brain (ACPAgent) as an ACP image content block when the agent declares promptCapabilities.image (bma-dsh-acp >= 0.2.2) and the host can fetch the file (ACPAgentOptions.InputFiles, or the turn’s tools endpoint with PlatformTools); an image it cannot hand over ends the turn with a visible session.error (Anthropic API limits: PNG/JPEG/GIF/WebP, 5 MB, 8000 px, 100 images). A PlatformToolRoute stale_turn renewal waits for the reconnecting executor channel, and the Claude Code profile’s tool calls stream (MCP Streamable HTTP, SSE) so a call can run past Claude Code’s 60 s first-byte budget (approval waits, long commands). See CHANGELOG.md (1.5.1).
SDKs
  • bma-executor-sdk 1.5.0 (Go, TypeScript, Python). Go: a local DSH brain (ACPAgent) runs the model and thinking level a turn asks for: the host lists the models a turn may choose in ACPAgentOptions.Models (capability models), a turn.start config.model outside that list is refused with -32602, and config.thinking_level goes upstream as the request’s reasoning_effort (bma-dsh-acp >= 0.2.2). Idle sessions no longer hold a slot: max_sessions counts running turns, and resident sessions beyond MaxResidentSessions are suspended least recently used first and resumed on their next turn. examples/local-dsh adds -models and -allowed-root. See CHANGELOG.md (1.5.0).
  • bma-executor-sdk 1.4.1 (Go, TypeScript, Python). Go: when the platform refuses a turn’s tool credential (stale_turn, as after the brain’s executor reconnects and the session moves to a new epoch), PlatformToolRoute gets a fresh one through tools_token.refresh and sends the same call again with its idempotency key, so a tool answer lost in the outage still arrives (one execution). See CHANGELOG.md (1.4.1).
  • bma-executor-sdk 1.4.0 (Go, TypeScript, Python). Brain and hands on two computers (ADR-0029). Go: ToolRoute, PlatformToolRoute and LocalToolRoute are public; AgentTurn.Tools() sends a turn’s tool calls to the platform’s tool gateway when its hands are on another machine, AgentTurn.EnvironmentInfo(), AgentTurn.ApprovalID(), Client.RefreshToolsToken / AgentTurn.RefreshToolsToken (tools_token.refresh); a tool answer lost to a network drop is fetched again with the call’s idempotency key (one execution). Options.Labels and Options.RemoteBrain. ACPAgent hosts the official Claude Code ACP agent with the node owner’s own credentials (ACPProfileClaudeCode, pinned claude-agent-acp 0.101.0, prewarmed), answers turn.start at once, and takes a host ceiling on tool permissions (ToolPolicy); CoreOptions.FileAccess, Launch and ToolOutputDir. Test package conformance (cases T1–T11) for third-party brains and hands. Contract 1.4.0 snapshot (fs.skills_per_session). See CHANGELOG.md (1.4.0).
Platform
  • Per-session skills. sessions.create with agent_with_overrides.skills replaces the agent’s skills for that session (omit to inherit, [] or null to clear; creation only). Every session freezes each skill at the version resolved at creation (skr_… in session.agent.skills[].version); later uploads do not change running sessions. See Skills.
SDKs
  • bma-sdk 2.1.0 (Go github.com/beeos-ai/bma-sdk/v2, TypeScript @beeos-ai/bma-sdk, Python bma-sdk). New SendAndStream / sendAndStream / send_and_stream: send the events, then open the resumable stream with Last-Event-ID set to the bma_resume_cursor of the send response, so frames written before the subscription are not lost. Within one sequence the user.message can come after session.status_running; the send response id is the input (ain_…), matched to the user.message on the stream through bma_input_id. Additive, no breaking change. See bma-sdk.
  • bma-executor-sdk 1.3.0 (Go, TypeScript, Python). Contract 1.4.0 (additive): AgentCapability.harnesses[] (the single harness is deprecated), AgentTurnConfig.harness, agent.custom_tool_use / agent.custom_tool_result with requestCustomTool / respondCustomToolResult, and tools_token.refresh. Go only: Client.RefreshModelToken / AgentTurn.RefreshModelToken (model_token.refresh); ACPAgent hosts a local ACP brain (the platform model credential, refreshed when at most 10 minutes remain, and the deterministic appr_ approval id) and re-checks every local tool call against the turn’s policy. Additive; see MIGRATION.md (1.3.0).
SDKs
  • bma-executor-sdk 1.2.0 (Go, TypeScript, Python). New machine_id option (default BMA_MACHINE_ID); token exchange and renewal use the executor’s own resource, POST /v1/machines/{machine_id}/token or POST /v1/environments/{environment_id}/token. A machine token without a machine id keeps working through the legacy POST /api/v1/executors/token alias. Also declares the fs capability and the fs.mount / fs.unmount methods. Sessions that use custom tools run on a registered machine like any other session. Additive; see MIGRATION.md (1.2.0).
SDKs
  • SDK 1.0.0. bma-sdk and bma-executor-sdk 1.0.0 are published for Go, TypeScript and Python (npm, PyPI, Go module proxy). bma-sdk is a resource-style client (bma.agents.sessions.create, client.Agents.Sessions.New) with retries, auto-pagination and a typed event stream that reconnects like EventSource; the base URL is the API origin. bma-executor-sdk registers one typed handler per tool (client.tools.bash.handle). Upgrading from 0.4: see MIGRATION.md in each repository.
Platform
  • Ask before creating a machine. A tool with always_ask now asks before the session’s machine is created; a denied or unanswered call provisions nothing.
  • create_machine works for agents created through /v1.
Platform
  • Lazy machines. A session gets its machine on the first tool call that needs one. Chat-only sessions never hold a machine.
  • Idle pause. Pools can pause idle machines instead of deleting them; paused machines keep disk and memory, do not count against quota, and resume on the next use.
  • Subagents belong to their session. Results and questions return to the spawning session; a subagent sees only that session’s machines.
Platform
  • Automatic session titles after the first turn, announced with session.updated.
  • Environment desktop wallpaper (config.desktop.wallpaper.file_id).
SDKs
  • SDKs split by role. bma-sdk (REST and /v1 extensions, 0.4.2) and bma-executor-sdk (Executor Protocol, 0.4.9) replace the archived bma-sdks repository. Package names are unchanged. On PyPI the latest published versions are 0.4.1 and 0.4.8.
See the roadmap for what is next.