# Plan-Mode ACP Agent App Composition The plan-mode demo composes session modes onto the ACP server: the editor mode picker drives plan mode, and the model exits through the user-reviewed exit_plan_mode tool. ```mermaid flowchart LR cfg["examples/plan-acp-agent
cordis.yml"] plugin_plan-acp_llm_deepseek["llm-deepseek
@deepseek-ai/dsh-llm-deepseek"] cfg --> plugin_plan-acp_llm_deepseek plugin_plan-acp_acp_agent["acp-agent
@deepseek-ai/dsh-acp-agent"] cfg --> plugin_plan-acp_acp_agent plugin_plan-acp_acp_agent --> bundle_agent_core["@deepseek-ai/dsh-agent-core"] plugin_plan-acp_acp_agent --> bundle_jsonl["@deepseek-ai/dsh-session-persistence-jsonl"] plugin_plan-acp_acp_agent --> frontdoor_acp["@deepseek-ai/dsh-acp
JSON-RPC stdio bridge
sessions created by client"] bundle_agent_core --> spine_llm["ctx.llm"] bundle_agent_core --> spine_sessions["ctx.sessions"] bundle_agent_core --> spine_tools["ctx.tools + tool-bash"] bundle_agent_core --> spine_loop["ctx.agents + ctx.agentLoop"] plugin_plan-acp_mode["mode
@deepseek-ai/dsh-mode"] cfg --> plugin_plan-acp_mode plugin_plan-acp_fs_local["fs-local
@deepseek-ai/dsh-fs-local"] cfg --> plugin_plan-acp_fs_local plugin_plan-acp_fs_policy["fs-policy
@deepseek-ai/dsh-fs-policy"] cfg --> plugin_plan-acp_fs_policy plugin_plan-acp_tool_fs["tool-fs
@deepseek-ai/dsh-tool-fs"] cfg --> plugin_plan-acp_tool_fs plugin_plan-acp_tool_todo["tool-todo
@deepseek-ai/dsh-tool-todo"] cfg --> plugin_plan-acp_tool_todo ``` | Plugin id | Package / module | | --- | --- | | `llm-deepseek` | `@deepseek-ai/dsh-llm-deepseek` | | `acp-agent` | `@deepseek-ai/dsh-acp-agent` | | `mode` | `@deepseek-ai/dsh-mode` | | `fs-local` | `@deepseek-ai/dsh-fs-local` | | `fs-policy` | `@deepseek-ai/dsh-fs-policy` | | `tool-fs` | `@deepseek-ai/dsh-tool-fs` | | `tool-todo` | `@deepseek-ai/dsh-tool-todo` | Source config: [`examples/plan-acp-agent/cordis.yml`](cordis.yml). Maintenance mode: hybrid: the leaf plugin list is parsed from its `cordis.yml`; app package expansion is curated from package source.