Releases
What's new in AgentOS
What changed in the AgentOS platform and its TypeScript and Python SDKs, newest first. RSS
Added
- Control plane. Every workspace operation as a typed method with keyword arguments:
aos.agents,aos.runs,aos.approvals,aos.evals,aos.schedules,aos.resources,aos.alerts,aos.reports,aos.tools,aos.folders,aos.conversations,aos.members,aos.api_keys,aos.notifications,aos.integrations,aos.marketplace,aos.fleetandaos.workspaces(56 methods). Generated from the server's schemas; see the reference. workspaceargument andAGENTOS_WORKSPACE, for control-plane calls with a personal key.
Changed
- The README is rewritten as a complete guide.
- Control plane. Every workspace operation as a typed method with keyword arguments:
Breaking
invoke()returns anInvokeResult(run_id,status,output,duration_ms,session_id,approval_id,input_request) instead of a dict.statusis"completed","awaiting_approval"or"awaiting_input"; a paused run used to look like a success with an empty output.emit_llm_response()takes token counts asusage=(wastoken_usage=).- The LangChain handler records a span tree instead of tasks and events.
- Licence is MIT (was Apache-2.0), matching the TypeScript SDK.
Added
- Configuration from the environment:
AGENTOS_API_KEY,AGENTOS_AGENT_ID,AGENTOS_BASE_URL,AGENTOS_DISABLED.agent_idis optional and can be passed per call, for workspace keys. invoke_stream(),reply(), and the full invoke API:session_id,start_session,history,external_user_id,parent_run_id,test.Runis a context manager: completed when the block ends, failed with the traceback if it raises.run.cancel(),run.complete(usage=...)for token counts, andspan.fail().client.flush()andclient.shutdown(). Queued events are also sent automatically at interpreter exit.- Retries with backoff for transient failures; a 429's
Retry-Afteris honoured. Invokes are only retried on 429, since the agent may already be running. AgentOSTransientError,AgentOSConfigError,statuson every error, andretry_afteronAgentOSRateLimitError.- Options:
max_queue_size,max_retries,on_error,http_client. start_run(parent_run_id=...).invoke_stream()yields typed events (InvokeStreamEvent) and skips event types it doesn't know.- Ships
py.typed, so type-checkers use the SDK's type hints.
Fixed
invoke()timed out after 10 s, while hosted runs can take 300 s.emit()could send a batch synchronously on the caller's thread. Sending now always happens in the background.- Events were lost silently when a send failed. Transient failures now stay queued and retry; rejected batches are dropped and counted in
run.dropped_events. - The event queue is bounded. When it fills, debug and info events are dropped before warnings and errors.
- Payloads with values JSON can't encode (datetimes, SDK objects) are sent as text instead of failing.
- A span with no parent or no kind sent those fields as
null, which the server rejects, so the whole batch of events was lost. They are now left out. - The LangChain handler reported every model as
"llm"and every tool as"tool", and made a network call on each chain step.
- Prompt variables and parent run ids on
invoke().
- Prompt variables and parent run ids on