{"slug": "a-new-agent-and-nothing-else-moved", "title": "A new agent, and nothing else moved", "summary": "A developer added DeepSeek as the tenth agent in the OpenSpec-UI project by writing a single new file, deepseek-acp.ts, that implements the shared AgentAdapter interface over the Agent Client Protocol, with no changes needed in either the standalone app or the VS Code extension. Testing the integration surfaced two undocumented behaviors: dsh exits with code 0 and no output on Node 22.11 (working on Node 24.18), and the agent reports no usage data, so only time-based spending ceilings apply. The author notes DeepSeek responds best to literal, step-by-step instructions and now prepends a preamble to every prompt.", "body_md": "*First published on [openspec-ui.dev](https://openspec-ui.dev/articles/a-new-agent-and-nothing-else-moved/).*\n\nThe last article argued that a shared core is what keeps a VS Code extension\n\nand a web app from drifting apart. Two days after it went out, a new agent\n\narrived, and it is as good a test of that argument as any: DeepSeek, over the\n\nAgent Client Protocol, requested by the owner and added the same day.\n\nOne new file, `deepseek-acp.ts`, implementing the same `AgentAdapter`\n\ninterface every other agent implements. It runs `dsh --profile acp`, the\n\nDeepSeek CLI's own Agent Client Protocol mode, through the driver the other\n\nACP-flavored adapters already share. It is added to the registry, allowed by\n\nthe default allowlist for exactly those arguments, and detected on `PATH` like\n\nevery other agent. Neither host's code changed. Both the standalone\n\napplication and the VS Code extension picked it up because both read the same\n\nregistry.\n\nDeepSeek is the tenth agent, and the fifth that speaks ACP, beside Claude,\n\nCopilot, Codex and Gemini.\n\n`initialize` answers as `deepseek-harness-acp`, with no auth method to run:\n\nthe key lives in the person's own `dsh` profile, never in this project.\n\n`session/new` offers DeepSeek-V4-Flash as the default model and\n\nDeepSeek-V4-Pro as an option, though nothing here sends that option yet, so\n\nV4-Flash is what runs.\n\nTwo things worth a person's attention, both found by running it rather than\n\nby reading its documentation.\n\n**On Node 22.11, `dsh` exits with code 0 before answering, saying nothing at\nall.** This repository pins Node 22.11 with Volta for its own tooling, and\n\nVolta puts it first on the `PATH` of anything it starts, including an agent\n\nCLI. The same run on Node 24.18 completed. \"ACP connection closed\" is not a\n\nsentence a person can act on, so a run that ends this way is now told which\n\nNode it met and that a newer one is needed on the `PATH` a host starts agents\n\nwith.\n\n**It reports no usage at all.** The live run sent no `usage_update` and no\n\nusage figure on its answer, so a spending ceiling over `deepseek-cli-acp`\n\ncounts nothing and cannot fire, the same as over five of the other nine\n\nagents. Only a time ceiling has any force over it.\n\nThe owner has used DeepSeek enough to know it does best with instructions\n\ntaken literally, one at a time, rather than left to infer how strictly to\n\nread what follows. So every prompt to it now opens with a short preamble:\n\nfollow the steps in order, do exactly what each one asks, name a step as it\n\nfinishes, and stop and say why rather than improvise if a step cannot be done\n\nas written.\n\nWhat it does not do yet: choose a model. DeepSeek's model is an Agent Client\n\nProtocol session option (`session/set_config_option`), and nothing in this\n\nproject's shared driver sends session options. Whichever model `dsh` defaults\n\nto is the one that runs. Fixing the Node a host starts agents with is also out\n\nof reach from here: the product cannot choose what is on someone's `PATH`; it\n\ncan only say which one it met.\n\nAdding a tenth agent is not, by itself, news. What is worth a reader's time is\n\nthat adding it stayed inside the one package the architecture says it should:\n\n`core`, and nowhere else. An implement run against this same change wrote its\n\nown file and ticked its own task in 22 seconds, over the very mechanism the\n\narticle describes.\n\nThe code is at\n\n[github.com/VeryComplexAndLongName/OpenSpec-UI](https://github.com/VeryComplexAndLongName/OpenSpec-UI),\n\nwhere the repository and packages keep the name OpenSpec-UI. The architecture\n\nthis rests on is in\n\n[One core, two hosts](https://openspec-ui.dev/articles/one-core-two-hosts/).\n\n`initialize`/` session/new` answers, the Node 22.11\nexit and its explanation, and the preamble:\n`packages/core/src/agents/deepseek-acp.ts`` deepseek-joins-as-an-acp-agent``HARNESS.md`'s own row for `deepseek-cli-acp`.", "url": "https://wpnews.pro/news/a-new-agent-and-nothing-else-moved", "canonical_source": "https://dev.to/someone_somewhere_05cad9e/a-new-agent-and-nothing-else-moved-5hca", "published_at": "2026-10-01 02:40:01+00:00", "updated_at": "2026-10-01 02:46:29.591042+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["DeepSeek", "OpenSpec-UI", "Agent Client Protocol", "VS Code", "Claude", "Copilot", "Codex", "Gemini"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/a-new-agent-and-nothing-else-moved", "markdown": "https://wpnews.pro/news/a-new-agent-and-nothing-else-moved.md", "text": "https://wpnews.pro/news/a-new-agent-and-nothing-else-moved.txt", "jsonld": "https://wpnews.pro/news/a-new-agent-and-nothing-else-moved.jsonld"}}