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)