Original release notes
Introducing Dify Agent *(Experimental)*: A New Agent Experience in Dify
[!WARNING] You should provide Dify Agent services only to trusted, non-malicious users.
As many of you know, the shell-based LLM agent paradigm has brought a major leap in agent capabilities and changed how we think about agents. Meanwhile, Skills provide a standardized way to package and distribute capabilities, making it easier to build powerful agents.
Today, we are experimentally launching Dify Agent. Like other leading agents, it runs in a Linux sandbox. This release includes:
- A builder for creating Dify Agents
- You can build Dify Agents through the UI: set a base prompt, upload Skills and files, and connect tools and knowledge from the Dify ecosystem.
- We also provide an agent that helps you build Dify Agents. Through conversation, it can configure the Linux sandbox environment, install required packages, and create new Skills and files that your Dify Agent can use later.
- Dify Workflow integration for Dify Agent
- You can use an existing Dify Agent in a Dify Workflow, or temporarily create an inline Dify Agent. It will execute the task defined by the workflow node, generate the required output, and pass it to the next node.
- A new web app experience
- The Dify Agent you build can be published and used as a web app. While the user experience remains familiar, it is now powered by Dify Agent.
Docs: https://docs.dify.ai/en/self-host/use-dify/build/new-agent/overview
Limitations
Please note that in the current experimental release, all Dify Agents run in the same sandbox. This means:
- Under normal circumstances, each Dify Agent configures its environment and executes tasks within its own workspace without interfering with others.
- However, with simple instructions, any Dify Agent can read or interfere with the environments and data of other Dify Agents, including user data.
Strict isolation will be implemented in a future release. For now,
[!WARNING] You should provide Dify Agent services only to trusted, non-malicious users.
Similarly, because Dify Agent is not fully ready yet, you may find that some features are not available for Dify Agent. For example, Dify Workflow DSL export is unavailable when the workflow contains nodes that reference Dify Agent.
Upgrade Guide
[!IMPORTANT] - This release includes new database migrations. Run them as part of the upgrade. - Environment variables changed. Review the Environment Variable Changes section and update your
.envaccordingly. - Docker Compose configuration files changed. If you maintain a customizeddocker-compose.yaml, review the changes and re-apply local customizations carefully.
Docker Compose Deployments
- Back up your customized docker-compose YAML and env files.
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
cp .env .env.$(date +%s).bak 2>/dev/null || true
2. Get the latest code for the `1.16.0-rc1` release.
git fetch --tags git checkout 1.16.0-rc1
- Stop the services (run inside the
dockerdirectory).
docker compose down
4. Back up data.
tar -cvf volumes-$(date +%s).tgz volumes
- Review any env file changes and re-apply local customizations.
- Upgrade services.
docker compose up -d
### Source Code Deployments
1. Stop the API server, Worker, and Web frontend server.
2. Get the latest code for the `1.16.0-rc1` release.
git fetch --tags git checkout 1.16.0-rc1
- Update Python dependencies.
cd api
uv sync
4. Run database migrations.
uv run flask db upgrade
- Restart the API server, Worker, and Web frontend server. To experiment with the new agent feature, you also need to start dify-agent and shellctl. Important: shellctl does not include builtin authentication - for security, it is strongly recommended to run it inside a container.
What's Changed
- chore(api): surface pyrefly output on type-check failures by @QuantumGhost in https://github.com/langgenius/dify/pull/37934
- test: replace logger mock with caplog in workflow collaboration test by @ojasarora77 in https://github.com/langgenius/dify/pull/37971
- ci: emit pyrefly diagnostics as GitHub workflow commands by @ojasarora77 in https://github.com/langgenius/dify/pull/37974
- refactor(api): migrate response contract tooling to BaseModel by @cqjjjzr in https://github.com/langgenius/dify/pull/37950
- fix(cli): use a(n) article in difyctl prerelease warning by @GareArc in https://github.com/langgenius/dify/pull/37976
- fix(api): require edit access for trace config changes by @laipz8200 in https://github.com/langgenius/dify/pull/37973
- feat(webapp): display app description on chat and text-generation app screens by @kurokobo in https://github.com/langgenius/dify/pull/37345
- fix: decouple deployment access control dialog by @hyoban in https://github.com/langgenius/dify/pull/37936
- refactor(tests): use caplog in workflow collaboration service tests (#37468) by @hikariming in https://github.com/langgenius/dify/pull/37991
- fix(web): make marketplace URL builder SSR-safe by @lyzno1 in https://github.com/langgenius/dify/pull/37944
- refactor: simplify deployment access ownership by @hyoban in https://github.com/langgenius/dify/pull/37994
- refactor: Use pytest caplog instead of logger patching in test_spec.py by @DevCube24 in https://github.com/langgenius/dify/pull/37997
- refactor: align deployment detail state ownership by @hyoban in https://github.com/langgenius/dify/pull/38008
- fix: isolate node selector keyboard events by @lyzno1 in https://github.com/langgenius/dify/pull/37998
- fix(web): keep HITL input-field save button visible in the edit dialog by @manan-tech in https://github.com/langgenius/dify/pull/38007
- refactor(api): enforce enums over string literals on openapi surface by @GareArc in https://github.com/langgenius/dify/pull/38009
- chore: migrate account role test to testcontainers by @escape0707 in https://github.com/langgenius/dify/pull/38010
- refactor: pass db session into service calls (#37403) by @xiejl001 in https://github.com/langgenius/dify/pull/38016
- feat(api): cache workflow provider configurations by @linw1995 in https://github.com/langgenius/dify/pull/37980
- fix(web): capture blog UTM/slug attribution reliably under CSP by @CodingOnStar in https://github.com/langgenius/dify/pull/38022
- fix: plugin installation task popover layout when some failed too long by @hjlarry in https://github.com/langgenius/dify/pull/38000
- feat(web): add customizable input placeholder for Agent/Chatflow/Chatbot web app by @CyberPU2099 in https://github.com/langgenius/dify/pull/37790
- refactor: replace patch logger with caplog in test_version.py by @EvanYao826 in https://github.com/langgenius/dify/pull/38029
- docs(web): fix testing guide link by @Harsh23Kashyap in https://github.com/langgenius/dify/pull/38006
- feat(agent-v2): sync nightly updates to main (2026-06-25) by @BeautyyuYanli in https://github.com/langgenius/dify/pull/37915
- chore: inject session by @asukaminato0721 in https://github.com/langgenius/dify/pull/37941
- fix(web): download markdown file-preview links as attachments by @uxgnod in https://github.com/langgenius/dify/pull/38030
- chore(i18n): sync translations with en-US by @github-actions[bot] in https://github.com/langgenius/dify/pull/38035
- fix: remove aria-busy from loading button by @lyzno1 in https://github.com/langgenius/dify/pull/38036
- fix: improve members role chip accessibility by @lyzno1 in https://github.com/langgenius/dify/pull/38037
- fix: improve workflow run archive idempotency and batching by @41tair in https://github.com/langgenius/dify/pull/38027
- refactor(web): organize deployment feature state by @hyoban in https://github.com/langgenius/dify/pull/38065
- fix: prevent exiting toasts from blocking page clicks by @lyzno1 in https://github.com/langgenius/dify/pull/38063
- fix: gate deployments in route layout by @lyzno1 in https://github.com/langgenius/dify/pull/38078
- refactor: shell provider protocol by @wylswz in https://github.com/langgenius/dify/pull/38077
- fix: simplify scroll area composition by @lyzno1 in https://github.com/langgenius/dify/pull/38113
- fix(web): improve main nav focus outline by @lyzno1 in https://github.com/langgenius/dify/pull/38114
- fix: CAN_REPLACE_LOGO should be false by @fatelei in https://github.com/langgenius/dify/pull/38126
- chore: update deps by @hyoban in https://github.com/langgenius/dify/pull/38128
- chore: downgrade openapi-ts by @hyoban in https://github.com/langgenius/dify/pull/38141
- fix: support Unicode characters in form field names by @WTW0313 in https://github.com/langgenius/dify/pull/38138
- feat: refine snippet siderbar and support RBAC. by @FFXN in https://github.com/langgenius/dify/pull/38134
- fix(web): align web app nav item width by @lyzno1 in https://github.com/langgenius/dify/pull/38146
- fix(api): isolate side-effect database writes by @lin-hongkuan in https://github.com/langgenius/dify/pull/37895
- fix(api): wire dedicated timeout into inner RBAC requests by @GareArc in https://github.com/langgenius/dify/pull/38150
- fix: multimodal segment attachment indexing by @Blackoutta in https://github.com/langgenius/dify/pull/38080
- fix: agent app log detail modal not display well by @hjlarry in https://github.com/langgenius/dify/pull/38014
- fix(vdb): remove deprecated SQL options for ADB-PG 7.0 compatibility by @shiyuanfang2nd in https://github.com/langgenius/dify/pull/38004
- fix: editor should not query billing subscriptions by @hjlarry in https://github.com/langgenius/dify/pull/38157
- perf(api): retrieve published workflows via app.workflow_id by @linw1995 in https://github.com/langgenius/dify/pull/38153
- fix: editor can view the logs by @hjlarry in https://github.com/langgenius/dify/pull/38165
- perf: make command rbac-migrate-member-roles use less mem and make it... by @fatelei in https://github.com/langgenius/dify/pull/38151
- fix(api): skip uuidv7() creation when PostgreSQL 18 provides it natively by @zeeshan56656 in https://github.com/langgenius/dify/pull/36998
- feat(mcp): support dynamic HTTP request headers in MCPClient by @Sanket2329 in https://github.com/langgenius/dify/pull/37938
- chore(i18n): update role management permission keys for multiple languages by @WTW0313 in https://github.com/langgenius/dify/pull/38186
- fix: update documentation links in permission set and role modals by @WTW0313 in https://github.com/langgenius/dify/pull/38188
- test(e2e): add agent v2 test infrastructure by @lyzno1 in https://github.com/langgenius/dify/pull/38191
- feat: support dataset permission migrate to rbac by @fatelei in https://github.com/langgenius/dify/pull/38166
- chore: inject more db.session by @asukaminato0721 in https://github.com/langgenius/dify/pull/38045
- fix(workflow): guard on_tool_execution stdout traces behind DEBUG by @MRZHUH in https://github.com/langgenius/dify/pull/38200
- fix: stress test setup process and report structure workflow for Dify 1.15.0+ by @Blackoutta in https://github.com/langgenius/dify/pull/38194
- fix: debug plugin permission setting not work by @hjlarry in https://github.com/langgenius/dify/pull/38197
- chore(dify-ui): update theme tokens by @lyzno1 in https://github.com/langgenius/dify/pull/38189
- fix(api): scope nested resource lookups by owner refs by @WH-2099 in https://github.com/langgenius/dify/pull/38177
- fix(api): register rbac-migrate-dataset-permissions CLI command by @GareArc in https://github.com/langgenius/dify/pull/38204
- fix(api): Fixing API contract generation infrastructure by @cqjjjzr in https://github.com/langgenius/dify/pull/38042
- fix(api): prevent plugin provider cache stampedes by @VeraPyuyi in https://github.com/langgenius/dify/pull/37388
- perf(web): improve vinext home startup time by @hyoban in https://github.com/langgenius/dify/pull/38219
- fix(web): hide deployment access tab by @hyoban in https://github.com/langgenius/dify/pull/38222
- fix(web): hide deployment access sidebar tab by @hyoban in https://github.com/langgenius/dify/pull/38229
- perf(web): lazy load console contract shards by @hyoban in https://github.com/langgenius/dify/pull/38230
- fix(api): avoid infinite loop in _delete_records when batch deletion fails by @p2003722 in https://github.com/langgenius/dify/pull/38118
- refactor(web): migrate console contracts to generated types by @hyoban in https://github.com/langgenius/dify/pull/38231
- feat(workflow-generator): enhance the AI auto-creation flow end-to-end by @crazywoola in https://github.com/langgenius/dify/pull/38175
- chore(i18n): sync translations with en-US by @github-actions[bot] in https://github.com/langgenius/dify/pull/38239
- build(deps): bump pydantic-ai-slim from 1.85.1 to 1.102.0 in /dify-agent by @dependabot[bot] in https://github.com/langgenius/dify/pull/38135
- fix: handle integration marketplace install callbacks by @Jingyi-Dify in https://github.com/langgenius/dify/pull/38236
- chore(agent-v2): sync daily changes by @lyzno1 in https://github.com/langgenius/dify/pull/38162
- refactor(web): migrate console contracts to generated routes by @hyoban in https://github.com/langgenius/dify/pull/38233
- refactor(web): decouple detail sidebars from main nav by @hyoban in https://github.com/langgenius/dify/pull/38241
- refactor: pass db.session explicitly in DatasetIndexToolCallbackHandler by @sergioperezcheco in https://github.com/langgenius/dify/pull/38082
- refactor: use Pydantic for sensitive word avoidance config (Fixes #37... by @escapefyh in https://github.com/langgenius/dify/pull/37660
- fix: order main nav account classes by @hjlarry in https://github.com/langgenius/dify/pull/38251
- chore(github): add e2e labeler and code owner by @lyzno1 in https://github.com/langgenius/dify/pull/38257
- fix(web): improve card grid responsiveness by @hyoban in https://github.com/langgenius/dify/pull/38263
- chore: remove useless tag params logic in use effect by @iamjoel in https://github.com/langgenius/dify/pull/38269

