# Echo Agent App Composition The echo demo swaps in a local mock LLM and teaching echo tool, then loads the stdio app package for the shared spine and terminal front door. ```mermaid flowchart LR cfg["examples/echo-agent
cordis.yml"] plugin_echo_hmr["hmr
@cordisjs/plugin-hmr"] cfg --> plugin_echo_hmr plugin_echo_mock_llm["mock-llm
./src/mock-llm.ts"] cfg --> plugin_echo_mock_llm plugin_echo_echo_tool["echo-tool
./src/echo-tool.ts"] cfg --> plugin_echo_echo_tool plugin_echo_bash["bash
@deepseek-ai/dsh-bash-local"] cfg --> plugin_echo_bash plugin_echo_fs_local["fs-local
@deepseek-ai/dsh-fs-local"] cfg --> plugin_echo_fs_local plugin_echo_stdio_agent["stdio-agent
@deepseek-ai/dsh-stdio-demo"] cfg --> plugin_echo_stdio_agent plugin_echo_stdio_agent --> bundle_agent_core["@deepseek-ai/dsh-agent-spine-demo"] plugin_echo_stdio_agent --> bundle_jsonl["@deepseek-ai/dsh-session-persistence-jsonl"] plugin_echo_stdio_agent --> frontdoor_stdio["readline UI
console logger
pre-created main agent"] 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 id | Package / module | | --- | --- | | `hmr` | `@cordisjs/plugin-hmr` | | `mock-llm` | `./src/mock-llm.ts` | | `echo-tool` | `./src/echo-tool.ts` | | `bash` | `@deepseek-ai/dsh-bash-local` | | `fs-local` | `@deepseek-ai/dsh-fs-local` | | `stdio-agent` | `@deepseek-ai/dsh-stdio-demo` | Source config: [`examples/echo-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.