## bytedance/deer-flow — v2.0.0…v2.1.0-rc0

_1009+ commits._

### Features
- **feat(mcp): identify DeerFlow in Parallel request headers (#5501)** (6b0ebe6)
- **feat(skills): rank deferred discovery by agent intent (#5369)** (e831720)
- **feat(frontend): reference conversations from the composer (#5465)** (94e69d6)
- **feat(extensions): expose incremental run evidence reader (#5405)** (f0cb67b)
- **feat(projects): Projects MVP Phase 2 — instructions, document shelf, promotion, trash (#5443)** (a58ab48)
- **feat(models): add user model favorites (#5441)** (6ca12c6)
- **feat(frontend): move capability management out of Settings (#5468)** (a246c92)
- **feat(gateway): accept conversation references in run context and report the capability (#5463)** (5b591a9)
- **feat(runtime): persist tool-progress phase transitions (#5214)** (14c9d44)
- **feat(conversation): continue reading a cut message by offset (#5434)** (4ad55f5)
- **feat(models): pace shared RPM budgets before dispatch (#5432)** (3dc895d)
- **feat(agents): allow custom agents to disable memory (#5167)** (80f1393)
- **feat(scheduled-tasks): filter run history by occurrence status (#5384)** (5d855e9)
- **[feat] add opt-in conversation reads for Gateway runs (#5399)** (533e30e)
- **feat(settings): persist account preferences across browsers (#5397)** (7513f16)
- **feat(memory): add deterministic near-duplicate fact gate (#5254)** (5d86ce3)
- **feat(skills): support OpenAI-compatible image generation (#5389)** (a22c616)
- **feat(agents): elide superseded write_file payloads from model-bound requests (#5374)** (cf556fa)
- **feat: add opt-in task notes and compacted history recall (#5382)** (1b76ab9)
- **feat(subagents): add opt-in parent context snapshots (#5367)** (6d5d7bb)
- **feat(extensions): add in-place upgrade that keeps private config (#5347)** (f17ca37)
- **feat(scheduled-tasks): preview upcoming cron occurrences (#5381)** (444bfb7)
- **feat(scheduled-tasks): browse paginated run history (#5363)** (4501c76)
- **feat(agents): support Unicode display names for custom agents (#5324)** (ac2b641)
- **feat(extensions): allow constructor kwargs on config-declared middlewares (#5312)** (4470932)
- **feat(authz): gate thread-delete and run-cancel UI on effective permissions (Phase 4, #4063) (#5294)** (ec0ac47)
- **feat(title): use filenames for attachment-only conversations (#5304)** (9f4a782)
- **feat(frontend): add expandable generic tool details in debug mode (#5309)** (1ee93cd)
- **feat(tools): filter list_uploaded_files by name and extension (#5341)** (9f17bbe)
- **feat(agents): elide blocked write payloads from model-bound requests (#5329)** (3f0b6ec)
- **feat(skills): export custom skill packages with revision-bound preview (#5332)** (f52818f)
- **feat(scheduler): add interval schedule type (#5291)** (48a8978)
- **feat(scheduler): let scheduled tasks pin a custom agent (#5288)** (69f0f48)
- **feat(persistence): add expand-phase thread incarnation storage (#5216)** (06c8279)
- **feat(gateway): paginate thread run history (#5283)** (3c7d330)

### Fixes
- **fix(nginx): allow model-bound /api/threads requests past 60 seconds (#5505)** (3cfc9c5)
- **fix(backend): validate assistant search pagination (#5506)** (22ae3d0)
- **fix(models): guard Claude credential loader against malformed claudeAiOauth (#5473) (#5494)** (bec4231)
- **fix(events): preserve DB write-lock generation across deletion (#5462)** (7811735)
- **fix(setup): honor sandbox image in BOM-prefixed configs (#5515)** (53f2a73)
- **fix(gateway): keep run drain alive across repeated cancellation (#5487)** (6a94bef)
- **fix(models): pair Codex invalid tool calls with their tool results (#5509)** (51bd002)
- **fix(setup): detect optional extras in BOM-prefixed configs (#5504)** (e19c37d)
- **fix(agents): key read_file loop detection on its exact line window (#5486)** (582a632)
- **fix(agents): make create_deerflow_agent's subagent limit, summarization and token_budget features take effect (#5488)** (86406cf)
- **fix(tavily): use web_fetch credentials for extraction (#5496)** (7f68fa2)
- **fix(subagents): scale max_turns into the graph's super-step budget (#5485)** (53798b4)
- **fix(client): emit text a later node appends to an AI message already sent (#5479)** (d87a1c1)
- **fix(frontend): keep MCP configuration dialog within viewport (#5492)** (de02eeb)
- **fix(sandbox): default to loopback bind on Docker Desktop for DooD sandboxes (#5446)** (f2857ad)
- **fix(sandbox): prevent AIO subagent session eviction (#5178)** (d8d110c)
- **fix(runtime): keep store-less run history through cleanup (#5453)** (cda56aa)
- **fix(sandbox): cut read_file output at a line boundary and name the next start_line (#5474)** (0efdf8e)
- **fix(gateway): scope edit/regenerate helper fallbacks by data identity (#5483)** (e493390)
- **fix(frontend): scope skill suggestions by agent (#5451)** (a022be1)
- **fix(sandbox): report the line a read_file truncation lands on (#5478)** (49f2197)
- **fix(channels): preserve thread-create lock generation (#5480)** (4387dce)
- **fix(models): preserve FIFO across request-admission handoff (#5459)** (53dde30)
- **fix(subagents): preserve capacity release across repeated cancellation (#5477)** (8e94cc3)
- **fix(goal): wait for the user when a turn ends on an unanswered question (#5467)** (0f2195e)
- **fix(channels): send Telegram messages as rich only when content has rich constructs (#5470)** (a922efe)
- **fix(scheduler): serialize the SQLite launch-budget claim (#5469)** (b0cb3a3)
- **fix: detect browser extra regardless of tool field order (#5456)** (42629c8)
- **fix(sandbox): reject incomplete remote list_dir results (#5422)** (15a9a87)
- **fix(channels): stream-cap and validate WeChat/WeCom inbound media downloads, fixes #5223 (#5225)** (26800d1)
- **fix(sandbox): report an exactly-full AIO glob result as complete (#5449)** (6bab87a)
- **fix(gateway): scope runs read endpoints by data identity, not authorization identity (#5448)** (0745fb2)
- **fix(agents): keep queued guard warnings when a model call is retried (#5433)** (0f2813f)
- **fix(events): keep JSONL lock generation stable across deletion (#5455)** (fc4e0c3)
- **fix(agents): remove provider tool-call blocks when guards strip calls (#5447)** (f7f4a02)
- **fix(subagents): keep the subagent system prompt through context compaction (#5454)** (740dbc4)
- **fix(agents): keep settings dialog within the viewport (#5458)** (6f9a259)
- **fix(frontend): restore user input after stream reconnect (#5428)** (d1f77fc)
- **fix(browser): keep session teardown alive across caller cancellation (#5444)** (b46fb47)
- **fix(sandbox): force UTF-8 console for PowerShell so CJK output is not garbled (#5440)** (93f9ed3)
- **fix(events): drain JSONL mutations before propagating cancellation (#5439)** (6c697f3)
- **fix(sandbox): platform-aware Lark CLI runtime validation for Windows hosts (#5442)** (2536f24)
- **fix(agents): keep token budget signals for runs without a run_id (#5436)** (99902b7)
- **fix(skills): close SkillScan bypasses in the skill review gate (#5431)** (6469833)
- **fix(events): preserve Unicode separators in JSONL event records (#5429)** (f770ecc)
- **fix(mcp): treat a Human Input Card reply as the current user request (#5426)** (ba998a9)
- **fix(goal): stand the goal down once the run has hit its token budget (#5424)** (0a0d768)
- **fix(sandbox): report truncated remote glob and grep results (#5427)** (ed986a1)
- **fix(conversation): clarify reference semantics and keep reader pages inline (#5421)** (6177b07)
- **fix(sandbox): mask every host path in a colon-joined list (#5418)** (1b9667e)
- **fix(sandbox): scope BoxLite grep globs to the search root (#5419)** (18b803f)
- **fix(summarization): keep a Human Input Card reply as the current request (#5416)** (f5cf25a)
- **fix(agents): keep the token budget across goal continuations of a run (#5410)** (96d6ff3)
- **fix(gateway): close two input-sanitization bypasses (#5375)** (bbced51)
- **fix(client): emit streamed tool calls once with complete args (#5408)** (529b0e0)
- **fix(models): reuse the Claude Code OAuth token read from a file descriptor (#5411)** (1dd48d1)
- **fix(sandbox): reverse-resolve forward-slash spellings of Windows host paths (#5373)** (d5ae388)
- **fix(worker): don't fail the parent run on a subagent error carried by task_running (#5407)** (5a3725d)
- **fix(deploy): prevent Git Bash path conversion of default docker socket on Windows (#5400) (#5402)** (f66cb8e)
- **fix(frontend): confirm sidebar chat deletion (#5406)** (c3adc51)
- **fix(models): stop reasoning_effort from reaching the constructor twice (#5403)** (2814bd5)
- **fix(runtime): resolve omitted run owners before idempotent reuse (#5401)** (6f81dae)
- **fix(agents): make read-before-write cancellation lock-safe (#5395)** (dfc8e72)
- **fix(runtime): stop idempotent reuse from blocking the thread on a peer worker (#5393)** (28a8145)
- **fix(video): forward --aspect-ratio into the Gemini Veo request (#5388)** (a5e99ab)
- **fix(firecrawl): pass tool base_url to FirecrawlApp as api_url (#5392)** (b448c02)
- **fix(mcp): isolate pooled sessions by owning event loop (#5396)** (dfe9a52)
- **fix(gateway): make recursion limit configurable (#5390)** (56540fa)
- **fix(frontend): add pointer cursor to interactive controls (#4921)** (98ae762)
- **fix(docker): allow aio DooD socket preflight on Windows Git Bash (#5370) (#5371)** (ce635b7)
- **fix(runtime): keep agent construction off event loop (#5217)** (81f2015)
- **fix(frontend): keep human input cards with their turn (#4892)** (0464502)
- **fix(sandbox): stop remote grep/glob from reporting failures as no matches (#5380)** (3e53694)
- **fix(uploads): bound document outline and preview text (#5323)** (f4e740b)
- **fix(uploads): recognize valid ATX headings in document outlines (#5316)** (b9d6b16)
- **fix(skills): stop persisting resolved secrets when toggling skills (#5357)** (bc4a33a)
- **fix(runtime): add deterministic executor starvation regressions (#5335)** (5e85f8a)
- **fix(sandbox): drain skill sync before cancellation (#5350)** (76d072c)
- **fix(channels): cap WeCom outbound content at the 20480-byte protocol limit (#5148)** (3aa1ac4)
- **fix(subagents): make acceptance checks portable on Windows (#5162)** (bec0acf)
- **fix(gateway): serve XML artifacts as attachments to block same-origin script (#5353)** (806a5bd)
- **fix(scripts): detect the ollama extra from configured models (#5318)** (a201199)
- **fix(tools): run tool assembly off-loop at async entry points (#5224)** (5727449)
- **fix(scheduler): reconcile stuck once tasks from committed run outcome (#5035)** (cd0e74e)
- **fix(scripts): prefer Windows .cmd shims for pnpm (#5305)** (f09e824)
- **fix(web-fetch): resolve relative URLs in extracted Markdown (#5310)** (b809b7b)
- **fix(deps): upgrade transitive xmldom for Dependabot alert 395 (#5352)** (ed8a3ad)
- **fix(agents): isolate loop detection state by run (#5344)** (36ce759)
- **fix(frontend): show agent skill badges with empty tool groups (#5326)** (c35022e)
- **fix(gateway): gate github_token and disable_clarification on internal callers (#5338)** (556975f)
- **fix(frontend): localize Settings load errors (#5337)** (452d09b)
- **fix: localize Chinese docs links (#5275)** (c9c7076)
- **fix(mcp): enforce session pool capacity during promotion (#4962)** (c657370)
- **fix(view-image): read active sandbox images from sandbox (#5306)** (3a6e681)
- **fix(gateway): confine artifact PUT to /mnt/user-data/outputs after path resolution (#5321)** (8e86729)
- **fix(agents): filter assembly descriptor subagent policy by allowed_subagents (#5205) (#5262)** (3e13495)
- **fix(channels): bound Discord outbound cross-loop awaits and restart dead clients, fixes #5226 (#5227)** (37b03a3)
- **fix(infoquest): bound HTTP connect and read waits (#5315)** (0d49253)
- **fix(frontend): preserve trusted message positions through content merge (#5293)** (05432f4)

### Tests
- **test(scripts): align pnpm resolution expectation across platforms (#5519)** (aa1077f)
- **test(workspace): pin composer skill suggestions against an empty catalog (#4063 Phase 4) (#5490)** (3322d93)
- **test(mounts): compare host paths separator-agnostically in provisioner and mount suites (#5413)** (daf32cd)
- **test: skip symlink-planting cases where the host cannot create symlinks (#5414)** (9861c29)
- **test(sandbox): render env-injection probes in the resolved shell's syntax on Windows (#5415)** (a2d417e)
- **test(scripts): resolve Git Bash instead of the WSL launcher for Windows shell-script tests (#5404)** (b1dad24)
- **test(skills): skip the skill-export capture suite where fd-based walking is unavailable (#5372)** (a06688a)
- **test(wechat): skip the POSIX mode-bit half of the auth-state tests on Windows (#5366)** (e92c2c6)
- **test(artifact-archive): make the archive suite platform-correct on Windows (#5365)** (e20b36b)

### Docs
- **docs(changelog): complete the 2.1.0 milestone entries in both languages (#5520)** (849d491)
- **docs(agents): trim restated rationale in the subagent acceptance checklist (#5476)** (8ae8d2b)
- **docs(zh): add the missing Project Membership section to README_zh (#5409)** (bddcd68)
- **docs(config): note use_previous_response_id in the Responses API example (#5359)** (0cf1762)

### Chore
- **chore(release):update the release project version of 2.1.0-rc0 (#5521)** (769589e)
- **chore(discord): best-effort flush thread mappings on stop() + restart regression tests (#5461)** (1d8b6ea)
- **chore(deps): bump next from 16.2.11 to 16.3.3 in /frontend (#5377)** (2752d9c)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/bytedance/deer-flow?utm_source=github-action)._