DeerFlow 2.0.0 released #3795
WillemJiang
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
DeerFlow 2.0.0
DeerFlow 2.0 is a ground-up rewrite around a "super agent" harness that
orchestrates sub-agents, persistent memory, sandboxed execution,
and an extensible skills/tools system. It shares no code with the 1.x line,
which lives on the
main-1.xbranch.This release closes the 2.0.0 milestone
with 182 merged PRs since the first 2.0 milestone tag.
RunStoreand persistinterruptedstatus. Cancellation now requires the worker who owns the run; cross-worker
cancels return
409instead of silently appearing successful. ([fix(harness)!: hydrate runs from RunStore and persist interrupted statusΒ #2932])β¨ Highlights
own
SOUL.md/config.yamlfrom a normal chat, with full per-userisolation. ([feat(agent): add custom-agent self-updates with user isolationΒ #2713])
Telegram, Discord, Feishu/Lark, DingTalk, WeChat, and WeCom accounts on top
of operator-configured bots. ([feat(im): Add user-owned IM channel connectionsΒ #3487])
MiniMax for image/video/podcast skills plus a new music-generation skill,
and Brave Search / SearXNG / Browserless / Serper Google Images tools.
([feat(models): add StepFun reasoning model adapterΒ #3461], [feat(provider) Add patched MiMo reasoning content supportΒ #3298], [feat: MiniMax provider for image/video/podcast skills + new music-generation skillΒ #3437], [feat(community): add Brave Search web search toolΒ #3528], [feat(community): add SearXNG and Browserless web search/fetch toolsΒ #3451], [feat(community): add Serper Google Images provider for image_searchΒ #3575])
typing indicators; Telegram streams replies by editing the placeholder
message in place. ([feat(channels): enhance Discord with mention-only mode, thread routing, and typing indicatorsΒ #2842], [feat(telegram): stream agent replies by editing the placeholder message in placeΒ #3534])
deferred warning injection. ([Make loop detection configurableΒ #2586], [feat(loop-detection): make loop detection configurable with per-tool frequency overridesΒ #2711], [feat(loop-detection): defer warning injectionΒ #2752])
attributed to the parent thread's Langfuse trace. ([feat: stream subagent token usage to header via terminal task events Β #2882], [feat(subagents): attribute subagent spans to parent thread's Langfuseβ¦Β #3611])
lead_agent/ custom-agent trace names;session_iduser_idpropagated to Langfuse; non-ASCII memory traces no longer escape.([feat(trace):LangGraph -> lead_agent and set custom agent_name to run_nameΒ #3101], [fix(tracing): propagate session_id and user_id into Langfuse tracesΒ #2944], [fix(trace):memory δΈζ in trace info is unicode escape sequence.Β #3104])
attributed to the actual models. ([enable token usage by defaultΒ #2841], [feat: refine token usage display modesΒ #2329], [fix(gateway): attribute token usage to actual modelsΒ #3658])
networks via
memory.token_counting; make AI follow-up suggestions optional.([feat(memory): add memory.token_counting config to avoid tiktoken network dependency (#3429)Β #3465], [feat(suggest_agent): make AI follow-up suggestions optional Β #3591])
π Performance
thread_idinRunManagerto eliminate O(n) scans. ([perf(runtime): index runs by thread_id to avoid O(n) scans in RunManagerΒ #3499])MemoryRunEventStoreto eliminate O(n) scans. ([perf(runtime): index messages in MemoryRunEventStore to avoid O(n) scansΒ #3531])Base.to_dictcolumn reflection per class. ([perf(persistence): cache Base.to_dict column reflection per class (#3653)Β #3654])should_ignore_namein glob/grep sandbox walks. ([perf(sandbox): speed up should_ignore_name in glob/grep walks (#3655)Β #3657])π Security
([[security] fix(upload): reject symlinked upload destinationsΒ #2623], [fix(uploads): add Windows support for safe symlink-protected uploadsΒ #2794])
([fix(security): mask sensitive values in MCP config API responsesΒ #2667], [fix(security): harden MCP config endpointΒ #3425])
π Notable fixes
asyncio.run(); queued updates isolated per agent; wrapped JSON responsesparsed correctly. ([fix(memory): replace short-lived asyncio.run() with persistent event loopΒ #2627], [fix(memory): isolate queued memory updates by agentΒ #2941], [fix(memory): parse wrapped memory update json responsesΒ #3252])
ISO 8601 timestamps, and have an idempotent cancel. ([fix(runs): restore historical runs from persistent store after gateway restartΒ #2989], [fix(gateway): return ISO 8601 timestamps from threads endpointsΒ #2599], [fix(gateway): make cancel idempotent for already-interrupted runsΒ #3058])
state atomic; respect model overrides for tools/middleware. ([fix(subagent): isolate subagent from parent run checkpointerΒ #3559],
[fix(subagents): make subagent timeout terminal state atomicΒ #2583], [fix(subagents): use model override for tools and middlewareΒ #2641])
/mnt/user-datacontract enforced at the API boundary; PVC data scoped peruser; Windows/Git Bash MSYS path conversion disabled. ([fix(sandbox): avoid blocking sandbox readiness pollingΒ #2822], [fix(sandbox): uphold /mnt/user-data contract at Sandbox API boundary (#2873)Β #2881],
[fix(sandbox): scope provisioner PVC data by userΒ #2973], [fix(sandbox): disable MSYS path conversion for Git BashΒ #2766])
uses cached responses instead of 429. ([fix(auth): persist auto-generated JWT secret to survive restartsΒ #2933], [fix(auth): replace setup-status 429 rate limit with cached responseΒ #2915])
loop, duplicate optimistic messages, deeply nested list render crashes, and
thread isolation on new chats. ([fix(chat): prevent first user message from being swallowed in new conversationsΒ #2731], [fix(frontend): resolve login page flickering and resize observer loop.Β #2954], [fix(frontend): avoid duplicate optimistic user messageΒ #3002], [[bug] Uncaught RangeError: Maximum call stack size exceededΒ #3393], [fix(frontend): cap deeply nested list indentation to prevent render crash (#3393)Β #3570],
[fix(frontend): isolate new chat thread messagesΒ #3508])
helper commands to the owner, makes the provider state authoritative, and makes
The connect flow is deterministic, backed by shared retry helpers and
operational guardrails. ([fix(channels): require bound identity for user-owned IM messagesΒ #3578], [fix(channels): scope IM files and helper commands to ownerΒ #3579], [fix(channels): make runtime provider state authoritativeΒ #3580], [fix(channels): harden runtime credential management APIsΒ #3581], [fix(channels): make channel connect flow deterministicΒ #3582],
[fix(channels): centralize shared channel retry helpersΒ #3583], [fix(channels): add operational guardrailsΒ #3584])
the LangGraph SDK, and base64 image payloads are stripped from streamed and
history responses to keep the UI responsive. ([fix(runtime): propagate interrupt through SSE values events for LangGraph SDKΒ #3605], [fix(serialization): strip base64 image data from streamed values eventsΒ #3631], [fix(history): strip base64 image data from REST endpoint responses (#3496)Β #3535])
stays interactive when the SSR auth probe can't reach the gateway, and gets a
mobile-friendly layout. ([fix(frontend): paginate workspace chat list beyond 50 threads (#3482)Β #3485], [fix(frontend): keep workspace interactive when SSR auth probe cannot reach gateway (#3493)Β #3495], [fix(frontend): improve mobile workspace layoutΒ #3646])
π¦ Deploy & ops
([fix(docker): default Gateway to a single worker to prevent multi-worker breakageΒ #3475])
postgresextra for store/checkpointer support. ([fix(packaging): add postgres extra for store/checkpointer supportFix postgres extra install guidanceΒ #2584])uvextras acrossmake devrestarts; clean up localnginx on stop; exclude runtime state from gateway reload. ([fix(scripts): preserve uv extras across
make devrestarts (#2754)Β #2767], [fix: clean up local nginx on stopΒ #3005],[fix(dev): exclude runtime state from gateway reloadΒ #3426])
π Thanks
Huge thanks to the 40 contributors who landed 180 merged PRs in the 2.0.0 milestone, and to everyone who filed issues, tested builds, and shared feedback. DeerFlow 2.0 wouldn't exist without you.
In alphabetical order:
See the full author and PR list on the
milestone page.
This discussion was created from the release DeerFlow 2.0.0 released.
All reactions