v2.0.4
Released on 2026-07-07.Highlight: This release adds
- agent interruption,
- two long-term memory middlewares, and
- the ability to invite existing agents into a team.
Added
Agent Core (SDK)- Support realtime agent interruption and resumption. (#1995)
- Add
POST /sessions/{session_id}/interruptendpoint. (#1995) - Support to interrupt the generation in WebUI. (#1995)
- Support team leader to invite existing agents via a new
AgentInvitetool. (#1977) - Add a session status endpoint for polling session lifecycle. (#1984)
- Add
AgenticMemoryMiddlewareclass, supporting Markdown-based long-term memory. (#1927) - Add
ReMeMiddlewareclass, supporting the AgentScope ReMe toolkit as an in-process long-term memory backend. (#1972)
- Add
MilvusLiteStoreclass, supporting Milvus Lite as a local persistent vector store. (#1969)
- Add
DashScopeCosyVoiceTTSModelclass, supporting DashScope CosyVoice V3 speech synthesis in both streaming and non-streaming modes. (#1866) - Add
OpenAITTSModelclass, supporting the OpenAI TTS API in both streaming and non-streaming modes. (#1878)
Changed
Workspace- Add a new
SandboxWorkspaceBaseclass, which extracts the common logic of the cloud-based workspaces and serves as a new base class forDockerWorkspaceandE2BWorkspace. (#1971)
- The
_call_apimethod ofChatModelsubclasses no longer needs to yield a final aggregatedChatResponseat the end. The accumulation logic is now handled automatically insideChatModelBase.__call__. (#1995)
Fixed
AgentAgentmiddleware chain: kwargs omitted innext_handler()now inherit the current middleware state instead of resetting to the original chain input. (#1966)- Fix the yielding order of the
ThinkingBlockEndEventandTextBlockStartEventevents. (#1887)
- Fix the OpenAI Response API model and its formatter. (#1950)
_sanitize_schema_for_geminiconvertsconst: valuetoenum: [value], so tools with fixed-value parameters no longer fail Gemini schema validation. (#2016)ChatModelBase.count_tokensuses a conservative flat estimate for multimodalDataBlockinputs, avoiding huge overestimates from base64 payload length. (#1899)
- Anthropic, Gemini, and Ollama formatters now use
_json_loads_with_repaironToolCallBlock.input, so truncated tool-call JSON degrades to{}instead of raisingJSONDecodeError. (#2012) - Gemini formatter drops empty thinking blocks before sending. (#2013)
- Built-in
Greprejects negativehead_limit/tail_limitvalues. (#1954)
CredentialFactory.register_credentialis now idempotent, avoiding duplicate registrations underuvicorn --reload. (#1964)
- Fix mismatched docstrings in the
agent,state, andtoolmodules. (#1989)
v2.0.3
Released on 2026-06-19.Highlight: This release adds
- a new
ragmodule with distributed / multi-tenant / multi-session support, - a mem0-backed long-term memory middleware,
- a token-budget middleware, and
- tool-level onion middleware in
ToolBase.
Added
Agent Core (SDK)Agent.compress_contextaccepts an optionalinstructions: HintBlockargument, letting callers inject compression-specific hints without mutating the agent’s persistent context. (#1942)
- Expose HITL events in the team leader’s session. (#1918)
- Add an in-memory message bus for single-node deployment. (#1925)
- Add
Mem0Middlewareclass, supporting mem0-backed long-term memory. (#1775) - Add
BudgetControlMiddlewareclass, supporting token-budget enforcement in ReAct loops. (#1738)
- Add new
ragmodule, supporting distributed, multi-tenant, and multi-session RAG service. (#1926)
- Support tool-level onion middleware in
ToolBasevia a newcall()entry point, wrapped by__call__. (#1754)
- Support built-in tools (
Bash,Read,Write,Edit,Glob,Grep) for the e2b and docker workspaces. (#1903)
- Add DashScope CosyVoice realtime TTS model. (#1855)
- Add model cards for
gpt-4o,gpt-4o-mini, andgpt-4.1-nanounder the OpenAI Response API. (#1750)
- Support
pass_dimensionsoption for OpenAI embedding models. (#1897)
- Support configurable ID factory via
set_id_factory(), letting users override the defaultuuid4strategy. (#1839)
- Render
WriteandEdittool diffs. (#1856) - Add a right panel to display verbose task / permission context, MCPs, and skills. (#1945)
Changed
Message Bus- Refactor and decouple the message bus from service logic. (#1923)
Fixed
Model- Correct the qwen max 3.7 model id in DashScope. (#1876)
- Handle Gemini function calls without an id. (#1883)
- Add
_sanitize_schema_for_geminito strip Gemini-incompatible JSON Schema constructs from tool parameters. (#1886)
AnthropicChatFormattermerges parallel tool_results into a single user message. (#1894)
- Avoid shared default configs across
Agentinstances. (#1906)
- Merge base64 tool-response chunks by bytes instead of string concatenation. (#1901)
- Use the configured id factory for TTS audio blocks. (#1930)
- Correctly convert AG-UI SSE stream events. (#1917)
- Remove
max_lengthconstraints fromSummarySchemafields and raise the tool-result size limit. (#1891)
v2.0.2
Released on 2026-06-16.Added
Agent Service & Team- Custom subagent templates can now be registered in the agent service, so a team leader can spawn workers from user-defined templates instead of being limited to the built-in ones. (#1833)
- Custom agent classes are now accepted by the agent service, allowing users to plug their own
Agentsubclasses into the FastAPI runtime. (#1838)
Bashtool now accepts acwdargument, letting agents scope shell execution to a specific working directory instead of always running from the workspace root. (#1822)
- Streaming audio + live captions for DashScope/OpenAI omni-modal models — audio chunks and caption events are now emitted incrementally during a single reply. (#1701)
- New
ttsmodule with a DashScope backend and a streaming middleware that turns the agent’s textual replies into spoken audio as tokens arrive. (#1832)
- Credential sidebar is now grouped by provider, making it easier to find and manage keys across many vendors. (#1829)
- CI for WebUI: added format and build checks so frontend regressions are caught at PR time. (#1821)
Changed
Agent Service Infrastructure- Embedding model layer refactored for the agent service: the legacy single-file
_dashscope_embedding.py/_dashscope_multimodal_embedding.pywere replaced by a newembedding/_dashscope/package with per-model YAML cards (text-embedding-v3/v4,qwen2.5-vl-embedding,qwen3-vl-embedding,multimodal-embedding-v1,tongyi-embedding-vision-flash/plus), a newEmbeddingModelCardtype, and a service-level_embedding.pyendpoint. (#1852) - Background task manager refactored to support multi-process and distributed deployment. The single-process scheduler was replaced by a message-bus based architecture (
message_bus/_base.py+_redis_message_bus.py), and the cancel/wake-up dispatchers were rewritten to coordinate over the bus. (#1849)
Fixed
Model- Tool-choice fallback in thinking mode: when an OpenAI-compatible structured output call rejects a forced
tool_choicebecause thinking mode is on, the call now transparently falls back toautoinstead of erroring out. (#1830) - Qwen thinking toggle is now forwarded correctly to DashScope. (#1774)
- Ollama embedding client is created per call instead of being cached, avoiding “event loop is closed” errors when the embedding client outlives its original loop. (#1836)
- Workspace MCP loader now skips invalid MCP config entries with a warning instead of aborting initialization. (#1819)
- Workspace root is included in the permission context, so path-rule evaluation correctly resolves relative paths. (#1823)
- Worker agents inherit leader permission rules:
AgentCreateis now state-injected, and a worker session is constructed by deep-copying the leader’s working directories and allow/deny/ask rules. Previously workers received a blankPermissionContext, losing every user-confirmed directory and rule. (#1815)
- Glob patterns now accept Windows-style separators. (#1809)
- Redis session IDs: explicit session IDs are preserved instead of being overwritten with auto-generated ones. (#1786)
- Redis message bus timeout bug fixed so long-running tasks no longer drop their result messages. (#1853)
- Fixed nested
<button>HTML inside the sidebar group action. (#1769) - Non-previewable file attachments now render properly, and media size is constrained to avoid blowing out the chat layout. (#1768)
- The chat session sidebar is now a mobile overlay drawer instead of taking up screen real estate on small viewports. (#1772)
- Added a route-level error boundary with a friendly error page. (#1828)
- Fixed a rendering bug on the chat page. (#1867)
- Corrected a typo in the Chinese setup hint copy. (#1766)
v2.0.1
Released on 2026-06-05.Highlight: the Agent Team feature is now supported on top of the agent service, making it easy to compose multiple subagents under a leader.
Added
Agent Service & Team- Agent Team is built into the agent service: the service is refactored so multiple subagents can be created and coordinated by a leader agent. (#1776)
- Pluggable tools and middlewares can now be passed into the service at startup via dependency injection, instead of being baked into the default toolkit. (#1709)
- Permission system overhaul: the per-tool
_check_permissionhooks inEditandWritewere collapsed into the shared_engine.py, and_decision.py/_types.pywere expanded with a richer rule model. The change is covered by a new 895-linepermission_mode_test.pyexercising thedefault,explore,accept_edits, andaskmodes end-to-end. (#1767)
- Per-call
client_kwargscan now be forwarded to the underlying provider client, useful for proxies, custom transports, or per-call tracing. (#1659) - 15 new YAML model cards for mainstream providers: Anthropic (
claude-opus-4-5,claude-opus-4-6,claude-sonnet-4-5), DashScope (qwen-max,qwen-max-2025-01-25,qwen-turbo,qwen-long), OpenAI Chat (gpt-4o,gpt-4o-mini,gpt-4.1-mini,gpt-4.1-nano), OpenAI Response (gpt-4.1,gpt-4.1-mini), and xAI (grok-3,grok-3-fast). (#1731)
- Basic
ragmodule skeleton introduced — base classes only; concrete retrievers will land in later releases. (#1746)
metadatafield onEventBase, allowing producers to attach arbitrary structured data that downstream consumers (tracing, hooks, middlewares) can read. (#1788)
- Fallback model can now be configured from the Web UI, so a session automatically rolls over when the primary model is unavailable. (#1699)
ripgrepis now an optional dependency so deployments that don’t need the built-ingreptool can stay leaner. (#1740)
Changed
Docs- README updated to cover the new agent service feature. (#1789)
Fixed
Formatter & Model- Anthropic formatter now drops thinking blocks that have no signature, preventing API rejections. (#1668)
- Retry logic unified across providers: a shared retry helper was added to anthropic / dashscope / deepseek / gemini / moonshot / ollama / openai_chat / openai_response / xai, so transient failures are now retried consistently everywhere. (#1730)
- Ollama and Gemini now honour an explicit
thinking_enable=Falseinstead of silently re-enabling thinking when the model supports it. (#1784)
FunctionToolnow accepts plain (non-ToolResponse) return values and wraps them automatically. (#1703)- Built-in
Readtool now invalidates its file cache when the underlying file is modified. (#1735) - Bash subprocess windows are now hidden on Windows. (#1717)
- Tool-group skills are now correctly included when resolving the active toolset. (#1732)
- MCPTool names are now sanitized so providers (notably OpenAI) that reject characters like
:or/accept them as tool names. (#1787)
LocalWorkspaceadds locks around MCP and skill operations to prevent races during concurrent registration/teardown. (#1710)- Redis message lists now have an expiry so per-session message logs are no longer kept forever. (#1734)
- Frontend now builds cleanly with the current dependency set. (#1708)
Buttontooltip trigger usesasChildto avoid nested<button>elements. (#1770)- Dialogs now ship with descriptions for screen reader accessibility. (#1771)
- Added missing files in the Web UI example. (#1661)
- DingTalk group QR code refreshed. (#1662)
v2.0.0
Released on 2026-05-25.Highlight: AgentScope 2.0 is released! This is a major architectural overhaul — message, tool, workspace, permission, middleware and service layers are all rebuilt from the ground up. See the docs for the new building blocks.
Added
Agent Core- Permission checking inside the
Agentclass: large rewrite of_agent.py(+1534/-388) integrating the new permission engine, event types, exception hierarchy, and message blocks. The agent now consults the permission system on every tool call. (#1518) - Context compression in the
Agentclass: a newAgentConfigexposes compression knobs, model providers gain compression entry points, and the newoffload/andstorage/base modules persist compressed history. Covered by a 564-linecontext_compression_test.py. (#1544) - Tool-result compaction in the
Agentclass so large tool outputs are summarized before being re-fed to the model. (#1585)
- New
tool/_permission/package providing the basic permission classes, including a 1026-LOC_engine.py, a 589-LOC_bash_parser.pythat statically analyses shell pipelines, plus_context.py,_decision.py,_rule.py, and_types.py. Backed by ~1.6k LOC of unit tests. (#1486)
- Built-in tools rebuilt on
ToolBase: brand-new_bash,_edit,_glob,_grep,_read, and_writeimplementations, plus_metaand_constants, all sharing the new tool base class. (#1502) - Task tools added:
TaskCreate,TaskGet,TaskList, andTaskUpdate(see the Plan page). (#1549) - Tool + Workspace integration: the toolkit and the workspace module are now wired into the
Agentclass so file/shell tools execute inside the agent’s workspace. (#1642)
- New
workspace/module built for 2.0, with a_base.pyinterface and a 789-LOC_local_workspace.pyimplementation. The oldoffload/_base.pywas removed in the process. (#1586)
- FastAPI-based agent service introduced as the canonical way to expose agents over HTTP. (#1568)
- 2.0 middleware system added to the
Agentclass: a 179-LOCmiddleware/_base.py, a newAgentConfigslot for middleware registration, and a 752-LOC test suite. (#1565) - Tracing as a middleware: the previously bolt-on tracing logic is now packaged as a middleware under
middleware/_tracing/(extractor + converter + setup + 846-LOC test suite). (#1633)
cache_creation_input_tokensandcache_input_tokensadded toChatUsagefor prompt-cache aware billing/telemetry. (#1602)- Uniform thinking tag: standardized handling of
<thinking>tags across DeepSeek, Moonshot, OpenAI Chat, OpenAI Response and xAI so downstream code no longer needs per-provider branching. (#1622) - Audio output for OpenAI models is now handled end-to-end. (#1623)
- DashScope structured output fixed and accompanied by usage examples. (#1651)
Msgtype rules and constraints formalized, with a comprehensive test suite that pins down what content blocks are allowed where. (#1454)usagefield onMsgexposes token usage at the message level. (#1639)
- Model-call helper scripts added under
scripts/model_examples/for quick provider sanity checks. (#1604)
Changed
Message & Event- Core building blocks simplified and the
Msgclass restructured. The legacya2a/package (a2a_base,file_resolver,nacos_resolver,well_known_resolver) andformatter/_a2a_formatter.pywere removed; a unifiedevent/package (_event.py, 421 LOC) was introduced. (#1440)
- Tool module refactored with a new base class and toolkit logic; the legacy MCP
client_basewas dropped and tutorials updated to match. (#1493) - Skill loader refactor: a new
tool/_skill/package (_base.py+ 171-LOC_local_loader.py) replaces the inline skill logic in the toolkit, and a built-in_skill.pytool exposes skills to agents. (#1513) tool_choiceargument refactored to expose modes (auto,none,required, etc.) as typed objects intool/_types.py, enabling advanced prompt cache in the OpenAI Response API. Updated across every provider model. (#1524)
- Chat model implementation refactored: a new
credential/package (_base,_anthropic,_dashscope,_deepseek,_gemini,_kimi,_ollama,_openai,_xai) decouples API keys/auth from the chat model classes, and every provider’s formatter was rewritten on top of it. (#1564) - DashScope made OpenAI-compatible: the DashScope model now reuses the OpenAI chat client path instead of carrying its own response parser. (#1617)
kimirenamed tomoonshotto match the provider’s branding. (#1609)
- Unified
MCPClientclass (_mcp_client.py, 347 LOC) replaces the previous family of stateful, stateless, stdio, SSE, and streamable-HTTP clients. A small_config.pyholds connection configs. (#1572) - MCP tools are renamed when registered into the toolkit, ensuring no collisions across servers. (#1552)
- MCP unit tests refactored for the new version. (#1505)
- Tracing module moved under
middleware/_tracing/: the single 360-line_extractor.pywas split into_trace.py,_converter.py, and a slimmer_extractor.py, and registration was simplified. (#1579)
- e2b and Docker workspaces added alongside the local workspace, each with its own manager. The release also ships a full WebUI scaffold under
examples/web_ui/. (#1650)
- Temporary deprecations:
evaluate,module,rag,tts, andrealtimemodules are removed pending refactor; the corresponding examples (a2a/a2ui agents, etc.) are deleted from the tree. (#1438)
- README and tutorials updated for the 2.0 release. (#1657)
Fixed
Model- DashScope
KeyErrorwhen the response payload omits an expected field. (#1615) _format_toolsrefined for the OpenAI response model. (#1635)
- Formatters and unit tests refined across providers. (#1621)
- Moonshot: remote image URLs are now downloaded and re-uploaded as base64 since the API does not accept URL references. (#1653)
$defspreserved in MCPTool input schemas andtitlekeys stripped recursively, fixing schema validation with strict LLM providers. (#1595)
.envbypass closed:Write,Edit, andBashno longer let agents read or modify.env(or other dangerous paths) through canonical-path tricks; the dangerous-path API was refined accordingly. (#1656)
- Helper scripts now assign a list of
TextBlocktocontentinstead of a raw string. (#1629)